From 0caf47a728bf04109805e065e115b1eb408fd79b Mon Sep 17 00:00:00 2001 From: Karrar Date: Wed, 27 Mar 2024 22:26:13 +0300 Subject: [PATCH] auto --- CHANGELOG.md | 134 + CHANGELOG.md.meta | 7 + Documentation.meta | 8 + Documentation/API Documentation.url | 5 + Documentation/API Documentation.url.meta | 7 + Documentation/Discord.url | 6 + Documentation/Discord.url.meta | 7 + Documentation/Documentation.url | 6 + Documentation/Documentation.url.meta | 7 + Documentation/Offline Documentation.pdf | Bin 0 -> 405532 bytes Documentation/Offline Documentation.pdf.meta | 7 + Netick.meta | 8 + Netick/Editor Resources.meta | 8 + Netick/Editor Resources/Gizmos.meta | 8 + Netick/Editor Resources/Gizmos/Netick.meta | 8 + .../Gizmos/Netick/Network Icon.png | Bin 0 -> 65212 bytes .../Gizmos/Netick/Network Icon.png.meta | 134 + .../Gizmos/Netick/NetworkHitbox Icon.png | Bin 0 -> 48264 bytes .../Gizmos/Netick/NetworkHitbox Icon.png.meta | 134 + .../Gizmos/Netick/NetworkObject Icon.png | Bin 0 -> 51761 bytes .../Gizmos/Netick/NetworkObject Icon.png.meta | 134 + .../Gizmos/Netick/NetworkTransform Icon.png | Bin 0 -> 49857 bytes .../Netick/NetworkTransform Icon.png.meta | 134 + Netick/Editor.meta | 8 + Netick/Editor/CodeGen.meta | 8 + Netick/Editor/CodeGen/AssemblyInfo.cs | 12 + Netick/Editor/CodeGen/AssemblyInfo.cs.meta | 11 + Netick/Editor/CodeGen/CodeGen.cs | 69 + Netick/Editor/CodeGen/CodeGen.cs.meta | 11 + .../Unity.Netick.Helper.CodeGen.asmdef | 25 + .../Unity.Netick.Helper.CodeGen.asmdef.meta | 7 + Netick/Editor/Netick.CodeGen.dll | Bin 0 -> 47104 bytes Netick/Editor/Netick.CodeGen.dll.meta | 33 + Netick/Editor/Netick.Unity.Editor.dll | Bin 0 -> 61440 bytes Netick/Editor/Netick.Unity.Editor.dll.meta | 33 + Netick/Editor/Netick.Unity.Pro.Editor.dll | Bin 0 -> 8192 bytes Netick/Editor/Resources.meta | 8 + Netick/Editor/Resources/NetickBanner.png | Bin 0 -> 21723 bytes Netick/Editor/Resources/NetickBanner.png.meta | 136 + Netick/Editor/Unity.Netick.CodeGen.dll | Bin 0 -> 22016 bytes Netick/Editor/Unity.Netick.CodeGen.dll.meta | 33 + Netick/Runtime.meta | 8 + Netick/Runtime/Native Sockets.meta | 8 + .../Native Sockets/libnanosockets.bundle | Bin 0 -> 14744 bytes .../Native Sockets/libnanosockets.bundle.meta | 88 + .../Runtime/Native Sockets/libnanosockets.so | Bin 0 -> 17992 bytes .../Native Sockets/libnanosockets.so.meta | 101 + Netick/Runtime/Native Sockets/nanosockets.dll | Bin 0 -> 52605 bytes .../Native Sockets/nanosockets.dll.meta | 101 + Netick/Runtime/Netick.Pro.dll | Bin 0 -> 28672 bytes Netick/Runtime/Netick.Unity.Pro.dll | Bin 0 -> 15360 bytes Netick/Runtime/Netick.Unity.dll | Bin 0 -> 122368 bytes Netick/Runtime/Netick.Unity.dll.meta | 33 + Netick/Runtime/Netick.Unity.xml | 677 ++ Netick/Runtime/Netick.Unity.xml.meta | 7 + Netick/Runtime/Netick.dll | Bin 0 -> 235008 bytes Netick/Runtime/Netick.dll.meta | 33 + Netick/Runtime/Netick.xml | 441 + Netick/Runtime/Netick.xml.meta | 7 + README.md | 69 + README.md.meta | 7 + Resources.meta | 8 + Resources/netickConfig.asset | 46 + Resources/netickConfig.asset.meta | 8 + Resources/netickConfigDefault.asset | 72 + Resources/netickConfigDefault.asset.meta | 8 + Samples~/Bomberman.meta | 8 + Samples~/Bomberman/Materials.meta | 8 + Samples~/Bomberman/Materials/Mat1.mat | 80 + Samples~/Bomberman/Materials/Mat1.mat.meta | 8 + Samples~/Bomberman/Materials/Mat2.mat | 83 + Samples~/Bomberman/Materials/Mat2.mat.meta | 8 + Samples~/Bomberman/Materials/Mat3.mat | 78 + Samples~/Bomberman/Materials/Mat3.mat.meta | 8 + Samples~/Bomberman/Materials/Mat4.mat | 83 + Samples~/Bomberman/Materials/Mat4.mat.meta | 8 + Samples~/Bomberman/Materials/Mat5.mat | 80 + Samples~/Bomberman/Materials/Mat5.mat.meta | 8 + Samples~/Bomberman/Network Prefabs.meta | 8 + .../Bomberman/Network Prefabs/Bomb.prefab | 167 + .../Network Prefabs/Bomb.prefab.meta | 7 + .../Network Prefabs/Bomberman Player.prefab | 210 + .../Bomberman Player.prefab.meta | 7 + .../Network Prefabs/DestroyableBlock.prefab | 165 + .../DestroyableBlock.prefab.meta | 7 + .../Bomberman/Network Prefabs/Power Up.prefab | 166 + .../Network Prefabs/Power Up.prefab.meta | 7 + Samples~/Bomberman/Prefabs.meta | 8 + .../Prefabs/Bomberman Sandbox Prefab.prefab | 65 + .../Bomberman Sandbox Prefab.prefab.meta | 7 + .../Bomberman/Prefabs/UIServerElement.prefab | 432 + .../Prefabs/UIServerElement.prefab.meta | 7 + Samples~/Bomberman/Scenes.meta | 8 + Samples~/Bomberman/Scenes/Bomberman.unity | 7201 +++++++++++++++ .../Bomberman/Scenes/Bomberman.unity.meta | 7 + Samples~/Bomberman/Scenes/BombermanLAN.unity | 7759 +++++++++++++++++ .../Bomberman/Scenes/BombermanLAN.unity.meta | 7 + Samples~/Bomberman/Scripts.meta | 8 + Samples~/Bomberman/Scripts/Block.cs | 25 + Samples~/Bomberman/Scripts/Block.cs.meta | 11 + Samples~/Bomberman/Scripts/Bomb.cs | 87 + Samples~/Bomberman/Scripts/Bomb.cs.meta | 11 + .../Bomberman/Scripts/BombermanController.cs | 137 + .../Scripts/BombermanController.cs.meta | 11 + .../Scripts/BombermanEventsHandler.cs | 191 + .../Scripts/BombermanEventsHandler.cs.meta | 11 + Samples~/Bomberman/Scripts/BombermanInput.cs | 12 + .../Bomberman/Scripts/BombermanInput.cs.meta | 11 + Samples~/Bomberman/Scripts/PowerUp.cs | 54 + Samples~/Bomberman/Scripts/PowerUp.cs.meta | 11 + Samples~/Bomberman/Scripts/UI.meta | 8 + .../Bomberman/Scripts/UI/UIServerBroweser.cs | 49 + .../Scripts/UI/UIServerBroweser.cs.meta | 11 + .../Bomberman/Scripts/UI/UIServerElement.cs | 39 + .../Scripts/UI/UIServerElement.cs.meta | 11 + Samples~/First Person Shooter.meta | 8 + .../FPS Scene Terrain.asset | Bin 0 -> 557092 bytes .../FPS Scene Terrain.asset.meta | 8 + Samples~/First Person Shooter/Materials.meta | 8 + .../First Person Shooter/Materials/Ground.mat | 80 + .../Materials/Ground.mat.meta | 8 + .../First Person Shooter/Network Prefabs.meta | 8 + .../Network Prefabs/FPS Player.prefab | 270 + .../Network Prefabs/FPS Player.prefab.meta | 7 + Samples~/First Person Shooter/Scenes.meta | 8 + .../Scenes/FPS Scene.unity | 798 ++ .../Scenes/FPS Scene.unity.meta | 7 + Samples~/First Person Shooter/Scripts.meta | 8 + .../Scripts/FPSController.cs | 120 + .../Scripts/FPSController.cs.meta | 11 + .../Scripts/FPSEventsHandler.cs | 30 + .../Scripts/FPSEventsHandler.cs.meta | 11 + .../First Person Shooter/Scripts/FPSInput.cs | 12 + .../Scripts/FPSInput.cs.meta | 11 + Samples~/First Person Shooter/Textures.meta | 8 + .../Textures/CheckerTexture.png | Bin 0 -> 68831 bytes .../Textures/CheckerTexture.png.meta | 122 + .../Textures/Crossharis.png | Bin 0 -> 1407 bytes .../Textures/Crossharis.png.meta | 124 + Scripts.meta | 8 + Scripts/GameStarter.cs | 125 + Scripts/GameStarter.cs.meta | 11 + Scripts/NetworkInfo.cs | 33 + Scripts/NetworkInfo.cs.meta | 11 + Third-Party-Notices.txt | 51 + Third-Party-Notices.txt.meta | 7 + Transport.meta | 8 + Transport/LiteNetLib Transport.meta | 8 + .../LiteNetLib Transport/LiteNetLib.asmdef | 13 + .../LiteNetLib.asmdef.meta | 7 + .../LiteNetLib Transport/LiteNetLib.meta | 8 + .../LiteNetLib/BaseChannel.cs | 48 + .../LiteNetLib/BaseChannel.cs.meta | 11 + .../LiteNetLib/ConnectionRequest.cs | 134 + .../LiteNetLib/ConnectionRequest.cs.meta | 11 + .../LiteNetLib/INetEventListener.cs | 272 + .../LiteNetLib/INetEventListener.cs.meta | 11 + .../LiteNetLib/InternalPackets.cs | 133 + .../LiteNetLib/InternalPackets.cs.meta | 11 + .../LiteNetLib/Layers.meta | 8 + .../LiteNetLib/Layers/Crc32cLayer.cs | 41 + .../LiteNetLib/Layers/Crc32cLayer.cs.meta | 11 + .../LiteNetLib/Layers/PacketLayerBase.cs | 17 + .../LiteNetLib/Layers/PacketLayerBase.cs.meta | 11 + .../LiteNetLib/Layers/XorEncryptLayer.cs | 60 + .../LiteNetLib/Layers/XorEncryptLayer.cs.meta | 11 + .../LiteNetLib/NatPunchModule.cs | 258 + .../LiteNetLib/NatPunchModule.cs.meta | 11 + .../LiteNetLib/NativeSocket.cs | 301 + .../LiteNetLib/NativeSocket.cs.meta | 11 + .../LiteNetLib/NetConstants.cs | 75 + .../LiteNetLib/NetConstants.cs.meta | 11 + .../LiteNetLib/NetDebug.cs | 92 + .../LiteNetLib/NetDebug.cs.meta | 11 + .../LiteNetLib/NetManager.PacketPool.cs | 82 + .../LiteNetLib/NetManager.PacketPool.cs.meta | 11 + .../LiteNetLib/NetManager.Socket.cs | 728 ++ .../LiteNetLib/NetManager.Socket.cs.meta | 11 + .../LiteNetLib/NetManager.cs | 1821 ++++ .../LiteNetLib/NetManager.cs.meta | 11 + .../LiteNetLib/NetPacket.cs | 160 + .../LiteNetLib/NetPacket.cs.meta | 11 + .../LiteNetLib/NetPeer.cs | 1398 +++ .../LiteNetLib/NetPeer.cs.meta | 11 + .../LiteNetLib/NetStatistics.cs | 81 + .../LiteNetLib/NetStatistics.cs.meta | 11 + .../LiteNetLib/NetUtils.cs | 190 + .../LiteNetLib/NetUtils.cs.meta | 11 + .../LiteNetLib/PausedSocketFix.cs | 57 + .../LiteNetLib/PausedSocketFix.cs.meta | 11 + .../LiteNetLib/PooledPacket.cs | 32 + .../LiteNetLib/PooledPacket.cs.meta | 11 + .../LiteNetLib/ReliableChannel.cs | 337 + .../LiteNetLib/ReliableChannel.cs.meta | 11 + .../LiteNetLib/SequencedChannel.cs | 114 + .../LiteNetLib/SequencedChannel.cs.meta | 11 + .../LiteNetLib/Utils.meta | 8 + .../LiteNetLib/Utils/CRC32C.cs | 150 + .../LiteNetLib/Utils/CRC32C.cs.meta | 11 + .../LiteNetLib/Utils/FastBitConverter.cs | 175 + .../LiteNetLib/Utils/FastBitConverter.cs.meta | 11 + .../LiteNetLib/Utils/INetSerializable.cs | 8 + .../LiteNetLib/Utils/INetSerializable.cs.meta | 11 + .../LiteNetLib/Utils/NetDataReader.cs | 673 ++ .../LiteNetLib/Utils/NetDataReader.cs.meta | 11 + .../LiteNetLib/Utils/NetDataWriter.cs | 381 + .../LiteNetLib/Utils/NetDataWriter.cs.meta | 11 + .../LiteNetLib/Utils/NetPacketProcessor.cs | 267 + .../Utils/NetPacketProcessor.cs.meta | 11 + .../LiteNetLib/Utils/NetSerializer.cs | 738 ++ .../LiteNetLib/Utils/NetSerializer.cs.meta | 11 + .../LiteNetLib/Utils/NtpPacket.cs | 423 + .../LiteNetLib/Utils/NtpPacket.cs.meta | 11 + .../LiteNetLib/Utils/NtpRequest.cs | 42 + .../LiteNetLib/Utils/NtpRequest.cs.meta | 11 + .../LiteNetLib/package.json | 11 + .../LiteNetLib/package.json.meta | 7 + .../LiteNetLibTransportProvider.asset | 14 + .../LiteNetLibTransportProvider.asset.meta | 8 + .../LiteNetLibTransportProvider.cs | 279 + .../LiteNetLibTransportProvider.cs.meta | 11 + package.json | 33 + package.json.meta | 7 + 223 files changed, 32253 insertions(+) create mode 100644 CHANGELOG.md create mode 100644 CHANGELOG.md.meta create mode 100644 Documentation.meta create mode 100644 Documentation/API Documentation.url create mode 100644 Documentation/API Documentation.url.meta create mode 100644 Documentation/Discord.url create mode 100644 Documentation/Discord.url.meta create mode 100644 Documentation/Documentation.url create mode 100644 Documentation/Documentation.url.meta create mode 100644 Documentation/Offline Documentation.pdf create mode 100644 Documentation/Offline Documentation.pdf.meta create mode 100644 Netick.meta create mode 100644 Netick/Editor Resources.meta create mode 100644 Netick/Editor Resources/Gizmos.meta create mode 100644 Netick/Editor Resources/Gizmos/Netick.meta create mode 100644 Netick/Editor Resources/Gizmos/Netick/Network Icon.png create mode 100644 Netick/Editor Resources/Gizmos/Netick/Network Icon.png.meta create mode 100644 Netick/Editor Resources/Gizmos/Netick/NetworkHitbox Icon.png create mode 100644 Netick/Editor Resources/Gizmos/Netick/NetworkHitbox Icon.png.meta create mode 100644 Netick/Editor Resources/Gizmos/Netick/NetworkObject Icon.png create mode 100644 Netick/Editor Resources/Gizmos/Netick/NetworkObject Icon.png.meta create mode 100644 Netick/Editor Resources/Gizmos/Netick/NetworkTransform Icon.png create mode 100644 Netick/Editor Resources/Gizmos/Netick/NetworkTransform Icon.png.meta create mode 100644 Netick/Editor.meta create mode 100644 Netick/Editor/CodeGen.meta create mode 100644 Netick/Editor/CodeGen/AssemblyInfo.cs create mode 100644 Netick/Editor/CodeGen/AssemblyInfo.cs.meta create mode 100644 Netick/Editor/CodeGen/CodeGen.cs create mode 100644 Netick/Editor/CodeGen/CodeGen.cs.meta create mode 100644 Netick/Editor/CodeGen/Unity.Netick.Helper.CodeGen.asmdef create mode 100644 Netick/Editor/CodeGen/Unity.Netick.Helper.CodeGen.asmdef.meta create mode 100644 Netick/Editor/Netick.CodeGen.dll create mode 100644 Netick/Editor/Netick.CodeGen.dll.meta create mode 100644 Netick/Editor/Netick.Unity.Editor.dll create mode 100644 Netick/Editor/Netick.Unity.Editor.dll.meta create mode 100644 Netick/Editor/Netick.Unity.Pro.Editor.dll create mode 100644 Netick/Editor/Resources.meta create mode 100644 Netick/Editor/Resources/NetickBanner.png create mode 100644 Netick/Editor/Resources/NetickBanner.png.meta create mode 100644 Netick/Editor/Unity.Netick.CodeGen.dll create mode 100644 Netick/Editor/Unity.Netick.CodeGen.dll.meta create mode 100644 Netick/Runtime.meta create mode 100644 Netick/Runtime/Native Sockets.meta create mode 100644 Netick/Runtime/Native Sockets/libnanosockets.bundle create mode 100644 Netick/Runtime/Native Sockets/libnanosockets.bundle.meta create mode 100644 Netick/Runtime/Native Sockets/libnanosockets.so create mode 100644 Netick/Runtime/Native Sockets/libnanosockets.so.meta create mode 100644 Netick/Runtime/Native Sockets/nanosockets.dll create mode 100644 Netick/Runtime/Native Sockets/nanosockets.dll.meta create mode 100644 Netick/Runtime/Netick.Pro.dll create mode 100644 Netick/Runtime/Netick.Unity.Pro.dll create mode 100644 Netick/Runtime/Netick.Unity.dll create mode 100644 Netick/Runtime/Netick.Unity.dll.meta create mode 100644 Netick/Runtime/Netick.Unity.xml create mode 100644 Netick/Runtime/Netick.Unity.xml.meta create mode 100644 Netick/Runtime/Netick.dll create mode 100644 Netick/Runtime/Netick.dll.meta create mode 100644 Netick/Runtime/Netick.xml create mode 100644 Netick/Runtime/Netick.xml.meta create mode 100644 README.md create mode 100644 README.md.meta create mode 100644 Resources.meta create mode 100644 Resources/netickConfig.asset create mode 100644 Resources/netickConfig.asset.meta create mode 100644 Resources/netickConfigDefault.asset create mode 100644 Resources/netickConfigDefault.asset.meta create mode 100644 Samples~/Bomberman.meta create mode 100644 Samples~/Bomberman/Materials.meta create mode 100644 Samples~/Bomberman/Materials/Mat1.mat create mode 100644 Samples~/Bomberman/Materials/Mat1.mat.meta create mode 100644 Samples~/Bomberman/Materials/Mat2.mat create mode 100644 Samples~/Bomberman/Materials/Mat2.mat.meta create mode 100644 Samples~/Bomberman/Materials/Mat3.mat create mode 100644 Samples~/Bomberman/Materials/Mat3.mat.meta create mode 100644 Samples~/Bomberman/Materials/Mat4.mat create mode 100644 Samples~/Bomberman/Materials/Mat4.mat.meta create mode 100644 Samples~/Bomberman/Materials/Mat5.mat create mode 100644 Samples~/Bomberman/Materials/Mat5.mat.meta create mode 100644 Samples~/Bomberman/Network Prefabs.meta create mode 100644 Samples~/Bomberman/Network Prefabs/Bomb.prefab create mode 100644 Samples~/Bomberman/Network Prefabs/Bomb.prefab.meta create mode 100644 Samples~/Bomberman/Network Prefabs/Bomberman Player.prefab create mode 100644 Samples~/Bomberman/Network Prefabs/Bomberman Player.prefab.meta create mode 100644 Samples~/Bomberman/Network Prefabs/DestroyableBlock.prefab create mode 100644 Samples~/Bomberman/Network Prefabs/DestroyableBlock.prefab.meta create mode 100644 Samples~/Bomberman/Network Prefabs/Power Up.prefab create mode 100644 Samples~/Bomberman/Network Prefabs/Power Up.prefab.meta create mode 100644 Samples~/Bomberman/Prefabs.meta create mode 100644 Samples~/Bomberman/Prefabs/Bomberman Sandbox Prefab.prefab create mode 100644 Samples~/Bomberman/Prefabs/Bomberman Sandbox Prefab.prefab.meta create mode 100644 Samples~/Bomberman/Prefabs/UIServerElement.prefab create mode 100644 Samples~/Bomberman/Prefabs/UIServerElement.prefab.meta create mode 100644 Samples~/Bomberman/Scenes.meta create mode 100644 Samples~/Bomberman/Scenes/Bomberman.unity create mode 100644 Samples~/Bomberman/Scenes/Bomberman.unity.meta create mode 100644 Samples~/Bomberman/Scenes/BombermanLAN.unity create mode 100644 Samples~/Bomberman/Scenes/BombermanLAN.unity.meta create mode 100644 Samples~/Bomberman/Scripts.meta create mode 100644 Samples~/Bomberman/Scripts/Block.cs create mode 100644 Samples~/Bomberman/Scripts/Block.cs.meta create mode 100644 Samples~/Bomberman/Scripts/Bomb.cs create mode 100644 Samples~/Bomberman/Scripts/Bomb.cs.meta create mode 100644 Samples~/Bomberman/Scripts/BombermanController.cs create mode 100644 Samples~/Bomberman/Scripts/BombermanController.cs.meta create mode 100644 Samples~/Bomberman/Scripts/BombermanEventsHandler.cs create mode 100644 Samples~/Bomberman/Scripts/BombermanEventsHandler.cs.meta create mode 100644 Samples~/Bomberman/Scripts/BombermanInput.cs create mode 100644 Samples~/Bomberman/Scripts/BombermanInput.cs.meta create mode 100644 Samples~/Bomberman/Scripts/PowerUp.cs create mode 100644 Samples~/Bomberman/Scripts/PowerUp.cs.meta create mode 100644 Samples~/Bomberman/Scripts/UI.meta create mode 100644 Samples~/Bomberman/Scripts/UI/UIServerBroweser.cs create mode 100644 Samples~/Bomberman/Scripts/UI/UIServerBroweser.cs.meta create mode 100644 Samples~/Bomberman/Scripts/UI/UIServerElement.cs create mode 100644 Samples~/Bomberman/Scripts/UI/UIServerElement.cs.meta create mode 100644 Samples~/First Person Shooter.meta create mode 100644 Samples~/First Person Shooter/FPS Scene Terrain.asset create mode 100644 Samples~/First Person Shooter/FPS Scene Terrain.asset.meta create mode 100644 Samples~/First Person Shooter/Materials.meta create mode 100644 Samples~/First Person Shooter/Materials/Ground.mat create mode 100644 Samples~/First Person Shooter/Materials/Ground.mat.meta create mode 100644 Samples~/First Person Shooter/Network Prefabs.meta create mode 100644 Samples~/First Person Shooter/Network Prefabs/FPS Player.prefab create mode 100644 Samples~/First Person Shooter/Network Prefabs/FPS Player.prefab.meta create mode 100644 Samples~/First Person Shooter/Scenes.meta create mode 100644 Samples~/First Person Shooter/Scenes/FPS Scene.unity create mode 100644 Samples~/First Person Shooter/Scenes/FPS Scene.unity.meta create mode 100644 Samples~/First Person Shooter/Scripts.meta create mode 100644 Samples~/First Person Shooter/Scripts/FPSController.cs create mode 100644 Samples~/First Person Shooter/Scripts/FPSController.cs.meta create mode 100644 Samples~/First Person Shooter/Scripts/FPSEventsHandler.cs create mode 100644 Samples~/First Person Shooter/Scripts/FPSEventsHandler.cs.meta create mode 100644 Samples~/First Person Shooter/Scripts/FPSInput.cs create mode 100644 Samples~/First Person Shooter/Scripts/FPSInput.cs.meta create mode 100644 Samples~/First Person Shooter/Textures.meta create mode 100644 Samples~/First Person Shooter/Textures/CheckerTexture.png create mode 100644 Samples~/First Person Shooter/Textures/CheckerTexture.png.meta create mode 100644 Samples~/First Person Shooter/Textures/Crossharis.png create mode 100644 Samples~/First Person Shooter/Textures/Crossharis.png.meta create mode 100644 Scripts.meta create mode 100644 Scripts/GameStarter.cs create mode 100644 Scripts/GameStarter.cs.meta create mode 100644 Scripts/NetworkInfo.cs create mode 100644 Scripts/NetworkInfo.cs.meta create mode 100644 Third-Party-Notices.txt create mode 100644 Third-Party-Notices.txt.meta create mode 100644 Transport.meta create mode 100644 Transport/LiteNetLib Transport.meta create mode 100644 Transport/LiteNetLib Transport/LiteNetLib.asmdef create mode 100644 Transport/LiteNetLib Transport/LiteNetLib.asmdef.meta create mode 100644 Transport/LiteNetLib Transport/LiteNetLib.meta create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/BaseChannel.cs create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/BaseChannel.cs.meta create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/ConnectionRequest.cs create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/ConnectionRequest.cs.meta create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/INetEventListener.cs create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/INetEventListener.cs.meta create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/InternalPackets.cs create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/InternalPackets.cs.meta create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/Layers.meta create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/Layers/Crc32cLayer.cs create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/Layers/Crc32cLayer.cs.meta create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/Layers/PacketLayerBase.cs create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/Layers/PacketLayerBase.cs.meta create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/Layers/XorEncryptLayer.cs create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/Layers/XorEncryptLayer.cs.meta create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/NatPunchModule.cs create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/NatPunchModule.cs.meta create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/NativeSocket.cs create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/NativeSocket.cs.meta create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/NetConstants.cs create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/NetConstants.cs.meta create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/NetDebug.cs create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/NetDebug.cs.meta create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/NetManager.PacketPool.cs create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/NetManager.PacketPool.cs.meta create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/NetManager.Socket.cs create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/NetManager.Socket.cs.meta create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/NetManager.cs create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/NetManager.cs.meta create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/NetPacket.cs create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/NetPacket.cs.meta create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/NetPeer.cs create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/NetPeer.cs.meta create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/NetStatistics.cs create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/NetStatistics.cs.meta create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/NetUtils.cs create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/NetUtils.cs.meta create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/PausedSocketFix.cs create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/PausedSocketFix.cs.meta create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/PooledPacket.cs create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/PooledPacket.cs.meta create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/ReliableChannel.cs create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/ReliableChannel.cs.meta create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/SequencedChannel.cs create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/SequencedChannel.cs.meta create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/Utils.meta create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/Utils/CRC32C.cs create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/Utils/CRC32C.cs.meta create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/Utils/FastBitConverter.cs create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/Utils/FastBitConverter.cs.meta create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/Utils/INetSerializable.cs create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/Utils/INetSerializable.cs.meta create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/Utils/NetDataReader.cs create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/Utils/NetDataReader.cs.meta create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/Utils/NetDataWriter.cs create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/Utils/NetDataWriter.cs.meta create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/Utils/NetPacketProcessor.cs create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/Utils/NetPacketProcessor.cs.meta create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/Utils/NetSerializer.cs create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/Utils/NetSerializer.cs.meta create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/Utils/NtpPacket.cs create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/Utils/NtpPacket.cs.meta create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/Utils/NtpRequest.cs create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/Utils/NtpRequest.cs.meta create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/package.json create mode 100644 Transport/LiteNetLib Transport/LiteNetLib/package.json.meta create mode 100644 Transport/LiteNetLib Transport/LiteNetLibTransportProvider.asset create mode 100644 Transport/LiteNetLib Transport/LiteNetLibTransportProvider.asset.meta create mode 100644 Transport/LiteNetLib Transport/LiteNetLibTransportProvider.cs create mode 100644 Transport/LiteNetLib Transport/LiteNetLibTransportProvider.cs.meta create mode 100644 package.json create mode 100644 package.json.meta diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..10caab6 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,134 @@ +### [0.11.8] Changelog - 2024/3/20 + +- Fixed an issue with generic structs. +- Fixed an issue with NetworkArray interpolation. +- Fixed an issue with non-networked static Rigidbody2D causing Netick to change its state into dynamic. +- Fixed various other issues. + +### [0.11.4] Changelog - 2024/3/12 + +- Changed the behaviour of OnChanged. Now, by default, it's not invoked during rollback/resims. Now it's only ever invoked when the value is changed during a new state/tick in the client or when it's changed by the server. +- Changed Sandboxs struct name to LaunchResults. +- Changed Sandboxs.Server to LaunchResults.Servers, and is now an array. To get the first server: launchResults.Servers[0]. +- Changed the internal scene management system. +- Objects with Prediction Mode set to Input Source won't be rolled back to server state now. Set Prediction Mode to Everyone for that. +- Added support for additive scene load. To load an additive scene: Sandbox.LoadSceneAsync(index, LoadSceneMode.Additive). To unload an additively loaded scene: Sandbox.UnloadSceneAsync(index). +- Added Network.Launch method for starting Netick. This is a single method with two parameters to start Netick in any kind of configuration. +- Added Host as a starting mode supported by Netick. When starting Netick in Host mode, Sandbox.ConnectedPlayers will include the local server player, when started as a regular server, it won't include the local server player. +- Added Single Player as a starting mode supported by Netick. When starting Netick in Single Player mode, the networking loop (send and receive) won't be updated, and no transport instance will be created. +- Added OnPlayerConnected and OnPlayerDisconnected. These methods respect Host mode, so when starting Netick in host mode, OnPlayerConnected will be invoked for the local server player. +- Added Sandbox.Events. This allows you to subscribe to network events from anywhere, instead of having to use NetworkEvents Listener. +- Improved client performance. +- Fixed an issue with Network Prefab Pool not reusing instances. +- Fixed an issue with GetPreviousValue for compressible float-based types. +- Fixed an issue with auto-calculation of the bounds of a HitShape Container. +- Fixed an issue with Sandbox.OverlapSphere not clearing the hit list. +- Fixed an issue causing RenderInvokeOrder of NetworkRender to always be Update, even when choosing LateUpdate. +- Fixed an issue causing Netick to break in 32-bit systems/mode. +- Fixed an issue with switching scenes directly after starting Netick. +- Fixed an issue causing input types to keep being registered even if not using that input type anymore. +- Fixed an issue causing every pending input in the client to be sent. +- Fixed an issue causing a freeze when switching scenes at high ping. +- Fixed an issue with NetworkBehaviourRef and NetworkObjectRef causing them to not work with null values. +- Fixed an issue causing scene objects and prefabs to be set as dirty even when they have not changed. + +- Fixed various other issues. + +### [0.10.4] Changelog - 2024/2/14 + +- Added implementation for NetworkAnimator. This is a component that can be used to sync Mecanim parameters and other state variables. + +### [0.10.2] Changelog - 2024/2/8 + +- Added NetworkLinkedList. +- Added NetworkQueue. +- Added NetworkStack. +- Added NetworkQueueSnapshot, NetworkLinkedListSnapshot, and NetworkStackSnapshot structs with getters for each on OnChangedData. These structs represent the previous state of a network collection. +- Added NetworkObjectRef as a helper struct to sync a reference to a network object. +- Added NetworkBehaviourRef as a helper struct to sync a reference to a network behavior instance. +- Added NetworkTimer as a helper struct to simplify doing a networked timer. +- Added IsAuthortative field to OnChangedData, which can be used to know if the source of the OnChanged event is local or caused by the server. +- Added foreach support to NetworkArray and NetworkArrayStruct variants. +- Added compile-time log errors for some code gen errors. +- Fixed an issue with network string concatenation. +- Fixed an issue causing a NetworkArray OnChanged to be invoked multiple times for the same index in the client. +- Fixed an issue with OnConnectedToServer not being invoked. +- Fixed various other issues. + +### [0.9.14] Changelog - 2024/1/31 + +- Fixed a stutter with Remote Interpolation in the first few seconds after connecting to the server. +- Fixed a stutter with CSP in the first few seconds after connecting to the server. +- Fixed OnConnectedToServer not being invoked in the client. + +### [0.9.11] Changelog - 2024/1/27 + +- Added the ability to associate an input with an index. This makes it possible to use more than one input (up to 10) of the same type per NetworkPlayer, differentiated using the index. This feature enables support for multiple local players all associated with the same NetworkPlayer, but differentiated with the input index. The index has been added as an optional parameter for all input-related methods. +- Fixed an issue when an object tries to destroy itself in NetworkStart. +- Fixed an issue with float Auto Interpolation, causing inaccurate interpolation data to be returned. +- Fixed an issue causing NetworkStart to be invoked before the object has applied its initial network state. +- Fixed an issue causing Interpolation Delay to be high when first connecting. +- Fixed an issue causing a weird behavior when data that needs to be sent exceeds Max Sendable Data Size. +- Fixed various other issues. + +### [0.9.7] Changelog - 2024/1/12 + +- Improved bandwidth usage. +- Improved serialization performance. +- Added support for adding network behaviors to Sandbox prefab. Now it's possible to have 'global' network behaviors that are accessible with Sandbox.GetComponent(). +- Added Sandbox.AuthoritativeTick and Sandbox.PredictedTick. Sandbox.AuthoritativeTick always returns the latest received server tick. Sandbox.PredictedTick returns the last predicted tick on the client, regardless of whether this is a resimulation. +- Changed the location where OnConnectedToServer is invoked from. Now it's not invoked by the transport and instead as part of the internal Netick loop. +- Fixed an issue with Rigidbody.isKinematic not replicating when using NetworkRigidbody. +- Fixed an issue with string network property not replicating correctly. +- Fixed an issue with Unity 2023. +- Fixed various other issues. + +### [0.9.5] Changelog - 2023/12/29 + +- Fixed an issue causing NetworkStart to be invoked on an object in the client before applying its full initial network state. Whatever state you assign in the server for a networked object after spawning it will be available, in full, when NetworkStart is called in the client on that object. +- Fixed an issue causing building the game to fail. + +### [0.9.3] Changelog - 2023/12/27 + +- Improved heavy packet loss handling. Theoretically, It's possible to receive no packets from the server for an entire day (or more) and be back on track after that stops happening. Without needing to send the full networked world state. +- Improved CSP handling of heavy packet loss. Now the client behaves more expectedly when heavy packet loss (no packets for seconds) occurs. +- Improved CSP performance. +- Improved memory usage on the client. +- Added TransportConnection field to NetworkConnection, which can be used to get the transport connection. +- Fixed an issue with NetworkTransform rotation interpolation. +- Fixed various other issues. + +### [0.8.11] Changelog - 2023/12/14 + +- Changed NetworkSandbox.IsVisiable to NetworkSandbox.IsVisible. +- Changed StartNode.ServerAndClient to StartNode.MultiplePeers. +- Added StartAsMultiplePeers to Netick.Unity.Network. This can be used to start multiple clients (and choose to start a server with them or not) in the same Unity instance. Netick.Unity.Network.StartAsServerAndClient is now marked as obsolete. +- Fixed an issue causing NetworkStart to be called after other callbacks of NetworkBehaviour. +- Fixed an issue causing a removed object to still be in the simulation. +- Fixed an issue causing LiteNetLibTransport to throw an exception when a client wants to connect despite the number of connected clients being MaxPlayers. +- Fixed various other issues. + +### [0.8.8] Changelog - 2023/11/30 + +- Changed the behavior of [OnChanged] methods to act similarly to Netick 1. Now [OnChanged] methods are not called for non-default/inspector values, and only called when the property value changes during runtime. +- Changed the default precision value of network properties to 0.001. This should greatly decrease bandwidth usage. If you don't want any compression, pass -1 to precision parameter of [Networked]. +- Fixed an issue with Auto Interpolation when passing a valid precision value to [Networked]. +- Fixed various other issues. + +### [0.8.6] Changelog - 2023/11/19 + +- Fixed an issue causing [OnChanged] methods on NetworkArray to not work correctly. +- Fixed an issue causing network state changes to not be detected if they weren't done in NetworkFixedUpdate. + +### [0.8.4] Changelog - 2023/11/17 + +- Fixed a CodeGen issue with parameterless Rpc methods. +- Fixed a CodeGen issue in Unity +2022 causing "Reference has errors". +- Fixed an issue with NetworkArray when used with a type smaller than 4 bytes, like short, causing incorrect elements to be changed when using the array indexer setter. +- Fixed an issue with NetworkString causing the string to be longer than it should be. +- Fixed an issue with IL2CPP causing build to fail. + +### [0.8.2] Changelog - 2023/11/16 + +- Fixed a desync issue that happens with very heavy packet loss (no packets for +2 seconds). + diff --git a/CHANGELOG.md.meta b/CHANGELOG.md.meta new file mode 100644 index 0000000..aba2c76 --- /dev/null +++ b/CHANGELOG.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 6a071b8b850fac44ebb9392755268c35 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation.meta b/Documentation.meta new file mode 100644 index 0000000..c2ac608 --- /dev/null +++ b/Documentation.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4f3669ec0ee63954d8a9fe8319fdcdcf +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/API Documentation.url b/Documentation/API Documentation.url new file mode 100644 index 0000000..7662949 --- /dev/null +++ b/Documentation/API Documentation.url @@ -0,0 +1,5 @@ +[{000214A0-0000-0000-C000-000000000046}] +Prop3=19,11 +[InternetShortcut] +IDList= +URL=https://www.netick.net/api_docs/namespaces.html diff --git a/Documentation/API Documentation.url.meta b/Documentation/API Documentation.url.meta new file mode 100644 index 0000000..1141774 --- /dev/null +++ b/Documentation/API Documentation.url.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4fd20cd30e447694e8413bba1a99236f +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Discord.url b/Documentation/Discord.url new file mode 100644 index 0000000..8a3c6a3 --- /dev/null +++ b/Documentation/Discord.url @@ -0,0 +1,6 @@ +[{000214A0-0000-0000-C000-000000000046}] +Prop3=19,11 +[InternetShortcut] +IDList= +URL=https://discord.com/invite/uV6bfG66Fx +HotKey=0 diff --git a/Documentation/Discord.url.meta b/Documentation/Discord.url.meta new file mode 100644 index 0000000..970661c --- /dev/null +++ b/Documentation/Discord.url.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 29f4a94db22542c4c8dfbf9a759bcb5c +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Documentation.url b/Documentation/Documentation.url new file mode 100644 index 0000000..2e9d91e --- /dev/null +++ b/Documentation/Documentation.url @@ -0,0 +1,6 @@ +[{000214A0-0000-0000-C000-000000000046}] +Prop3=19,11 +[InternetShortcut] +IDList= +URL=https://netick.net/docs/manual/ +HotKey=0 diff --git a/Documentation/Documentation.url.meta b/Documentation/Documentation.url.meta new file mode 100644 index 0000000..bba40e4 --- /dev/null +++ b/Documentation/Documentation.url.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 18562e0820a5a46449173a3388e47177 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Offline Documentation.pdf b/Documentation/Offline Documentation.pdf new file mode 100644 index 0000000000000000000000000000000000000000..28f4e26a28c3e78d93f83114ca78714bd2095a01 GIT binary patch literal 405532 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±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

U@xcb8QSUD=bV$8z+-0E` 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 O_|a0+zf-Pa8~HzX*@+VX literal 0 HcmV?d00001 diff --git a/Netick/Editor Resources/Gizmos/Netick/Network Icon.png.meta b/Netick/Editor Resources/Gizmos/Netick/Network Icon.png.meta new file mode 100644 index 0000000..2a2a0d5 --- /dev/null +++ b/Netick/Editor Resources/Gizmos/Netick/Network Icon.png.meta @@ -0,0 +1,134 @@ +fileFormatVersion: 2 +guid: c822e25a65146c5419c826c53862d919 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 0 + mipMapFadeDistanceEnd: 0 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 2 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 0 + 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: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Netick/Editor Resources/Gizmos/Netick/NetworkHitbox Icon.png b/Netick/Editor Resources/Gizmos/Netick/NetworkHitbox Icon.png new file mode 100644 index 0000000000000000000000000000000000000000..6b8cad5117f6b04c63904e5698dfef926588537e GIT binary patch literal 48264 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

vifYr1iB@aXQ|{YGkki8LD%Ou)sVJMd*`DmO zlW)&FX>kg^?Rx~gR+nmf+UHi;QNpxy0-}Dr%R&6Zi9p%#^!NA84bKNL*)9+1 z9W=BsmvM1lzbbK{^!&8{(T4`w7iN^qy9^r7Pm3G~!&P!K-@EnFkE>0+@RcKO;ATIk zoeK7lJDla(xz{{c-U?}=r1kU8`y)SzefNix>{ve%aF=KFw3nU~eShUxa+dQc-%N1- zK_AU+6{yDOF(^_s#@J4%1xzWv@B}lMH}VWY>-^gMwg9|Ub*z>`xV{qKSGu%L>%TsR z9zxId4%N`1OXGS`S{IUAT_i-34I*I1VP8}eZ?^KhJ21j~)Ze205oFhu7qLrjPks7N z8siKcxb1a}%vb*WdYVO5eCEDfsz}i6Sr1A2%M0Zu{8*DEZ1{E;Yb3;O(w85*a)VJk z&J#)17|qK_*|W45VSH6Oi% zxS`rN`Jt;y?0_LVoS+wQpv{I5bxA(f90@A>0fMcKZw5Hkez3dLGKoEU)Tt)@qp$Y9XYF{B$t|I8qnjJqxwKzj= zQ_t*tmcTzhQMd!NeWU4?MP2jPHLw*?`gz8eB0zKa*P8hkWd5vR3HQmgVB}Y2jWI#s zn@}QeOROqoK>f#6r~JpO5=KWYu3Ut0Dx&8(yrI71`FFLFa)h=ol}*6s-hSorT`xiT z(^hIbpN9oqLELc+0N;KSe=Ca@LUPn5HjkScOk*x)rL$mpovkuqS#fs2!{Np9Mg*JF zwDu01uFr)JFuf8=`J8=4=-8!nUVa&IGaO++R{8r`pfs7eh@Du9QN87ee}usamq@G{ z@H+vCkIl(@OdB{QzUdj2Kdorl{F5*I<2%f8GC0T1FWh0rxI;R|RDM?Um=*evo7e8Z zU|%04n@lmDKc{v?DbiJs_-ogW_^R%lbK6+v=qot}+1UZ#M?1hj3GlMyNPq=@thUfr zjB0{_15nZp7cgQYnz3)EKi1EGo854{nQ;DF(xg%WU1D^X)z|%2w1+pUQeXrl9w1={ za5xqUma%cOly<>zhRJ&=x~Cfzv3z%7%Eszjz3bchLLcQ!!g;tue!AL}Ul%*e0rn@? zxiKlmb9v@%2LJZhS^J%Mnd@CRyxUCCnG)CZ#_x4-oCP3KD0UR`D|xLy`OSC)QAhx5~J!GZwj(d z_m%0;T-AQrm77vyXM4h7d-9o1)yX8sm23|3XRvp^s^WSpA$HCWRzfBG{L*IeqzQ$C z8&Nje1mw07tR5=6Kz~k;zj;OG#1l1zmp(K{YI+-_2&;a_LNE!1zflT3`CBe7TtZ6E`@Xt1?K*yl?%7m-jg> zd{8ixK6BVpIG;&GV>9v@o7j4u%6aoETFe5+JW&}<8Fu(u@YTeW^j<12$R90Uudn~H z6dBXmEI2i%+;ESP{8eS5Ai)k{N@+V3_JN@9cZ6^N_)jT0SOBb-$6oAg2}Ib-VpnPG ztXf>*6;DjkazzwGkq=mt{j=B4O)b5KR7_kM<9T<&QO+31e9Rve$%>1mkOq?tgXPL< znDSKR$U%MoKe{v%#6GFMHcS1?#V!!0p0G;S8ckiQYlQEtN6ryvk0w}cQRDJLS`4$4 za{z+c5rBu;QM-XMqt$%-bHtDDH}CBoepy`Z!|G;&s=S9KPxVuG`{HZ!mn$z1??Djt z!zcxGn(7zTuE`rF5qk{_*KLPj-&KAT1*mSul~*mtW=%dw*xI*oawRM6OE#JRmE&O> z*+;N>5YovCD|f2ux>4y%E#1XreJ@nl$u*NtH8gnX!B9({-t~m!(r%-8N97!^<#M1d ze7k_-?bIe=Qb^;So<1qaoB)6zl{W()!6!ugh1jVuZi7QmG+*T6dnFa&CM*7_teUC_3$$@$S;) zy5$*UZb?tS=0S-jMGxmzV{4j1D0y96*;PY_>evP2{s1H<<@lr@Q(i@s7Sqz89=%WD zYbAc4yraYt*XsNI7P2!p3P!#ZIbrZq$m>hq;-H^o7{HcX;nHVf1h^rmq4ZZV+lvPA zq1i!${RLq&aJ(koTcmvX$;#Q$*XyR^=$}EZe6y=+qqaSb2!E9%7(x9*4rs#txZjKh z11y{Tt!i-&sL$tqW_$Rp8#;9ivU0s47=AmVpS9u1rLneOI;6|)775tFRU4N<&lyDs z+OZ}6=45;SSvnuHlWH%}SP6^I*;aYUs)yWI(w$BI=Z8pNK#TDz#- z>(^#6H}OZt_j4lSUinG{ZRK|HI<1@UnW|q{Gm^Cbtr-ThV$-&2PF_A~?!oMizQ37uuPu&0O!zV`Lo!J}b4fOGJZhVnUwBmK zC`bAGrX0dTPTkIHfwecni$2{zI(~65r%f~;y|4Sq|HsvP2U7k2{r{CpDhXxJB$bSY zl~p22Mu;3MggVA4vX0e|l%4F5Y&yq0j&;Z`yBx6T8%Y+4DFSjN)5O2#owb|LN2l|J!Je z)%(3-8ku%4{QDjQtB1>F9DgfB4pvA%5a#swllZ-MMEoI)jCG&aW9d?`z92svTH;Ma zZL?BYcmC1|2OLiz>%!^Gr9cqcpe96GfY7FJ%Hmfw13>xgpA3ql7U6hTWj4oX0k z_iF@n3RLE93vBspCoeJbbER0--z(bs_{{q|swRa&@R8c3d}#5~#0SVub`+%F%eTBf zmp2rfV#JI#Z>Q(r==dn1W0qKXVS(ovVkP0^sY4fk?CxB}^cC7~Z`QkA=Tas)4Sf>v zA7_#OlVQk!(7}EHecLV$4a|$Cw`MrXX!Gsh(o>x|*noE3dZ;f!?PH}xjpodlir()~ zyWIPMQYfqx7g$j@v&1XEa;vr>E&DBZf3cO18R+2uX8bj3v(C0Be(#Erdw9CA30Kz< z(#`XNj#Kp@Fa^>+SKIbhy1!j~)#v(?Df_TThj)(q73fPq z+j7$KulCQy@H>r&j$Qb8W?b0SfX3?mnNVGxfBvxbGc$Kn5>J6g|J5+rugEL)0CI5X zKzGL80i`%vZmU3*k)5x zDtWBkvnRl2F){+dsd$#JxW$oR-KmLLu}76OIp&g_D`Elw8+AaT$mMni9JZSavh0?R zzUt*&9v?EMwMQu++@gwoX#Yss#XXNc4TY5~5hao!DY zzeUy)c8>ra8x{v}^Ul9v#)I4+^3Yb z93ooWhs?!9aAnioaj1YpyQ+ATuCeKjK*Q2Y>O>B|EJIop^in8g+c#gh&1k0x=9IA+ z^Sv2s=d67jrkUXXnu*{6|AWr|#{WIP%kn@)i93fBvGsjkW&N^i$OH94%&jB8D_jXs zo}E1|56{wCcnLvE7$6V%Nn$J-5(>Po6=#cjSud?IE6v)~cIL@s`LO@7oI-2@kOFDU zt7^3|Q%cKi*>(k2?k5CVlq>CldNC&E*?dGlwaI`Qfr|vN^www4{R@cBTx$5$s~eycwX-J1_Sy{-)xB| zIGr5-okn`j*Szq--9CpD()%y6p2e||WSW2_4ioLc;# z9Q*R^6X<9f)6)_7kkLzx8_a&n4`K!HTZ<;x4@0T6f+F2FX@6m@Z3k|SorMocKvQ68 zt8TiabPHU6*c@WjJgAd2QRg4^KTR7t$75^0T=v3m%rk|bmO_j=Qn^e1z$bR`mxZul zavX1_gWw>GL!92#;Wq0Wq)euf1b?}8+0iC-!fV*s?tUOY+L66A8_;G|{=q239%{p9 zU)F$BRH2-^13j8%kgu;^ipecWdI5Ant9qIxS>{P$jw7U_yeOC6%1bjM)!fVVQ775>#b9x4hUA#AsI{b}^pV>CUfx5_EyXcfe z_{3Wz+m!sufV#;z0otFo<4}w~ZMT(SnLqrDKnt8wj?V1O=ReENR$o+#lo8u*KOo-c z9DuYCT6$k_)lYLn13+lquSa+W+_)p?u=&H{p>)-Y>}!Feod@~fm|*F$D16gzRm2a6 z#^thSddg7^ofkVqjMdZ>`TR)=eCSs0)k`0u(7rg8RZEbcnphohL4_3eD3h|vdro^C zv+7!SRf-pGPLDxIoiGspNXd%z`stQBcP}-vn_p~`*tH9JeFjME-yhs-Yk=S3m>8J; zvXB4KQ^Qy}(WpXwBq0j=fS>bpL4*J&{$}itgKBTOj+z?Z+dpro z(q2(Zh2lQrrg6JjcC(v{=4mAgcobj3LcSXBLUcjk_FI+BrfRn_# z-f*#ZLMd*%J>OqGaWbNkiRoeC{Wb=LG3%_UtSeXk%f3Qi<~M{hK_*m|tv@JLhh*hb zayEau^{yTj@rx!_0m?dZ1vugHqi4mJ&?WeaF^O;jtv_3((^O1YST;Oh@O%-(jijtC}#dHAQe?zY9jps_!!Yw7M<+f)Y zvazkz?QBtweXyr(sR)r)-Jjk{zp*a^l^oByBc!&ABX5Y|T!QmzfGN-#Y)plP^?$A4#)NQ`?r`NMo_xZipxqZvY2{f0{QeU(2Ow4YsZ0 zL;ZFt20mtr^u`1_35(pEZh5OXeE)5vG{ecv{$J%{lTuE13ok8~odm?-FEwR}+*Gf? z2_9p+$fXx(h~aF#d5n&uyvJgW4@D#9+vpp9>LaDB6fL89yVX-l!qiDEq1cJQFKigPZOkK zZA6x`5K?W>&!hSzu9lFLPsjl;?YKPhu`c`VozHT@*0*8T{rE5(5M5EoLVs)m3ul}s zdnmGsY9=|h%qK)`J7%;K?!G330lxAqSknfjI6K>;pZ{Lzn7pv?eq!D&zJ)@!;i}=x zap=f=wq*;L7X1T1!KfjEs5tx}Jzs5PS999HV`(8L_p{@zNi5)RbO zS!cVEa4%y!0#O&EDBBLZJG#!{SD$cpaxmi6x11YV!3Q9HO3O|*RqnrvsgiB)Fv2L( z1?)kt0^fKi?aNQ;=BA4U7_qEiKts^Mj|%TygS+JTa!jPOBcK1I>925C_Q}f_-Wf%3 zVnU1fNNypA?=Y-rns7fVAHllwLh2OO?>7!-oAEh{14bOzSeN~%rdCZ&4JH4*^t`_N zEsJ;HK;R9??f;EGCbLNqkqqTu61!`+MpO$q7Gyx}V6nZhTy}0U zxOeT7Ts!~IQC)0UVBqBkqc3q`NwNkn;67XEMQ;u3B8LkKK)!_tYxv&kp?>^PBm}!< z=Rir&;8%&#C*=6oJmsj;oX0Ndfe*^2}p`^ZgDaNw9Q)4W5Jf?SP+kkcMDQg_tRBPN@7wkIAXCmXb3; z3Wcd=syP35qLoK!Ov;AqKcsk(7LDM@VrUhX1(6&tAnUw`6r>+SUek&{`^Kh0_{Ct{ zJ*WrqlAWAiji0|oUG-G_D~2hz#x7ybRh|5;voykcy1{#ze)Ms>I^~meB%0rmLS7o3 zpA5Qk=*ZylY|iwMKT1!Wjx*#)KKd4xSVLtAL4`pYa~#Bu5wo(`Ur6rvvzQ3vBCh>z zIz|QzV9DNJypB?)a_V=WLSxXCgDZXexqox^QtW5jqKRTO<3fV-3GKOP{u?;c>V(TYeY_2w)tzYD{ILo3p`X4@|2A?)xDf1Hq*K zyfPoNDz6fXG~Rw3Eo`h-?^WcnsGepPR^F$9SMFy-<0Ybu**hUV&V z4D+C_5BW9`P4GB?qug(Js}K=$2W5tEP8t$D9?G6?TyQ`907TNn6LhSA<0gh2JIe5- zsm$JzBi<25*^uU`YS#pPLpG_!7G*{dmZ%VG7c@r2mwW0wbG<=VPp$+hm{bcrZL1}_ zrIGfuCn4tFcbk|x9DC**?-+{#FCiICxBFs$fzr@{C9{M`X_4viWU1UM8_aHLNWX); zlc9dzuhGCUf;ZJ|42tb~a&Y1Ixui!J$`0Pi$zS#tY8E(}D6%grkTf2*w}FAIw!Igf zuM~$7UqBfN_Yf=$l4qUm59W}}7F}PoWTOwwKFf1I&s24`6oJnyK1Xv#-dbZ;w%+P4 zcX7E9JytvWJM_|fo@_aI{6{$I`Zu?;PGs2U-MA9>xz)u6g8Ay|T! zi&}A^-|Lo|BS41Afy2q)Q#&M=v}tVX5x6J$eTdq~P0`U5dWt+S9;49O=pyExgpk7p zqfpvfx3z%lGe`p81U2V#VC|%H(EmISVjc z2qA~%T8_G)%xbp%g;N6q7i>m02lX^m=x3yj;>bdD(0hSKx+TEeB`5m3iolW>zG$S) z-#Y{^|Mb3if?AKyGg}yK@^fhOT2V2pEO_V5ErRQe+r&0oijTHcR5z=2II&o z(LabPg+lyr&uOtrWoKH=j}X9&?Abih!w`MJ5Cy+mE{jDD#}Sp~+Gzt13;u4b*@1_i zZnM8Ep0YrSvjC+IVBHoWJ1^yRX)x!-={maiXrztM3O<1BKKb7p6e+_G2cZ7G{zA_d z-GpxN9YjbGi&afcTv$tIwWS+PSc)^K+?(VVMXY7Z1+4aWlmt&1F~w88w$nQ{*3;ug#! zo(iUch#EL*2)dy2o@~wi^$gO_hdfuwirzUd_L=CA#FooDGqbRlEZz6_?tKJWEl^L$ zrJL3S2v(Je#iU59_PejsX2~VlX#G>~rRt>qDfOf7pvaW6e8~vCVM}2-6wXrHUl(-lpOWJyB?%=*x~9b?;z99Z|Fx2)33~w+E+s#?x1WwAx0d0ZQDhB= z=M*9Q^IO!V+{-0XZy9WI<87fqfO{n}J;WO*q%&qOm&?Frdoi%8prZM~BLEG0Y1c45 zxKry7-#~CmQ^IZ0irRWeWibIHEkAqYu>4K^9xvEi_n>0}o-KM0M@Y2UiYlBfT=~+o zHB`wt!mY%|7m1aYhJppq#Z;j%zaynP$BVaKy^rF34)Gk>79t?+n8yijIP4kZutxn^ z(1a8`93Y!#2;`CS_ixV$Qf#_pgspe?`%m18u0@zHLP~pM;Ws1}Q2F(|D)WN$><*_| zYWuP82kuQc!4V(UL*X#P$SqRyNb{9zSAD{nm_$Cl={`_eJ_-8}{K3Q_i&>9{_vpLz zvYWj*f)-~b92^3n-r7R9sF&d(x&qtSne#FRI+!?7c;YWE)vFDt!Om(cU;IVwxW&$P^)Xqh;?0L@orORm zXe4Rtg?EsI4z_Abx(>dqe#ijhIjDZ*MR#4{8%q)QYnZO4AcZp-lpFOj_V_o>tuF#z37-jf_gTMl!)iInyk`h`KYJ*Oat`}@r~ z!1C<#<;U8fMDuOY<9T&)fSg5Bnsq*ZYr1c8TV6}q(Q?|GyGIU@`UMMp3v)_nvz#TU zN6C`qubiw99(r6Xbdqh!XNnB?2f>(Wb^RzbIHjq~ZU(##hkE-d+CTqNt^P>AtlBiI z^P4>jS+5bP)kjXqH7jL$fqR14>CFN1GNmL$u|TV8n7#QK{k0L6COnvM^WJ~hd^PDi zeXqI^b<-)nEnYNDbq1AE@vK>P{jdS3R*Jzfa_HXqn}Bf8i!+vw5w#OZasBH$T3mifYTYSC z0pSU)cdhI|K%~pLXzBg473(f#DchSrc3RsEe*7=T`hQ5pdwK2*aY1Q{X%4Ng8-a8m zSHG-7&tB8+KSpql9c7Pj8aapeT|eg&z{JEbnuXdBYg_4?`!sMJqgSx{1&UU(AVdH} zH%>n(v^|$VYkhn-G&rrhpfJyYGgl0!;tlvEs;1xzBvlO*k3~7DhZ~Zyk=;_oXU3Zg zwisWDE_$8~B(8(!(iQJ3nPoRY#0SOpw!VCw0lEdD@{8p%){~FQD>vG%&j=$eqFg4TFS+0itDFR{^ zJXo}z2%WiIv0Rp)vOo$L1qr#1tRPk3bFf6|x-UwT0IjMmMW8jwLu7 z1*+&YYdFElDpeGTPPez^D3~gT8tJumvQ%YIavuuU0@azvRRx3;a%a`y>|-3DYO15` zWrb4H|MsNpYH8YmQ#q|x;BuubO0?AMDXNq=7a>>UDHG-Z+SiY48{j3X9}bDfhfDr{ ziZZ^kueIFT{&kZUV_SXhwN){mxzZX0-n{-79c$AnR8->oQZ8*bbIYH+P>=zid_!}$%%Gu4k!jGoc~g7z_W?RT6T*&NMHa5iQnv`#h4~l>x)*m&}QhxnU8Z!T9AXItL0pp3s zCkr0__^LAyYoR~2bCu1Pw>U6^q{9jaI@kQ5p5KdMPqa$XMd3Pzs=5BoUct>rtCijL zy`M|`EzptwYmJya?V>ssr4Qc~d8L+Wu0Qod^J1>Mww~*a5QIQmP{q6WTh|35=)R8; z5NqLmSWLEh;%Lt7Y`Y!|_-w!Qt6Gr_2Z&^F!Mg+>c8l&V*$?TMUrPFWIh&zV*pI9G zaoGqCwV7fYO#S7V169_C4&=%qUmdU3LT-j@W5>(pJ^aV+sO`f0QmdS*etz9}{=_I7 zX`#xMLvn0U%%{IWzZ|&w^pL~!BPIQVl@D1`pL6$x!egZ5F(F${h1|Z@*t<4@P7UT^ z{cW$IWnoc?jJuln&&h_%KXI8}l z!t89v?{dd&G`#39xzZoO`hn!U`@RXaW;2PJKo`??7d;aCXEgbc<~;K7*1pT3E!i_t zHHIS=mQPlKDy|L%1Fh>|Iz|?xc!#?+n3p)cU6u{N`L{Inx%Tw+U{?Ykm~T&@3Tf-% zNspLDiu#d$e7utxpFz>mE4QXmjMpF-8XtddX}NFYG|T-Aihe!_5L({MgxSDnSp+Q0 zrhPC#q4_N~qqavWW^<)|dRpBNx^(alCR7933yRBkt8Q-F4+ql;`V)3F;|}MSwP?;F zBER!?)$ET~DZls%A?N!Tlyo9z-V<~bRP;_Vc1;l0%fAn&T93@FEC15F{i7f6C^r&7 z^|?)9|Ff70X4{u$?U-!~KdW}kH^~$Km)GQB9L4-;?W!1ME6wo?fl=gZR{5)4TY2iS zUwSKp4;%C`8A<`$rnsApqcsRRg#A(Sy6`jOuWPptuMGK$Q@-bj7-8aC z_@f74%S5k%Ql>3PLBiu5VmnXNRa~8NBwLL8{bQI)aMpg$uifdtkbB7FGK-&Au-jv+ z0^VXDjLg>)q}<4!wIkI6SH6Id^=dsx|B{`i`Y6js(@JH=*e+hmsxjCkAfy_Kc0(Q+i0m8_(WR7DL$I6H|qH81KyDkH3JMoudP(rS39et z_g03h?DOOPb5V$0)GKF+lv;eDhy37dwql$5!Z zlpR&`)k%vZe{`2=iB3=1wQwLW<)3>`3i~dWyR;0hGTtP&!teH>KPvurn1;UOL+(4n zib!WsWBg;Y8rN}dF9!|_jt|tc5)}}rnSsO0Ovs=R4>;}ltm{gm*TpKfDZ>J*C(fLn ztM%lZs$H;{t#Q-Dy?Y;vYxvZc$Nrhp43jOQ2j$&znz1@AHTRHTkNUB$P4Q>~Ro6(o z-{%&q1dwu6A+z&|{fXxuHsv>7m~!jt@O1q~R{gwLmB=!zb=!9+U_`QWU3H%R1aE}@ zIYpjnl!+v^#pAAA^1+2aELH?{)`bD+afBeY&3*j@CKht9n(rFwm%kW~C|EjmERg74 zPt=Cun2UdO0iylk%uk!dHTTowu4(pS>NltBbCG$!cM0{>MC+C**Q(@074;$?_h`09(Bc;7S5Z_Mkwk4^p_*#a_PO0 z=%nH#osCN_qt5&LkUc*sPcIK4-bW}l{XlNAr_o%wBm<%8aIWIkHzDZRo$nmWmH{t$ zewy>j&?CmF?WNkH#b&ay>kTeN5Ay)_k<~@~_o@Lx>^bMYh$lv%2sUn9YQ?Q8Tjemj zHRLTt?2~!_PKu0p_*#WkDL@A~%x0Kv(PjGU9jF27UE=rNTvWH_F%*HSpbV5Xs^%u( zpxftZjwWb^GubxLI4wFow|^ziQn0J-1UgUH=Liw{Sw>rzuXlZ#c_)Qx5OIs^<(Z}D zk2$?6$+dMCcwqQ*L&iD2r18URsQaC2;PE3hLtn7==gb89EPb;zMuv zwHLEfSo_qBZxSn?^m7bTWJPc)_C981ZyzpcZbxfxeJlClJ>&KiZgqZ`L0GCrCaYMV3VG_KJ@>2Ut4d;=rx39A^z|6ZT5|n!2#B>k z>R1%!3$`Gbspt`D2{iqdl7t#p+@3e9p!vkz#$JmoxMsF_2}+Q%7^$8WvIu@}VulJ2 zP7=3ZNELL?96YM*^vW@CW7h){%h>1=TKb!D#HZFZANOMX%d_H${zISJ#2P<>2=ckO4}74B0$Dj_)fipB3KT$b%4HOAsvY)2M-&hywxx6U^n>n97D zW5D+JC-0=n{#n}Mid(Q(w!E7u_f|u*hcj^v(tD))lqE)dd*_i*t3StDiU!GZ<=-#X ztk-V6B-i+4YWg$zeIw1AH{wTr8oSi~+)v99+J7~VgmHd*3Ixh1FyLFmivDpyZdxTf zAG_oJ=466e^;u`#_o-?UBMh@rxLdnxTCS(!NQ2hTkLACSm^gZ4b>>^>!^{=a3z3~q zMEb@QNuPQ>EH{5SHNNRAr4cweUAYZI-Wg96oa@oq>F9TAPr|Cwg~bbX4^rCVJ62*^ zh*gfh>mUoi!tLWZH&(pj9|hm@sF=!p(FetQ>F~;L_q(@Pm~YkTJy_Q;i3)ItL-v_o z=2@LGNuI(!{ZM1-GH8Es(Ikjk-+fgFD>W`-q-Z>8N~l@1?10-LY{kWU#m*vE@Ybqk zfSy9GL&yAkL?UtVQ`N6zVpn;K{PD2NiSK^sLq@XPi8Hn)tNdl(^YFP=3^7GGiY`|) z@3@0#1pn#r5{<>HNx{M8r#jC)d$Rs1R^`64cE~FAgKT@)5Bm!-HIB5_*BXP;eNJ+L z1R6aut=-y4E&ry?8A)>+`68dD96Mi|N>$m`saXob>we;E?W!+7Xf7K5!&(nla}0W# zNr0n}+;iPesg@wNcNZRLcY6{aoZjvJDeu>_yV_k>n4YC&?Rqv<0GB|+hlgj7%37vy zWqKci(wetXOek}Z*Bv8jPdwUC55}L+?`o5P@2VB6ym1dUN(7sP9h5#r*{Yo^^V{B! z-H7XQ9U&zo_e@iKN`9V| z_rPz#Frs+HUWq#D*=$m9+lb_DlJ%=p19deL!c&iWMu7%N&y0?3an{P>2MkADdiah?oNp!Qx znL1@2;jBdnHKh?2=ESvs;)Z4v;^Kr6zaF7c#WW})Lr})GSUgRkBmp^ zzHv8LO89Wp`36XfPRGbL-8KkOc6MX@dEZa~W(dsfS2k1A`P8j7+w;LQ8gqgFa3NLD6Cc^Kz^GL0M5MvVh z+3Ws2IEs*a;SE`xR6O(ba{s_;43co^fDLDF<%Qe_Cv8MPkm!QeOHf2Lcz)g3^nge! zKRAyRqmMt!fo!qEZAqQX>vCL9yij%p4s8W)9zAdO?(H3W(l}`!b!Xw+_Aavn|I%MY zQJJxh>}A~c1Pi}nY2^!s^rI?z7dXlf9Dl?lpw2eu&@hzI?x`=E<9@Duv)-|M^Sz_| zY+8$3dvuqLt--ABZ26o$cD+5IaH(4R^Xax~g_+dYAJe60t{700<3{Vw{yhCuu06&( z5xW40!dy^=O=EC6DSK+rXB?}INzx+Z2)rjPEnuq<+nPmTeKldyjqA)7BJMea%pdQz z?M6?G-ZM0F8{$F^N8VD1<+Xo#4U8U~+x5X|^q1hJxS|CCi;QcEQ%VY(Cqqu>zyJ+<2=E2JH3*zI^eOpa0p*noE#*GilLDm$Df*iW}mY ze#lhQjyDFcW1!-9T6vVc3@%R^yYO5*XUWcJ`SK{PtZcF$WPHVVg+(w1At**%uCPb- z6m7Qh4){-mImtVn*HoQ67%sn}Zak0gj9MJCfz!WY!fa$}67{x=fS*YkezQ~=d5z!p z^P9j)h$%YqO6Y+2Rj`?}5{*Jv3%olwrGae02dw5t*UpG}tf?SHvv+cudhXWBICOMu zf9H@#l5l3+r}<27!vO0~TE3~_vu0CB#e&!^@hP0ZmEeK$lS_5SqOS+;G@8z@R-rEV zs`{Nuk+8SV5pOK{e*4b-j?;&f7vGFE)uq3u4~L*zjl(&b-EIlV$Gyu=?Oo85GOglHcbQ@^J8hN|Pt*7IpApgU`7< z_p|_3+GFz*lM^0=rx;CT1RW6c~`Mj6lcmpMQi6)Fg2{00fKQa<9-k5M*sPh3U);uNq3Rb-eZJzw zhoSdxqWYr=VJBEyz$LzFFpEnYedi(baNJP9kNh6a817g1n~es^hjzH^mA#knDY-wk z8dp{~pRoeX4f9jln#=c@{C^p!u=uzA%t~-Q5qm54n_rwhzxGeC-uzaVWqWAqF{5D9 z#qo5BZ!+@2ry7e_;??6h3gXN^Gz`x zZyhuNvM-n5@;~|2}tV zi{`w2T^8i8pPqmnI}6@Fc_Y7dJN@;az=JUef8L)@^9=G2t#$nE8D;lkqJC@)kP8pK z3rlR4@{O|HYJJhasa3v4uDrkFe52#{X(9J}k?mOWynP?dvt+3{zcpRk(YR=9wBv)S zmk5<*puO^$Ea=VrKTrbr9ha@TW;W#t(VIN6##2_bUS3kn@CYQTJ7VWYT52qO`hB`2 zmnm*mTl3*Q1MV%us{#0tCi;ha&u??6#+f#U7RaUFgo>!R%z*22)CC2qYpZXX7AJ+zi%1qX8A+YYcOu8b$K|kF)0Zq z*r=vnPNi_Hn^Hqof0yC8spw9N%456Iq$(ON>|J7;7cm<&m2BW8U(~WV_I3ZxJ@sXV z@2|#o`1*eOdZh2{&(aRunFSilyi$kNN#T?uC9-un>iYR-th`j&Ty#~A2kIQj%HTeC zlG9yTYgp^tSM|CZGpj;8UKXam93#;aet6+;qHXGR9C|g9^;#C^5I>%yd!=SMIV~)L;H!9|K zQ%uUv_R5F?kHmrY;EJus3}Ae67so)GqCJgmNxoSn|Acbqz8Da$=Jud z=7e!pY|yj-E|#@Rw_eSv208qTTlUu>18UjgyQ~EeR7>E0>51<&`s;L7LSkTDGKHEg zbn!&4u;(hC;Ae)G`#gikn}Ty`E)l?^y{^(MpL{)MmStBl#-aL3GD8J{a}k2MF@!JJ zt23_=E0#|ST8!vp?!oMlKKh_sh_?_GQY^`uzUmT$yL+dCY= zTAlT_u3!w++W>Bc-BCp5g&kE0d@`tmW$FIS+BiwDoXd3=b^$baCkolfdmH0<;`iiz zCd;R)ESr0mM~$gAP|&I-l^un)lw@NmtNkZ>s|$wlC_KJ?yoc}i&_0oGK+J*t_2pTt zmtFX|A~K`Aa0-a)h?QJtjWC?-x$#JT>-UGPnJCw0n~pb)ubo=t13_R7yGjO@)knmp zU&i5s8MOrr<*-l>xokj9-6P4m_y#OjADK)iJVHE;9UU1uegPc7DtD(=a2{(a6a79A zdlM6Kc8POu@ocp<))+>ao@;SI5>{*M|BJ)|_n!s>(Ey%w(I>3J{B(3 z)Nj3&UFx6JVPe2sbhbY>D}!Q+c_C3(`(?FaCWFFW)MDx?bu{l(bsS>bbM*B1Oa63( zl(i7OS;*IOb>=Tb1ydCK+?-&F-DS)0UKp(*S$E+35qJjaBs1rDx2W!FsH|ZZ3O8C3C+dK&sopbCX%X{`T=7C&%R zdPs0}_U~eZt5(kFAWdM(Q$@Dviw0&}nVXy~#hj5s1biZEAM331By?iS;+F<_?gyQz zGb1jQT7F=5!|v=Syixj!L$eFm+7VU(sBj7249XrcW;+dmMdG z!-{Sam^16V!Vr+KJ#eHL#x_2bYr6GXE^yiG>9+9C2m`ZIYJ<`y^M7m72E*W%r3=Pr zAXUsnu(W=${mBo*i)P8JU265KLg4ZY(0780gd9_oJ{30z{>!YWtG2%LuMu$p2KPzM zx*G_mcpudV7PuQi?p!x8Euz17VMV?01RC?S>|+F(FK8e1Xo!_X>Z>g8?rhX^DlF%b zp2@Y-AA9t6U$23eG~GWCMqMmAqN)UmsR;}wdj`6-e{LSW2m>DC z43$bXURl&%0@bu8OtDb;S55EniLEY_OaB5KT1o_gdH3t66Z)c9*9kmDaiZ5SZR=Cj~y z9F(kcbQX)+KHPsELk8LPIOwvM&hdc}xC&IT!@-_Rtp@<1Q!W2aEIYafm;DciuO~iH z>{D}OW^~sF7&eMlnk}gA-GaHA{YS($NtXblh#htFA+sFau)s;f_`5iHqcbiB^B+h$ zs~n<1i*KRhT(Zmi>CLo1An$4^$#IubJHI6HrU^Ji7*FZ72774Ge(;7-wE+ z5bd|qY;*1Oj2OY!)5P~k%`-<#JBGBaUZ>pqG@Ra!JLpHEDg+P5I{s@8qPt#$c{&eW zrVRZ}@h&|$dw=jmXwCrM63FbPs6V5Z$IT|DmcTO03(UA)KZno45@S^^Qi3O6Fy18nr5nMrV!H&a?$5p4S&@;dlP9X z2uhTIJwrVAP|-b~^9JeQ72ghyS}HuFeeiu64Xwagv%bE{J-7qX-^5T=}y678n-Y z%Z6G@fhVvg=UrISEa!xlV&0Q90wXK`=N$iF@JkK0M0`r)9IsRs!YT>?1Za9V{st;m zvvU|+;STlFEg!noXHurlvmHD2NVpEBgj~{IwD_nIoAgE6!^iB4BjETt!MQw*mKcYZ zrcdbM3s^8H)Ly^wGSC8S2kBQ&7nx43k!{u>D+Yhe^r_}5`YZ^)QDxVZj`{B}(=O0r zj<~PbQnJIcblI{fPDpNf+n9h!AVQzPW=KGeKArJ!&((Ng_C3Hg;P7D@m_A2GJ2=u{ zn#1AoqYQpHR9|CuyjGJDbszilecC?(tq3`3=~f^*#it3L`fvVVC%&IJ%qrJ(G=Pf@ zY@er4sPzj!6VPUhKW6A@j#arg*~&)9aqQ;-Yao>LzaCmjjl zeS+;EwhFrGxJqop-J6Hv}*0U1ed#-X(lC9wmrs= zd}2Rhq-MdFZpU)y7ziN{I;o2%+yy~Mkc8NF9BrMkUR`twa`Eqa0saI)&Rto$jyeK^ z4@2d4$d!4KDn%a{m^q;L0Ziwm2-YcyAbBq1?97Lj68crOnoXL_D`8^7vK{qenkj^eat4AJgxp~>xHhF0 z1nF`0937TQCjJGF)4=h!a6_StZp%ISIBY{Fb%hIzfGTt%0$4M*ineOdzUZVXXCYYo zdaj|h){+dCy3HwxgpPjFjhO@G)-D&2!wVY8e<@ZRpYq<3!w^nWVYKf6UPK^x;iQ-V zdIbAY?`+hoToUVv{j9O0CV>CQ<(TMp-6w=!`iLQ-+n7Qbk4aYeM2g586(G||QhT=E z^O)U!3foaO5re5U>2hr_$G8|!?ZSuYG~un@C<2Z*2)4W;hivbI^j_ zn*<>Brou!?r!yTUSMgrEu`!qq!)6`cleUkP=W#3ME}c4&JbhfG| zi4;;kLXbd^fPesea(G2@3!Hq+_RbuA=W$@C*mk^@1(%?M*32-|@I|i|kr%mCl>&Uo zQ%_b}CjcvgYv@Yq68ex0egYBuXZeL^%D537P;a;p+t1nE9swakE3Y z-Ef)I1#g7kFC7nzE#mP6M%-^vA61^*7K$_{_rj6N7~+*%1;S;i1X|w{v+u5#F(Q7- zm6J4j^Ri?Lk(&)k-?;{6x65aj{(EA>C6@PhE6#&|afr!{_FVwILz4HSQo8gd5_RCX z79LUiaxDD8H`q+EL0uAe8_bV4(mF1Bd73{>ZS-`CuVV1Z^mBpVxE{TjBr3ip4L_9cTxW=!Z#)Wx{ci zNJ0pK8Qh>Ego$6W6Nrm!4L+>4Gg1c|V?hYW292|6JvuE9HXONFbvw{MxH+R>-tOF*Q2Do!V0L@#P~wafV?92wk;(lbD1li(jn_mczr89)MphcF@w zCP}1`!sab>#yc@?f3~A^~Fm|Kg{MCO{z@G<^kY6BuP)evLgJ43l)3VEP_c}Q%)IbP9V#k+b z_5(YRgh1hNQ_MEc10AJ*2bz1f`~W`S{pYZN5_lIx`C z>7_G$DgHp2p3#qe8KIiXn6o7KS}_fIHc1&~A_6OUS3UI@*fKZJoIM$&_Qtj?WB(XP z-lRG2J@>|jei>o=v9Z+Kv7^sy{uWPl;O~Y@V8JdWzZBwO1Pws)<(;)VX772}TJDmo z@tF!zz~}@cA_6Vn4R2wd z;vm@`OvzVaaFggy8K1u;guWL9iCyR<$wyZ7L93@!L;H4a_uiX-B{lK&7F=l)|Ff4& zM3#$>=ejG_Yn8{)%kftlg^86^r8@~)+=xR+)OptYzMu*eLxJZbY|{nSs_xo1W}D^n zFzz5 zjZEGbM}e4(BJEJ_+PwK;sp@mfma+hUpN*`~9K?|=BJa%xuzv9uMG3dN~oa#Px0#(;MadKNdd!-(f<|Gj)Oxi-=E9k zzo04*R(GkOwEPBNV{;C@e$eeeNO{)pToEf;v-vIAVew)JeGOvt zL1}qhMCVBRD%iz?aYMZ~_=p{NV>c%9dM)#vr3}VySb8ezsWTldBl$axymW!ru=M24 z5#%ry?HQSyDr~s&Y6eK`4SE)p+>4gz8{D0djDYIYptp=f-TIA_%xA;s)%?E;vdllQ zxQ@7{&pYX~u%B)JkhENq17_qIV(mWht1=)=Z~Cv$oNJKE$KIcO)N^SxpM-(4#Oh%6 zhcfn>0S{K1Gh0+AC>OqDA8O&0$zA%az4(#j$5dlV0-PlR0aMH-1q*^rbMb66=TRYd za--(G@f5DDa}R!8(EEYTxH;7&VA13 zJkQI=t6ubp%>V!UUDtQr5#JpUwZMS>?EAWX(r)IdZOt!lO|LU2nKr#Jhnc6dhK}_2Vj%}}ooDcC5H}(*Ehh5TMa`awcn8YeyUM!&l z0O4m|LoGpmy?`NDtP&L^czla|HvDuu&Z+^Z3)b1_A2(l`DT@S>aAAXo-pKsA4(hi^ zS2XoOVcIaj?lWKq3LD>I)4rJUOMw))`6$m-FqdLcx)jVL>XR{JZPQ|}O6wKRu-TLm9_7l~7b z82!(b*kp0>5 zPb-yx<6l9vm}5?W;C}OA05qqUiBe!nVR7?FY;rQ8&gkPswOFkqzBVvxfVS}9bXv@x z|BR7q@HVER8}KgQqXKsP_78U4T79v^nwW{qT*a?u$A`=ZbEQqJ*c^_NAYgOpa=cbVU{sqDP?op*2d4u zJ>|_fjk;e#02di^Y9$S=No|9lL2h@{rM#%{R02pP$L^_sYPNJssVgz_@P7|PEc_z5#`i;xX;XIby(S857-ZS;n z_&e$Hco5&kM@*jF#ap5I8%3~-Fzaes`j8kG^)*g#4Ee@eYG@*t~0b9S@kE^h@ zgP9)^kML_rIR!0Ts}gfwGxyW!5h8`FwH7+x;ogDg!?$ zKa|=?geECxk3{Vz2-J?TS8nl-50Fdf&g7-QN|VQ%MU3#nd!)#$_%<^sihOIt6(Ao?dx$3x)xyBuqD$_gWYDXbguG57L_E-x;6y!!0$`mrwUAu(uy0x+mU4Ohe**4cvyF zooyr?Z;&m536{mo7?L~`Q9T0}==;SQoM$)b65@)u=_e%8x{zNnRupZ9uDEDa^QKjs zg6BQH7$?8kVXv_K!U}*Y+L2ZD>5y8Ag$I;ocRoZ6x(?VL7NnbIX2*{f%vVB)()USJ zSdRrASs)5UasRF^_*0YML4fk9&p3{(W z!NUS4`*d5fZgWBN0Q^LOp_z>G*GSFhiin-TwO$pYIq@~Ay~3Ut{}c2Mf{AKN%8$R7 zIs?2;1ZNfuzio=sHI&VWk-!Sv7qHVPjp$Hp8oezBGWO7Zpc0f}{;AkE|B4;oNPjFx zu2yp_Dh?e~)0k<32zu9AaBXc0K7YNu=%MF|2f0ke^RiP1;M=WrB;zN&hOD!G9zA@j z@I+J8hp4ZMga8+|mPEr%#I@j7xV|LvA zxy??@c52KXF-pH0D4tD1dyPKQG-+B?XvE&*I^fb|8w)*yY(8^WC24id)Ar3N%N$H) z0E6J0Z*JMT47mt&L$Sv*8PhLk2+LKID4SDi+*KF#jM3uXml;O#iapi1LRAqz`K3uy zZ`Aj(fFbw_x>m^V_|oCkBT=siHPwJL0HpQUn4{c%&boA5%(v(#wqg7(7Aa7A!jH0~;)W{5X@94D0w61aD(O9x)lkLa5 zcxbYhDWKLiDut%Uz@YODpoce=uYUDZV{zS-2bLJX8UmtRkA)I*=bqCi6JfNF>zapG z_Vo~2mEOdiGkVacg2Yuu-Cj%^woF29upBEIbbD9Y_6g3)*^vrn4G#Jfen*{36KeKo z|8xGQ^;qAJ3b#j1xZ2Tmp!A(;JIH(a2uhm4=J#2Lmy|PNAmx;5@O}Tnb0O@y#gLR@ zd<|T{^58K0e@xI}J>8It@l%3N&jHs8@gcMJEH}+cyE9Vpa`G^v@D;_vx;aAfQZOFm zYYV2-K3#2AFzw;=eu%sQsm|F*zV`f4p`aE3rgv8K$zNd)0g5hD;JRHnI;qp6=?N;w zq*U!8r?(}KhZ~x=G>(gTJ3l<+&mvB4rj(8?d1KYt(`&q1YbC%R8oHMqPLqo0^%BuloLNX9qY3n?F1! zI*C8f>R~H`Eb1K5z^(pcN^!`I?bEW9_Nf4#&{X$xH?a1dExo|@)j|U~z7y&{{u3Yu zcxe zl{?i6aZ`l;tIt0bATzt6yRO(r(F5Fye69nFLWRdEz2+LBPq>D9{H~BWBwp?Mk^*C zo-8@wh}KyxsPEvVan2`#n@SguD!%O0WJxw$kLrU!hm_c zE#S0PUM759^rG7huS$OXNk0W3V~Xzib8C8Xvu?lhQ+wM$(q-wR{7k6vGuEZihs=83 zIX@#ZN#5c9Fi=Tc)GjQDU*1coF(LF+5KAMTwl;lQm_QYA-`ZD+8dgGJ?O#8-u`yqn zRSZcMvWlqN{NlixLuf^UBMa9%Co5_biB!)qTKvcp%;U*vMil6TY0(uTAxCy(XXr)B zn@!okuLR1K4Ewj8WJpqXIq3cuLnNOoTx%rSQ)2tS0SM)eZp11pNF)8O|F-f1X(KQg zZOmkBB8xg|yh}(&XcGDqHR#_!`{m$=_L+Ux*vaR+bMo-NW=x9#==gP^hRKgb7T+45 zo{4Prday}qbmrBE&R5<;_Ourk`b-76Un=_6cN-O2j4L+YGxw1Hna@a|)n~sy{@+SV zz(KrDei&I(TaqigVI!pcxjrjz6t6PmLY-~vO(uK zz0sOQ$q!?FuzR3x)m1|VxEtYg_JRCsR!1a1s^&G1&ZxuI}AuJ~A5+@Pw6E4A6i_Nmq1! zTg>X9Q9bj`9!RQ?nP&tQZV4yw;|Xsu+gRzGRpQRo*6o5t2*t#(q1%2jDV68OK9PN; zmV^%veu*4+f)JeRJ7<7d7~cOrzv})&1A)uSqB1&gvZ}Cr?qZB(4B4qi@lSfQ$i|e~ z#j^?)N>dWaz*CsXnDj4~jVoTA?k%sT*GX?#G&OP9xsp0rL6j?dS)N)%^NW18B!RVG zk}utYCBG*79+*BeL?w@YM}|9q?Foaac0WrwWn~B;nPVTDk{-ayu`W$dc9~nBON}|A zMo+zPpFlaBDmu-WZ0N)uOxu`K#y6)_dwVH;2CDD$s-Y)nKBOLCo@rL?+Z%z*bQGN4 zHDtHc{s1wZun5C1zgLko;W$j#3ZitT_iv11KYOeZCT-dE2!z_FakXdWYT9b!E@;^J+)0mWnNK>td`}TLu~x7)lxE0}^Tw z7^h>WoovHd>8KgkWiV)6HfMm}{$AsI)zb6IqJKhWz+1b()WEV@t~FVvkZKcY*9PZK zU+zl2>LsJdY@$^meiHpwbiyl*@7NywEpIq{AYu-T+tv6OXKEg?6X1z}lI~4dx#n+J zSqX<5(5rvAm>1>Nqzl}E(W!7xbm{&hs*AK-(}I@ix|4R$L6eIR~MrF4!i zTxz)3hePFL(I(%OM$!R;cv!+LH5#}0Evrhk_8FBH9}{Y#vWzB% zwU0zL{%MujtG%b6?A!@yP4GyZ%UNapP+h|xBUQHY2GD7{ZBICYvQTwIdX9AfdS2P4 z&e3sCJ9!TujI5%GKuvhCfeXmnR%d_O)RRVW4 z=F3e9&``$^TJwm%T_xTZ(G~GE8#>v@E=T}=+Ut$Gm8y%7O|&n|~%;&q-9f zG>tDy#4yCcSNj1hN!I~b!RbIMW$z)E<(E$q(%$GCL_4{E0klE#Iv*}opbA1wzb;>| zVS^+z^@-iP8byY1VNwh|V_RWWxv$27RmTC=KLF8*??2ZuPbp;|X+Dx9-M$4G{ZZ^T zWi%H`aO?1scN=*_2Tv8@L40$ko*wdkVp#4WGWNdowgGKb6~Xg;yDlATgJaB;>cH@x znXDuS;^z^mG(tdy$C(m3)9W{$N~qC;eZ7xFB6Ct?XVcDidmR~vS#Rax@>wiSSBoIA zaKUWh997G_)W|9Y*&yhrIQ_X1<^Sp|q=2=V+=FnJ&Kk#BWXZ>*q0Y%YZXnAUV50-` zT@3cy`sLoFb%H7FFWEWlmHA4x$aTShGzmW&AR{@V9Nw%Qx^{dz`|4Nt`!GVlnFiLw zmhuC~SREAU%;NJ(4hWnvptF83Amc#xkgIof|K+IP>W8lx z(9Jh+Q(Gm-(?;&qjyxh}>FU`UIgrem?1B$fW;$r7x>3&mEA&<-&WaEM*v-jYW_;|@ z@a7;D?ECb4V-E3nJSBb`q@WoyIO}#+sg;uGG0=NettSvL{oWt3rX~ovFukNZ+%DGWD_>m3(9I)ApL1MV;kd)Ho+7s=6muRma5 zgzB#8PfoqoUeB03B(XUG?=-{=>aUZQW8-ZGfPPD&Giz^spsZn&-q43mGe!oD|lFK(KYJsuotD2w(CqHTh&Rr*v6x>J+tB{^Ns74|QOmbeX zFaiF``9B@675?chDbnA&$B5+l%O)=2%i0&LBsSGLW_)njltS;LZ8)E#3PgBCN0Rsa z$}RE%eEBI66YNi)EEJNE4ZHkKE=i`Q0aqAF5A^vDT=`$a@L~SOn8KD6Je@e+I;xUV z)4#X${tr*x`TC1Skyi6^A9HnHKkx(HLyPW$-Om!QXeeThk0G#D;5x&QxK;($miw#q zol^0G>b}O1IOKqb^fkA+q9#Sve@?>s9co$YLWH-{v{M3u@=fE!N#`SDzD|R5^$uj* z4rkSB^*q9y2mdK1X~^ao?QGf>Gf_DG?m4Qv1xqbWI(0FtM8ATFI74 z!2+s=*&#c6Q^(Issj4}znQ*t?`W=BO9zDb@#x|4GFPz8aY?gV1^JhB|0^GHRt%mKn zP6p2oO5~bQCHBBSGAD5R5}Mc1l0^I4;eS>k9NEBjZbl9NOu&2Ap+D{83%~iwUe|#= zpEs^pHLr0FATY(>UG09h8&q9(2t!Q2d8RG*YN3djcI!vM+Z%25+mk$eFO3%v%M3#P z?=!IW)s9<#q9d@lP94nP_PSk9MYaVYEng@2LIZJMu}^j;Q|uu=TG&+hTJ-#*>|#7`y&jGf5xQ^XL6j z1J4&PL9lJ1rY>#Ovta*KOG3ajPu<`7#kVF=GapFuHyp4Y0nr#j%~P1`EJj$L(b5~K zp}ZG<7>IOXlBCXpd@C@WJbEB3RxY2iXiyfZX3LwHastargB z6DZFQqS<`Y=l1}Aqm&@&u~Huadf7et2$Jp8{{b3<`=icD%&>sM?j3p|Nj% zhZuJ)d{S_ETt#(WHaFW*;|fy?PsLdZP#NJsHzqLjMN*fgT+J?`nV+?E5{{zx?600&G`zDJO1R?pE%yK<}M_l^LZg_ zTZbMX1+lGTwtP?uzSbCMN;xv5n$Q3RLC2) z!D36^=)6L~Vh=m~nUf)5GMen}=5&qDBL5UWywsert{uxgHh;!^jU|L(mDvu5Z$mgWfpfT40?l^{hE**(20phV4oXfJ>-9s5T8~l18%kIPjf@B zgonEvQ04biDoh96E41BxB#{_Pi$NZFQ1Mm+7PIqJW&SD)5!|_o^pIwbD70W*JHnlR zQF{8)EJ!F5R`ZXFJiBpxNV%OdiTVb^U_=-Jx`ta{#s?^k84XRf5mGNv4m7rgeLH)b z%^0mTexRkI<#`YBj5mPrd_^m*GLDv%&Svr+RtUsLY4!~L`$?U;fNs)!FvuFh->bDA zxYA+|cOn*N{R;+p=zXtcTeL8-(Zp}BdckiVo0F33f~lozJ2&IJp^akTe!gh4o!8VU zj7>4*Y3+Oi4O+Ja!y#mkJEnb7epYy#?nK_?0ftnA=>4OamWHl%UTh97CvKa=43}5&z z1ATpC1qXgq?ybgiel1@SsGgjZK5Vb|M&(zNvso8HmZ>r&&ECU`n&Ho}_IOqV2%F#T z?sJ38_AEkMS5HpUrs)YWT@^$s77JCa2_s=Xj*`W+s_$s?CkjQUEvRGi;X|8A8lT~G za$ky0Cfkh~`>&WDe!pd1fMBTS_}v;B6HU8|qH&UbCwbZ*u<7s1Z4 zW7{aZ-nVY)3@o`W{GYmd(C(5|a^r_VH#?l|LV7$a>7IG~Rv!r{)bogG?-v(Ka`Bya zqT3b?4~wv!(VMgF8GjE}vTl9`vk=p2 ziIyF)!y(7cR?j=Oz! zkcL&{llGeS<2pCw*#`H@^qv{;=l>}_65WV6CCor62))Vj^MDhqiMg28ovuGVKSG;+ z@?p1^#2pmMBZFF4WGGWpjgJryd$q%U^L90`giE~3A-XBTsb>Op2|FKjLGo$*i{pB6 z+hfDT%^!*9%Iy?+RsQ3~sb`NbyL!nN=T@Wn5?RiM#BPm0@U(4vu!Y%+7-Q@8FVW-W zVm`XLq7J))+jh^s-#xZq7PtKHh;QP!);))yEBUL**VN*D9u9g84Qj3lUJ?u~V9?+^ znP4Cs`R@MG35{E4tM?_(_7h4Ahoi5)#m{CF_wUjvOyVqi+m$*KWC3=%UzKmFl+P_c zA3veiuiEv+%>LCQ^vG(@$l0liD`M$Pr%S%6ns#A74f=WoeraIL+&7}0c`~gh^;$k^ z3O}Dt_ub4|rT+MZp*o9;_>6$#1nXd86P$+~&Kpjkd%va|dwUV@2x+l=(=BS{g4 zo;a z@Vn-4yYq-!X$~j>1com&_PSl_nO>pNNPctRD6hi@B`?3X-P3dFg@^Kw&sq~;FiKY; z2yV|N(xTjRUH#>J%&A6Ze9O}I5d8)=NH%kPqUv~j(JzxPnbL%d{9nw07&6}1kR7wq zcd$LsgvwLI1pRsskFzloM!*VP@Kx9?p#co;uR1I-gIj|3ly@;Wh&dH!K^yARfQ*(` zuC>tSa`CVJvly$SA-CY8pMKcT`+UGfo^b}xr=>8|)H1J7vWG490)K`p{!6A+$sHE6 z6KL#DF`q^RW}%X~lor47B}f4x#JYQ5SR7Di3%d4jvOE8{(y?qYSu;?`uYpmc*^hDD)+wa-m)%1P(E(j$D((WA71)la6;gonA@`+jc!NcWTz<0GZVLrAa(ah?yaXh^xGfG56K;)Gq0t|WeQO7a!sFPC0uk@N_Ymkx_jJBs zc2H)w3uhI-$^~0wgW!tsuE&PdZB{8qtV4>Y@`;9m{jQm~WaNUg0Q$P*bt&#$v};c_ zjxB*O^NQfu%lf>R+swL(AHV(3{X?1%U`-BEXmL;)IAryg*~6L)euM6-rVn>BC@{NfX}rle$XJp= zOeEi2TfO4r=Ja;8$R}cf=OhT4?0sGKAK_(BliJoz_k@&J)R&t({N>x^iMS3Nsx;Q?gmJi z-&sOTTQZDgv9$vD7HAto+g%_ z@;oS;&i;g@yQ;!;0aqP@K9xa?;h zn-VPh83`*$$&EdRa)dqicci`KqEmdL)3f^C~JTZ8q z9STp<`B%4;RJm2X9;?jv3*HKdA%wxuJ-}!iHGD9l=Ad}3K$TF{BloLTA=xYsFXtKy zKe(!IMoma|<`GH9V@{5W`CM3sMd#z1%G}$A09VuGA*W|F_fG{8y?jvD5~cVEIn_dD zNqTkt8rI{017p>Wq%NlSpW7unRh+NMPHSG^kVS=kbNbbA>|T%(dEZ!wq5lFJE%WKc z1;J~A*OXFg7^?Op4rqGt*K(D+g{3dA@Mq%%VAjx4AN2 zS0LD-gEzMg?ue#?g@$cMH*nAZud4xTQd%>*i0CF|4=I-Cu6ZUY$RYeo8Mrc6Z|ve{ zWnj%w-AM>*42u)qBEFJI2(d+b_zzN-EU&Zw{#wf&Y%P%dYx8S+IHU=0esP5U|NYa3XgMvrS!*z~cME*! M>l*2lXk7^ZKToQK3IG5A literal 0 HcmV?d00001 diff --git a/Netick/Editor Resources/Gizmos/Netick/NetworkHitbox Icon.png.meta b/Netick/Editor Resources/Gizmos/Netick/NetworkHitbox Icon.png.meta new file mode 100644 index 0000000..af7c0cf --- /dev/null +++ b/Netick/Editor Resources/Gizmos/Netick/NetworkHitbox Icon.png.meta @@ -0,0 +1,134 @@ +fileFormatVersion: 2 +guid: 3e1784390e53f9f439e4616faaeb046b +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 0 + mipMapFadeDistanceEnd: 0 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 2 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 0 + 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: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Netick/Editor Resources/Gizmos/Netick/NetworkObject Icon.png b/Netick/Editor Resources/Gizmos/Netick/NetworkObject Icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7c77b6b4fa9b69bcd50e73bb373f9b84f9c09112 GIT binary patch literal 51761 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�S9De2GVHlp4DwQKf;DX1wt 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

ax4=n2|?aKkyg>}CRq>VHo5V&dbpUB5Cd&BXw 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 Im8`@52PFOimH+?% literal 0 HcmV?d00001 diff --git a/Netick/Editor Resources/Gizmos/Netick/NetworkObject Icon.png.meta b/Netick/Editor Resources/Gizmos/Netick/NetworkObject Icon.png.meta new file mode 100644 index 0000000..ae06ee4 --- /dev/null +++ b/Netick/Editor Resources/Gizmos/Netick/NetworkObject Icon.png.meta @@ -0,0 +1,134 @@ +fileFormatVersion: 2 +guid: 79ee620ba3737f64799cdf499348eb00 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 0 + mipMapFadeDistanceEnd: 0 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 2 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 0 + 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: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Netick/Editor Resources/Gizmos/Netick/NetworkTransform Icon.png b/Netick/Editor Resources/Gizmos/Netick/NetworkTransform Icon.png new file mode 100644 index 0000000000000000000000000000000000000000..97a770c0cbdd23f06892e14e532c262987a13af3 GIT binary patch literal 49857 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 L{lAM&+J^rx3(m8e literal 0 HcmV?d00001 diff --git a/Netick/Editor Resources/Gizmos/Netick/NetworkTransform Icon.png.meta b/Netick/Editor Resources/Gizmos/Netick/NetworkTransform Icon.png.meta new file mode 100644 index 0000000..80a3acb --- /dev/null +++ b/Netick/Editor Resources/Gizmos/Netick/NetworkTransform Icon.png.meta @@ -0,0 +1,134 @@ +fileFormatVersion: 2 +guid: 0e217b04d3385ad419d6047def56b56e +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 0 + mipMapFadeDistanceEnd: 0 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 2 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 0 + 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: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Netick/Editor.meta b/Netick/Editor.meta new file mode 100644 index 0000000..f87d4db --- /dev/null +++ b/Netick/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9fb364e7d0c059046a6fbecb6b4ae7c0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Netick/Editor/CodeGen.meta b/Netick/Editor/CodeGen.meta new file mode 100644 index 0000000..74145c0 --- /dev/null +++ b/Netick/Editor/CodeGen.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 405a58abace1cc545a5b5185f8503a8b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Netick/Editor/CodeGen/AssemblyInfo.cs b/Netick/Editor/CodeGen/AssemblyInfo.cs new file mode 100644 index 0000000..6f5b2b1 --- /dev/null +++ b/Netick/Editor/CodeGen/AssemblyInfo.cs @@ -0,0 +1,12 @@ +using System.Reflection; + +#if UNITY_EDITOR +[assembly: AssemblyTitle("Netick")] +[assembly: AssemblyDescription("Networking Solution for Unity.")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Karrar Rahim")] +[assembly: AssemblyProduct("Netick")] +[assembly: AssemblyCopyright("Karrar Rahim 2023")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +#endif diff --git a/Netick/Editor/CodeGen/AssemblyInfo.cs.meta b/Netick/Editor/CodeGen/AssemblyInfo.cs.meta new file mode 100644 index 0000000..ac69191 --- /dev/null +++ b/Netick/Editor/CodeGen/AssemblyInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: de18034130db7804488a3daa659a0cb3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Netick/Editor/CodeGen/CodeGen.cs b/Netick/Editor/CodeGen/CodeGen.cs new file mode 100644 index 0000000..6fa811d --- /dev/null +++ b/Netick/Editor/CodeGen/CodeGen.cs @@ -0,0 +1,69 @@ +using System.IO; +using System.Linq; +using System.Collections.Generic; +using Mono.Cecil; +using Mono.Cecil.Cil; +using Unity.CompilationPipeline.Common.Diagnostics; +using Unity.CompilationPipeline.Common.ILPostProcessing; +using Netick.CodeGen; +using Unity.Netick.CodeGen; +using ILPPInterface = Unity.CompilationPipeline.Common.ILPostProcessing.ILPostProcessor; + +namespace Unity.Netick.Helper.CodeGen +{ + public sealed class CodeGen : ILPPInterface + { + private NetickILProcessor _netickILProcessor = new NetickILProcessor(); + private List _diagnostics = new List(); + public override ILPPInterface GetInstance() => this; + public override bool WillProcess(ICompiledAssembly compiledAssembly) => compiledAssembly.References.Any(filePath => Path.GetFileNameWithoutExtension(filePath) == CodeGenUtils.RuntimeAssemblyName); + + public override ILPostProcessResult Process(ICompiledAssembly compiledAssembly) + { + var assemblyDefinition = CodeGenUtils.AssemblyDefinitionFor(compiledAssembly, out var unused); + if (assemblyDefinition == null) + { + _diagnostics.AddError($"Cannot read Netick Runtime assembly definition: {compiledAssembly.Name}"); + return null; + } + + if (!Weave(assemblyDefinition)) + return null; + + var pe = new MemoryStream(); + var pdb = new MemoryStream(); + + var writerParameters = new WriterParameters + { + SymbolWriterProvider = new PortablePdbWriterProvider(), + SymbolStream = pdb, + WriteSymbols = true + }; + + assemblyDefinition.Write(pe, writerParameters); + return new ILPostProcessResult(new InMemoryAssembly(pe.ToArray(), pdb.ToArray()), _diagnostics); + } + + public bool Weave(AssemblyDefinition assemblyDefinition) + { + var mainModule = assemblyDefinition.MainModule; + var asm = assemblyDefinition.MainModule.Name.Replace(".dll", ""); + + if (asm == "Netick" || asm == "Netick.Unity") + return false; + + var didProcess = false; + + if (mainModule != null) + { + var weaver = new UnityCodeGen(); + weaver.Init(mainModule, _diagnostics); + _netickILProcessor.Init(weaver, mainModule); + didProcess = _netickILProcessor.ProcessAssembly(assemblyDefinition); + } + else + _diagnostics.AddError($"Cannot get main module from assembly definition: {assemblyDefinition.Name}"); + return didProcess; + } + } +} diff --git a/Netick/Editor/CodeGen/CodeGen.cs.meta b/Netick/Editor/CodeGen/CodeGen.cs.meta new file mode 100644 index 0000000..8405d17 --- /dev/null +++ b/Netick/Editor/CodeGen/CodeGen.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a95e9c733c98e784782672703cd87449 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Netick/Editor/CodeGen/Unity.Netick.Helper.CodeGen.asmdef b/Netick/Editor/CodeGen/Unity.Netick.Helper.CodeGen.asmdef new file mode 100644 index 0000000..1b4c58d --- /dev/null +++ b/Netick/Editor/CodeGen/Unity.Netick.Helper.CodeGen.asmdef @@ -0,0 +1,25 @@ +{ + "name": "Unity.Netick.Helper.CodeGen", + "rootNamespace": "", + "references": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": true, + "overrideReferences": true, + "precompiledReferences": [ + "Mono.Cecil.dll", + "Mono.Cecil.Mdb.dll", + "Mono.Cecil.Pdb.dll", + "Mono.Cecil.Rocks.dll", + "Netick.dll", + "Netick.Unity.dll", + "Netick.CodeGen.dll", + "Unity.Netick.CodeGen.dll" + ], + "autoReferenced": false, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Netick/Editor/CodeGen/Unity.Netick.Helper.CodeGen.asmdef.meta b/Netick/Editor/CodeGen/Unity.Netick.Helper.CodeGen.asmdef.meta new file mode 100644 index 0000000..43d683d --- /dev/null +++ b/Netick/Editor/CodeGen/Unity.Netick.Helper.CodeGen.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 71f67db1ca868524aaf401e71f47bf52 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Netick/Editor/Netick.CodeGen.dll b/Netick/Editor/Netick.CodeGen.dll new file mode 100644 index 0000000000000000000000000000000000000000..39775ec389bd2486f44a494b7431d22010c9793d GIT binary patch literal 47104 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 Btswva literal 0 HcmV?d00001 diff --git a/Netick/Editor/Netick.CodeGen.dll.meta b/Netick/Editor/Netick.CodeGen.dll.meta new file mode 100644 index 0000000..781927c --- /dev/null +++ b/Netick/Editor/Netick.CodeGen.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: b8756eabac565c8448a006d6596cfae0 +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/Netick/Editor/Netick.Unity.Editor.dll b/Netick/Editor/Netick.Unity.Editor.dll new file mode 100644 index 0000000000000000000000000000000000000000..3b1c7e9a0b212a437dbc8603d3f5f4ec6a348d0a GIT binary patch literal 61440 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 GDezx$y4)`S literal 0 HcmV?d00001 diff --git a/Netick/Editor/Netick.Unity.Editor.dll.meta b/Netick/Editor/Netick.Unity.Editor.dll.meta new file mode 100644 index 0000000..ad1656c --- /dev/null +++ b/Netick/Editor/Netick.Unity.Editor.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: cb21d7f12495d1e468d3074021834b42 +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/Netick/Editor/Netick.Unity.Pro.Editor.dll b/Netick/Editor/Netick.Unity.Pro.Editor.dll new file mode 100644 index 0000000000000000000000000000000000000000..4562b96b023967ea0d9bc251316f71d19b20d775 GIT binary patch literal 8192 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 literal 0 HcmV?d00001 diff --git a/Netick/Editor/Resources.meta b/Netick/Editor/Resources.meta new file mode 100644 index 0000000..543cabd --- /dev/null +++ b/Netick/Editor/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3e6cc51ca8b30b8429d553ba4ff6a72a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Netick/Editor/Resources/NetickBanner.png b/Netick/Editor/Resources/NetickBanner.png new file mode 100644 index 0000000000000000000000000000000000000000..c39d0b98cd1a1d6832a701dc91200d26eab040de GIT binary patch literal 21723 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 literal 0 HcmV?d00001 diff --git a/Netick/Editor/Resources/NetickBanner.png.meta b/Netick/Editor/Resources/NetickBanner.png.meta new file mode 100644 index 0000000..4a57332 --- /dev/null +++ b/Netick/Editor/Resources/NetickBanner.png.meta @@ -0,0 +1,136 @@ +fileFormatVersion: 2 +guid: f01bfba6a16759f48bb01b524722d8a8 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + 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 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + 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: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Netick/Editor/Unity.Netick.CodeGen.dll b/Netick/Editor/Unity.Netick.CodeGen.dll new file mode 100644 index 0000000000000000000000000000000000000000..f3b445d344a838b221e18400273f8bcb885ba037 GIT binary patch literal 22016 zcmeHvePCQ=mG`;#&fJ+yl4)ipA1(c0($W&rWK5IvBgj{pq%`y+Y10oYtzj~`O^43R zP4AtQhMF=FL8{`mDkv{o1r>c+*AHA-se*$0x+|+FF0cZxAmGccth#Gg^j&<}y1(;0 z_s&DmrQ8f)`Nij9lz{U`qbqJ= zQvSd2beasp=l4mXA+F?ze$9p`|J+4X1K8^ah<23Y-l!cV@)zO#Xm2cP$FjzeEZRTc zi~=~Jt0OmB;u9shCT7`I0xcn14i#2(7~i7L6_~D=Wu#0HvaEC$zRask;46sM16uNl zv0d?D*;Mkvs zwXRU>wHA1$-a4jgCZrCSP$tjvT{@)u^G$W}ep1sz>?R7S>FpmVniy zxZ?Z4avMOclA?8qX4isEJ^*i5?d?F%AQm76$E2#w__!fweFir3wCb%FtJ-{f1Zbww zG5kWr?US%6I)>Dv+&$1(tz*J>fJifUGN+@=NKQ7}vaMD<>IWp^f9_87gk*?wy~f|} zuLtNBfc!1HKvye*$zSzBgog~Gh(`_)@`SzSZf2#2yb=HNyFIFKY<~+

ZoSZ@xS zh#t~g-XX^HpvG8{K0Ly`BR-d1$Y<^WRmcZs0biT0w;=ZgeiHJxDo83SRna&9jslQO z2dg_sMDRI~^=I{~F{Zs2MGL4` za{5^be%;(94+Rw*P*!Of2d^2VYPi|s`&@u^4^N)~l)0aa z2_`~@XCeqFds%I&L{lk#UnxFV zjz=CWmLJPQY5!YG@i1>G{?n!SP&xi|DL!0|f2tH8DaZeFDIVcoI{s^=c!Y2%ex6pM zA40Dbzq}L=Z!E?4mg472eBNuUky8A^a{LtIlk6YYvj1RP!2IF7(tnN}1hgfU_a7u~ z#>49>QVM-%`}-Oq8@P-=}_rD>GGtRlRVBL6puq9 zIe=gx)|NK4skN8{^3Ek$P(lLX=aS4XA%SXhNzN-FffAKS8fDC?^!Qto|Kk4%x?%-j zlybfozqgF0f|BitVkQ+-Y+qkYP(i`==3;`1>NT}CwsOAIu~7>k=V_+Jb7P|jIQ1;* z)jo3y51)SQFr%;I;)n!HSx^Lh=6jfs#a2DS1$}zUh44;jbz=z&On9WjOVEsv2hU}b<>khx1i(B8JmyWz z9?PU09dz$QT|LS{S}>Y^>=r=11u3Q9Y4k40!5@!#90bR({LAf6J1S>&tX8`Hejt|T z7}J84cx4Ngnw9O1vV(e*gW3KdNX%PNxKIw^0#xX%<l35J*YcFQ?^+d~7`f7HCGuFiJp zf-8d6EhjNRW6Ot8rdmFN@?c%He(a;DG?}-dtT|V12zm=H4w~CR+h~3arJF!L&h_Gm zzXJfj`9F$C<^(ics)5~Io(r%2tHm)bbkdR2wh6_ zy*yDZRX-q99}48v4XCsa;UNgdwXmT;=14sURah~Ba; zyzwpSS6LU{{gx0_(xtJSsFE&CUnumw|?yULHjZX@=6|pZNX0Fl)qGHZOV^wv(|D7IQ8gCmQ0Wx<=c`~ z0E&QUtw5o8N+>L?a`#VwM}8ojS3Tl76yAyZ2I%Wq(6qq*BxtZ)-G#@K;(8K0w?^4c zns)*Sp}&OHK|;%}+&PHsLl2^T0^6cx>r>_!6XS#BPucxb zwY3WQh<>kh5%^&XOh|BqAQSfo*zM4Ee8HBWAon3`Zv-9JVRKPOwh}n*&vk6RoI7%* znqe>)eb;|USf`;XE*})-9{+=(2z?U4s?*K>8)|fFtm5+jiu$KT-4x|5qC6$wU83(~ z&2U7g|Ly1Ua{s#;b*csb0R6k~p+JDrelA=5uLpIq>UUJ@^j_bN>L9JCeJK#8FEtDV zg7l5ZO97o4l&7^Y&3Jzp3ep#9UIP4Q^-qB2Y#r15FwBtOq72ht*AIYxeRWg|()ZC9 zSkUWqjl!G{&11-adKmJ5^c!k|bVraO7fLuvo&Legl1yMkoqUi-r}tHJ`5WSLv^EO( z3h-~F`gym5=VnM7r02jhNIwvqzb3Ts3-~D^?Z4MO0jyv74Wv3*!}W-l=^ya(h|g9r z=f8}w&1W09UZ?M<4wJu;b=fF%@dde8vnUUVzI(vuJo-ED^R+ttp4dJKAKT|ySVpJ6 z7xw&6fTdM~%(FVc78n*Bt`+64AZ;T(SI1hM5mve*^dD6^U9EGkO|Tg321zjEp8u#? zLZ1(9!wfD1WGQWJ_##I6UM+jVmqq!s?}nNs6pJv;X8~D32R$P`oxUOJ*M~-YE9i#6 zh%ZRJLjGoyI$a5FE9iBFv0oKsq=xI?s^h*@zy|3=1MB{=Fqiwhtlj<4rID6KZij3) zp{~=omu3EWgv$qgTpq05ft8oYS&u?5H>h5Pe(TjycGPqEpu%NV zl#f+&{l+>juM*g&1^k34e<`r11omA5`>z82Sy6gxxYvCG8w_#1Rg{;B@&of2@|&t^ zl(+lpP@aXfUCPJQ25*=0w7S5Hc+(c6oDt>ea5L&(6y<`(3%qOSpn9RV5qWQ=sCSF{ zI?$-TUwCx-3s`_@`T$qxN|f(JIUI#Km6LS5emh3|Yi`la^V1>riibt(c1qXn25wC= z<8G(#)WyB{{W9N5dA+nZ-6cC`U3as$nnss$zrUq#dv5jC(3sPDJ@R3+PB<;9 z|G2l7E?CBtH`8w-rV^ynvL$4hN8iu4W|ev5y+HC@<$VDD@ix)=C*|sScX>m!Rf!=e0{PoW4+IIUk)eaRc4Bl*_Xy!CWoIgc<)yY)w4sn)oljY( zbzR_9@A>p@r}cxnSG`d>AzCjgf2hBZnrRrTD|7jx_ciZQYQtK{t&h(meHmSW4Fk7k zBK5eV`>xY!4Mg!XRyWpo#)Si|`rGIhr}eyd6@GB(h)LWx=Jnuye-SoNO!<>}SLy3$ z5}O>N8|hbpalMbmJ7p{88P_*ZN0)5%p*2XaiAbkQ@qS4^pT?AJVxT5qw?%2Ofn>6+0eTs`MOo`!3`! z1brW9RB8r|Ml~MBN^VWysS4Q?;<`ddu|rbm$3o`o#V$#f9|2sYA*=Ez0YsrMfxk-JOLHJxS80zJ_k<`VgnKFU=A0F}vuO0|!NDVB@Cq4px)a*@ zgd~1i3VEtqPzp;Lb@AeGu@#qY`BmV)okdZdjF}fACtAY40J>kAeO)eX8LIy-58v@1b7RUw;b?s-LU>Fg+tUKSQIw z&(JIMkM*CYxO!goeUwyN8}Fw>>aS~0)2w@l*=P4mDA+&cPJs{hK8%4MLKk`QU&_;fZw3+QSMNg&#XGoII7$&INYtCsy9%7 zwZR0PmRukx+2)7nKDBw? zOG=Nxo>uF8uK@egs$VOo)rIx1p}yF2R=H38RK2bqQqSliwawuS#4=Gmy11I z4gt;_&I8S@^$fWu^gE2p)?;`Z;I9W5ekbT3RbB|M(fS>m{H<@3b_Vu8sBLye9}xWO zoNA=rXhCIL29?>{X;|j0;XA}!|3nK66o*;ZS;<=D)`nVoL ze&I4gr%*1W&!SvL-$A*Oet@!zo<;d~`cIU7r1@gBNx(;_0rjf|JV9-~J~|3MeOO1g zp#A~c4AfU z4CcvUQ7ieJz-oXLoBzBDUfd{!$@2qeVi*3O+Dpi**hBb`rXipF+=TU~{Bt`-DChTm zWb*RQHmoq^pD&6rN}&g^8uH4Z3TbMve$^st2l1VU%w31f9m4lY`Xr^PPWdE#1>ZX5 z8`PsdglCgtXjhWKI$m;F&**4Z=V%9AGL#v%%t^z_PH#wNlJ)_#5{7N#s^YRSmxieY zaV(KFEryHM?qn+Ekmq57ahGJ=YgzHiTm`{piP6#iq&=C6Pxqzbw!Myfl>>Vi2+77b zBvS^Dg60+@ZCcZ~Pch=@4N{&C+B_b&Cd!FdIp9^aVJefjW)%$%WTw)F6(36(X!V(? zl#$3L%?uiwlXe!5otb2Idc>Tv62_HA2BcYIyw|pk^jK|3DyJLFNutyJr zVJ6$vSt?8>LqoX6)cs7|36F3Niu(~73>y1mhy4T81>tMXh z;nBf$Z$RAH)5D&I2{Xs1Fne^#u$4RvgAS%AQ%2gz@E~TU-^j*cmdmKGt8;C~>i&U_ zRckuByVv&guU*~S-@Bo+Z&l~2j_%bPR&}iF9T@28>t55<)z{rI(A~3c&A^%s{rzkD zI@Wdetf#*IRh^wZy=!|0Hf-qX=@?kIer-qhy7e8a*LHUFZdkv%ueYP8ueYbKV|8C& z|LVS;bs*|rw-y7gUIR`8j!rZ(ZD);iY;cIS8rkbi>)?9hK>TnLPBFN7cv$*Wd~`&T z??iilYCKL8Ms{>~e5^m7b?Szw+5m4sM8zj$TeyzEuuBievj=R^Dma&D9vqcYI40{e zEn{-+_2$!Wf5(+ei;g(r2b8EvS+Q?zWOyqX;?{PaNEkG*aW+4ckl|2Hl8ZCF3c$ zjsO!AAhpN_{8v`uGEtx(jbvd{z<91efvjAKdN6upm>$Vx)h zWkm}n9%H<)u2fZYD$Ft)O{m0V&Tl`Ht@N3jmvD*3~fr_Z~WIQun=;OFIkBM={ zk|`)#z^hsNAS`PQ~oMNLz#-3HNaixE8iVTk4IRu z_Xv%LlaoeDhI%?}W@1=3f*-z4DybYSRCrEe+ZNbV%9N)YIa)7Y+a_opFN7-g0 zGXW6dBAGadUWsHno^qAofz1r|5S&y~&iV$DRID#q+;o;N7(`~yzIZC-$SxT}g>l~M z#m0f)VRu^SKa~<0Ty8Q&M2}3T$IO%iDBgk+*1)tQ7O$S}boU$kdF6r|tv6uoA#Ab{ zb>l-BTAwjScV>t)%m`+;qBs)h$R-59>OGat2oXj8aoUyg`nD;IWMwe4WRp+(l@TLG zwg`bGJ^?33Ul`5J#JiJNil?&qh!bLni5$%AH?6er04D*>0lPujEB3?g48kLw-8aus z)Y(`(x%&~h$8MB1d2dz zd=!BOhX#%$j7gyl)^Kcp#^vNgy#hwe+Z)7>Gz44MF@dP^(ke`4TB7X^FB&5$!~IoK8kEjn2Ia-DBBF?q zSSRN&DuWgnl_3TTJ|VYUMKW=xH$WHV8k2W!j%&?frkV}DlJ3ALTr>|$qy z@SzIQz-IZBR%sXxnYn`_ckPc)r7B_MmI1wZK)J6f-Q~FxTtdRhk2m6C_MGGUn-U<( zg;uU#J4=HllFJ-miK26`ZXo1&z^{;t;b?HylG8c4eG37CGkaNDa#FLInu9@-D}_M| z2}7nGuq+_4tjLNXnlh_n@sSG;2w<7wX34q)bm@~E%lWZrMG?)b81K_)G7GiF5$JOcpl);*_LsJ^ ze7wO*TuhwCor`+_v1z=h&O3W#YBMu#lZ_MGU}m>zp>FQqkJxitPW(9AkbL~Wh=-F{ z=*7B#2#|*{yXZ_)1e`!9yKYegmM14$?hkNi5a%Tuo0M!k#p{q$<*aSfKzcGeEvs_d zo1Zu-L)l)@reS10EFFebLUUINIXcWNYsau zmYLzZB)KCo6H}rwQmhtctVl^`Lz&LWuU}d8d!UOo{2O6`8E$en32gk4;-}RX>BNznx@{&w6JO46fT@ZZkGpWo-u1$ z%-NwSY;LmCu0=(Rlt%+kvb%`kZ#3myGwz^kkK*l>8T@jv3MH=5eNk%1ZM_ojqc~;o zpGjG?Ei%v^M{O%=SxQoZ4x+W4ra;5(G~iLtAZwwPrZK#KHx0-*TKj>|;LCI-Y8L}e zRWaaF{FYvAF;7}h+=}7N8`%@@J||0Mnh=siF;-mg=b8zgQ{c(6?1$7QV1JBM(i+r0 z0@-cI%bLXSN9I^f=rG1%2>%LW3X5z8bWCV6iE&Ze$r4V{1RVfnlm_wl^idkX8-fY+ zo6PIq1}K~tW3XK&(30ay4cOL}C+ruImI9=d%0%RG^hs{wwIA|*?wK=VFI;g| z?weoVXFm7UTGEhXJW)mQdr^cMxEd7I9#IZ@qpA`N>QTiX&i%;aQ$j6Oq$=TAZ)mnk z_o-ncyw4k@@NBIoN{hYR2QR9j49|w-V}W?&z91j>@FO(47)-+ZKod4Z@8+r~HH34& zQo>U;bqd~?Y6#C>goh^pi0slX2v&0rRGCCG^51xl{fqm*L#qe!%ZngW-KmKJF;0YA}>L4G{hh z@55Vw%Az_|CxwCjsH#S&E`k@<6*b5@MDWHW8pfFW@1}Lw*AIxzOw(*dRPR4Yz|I z%?Qn&3eV08=nT7Fc=k912k|qgdG*EURmISgToZ==Z7qb)y@CPZLb)@7(?bIDO2M*c zSRjG-=%Lx~2##k^sg9yASHiicFjcZ1D1tsC6nG_%3l@03=FZk@>H^GGsWC9zZJ0n+ zOxbI4rk`?!crDMarVdV85FX>R0cRhr@saAsll{83wl+`i&DZ=zLY~olN-*HV8=~Rd zqcC@E)T0DLvrmO)p9#%AhwupC6=45juix+g+Vy*PE$DvXxPSNu-&*v8(~rNarg*7u z`(xJJ+$Um6?!C?_sM3x<<^l_+fc%N0E$aSW*B0G{?L01oF6F-+z<+JgK5S^GEaTFQ zF_pFAskZ1aew;}rHW|}9@H0^6(y_H`NYyo^)x6u)Vh&_$w_d+Z9Mkt zV5g{h(B~uskB*4Z^u@s{0A!$OdN_{nK1Myo#WP$yr|F@7e6IkpSJnNhu7aq|&)qnC zpwSVK4USSYFUdDwQ$1KwIY%P);&tIgcs&6j!U-u@gSVJvHGHVJF~tGFWN88+ZmK~$JS?szan@TB8@1Q%qLv4^Y`-Y1e&?xY-@ z6B*|nc>0ebQN-pURKmFzVFQ0nIQKGMu6JQCV<0dF_GRh5FC%53--|VMQQaky9T(u= zM{+p5ESWJszhA8hF~8hzA(03^xH`Xr2PsqzZg4w=dQgOa?zn`!h8JG&hZu_Uw-`(K zrQ{uI<8CWHxwYul5Lfs32}c2)3Ua)aqL40+A4E$PTI}3S;Ord5uf-N#J&59VHY)EL z@xmhyg4fchW>Xx$xmwZf@dL>;Q6t{>D~3cnJ36r;iz>8Gc9mnqq^NbJU`@wo7XP?)p!L!xzx=j$FU1>5?&lJ&N8MKG)BP8sB$VF)=uf5iH&poo zfMJMVFC_L4%fZDp39G$vFCXwAx}3$md{;FgfBmwh276ibC?-ZWquiW8%h5>OgTxXx zcrm~2e=Y|ENFvr}tOF-RSk-9|13YX02c*&pA5r=bm>kkHlltALTf5J|ETij{$b!#6F600Cy%M;$~ng+Jm@H z*&zSbJ$lIVZ)as_yFKOea;J$E-dS%7_9Qs;b_qv51$q<#`}~m&q*OSuD0-G{`}b_`b#cR zSTl~ZDc_awXAR!MRPyroqX(aZS+BzF3)2;EJh|P06~EAr&)@h#2ED{RhQP-_<9?BR z@lL){bi&U-id2!5gJ=d82f0 z-J{eA`8xUjhFZa;n2(%&9+Pj%EZp1i49U+sg&srB7(Dx|hdck=l2-py^ofbN;JY(< zE5~RdSGtBR5>`!ri+V zlA=drMqjVj$>_AD?X+ebJJYdFC!NuvRPh2%B2K5Kwnay@rik`o&<1rNP>1X1yKgVt zy@1u3wtwA*-Ti*PyZhbU@Avz5mwoSEKK=fg3dWQfjInaWxrqH`jP)@GD8?2bKBzFJ zsvCT_ZxF2F#90iP#E{8mB0`i1s;ULMGzpMd<+;9SmQ~C)bHe$yf>Xv)W{H`qYC=nH zPE4_^@>VT0i{i2dVN7ExR7!a?X9}h~wJjLw2vQrXyeFi*KZ@Fn5w=NMWYfl%jNTKD zwyNQ1D0U8c->Ehmr_78IE|Mqt`HbwaO4wnwcY`<2MedZeX|8FQ>_E1qNI_Mj5jC;B zeRC|Lc4%?nbIZ$%Bl-EZ)SmQpArUgD>Xul6S*OW!IL(TAd4#R$#A5#Hrf>rZ)wxog7IMOI)60Q91Cm>YKhuNcykmmVZs%y z+rfZ15f(F+5<@~#2~H()8h1W45k|+m+>CW0CtsnlxUORCa^w%LWXu6Y%mLkmSQtpZ z6fY`dTIjK>8C!1Q5&SYD_49V;*w)7~uFl6dEuFAG@cU1efagGDbMe3;Qd@zEhfsyM z3X$5AX>>+iU;ckQ=V-!D2OeAoWaibCwYwVC%G zbLcyc=t<*wx;WcQR{-u;j4N*Em8$*~;;Yd3x?Ipa-6w$J6yF z;)o7+Hl+Iw^GtGV&sQMGcodgF=-w%M|9t(Y%XxYoWHwH4-DlW$oBbAxUtcV~cz(ux zC_VYw0+?Co$M6;7<|h5P`_Nvp(;iCPSz{(@^iJmNzWq{Xh5kU!Fyi}!uFYVrPfS~1 z4`dqCa7giFmUGT`=dpg&HdQ`BYDXMJBohoG4j}d;rtHi5I$&ZR$URNH>8JiY#`RNt z=;+K@_h&@OGcTWPe*2d{d%?-!1}BeleUuLwH}Ij;6`3jh_0pHN7$w?Z>NNZpu-$aAeNbsM)5PBMG zu&*9=AMidy4#D+5VC_H)Dcx?7K5@aLnngb>Ok97DJuI>l!DLvtd4(1fFlB7QGed zvv_{*(frN%6>0c0&r&G0c$UVT|H=Gr5JR0lzx8-Z&pW@_XXp31?Pop}Jo7^`o-rTY zU=h$RcW2LjActD*NvBwAj|IbAU;mPk(-~f7Rd-s_GoT|0mtd)E{uYyATnfteg>mSwYXH1`%dY-Y<8JH;>@jXcy z&uko|9oUVDzh%sURDDQ@>^orZOHqaN4g>qDwvy|U_G%9>ck;di+J(Jc4o7@$x~Z)9 z^g?ZO?`fMB>8q73yV+j`)AkmWm1s0fJKLWSK4l=SvECltv!}%HhtwI0L zcm&mj39wjtgc*3+iRP)z0G^8 zcLSYiTweXvdi`U#hN+h9i0?HT2DCCt`LJ(jAy3cX>9w@~!py!G?YnOh`#$#HeIsQ{ zXusr{9ofCKsQcVmpZh?Aet5Nh%J>TyUYuldx!%c2Z87w4Ut`}9?H(UaCGq;etL_sG z`ag_6Pd1R~g!l9a@97cV(<8j6M|e+<@SYywJw3vEdf+{mOYec! z#3))!`PvMh`^0K-QgUtb-s!#DtKNmJUHbX>%l)~U!%$ML=7>n&6{#W8_e6S3q#uZM zLZlyx^kb2p5GmO-S94mVbUMh@oDnI#Fv``~L|P`&a-?{?GM8>d1#fe%#)rJWjhIK@ zg~rItI0 zOVo2jbrD4`fsaOsdXuPDqCOz%+eFzgwxdl%%_C|JQA>!rmZ+`HqgwwlJS*RO56gU1=C8~Ah|E8b`J~Kkc%Mz7O6C{I+$rprnD421*(zY2dSH zVBR8U3w_T$&!f^O@czJ7HPE(I-IDajTiMOq9Q_`A!M@Vp+8S5=(e13?gRhob#kcqB zW_;d`Z{<^CxXchi!RwH1PK%_FKOABGY}-=ssRhw4(1A!S5hSpRKr9*!1~h^mz)&En ziAJ12JQ$?@#fS8$&;;I=pjODb-DE}m?ZJGl7L!HaS`(Wjx1D9hIz(R`;Dn<=O^s@? z4yw|XXLM+>C^1qBIPJmqKwF&Pg9PKjKxZf(YbQoOF%rQD2EWAZy4pp&T_!Kus>KKn zm{6mk$bNq%SmHBqsxc^_7B@SQR#Vi1Z^czMkIf24!&=xM33mtCrq&>939ufa&|L}? z`KSV&sE{AVzz-=Mu}Flyr(meTaA%P9+DKi&L_%dhw#{IJxMi{xi0e#f@z{3uFn$G+ zrJ{JyuLao;6ls;8gFm_y*G;MANCriMZ_aI+%6_B3qW@Ib4B7KRB^rxvj$mrx=oU7n zw8o-ZDDL0V9*k=29mwgw0wM+|8Kh)Pz^{WEU7@J4P$&`9*clo}Emd(%@gBmk`>({E z7pBR6YYQjT;I^bc!uHtELS@gRc;YHWWd}iw;#+oGxP$%4))q@>!u;=3b9^FCY~w8Z zLu$4XJ@v0bGJxy;!KDtzpyEm?Ee?mvGpKZQj4AZzX&F%Zai2z4YIfY5P0$Yu5a^XP zVdtd+vg;)7paO(D5UG6h5&_vg5RPK=VpOV-`AM7KHAX53D#BWI4ggZeB z6Npsqk$5&}!s3H}WYrQo<;VZulsNx;oAnY8$Z~(aoNiPRIwf|<`936Zll+mzV-ja2 zeoo>RDesWPE{W;Rm&WIi*a3wC;-487TkzEuTxY>ITJTy6zQuxDEV$i*@$RK)JP%m# z!xlVX!N0cP-&rty2~jxT7cKa&7W}3KAGP4)7JSNr$!*9qWKJ?6xgoh4xgWVKUDwi; z>LSF&h+jpdEA$$~%MibYNO#i95a~A_2p%$>6Y;+(+sTU7yZmxRPy6`_)TyWYyfyH& zpR;Ug`8a1Ottg)^n`&5Pi?z5&UVc|AW}1s@5w8{7*3{Z=DKVGkB4)u#U&KG35V08) z)y(e;=VInp;i9rc5bOLj&Uvb8YSFT9X@=dlV2hYmC^wR#(}*}j6miV+iFu%qM~SIJ zggibJ9~_E~3Xx$hqN zy=N&yJF}hH8DGzP=bi7KbMCq4{=6UE>+dx*H#*A71gCOwwIFWQWCIDP3~j!;011dW zVgk-n#d%V;VkB$S)fSflF%=$zr!p$(Qt@_r?P-P_Q_d$nS)SL(7dDzLH*ltAy>ZCO z%`)LKD?O$I|Z^9^xsZ<{ihd{KeqCy z6%s@B8uQ z$=Z!uns1$bVo@Nt?MXG8z_=|v1)kc}o~TW|b`bnea1=B4TLh$-ot2O;hJR2({y$6L z%SzbkDS`jI1pb2(IE@c44tshIKr#RKmhkiECGhnqpqQO|O4z@@ggo_gFAjT(11M&{ z5%_ewF!*o@`QMlD{|4#LB;lbBjaj{IvcPjhK75*OR6fsHo)qr&= zN2`^c0h$nzcy6P4U&<@|8JUauNZAk2q=~fKAmR&9lJ8V;dr;vWO5UU7+5ShWT(627 z&&5wD`K&Dtmvep9Bzv~_CC~K|q0pL+L_Czz!%009 z5}~H0*M{06$;g^mN{=L$Uc0b85sxeluWpYRdBt-=t=-{JG!_rH$9f{7wLOuFh-hnE zZx_*IBoc0GOUB~Sgjf^N&DZg8M}+ZIqV*QyNrtWyow|s{XOnm+9AAg)h#rdTiB99H zQ%}T2N2H^5ZBoR;@dT+rF+}o_R4N23rSQ<&L`s)Ml~4@DI*aPYQlZFqyTa{7GgENy zl!i&bW_Wch-exh@nuy0Etya%llaa6D=d_VMo}w^*;K?Y=toT#qKhYdRuvyA`x`BEGsE zts0B3v6WD$5B#__noM+vRHU84MrG*34>tV>ydBBA8+(UTIg!3Fs_>c)#QwqUi*o3PoSK`$HN#wJW znyMt=HR1eBO&PT&oSy{=_nUC41E)CwijlbJG~xUlOL(^l=RQDq+Ju{*zrJt6RaYQ!vDt*H zTa3gXHsR)Xfh{In-P)x5*y;Z^0!Q5EAJ=+6bZQ$b-@XLhaYI&jbbwXC?nj;%O)kZj<~j;%SHtZjt;B z;%R6NZkGJdh^HYnn3nuciKk&O*eUr(h^HYmxJvRrBA$lMV2k8`Ks*hZ!GPrNC7y=L zpkMNL5l>UdpjYxe#M6)&^hiEQJPnmWA^E>2-c9__NdOnDCZ2}I;DF@6O*{>W!G6g< z;u9je8N5u|rg=>e&^A>rAadofekMYFGh`^#6Y>M@X=xJNttjNrk@A;MAu{8nmKoCe z{xo0f8!p$%_G+)4)X#u{%as9Vejw_eRzIRo?U|nU2C_xh#mltbc~j_8%luKV(l*X} z0ZeWMYLRQhX>aAT;LE;)vJ2&t{@`uMRQ}XucSn8hX?K&4=m5gPq1?cSd!r}XmvtU;Ya1v1(@aFhQwF#$8_m?$IJC?MJLsJ|_W;@N z-BW7{8rvt^8iFF<&7-(*PJ|KIuCMX1buu!y>p79nA3JzXc7?28 zOYR*jpE5=ZNvBnGYN1nrPJTLh>EvmqcC5?3L<6Zg^Xn5w zw5MOBV(T-nX}=k0#<}lvbo#-$&1G~sPMc8wsz-b2*TXx)|45jd%f;Jedev^%zx$H_%mAO&OPM1 zB>=+QKGX@Q(a$qFfodM7xp^GO*IN5vyxCp9x9&jjC2CMD^QM;BmGe*`*5=<#_R0Cy z!&=#!6f)`vMnTz;f&{@RNJB5{b4D}G=u{iBO|AV#L0K*+_v~?11P{?AXb_rww9Jve ztU+jirb)52uNl2vHc(aF0acZMr*byDt6%Njj&|$)e4;+hz5PJ%=Z>zK+CDje_ANvQ z%jY*@_-4LYb;#-V)YnwICzq4L6r&d3^dRKqoE&V%lw$ICBqlSybT?wJ5gN1CxyrwR zzkg+XF`hlzrlmDix%B7xJVv5^u?%Wmmclwqg>`E2u%7jzoYFXqrw%fW=OgaKcpR>% zTi+jbztuM{pU0h{%Dw%1jK1hq*Ln0xX_D_h!5fyeG-W=+EV*+oTB~zu6AoXC#md~BFfAK}%6aTFOQTdb z?UQdI!F`Q#7&i6ppfl*6Jnqn0HqDK}ieRR(Dt9_ctD{Dg z;4jNZN*u8yU#2#iHwECT;uB2ac-`Bi)1EPZqF z4(0O$pe={i*FgiI8t4#cC#dI0K7Su*C+K6KSI=Ii$NMUsrx|vxb((>U`$lr?Lx+v>eEXuk)W#?6mcWy@6HNfaLGw0)c-Va{5JdLjEYuu;Z z=1hzE=U#QuWi``*O8t7!0Ae6-@B|{!`^il>hJmZ1B-RP+Q($D05|wi|jv-*r5D;{E zg0AX%m%q3C9*5&mSG5G3^fL_QcO%C10!(tfj^!>YlO8DcR>JHF*|5Z ziWJq~i(@}zK0Jj?Eo7)qb)zqFoRyusrJW#*-eg#$wxe|mCm<{91)kbzCa`Msxy85^ z3uHS5UEbdE`yGyJWIHV|{9OvU7RWtFa`4v?b2&j8h+hnV4Jn8v1i^ybK##(f8$Ve<)yqt9pUU8+6syyIOiH@2_}(deA4XS~w}Q zC|p5T3pB^lSOmr*FcyKa2#iHwECOQ@7>mGI1d2z1*J<#&3_L>1L~A`LxeOwXDPF!$ z5JnHtNW7*XpcbO?np$2DqTs^X2KjCSJzf_=?_iYZIiFI6LBuLm-qDl!1VP)>OBVeg zOlgZ!;58QVmt)}cLnEa#l{~M7pm!EZ{H`Vfk`<~Lu}xK+-jOKLkBpRf&B2hWIOBfB zv)@@MEwKLGNL(JiWJ~`&N*$jiR`LZumA$_;;dSixa%Zb{Z&dUK zMWc$|s^~q6KBVXqioT%eUPa$j^aDjdQ*@kKOmdc@7b-ei(MCnL1`H1uEnGO)Tf1y^ zS6uJ%Ug^8c=bu$~MVDmj?zq(N^M8GY0b`M0IKIYvYb2S%(lYNAKEJPSR^6rET0Oib zb;;s}=7!*shR_xMx=ZA;Kz={8$HB~(i?YIcek<-M^kXYtUg*zOyuw%kVFqzsjvW!) z-_2R&Shddm#)^*@+~2IYQ*ghv;uFMBVPKEsl+$QZ?J&R7K1G&cJx!N5)~Bl*3(qI> zfqSi@l3S_d{p!Z^jFL$Kw>7!Up>Jx%%B62=#qjOQzJ2}muM}=y|NdSHJ3~s|zAoNa zZ$7$W^u4Xvdh^R9K3cx91Rg4Zr<8q#G)-E>|`yabqXkzF)zsaIb1KurghtaQi-hi`Jx`(z~KjU#l3|rV!FQLfCW= zkEF1lp)CgZSp6%!Yt)$w?!dEd+|)eW3kL-vD1k8)q zO`e2k&w*u;{i(Khm=(?2C``LBtR;=Cv$x`MSPYR-=LnYGx0MZC+ue!qyoIVCgbWv9UyM zOi_`iwkvH!ZJ1H+Smk8@FS>=vTocRw8k9-3pnXbKTV@T4Wudvvd!ei<=FL#n9J4Ws zuzB~3v5CbhFMO$W9eQ{*sGcF$wD|~J1;?Ojx zo-}gQOPqxXAukze50iqr>TK7APfk5PT>91|!0M51oaF@Pi>y_1-%se910E-2qTk0UF|9G!!Wp+8 zOS%*seKTSGRqBFii@IU59)HhZ9t*(*eu7M}K7WT{`l2e0LH3{Jn9^_9^bLo3 zey?WgRr+@S6)f6tLAF_+-@ln=l^~aIuYX+WFHmwr>OGw)f43ridepS*cLSrC@OQGp z`@DL8=kIe6k%|3aK7|XjKEL-f_1gl@p9PrSVbkaD15DXpE{}Pp|7g?a_hF{Lo4}d| z<#HL_WYg#ONT&S#lI897|Dn?7_7h$uspuZXGO_FbD>5iVtk2&sm=1G>GQjm_dr#wn z-uY<^P~z_#{C^qj^2{^c4jsJp7WDah$j~gZHqu`VZiHujdXA^Q!{zgL6aK#!1FHS` zyDaN*JKP0b5@CJ*zH;yqfJn6lDV$lK>8r>w>x+OA^&51nVwtcW(>IV|*5~gvTa`Y` z+4Y%!7Z)VM{%;EyIonF;t8f@XI1k_;Oo`*lNUYEE596$FrnW93MLl(fMnF}7zN^o~ s!S&(!lZFTTZfF?imMabFS%W3lm(x5>KXS@FY0@)?iF#rGn literal 0 HcmV?d00001 diff --git a/Netick/Runtime/Native Sockets/libnanosockets.so.meta b/Netick/Runtime/Native Sockets/libnanosockets.so.meta new file mode 100644 index 0000000..eaa5954 --- /dev/null +++ b/Netick/Runtime/Native Sockets/libnanosockets.so.meta @@ -0,0 +1,101 @@ +fileFormatVersion: 2 +guid: 2c08207c2b3231b44b4d0e0b3f192720 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Editor: 0 + Exclude Linux: 1 + Exclude Linux64: 0 + Exclude LinuxUniversal: 0 + Exclude OSXUniversal: 1 + Exclude Win: 0 + Exclude Win64: 0 + - 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: 1 + settings: + CPU: x86_64 + DefaultValueInitialized: true + OS: AnyOS + - 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: AnyCPU + - first: + Standalone: LinuxUniversal + second: + enabled: 1 + settings: + CPU: x86_64 + - first: + Standalone: OSXUniversal + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Win + second: + enabled: 1 + settings: + CPU: None + - first: + Standalone: Win64 + second: + enabled: 1 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Netick/Runtime/Native Sockets/nanosockets.dll b/Netick/Runtime/Native Sockets/nanosockets.dll new file mode 100644 index 0000000000000000000000000000000000000000..f0b0fa47b99c49ebbb3b96cdb13411c8517ee909 GIT binary patch literal 52605 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 L|NQ^AQ{aCC$4JAK literal 0 HcmV?d00001 diff --git a/Netick/Runtime/Netick.Unity.dll.meta b/Netick/Runtime/Netick.Unity.dll.meta new file mode 100644 index 0000000..d5986d3 --- /dev/null +++ b/Netick/Runtime/Netick.Unity.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: da78c2c9df60edc4fb5f65b59fa57c41 +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/Netick/Runtime/Netick.Unity.xml b/Netick/Runtime/Netick.Unity.xml new file mode 100644 index 0000000..07ffb65 --- /dev/null +++ b/Netick/Runtime/Netick.Unity.xml @@ -0,0 +1,677 @@ + + + + Netick.Unity + + + + + This component is used to replicate the position and rotation of an object. Therefore, it’s the same as the Network Transform, the difference is that Network Rigidbody must be used if you want to have client-side prediction over PhysX objects since it replicates several other properties necessary for correct prediction. + + + + + Initializes the pool for the specified prefab. After this method has been called for a certain prefab, all instances of that prefab will be recycled and reset when created/destroyed. + Note: this method should only be called on , in other words, just after Netick has been started. + + Prefab to enable pooling for. + How many instances to be preloaded. + Pass true to hide inactive pool members. + + + + Instantiates a prefab. This must be called instead of or its variations. + Note: this must be called only for non-networked prefabs. If you want to instantiate a network prefab, use instead. + + The prefab to be instantiated. + GridIndex of the instantiated object. + Rotation of the instantiated object. + + + + + Instantiates a network prefab. + Commonly, this should only be called on the server, since only the server can instantiate network prefabs. However, the client can also call this to spawn-predict a prefab by providing a spawn key which must be the same on the server and client when this method is called. Read the docs to learn more about how to use spawn-prediction. + Note: make sure the prefab has been registered. + Note: the specified input source will be given to every child of this prefab. + + The prefab to be instantiated. + GridIndex of the instantiated object. + Rotation of the instantiated object. + Input source of the instantiated object. + + + + /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// + + Destroys a network object. Only call this on the server or on the client for spawn-predicted objects which have -1 Ids. + Note: never call this on a child of the original prefab, only the root of the prefab. + + The object to destroy. + + + + + Returns true if this is the server. + + + + + Returns true if this is a client. + + + + + Returns true if this is a host. + + + + + Configuration data for Netick. + + + + + Use this to associate an object with this sandbox. + + + + + The associated with this . Always use this to perform physics queries inside the sandbox instead of . + + + + + The associated with this . Always use this to perform physics queries inside the sandbox instead of . + + + + + The associated with this . + + + + + Returns true if this has been started. + + + + + [Client Only] The of the server you are connected to. Returns null if you are not connected to any server, or if you are the server. + + + + + [Client Only] Returns true if this client is currently connected to a server. + + + + + A list containing all connected clients currently. + Note: if you want the clients + the server, use . + + + + + A list containing all connected clients currently, in addition to the server (when started as a host). + Note: if you only want the clients, use . + + + + + The server the client is connected to. + + + + + A list containing all simulated/registered network objects [] currently. + + Note: to get a network object by id, use: + + + + + This player. + + + + + Time period between network simulation steps. Same as + + + + + Current simulation tick. + On the server, it's always going forward/increasing. + On the client, during resimulations it returns the current resimulated tick. To check for resimulations, use . + + + + + Last received tick on the client. On the server, it returns the same value as + + + + + Last predicted tick. + On the client, it always returns the predicted tick of the client, regardless of whether it's a resimulation or not. + On the server, it returns the same value as Sandbox.Tick + + + + + Returns true if we are currently resimulating a previous input/tick of the past. On the server, it always returns false since only the clients resimulate. + + + + + Incoming data in kilobytes per second (KBps). + + + + + Outgoing data in kilobytes per second (KBps). + + + + + [Client Only] Interpolation delay in seconds. + + + + + [Client Only] The round-trip time (RTT) of the client in seconds. + + + + + Always always returns null except when called inside the body of an RPC method, it returns the we are executing RPCs from. + + + + + + Called after all NetworkFixedUpdate methods have been executed. + Note: it's called with every resimulation on the client. + + + + + Called before any NetworkFixedUpdate method have been executed. + Note: it's called with every resimulation on the client. + + + + + Gets the with the specified id. Returns null in case no object with that id exists. + + The id of the + + + + + Tries to get the with the specified id. + + The id of the + + + + + Tries to get the of a with the specified id. + + The id of the network object + + + + + Converts to time in seconds. + + + + + + + Converts to time in seconds. + + + + + + + Attachs a to the simulation. + + + + + + Deattachs a from the simulation. + + + + + + [Client Only] Connects to a remote server. + Note: if you are already connected to a server, and you want to connect to a different one, you have to disconnect before calling this. Otherwise this method does nothing. + Note: connectionData array length should not be more than 300 if you are using Netick Transport. + + IP address of the server. + Port of the server. + Data sent with the connection request. Could be used to decide whether or not to allow the connection. + + + + [Server Only] Disconnects a client from the server. + + The client to be disconnected. + + + + [Client Only] Disconnects this client from the server. + + + + + [Server Only] Creates a match. Only functional if the low-level transport has support for matchmaking. + + Name of the match. + + + + Requests an update to the match list. Only functional if the low-level transport has support for matchmaking. + + + + + [Server Only] Switches to a different scene. This must be called instead of or its variations. + + SceneBuildIndex of the desired scene. + + + + Unloads a scene asynchronously. + + + + + + Gets a Network Prefab by name. + Note: this causes GC. + + + The Network Prefab + + + + This component is used to replicate the position and rotation of an object. Therefore, it’s the same as the Network Transform, the difference is that Network Rigidbody 2D must be used if you want to have client-side prediction over Box2D objects since it replicates several other properties necessary for correct prediction. + + + + + Any GameObject which needs to be synced/replicated must have a Network Object component. It’s the component that tells Netick a GameObject is networked. Although not every child GameObject needs it, only the root has to have a Network Object. + + + + + The tick which this object was spawned at. + + + + + The parent of this object. + + + + + Returns true if this is a client. + + + + + Returns true if this is the server. + + + + + Returns true if this is the owner of this Object. In this version of Netick: Server=Owner. + + + + + Returns true if this is providing inputs for this . + + + + + Returns true if we neither provide inputs nor own this . + + + + + Returns the source (/) of inputs for this . If the source of inputs is remote (from a client) it returns that , while on the + input source itself it returns the local . + + + + + The interest group of this object. This can only be changed if BroadPhaseFilter is set to Custom. + + + + + Returns true if we are currently resimulating a previous input of the past. On the server, it always returns false since only the clients resimulate. + + + + + Returns true if this has been added to the simulation by Netick, and thus has a valid id. + + + + + [Owner/InputSource Only] Changes the parent of this object. + + The object which will become the parent of this object. + + + + Add this component to a GameObject to ensure only a single instance of it will exist at the same time, across all sandboxes. + + + + + Config class for Netick. + + + + + The containing this . + + + + + The this behaviour is attached to. + + + + + Called when this behaviour has been added to the simulation. + + + + + Called when this behaviour has been removed from the simulation. + + + + + Called every frame. Executed before NetworkFixedUpdate. + + + + + Called every fixed-time network update/tick. Any changes/updates to the network state must happen here. + On the client, if you are the Input Source or if this Object.PredictionMode is set to None, it will be called several times in one update/tick during resimulations. To check for resimulations, use []. + + + + + Called every frame. Executed after NetworkUpdate and NetworkFixedUpdate. + + IMPORTANT NOTE: properties (which can be interpolated) marked with [] attribute will return interpolated values when accessed in this method. + + + + The network id of this . + + + + + The network id of this . + + + + + Returns true if this is a client. + + + + + Returns true if this is the server. + + + + + Returns true if this is the owner of this Object. In this version of Netick: Server=Owner. + + + + + Returns true if this is providing inputs to this Object. + + + + + Returns true if we neither provide inputs nor own this . + + + + + Returns true if we are currently resimulating a previous input of the past. On the server, it always returns false since only the clients resimulate. + + + + + On the client, it returns true only if the client is predicting this object. On the server, it always returns true. + + + + + Returns the source (/) of inputs for this . If the source of inputs is remote (from a client) it returns that , while on the + input source itself it returns the local . + + + + + Fetchs a network input for this tick. Returns false if no input source is currently providing inputs to this Object, or when input loss occurs (in case of a remote input source). + + + + + Called on the server when the input source of this Object has disconnected. + + + + + Called on the client when the server confirms that this object has been successfully spawn-predicted and therefore has a valid SceneLoadId. + + + + + This component is used to replicate Unity's Animator parameters and states. + + + + + Manages Netick and its clients, and is used to start and shut down Netick. + + + + + Initializes Netick. This is automatically called when you start Netick. + If you don't provide a , Netick will use the default config, which can be modified/found in (Netick -> Settings). + + + + + + Shuts down Netick and destroys all clients. The shutdown will occur in the next frame. For immediate shutdown, use: + + + + + Shuts down Netick and destroys all clients immediately. + + + + + Shuts down a specific sandbox. + + The sandbox to shut down. + + + + Focus on a specific sandbox. + + The sandbox to focus on. + + + + Starts both a client (or clients) and a server. + + Network port. + Number of client sandboxes to create. + + + + + Starts multiple peers together. + + Network port. + Number of client clients to create. + Should we start a server too. + + + + + + Starts Netick as a client. + + The sandbox representing the client + + + + Starts Netick in single player mode. + + The sandbox representing the server + + + + Starts Netick as a host. + + Network port. + The sandbox representing the server + + + + Starts Netick as a server. + + Network port. + The sandbox representing the server + + + + Called on the server when a client tries to connect. Use to decide whether or not to allow this client to connect. + + + + + + + Called on the client when the connection to the server was refused, or simply failed. + + + + + + + Called to read inputs. + + + + + + Called when Netick has been started. + + + + + + Called when Netick has been shut down. + + + + + + Called on both the client and the server when the scene has been loaded. + + + + + + Called on both the client and the server before beginning to load the new scene. + + + + + + Called on the server when a specific client finished loading the scene. + + + + + + + Called on the client when connection to the server has been initiated. + + + + + + + Called on the client when connection to the server ended, or when a network error caused the disconnection. + + + + + + + Called on the server when a specific client has connected. + + + + + + + Called on the server when a specific client has disconnected. + + + + + + + Called on the server when a specific player has connected. + + + + + + + Called on the server when a specific player has disconnected. + + + + + + + Called when a network object has been created/initialized. + + + + + + Called when a network object has been destroyed/recycled. + + + + + diff --git a/Netick/Runtime/Netick.Unity.xml.meta b/Netick/Runtime/Netick.Unity.xml.meta new file mode 100644 index 0000000..d10b44e --- /dev/null +++ b/Netick/Runtime/Netick.Unity.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 737b6e987987cc24fb3fa7bcfd2473cb +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Netick/Runtime/Netick.dll b/Netick/Runtime/Netick.dll new file mode 100644 index 0000000000000000000000000000000000000000..d4044d3a3a904b337b462db7701075a50f1c3573 GIT binary patch literal 235008 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 z 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 + + + Netick + + + + ------------------------------- + + + + A rolling sequence counter for ordering values. Repeats indefinitely + with 1022 possible unique values (0 is treated as invalid internally). + + Consumes 10 bits when encoded for transmission. + + + + + Implements this to inform Netick about the size (in 32 bit words) of your connection meta data. + + + + + + Implements this to inform Netick about the size (in 32 bit words) of your entity meta data. + + + + + + This is called when a new entity has been added to the simulation. + + + + + + This is called when an entity has been removed from the simulation. + + + + + + This is called when an unliked entity has been removed from the simulation. + + + + + + This is used to populate the user meta data for an entity. + + + + + + This method is called on the client when it receives new entity meta data. This must be used to create/setup network entities on the client. It can be called many times not only when the data has changed. + Note: user entity meta data can be used for custom user data that might be used in creating entities. + + + + + + + This is called before sending packets to the target connection. + + + + + + This is called when a full packet has been received. + + + + + + A script which can be added to Netick internal simulation loop. + + + + + Used to initialize the user script and assign Engine. + + + + + + Called when this script has been added to the simulation. + + + + + Called when this script has been removed from the simulation. + + + + + Called every frame. Executed before NetworkFixedUpdate. + + + + + Called every fixed-time network update/tick. Any changes/updates to the network state must happen here. + On the client, if you are the Input Source or if this Entity.PredictionMode is set to None, it will be called several times in one update/tick during resimulations. To check for resimulations, use []. + + + + + Called every frame. Executed after NetworkUpdate and NetworkFixedUpdate. + + + + + A network scripts which can have networked properties and rpcs. + + + + + Used to initialize the user entity and assign Engine and Entity + + + + + + + Constructs a NotServerException + + + + + Constructs a NotServerException with a message + + The exception message + + + + Constructs a NotServerException with a message and a inner exception + + The exception message + The inner exception + + + + Use this attribute on a method you want to call when a specific property value changes. Example: [OnChanged(nameof(PropertyName)] + + + + + Use this attribute on any method you want to make an RPC. Should have the return type of void, and not be static. + * Use the parameter "source" to specify who is allowed to send this RPC. + * Use the parameter "target" to specify who is allowed to receive and execute this RPC. + * Use the parameter "isReliable" to specify if this Rpc should be reliable or not, meaning it won't be lost (due to packet loss). + * Use the parameter "localInvoke" to specify if this Rpc should be executed on the machine it was called from. + + + + + Returns true if this OnChanged callback is due to a mismatch between the state of this variable before rollback, and the state after rollback and resimulation. + + + + + Gets a snapshot of the previous state of a NetworkLinkedList collection. + + + + + + Gets a snapshot of the previous state of a NetworkQueue collection. + + + + + + Gets a snapshot of the previous state of a NetworkStack collection. + + + + + + Gets previous value for the changed network property. + Note: this must only be used with non-array network properties. For arrays, use instead. + + + + + + + Gets a pointer to the previous value + + + + + + Gets the index of the changed element of the array. + + + + + + Gets the value of the changed element of the array. This is an unsafe method, use it carefully and make sure to never go outside range to avoid a crash. + + + + + + Gets the index of the changed element of the array. + + + + + + + A struct that is used to obtain interpolation data for a network property. + + + + + Tries to obtain interpolation data for this frame. + + + + + + Returns true if there was interpolation data for this frame. + + + + Tries to obtain interpolation data for this frame. This is the array version. + + + + + + Returns true if there was interpolation data for this frame. + + + + A class representing an abstract interpolation interface, which is implemented by and + + + + + A class representing the local interpolation of this instance . This should be used whenever you want to use Predicted Timeline on the client. + + + + + Time in seconds. + + + + + A class representing the remote interpolation of this instance . This should be used whenever you want to use Remote Timeline on the client. + + + + + Interpolation time in seconds. + + + + + Time in seconds. + + + + + Interpolation time in seconds. + + + + + Time in seconds. + + + + + Internal method. Never call this. + + + + + Internal method. Never call this. + + + + + Internal method. Never call this. + + + + + Internal method. Never call this. + + + + + Constructs a NotClientException + + + + + Constructs a NotClientException with a message + + The exception message + + + + Constructs a NotClientException with a message and a inner exception + + The exception message + The inner exception + + + + Constructs a BadPacketException + + + + ---------------------------------------------------- + + + + A snapshot of the previous state of a NetworkLinkedList collection. Note this must not be used outside the the scope of an OnChanged call. + + + + + + Represents a network player, which can be either a local player (representing this sandbox) or a remote connection (representing a connected client)). + + + + + The networked index of this player. + Note: it returns -1 on the client for the local player when not connected to a server. + Note: the server player always has Id 0. + + + + + Use this to associate an object with this player. + + + + + A list containing all connected clients currently. + Note: if you want the clients + the server, use . + + + + + A list containing all connected clients currently, in addition to the server. + Note: if you only want the clients, use . + + + + + [Client Only] The of the server you are connected to. Returns null if you are not connected to any server, or if you are the server. + + + + + [Client Only] Returns true if this client is currently connected to a server. + + + + + Time period between simulation ticks. + + + + + + Returns true if we are currently resimulating a previous input/tick of the past. On the server, it always returns false since only the clients resimulate. + + + + + Incoming data in kilobytes per second (KBps). + + + + + Outgoing data in kilobytes per second (KBps). + + + + + [Client Only] Interpolation delay in seconds. + + + + + [Client Only] The round-trip time (RTT) of the client in seconds. + + + + + [Client Only] Disconnects this client from the server. + + + + + Update Netick's logic. + + + + + Call this to invoke NetworkRender on simulated entities. This might not be needed if you are running a headless build. + + + + + Attachs a to the simulation. + + + + + + Deattachs a from the simulation. + + + + + + A snapshot of the previous state of a NetworkQueue collection. Note this must not be used outside the the scope of an OnChanged call. + + + + + -------------------------------- -------------------------------- -------------------------------- -------------------------------- + + + + A snapshot of the previous state of a NetworkStack collection. Note this must not be used outside the the scope of an OnChanged call. + + + + + diff --git a/Netick/Runtime/Netick.xml.meta b/Netick/Runtime/Netick.xml.meta new file mode 100644 index 0000000..3fb5ec3 --- /dev/null +++ b/Netick/Runtime/Netick.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: cb2a241f28b2c3343839c8d573058c22 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/README.md b/README.md new file mode 100644 index 0000000..08f45d2 --- /dev/null +++ b/README.md @@ -0,0 +1,69 @@ +# Netick: Networking Engine for Unity + +![Netick Pic](https://i.ibb.co/QbCLKD3/Netick-Github.png) + +Unity integeration of Netick. + +Netick is a server-authoritative C#/.NET networking solution for Unity, and, in fact, for all C#-supporting game engines, it's entirely engine-agnostic. It's the world's highest-performing networking solution for Unity, achieving the lowest bandwidth and CPU usage, proven by third-party open-source benchmarks. It’s built with an architecture that’s different from other free solutions. Netick makes building quality and cheat-free multiplayer games easier than ever before. Whether it's a competitive CS-like shooter, a 200-player battle royale, or a survival game, Netick can do it. + +## Installation + +### Prerequisites +You need Unity Editor version 2021 or later. + +### Steps +- Open the Unity Package Manager by navigating to Window > Package Manager along the top bar. +- Click the plus icon. +- Select Add package from git URL +- Enter https://github.com/karrarrahim/NetickForUnity.git +- Under Packages in the Package Manager, you should now see Netick with it's current version number. +- You can then import one of the samples to get started. + + +## Features + * Client-Side Prediction. + * Full and Partial Delta Snapshots. + * Snapshot Interpolation. + * Remote Procedure Calls (RPCs). + * Physics Prediction + * Interest Management [Pro]. + * Lag Compensation [Pro]. + * Code Gen. + * Zero GC. + +And many others. + +## Technology and Performance +### Bandwidth +Netick 2 uses an innovative state replication algorithm that moves multiplayer game development forward. Not only does it achieve the lowest bandwidth usage ever seen, but it also simplifies networked games by ensuring full networked state update atomicity. Netick 2 uses a novel approach for Delta Snapshots that makes it possible to use Interest Management and Delta Snapshots together, performatively. This has been unheard of in AAA or indie games, due to the difficulty or impracticality of doing that. However, in Netick 2, it just works. + +Netick 2 also lets you fully predict anything in the game: network properties, collections, etc. It also lets you easily interpolate anything. This greatly simplifies development for complicated or demanding projects. + +![Benchmark](https://i.ibb.co/3cwvNjk/chart-1.png) +[Source](https://github.com/StinkySteak/unity-netcode-benchmark) + +### CPU + +Netick 2 core is written with unsafe C# code, achieving the highest level of performance. According to simulated testing, it's able to write 1 packet (each ~1000 bytes) to 200 clients in less than 1.4ms, all in a single core (using any modern Intel CPU). This means the networking CPU cost of your game is as little as possible, leaving you room to do other things in the game. It also means you can have more players than before, with higher tickrate. + + +## Showcase +![Showcase](https://i.ibb.co/gPMHc7G/netick-games2.png) + + +## Helpful links: + * Discord: https://discord.com/invite/uV6bfG66Fx + * Docs: https://www.netick.net/docs.html + * Site: http://www.netick.net + +If you have any questions, need support, or want to report a bug, visit our discord: +https://discord.com/invite/uV6bfG66Fx + +## Support +Please consider supporting us on Patreon or here in GitHub so we are able to keep working on and improving Netick! +https://www.patreon.com/user?u=82493081 + +Enjoy! + +Karrar, +Creator of Netick \ No newline at end of file diff --git a/README.md.meta b/README.md.meta new file mode 100644 index 0000000..3cc2e56 --- /dev/null +++ b/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2fd3531d471fbbe4ea8a6195898a4a4a +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Resources.meta b/Resources.meta new file mode 100644 index 0000000..1409dfb --- /dev/null +++ b/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c420f25708dcee54f880a73d76357941 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Resources/netickConfig.asset b/Resources/netickConfig.asset new file mode 100644 index 0000000..3ec83eb --- /dev/null +++ b/Resources/netickConfig.asset @@ -0,0 +1,46 @@ +%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: 2061283162, guid: da78c2c9df60edc4fb5f65b59fa57c41, type: 3} + m_Name: netickConfig + m_EditorClassIdentifier: + Assemblies: + - Assembly-CSharp.dll + _Prefabs: [] + TickRate: 33.333336 + MaxPlayers: 16 + MaxObjects: 512 + MaxSendableDataSize: 50000 + AllocatorStateBlockSize: 131072 + AllocatorMetaBlockSize: 1048576 + ReceiveBufferSize: 32768 + SendBufferSize: 16384 + Timeout: 10 + MaxPredictedTicks: 64 + ServerDivisor: 1 + ClientDivisor: 1 + PhysicsPrediction: 0 + PhysicsType: 1 + InvokeRenderInHeadless: 1 + InvokeUpdate: 1 + RenderInvokeOrder: 1 + EnableLogging: 1 + SimServerLoss: 0 + SimClientLoss: 0 + EnableLagCompensation: 0 + EnableInterestManagement: 0 + InterestGroupCount: 2 + SimulationCulling: 0 + CellSize: 450 + WorldSize: {x: 8000, y: 1, z: 8000} + RenderWorldGrid: 0 + UseSceneSwitchThread: 1 + LagCompensationDebug: 1 diff --git a/Resources/netickConfig.asset.meta b/Resources/netickConfig.asset.meta new file mode 100644 index 0000000..430fc13 --- /dev/null +++ b/Resources/netickConfig.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8a27bba37c5443441ac29c8397e84815 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Resources/netickConfigDefault.asset b/Resources/netickConfigDefault.asset new file mode 100644 index 0000000..b38935c --- /dev/null +++ b/Resources/netickConfigDefault.asset @@ -0,0 +1,72 @@ +%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: 2061283162, guid: da78c2c9df60edc4fb5f65b59fa57c41, type: 3} + m_Name: netickConfigDefault + m_EditorClassIdentifier: + Assemblies: + - Assembly-CSharp.dll + _Prefabs: + - Obj: {fileID: 6276855212308729943, guid: 84bdaf9c034444f408cc66234ee3344d, type: 3} + InstanceId: 25174 + Name: Bomb + FileName: Assets/Netick/Samples/Bomberman/Network Prefabs/Bomb.prefab + GO: {fileID: 8886278785656527844, guid: 84bdaf9c034444f408cc66234ee3344d, type: 3} + Id: 0 + - Obj: {fileID: 8143126971102408644, guid: 98e433893a4b70f41a8ab2145afe3e07, type: 3} + InstanceId: 25178 + Name: Bomberman Player + FileName: Assets/Netick/Samples/Bomberman/Network Prefabs/Bomberman Player.prefab + GO: {fileID: 2511112182317059464, guid: 98e433893a4b70f41a8ab2145afe3e07, type: 3} + Id: 1 + - Obj: {fileID: 4469672062832013922, guid: 8e254087cbaecc049ac87981c263d46c, type: 3} + InstanceId: 25182 + Name: DestroyableBlock + FileName: Assets/Netick/Samples/Bomberman/Network Prefabs/DestroyableBlock.prefab + GO: {fileID: 9137365252298567970, guid: 8e254087cbaecc049ac87981c263d46c, type: 3} + Id: 2 + - Obj: {fileID: 9177126579482737267, guid: 09a0cccbd8f361641bd963785a4b016c, type: 3} + InstanceId: 25186 + Name: Power Up + FileName: Assets/Netick/Samples/Bomberman/Network Prefabs/Power Up.prefab + GO: {fileID: 3064325587269614628, guid: 09a0cccbd8f361641bd963785a4b016c, type: 3} + Id: 3 + - Obj: {fileID: 5100633453439203130, guid: d66d5a97430d3364890108321123b309, type: 3} + InstanceId: 25190 + Name: FPS Player + FileName: Assets/Netick/Samples/First Person Shooter/Network Prefabs/FPS Player.prefab + GO: {fileID: 7011933354638177272, guid: d66d5a97430d3364890108321123b309, type: 3} + Id: 4 + Replication: 1 + TickRate: 33.333336 + MaxPlayers: 16 + MaxObjects: 512 + MaxSendableDataSize: 50000 + AllocatorBlockSize: 65536 + ReceiveBufferSize: 32768 + SendBufferSize: 16384 + Timeout: 10 + MaxPredicatedTicks: 64 + ServerDivisor: 1 + ClientDivisor: 1 + PredictedClientPhysics: 0 + PhysicsType: 1 + InvokeRenderInHeadless: 1 + RenderInvokeOrder: 1 + EnableLogging: 1 + SimServerLoss: 0 + SimClientLoss: 0 + EnableLagCompensation: 0 + AoI: 0 + CellSize: 450 + WorldSize: 8000 + UseSceneSwitchThread: 1 + LagCompensationDebug: 1 diff --git a/Resources/netickConfigDefault.asset.meta b/Resources/netickConfigDefault.asset.meta new file mode 100644 index 0000000..7b81cab --- /dev/null +++ b/Resources/netickConfigDefault.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 56288163ae6496b4089f679943c9f8f9 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Bomberman.meta b/Samples~/Bomberman.meta new file mode 100644 index 0000000..6195cdf --- /dev/null +++ b/Samples~/Bomberman.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ad30ce8ae200fe44e9c8b261f837ec3a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Bomberman/Materials.meta b/Samples~/Bomberman/Materials.meta new file mode 100644 index 0000000..39f67f5 --- /dev/null +++ b/Samples~/Bomberman/Materials.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 713a37ca584e27d408bdfc529777f3a9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Bomberman/Materials/Mat1.mat b/Samples~/Bomberman/Materials/Mat1.mat new file mode 100644 index 0000000..9e8af47 --- /dev/null +++ b/Samples~/Bomberman/Materials/Mat1.mat @@ -0,0 +1,80 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Mat1 + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.779 + - _GlossyReflections: 1 + - _Metallic: 1 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0, g: 0.37847415, b: 0.745283, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Samples~/Bomberman/Materials/Mat1.mat.meta b/Samples~/Bomberman/Materials/Mat1.mat.meta new file mode 100644 index 0000000..cc8c3fa --- /dev/null +++ b/Samples~/Bomberman/Materials/Mat1.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a8b107aac826db042a168ebdd5f22fbf +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Bomberman/Materials/Mat2.mat b/Samples~/Bomberman/Materials/Mat2.mat new file mode 100644 index 0000000..3287586 --- /dev/null +++ b/Samples~/Bomberman/Materials/Mat2.mat @@ -0,0 +1,83 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Mat2 + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 0.2, y: 0.2} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 7f372ff4d556a22488a379662a36ebc2, type: 3} + m_Scale: {x: 0.2, y: 0.2} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.519 + - _GlossyReflections: 1 + - _Metallic: 0.552 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.60920256, g: 0.6834936, b: 0.6981132, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Samples~/Bomberman/Materials/Mat2.mat.meta b/Samples~/Bomberman/Materials/Mat2.mat.meta new file mode 100644 index 0000000..6ad1eaa --- /dev/null +++ b/Samples~/Bomberman/Materials/Mat2.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d157adf95b9ab0941b7a844172f40c98 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Bomberman/Materials/Mat3.mat b/Samples~/Bomberman/Materials/Mat3.mat new file mode 100644 index 0000000..97479c1 --- /dev/null +++ b/Samples~/Bomberman/Materials/Mat3.mat @@ -0,0 +1,78 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Mat3 + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0.821 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Samples~/Bomberman/Materials/Mat3.mat.meta b/Samples~/Bomberman/Materials/Mat3.mat.meta new file mode 100644 index 0000000..6f69b05 --- /dev/null +++ b/Samples~/Bomberman/Materials/Mat3.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7a07ebd6a692cf14b8e7ca9ec610398f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Bomberman/Materials/Mat4.mat b/Samples~/Bomberman/Materials/Mat4.mat new file mode 100644 index 0000000..c075b7f --- /dev/null +++ b/Samples~/Bomberman/Materials/Mat4.mat @@ -0,0 +1,83 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Mat4 + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.539 + - _GlossyReflections: 1 + - _Metallic: 0.365 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0, g: 0.3098545, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Samples~/Bomberman/Materials/Mat4.mat.meta b/Samples~/Bomberman/Materials/Mat4.mat.meta new file mode 100644 index 0000000..6fcf9da --- /dev/null +++ b/Samples~/Bomberman/Materials/Mat4.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4724a23f459d39a40983d863402e85bc +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Bomberman/Materials/Mat5.mat b/Samples~/Bomberman/Materials/Mat5.mat new file mode 100644 index 0000000..40d62f0 --- /dev/null +++ b/Samples~/Bomberman/Materials/Mat5.mat @@ -0,0 +1,80 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Mat5 + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0.526 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/Samples~/Bomberman/Materials/Mat5.mat.meta b/Samples~/Bomberman/Materials/Mat5.mat.meta new file mode 100644 index 0000000..bf11d45 --- /dev/null +++ b/Samples~/Bomberman/Materials/Mat5.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dbf18d3dbd43b0b40a1d1ea1d07fc815 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Bomberman/Network Prefabs.meta b/Samples~/Bomberman/Network Prefabs.meta new file mode 100644 index 0000000..ca7f723 --- /dev/null +++ b/Samples~/Bomberman/Network Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5dad492f05cbbf9459b5c58f2a77deae +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Bomberman/Network Prefabs/Bomb.prefab b/Samples~/Bomberman/Network Prefabs/Bomb.prefab new file mode 100644 index 0000000..19dd758 --- /dev/null +++ b/Samples~/Bomberman/Network Prefabs/Bomb.prefab @@ -0,0 +1,167 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &8886278785656527844 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8742519062260311098} + - component: {fileID: 6276855212308729943} + - component: {fileID: 2957835487486502232} + - component: {fileID: 5142684991707845191} + - component: {fileID: 503816091899611711} + - component: {fileID: 5318137862036999235} + - component: {fileID: 1230110853952933536} + m_Layer: 6 + m_Name: Bomb + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8742519062260311098 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8886278785656527844} + serializedVersion: 2 + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &6276855212308729943 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8886278785656527844} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -1923973434, guid: da78c2c9df60edc4fb5f65b59fa57c41, type: 3} + m_Name: + m_EditorClassIdentifier: + _BroadPhaseFilter: 0 + _SpatialPrioritization: 0 + _NarrowPhaseFilter: 0 + AddToNetworkLoop: 1 + GlobalObjectIdHash: 0 + SceneId: -1 + _PrefabId: 1 + PrefabRoot: {fileID: 0} + Children: [] + PrefabIndex: -1 + Persistent: 0 + _predictionMode: 0 +--- !u!114 &2957835487486502232 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8886278785656527844} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 682374318, guid: da78c2c9df60edc4fb5f65b59fa57c41, type: 3} + m_Name: + m_EditorClassIdentifier: + RenderTransform: {fileID: 0} + TeleportDistance: 50 + PositionPrecision: 3 + Settings: 3 + TransformSpace: 0 + _interpolationSource: 0 +--- !u!114 &5142684991707845191 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8886278785656527844} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 205eff2d73df3c14882a59d0377eebb7, type: 3} + m_Name: + m_EditorClassIdentifier: + ExplosionPrefab: {fileID: 0} + Bomber: {fileID: 0} + ExplosionDelay: 3 +--- !u!135 &503816091899611711 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8886278785656527844} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 1 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &5318137862036999235 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8886278785656527844} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 7a07ebd6a692cf14b8e7ca9ec610398f, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1230110853952933536 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8886278785656527844} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} diff --git a/Samples~/Bomberman/Network Prefabs/Bomb.prefab.meta b/Samples~/Bomberman/Network Prefabs/Bomb.prefab.meta new file mode 100644 index 0000000..4f7fe9f --- /dev/null +++ b/Samples~/Bomberman/Network Prefabs/Bomb.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 84bdaf9c034444f408cc66234ee3344d +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Bomberman/Network Prefabs/Bomberman Player.prefab b/Samples~/Bomberman/Network Prefabs/Bomberman Player.prefab new file mode 100644 index 0000000..c218128 --- /dev/null +++ b/Samples~/Bomberman/Network Prefabs/Bomberman Player.prefab @@ -0,0 +1,210 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &2511112182317059464 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2511112182317059471} + - component: {fileID: 8143126971102408644} + - component: {fileID: 4040699876961413387} + - component: {fileID: 659454795149622509} + - component: {fileID: 4380735189010659699} + m_Layer: 0 + m_Name: Bomberman Player + m_TagString: Destroyable + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2511112182317059471 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2511112182317059464} + serializedVersion: 2 + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5777255081272970192} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &8143126971102408644 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2511112182317059464} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -1923973434, guid: da78c2c9df60edc4fb5f65b59fa57c41, type: 3} + m_Name: + m_EditorClassIdentifier: + _BroadPhaseFilter: 0 + _SpatialPrioritization: 0 + _NarrowPhaseFilter: 0 + AddToNetworkLoop: 1 + GlobalObjectIdHash: 0 + SceneId: -1 + _PrefabId: 2 + PrefabRoot: {fileID: 0} + Children: [] + PrefabIndex: -1 + Persistent: 0 + _predictionMode: 0 +--- !u!114 &4040699876961413387 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2511112182317059464} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 682374318, guid: da78c2c9df60edc4fb5f65b59fa57c41, type: 3} + m_Name: + m_EditorClassIdentifier: + RenderTransform: {fileID: 5777255081272970192} + TeleportDistance: 50 + PositionPrecision: 3 + Settings: -1 + TransformSpace: 0 + _interpolationSource: 0 +--- !u!114 &659454795149622509 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2511112182317059464} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0695901b53a12474ca18412bd5b6ac69, type: 3} + m_Name: + m_EditorClassIdentifier: + SpawnedBombs: [] + SpawnPos: {x: 0, y: 0, z: 0} + _speed: 6 + _speedBoostMultiplayer: 2 + k__BackingField: 0 + k__BackingField: 1 + k__BackingField: 1 + k__BackingField: 0 + k__BackingField: 0 +--- !u!143 &4380735189010659699 +CharacterController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2511112182317059464} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Height: 0.8 + m_Radius: 0.3 + m_SlopeLimit: 47.8 + m_StepOffset: 0 + m_SkinWidth: 0.08 + m_MinMoveDistance: 0.001 + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &6254491268615547166 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5777255081272970192} + - component: {fileID: 7181254853072504542} + - component: {fileID: 6063811400299439378} + m_Layer: 0 + m_Name: Char + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5777255081272970192 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6254491268615547166} + serializedVersion: 2 + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2511112182317059471} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &7181254853072504542 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6254491268615547166} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &6063811400299439378 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6254491268615547166} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} diff --git a/Samples~/Bomberman/Network Prefabs/Bomberman Player.prefab.meta b/Samples~/Bomberman/Network Prefabs/Bomberman Player.prefab.meta new file mode 100644 index 0000000..5ab022b --- /dev/null +++ b/Samples~/Bomberman/Network Prefabs/Bomberman Player.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 98e433893a4b70f41a8ab2145afe3e07 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Bomberman/Network Prefabs/DestroyableBlock.prefab b/Samples~/Bomberman/Network Prefabs/DestroyableBlock.prefab new file mode 100644 index 0000000..f7ced0d --- /dev/null +++ b/Samples~/Bomberman/Network Prefabs/DestroyableBlock.prefab @@ -0,0 +1,165 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &9137365252298567970 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9137365252298567975} + - component: {fileID: 4469672062832013922} + - component: {fileID: 3199075134650260633} + - component: {fileID: 9137365252298567999} + - component: {fileID: 9137365252298567973} + - component: {fileID: 9137365252298567968} + - component: {fileID: 9137365252298567969} + m_Layer: 0 + m_Name: DestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &9137365252298567975 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9137365252298567970} + serializedVersion: 2 + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &4469672062832013922 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9137365252298567970} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -1923973434, guid: da78c2c9df60edc4fb5f65b59fa57c41, type: 3} + m_Name: + m_EditorClassIdentifier: + _BroadPhaseFilter: 0 + _SpatialPrioritization: 0 + _NarrowPhaseFilter: 0 + AddToNetworkLoop: 1 + GlobalObjectIdHash: 0 + SceneId: -1 + _PrefabId: 3 + PrefabRoot: {fileID: 0} + Children: [] + PrefabIndex: -1 + Persistent: 0 + _predictionMode: 0 +--- !u!114 &3199075134650260633 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9137365252298567970} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 682374318, guid: da78c2c9df60edc4fb5f65b59fa57c41, type: 3} + m_Name: + m_EditorClassIdentifier: + RenderTransform: {fileID: 0} + TeleportDistance: 50 + PositionPrecision: 3 + Settings: 3 + TransformSpace: 0 + _interpolationSource: 0 +--- !u!114 &9137365252298567999 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9137365252298567970} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a9a2540dae5c3e2479c6e165f43a834d, type: 3} + m_Name: + m_EditorClassIdentifier: + k__BackingField: 1 +--- !u!65 &9137365252298567973 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9137365252298567970} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &9137365252298567968 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9137365252298567970} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &9137365252298567969 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9137365252298567970} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: a8b107aac826db042a168ebdd5f22fbf, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} diff --git a/Samples~/Bomberman/Network Prefabs/DestroyableBlock.prefab.meta b/Samples~/Bomberman/Network Prefabs/DestroyableBlock.prefab.meta new file mode 100644 index 0000000..c778ad7 --- /dev/null +++ b/Samples~/Bomberman/Network Prefabs/DestroyableBlock.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8e254087cbaecc049ac87981c263d46c +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Bomberman/Network Prefabs/Power Up.prefab b/Samples~/Bomberman/Network Prefabs/Power Up.prefab new file mode 100644 index 0000000..2b19475 --- /dev/null +++ b/Samples~/Bomberman/Network Prefabs/Power Up.prefab @@ -0,0 +1,166 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3064325587269614628 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2920415445597455354} + - component: {fileID: 9177126579482737267} + - component: {fileID: 4247151532855953612} + - component: {fileID: 7879554298239723058} + - component: {fileID: 1736452868132088707} + - component: {fileID: 4667690564044089696} + - component: {fileID: 7879554298239723061} + m_Layer: 0 + m_Name: Power Up + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2920415445597455354 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3064325587269614628} + serializedVersion: 2 + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &9177126579482737267 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3064325587269614628} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -1923973434, guid: da78c2c9df60edc4fb5f65b59fa57c41, type: 3} + m_Name: + m_EditorClassIdentifier: + _BroadPhaseFilter: 0 + _SpatialPrioritization: 0 + _NarrowPhaseFilter: 0 + AddToNetworkLoop: 1 + GlobalObjectIdHash: 0 + SceneId: -1 + _PrefabId: 4 + PrefabRoot: {fileID: 0} + Children: [] + PrefabIndex: -1 + Persistent: 0 + _predictionMode: 0 +--- !u!114 &4247151532855953612 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3064325587269614628} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 682374318, guid: da78c2c9df60edc4fb5f65b59fa57c41, type: 3} + m_Name: + m_EditorClassIdentifier: + RenderTransform: {fileID: 0} + TeleportDistance: 50 + PositionPrecision: 3 + Settings: 3 + TransformSpace: 0 + _interpolationSource: 0 +--- !u!114 &7879554298239723058 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3064325587269614628} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f52db60e2b6aada409a755973bc842b6, type: 3} + m_Name: + m_EditorClassIdentifier: + PowerUpTime: 35 + k__BackingField: 0 +--- !u!23 &1736452868132088707 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3064325587269614628} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 4724a23f459d39a40983d863402e85bc, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &4667690564044089696 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3064325587269614628} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!135 &7879554298239723061 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3064325587269614628} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 1 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} diff --git a/Samples~/Bomberman/Network Prefabs/Power Up.prefab.meta b/Samples~/Bomberman/Network Prefabs/Power Up.prefab.meta new file mode 100644 index 0000000..267adc8 --- /dev/null +++ b/Samples~/Bomberman/Network Prefabs/Power Up.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 09a0cccbd8f361641bd963785a4b016c +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Bomberman/Prefabs.meta b/Samples~/Bomberman/Prefabs.meta new file mode 100644 index 0000000..6ec4c65 --- /dev/null +++ b/Samples~/Bomberman/Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5e76a2cfc735bb147a4317f3e8d94254 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Bomberman/Prefabs/Bomberman Sandbox Prefab.prefab b/Samples~/Bomberman/Prefabs/Bomberman Sandbox Prefab.prefab new file mode 100644 index 0000000..7795119 --- /dev/null +++ b/Samples~/Bomberman/Prefabs/Bomberman Sandbox Prefab.prefab @@ -0,0 +1,65 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &9043785826514568002 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7898509927545904770} + - component: {fileID: 6406825067249873042} + - component: {fileID: 6080399855557709633} + m_Layer: 0 + m_Name: Bomberman Sandbox Prefab + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7898509927545904770 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9043785826514568002} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &6406825067249873042 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9043785826514568002} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a132672521c94b04d9660a22f195ad7e, type: 3} + m_Name: + m_EditorClassIdentifier: + AlivePlayers: [] + SpawnPositions: + - {x: 11, y: 9, z: 0} + - {x: 11, y: 1, z: 0} + - {x: 1, y: 9, z: 0} + - {x: 1, y: 1, z: 0} +--- !u!114 &6080399855557709633 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9043785826514568002} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d6475ef2cc420914e87d5433265300cf, type: 3} + m_Name: + m_EditorClassIdentifier: diff --git a/Samples~/Bomberman/Prefabs/Bomberman Sandbox Prefab.prefab.meta b/Samples~/Bomberman/Prefabs/Bomberman Sandbox Prefab.prefab.meta new file mode 100644 index 0000000..6283d18 --- /dev/null +++ b/Samples~/Bomberman/Prefabs/Bomberman Sandbox Prefab.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d4aa3ed8fdafd074cbc363c4684c3d44 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Bomberman/Prefabs/UIServerElement.prefab b/Samples~/Bomberman/Prefabs/UIServerElement.prefab new file mode 100644 index 0000000..8bd7007 --- /dev/null +++ b/Samples~/Bomberman/Prefabs/UIServerElement.prefab @@ -0,0 +1,432 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &7756731906993045135 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7756731906993045134} + - component: {fileID: 7756731906993045132} + - component: {fileID: 7756731906993045133} + m_Layer: 5 + m_Name: Name + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7756731906993045134 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7756731906993045135} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7756731908430032478} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -179.64719, y: -3.35} + m_SizeDelta: {x: 414.8553, y: 23.9777} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &7756731906993045132 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7756731906993045135} + m_CullTransparentMesh: 1 +--- !u!114 &7756731906993045133 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7756731906993045135} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 21 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Server Browser +--- !u!1 &7756731908430032479 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7756731908430032478} + - component: {fileID: 7756731908430032477} + m_Layer: 5 + m_Name: UIServerElement + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7756731908430032478 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7756731908430032479} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7756731908443105545} + - {fileID: 7756731906993045134} + - {fileID: 7756731908664904289} + m_Father: {fileID: 0} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 810.21, y: 50.3113} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &7756731908430032477 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7756731908430032479} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 742d47201bd4e0e47b3460de2b0f17c4, type: 3} + m_Name: + m_EditorClassIdentifier: + _nameText: {fileID: 7756731906993045133} + _ipText: {fileID: 7756731908664904288} + _ip: + _Port: 0 +--- !u!1 &7756731908443105546 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7756731908443105545} + - component: {fileID: 7756731908443105542} + - component: {fileID: 7756731908443105543} + - component: {fileID: 7756731908443105544} + m_Layer: 5 + m_Name: Button (Legacy) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7756731908443105545 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7756731908443105546} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7756731908846572219} + m_Father: {fileID: 7756731908430032478} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 313, y: -3.0112} + m_SizeDelta: {x: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &7756731908443105542 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7756731908443105546} + m_CullTransparentMesh: 1 +--- !u!114 &7756731908443105543 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7756731908443105546} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &7756731908443105544 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7756731908443105546} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 7756731908443105543} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 7756731908430032477} + m_TargetAssemblyTypeName: UIServerElement, Assembly-CSharp + m_MethodName: Connect + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!1 &7756731908664904290 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7756731908664904289} + - component: {fileID: 7756731908664904607} + - component: {fileID: 7756731908664904288} + m_Layer: 5 + m_Name: Address + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7756731908664904289 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7756731908664904290} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7756731908430032478} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 135, y: -3.35} + m_SizeDelta: {x: 174.2468, y: 23.9777} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &7756731908664904607 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7756731908664904290} + m_CullTransparentMesh: 1 +--- !u!114 &7756731908664904288 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7756731908664904290} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 21 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 192.168.66.66 +--- !u!1 &7756731908846572220 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7756731908846572219} + - component: {fileID: 7756731908846572217} + - component: {fileID: 7756731908846572218} + m_Layer: 5 + m_Name: Text (Legacy) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7756731908846572219 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7756731908846572220} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7756731908443105545} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &7756731908846572217 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7756731908846572220} + m_CullTransparentMesh: 1 +--- !u!114 &7756731908846572218 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7756731908846572220} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Connect diff --git a/Samples~/Bomberman/Prefabs/UIServerElement.prefab.meta b/Samples~/Bomberman/Prefabs/UIServerElement.prefab.meta new file mode 100644 index 0000000..1189e64 --- /dev/null +++ b/Samples~/Bomberman/Prefabs/UIServerElement.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ca481ab54d856c149b193e63bc0e38d2 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Bomberman/Scenes.meta b/Samples~/Bomberman/Scenes.meta new file mode 100644 index 0000000..199b382 --- /dev/null +++ b/Samples~/Bomberman/Scenes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: af9ae847ee527ac43a4e80febc12d9d4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Bomberman/Scenes/Bomberman.unity b/Samples~/Bomberman/Scenes/Bomberman.unity new file mode 100644 index 0000000..465adf7 --- /dev/null +++ b/Samples~/Bomberman/Scenes/Bomberman.unity @@ -0,0 +1,7201 @@ +%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: 0} + m_IndirectSpecularColor: {r: 0.45137393, g: 0.50092196, b: 0.57263935, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + 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: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + 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 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &1070948396 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1070948398} + - component: {fileID: 1070948397} + - component: {fileID: 1070948399} + 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 &1070948397 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1070948396} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + 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: 0 + 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: 4 + 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_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1070948398 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1070948396} + serializedVersion: 2 + m_LocalRotation: {x: 0.26249766, y: -0.061419807, z: 0.01674496, w: 0.9628303} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 30.5, y: -7.3, z: 0} +--- !u!114 &1070948399 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1070948396} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -355052428, guid: da78c2c9df60edc4fb5f65b59fa57c41, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1809360483 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1809360484} + - component: {fileID: 1809360486} + m_Layer: 0 + m_Name: Network + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1809360484 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1809360483} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 4.6873107, y: 4.955009, z: -5.194639} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1809360486 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1809360483} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5922d4a2e010aac4cb20e7dcf04236f4, type: 3} + m_Name: + m_EditorClassIdentifier: + SandboxPrefab: {fileID: 9043785826514568002, guid: d4aa3ed8fdafd074cbc363c4684c3d44, + type: 3} + Transport: {fileID: 11400000, guid: 45d8249dfdf511d429f92c6a4a4e26f4, type: 2} + Mode: 2 + Clients: 1 + StartServerInMultiplePeersMode: 1 + AutoStart: 0 + AutoConnect: 0 + Port: 36728 + ServerIPAddress: 127.0.0.1 +--- !u!1 &2037625649 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2037625652} + - component: {fileID: 2037625651} + - component: {fileID: 2037625650} + 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 &2037625650 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2037625649} + m_Enabled: 0 +--- !u!20 &2037625651 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2037625649} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.103773594, g: 0.103773594, b: 0.103773594, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + 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.7 + orthographic: 0 + orthographic size: 7.39 + 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 &2037625652 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2037625649} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 6, y: 5.14, z: -12.45} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &3762179929400513781 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929400513782} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1, y: 10, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3762179929400513782 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179929400513781} + - component: {fileID: 3762179929400513783} + - component: {fileID: 3762179929400513785} + - component: {fileID: 3762179929400513784} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!65 &3762179929400513783 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929400513782} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &3762179929400513784 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929400513782} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179929400513785 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929400513782} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179929404790349 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929404790350} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 10, y: 8, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3762179929404790350 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179929404790349} + - component: {fileID: 3762179929404790351} + - component: {fileID: 3762179929404790353} + - component: {fileID: 3762179929404790352} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!65 &3762179929404790351 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929404790350} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &3762179929404790352 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929404790350} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179929404790353 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929404790350} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179929413370955 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929413370956} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3762179929413370956 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179929413370955} + - component: {fileID: 3762179929413370957} + - component: {fileID: 3762179929413370959} + - component: {fileID: 3762179929413370958} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!65 &3762179929413370957 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929413370956} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &3762179929413370958 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929413370956} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179929413370959 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929413370956} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179929447117196 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929447117201} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 6, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3762179929447117198 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929447117201} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &3762179929447117201 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179929447117196} + - component: {fileID: 3762179929447117198} + - component: {fileID: 3762179929447117203} + - component: {fileID: 3762179929447117202} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!23 &3762179929447117202 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929447117201} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179929447117203 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929447117201} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179929466466067 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929466466068} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3762179929466466068 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179929466466067} + - component: {fileID: 3762179929466466069} + - component: {fileID: 3762179929466466071} + - component: {fileID: 3762179929466466070} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!65 &3762179929466466069 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929466466068} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &3762179929466466070 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929466466068} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179929466466071 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929466466068} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179929484820765 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929484820766} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 5, y: 10, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3762179929484820766 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179929484820765} + - component: {fileID: 3762179929484820767} + - component: {fileID: 3762179929484820769} + - component: {fileID: 3762179929484820768} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!65 &3762179929484820767 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929484820766} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &3762179929484820768 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929484820766} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179929484820769 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929484820766} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179929659323437 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929659323438} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 12, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3762179929659323438 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179929659323437} + - component: {fileID: 3762179929659323439} + - component: {fileID: 3762179929659323441} + - component: {fileID: 3762179929659323440} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!65 &3762179929659323439 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929659323438} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &3762179929659323440 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929659323438} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179929659323441 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929659323438} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179929727109889 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929727109890} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 4, y: 10, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3762179929727109890 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179929727109889} + - component: {fileID: 3762179929727109891} + - component: {fileID: 3762179929727109893} + - component: {fileID: 3762179929727109892} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!65 &3762179929727109891 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929727109890} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &3762179929727109892 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929727109890} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179929727109893 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929727109890} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179929750290845 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929750290846} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2, y: 4, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3762179929750290846 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179929750290845} + - component: {fileID: 3762179929750290847} + - component: {fileID: 3762179929750290849} + - component: {fileID: 3762179929750290848} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!65 &3762179929750290847 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929750290846} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &3762179929750290848 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929750290846} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179929750290849 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929750290846} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179929790994700 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929790994705} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 5, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3762179929790994702 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929790994705} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &3762179929790994705 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179929790994700} + - component: {fileID: 3762179929790994702} + - component: {fileID: 3762179929790994707} + - component: {fileID: 3762179929790994706} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!23 &3762179929790994706 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929790994705} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179929790994707 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929790994705} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179929808211522 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929808211527} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 8, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3762179929808211524 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929808211527} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &3762179929808211527 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179929808211522} + - component: {fileID: 3762179929808211524} + - component: {fileID: 3762179929808211529} + - component: {fileID: 3762179929808211528} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!23 &3762179929808211528 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929808211527} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179929808211529 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929808211527} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179929816639101 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929816639102} + serializedVersion: 2 + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3762179929816639102 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179929816639101} + - component: {fileID: 3762179929816639103} + - component: {fileID: 3762179929816639105} + - component: {fileID: 3762179929816639104} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!65 &3762179929816639103 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929816639102} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &3762179929816639104 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929816639102} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179929816639105 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929816639102} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179929869739916 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929869739921} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 11, y: 10, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3762179929869739918 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929869739921} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &3762179929869739921 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179929869739916} + - component: {fileID: 3762179929869739918} + - component: {fileID: 3762179929869739923} + - component: {fileID: 3762179929869739922} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!23 &3762179929869739922 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929869739921} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179929869739923 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929869739921} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179929883574845 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929883574846} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 6, y: 8, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3762179929883574846 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179929883574845} + - component: {fileID: 3762179929883574847} + - component: {fileID: 3762179929883574849} + - component: {fileID: 3762179929883574848} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!65 &3762179929883574847 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929883574846} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &3762179929883574848 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929883574846} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179929883574849 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929883574846} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179929907730806 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929907730811} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 12, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3762179929907730808 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929907730811} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &3762179929907730811 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179929907730806} + - component: {fileID: 3762179929907730808} + - component: {fileID: 3762179929907730813} + - component: {fileID: 3762179929907730812} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!23 &3762179929907730812 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929907730811} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179929907730813 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929907730811} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179929913567854 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929913567859} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 10, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3762179929913567856 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929913567859} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &3762179929913567859 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179929913567854} + - component: {fileID: 3762179929913567856} + - component: {fileID: 3762179929913567861} + - component: {fileID: 3762179929913567860} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!23 &3762179929913567860 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929913567859} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179929913567861 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929913567859} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179929929987735 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929929987736} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 10, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3762179929929987736 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179929929987735} + - component: {fileID: 3762179929929987737} + - component: {fileID: 3762179929929987739} + - component: {fileID: 3762179929929987738} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!65 &3762179929929987737 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929929987736} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &3762179929929987738 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929929987736} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179929929987739 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929929987736} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179929942394440 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929942394445} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2, y: 10, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3762179929942394442 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929942394445} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &3762179929942394445 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179929942394440} + - component: {fileID: 3762179929942394442} + - component: {fileID: 3762179929942394447} + - component: {fileID: 3762179929942394446} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!23 &3762179929942394446 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929942394445} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179929942394447 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929942394445} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179929944979522 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929944979527} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 4, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3762179929944979524 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929944979527} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &3762179929944979527 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179929944979522} + - component: {fileID: 3762179929944979524} + - component: {fileID: 3762179929944979529} + - component: {fileID: 3762179929944979528} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!23 &3762179929944979528 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929944979527} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179929944979529 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929944979527} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179929962999759 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929962999760} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3762179929962999760 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179929962999759} + - component: {fileID: 3762179929962999761} + - component: {fileID: 3762179929962999763} + - component: {fileID: 3762179929962999762} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!65 &3762179929962999761 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929962999760} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &3762179929962999762 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929962999760} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179929962999763 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179929962999760} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179930003414730 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930003414735} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 7, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3762179930003414732 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930003414735} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &3762179930003414735 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179930003414730} + - component: {fileID: 3762179930003414732} + - component: {fileID: 3762179930003414737} + - component: {fileID: 3762179930003414736} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!23 &3762179930003414736 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930003414735} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179930003414737 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930003414735} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179930047943147 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930047943148} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3762179930047943148 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179930047943147} + - component: {fileID: 3762179930047943149} + - component: {fileID: 3762179930047943151} + - component: {fileID: 3762179930047943150} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!65 &3762179930047943149 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930047943148} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &3762179930047943150 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930047943148} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179930047943151 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930047943148} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179930063202112 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930063202117} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 10, y: 6, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3762179930063202114 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930063202117} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &3762179930063202117 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179930063202112} + - component: {fileID: 3762179930063202114} + - component: {fileID: 3762179930063202119} + - component: {fileID: 3762179930063202118} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!23 &3762179930063202118 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930063202117} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179930063202119 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930063202117} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179930101185815 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930101185816} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 8, y: 4, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3762179930101185816 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179930101185815} + - component: {fileID: 3762179930101185817} + - component: {fileID: 3762179930101185819} + - component: {fileID: 3762179930101185818} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!65 &3762179930101185817 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930101185816} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &3762179930101185818 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930101185816} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179930101185819 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930101185816} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179930140594376 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930140594381} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 5, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3762179930140594378 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930140594381} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &3762179930140594381 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179930140594376} + - component: {fileID: 3762179930140594378} + - component: {fileID: 3762179930140594383} + - component: {fileID: 3762179930140594382} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!23 &3762179930140594382 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930140594381} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179930140594383 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930140594381} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179930153515712 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930153515717} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 8, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3762179930153515714 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930153515717} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &3762179930153515717 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179930153515712} + - component: {fileID: 3762179930153515714} + - component: {fileID: 3762179930153515719} + - component: {fileID: 3762179930153515718} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!23 &3762179930153515718 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930153515717} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179930153515719 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930153515717} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179930162060482 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930162060487} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3, y: 10, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3762179930162060484 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930162060487} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &3762179930162060487 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179930162060482} + - component: {fileID: 3762179930162060484} + - component: {fileID: 3762179930162060489} + - component: {fileID: 3762179930162060488} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!23 &3762179930162060488 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930162060487} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179930162060489 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930162060487} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179930194832874 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930194832879} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 12, y: 4, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3762179930194832876 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930194832879} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &3762179930194832879 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179930194832874} + - component: {fileID: 3762179930194832876} + - component: {fileID: 3762179930194832881} + - component: {fileID: 3762179930194832880} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!23 &3762179930194832880 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930194832879} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179930194832881 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930194832879} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179930212334376 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930212334381} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 4, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3762179930212334378 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930212334381} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &3762179930212334381 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179930212334376} + - component: {fileID: 3762179930212334378} + - component: {fileID: 3762179930212334383} + - component: {fileID: 3762179930212334382} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!23 &3762179930212334382 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930212334381} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179930212334383 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930212334381} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179930213692355 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930213692356} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 4, y: 6, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3762179930213692356 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179930213692355} + - component: {fileID: 3762179930213692357} + - component: {fileID: 3762179930213692359} + - component: {fileID: 3762179930213692358} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!65 &3762179930213692357 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930213692356} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &3762179930213692358 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930213692356} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179930213692359 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930213692356} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179930277524080 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930277524085} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 12, y: 8, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3762179930277524082 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930277524085} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &3762179930277524085 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179930277524080} + - component: {fileID: 3762179930277524082} + - component: {fileID: 3762179930277524087} + - component: {fileID: 3762179930277524086} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!23 &3762179930277524086 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930277524085} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179930277524087 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930277524085} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179930282385946 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930282385951} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2, y: 6, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3762179930282385948 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930282385951} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &3762179930282385951 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179930282385946} + - component: {fileID: 3762179930282385948} + - component: {fileID: 3762179930282385953} + - component: {fileID: 3762179930282385952} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!23 &3762179930282385952 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930282385951} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179930282385953 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930282385951} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179930296064658 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930296064663} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 12, y: 9, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3762179930296064660 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930296064663} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &3762179930296064663 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179930296064658} + - component: {fileID: 3762179930296064660} + - component: {fileID: 3762179930296064665} + - component: {fileID: 3762179930296064664} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!23 &3762179930296064664 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930296064663} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179930296064665 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930296064663} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179930338228032 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930338228037} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 8, y: 8, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3762179930338228034 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930338228037} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &3762179930338228037 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179930338228032} + - component: {fileID: 3762179930338228034} + - component: {fileID: 3762179930338228039} + - component: {fileID: 3762179930338228038} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!23 &3762179930338228038 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930338228037} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179930338228039 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930338228037} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179930488599659 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930488599660} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 12, y: 7, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3762179930488599660 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179930488599659} + - component: {fileID: 3762179930488599661} + - component: {fileID: 3762179930488599663} + - component: {fileID: 3762179930488599662} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!65 &3762179930488599661 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930488599660} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &3762179930488599662 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930488599660} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179930488599663 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930488599660} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179930513190731 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930513190732} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 7, y: 10, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3762179930513190732 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179930513190731} + - component: {fileID: 3762179930513190733} + - component: {fileID: 3762179930513190735} + - component: {fileID: 3762179930513190734} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!65 &3762179930513190733 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930513190732} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &3762179930513190734 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930513190732} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179930513190735 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930513190732} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179930531359040 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930531359045} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 10, y: 10, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3762179930531359042 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930531359045} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &3762179930531359045 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179930531359040} + - component: {fileID: 3762179930531359042} + - component: {fileID: 3762179930531359047} + - component: {fileID: 3762179930531359046} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!23 &3762179930531359046 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930531359045} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179930531359047 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930531359045} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179930537697542 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930537697547} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 9, y: 10, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3762179930537697544 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930537697547} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &3762179930537697547 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179930537697542} + - component: {fileID: 3762179930537697544} + - component: {fileID: 3762179930537697549} + - component: {fileID: 3762179930537697548} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!23 &3762179930537697548 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930537697547} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179930537697549 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930537697547} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179930559818826 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930559818831} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 6, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3762179930559818828 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930559818831} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &3762179930559818831 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179930559818826} + - component: {fileID: 3762179930559818828} + - component: {fileID: 3762179930559818833} + - component: {fileID: 3762179930559818832} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!23 &3762179930559818832 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930559818831} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179930559818833 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930559818831} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179930585491431 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930585491432} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 8, y: 6, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3762179930585491432 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179930585491431} + - component: {fileID: 3762179930585491433} + - component: {fileID: 3762179930585491435} + - component: {fileID: 3762179930585491434} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!65 &3762179930585491433 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930585491432} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &3762179930585491434 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930585491432} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179930585491435 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930585491432} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179930628946517 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930628946518} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 8, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3762179930628946518 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179930628946517} + - component: {fileID: 3762179930628946519} + - component: {fileID: 3762179930628946521} + - component: {fileID: 3762179930628946520} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!65 &3762179930628946519 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930628946518} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &3762179930628946520 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930628946518} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179930628946521 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930628946518} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179930688273503 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930688273504} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 12, y: 5, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3762179930688273504 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179930688273503} + - component: {fileID: 3762179930688273505} + - component: {fileID: 3762179930688273507} + - component: {fileID: 3762179930688273506} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!65 &3762179930688273505 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930688273504} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &3762179930688273506 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930688273504} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179930688273507 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930688273504} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179930689380002 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930689380007} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 4, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3762179930689380004 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930689380007} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &3762179930689380007 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179930689380002} + - component: {fileID: 3762179930689380004} + - component: {fileID: 3762179930689380009} + - component: {fileID: 3762179930689380008} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!23 &3762179930689380008 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930689380007} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179930689380009 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930689380007} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &3762179930698311634 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179930698311635} + m_Layer: 0 + m_Name: Static Environment + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &3762179930698311635 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930698311634} + serializedVersion: 2 + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3762179931095372675} + - {fileID: 3762179931043559103} + - {fileID: 3762179931003305185} + - {fileID: 3762179931003150356} + - {fileID: 3762179930999059073} + - {fileID: 3762179931189911093} + - {fileID: 3762179931323687779} + - {fileID: 3762179931509775061} + - {fileID: 3762179931473080323} + - {fileID: 3762179931463823667} + - {fileID: 3762179931450431339} + - {fileID: 3762179931434243411} + - {fileID: 3762179931413511070} + - {fileID: 3762179930585491431} + - {fileID: 3762179930559818826} + - {fileID: 3762179930537697542} + - {fileID: 3762179930531359040} + - {fileID: 3762179930513190731} + - {fileID: 3762179930488599659} + - {fileID: 3762179930715615721} + - {fileID: 3762179930702571215} + - {fileID: 3762179930706286969} + - {fileID: 3762179930688273503} + - {fileID: 3762179930689380002} + - {fileID: 3762179930628946517} + - {fileID: 3762179930834958669} + - {fileID: 3762179930836507423} + - {fileID: 3762179930744240102} + - {fileID: 3762179930738436304} + - {fileID: 3762179930953011011} + - {fileID: 3762179930047943147} + - {fileID: 3762179930003414730} + - {fileID: 3762179929962999759} + - {fileID: 3762179929942394440} + - {fileID: 3762179929944979522} + - {fileID: 3762179929929987735} + - {fileID: 3762179930162060482} + - {fileID: 3762179930153515712} + - {fileID: 3762179930140594376} + - {fileID: 3762179930101185815} + - {fileID: 3762179930063202112} + - {fileID: 3762179930296064658} + - {fileID: 3762179930282385946} + - {fileID: 3762179930277524080} + - {fileID: 3762179930212334376} + - {fileID: 3762179930213692355} + - {fileID: 3762179930194832874} + - {fileID: 3762179930338228032} + - {fileID: 3762179929484820765} + - {fileID: 3762179929466466067} + - {fileID: 3762179929447117196} + - {fileID: 3762179929413370955} + - {fileID: 3762179929400513781} + - {fileID: 3762179929404790349} + - {fileID: 3762179929750290845} + - {fileID: 3762179929727109889} + - {fileID: 3762179929659323437} + - {fileID: 3762179929913567854} + - {fileID: 3762179929907730806} + - {fileID: 3762179929883574845} + - {fileID: 3762179929869739916} + - {fileID: 3762179929816639101} + - {fileID: 3762179929808211522} + - {fileID: 3762179929790994700} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &3762179930702571215 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930702571216} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 4, y: 4, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3762179930702571216 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179930702571215} + - component: {fileID: 3762179930702571217} + - component: {fileID: 3762179930702571219} + - component: {fileID: 3762179930702571218} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!65 &3762179930702571217 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930702571216} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &3762179930702571218 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930702571216} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179930702571219 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930702571216} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179930706286969 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930706286970} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3762179930706286970 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179930706286969} + - component: {fileID: 3762179930706286971} + - component: {fileID: 3762179930706286973} + - component: {fileID: 3762179930706286972} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!65 &3762179930706286971 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930706286970} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &3762179930706286972 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930706286970} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179930706286973 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930706286970} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179930715615721 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930715615722} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 6, y: 4, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3762179930715615722 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179930715615721} + - component: {fileID: 3762179930715615723} + - component: {fileID: 3762179930715615725} + - component: {fileID: 3762179930715615724} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!65 &3762179930715615723 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930715615722} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &3762179930715615724 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930715615722} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179930715615725 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930715615722} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179930738436304 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930738436309} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3762179930738436306 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930738436309} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &3762179930738436309 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179930738436304} + - component: {fileID: 3762179930738436306} + - component: {fileID: 3762179930738436311} + - component: {fileID: 3762179930738436310} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!23 &3762179930738436310 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930738436309} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179930738436311 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930738436309} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179930744240102 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930744240107} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 6, y: 6, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3762179930744240104 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930744240107} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &3762179930744240107 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179930744240102} + - component: {fileID: 3762179930744240104} + - component: {fileID: 3762179930744240109} + - component: {fileID: 3762179930744240108} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!23 &3762179930744240108 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930744240107} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179930744240109 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930744240107} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179930834958669 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930834958670} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 12, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3762179930834958670 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179930834958669} + - component: {fileID: 3762179930834958671} + - component: {fileID: 3762179930834958673} + - component: {fileID: 3762179930834958672} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!65 &3762179930834958671 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930834958670} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &3762179930834958672 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930834958670} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179930834958673 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930834958670} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179930836507423 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930836507424} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3762179930836507424 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179930836507423} + - component: {fileID: 3762179930836507425} + - component: {fileID: 3762179930836507427} + - component: {fileID: 3762179930836507426} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!65 &3762179930836507425 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930836507424} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &3762179930836507426 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930836507424} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179930836507427 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930836507424} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179930953011011 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930953011012} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 11, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3762179930953011012 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179930953011011} + - component: {fileID: 3762179930953011013} + - component: {fileID: 3762179930953011015} + - component: {fileID: 3762179930953011014} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!65 &3762179930953011013 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930953011012} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &3762179930953011014 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930953011012} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179930953011015 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930953011012} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179930999059073 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930999059074} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 7, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3762179930999059074 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179930999059073} + - component: {fileID: 3762179930999059075} + - component: {fileID: 3762179930999059077} + - component: {fileID: 3762179930999059076} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!65 &3762179930999059075 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930999059074} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &3762179930999059076 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930999059074} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179930999059077 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179930999059074} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179931003150356 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931003150361} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 9, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3762179931003150358 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931003150361} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &3762179931003150361 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179931003150356} + - component: {fileID: 3762179931003150358} + - component: {fileID: 3762179931003150363} + - component: {fileID: 3762179931003150362} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!23 &3762179931003150362 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931003150361} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179931003150363 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931003150361} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179931003305185 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931003305186} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 12, y: 1, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3762179931003305186 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179931003305185} + - component: {fileID: 3762179931003305187} + - component: {fileID: 3762179931003305189} + - component: {fileID: 3762179931003305188} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!65 &3762179931003305187 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931003305186} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &3762179931003305188 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931003305186} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179931003305189 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931003305186} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179931043559103 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931043559232} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 12, y: 10, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3762179931043559232 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179931043559103} + - component: {fileID: 3762179931043559233} + - component: {fileID: 3762179931043559235} + - component: {fileID: 3762179931043559234} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!65 &3762179931043559233 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931043559232} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &3762179931043559234 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931043559232} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179931043559235 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931043559232} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179931095372675 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931095372676} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 10, y: 4, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3762179931095372676 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179931095372675} + - component: {fileID: 3762179931095372677} + - component: {fileID: 3762179931095372679} + - component: {fileID: 3762179931095372678} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!65 &3762179931095372677 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931095372676} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &3762179931095372678 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931095372676} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179931095372679 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931095372676} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179931189911093 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931189911094} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 9, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3762179931189911094 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179931189911093} + - component: {fileID: 3762179931189911095} + - component: {fileID: 3762179931189911097} + - component: {fileID: 3762179931189911096} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!65 &3762179931189911095 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931189911094} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &3762179931189911096 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931189911094} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179931189911097 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931189911094} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179931323687779 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931323687780} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 12, y: 6, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3762179931323687780 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179931323687779} + - component: {fileID: 3762179931323687781} + - component: {fileID: 3762179931323687783} + - component: {fileID: 3762179931323687782} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!65 &3762179931323687781 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931323687780} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &3762179931323687782 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931323687780} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179931323687783 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931323687780} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179931413511070 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931413511075} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 8, y: 10, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &3762179931413511072 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931413511075} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &3762179931413511075 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179931413511070} + - component: {fileID: 3762179931413511072} + - component: {fileID: 3762179931413511077} + - component: {fileID: 3762179931413511076} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!23 &3762179931413511076 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931413511075} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179931413511077 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931413511075} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179931434243411 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931434243412} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 6, y: 10, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3762179931434243412 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179931434243411} + - component: {fileID: 3762179931434243413} + - component: {fileID: 3762179931434243415} + - component: {fileID: 3762179931434243414} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!65 &3762179931434243413 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931434243412} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &3762179931434243414 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931434243412} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179931434243415 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931434243412} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179931450431339 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931450431340} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 4, y: 8, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3762179931450431340 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179931450431339} + - component: {fileID: 3762179931450431341} + - component: {fileID: 3762179931450431343} + - component: {fileID: 3762179931450431342} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!65 &3762179931450431341 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931450431340} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &3762179931450431342 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931450431340} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179931450431343 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931450431340} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179931463823667 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931463823668} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 6, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3762179931463823668 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179931463823667} + - component: {fileID: 3762179931463823669} + - component: {fileID: 3762179931463823671} + - component: {fileID: 3762179931463823670} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!65 &3762179931463823669 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931463823668} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &3762179931463823670 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931463823668} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179931463823671 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931463823668} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179931473080323 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931473080324} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 10, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3762179931473080324 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179931473080323} + - component: {fileID: 3762179931473080325} + - component: {fileID: 3762179931473080327} + - component: {fileID: 3762179931473080326} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!65 &3762179931473080325 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931473080324} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &3762179931473080326 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931473080324} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179931473080327 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931473080324} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &3762179931509775061 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931509775062} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2, y: 8, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3762179930698311635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3762179931509775062 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3762179931509775061} + - component: {fileID: 3762179931509775063} + - component: {fileID: 3762179931509775065} + - component: {fileID: 3762179931509775064} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!65 &3762179931509775063 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931509775062} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &3762179931509775064 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931509775062} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &3762179931509775065 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3762179931509775062} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 1809360484} + - {fileID: 2037625652} + - {fileID: 1070948398} + - {fileID: 3762179930698311635} diff --git a/Samples~/Bomberman/Scenes/Bomberman.unity.meta b/Samples~/Bomberman/Scenes/Bomberman.unity.meta new file mode 100644 index 0000000..44c145a --- /dev/null +++ b/Samples~/Bomberman/Scenes/Bomberman.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b71c088b25b80d84f94a2507d42a689e +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Bomberman/Scenes/BombermanLAN.unity b/Samples~/Bomberman/Scenes/BombermanLAN.unity new file mode 100644 index 0000000..b45bdee --- /dev/null +++ b/Samples~/Bomberman/Scenes/BombermanLAN.unity @@ -0,0 +1,7759 @@ +%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: 0} + m_IndirectSpecularColor: {r: 0.44657898, g: 0.4964133, b: 0.5748178, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + 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: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + 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 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &4387129 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4387130} + - component: {fileID: 4387133} + - component: {fileID: 4387132} + - component: {fileID: 4387131} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &4387130 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4387129} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 12, y: 8, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &4387131 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4387129} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &4387132 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4387129} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &4387133 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4387129} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &57377557 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 57377558} + - component: {fileID: 57377561} + - component: {fileID: 57377560} + - component: {fileID: 57377559} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &57377558 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 57377557} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 12, y: 7, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &57377559 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 57377557} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &57377560 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 57377557} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &57377561 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 57377557} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &84496511 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 84496512} + - component: {fileID: 84496515} + - component: {fileID: 84496514} + - component: {fileID: 84496513} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &84496512 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 84496511} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 8, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &84496513 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 84496511} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &84496514 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 84496511} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &84496515 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 84496511} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &111008994 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 111008995} + - component: {fileID: 111008998} + - component: {fileID: 111008997} + - component: {fileID: 111008996} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &111008995 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 111008994} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 9, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &111008996 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 111008994} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &111008997 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 111008994} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &111008998 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 111008994} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &111984798 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 111984799} + - component: {fileID: 111984802} + - component: {fileID: 111984801} + - component: {fileID: 111984800} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &111984799 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 111984798} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 6, y: 10, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &111984800 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 111984798} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &111984801 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 111984798} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &111984802 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 111984798} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &114366403 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 114366404} + - component: {fileID: 114366407} + - component: {fileID: 114366406} + - component: {fileID: 114366405} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &114366404 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 114366403} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 12, y: 1, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &114366405 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 114366403} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &114366406 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 114366403} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &114366407 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 114366403} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &114935790 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 114935793} + - component: {fileID: 114935792} + m_Layer: 0 + m_Name: Network + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &114935792 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 114935790} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5922d4a2e010aac4cb20e7dcf04236f4, type: 3} + m_Name: + m_EditorClassIdentifier: + SandboxPrefab: {fileID: 9043785826514568002, guid: d4aa3ed8fdafd074cbc363c4684c3d44, + type: 3} + Transport: {fileID: 11400000, guid: 45d8249dfdf511d429f92c6a4a4e26f4, type: 2} + Mode: 2 + Clients: 1 + StartServerInMultiplePeersMode: 1 + AutoStart: 0 + AutoConnect: 0 + Port: 33614 + ServerIPAddress: 127.0.0.1 +--- !u!4 &114935793 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 114935790} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 4.6873107, y: 4.955009, z: -5.194639} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &115595761 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 115595762} + - component: {fileID: 115595765} + - component: {fileID: 115595764} + - component: {fileID: 115595763} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &115595762 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 115595761} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 4, y: 6, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &115595763 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 115595761} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &115595764 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 115595761} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &115595765 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 115595761} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &133037422 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 133037423} + - component: {fileID: 133037426} + - component: {fileID: 133037425} + - component: {fileID: 133037424} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &133037423 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 133037422} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &133037424 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 133037422} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &133037425 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 133037422} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &133037426 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 133037422} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &156135684 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 156135685} + - component: {fileID: 156135688} + - component: {fileID: 156135687} + - component: {fileID: 156135686} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &156135685 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 156135684} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 12, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &156135686 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 156135684} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &156135687 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 156135684} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &156135688 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 156135684} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &194273065 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 194273066} + - component: {fileID: 194273069} + - component: {fileID: 194273068} + - component: {fileID: 194273067} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &194273066 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 194273065} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 8, y: 4, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &194273067 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 194273065} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &194273068 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 194273065} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &194273069 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 194273065} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &241368573 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 241368574} + - component: {fileID: 241368577} + - component: {fileID: 241368576} + - component: {fileID: 241368575} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &241368574 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 241368573} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 10, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &241368575 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 241368573} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &241368576 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 241368573} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &241368577 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 241368573} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &259743028 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 259743029} + - component: {fileID: 259743032} + - component: {fileID: 259743031} + - component: {fileID: 259743030} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &259743029 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 259743028} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 7, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &259743030 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 259743028} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &259743031 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 259743028} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &259743032 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 259743028} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &287595394 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 287595395} + - component: {fileID: 287595398} + - component: {fileID: 287595397} + - component: {fileID: 287595396} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &287595395 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 287595394} + serializedVersion: 2 + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &287595396 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 287595394} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &287595397 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 287595394} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &287595398 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 287595394} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &474529440 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 474529441} + - component: {fileID: 474529444} + - component: {fileID: 474529443} + - component: {fileID: 474529442} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &474529441 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 474529440} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 10, y: 6, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &474529442 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 474529440} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &474529443 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 474529440} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &474529444 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 474529440} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &490783336 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 490783337} + - component: {fileID: 490783340} + - component: {fileID: 490783339} + - component: {fileID: 490783338} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &490783337 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 490783336} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 12, y: 10, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &490783338 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 490783336} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &490783339 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 490783336} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &490783340 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 490783336} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &522790053 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 522790054} + - component: {fileID: 522790057} + - component: {fileID: 522790056} + - component: {fileID: 522790055} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &522790054 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 522790053} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &522790055 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 522790053} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &522790056 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 522790053} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &522790057 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 522790053} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &527096595 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 527096596} + - component: {fileID: 527096599} + - component: {fileID: 527096598} + - component: {fileID: 527096597} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &527096596 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 527096595} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 12, y: 5, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &527096597 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 527096595} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &527096598 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 527096595} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &527096599 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 527096595} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &578507494 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 578507495} + - component: {fileID: 578507498} + - component: {fileID: 578507497} + - component: {fileID: 578507496} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &578507495 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 578507494} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &578507496 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 578507494} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &578507497 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 578507494} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &578507498 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 578507494} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &586629054 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 586629055} + - component: {fileID: 586629058} + - component: {fileID: 586629057} + - component: {fileID: 586629056} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &586629055 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 586629054} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 9, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &586629056 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 586629054} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &586629057 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 586629054} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &586629058 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 586629054} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &596987718 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 596987719} + - component: {fileID: 596987722} + - component: {fileID: 596987721} + - component: {fileID: 596987720} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &596987719 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 596987718} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2, y: 8, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &596987720 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 596987718} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &596987721 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 596987718} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &596987722 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 596987718} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &634764593 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 634764594} + - component: {fileID: 634764597} + - component: {fileID: 634764596} + - component: {fileID: 634764595} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &634764594 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 634764593} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 10, y: 8, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &634764595 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 634764593} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &634764596 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 634764593} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &634764597 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 634764593} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &661122667 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 661122671} + - component: {fileID: 661122670} + - component: {fileID: 661122669} + - component: {fileID: 661122668} + - component: {fileID: 661122672} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &661122668 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 661122667} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &661122669 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 661122667} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 1 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &661122670 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 661122667} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 + m_AdditionalShaderChannelsFlag: 0 + m_UpdateRectTransformForStandalone: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &661122671 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 661122667} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1368580201} + - {fileID: 2071271440} + - {fileID: 1437788394} + - {fileID: 1832118243} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!114 &661122672 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 661122667} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f8e8276de5223424c801fbb31d5ccbf9, type: 3} + m_Name: + m_EditorClassIdentifier: + _UIServerElementPrefab: {fileID: 7756731908430032479, guid: ca481ab54d856c149b193e63bc0e38d2, + type: 3} + _startPosition: {x: 0, y: 0, z: 0} + _stepSize: 50 + _servers: [] +--- !u!1 &669737812 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 669737813} + - component: {fileID: 669737816} + - component: {fileID: 669737815} + - component: {fileID: 669737814} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &669737813 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 669737812} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 11, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &669737814 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 669737812} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &669737815 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 669737812} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &669737816 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 669737812} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &709844651 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 709844652} + - component: {fileID: 709844655} + - component: {fileID: 709844654} + - component: {fileID: 709844653} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &709844652 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 709844651} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 6, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &709844653 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 709844651} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &709844654 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 709844651} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &709844655 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 709844651} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &748809040 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 748809041} + m_Layer: 0 + m_Name: Static Environment + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &748809041 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748809040} + serializedVersion: 2 + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1216851466} + - {fileID: 490783337} + - {fileID: 114366404} + - {fileID: 111008995} + - {fileID: 259743029} + - {fileID: 586629055} + - {fileID: 1035452262} + - {fileID: 596987719} + - {fileID: 1138614164} + - {fileID: 1826512934} + - {fileID: 1522045066} + - {fileID: 111984799} + - {fileID: 1729693364} + - {fileID: 1192115137} + - {fileID: 781080779} + - {fileID: 1906446017} + - {fileID: 950211201} + - {fileID: 1410838485} + - {fileID: 57377558} + - {fileID: 1242589960} + - {fileID: 1105569722} + - {fileID: 1708548012} + - {fileID: 527096596} + - {fileID: 1890548281} + - {fileID: 1774824412} + - {fileID: 156135685} + - {fileID: 1975733548} + - {fileID: 1050999658} + - {fileID: 1325788235} + - {fileID: 669737813} + - {fileID: 1829029132} + - {fileID: 1424275102} + - {fileID: 133037423} + - {fileID: 1586661106} + - {fileID: 2119753787} + - {fileID: 1083341072} + - {fileID: 1775640076} + - {fileID: 816978692} + - {fileID: 1834640851} + - {fileID: 194273066} + - {fileID: 474529441} + - {fileID: 1551902397} + - {fileID: 1152668555} + - {fileID: 4387130} + - {fileID: 1091576600} + - {fileID: 115595762} + - {fileID: 2130135212} + - {fileID: 773710278} + - {fileID: 2026368629} + - {fileID: 578507495} + - {fileID: 709844652} + - {fileID: 522790054} + - {fileID: 1221740164} + - {fileID: 634764594} + - {fileID: 1010905682} + - {fileID: 1272156140} + - {fileID: 1510403470} + - {fileID: 241368574} + - {fileID: 1034504578} + - {fileID: 1928099084} + - {fileID: 847038878} + - {fileID: 287595395} + - {fileID: 84496512} + - {fileID: 1808097956} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &773710277 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 773710278} + - component: {fileID: 773710281} + - component: {fileID: 773710280} + - component: {fileID: 773710279} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &773710278 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 773710277} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 8, y: 8, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &773710279 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 773710277} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &773710280 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 773710277} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &773710281 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 773710277} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &781080778 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 781080779} + - component: {fileID: 781080782} + - component: {fileID: 781080781} + - component: {fileID: 781080780} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &781080779 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 781080778} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 6, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &781080780 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 781080778} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &781080781 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 781080778} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &781080782 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 781080778} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &816978691 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 816978692} + - component: {fileID: 816978695} + - component: {fileID: 816978694} + - component: {fileID: 816978693} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &816978692 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 816978691} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 8, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &816978693 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 816978691} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &816978694 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 816978691} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &816978695 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 816978691} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &847038877 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 847038878} + - component: {fileID: 847038881} + - component: {fileID: 847038880} + - component: {fileID: 847038879} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &847038878 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 847038877} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 11, y: 10, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &847038879 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 847038877} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &847038880 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 847038877} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &847038881 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 847038877} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &887063939 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 887063940} + - component: {fileID: 887063942} + - component: {fileID: 887063941} + m_Layer: 5 + m_Name: Text (Legacy) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &887063940 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 887063939} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1437788394} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &887063941 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 887063939} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Refresh +--- !u!222 &887063942 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 887063939} + m_CullTransparentMesh: 1 +--- !u!1 &942276773 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 942276775} + - component: {fileID: 942276774} + - component: {fileID: 942276776} + 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 &942276774 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 942276773} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + 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: 4 + 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_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &942276775 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 942276773} + serializedVersion: 2 + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!114 &942276776 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 942276773} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -355052428, guid: da78c2c9df60edc4fb5f65b59fa57c41, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &950211200 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 950211201} + - component: {fileID: 950211204} + - component: {fileID: 950211203} + - component: {fileID: 950211202} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &950211201 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 950211200} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 10, y: 10, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &950211202 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 950211200} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &950211203 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 950211200} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &950211204 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 950211200} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1010905681 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1010905682} + - component: {fileID: 1010905685} + - component: {fileID: 1010905684} + - component: {fileID: 1010905683} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &1010905682 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1010905681} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2, y: 4, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1010905683 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1010905681} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1010905684 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1010905681} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &1010905685 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1010905681} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1034504577 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1034504578} + - component: {fileID: 1034504581} + - component: {fileID: 1034504580} + - component: {fileID: 1034504579} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &1034504578 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1034504577} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 12, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1034504579 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1034504577} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1034504580 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1034504577} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &1034504581 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1034504577} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1035452261 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1035452262} + - component: {fileID: 1035452265} + - component: {fileID: 1035452264} + - component: {fileID: 1035452263} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &1035452262 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1035452261} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 12, y: 6, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1035452263 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1035452261} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1035452264 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1035452261} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &1035452265 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1035452261} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1050999657 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1050999658} + - component: {fileID: 1050999661} + - component: {fileID: 1050999660} + - component: {fileID: 1050999659} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &1050999658 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1050999657} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 6, y: 6, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1050999659 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1050999657} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1050999660 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1050999657} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &1050999661 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1050999657} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1083341071 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1083341072} + - component: {fileID: 1083341075} + - component: {fileID: 1083341074} + - component: {fileID: 1083341073} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &1083341072 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1083341071} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 10, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1083341073 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1083341071} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1083341074 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1083341071} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &1083341075 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1083341071} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1091576599 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1091576600} + - component: {fileID: 1091576603} + - component: {fileID: 1091576602} + - component: {fileID: 1091576601} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &1091576600 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1091576599} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 4, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1091576601 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1091576599} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1091576602 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1091576599} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &1091576603 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1091576599} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1105569721 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1105569722} + - component: {fileID: 1105569725} + - component: {fileID: 1105569724} + - component: {fileID: 1105569723} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &1105569722 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1105569721} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 4, y: 4, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1105569723 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1105569721} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1105569724 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1105569721} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &1105569725 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1105569721} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1138614163 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1138614164} + - component: {fileID: 1138614167} + - component: {fileID: 1138614166} + - component: {fileID: 1138614165} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &1138614164 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1138614163} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 10, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1138614165 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1138614163} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1138614166 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1138614163} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &1138614167 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1138614163} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1152668554 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1152668555} + - component: {fileID: 1152668558} + - component: {fileID: 1152668557} + - component: {fileID: 1152668556} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &1152668555 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1152668554} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2, y: 6, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1152668556 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1152668554} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1152668557 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1152668554} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &1152668558 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1152668554} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1192115136 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1192115137} + - component: {fileID: 1192115140} + - component: {fileID: 1192115139} + - component: {fileID: 1192115138} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &1192115137 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1192115136} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 8, y: 6, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1192115138 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1192115136} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1192115139 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1192115136} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &1192115140 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1192115136} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1216851465 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1216851466} + - component: {fileID: 1216851469} + - component: {fileID: 1216851468} + - component: {fileID: 1216851467} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &1216851466 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1216851465} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 10, y: 4, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1216851467 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1216851465} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1216851468 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1216851465} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &1216851469 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1216851465} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1221740163 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1221740164} + - component: {fileID: 1221740167} + - component: {fileID: 1221740166} + - component: {fileID: 1221740165} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &1221740164 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1221740163} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1, y: 10, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1221740165 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1221740163} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1221740166 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1221740163} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &1221740167 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1221740163} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1242589959 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1242589960} + - component: {fileID: 1242589963} + - component: {fileID: 1242589962} + - component: {fileID: 1242589961} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &1242589960 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1242589959} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 6, y: 4, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1242589961 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1242589959} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1242589962 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1242589959} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &1242589963 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1242589959} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1272156139 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1272156140} + - component: {fileID: 1272156143} + - component: {fileID: 1272156142} + - component: {fileID: 1272156141} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &1272156140 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1272156139} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 4, y: 10, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1272156141 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1272156139} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1272156142 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1272156139} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &1272156143 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1272156139} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1325788234 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1325788235} + - component: {fileID: 1325788238} + - component: {fileID: 1325788237} + - component: {fileID: 1325788236} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &1325788235 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1325788234} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1325788236 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1325788234} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1325788237 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1325788234} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &1325788238 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1325788234} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1368580200 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1368580201} + - component: {fileID: 1368580203} + - component: {fileID: 1368580202} + m_Layer: 5 + m_Name: Panel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1368580201 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1368580200} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 661122671} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -35.4881, y: 210.3463} + m_SizeDelta: {x: -257.144, y: -557.6124} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1368580202 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1368580200} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.027411906, g: 0.6235748, b: 0.8301887, a: 0.392} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1368580203 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1368580200} + m_CullTransparentMesh: 1 +--- !u!1 &1410838484 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1410838485} + - component: {fileID: 1410838488} + - component: {fileID: 1410838487} + - component: {fileID: 1410838486} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &1410838485 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1410838484} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 7, y: 10, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1410838486 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1410838484} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1410838487 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1410838484} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &1410838488 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1410838484} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1424275101 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1424275102} + - component: {fileID: 1424275105} + - component: {fileID: 1424275104} + - component: {fileID: 1424275103} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &1424275102 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1424275101} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 7, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1424275103 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1424275101} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1424275104 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1424275101} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &1424275105 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1424275101} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1437788393 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1437788394} + - component: {fileID: 1437788397} + - component: {fileID: 1437788396} + - component: {fileID: 1437788395} + m_Layer: 5 + m_Name: Refresh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1437788394 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1437788393} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 887063940} + m_Father: {fileID: 661122671} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 277.8918, y: 209.45105} + m_SizeDelta: {x: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1437788395 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1437788393} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1437788396} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 661122672} + m_TargetAssemblyTypeName: UIServerBroweser, Assembly-CSharp + m_MethodName: Refresh + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1437788396 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1437788393} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1437788397 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1437788393} + m_CullTransparentMesh: 1 +--- !u!1 &1510403469 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1510403470} + - component: {fileID: 1510403473} + - component: {fileID: 1510403472} + - component: {fileID: 1510403471} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &1510403470 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1510403469} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 12, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1510403471 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1510403469} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1510403472 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1510403469} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &1510403473 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1510403469} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1522045065 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1522045066} + - component: {fileID: 1522045069} + - component: {fileID: 1522045068} + - component: {fileID: 1522045067} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &1522045066 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1522045065} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 4, y: 8, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1522045067 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1522045065} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1522045068 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1522045065} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &1522045069 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1522045065} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1551902396 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1551902397} + - component: {fileID: 1551902400} + - component: {fileID: 1551902399} + - component: {fileID: 1551902398} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &1551902397 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1551902396} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 12, y: 9, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1551902398 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1551902396} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1551902399 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1551902396} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &1551902400 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1551902396} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1586661105 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1586661106} + - component: {fileID: 1586661109} + - component: {fileID: 1586661108} + - component: {fileID: 1586661107} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &1586661106 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1586661105} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2, y: 10, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1586661107 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1586661105} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1586661108 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1586661105} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &1586661109 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1586661105} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1708548011 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1708548012} + - component: {fileID: 1708548015} + - component: {fileID: 1708548014} + - component: {fileID: 1708548013} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &1708548012 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1708548011} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1708548013 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1708548011} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1708548014 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1708548011} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &1708548015 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1708548011} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1729693363 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1729693364} + - component: {fileID: 1729693367} + - component: {fileID: 1729693366} + - component: {fileID: 1729693365} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &1729693364 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1729693363} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 8, y: 10, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1729693365 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1729693363} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1729693366 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1729693363} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &1729693367 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1729693363} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1774824411 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1774824412} + - component: {fileID: 1774824415} + - component: {fileID: 1774824414} + - component: {fileID: 1774824413} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &1774824412 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1774824411} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 8, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1774824413 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1774824411} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1774824414 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1774824411} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &1774824415 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1774824411} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1775640075 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1775640076} + - component: {fileID: 1775640079} + - component: {fileID: 1775640078} + - component: {fileID: 1775640077} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &1775640076 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1775640075} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3, y: 10, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1775640077 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1775640075} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1775640078 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1775640075} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &1775640079 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1775640075} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1808097955 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1808097956} + - component: {fileID: 1808097959} + - component: {fileID: 1808097958} + - component: {fileID: 1808097957} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &1808097956 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1808097955} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 5, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1808097957 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1808097955} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1808097958 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1808097955} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &1808097959 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1808097955} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1826512933 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1826512934} + - component: {fileID: 1826512937} + - component: {fileID: 1826512936} + - component: {fileID: 1826512935} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &1826512934 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1826512933} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 6, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1826512935 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1826512933} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1826512936 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1826512933} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &1826512937 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1826512933} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1829029131 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1829029132} + - component: {fileID: 1829029135} + - component: {fileID: 1829029134} + - component: {fileID: 1829029133} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &1829029132 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1829029131} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1829029133 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1829029131} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1829029134 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1829029131} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &1829029135 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1829029131} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1832118240 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1832118243} + - component: {fileID: 1832118242} + - component: {fileID: 1832118241} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1832118241 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1832118240} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SendPointerHoverToParent: 1 + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &1832118242 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1832118240} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!4 &1832118243 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1832118240} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -597.1264, y: -300, z: 0} + m_LocalScale: {x: 1.1494253, y: 1.1494253, z: 1.1494253} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 661122671} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1834640850 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1834640851} + - component: {fileID: 1834640854} + - component: {fileID: 1834640853} + - component: {fileID: 1834640852} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &1834640851 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1834640850} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 5, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1834640852 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1834640850} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1834640853 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1834640850} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &1834640854 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1834640850} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1890548280 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1890548281} + - component: {fileID: 1890548284} + - component: {fileID: 1890548283} + - component: {fileID: 1890548282} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &1890548281 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1890548280} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 4, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1890548282 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1890548280} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1890548283 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1890548280} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &1890548284 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1890548280} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1906446016 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1906446017} + - component: {fileID: 1906446020} + - component: {fileID: 1906446019} + - component: {fileID: 1906446018} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &1906446017 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1906446016} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 9, y: 10, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1906446018 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1906446016} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1906446019 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1906446016} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &1906446020 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1906446016} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1928099083 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1928099084} + - component: {fileID: 1928099087} + - component: {fileID: 1928099086} + - component: {fileID: 1928099085} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &1928099084 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1928099083} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 6, y: 8, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1928099085 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1928099083} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1928099086 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1928099083} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &1928099087 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1928099083} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1975733547 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1975733548} + - component: {fileID: 1975733551} + - component: {fileID: 1975733550} + - component: {fileID: 1975733549} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &1975733548 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1975733547} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1975733549 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1975733547} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1975733550 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1975733547} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &1975733551 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1975733547} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1982083709 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1982083712} + - component: {fileID: 1982083711} + - component: {fileID: 1982083710} + 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 &1982083710 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1982083709} + m_Enabled: 0 +--- !u!20 &1982083711 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1982083709} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.101960786, g: 0.101960786, b: 0.101960786, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + 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 &1982083712 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1982083709} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 6, y: 5.14, z: -12.45} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2026368628 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2026368629} + - component: {fileID: 2026368632} + - component: {fileID: 2026368631} + - component: {fileID: 2026368630} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &2026368629 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2026368628} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 5, y: 10, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &2026368630 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2026368628} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &2026368631 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2026368628} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &2026368632 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2026368628} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &2071271439 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2071271440} + - component: {fileID: 2071271442} + - component: {fileID: 2071271441} + m_Layer: 5 + m_Name: Text (Legacy) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2071271440 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2071271439} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 661122671} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -33.617035, y: 208.96263} + m_SizeDelta: {x: 774.1497, y: 23.9777} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2071271441 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2071271439} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 21 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: LAN Server Browser +--- !u!222 &2071271442 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2071271439} + m_CullTransparentMesh: 1 +--- !u!1 &2119753786 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2119753787} + - component: {fileID: 2119753790} + - component: {fileID: 2119753789} + - component: {fileID: 2119753788} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &2119753787 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2119753786} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 4, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &2119753788 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2119753786} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &2119753789 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2119753786} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &2119753790 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2119753786} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &2130135211 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2130135212} + - component: {fileID: 2130135215} + - component: {fileID: 2130135214} + - component: {fileID: 2130135213} + m_Layer: 0 + m_Name: UndestroyableBlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!4 &2130135212 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2130135211} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 12, y: 4, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 748809041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &2130135213 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2130135211} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: dbf18d3dbd43b0b40a1d1ea1d07fc815, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &2130135214 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2130135211} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &2130135215 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2130135211} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 0.2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 1982083712} + - {fileID: 942276775} + - {fileID: 114935793} + - {fileID: 661122671} + - {fileID: 748809041} diff --git a/Samples~/Bomberman/Scenes/BombermanLAN.unity.meta b/Samples~/Bomberman/Scenes/BombermanLAN.unity.meta new file mode 100644 index 0000000..7c58ff9 --- /dev/null +++ b/Samples~/Bomberman/Scenes/BombermanLAN.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 21b4b7891c3358345a538f0ff74d8b18 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Bomberman/Scripts.meta b/Samples~/Bomberman/Scripts.meta new file mode 100644 index 0000000..70574c3 --- /dev/null +++ b/Samples~/Bomberman/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3bf933d73d888354cbdd0524d97baeb2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Bomberman/Scripts/Block.cs b/Samples~/Bomberman/Scripts/Block.cs new file mode 100644 index 0000000..dd2a7d5 --- /dev/null +++ b/Samples~/Bomberman/Scripts/Block.cs @@ -0,0 +1,25 @@ +using UnityEngine; +using Netick; +using Netick.Unity; + +namespace Netick.Samples.Bomberman +{ + public class Block : NetworkBehaviour + { + // Networked properties + [Networked] + public bool Visible { get; set; } = true; + + [OnChanged(nameof(Visible))] + private void OnVisibleChanged(OnChangedData onChangedData) + { + // for visual components, don't use "enabled" property when you want to disable/enable it, instead use SetEnabled(). + // -- GetComponent().enabled = Visible; #### Not like this. + + GetComponent().SetEnabled(Sandbox, Visible); // #### Like this. + + GetComponent().enabled = Visible; + } + } +} + diff --git a/Samples~/Bomberman/Scripts/Block.cs.meta b/Samples~/Bomberman/Scripts/Block.cs.meta new file mode 100644 index 0000000..f6bf42e --- /dev/null +++ b/Samples~/Bomberman/Scripts/Block.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a9a2540dae5c3e2479c6e165f43a834d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Bomberman/Scripts/Bomb.cs b/Samples~/Bomberman/Scripts/Bomb.cs new file mode 100644 index 0000000..ab8eca1 --- /dev/null +++ b/Samples~/Bomberman/Scripts/Bomb.cs @@ -0,0 +1,87 @@ +using UnityEngine; +using Netick; +using Netick.Unity; + +namespace Netick.Samples.Bomberman +{ + + public class Bomb : NetworkBehaviour + { + public GameObject ExplosionPrefab; + + public BombermanController Bomber; + public float ExplosionDelay = 3.0f; + + private readonly Vector3[] _directionsAroundBomb = new Vector3[4] { Vector3.right, Vector3.left, Vector3.up, Vector3.down }; + + public override void NetworkStart() + { + Bomber?.SpawnedBombs.Add(this); + } + + public override void NetworkDestroy() + { + Bomber?.SpawnedBombs.Remove(this); + + // spawn explosion + if (ExplosionPrefab != null) + Instantiate(ExplosionPrefab, transform.position, Quaternion.identity); + } + + public override void NetworkReset() + { + GetComponent().enabled = true; + } + + public override void NetworkFixedUpdate() + { + if (Sandbox.TickToTime(Sandbox.Tick - Object.SpawnTick) >= ExplosionDelay) + Explode(); + } + + private void Explode() + { + // hide bomb after delay + GetComponent().enabled = false; + + // dealing damage is done on the server only + if (IsServer) + DamageTargetsAroundBomb(transform.position); + + // only the server can destroy the bomb or the client but only when the Id of the bomb is -1, meaning it was a spawn-predicted but never was confirmed by the server + if (IsServer || Id == -1) + Sandbox.Destroy(Object); + } + + + private void DamageTargetsAroundBomb(Vector3 pos) + { + // Find all objects around the bomb position + // Note: Causes GC + foreach (var dir in _directionsAroundBomb) + { + var hits = Physics.RaycastAll(pos, dir, 1f); + + foreach (var hit in hits) + Damage(hit.collider.gameObject); + } + } + + private void Damage(GameObject target) + { + var obj = target.GetComponent(); + var block = target.GetComponent(); + var bomber = target.GetComponent(); + + // make sure the object is not null and in the same sandbox as the bomb + if (obj == null || obj.Sandbox != Sandbox) + return; + + if (block != null) + block.Visible = false; + + if (bomber != null) + bomber.Die(); + } + } +} \ No newline at end of file diff --git a/Samples~/Bomberman/Scripts/Bomb.cs.meta b/Samples~/Bomberman/Scripts/Bomb.cs.meta new file mode 100644 index 0000000..c640e44 --- /dev/null +++ b/Samples~/Bomberman/Scripts/Bomb.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 205eff2d73df3c14882a59d0377eebb7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 10 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Bomberman/Scripts/BombermanController.cs b/Samples~/Bomberman/Scripts/BombermanController.cs new file mode 100644 index 0000000..b66f706 --- /dev/null +++ b/Samples~/Bomberman/Scripts/BombermanController.cs @@ -0,0 +1,137 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.UI; +using Netick; +using Netick.Unity; + +namespace Netick.Samples.Bomberman +{ + public class BombermanController : NetworkBehaviour + { + public List SpawnedBombs = new List(); + [HideInInspector] + public Vector3 SpawnPos; + [SerializeField] + private float _speed = 6.0f; + [SerializeField] + private float _speedBoostMultiplayer = 2f; + + + private GameObject _bombPrefab; + private CharacterController _CC; + + // Networked properties + [Networked] + public int Score { get; set; } = 0; + [Networked] + public bool Alive { get; set; } = true; + + [Networked(relevancy: Relevancy.InputSource)] + public int MaxBombs { get; set; } = 1; + [Networked(relevancy: Relevancy.InputSource)] + public float SpeedPowerUpTimer { get; set; } = 0; + [Networked(relevancy: Relevancy.InputSource)] + public float BombPowerUpTimer { get; set; } = 0; + + void Awake() + { + // We store the spawn pos so that we use it later during respawn + SpawnPos = transform.position; + _CC = GetComponent(); + } + + public override void NetworkStart() + { + _bombPrefab = Sandbox.GetPrefab("Bomb"); + } + + public override void OnInputSourceLeft() + { + Sandbox.GetComponent().KillPlayer(this); + // destroy the player object when its input source (controller player) leaves the game + Sandbox.Destroy(Object); + } + + public override void NetworkFixedUpdate() + { + if (!Alive) + return; + + if (FetchInput(out BombermanInput input)) + { + if (BombPowerUpTimer > 0) + BombPowerUpTimer -= Sandbox.FixedDeltaTime; + else + MaxBombs = 1; + + if (SpeedPowerUpTimer > 0) + SpeedPowerUpTimer -= Sandbox.FixedDeltaTime; + + var hasSpeedBoost = SpeedPowerUpTimer > 0; + var speed = hasSpeedBoost ? _speed * _speedBoostMultiplayer : _speed; + + _CC.Move(input.Movement * speed * Sandbox.FixedDeltaTime); + + // we make sure the z coord of the pos of the player is always zero + transform.position = new Vector3(transform.position.x, transform.position.y, 0f); + + if (IsServer && input.PlantBomb && SpawnedBombs.Count < MaxBombs) + { + // * round the bomb pos so that it snaps to the nearest square. + var bomb = Sandbox.NetworkInstantiate(_bombPrefab, Round(transform.position), Quaternion.identity).GetComponent(); + bomb.Bomber = this; + } + } + } + + public void ReceivePowerUp(PowerUpType type, float boostTime) + { + if (type == PowerUpType.IncreaseBombs) + { + SpeedPowerUpTimer += boostTime; + } + else if (type == PowerUpType.Speed) + { + BombPowerUpTimer += boostTime; + MaxBombs += 1; + } + } + + public void Die() + { + Alive = false; + Sandbox.GetComponent().KillPlayer(this); + } + + public void Respawn() + { + Alive = true; + Sandbox.GetComponent().RespawnPlayer(this); + + transform.position = SpawnPos; + + SpeedPowerUpTimer = 0; + BombPowerUpTimer = 0; + MaxBombs = 1; + } + + [OnChanged(nameof(Alive))] + private void OnAliveChanged(OnChangedData onChangedData) + { + // Based on state of Alive: + + // * Hide/show player object + GetComponentInChildren().SetEnabled(Sandbox,Alive); + + // * Enable/disable the CharacterController + _CC.enabled = Alive; + } + + public Vector3 Round(Vector3 vec) + { + return new Vector3(Mathf.Round(vec.x), Mathf.Round(vec.y), Mathf.Round(vec.z)); + } + + } +} \ No newline at end of file diff --git a/Samples~/Bomberman/Scripts/BombermanController.cs.meta b/Samples~/Bomberman/Scripts/BombermanController.cs.meta new file mode 100644 index 0000000..138231b --- /dev/null +++ b/Samples~/Bomberman/Scripts/BombermanController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0695901b53a12474ca18412bd5b6ac69 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Bomberman/Scripts/BombermanEventsHandler.cs b/Samples~/Bomberman/Scripts/BombermanEventsHandler.cs new file mode 100644 index 0000000..fb04b1b --- /dev/null +++ b/Samples~/Bomberman/Scripts/BombermanEventsHandler.cs @@ -0,0 +1,191 @@ +using System.Collections.Generic; +using UnityEngine; +using Netick; +using Netick.Unity; + +namespace Netick.Samples.Bomberman +{ + public class BombermanEventsHandler : NetworkEventsListener + { + + public List AlivePlayers = new List(); + public Vector3[] SpawnPositions = new Vector3[4] + { + new Vector3(11, 9, 0), + new Vector3(11, 1, 0), + new Vector3(1, 9, 0), + new Vector3(1, 1, 0) + }; + + private GameObject _playerPrefab; + private Queue _freePositions = new Queue(4); + + // ******************* Netick Callbacks ******************* + + // This is called on the server and the clients when Netick has started. + public override void OnStartup(NetworkSandbox sandbox) + { + _playerPrefab = sandbox.GetPrefab("Bomberman Player"); + sandbox.InitializePool(sandbox.GetPrefab("Bomb"), 5); + } + + // This is called to read inputs. + public override void OnInput(NetworkSandbox sandbox) + { + var input = sandbox.GetInput(); + + input.Movement = GetMovementDir(); + input.PlantBomb |= Input.GetKeyDown(KeyCode.Space); + sandbox.SetInput(input); + } + + // This is called on the server when a player has connected. + public override void OnPlayerConnected(NetworkSandbox sandbox, NetworkPlayer networkPlayer) + { + var player = sandbox.NetworkInstantiate(_playerPrefab, SpawnPositions[Sandbox.ConnectedPlayers.Count], Quaternion.identity, networkPlayer).GetComponent(); + networkPlayer.PlayerObject = player.gameObject; + AlivePlayers.Add(player); + } + + // This is called on the server when a client has disconnected. + public override void OnClientDisconnected(NetworkSandbox sandbox, NetworkConnection client, TransportDisconnectReason reason) + { + _freePositions.Enqueue(((GameObject)client.PlayerObject).GetComponent().SpawnPos); + } + + public override void OnConnectRequest(NetworkSandbox sandbox, NetworkConnectionRequest request) + { + if (_freePositions.Count < 1) + request.Refuse(); + } + + // This is called on the server and the clients when the scene has been loaded. + public override void OnSceneLoaded(NetworkSandbox sandbox) + { + if (sandbox.IsClient) + return; + + _freePositions.Clear(); + + for (int i = 0; i < 4; i++) + _freePositions.Enqueue(SpawnPositions[i]); + + RestartGame(); + } + + // ******************* ******************** + + public void RestartGame() + { + DestroyLevel(); + CreateNewLevel(); + + foreach (var player in Sandbox.ConnectedPlayers) + ((GameObject)player.PlayerObject).GetComponent().Respawn(); + } + + private void DestroyLevel() + { + var blocks = Sandbox.FindObjectsOfType(); + var bombs = Sandbox.FindObjectsOfType(); + + foreach (var block in blocks) + Sandbox.Destroy(block.Object); + foreach (var bomb in bombs) + Sandbox.Destroy(bomb.Object); + } + + + private void CreateNewLevel() + { + var blockPrefab = Sandbox.GetPrefab("DestroyableBlock"); + var powerUpPrefab = Sandbox.GetPrefab("Power Up"); + var numberOfBoosters = Random.Range(2, 4+1); + var takenPositions = new List(); + var maxX = 11; + var maxY = 9; + + for (int x = 1; x <= maxX; x++) + { + for (int y = 1; y <= maxY; y++) + { + var spawn = Random.value > 0.5f; + var pos = new Vector3(x, y); + + if (spawn && IsValidPos(pos)) + { + Sandbox.NetworkInstantiate(blockPrefab, pos, Quaternion.identity); + takenPositions.Add(pos); + } + } + } + + while (numberOfBoosters > 0) + { + var randomPos = new Vector3(Random.Range(1, 11+1), Random.Range(1, 9+1), 0); + var type = (Random.value > 0.5f) ? PowerUpType.Speed : PowerUpType.IncreaseBombs; + + if (!takenPositions.Contains(randomPos) && IsValidPos(randomPos)) + { + var booster = Sandbox.NetworkInstantiate(powerUpPrefab, randomPos, Quaternion.identity).GetComponent(); + booster.Type = type; + numberOfBoosters--; + } + } + } + + private bool IsValidPos(Vector3 pos) + { + // if the pos is the position of a static block, we ignore it + if ((pos.x >= 2 && pos.x <= 10) && (pos.y >= 2 && pos.y <= 8)) + if (pos.x % 2 == 0 && pos.y % 2 == 0) + return false; + + // if the pos is near the position of the spawn locations of the players, we ignore it + foreach (var loc in SpawnPositions) + { + if (pos == loc) + return false; + if (pos == loc + Vector3.up || pos == loc + Vector3.down) + return false; + if (pos == loc + Vector3.left || pos == loc + Vector3.right) + return false; + } + + return true; + } + + public void KillPlayer(BombermanController bomber) + { + AlivePlayers.Remove(bomber); + + if (AlivePlayers.Count == 1) + { + AlivePlayers[0].Score++; + RestartGame(); + } + + else if (AlivePlayers.Count < 1) + RestartGame(); + } + public void RespawnPlayer(BombermanController bomber) + { + if (!AlivePlayers.Contains(bomber)) + AlivePlayers.Add(bomber); + } + + private Vector2 GetMovementDir() + { + if (Input.GetKey(KeyCode.W)) + return Vector2.up; + else if (Input.GetKey(KeyCode.D)) + return Vector2.right; + else if (Input.GetKey(KeyCode.S)) + return Vector2.down; + else if (Input.GetKey(KeyCode.A)) + return Vector2.left; + else + return Vector2.zero; + } + } +} \ No newline at end of file diff --git a/Samples~/Bomberman/Scripts/BombermanEventsHandler.cs.meta b/Samples~/Bomberman/Scripts/BombermanEventsHandler.cs.meta new file mode 100644 index 0000000..737f893 --- /dev/null +++ b/Samples~/Bomberman/Scripts/BombermanEventsHandler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a132672521c94b04d9660a22f195ad7e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Bomberman/Scripts/BombermanInput.cs b/Samples~/Bomberman/Scripts/BombermanInput.cs new file mode 100644 index 0000000..d3b8db0 --- /dev/null +++ b/Samples~/Bomberman/Scripts/BombermanInput.cs @@ -0,0 +1,12 @@ +using UnityEngine; +using Netick; +using Netick.Unity; + +namespace Netick.Samples.Bomberman +{ + public struct BombermanInput : INetworkInput + { + public Vector2 Movement; + public NetworkBool PlantBomb; + } +} \ No newline at end of file diff --git a/Samples~/Bomberman/Scripts/BombermanInput.cs.meta b/Samples~/Bomberman/Scripts/BombermanInput.cs.meta new file mode 100644 index 0000000..419147a --- /dev/null +++ b/Samples~/Bomberman/Scripts/BombermanInput.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1eba0815da5ffc341be9fb61d878ae59 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Bomberman/Scripts/PowerUp.cs b/Samples~/Bomberman/Scripts/PowerUp.cs new file mode 100644 index 0000000..2791107 --- /dev/null +++ b/Samples~/Bomberman/Scripts/PowerUp.cs @@ -0,0 +1,54 @@ +using UnityEngine; +using Netick; +using Netick.Unity; + +namespace Netick.Samples.Bomberman +{ + public enum PowerUpType + { + Speed, + IncreaseBombs + } + + public class PowerUp : NetworkBehaviour + { + public float PowerUpTime = 35; + private Material _mat; + + // Networked properties + [Networked] + public PowerUpType Type { get; set; } + + private void Awake() + { + _mat = GetComponentInChildren().material; + } + + private void Update() + { + if (Type == PowerUpType.IncreaseBombs) + _mat.color = GetColor(Color.green); + else + _mat.color = GetColor(Color.blue); + } + + private Color GetColor(Color color) + { + return Color.Lerp(color, color * 0.5f, Mathf.InverseLerp(-1f, 1f, Mathf.Sin(15f * Time.time))); + } + + public void OnTriggerEnter(Collider other) + { + if (Sandbox == null) + return; + + var player = other.gameObject.GetComponent(); + + if (Sandbox.IsServer) + { + player.ReceivePowerUp(Type, PowerUpTime); + Sandbox.Destroy(Object); + } + } + } +} diff --git a/Samples~/Bomberman/Scripts/PowerUp.cs.meta b/Samples~/Bomberman/Scripts/PowerUp.cs.meta new file mode 100644 index 0000000..a14fd3a --- /dev/null +++ b/Samples~/Bomberman/Scripts/PowerUp.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f52db60e2b6aada409a755973bc842b6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Bomberman/Scripts/UI.meta b/Samples~/Bomberman/Scripts/UI.meta new file mode 100644 index 0000000..ce73e0a --- /dev/null +++ b/Samples~/Bomberman/Scripts/UI.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e81ae9cba80f10c4183a913765574781 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Bomberman/Scripts/UI/UIServerBroweser.cs b/Samples~/Bomberman/Scripts/UI/UIServerBroweser.cs new file mode 100644 index 0000000..0d81fd3 --- /dev/null +++ b/Samples~/Bomberman/Scripts/UI/UIServerBroweser.cs @@ -0,0 +1,49 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using Netick; +using Netick.Unity; +public class UIServerBroweser : NetworkEventsListener +{ + [SerializeField] + private GameObject _UIServerElementPrefab; + [SerializeField] + private Vector3 _startPosition; + [SerializeField] + private float _stepSize = 50; + + [SerializeField] + private List _servers = new List(); + + public void Refresh() + { + Sandbox?.RefreshMatchList(); + } + + public override void OnStartup(NetworkSandbox sandbox) + { + if (sandbox.IsServer) + Destroy(gameObject); + } + + public override void OnConnectedToServer(NetworkSandbox sandbox, NetworkConnection server) + { + Destroy(gameObject); + } + + public override void OnMatchListUpdate(NetworkSandbox sandbox, List sessions) + { + foreach (var server in _servers) + Destroy(server); + + _servers.Clear(); + + for (int i = 0; i < sessions.Count; i++) + { + var session = sessions[i]; + var newElement = Instantiate(_UIServerElementPrefab, gameObject.transform).GetComponent(); + newElement.Init(Sandbox,session.Name, session.IP, session.Port, _startPosition - (Vector3.up * i * _stepSize)); + _servers.Add(newElement.gameObject); + } + } +} diff --git a/Samples~/Bomberman/Scripts/UI/UIServerBroweser.cs.meta b/Samples~/Bomberman/Scripts/UI/UIServerBroweser.cs.meta new file mode 100644 index 0000000..a84a32f --- /dev/null +++ b/Samples~/Bomberman/Scripts/UI/UIServerBroweser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f8e8276de5223424c801fbb31d5ccbf9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/Bomberman/Scripts/UI/UIServerElement.cs b/Samples~/Bomberman/Scripts/UI/UIServerElement.cs new file mode 100644 index 0000000..5847480 --- /dev/null +++ b/Samples~/Bomberman/Scripts/UI/UIServerElement.cs @@ -0,0 +1,39 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.UI; +using Netick; +using Netick.Unity; + +public class UIServerElement : MonoBehaviour +{ + [SerializeField] + private Text _nameText; + + [SerializeField] + private Text _ipText; + + [SerializeField] + private string _ip; + [SerializeField] + private int _Port; + + private NetworkSandbox _sandbox; + + public void Init(NetworkSandbox sandbox, string name, string ip, int port, Vector3 position) + { + _sandbox = sandbox; + + _ip = ip; + _Port = port; + _nameText.text = name; + _ipText.text = ip; + GetComponent().anchoredPosition3D = position; + + } + + public void Connect() + { + _sandbox.Connect(_Port, _ip); + } +} diff --git a/Samples~/Bomberman/Scripts/UI/UIServerElement.cs.meta b/Samples~/Bomberman/Scripts/UI/UIServerElement.cs.meta new file mode 100644 index 0000000..8d68bf7 --- /dev/null +++ b/Samples~/Bomberman/Scripts/UI/UIServerElement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 742d47201bd4e0e47b3460de2b0f17c4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/First Person Shooter.meta b/Samples~/First Person Shooter.meta new file mode 100644 index 0000000..24c04c7 --- /dev/null +++ b/Samples~/First Person Shooter.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c85461ccd444a2a4bbd09bed1ae7f5cc +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/First Person Shooter/FPS Scene Terrain.asset b/Samples~/First Person Shooter/FPS Scene Terrain.asset new file mode 100644 index 0000000000000000000000000000000000000000..746f1f5d4998f7b044f0e0e5af42c4f08a97d9cb GIT binary patch literal 557092 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 z≫v%mRo96b8`DI#mKTzytmY3*ba^0QCeHH+tX~4G*aOGuk|9)c~u}171K4bU)|0 z6sjAkS2}^b>Qq0?b&9u+5n~SW5nFkZ4_FZO0jdsIMZutW6d?Aw8Bs?y!P4ZM z`REY14=ykqxrOKz& z{WpQTX!C!?e{26w!l5?9Ykm%rUBOSf1aF$1Or#ph>G$zbld=A7c)lCP`iqhEzeXi~ zBuxAktjvYQdkhP#1J3V^<&Pr9FLKwrKVt1?-D|GrCGk>v_ju{O4BmZQ8F}j-FO`?f zOYC{xP4}{U#{Jd(8E>%OUFLqvS5M%3401nrKfxDtb>9a`*nFX_`vzX&Rs2FzJVQf} zLIYkmGFL-#h+24w^7w%Qpn>%GfGe;C+nr^w0mGe-Q3*BYH#76@11Jly7(gl@ z{sCgB((@T@wFf)C-h(olWAM#R}mJ#Znl zjeh)Xub?t3NoE;%08N?RjHZ7v7-xYLgH-^@cOIRet%H?e5`nnd))oqjd*Fi z2fRF9LGNj=v{%7m`^{Vkw*{kT4_sV$BctyPYd`4D0LrO2~UB_Si!dGu`*MJ

+ /// Accept connection and get new NetPeer as result + /// + /// Connected NetPeer + public NetPeer Accept() + { + if (!TryActivate()) + return null; + Result = ConnectionRequestResult.Accept; + return _listener.OnConnectionSolved(this, null, 0, 0); + } + + public void Reject(byte[] rejectData, int start, int length, bool force) + { + if (!TryActivate()) + return; + Result = force ? ConnectionRequestResult.RejectForce : ConnectionRequestResult.Reject; + _listener.OnConnectionSolved(this, rejectData, start, length); + } + + public void Reject(byte[] rejectData, int start, int length) + { + Reject(rejectData, start, length, false); + } + + + public void RejectForce(byte[] rejectData, int start, int length) + { + Reject(rejectData, start, length, true); + } + + public void RejectForce() + { + Reject(null, 0, 0, true); + } + + public void RejectForce(byte[] rejectData) + { + Reject(rejectData, 0, rejectData.Length, true); + } + + public void RejectForce(NetDataWriter rejectData) + { + Reject(rejectData.Data, 0, rejectData.Length, true); + } + + public void Reject() + { + Reject(null, 0, 0, false); + } + + public void Reject(byte[] rejectData) + { + Reject(rejectData, 0, rejectData.Length, false); + } + + public void Reject(NetDataWriter rejectData) + { + Reject(rejectData.Data, 0, rejectData.Length, false); + } + } +} diff --git a/Transport/LiteNetLib Transport/LiteNetLib/ConnectionRequest.cs.meta b/Transport/LiteNetLib Transport/LiteNetLib/ConnectionRequest.cs.meta new file mode 100644 index 0000000..93e9f4d --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/ConnectionRequest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7c8834fc3ea90184badbfaecd769db0b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Transport/LiteNetLib Transport/LiteNetLib/INetEventListener.cs b/Transport/LiteNetLib Transport/LiteNetLib/INetEventListener.cs new file mode 100644 index 0000000..13d8852 --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/INetEventListener.cs @@ -0,0 +1,272 @@ +using System.Net; +using System.Net.Sockets; +using LiteNetLib.Utils; + +namespace LiteNetLib +{ + /// + /// Type of message that you receive in OnNetworkReceiveUnconnected event + /// + public enum UnconnectedMessageType + { + BasicMessage, + Broadcast + } + + /// + /// Disconnect reason that you receive in OnPeerDisconnected event + /// + public enum DisconnectReason + { + ConnectionFailed, + Timeout, + HostUnreachable, + NetworkUnreachable, + RemoteConnectionClose, + DisconnectPeerCalled, + ConnectionRejected, + InvalidProtocol, + UnknownHost, + Reconnect, + PeerToPeerConnection, + PeerNotFound + } + + /// + /// Additional information about disconnection + /// + public struct DisconnectInfo + { + /// + /// Additional info why peer disconnected + /// + public DisconnectReason Reason; + + /// + /// Error code (if reason is SocketSendError or SocketReceiveError) + /// + public SocketError SocketErrorCode; + + /// + /// Additional data that can be accessed (only if reason is RemoteConnectionClose) + /// + public NetPacketReader AdditionalData; + } + + public interface INetEventListener + { + /// + /// New remote peer connected to host, or client connected to remote host + /// + /// Connected peer object + void OnPeerConnected(NetPeer peer); + + /// + /// Peer disconnected + /// + /// disconnected peer + /// additional info about reason, errorCode or data received with disconnect message + void OnPeerDisconnected(NetPeer peer, DisconnectInfo disconnectInfo); + + /// + /// Network error (on send or receive) + /// + /// From endPoint (can be null) + /// Socket error + void OnNetworkError(IPEndPoint endPoint, SocketError socketError); + + /// + /// Received some data + /// + /// From peer + /// DataReader containing all received data + /// Number of channel at which packet arrived + /// Type of received packet + void OnNetworkReceive(NetPeer peer, NetPacketReader reader, byte channelNumber, DeliveryMethod deliveryMethod); + + /// + /// Received unconnected message + /// + /// From address (IP and Port) + /// Message data + /// Message type (simple, discovery request or response) + void OnNetworkReceiveUnconnected(IPEndPoint remoteEndPoint, NetPacketReader reader, UnconnectedMessageType messageType); + + /// + /// Latency information updated + /// + /// Peer with updated latency + /// latency value in milliseconds + void OnNetworkLatencyUpdate(NetPeer peer, int latency); + + /// + /// On peer connection requested + /// + /// Request information (EndPoint, internal id, additional data) + void OnConnectionRequest(ConnectionRequest request); + } + + public interface IDeliveryEventListener + { + /// + /// On reliable message delivered + /// + /// + /// + void OnMessageDelivered(NetPeer peer, object userData); + } + + public interface INtpEventListener + { + /// + /// Ntp response + /// + /// + void OnNtpResponse(NtpPacket packet); + } + + public interface IPeerAddressChangedListener + { + /// + /// Called when peer address changed (when AllowPeerAddressChange is enabled) + /// + /// Peer that changed address (with new address) + /// previous IP + void OnPeerAddressChanged(NetPeer peer, IPEndPoint previousAddress); + } + + public class EventBasedNetListener : INetEventListener, IDeliveryEventListener, INtpEventListener, IPeerAddressChangedListener + { + public delegate void OnPeerConnected(NetPeer peer); + public delegate void OnPeerDisconnected(NetPeer peer, DisconnectInfo disconnectInfo); + public delegate void OnNetworkError(IPEndPoint endPoint, SocketError socketError); + public delegate void OnNetworkReceive(NetPeer peer, NetPacketReader reader, byte channel, DeliveryMethod deliveryMethod); + public delegate void OnNetworkReceiveUnconnected(IPEndPoint remoteEndPoint, NetPacketReader reader, UnconnectedMessageType messageType); + public delegate void OnNetworkLatencyUpdate(NetPeer peer, int latency); + public delegate void OnConnectionRequest(ConnectionRequest request); + public delegate void OnDeliveryEvent(NetPeer peer, object userData); + public delegate void OnNtpResponseEvent(NtpPacket packet); + public delegate void OnPeerAddressChangedEvent(NetPeer peer, IPEndPoint previousAddress); + + public event OnPeerConnected PeerConnectedEvent; + public event OnPeerDisconnected PeerDisconnectedEvent; + public event OnNetworkError NetworkErrorEvent; + public event OnNetworkReceive NetworkReceiveEvent; + public event OnNetworkReceiveUnconnected NetworkReceiveUnconnectedEvent; + public event OnNetworkLatencyUpdate NetworkLatencyUpdateEvent; + public event OnConnectionRequest ConnectionRequestEvent; + public event OnDeliveryEvent DeliveryEvent; + public event OnNtpResponseEvent NtpResponseEvent; + public event OnPeerAddressChangedEvent PeerAddressChangedEvent; + + public void ClearPeerConnectedEvent() + { + PeerConnectedEvent = null; + } + + public void ClearPeerDisconnectedEvent() + { + PeerDisconnectedEvent = null; + } + + public void ClearNetworkErrorEvent() + { + NetworkErrorEvent = null; + } + + public void ClearNetworkReceiveEvent() + { + NetworkReceiveEvent = null; + } + + public void ClearNetworkReceiveUnconnectedEvent() + { + NetworkReceiveUnconnectedEvent = null; + } + + public void ClearNetworkLatencyUpdateEvent() + { + NetworkLatencyUpdateEvent = null; + } + + public void ClearConnectionRequestEvent() + { + ConnectionRequestEvent = null; + } + + public void ClearDeliveryEvent() + { + DeliveryEvent = null; + } + + public void ClearNtpResponseEvent() + { + NtpResponseEvent = null; + } + + public void ClearPeerAddressChangedEvent() + { + PeerAddressChangedEvent = null; + } + + void INetEventListener.OnPeerConnected(NetPeer peer) + { + if (PeerConnectedEvent != null) + PeerConnectedEvent(peer); + } + + void INetEventListener.OnPeerDisconnected(NetPeer peer, DisconnectInfo disconnectInfo) + { + if (PeerDisconnectedEvent != null) + PeerDisconnectedEvent(peer, disconnectInfo); + } + + void INetEventListener.OnNetworkError(IPEndPoint endPoint, SocketError socketErrorCode) + { + if (NetworkErrorEvent != null) + NetworkErrorEvent(endPoint, socketErrorCode); + } + + void INetEventListener.OnNetworkReceive(NetPeer peer, NetPacketReader reader, byte channelNumber, DeliveryMethod deliveryMethod) + { + if (NetworkReceiveEvent != null) + NetworkReceiveEvent(peer, reader, channelNumber, deliveryMethod); + } + + void INetEventListener.OnNetworkReceiveUnconnected(IPEndPoint remoteEndPoint, NetPacketReader reader, UnconnectedMessageType messageType) + { + if (NetworkReceiveUnconnectedEvent != null) + NetworkReceiveUnconnectedEvent(remoteEndPoint, reader, messageType); + } + + void INetEventListener.OnNetworkLatencyUpdate(NetPeer peer, int latency) + { + if (NetworkLatencyUpdateEvent != null) + NetworkLatencyUpdateEvent(peer, latency); + } + + void INetEventListener.OnConnectionRequest(ConnectionRequest request) + { + if (ConnectionRequestEvent != null) + ConnectionRequestEvent(request); + } + + void IDeliveryEventListener.OnMessageDelivered(NetPeer peer, object userData) + { + if (DeliveryEvent != null) + DeliveryEvent(peer, userData); + } + + void INtpEventListener.OnNtpResponse(NtpPacket packet) + { + if (NtpResponseEvent != null) + NtpResponseEvent(packet); + } + + void IPeerAddressChangedListener.OnPeerAddressChanged(NetPeer peer, IPEndPoint previousAddress) + { + if (PeerAddressChangedEvent != null) + PeerAddressChangedEvent(peer, previousAddress); + } + } +} diff --git a/Transport/LiteNetLib Transport/LiteNetLib/INetEventListener.cs.meta b/Transport/LiteNetLib Transport/LiteNetLib/INetEventListener.cs.meta new file mode 100644 index 0000000..9f7e38b --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/INetEventListener.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 35d960e405f680e4b8289d6a6b836799 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Transport/LiteNetLib Transport/LiteNetLib/InternalPackets.cs b/Transport/LiteNetLib Transport/LiteNetLib/InternalPackets.cs new file mode 100644 index 0000000..2eb09fe --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/InternalPackets.cs @@ -0,0 +1,133 @@ +using System; +using System.Net; +using LiteNetLib.Utils; + +namespace LiteNetLib +{ + internal sealed class NetConnectRequestPacket + { + public const int HeaderSize = 18; + public readonly long ConnectionTime; + public byte ConnectionNumber; + public readonly byte[] TargetAddress; + public readonly NetDataReader Data; + public readonly int PeerId; + + private NetConnectRequestPacket(long connectionTime, byte connectionNumber, int localId, byte[] targetAddress, NetDataReader data) + { + ConnectionTime = connectionTime; + ConnectionNumber = connectionNumber; + TargetAddress = targetAddress; + Data = data; + PeerId = localId; + } + + public static int GetProtocolId(NetPacket packet) + { + return BitConverter.ToInt32(packet.RawData, 1); + } + + public static NetConnectRequestPacket FromData(NetPacket packet) + { + if (packet.ConnectionNumber >= NetConstants.MaxConnectionNumber) + return null; + + //Getting connection time for peer + long connectionTime = BitConverter.ToInt64(packet.RawData, 5); + + //Get peer id + int peerId = BitConverter.ToInt32(packet.RawData, 13); + + //Get target address + int addrSize = packet.RawData[HeaderSize-1]; + if (addrSize != 16 && addrSize != 28) + return null; + byte[] addressBytes = new byte[addrSize]; + Buffer.BlockCopy(packet.RawData, HeaderSize, addressBytes, 0, addrSize); + + // Read data and create request + var reader = new NetDataReader(null, 0, 0); + if (packet.Size > HeaderSize+addrSize) + reader.SetSource(packet.RawData, HeaderSize + addrSize, packet.Size); + + return new NetConnectRequestPacket(connectionTime, packet.ConnectionNumber, peerId, addressBytes, reader); + } + + public static NetPacket Make(NetDataWriter connectData, SocketAddress addressBytes, long connectTime, int localId) + { + //Make initial packet + var packet = new NetPacket(PacketProperty.ConnectRequest, connectData.Length+addressBytes.Size); + + //Add data + FastBitConverter.GetBytes(packet.RawData, 1, NetConstants.ProtocolId); + FastBitConverter.GetBytes(packet.RawData, 5, connectTime); + FastBitConverter.GetBytes(packet.RawData, 13, localId); + packet.RawData[HeaderSize-1] = (byte)addressBytes.Size; + for (int i = 0; i < addressBytes.Size; i++) + packet.RawData[HeaderSize + i] = addressBytes[i]; + Buffer.BlockCopy(connectData.Data, 0, packet.RawData, HeaderSize + addressBytes.Size, connectData.Length); + return packet; + } + } + + internal sealed class NetConnectAcceptPacket + { + public const int Size = 15; + public readonly long ConnectionTime; + public readonly byte ConnectionNumber; + public readonly int PeerId; + public readonly bool PeerNetworkChanged; + + private NetConnectAcceptPacket(long connectionTime, byte connectionNumber, int peerId, bool peerNetworkChanged) + { + ConnectionTime = connectionTime; + ConnectionNumber = connectionNumber; + PeerId = peerId; + PeerNetworkChanged = peerNetworkChanged; + } + + public static NetConnectAcceptPacket FromData(NetPacket packet) + { + if (packet.Size != Size) + return null; + + long connectionId = BitConverter.ToInt64(packet.RawData, 1); + + //check connect num + byte connectionNumber = packet.RawData[9]; + if (connectionNumber >= NetConstants.MaxConnectionNumber) + return null; + + //check reused flag + byte isReused = packet.RawData[10]; + if (isReused > 1) + return null; + + //get remote peer id + int peerId = BitConverter.ToInt32(packet.RawData, 11); + if (peerId < 0) + return null; + + return new NetConnectAcceptPacket(connectionId, connectionNumber, peerId, isReused == 1); + } + + public static NetPacket Make(long connectTime, byte connectNum, int localPeerId) + { + var packet = new NetPacket(PacketProperty.ConnectAccept, 0); + FastBitConverter.GetBytes(packet.RawData, 1, connectTime); + packet.RawData[9] = connectNum; + FastBitConverter.GetBytes(packet.RawData, 11, localPeerId); + return packet; + } + + public static NetPacket MakeNetworkChanged(NetPeer peer) + { + var packet = new NetPacket(PacketProperty.PeerNotFound, Size-1); + FastBitConverter.GetBytes(packet.RawData, 1, peer.ConnectTime); + packet.RawData[9] = peer.ConnectionNum; + packet.RawData[10] = 1; + FastBitConverter.GetBytes(packet.RawData, 11, peer.RemoteId); + return packet; + } + } +} \ No newline at end of file diff --git a/Transport/LiteNetLib Transport/LiteNetLib/InternalPackets.cs.meta b/Transport/LiteNetLib Transport/LiteNetLib/InternalPackets.cs.meta new file mode 100644 index 0000000..e8e932f --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/InternalPackets.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e0e98393e9ec208478ca501f1ac9cce3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Transport/LiteNetLib Transport/LiteNetLib/Layers.meta b/Transport/LiteNetLib Transport/LiteNetLib/Layers.meta new file mode 100644 index 0000000..8a2342a --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/Layers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 09eca1ec4a1ba4b4bb571718bd1a1519 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Transport/LiteNetLib Transport/LiteNetLib/Layers/Crc32cLayer.cs b/Transport/LiteNetLib Transport/LiteNetLib/Layers/Crc32cLayer.cs new file mode 100644 index 0000000..3ee97d6 --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/Layers/Crc32cLayer.cs @@ -0,0 +1,41 @@ +using LiteNetLib.Utils; +using System; +using System.Net; + +namespace LiteNetLib.Layers +{ + public sealed class Crc32cLayer : PacketLayerBase + { + public Crc32cLayer() : base(CRC32C.ChecksumSize) + { + + } + + public override void ProcessInboundPacket(ref IPEndPoint endPoint, ref byte[] data, ref int offset, ref int length) + { + if (length < NetConstants.HeaderSize + CRC32C.ChecksumSize) + { + NetDebug.WriteError("[NM] DataReceived size: bad!"); + //Set length to 0 to have netManager drop the packet. + length = 0; + return; + } + + int checksumPoint = length - CRC32C.ChecksumSize; + if (CRC32C.Compute(data, offset, checksumPoint) != BitConverter.ToUInt32(data, checksumPoint)) + { + NetDebug.Write("[NM] DataReceived checksum: bad!"); + //Set length to 0 to have netManager drop the packet. + length = 0; + return; + } + length -= CRC32C.ChecksumSize; + } + + public override void ProcessOutBoundPacket(ref IPEndPoint endPoint, ref byte[] data, ref int offset, ref int length) + { + FastBitConverter.GetBytes(data, length, CRC32C.Compute(data, offset, length)); + length += CRC32C.ChecksumSize; + } + } +} diff --git a/Transport/LiteNetLib Transport/LiteNetLib/Layers/Crc32cLayer.cs.meta b/Transport/LiteNetLib Transport/LiteNetLib/Layers/Crc32cLayer.cs.meta new file mode 100644 index 0000000..00457e5 --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/Layers/Crc32cLayer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d6e636fb040ae9f4298fce9d2a0e208f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Transport/LiteNetLib Transport/LiteNetLib/Layers/PacketLayerBase.cs b/Transport/LiteNetLib Transport/LiteNetLib/Layers/PacketLayerBase.cs new file mode 100644 index 0000000..b3d9b3a --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/Layers/PacketLayerBase.cs @@ -0,0 +1,17 @@ +using System.Net; + +namespace LiteNetLib.Layers +{ + public abstract class PacketLayerBase + { + public readonly int ExtraPacketSizeForLayer; + + protected PacketLayerBase(int extraPacketSizeForLayer) + { + ExtraPacketSizeForLayer = extraPacketSizeForLayer; + } + + public abstract void ProcessInboundPacket(ref IPEndPoint endPoint, ref byte[] data, ref int offset, ref int length); + public abstract void ProcessOutBoundPacket(ref IPEndPoint endPoint, ref byte[] data, ref int offset, ref int length); + } +} diff --git a/Transport/LiteNetLib Transport/LiteNetLib/Layers/PacketLayerBase.cs.meta b/Transport/LiteNetLib Transport/LiteNetLib/Layers/PacketLayerBase.cs.meta new file mode 100644 index 0000000..a510354 --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/Layers/PacketLayerBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2bb25f5fc9603f14497f9bdd87162125 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Transport/LiteNetLib Transport/LiteNetLib/Layers/XorEncryptLayer.cs b/Transport/LiteNetLib Transport/LiteNetLib/Layers/XorEncryptLayer.cs new file mode 100644 index 0000000..9b67196 --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/Layers/XorEncryptLayer.cs @@ -0,0 +1,60 @@ +using System; +using System.Net; +using System.Text; + +namespace LiteNetLib.Layers +{ + public class XorEncryptLayer : PacketLayerBase + { + private byte[] _byteKey; + + public XorEncryptLayer() : base(0) + { + + } + + public XorEncryptLayer(byte[] key) : this() + { + SetKey(key); + } + + public XorEncryptLayer(string key) : this() + { + SetKey(key); + } + + public void SetKey(string key) + { + _byteKey = Encoding.UTF8.GetBytes(key); + } + + public void SetKey(byte[] key) + { + if (_byteKey == null || _byteKey.Length != key.Length) + _byteKey = new byte[key.Length]; + Buffer.BlockCopy(key, 0, _byteKey, 0, key.Length); + } + + public override void ProcessInboundPacket(ref IPEndPoint endPoint, ref byte[] data, ref int offset, ref int length) + { + if (_byteKey == null) + return; + var cur = offset; + for (var i = 0; i < length; i++, cur++) + { + data[cur] = (byte)(data[cur] ^ _byteKey[i % _byteKey.Length]); + } + } + + public override void ProcessOutBoundPacket(ref IPEndPoint endPoint, ref byte[] data, ref int offset, ref int length) + { + if (_byteKey == null) + return; + var cur = offset; + for (var i = 0; i < length; i++, cur++) + { + data[cur] = (byte)(data[cur] ^ _byteKey[i % _byteKey.Length]); + } + } + } +} diff --git a/Transport/LiteNetLib Transport/LiteNetLib/Layers/XorEncryptLayer.cs.meta b/Transport/LiteNetLib Transport/LiteNetLib/Layers/XorEncryptLayer.cs.meta new file mode 100644 index 0000000..93d3b66 --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/Layers/XorEncryptLayer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 25402be4bd2613142815528b859dc57c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Transport/LiteNetLib Transport/LiteNetLib/NatPunchModule.cs b/Transport/LiteNetLib Transport/LiteNetLib/NatPunchModule.cs new file mode 100644 index 0000000..2310452 --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/NatPunchModule.cs @@ -0,0 +1,258 @@ +using System.Collections.Concurrent; +using System.Net; +using LiteNetLib.Utils; + +namespace LiteNetLib +{ + public enum NatAddressType + { + Internal, + External + } + + public interface INatPunchListener + { + void OnNatIntroductionRequest(IPEndPoint localEndPoint, IPEndPoint remoteEndPoint, string token); + void OnNatIntroductionSuccess(IPEndPoint targetEndPoint, NatAddressType type, string token); + } + + public class EventBasedNatPunchListener : INatPunchListener + { + public delegate void OnNatIntroductionRequest(IPEndPoint localEndPoint, IPEndPoint remoteEndPoint, string token); + public delegate void OnNatIntroductionSuccess(IPEndPoint targetEndPoint, NatAddressType type, string token); + + public event OnNatIntroductionRequest NatIntroductionRequest; + public event OnNatIntroductionSuccess NatIntroductionSuccess; + + void INatPunchListener.OnNatIntroductionRequest(IPEndPoint localEndPoint, IPEndPoint remoteEndPoint, string token) + { + if(NatIntroductionRequest != null) + NatIntroductionRequest(localEndPoint, remoteEndPoint, token); + } + + void INatPunchListener.OnNatIntroductionSuccess(IPEndPoint targetEndPoint, NatAddressType type, string token) + { + if (NatIntroductionSuccess != null) + NatIntroductionSuccess(targetEndPoint, type, token); + } + } + + /// + /// Module for UDP NAT Hole punching operations. Can be accessed from NetManager + /// + public sealed class NatPunchModule + { + struct RequestEventData + { + public IPEndPoint LocalEndPoint; + public IPEndPoint RemoteEndPoint; + public string Token; + } + + struct SuccessEventData + { + public IPEndPoint TargetEndPoint; + public NatAddressType Type; + public string Token; + } + + class NatIntroduceRequestPacket + { + public IPEndPoint Internal { get; set; } + public string Token { get; set; } + } + + class NatIntroduceResponsePacket + { + public IPEndPoint Internal { get; set; } + public IPEndPoint External { get; set; } + public string Token { get; set; } + } + + class NatPunchPacket + { + public string Token { get; set; } + public bool IsExternal { get; set; } + } + + private readonly NetManager _socket; + private readonly ConcurrentQueue _requestEvents = new ConcurrentQueue(); + private readonly ConcurrentQueue _successEvents = new ConcurrentQueue(); + private readonly NetDataReader _cacheReader = new NetDataReader(); + private readonly NetDataWriter _cacheWriter = new NetDataWriter(); + private readonly NetPacketProcessor _netPacketProcessor = new NetPacketProcessor(MaxTokenLength); + private INatPunchListener _natPunchListener; + public const int MaxTokenLength = 256; + + /// + /// Events automatically will be called without PollEvents method from another thread + /// + public bool UnsyncedEvents = false; + + internal NatPunchModule(NetManager socket) + { + _socket = socket; + _netPacketProcessor.SubscribeReusable(OnNatIntroductionResponse); + _netPacketProcessor.SubscribeReusable(OnNatIntroductionRequest); + _netPacketProcessor.SubscribeReusable(OnNatPunch); + } + + internal void ProcessMessage(IPEndPoint senderEndPoint, NetPacket packet) + { + lock (_cacheReader) + { + _cacheReader.SetSource(packet.RawData, NetConstants.HeaderSize, packet.Size); + _netPacketProcessor.ReadAllPackets(_cacheReader, senderEndPoint); + } + } + + public void Init(INatPunchListener listener) + { + _natPunchListener = listener; + } + + private void Send(T packet, IPEndPoint target) where T : class, new() + { + _cacheWriter.Reset(); + _cacheWriter.Put((byte)PacketProperty.NatMessage); + _netPacketProcessor.Write(_cacheWriter, packet); + _socket.SendRaw(_cacheWriter.Data, 0, _cacheWriter.Length, target); + } + + public void NatIntroduce( + IPEndPoint hostInternal, + IPEndPoint hostExternal, + IPEndPoint clientInternal, + IPEndPoint clientExternal, + string additionalInfo) + { + var req = new NatIntroduceResponsePacket + { + Token = additionalInfo + }; + + //First packet (server) send to client + req.Internal = hostInternal; + req.External = hostExternal; + Send(req, clientExternal); + + //Second packet (client) send to server + req.Internal = clientInternal; + req.External = clientExternal; + Send(req, hostExternal); + } + + public void PollEvents() + { + if (UnsyncedEvents) + return; + + if (_natPunchListener == null || (_successEvents.IsEmpty && _requestEvents.IsEmpty)) + return; + + while (_successEvents.TryDequeue(out var evt)) + { + _natPunchListener.OnNatIntroductionSuccess( + evt.TargetEndPoint, + evt.Type, + evt.Token); + } + + while (_requestEvents.TryDequeue(out var evt)) + { + _natPunchListener.OnNatIntroductionRequest(evt.LocalEndPoint, evt.RemoteEndPoint, evt.Token); + } + } + + public void SendNatIntroduceRequest(string host, int port, string additionalInfo) + { + SendNatIntroduceRequest(NetUtils.MakeEndPoint(host, port), additionalInfo); + } + + public void SendNatIntroduceRequest(IPEndPoint masterServerEndPoint, string additionalInfo) + { + //prepare outgoing data + string networkIp = NetUtils.GetLocalIp(LocalAddrType.IPv4); + if (string.IsNullOrEmpty(networkIp)) + { + networkIp = NetUtils.GetLocalIp(LocalAddrType.IPv6); + } + + Send( + new NatIntroduceRequestPacket + { + Internal = NetUtils.MakeEndPoint(networkIp, _socket.LocalPort), + Token = additionalInfo + }, + masterServerEndPoint); + } + + //We got request and must introduce + private void OnNatIntroductionRequest(NatIntroduceRequestPacket req, IPEndPoint senderEndPoint) + { + if (UnsyncedEvents) + { + _natPunchListener.OnNatIntroductionRequest( + req.Internal, + senderEndPoint, + req.Token); + } + else + { + _requestEvents.Enqueue(new RequestEventData + { + LocalEndPoint = req.Internal, + RemoteEndPoint = senderEndPoint, + Token = req.Token + }); + } + } + + //We got introduce and must punch + private void OnNatIntroductionResponse(NatIntroduceResponsePacket req) + { + NetDebug.Write(NetLogLevel.Trace, "[NAT] introduction received"); + + // send internal punch + var punchPacket = new NatPunchPacket {Token = req.Token}; + Send(punchPacket, req.Internal); + NetDebug.Write(NetLogLevel.Trace, $"[NAT] internal punch sent to {req.Internal}"); + + // hack for some routers + _socket.Ttl = 2; + _socket.SendRaw(new[] { (byte)PacketProperty.Empty }, 0, 1, req.External); + + // send external punch + _socket.Ttl = NetConstants.SocketTTL; + punchPacket.IsExternal = true; + Send(punchPacket, req.External); + NetDebug.Write(NetLogLevel.Trace, $"[NAT] external punch sent to {req.External}"); + } + + //We got punch and can connect + private void OnNatPunch(NatPunchPacket req, IPEndPoint senderEndPoint) + { + //Read info + NetDebug.Write(NetLogLevel.Trace, $"[NAT] punch received from {senderEndPoint} - additional info: {req.Token}"); + + //Release punch success to client; enabling him to Connect() to Sender if token is ok + if(UnsyncedEvents) + { + _natPunchListener.OnNatIntroductionSuccess( + senderEndPoint, + req.IsExternal ? NatAddressType.External : NatAddressType.Internal, + req.Token + ); + } + else + { + _successEvents.Enqueue(new SuccessEventData + { + TargetEndPoint = senderEndPoint, + Type = req.IsExternal ? NatAddressType.External : NatAddressType.Internal, + Token = req.Token + }); + } + } + } +} diff --git a/Transport/LiteNetLib Transport/LiteNetLib/NatPunchModule.cs.meta b/Transport/LiteNetLib Transport/LiteNetLib/NatPunchModule.cs.meta new file mode 100644 index 0000000..c3efeb7 --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/NatPunchModule.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3922a7026e6584b4bb7ea037a153894c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Transport/LiteNetLib Transport/LiteNetLib/NativeSocket.cs b/Transport/LiteNetLib Transport/LiteNetLib/NativeSocket.cs new file mode 100644 index 0000000..fc846c8 --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/NativeSocket.cs @@ -0,0 +1,301 @@ +using System; +using System.Collections.Generic; +using System.Net; +using System.Net.Sockets; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace LiteNetLib +{ + internal readonly struct NativeAddr : IEquatable + { + //common parts + private readonly long _part1; //family, port, etc + private readonly long _part2; + //ipv6 parts + private readonly long _part3; + private readonly int _part4; + + private readonly int _hash; + + public NativeAddr(byte[] address, int len) + { + _part1 = BitConverter.ToInt64(address, 0); + _part2 = BitConverter.ToInt64(address, 8); + if (len > 16) + { + _part3 = BitConverter.ToInt64(address, 16); + _part4 = BitConverter.ToInt32(address, 24); + } + else + { + _part3 = 0; + _part4 = 0; + } + _hash = (int)(_part1 >> 32) ^ (int)_part1 ^ + (int)(_part2 >> 32) ^ (int)_part2 ^ + (int)(_part3 >> 32) ^ (int)_part3 ^ + _part4; + } + + public override int GetHashCode() + { + return _hash; + } + + public bool Equals(NativeAddr other) + { + return _part1 == other._part1 && + _part2 == other._part2 && + _part3 == other._part3 && + _part4 == other._part4; + } + + public override bool Equals(object obj) + { + return obj is NativeAddr other && Equals(other); + } + + public static bool operator ==(NativeAddr left, NativeAddr right) + { + return left.Equals(right); + } + + public static bool operator !=(NativeAddr left, NativeAddr right) + { + return !left.Equals(right); + } + } + + internal class NativeEndPoint : IPEndPoint + { + public readonly byte[] NativeAddress; + + public NativeEndPoint(byte[] address) : base(IPAddress.Any, 0) + { + NativeAddress = new byte[address.Length]; + Buffer.BlockCopy(address, 0, NativeAddress, 0, address.Length); + + short family = (short)((address[1] << 8) | address[0]); + Port =(ushort)((address[2] << 8) | address[3]); + + if ((NativeSocket.UnixMode && family == NativeSocket.AF_INET6) || (!NativeSocket.UnixMode && (AddressFamily)family == AddressFamily.InterNetworkV6)) + { + uint scope = unchecked((uint)( + (address[27] << 24) + + (address[26] << 16) + + (address[25] << 8) + + (address[24]))); +#if NETCOREAPP || NETSTANDARD2_1 || NETSTANDARD2_1_OR_GREATER + Address = new IPAddress(new ReadOnlySpan(address, 8, 16), scope); +#else + byte[] addrBuffer = new byte[16]; + Buffer.BlockCopy(address, 8, addrBuffer, 0, 16); + Address = new IPAddress(addrBuffer, scope); +#endif + } + else //IPv4 + { + long ipv4Addr = unchecked((uint)((address[4] & 0x000000FF) | + (address[5] << 8 & 0x0000FF00) | + (address[6] << 16 & 0x00FF0000) | + (address[7] << 24))); + Address = new IPAddress(ipv4Addr); + } + } + } + + internal static class NativeSocket + { + static +#if LITENETLIB_UNSAFE + unsafe +#endif + class WinSock + { + private const string LibName = "ws2_32.dll"; + + [DllImport(LibName, SetLastError = true)] + public static extern int recvfrom( + IntPtr socketHandle, + [In, Out] byte[] pinnedBuffer, + [In] int len, + [In] SocketFlags socketFlags, + [Out] byte[] socketAddress, + [In, Out] ref int socketAddressSize); + + [DllImport(LibName, SetLastError = true)] + internal static extern int sendto( + IntPtr socketHandle, +#if LITENETLIB_UNSAFE + byte* pinnedBuffer, +#else + [In] byte[] pinnedBuffer, +#endif + [In] int len, + [In] SocketFlags socketFlags, + [In] byte[] socketAddress, + [In] int socketAddressSize); + } + + static +#if LITENETLIB_UNSAFE + unsafe +#endif + class UnixSock + { + private const string LibName = "libc"; + + [DllImport(LibName, SetLastError = true)] + public static extern int recvfrom( + IntPtr socketHandle, + [In, Out] byte[] pinnedBuffer, + [In] int len, + [In] SocketFlags socketFlags, + [Out] byte[] socketAddress, + [In, Out] ref int socketAddressSize); + + [DllImport(LibName, SetLastError = true)] + internal static extern int sendto( + IntPtr socketHandle, +#if LITENETLIB_UNSAFE + byte* pinnedBuffer, +#else + [In] byte[] pinnedBuffer, +#endif + [In] int len, + [In] SocketFlags socketFlags, + [In] byte[] socketAddress, + [In] int socketAddressSize); + } + + public static readonly bool IsSupported = false; + public static readonly bool UnixMode = false; + + public const int IPv4AddrSize = 16; + public const int IPv6AddrSize = 28; + public const int AF_INET = 2; + public const int AF_INET6 = 10; + + private static readonly Dictionary NativeErrorToSocketError = new Dictionary + { + { 13, SocketError.AccessDenied }, //EACCES + { 98, SocketError.AddressAlreadyInUse }, //EADDRINUSE + { 99, SocketError.AddressNotAvailable }, //EADDRNOTAVAIL + { 97, SocketError.AddressFamilyNotSupported }, //EAFNOSUPPORT + { 11, SocketError.WouldBlock }, //EAGAIN + { 114, SocketError.AlreadyInProgress }, //EALREADY + { 9, SocketError.OperationAborted }, //EBADF + { 125, SocketError.OperationAborted }, //ECANCELED + { 103, SocketError.ConnectionAborted }, //ECONNABORTED + { 111, SocketError.ConnectionRefused }, //ECONNREFUSED + { 104, SocketError.ConnectionReset }, //ECONNRESET + { 89, SocketError.DestinationAddressRequired }, //EDESTADDRREQ + { 14, SocketError.Fault }, //EFAULT + { 112, SocketError.HostDown }, //EHOSTDOWN + { 6, SocketError.HostNotFound }, //ENXIO + { 113, SocketError.HostUnreachable }, //EHOSTUNREACH + { 115, SocketError.InProgress }, //EINPROGRESS + { 4, SocketError.Interrupted }, //EINTR + { 22, SocketError.InvalidArgument }, //EINVAL + { 106, SocketError.IsConnected }, //EISCONN + { 24, SocketError.TooManyOpenSockets }, //EMFILE + { 90, SocketError.MessageSize }, //EMSGSIZE + { 100, SocketError.NetworkDown }, //ENETDOWN + { 102, SocketError.NetworkReset }, //ENETRESET + { 101, SocketError.NetworkUnreachable }, //ENETUNREACH + { 23, SocketError.TooManyOpenSockets }, //ENFILE + { 105, SocketError.NoBufferSpaceAvailable }, //ENOBUFS + { 61, SocketError.NoData }, //ENODATA + { 2, SocketError.AddressNotAvailable }, //ENOENT + { 92, SocketError.ProtocolOption }, //ENOPROTOOPT + { 107, SocketError.NotConnected }, //ENOTCONN + { 88, SocketError.NotSocket }, //ENOTSOCK + { 3440, SocketError.OperationNotSupported }, //ENOTSUP + { 1, SocketError.AccessDenied }, //EPERM + { 32, SocketError.Shutdown }, //EPIPE + { 96, SocketError.ProtocolFamilyNotSupported }, //EPFNOSUPPORT + { 93, SocketError.ProtocolNotSupported }, //EPROTONOSUPPORT + { 91, SocketError.ProtocolType }, //EPROTOTYPE + { 94, SocketError.SocketNotSupported }, //ESOCKTNOSUPPORT + { 108, SocketError.Disconnecting }, //ESHUTDOWN + { 110, SocketError.TimedOut }, //ETIMEDOUT + { 0, SocketError.Success } + }; + + static NativeSocket() + { + if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) + { + IsSupported = true; + UnixMode = true; + } + else if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + { + IsSupported = true; + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static int RecvFrom( + IntPtr socketHandle, + byte[] pinnedBuffer, + int len, + byte[] socketAddress, + ref int socketAddressSize) + { + return UnixMode + ? UnixSock.recvfrom(socketHandle, pinnedBuffer, len, 0, socketAddress, ref socketAddressSize) + : WinSock.recvfrom(socketHandle, pinnedBuffer, len, 0, socketAddress, ref socketAddressSize); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public +#if LITENETLIB_UNSAFE + unsafe +#endif + static int SendTo( + IntPtr socketHandle, +#if LITENETLIB_UNSAFE + byte* pinnedBuffer, +#else + byte[] pinnedBuffer, +#endif + int len, + byte[] socketAddress, + int socketAddressSize) + { + return UnixMode + ? UnixSock.sendto(socketHandle, pinnedBuffer, len, 0, socketAddress, socketAddressSize) + : WinSock.sendto(socketHandle, pinnedBuffer, len, 0, socketAddress, socketAddressSize); + } + + public static SocketError GetSocketError() + { + int error = Marshal.GetLastWin32Error(); + if (UnixMode) + return NativeErrorToSocketError.TryGetValue(error, out var err) + ? err + : SocketError.SocketError; + return (SocketError)error; + } + + public static SocketException GetSocketException() + { + int error = Marshal.GetLastWin32Error(); + if (UnixMode) + return NativeErrorToSocketError.TryGetValue(error, out var err) + ? new SocketException((int)err) + : new SocketException((int)SocketError.SocketError); + return new SocketException(error); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static short GetNativeAddressFamily(IPEndPoint remoteEndPoint) + { + return UnixMode + ? (short)(remoteEndPoint.AddressFamily == AddressFamily.InterNetwork ? AF_INET : AF_INET6) + : (short)remoteEndPoint.AddressFamily; + } + } +} diff --git a/Transport/LiteNetLib Transport/LiteNetLib/NativeSocket.cs.meta b/Transport/LiteNetLib Transport/LiteNetLib/NativeSocket.cs.meta new file mode 100644 index 0000000..183cf9b --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/NativeSocket.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9590e69ce1ea9f0448ff4ab0808fb55e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Transport/LiteNetLib Transport/LiteNetLib/NetConstants.cs b/Transport/LiteNetLib Transport/LiteNetLib/NetConstants.cs new file mode 100644 index 0000000..ca7dfbc --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/NetConstants.cs @@ -0,0 +1,75 @@ +namespace LiteNetLib +{ + /// + /// Sending method type + /// + public enum DeliveryMethod : byte + { + /// + /// Unreliable. Packets can be dropped, can be duplicated, can arrive without order. + /// + Unreliable = 4, + + /// + /// Reliable. Packets won't be dropped, won't be duplicated, can arrive without order. + /// + ReliableUnordered = 0, + + /// + /// Unreliable. Packets can be dropped, won't be duplicated, will arrive in order. + /// + Sequenced = 1, + + /// + /// Reliable and ordered. Packets won't be dropped, won't be duplicated, will arrive in order. + /// + ReliableOrdered = 2, + + /// + /// Reliable only last packet. Packets can be dropped (except the last one), won't be duplicated, will arrive in order. + /// Cannot be fragmented + /// + ReliableSequenced = 3 + } + + /// + /// Network constants. Can be tuned from sources for your purposes. + /// + public static class NetConstants + { + //can be tuned + public const int DefaultWindowSize = 64; + public const int SocketBufferSize = 1024 * 1024; //1mb + public const int SocketTTL = 255; + + public const int HeaderSize = 1; + public const int ChanneledHeaderSize = 4; + public const int FragmentHeaderSize = 6; + public const int FragmentedHeaderTotalSize = ChanneledHeaderSize + FragmentHeaderSize; + public const ushort MaxSequence = 32768; + public const ushort HalfMaxSequence = MaxSequence / 2; + + //protocol + internal const int ProtocolId = 13; + internal const int MaxUdpHeaderSize = 68; + internal const int ChannelTypeCount = 4; + + internal static readonly int[] PossibleMtu = + { + 576 - MaxUdpHeaderSize, //minimal (RFC 1191) + 1024, //most games standard + 1232 - MaxUdpHeaderSize, + 1460 - MaxUdpHeaderSize, //google cloud + 1472 - MaxUdpHeaderSize, //VPN + 1492 - MaxUdpHeaderSize, //Ethernet with LLC and SNAP, PPPoE (RFC 1042) + 1500 - MaxUdpHeaderSize //Ethernet II (RFC 1191) + }; + + //Max possible single packet size + public static readonly int MaxPacketSize = PossibleMtu[PossibleMtu.Length - 1]; + public static readonly int MaxUnreliableDataSize = MaxPacketSize - HeaderSize; + + //peer specific + public const byte MaxConnectionNumber = 4; + } +} diff --git a/Transport/LiteNetLib Transport/LiteNetLib/NetConstants.cs.meta b/Transport/LiteNetLib Transport/LiteNetLib/NetConstants.cs.meta new file mode 100644 index 0000000..e1bc07d --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/NetConstants.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d6dd87d091a1ad845bf2ff8b94e589cc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Transport/LiteNetLib Transport/LiteNetLib/NetDebug.cs b/Transport/LiteNetLib Transport/LiteNetLib/NetDebug.cs new file mode 100644 index 0000000..44cb6f3 --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/NetDebug.cs @@ -0,0 +1,92 @@ +using System; +using System.Diagnostics; + +namespace LiteNetLib +{ + public class InvalidPacketException : ArgumentException + { + public InvalidPacketException(string message) : base(message) + { + } + } + + public class TooBigPacketException : InvalidPacketException + { + public TooBigPacketException(string message) : base(message) + { + } + } + + public enum NetLogLevel + { + Warning, + Error, + Trace, + Info + } + + /// + /// Interface to implement for your own logger + /// + public interface INetLogger + { + void WriteNet(NetLogLevel level, string str, params object[] args); + } + + /// + /// Static class for defining your own LiteNetLib logger instead of Console.WriteLine + /// or Debug.Log if compiled with UNITY flag + /// + public static class NetDebug + { + public static INetLogger Logger = null; + private static readonly object DebugLogLock = new object(); + private static void WriteLogic(NetLogLevel logLevel, string str, params object[] args) + { + lock (DebugLogLock) + { + if (Logger == null) + { +#if UNITY_5_3_OR_NEWER + UnityEngine.Debug.Log(string.Format(str, args)); +#else + Console.WriteLine(str, args); +#endif + } + else + { + Logger.WriteNet(logLevel, str, args); + } + } + } + + [Conditional("DEBUG_MESSAGES")] + internal static void Write(string str) + { + WriteLogic(NetLogLevel.Trace, str); + } + + [Conditional("DEBUG_MESSAGES")] + internal static void Write(NetLogLevel level, string str) + { + WriteLogic(level, str); + } + + [Conditional("DEBUG_MESSAGES"), Conditional("DEBUG")] + internal static void WriteForce(string str) + { + WriteLogic(NetLogLevel.Trace, str); + } + + [Conditional("DEBUG_MESSAGES"), Conditional("DEBUG")] + internal static void WriteForce(NetLogLevel level, string str) + { + WriteLogic(level, str); + } + + internal static void WriteError(string str) + { + WriteLogic(NetLogLevel.Error, str); + } + } +} diff --git a/Transport/LiteNetLib Transport/LiteNetLib/NetDebug.cs.meta b/Transport/LiteNetLib Transport/LiteNetLib/NetDebug.cs.meta new file mode 100644 index 0000000..c5979e2 --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/NetDebug.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7248d233449a9334c84012cb0165dfcf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Transport/LiteNetLib Transport/LiteNetLib/NetManager.PacketPool.cs b/Transport/LiteNetLib Transport/LiteNetLib/NetManager.PacketPool.cs new file mode 100644 index 0000000..0831220 --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/NetManager.PacketPool.cs @@ -0,0 +1,82 @@ +using System; + +namespace LiteNetLib +{ + public partial class NetManager + { + private NetPacket _poolHead; + private int _poolCount; + private readonly object _poolLock = new object(); + + /// + /// Maximum packet pool size (increase if you have tons of packets sending) + /// + public int PacketPoolSize = 1000; + + public int PoolCount => _poolCount; + + private NetPacket PoolGetWithData(PacketProperty property, byte[] data, int start, int length) + { + int headerSize = NetPacket.GetHeaderSize(property); + NetPacket packet = PoolGetPacket(length + headerSize); + packet.Property = property; + Buffer.BlockCopy(data, start, packet.RawData, headerSize, length); + return packet; + } + + //Get packet with size + private NetPacket PoolGetWithProperty(PacketProperty property, int size) + { + NetPacket packet = PoolGetPacket(size + NetPacket.GetHeaderSize(property)); + packet.Property = property; + return packet; + } + + private NetPacket PoolGetWithProperty(PacketProperty property) + { + NetPacket packet = PoolGetPacket(NetPacket.GetHeaderSize(property)); + packet.Property = property; + return packet; + } + + internal NetPacket PoolGetPacket(int size) + { + if (size > NetConstants.MaxPacketSize) + return new NetPacket(size); + + NetPacket packet; + lock (_poolLock) + { + packet = _poolHead; + if (packet == null) + return new NetPacket(size); + + _poolHead = _poolHead.Next; + _poolCount--; + } + + packet.Size = size; + if (packet.RawData.Length < size) + packet.RawData = new byte[size]; + return packet; + } + + internal void PoolRecycle(NetPacket packet) + { + if (packet.RawData.Length > NetConstants.MaxPacketSize || _poolCount >= PacketPoolSize) + { + //Don't pool big packets. Save memory + return; + } + + //Clean fragmented flag + packet.RawData[0] = 0; + lock (_poolLock) + { + packet.Next = _poolHead; + _poolHead = packet; + _poolCount++; + } + } + } +} diff --git a/Transport/LiteNetLib Transport/LiteNetLib/NetManager.PacketPool.cs.meta b/Transport/LiteNetLib Transport/LiteNetLib/NetManager.PacketPool.cs.meta new file mode 100644 index 0000000..f2ca353 --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/NetManager.PacketPool.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 692101fdcfee9eb4d83ab7397d63a0d3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Transport/LiteNetLib Transport/LiteNetLib/NetManager.Socket.cs b/Transport/LiteNetLib Transport/LiteNetLib/NetManager.Socket.cs new file mode 100644 index 0000000..1adc2ac --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/NetManager.Socket.cs @@ -0,0 +1,728 @@ +using System.Runtime.InteropServices; +using System; +using System.Collections.Generic; +using System.Net; +using System.Net.Sockets; +using System.Threading; +using LiteNetLib.Utils; + +namespace LiteNetLib +{ + public partial class NetManager + { + private const int ReceivePollingTime = 500000; //0.5 second + + private Socket _udpSocketv4; + private Socket _udpSocketv6; + private Thread _receiveThread; + private IPEndPoint _bufferEndPointv4; + private IPEndPoint _bufferEndPointv6; +#if UNITY_2018_3_OR_NEWER + private PausedSocketFix _pausedSocketFix; +#endif + +#if !LITENETLIB_UNSAFE + [ThreadStatic] private static byte[] _sendToBuffer; +#endif + [ThreadStatic] private static byte[] _endPointBuffer; + + private readonly Dictionary _nativeAddrMap = new Dictionary(); + + private const int SioUdpConnreset = -1744830452; //SIO_UDP_CONNRESET = IOC_IN | IOC_VENDOR | 12 + private static readonly IPAddress MulticastAddressV6 = IPAddress.Parse("ff02::1"); + public static readonly bool IPv6Support; + + /// + /// Maximum packets count that will be processed in Manual PollEvents + /// + public int MaxPacketsReceivePerUpdate = 0; + + // special case in iOS (and possibly android that should be resolved in unity) + internal bool NotConnected; + + public short Ttl + { + get + { +#if UNITY_SWITCH + return 0; +#else + return _udpSocketv4.Ttl; +#endif + } + internal set + { +#if !UNITY_SWITCH + _udpSocketv4.Ttl = value; +#endif + } + } + + static NetManager() + { +#if DISABLE_IPV6 + IPv6Support = false; +#elif !UNITY_2019_1_OR_NEWER && !UNITY_2018_4_OR_NEWER && (!UNITY_EDITOR && ENABLE_IL2CPP) + string version = UnityEngine.Application.unityVersion; + IPv6Support = Socket.OSSupportsIPv6 && int.Parse(version.Remove(version.IndexOf('f')).Split('.')[2]) >= 6; +#else + IPv6Support = Socket.OSSupportsIPv6; +#endif + } + + private void RegisterEndPoint(IPEndPoint ep) + { + if (UseNativeSockets && ep is NativeEndPoint nep) + { + _nativeAddrMap.Add(new NativeAddr(nep.NativeAddress, nep.NativeAddress.Length), nep); + } + } + + private void UnregisterEndPoint(IPEndPoint ep) + { + if (UseNativeSockets && ep is NativeEndPoint nep) + { + var nativeAddr = new NativeAddr(nep.NativeAddress, nep.NativeAddress.Length); + _nativeAddrMap.Remove(nativeAddr); + } + } + + private bool ProcessError(SocketException ex) + { + switch (ex.SocketErrorCode) + { + case SocketError.NotConnected: + NotConnected = true; + return true; + case SocketError.Interrupted: + case SocketError.NotSocket: + case SocketError.OperationAborted: + return true; + case SocketError.ConnectionReset: + case SocketError.MessageSize: + case SocketError.TimedOut: + case SocketError.NetworkReset: + //NetDebug.Write($"[R]Ignored error: {(int)ex.SocketErrorCode} - {ex}"); + break; + default: + NetDebug.WriteError($"[R]Error code: {(int)ex.SocketErrorCode} - {ex}"); + CreateEvent(NetEvent.EType.Error, errorCode: ex.SocketErrorCode); + break; + } + return false; + } + + private void ManualReceive(Socket socket, EndPoint bufferEndPoint) + { + //Reading data + try + { + int packetsReceived = 0; + while (socket.Available > 0) + { + ReceiveFrom(socket, ref bufferEndPoint); + packetsReceived++; + if (packetsReceived == MaxPacketsReceivePerUpdate) + break; + } + } + catch (SocketException ex) + { + ProcessError(ex); + } + catch (ObjectDisposedException) + { + + } + catch (Exception e) + { + //protects socket receive thread + NetDebug.WriteError("[NM] SocketReceiveThread error: " + e ); + } + } + + private bool NativeReceiveFrom(ref NetPacket packet, IntPtr s, byte[] addrBuffer, int addrSize) + { + //Reading data + packet.Size = NativeSocket.RecvFrom(s, packet.RawData, NetConstants.MaxPacketSize, addrBuffer, ref addrSize); + if (packet.Size == 0) + return false; //socket closed + if (packet.Size == -1) + { + var errorCode = NativeSocket.GetSocketError(); + //Linux timeout EAGAIN + return errorCode == SocketError.WouldBlock || errorCode == SocketError.TimedOut || ProcessError(new SocketException((int)errorCode)) == false; + } + + var nativeAddr = new NativeAddr(addrBuffer, addrSize); + if (!_nativeAddrMap.TryGetValue(nativeAddr, out var endPoint)) + endPoint = new NativeEndPoint(addrBuffer); + + //All ok! + //NetDebug.WriteForce($"[R]Received data from {endPoint}, result: {packet.Size}"); + OnMessageReceived(packet, endPoint); + packet = PoolGetPacket(NetConstants.MaxPacketSize); + return true; + } + + private void NativeReceiveLogic() + { + IntPtr socketHandle4 = _udpSocketv4.Handle; + IntPtr socketHandle6 = _udpSocketv6?.Handle ?? IntPtr.Zero; + byte[] addrBuffer4 = new byte[NativeSocket.IPv4AddrSize]; + byte[] addrBuffer6 = new byte[NativeSocket.IPv6AddrSize]; + int addrSize4 = addrBuffer4.Length; + int addrSize6 = addrBuffer6.Length; + var selectReadList = new List(2); + var socketv4 = _udpSocketv4; + var socketV6 = _udpSocketv6; + var packet = PoolGetPacket(NetConstants.MaxPacketSize); + + while (IsRunning) + { + if (socketV6 == null) + { + if (NativeReceiveFrom(ref packet, socketHandle4, addrBuffer4, addrSize4) == false) + return; + continue; + } + bool messageReceived = false; + if (socketv4.Available != 0) + { + if (NativeReceiveFrom(ref packet, socketHandle4, addrBuffer4, addrSize4) == false) + return; + messageReceived = true; + } + if (socketV6.Available != 0) + { + if (NativeReceiveFrom(ref packet, socketHandle6, addrBuffer6, addrSize6) == false) + return; + messageReceived = true; + } + if (messageReceived) + continue; + selectReadList.Clear(); + selectReadList.Add(socketv4); + selectReadList.Add(socketV6); + try + { + Socket.Select(selectReadList, null, null, ReceivePollingTime); + } + catch (SocketException ex) + { + if (ProcessError(ex)) + return; + } + catch (ObjectDisposedException) + { + //socket closed + return; + } + catch (ThreadAbortException) + { + //thread closed + return; + } + catch (Exception e) + { + //protects socket receive thread + NetDebug.WriteError("[NM] SocketReceiveThread error: " + e ); + } + } + } + + private void ReceiveFrom(Socket s, ref EndPoint bufferEndPoint) + { + var packet = PoolGetPacket(NetConstants.MaxPacketSize); + packet.Size = s.ReceiveFrom(packet.RawData, 0, NetConstants.MaxPacketSize, SocketFlags.None, ref bufferEndPoint); + OnMessageReceived(packet, (IPEndPoint)bufferEndPoint); + } + + private void ReceiveLogic() + { + EndPoint bufferEndPoint4 = new IPEndPoint(IPAddress.Any, 0); + EndPoint bufferEndPoint6 = new IPEndPoint(IPAddress.IPv6Any, 0); + var selectReadList = new List(2); + var socketv4 = _udpSocketv4; + var socketV6 = _udpSocketv6; + + while (IsRunning) + { + //Reading data + try + { + if (socketV6 == null) + { + if (socketv4.Available == 0 && !socketv4.Poll(ReceivePollingTime, SelectMode.SelectRead)) + continue; + ReceiveFrom(socketv4, ref bufferEndPoint4); + } + else + { + bool messageReceived = false; + if (socketv4.Available != 0) + { + ReceiveFrom(socketv4, ref bufferEndPoint4); + messageReceived = true; + } + if (socketV6.Available != 0) + { + ReceiveFrom(socketV6, ref bufferEndPoint6); + messageReceived = true; + } + if (messageReceived) + continue; + + selectReadList.Clear(); + selectReadList.Add(socketv4); + selectReadList.Add(socketV6); + Socket.Select(selectReadList, null, null, ReceivePollingTime); + } + //NetDebug.Write(NetLogLevel.Trace, $"[R]Received data from {bufferEndPoint}, result: {packet.Size}"); + } + catch (SocketException ex) + { + if (ProcessError(ex)) + return; + } + catch (ObjectDisposedException) + { + //socket closed + return; + } + catch (ThreadAbortException) + { + //thread closed + return; + } + catch (Exception e) + { + //protects socket receive thread + NetDebug.WriteError("[NM] SocketReceiveThread error: " + e ); + } + } + } + + /// + /// Start logic thread and listening on selected port + /// + /// bind to specific ipv4 address + /// bind to specific ipv6 address + /// port to listen + /// mode of library + public bool Start(IPAddress addressIPv4, IPAddress addressIPv6, int port, bool manualMode) + { + if (IsRunning && NotConnected == false) + return false; + + NotConnected = false; + _manualMode = manualMode; + UseNativeSockets = UseNativeSockets && NativeSocket.IsSupported; + _udpSocketv4 = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); + if (!BindSocket(_udpSocketv4, new IPEndPoint(addressIPv4, port))) + return false; + + LocalPort = ((IPEndPoint) _udpSocketv4.LocalEndPoint).Port; + +#if UNITY_2018_3_OR_NEWER + if (_pausedSocketFix == null) + _pausedSocketFix = new PausedSocketFix(this, addressIPv4, addressIPv6, port, manualMode); +#endif + + IsRunning = true; + if (_manualMode) + { + _bufferEndPointv4 = new IPEndPoint(IPAddress.Any, 0); + } + + //Check IPv6 support + if (IPv6Support && IPv6Enabled) + { + _udpSocketv6 = new Socket(AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp); + //Use one port for two sockets + if (BindSocket(_udpSocketv6, new IPEndPoint(addressIPv6, LocalPort))) + { + if (_manualMode) + { + _bufferEndPointv6 = new IPEndPoint(IPAddress.IPv6Any, 0); + } + } + else + { + _udpSocketv6 = null; + } + } + + if (!manualMode) + { + ThreadStart ts = ReceiveLogic; + if (UseNativeSockets) + ts = NativeReceiveLogic; + _receiveThread = new Thread(ts) + { + Name = $"ReceiveThread({LocalPort})", + IsBackground = true + }; + _receiveThread.Start(); + if (_logicThread == null) + { + _logicThread = new Thread(UpdateLogic) { Name = "LogicThread", IsBackground = true }; + _logicThread.Start(); + } + } + + return true; + } + + private bool BindSocket(Socket socket, IPEndPoint ep) + { + //Setup socket + socket.ReceiveTimeout = 500; + socket.SendTimeout = 500; + socket.ReceiveBufferSize = NetConstants.SocketBufferSize; + socket.SendBufferSize = NetConstants.SocketBufferSize; + socket.Blocking = true; + + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + { + try + { + socket.IOControl(SioUdpConnreset, new byte[] {0}, null); + } + catch + { + //ignored + } + } + + try + { + socket.ExclusiveAddressUse = !ReuseAddress; + socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, ReuseAddress); + } + catch + { + //Unity with IL2CPP throws an exception here, it doesn't matter in most cases so just ignore it + } + if (ep.AddressFamily == AddressFamily.InterNetwork) + { + Ttl = NetConstants.SocketTTL; + + try { socket.EnableBroadcast = true; } + catch (SocketException e) + { + NetDebug.WriteError($"[B]Broadcast error: {e.SocketErrorCode}"); + } + + if (!RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) + { + try { socket.DontFragment = true; } + catch (SocketException e) + { + NetDebug.WriteError($"[B]DontFragment error: {e.SocketErrorCode}"); + } + } + } + //Bind + try + { + socket.Bind(ep); + NetDebug.Write(NetLogLevel.Trace, $"[B]Successfully binded to port: {((IPEndPoint)socket.LocalEndPoint).Port}, AF: {socket.AddressFamily}"); + + //join multicast + if (ep.AddressFamily == AddressFamily.InterNetworkV6) + { + try + { +#if !UNITY_2018_3_OR_NEWER + socket.SetSocketOption( + SocketOptionLevel.IPv6, + SocketOptionName.AddMembership, + new IPv6MulticastOption(MulticastAddressV6)); +#endif + } + catch (Exception) + { + // Unity3d throws exception - ignored + } + } + } + catch (SocketException bindException) + { + switch (bindException.SocketErrorCode) + { + //IPv6 bind fix + case SocketError.AddressAlreadyInUse: + if (socket.AddressFamily == AddressFamily.InterNetworkV6) + { + try + { + //Set IPv6Only + socket.DualMode = false; + socket.Bind(ep); + } + catch (SocketException ex) + { + //because its fixed in 2018_3 + NetDebug.WriteError($"[B]Bind exception: {ex}, errorCode: {ex.SocketErrorCode}"); + return false; + } + return true; + } + break; + //hack for iOS (Unity3D) + case SocketError.AddressFamilyNotSupported: + return true; + } + NetDebug.WriteError($"[B]Bind exception: {bindException}, errorCode: {bindException.SocketErrorCode}"); + return false; + } + return true; + } + + internal int SendRawAndRecycle(NetPacket packet, IPEndPoint remoteEndPoint) + { + int result = SendRaw(packet.RawData, 0, packet.Size, remoteEndPoint); + PoolRecycle(packet); + return result; + } + + internal int SendRaw(NetPacket packet, IPEndPoint remoteEndPoint) + { + return SendRaw(packet.RawData, 0, packet.Size, remoteEndPoint); + } + + internal int SendRaw(byte[] message, int start, int length, IPEndPoint remoteEndPoint) + { + if (!IsRunning) + return 0; + + NetPacket expandedPacket = null; + if (_extraPacketLayer != null) + { + expandedPacket = PoolGetPacket(length + _extraPacketLayer.ExtraPacketSizeForLayer); + Buffer.BlockCopy(message, start, expandedPacket.RawData, 0, length); + start = 0; + _extraPacketLayer.ProcessOutBoundPacket(ref remoteEndPoint, ref expandedPacket.RawData, ref start, ref length); + message = expandedPacket.RawData; + } + + var socket = _udpSocketv4; + if (remoteEndPoint.AddressFamily == AddressFamily.InterNetworkV6 && IPv6Support) + { + socket = _udpSocketv6; + if (socket == null) + return 0; + } + + int result; + try + { + if (UseNativeSockets) + { + byte[] socketAddress; + + if (remoteEndPoint is NativeEndPoint nep) + { + socketAddress = nep.NativeAddress; + } + else //Convert endpoint to raw + { + if (_endPointBuffer == null) + _endPointBuffer = new byte[NativeSocket.IPv6AddrSize]; + socketAddress = _endPointBuffer; + + bool ipv4 = remoteEndPoint.AddressFamily == AddressFamily.InterNetwork; + short addressFamily = NativeSocket.GetNativeAddressFamily(remoteEndPoint); + + socketAddress[0] = (byte) (addressFamily); + socketAddress[1] = (byte) (addressFamily >> 8); + socketAddress[2] = (byte) (remoteEndPoint.Port >> 8); + socketAddress[3] = (byte) (remoteEndPoint.Port); + + if (ipv4) + { +#pragma warning disable 618 + long addr = remoteEndPoint.Address.Address; +#pragma warning restore 618 + socketAddress[4] = (byte) (addr); + socketAddress[5] = (byte) (addr >> 8); + socketAddress[6] = (byte) (addr >> 16); + socketAddress[7] = (byte) (addr >> 24); + } + else + { +#if NETCOREAPP || NETSTANDARD2_1 || NETSTANDARD2_1_OR_GREATER + remoteEndPoint.Address.TryWriteBytes(new Span(socketAddress, 8, 16), out _); +#else + byte[] addrBytes = remoteEndPoint.Address.GetAddressBytes(); + Buffer.BlockCopy(addrBytes, 0, socketAddress, 8, 16); +#endif + } + } + +#if LITENETLIB_UNSAFE + unsafe + { + fixed (byte* dataWithOffset = &message[start]) + { + result = + NativeSocket.SendTo(socket.Handle, dataWithOffset, length, socketAddress, socketAddress.Length); + } + } +#else + if (start > 0) + { + if (_sendToBuffer == null) + _sendToBuffer = new byte[NetConstants.MaxPacketSize]; + Buffer.BlockCopy(message, start, _sendToBuffer, 0, length); + message = _sendToBuffer; + } + + result = NativeSocket.SendTo(socket.Handle, message, length, socketAddress, socketAddress.Length); +#endif + if (result == -1) + throw NativeSocket.GetSocketException(); + } + else + { + result = socket.SendTo(message, start, length, SocketFlags.None, remoteEndPoint); + } + //NetDebug.WriteForce("[S]Send packet to {0}, result: {1}", remoteEndPoint, result); + } + catch (SocketException ex) + { + switch (ex.SocketErrorCode) + { + case SocketError.NoBufferSpaceAvailable: + case SocketError.Interrupted: + return 0; + case SocketError.MessageSize: + NetDebug.Write(NetLogLevel.Trace, $"[SRD] 10040, datalen: {length}"); + return 0; + + case SocketError.HostUnreachable: + case SocketError.NetworkUnreachable: + if (DisconnectOnUnreachable && TryGetPeer(remoteEndPoint, out var fromPeer)) + { + DisconnectPeerForce( + fromPeer, + ex.SocketErrorCode == SocketError.HostUnreachable + ? DisconnectReason.HostUnreachable + : DisconnectReason.NetworkUnreachable, + ex.SocketErrorCode, + null); + } + + CreateEvent(NetEvent.EType.Error, remoteEndPoint: remoteEndPoint, errorCode: ex.SocketErrorCode); + return -1; + + default: + NetDebug.WriteError($"[S] {ex}"); + return -1; + } + } + catch (Exception ex) + { + NetDebug.WriteError($"[S] {ex}"); + return 0; + } + finally + { + if (expandedPacket != null) + { + PoolRecycle(expandedPacket); + } + } + + if (result <= 0) + return 0; + + if (EnableStatistics) + { + Statistics.IncrementPacketsSent(); + Statistics.AddBytesSent(length); + } + + return result; + } + + public bool SendBroadcast(NetDataWriter writer, int port) + { + return SendBroadcast(writer.Data, 0, writer.Length, port); + } + + public bool SendBroadcast(byte[] data, int port) + { + return SendBroadcast(data, 0, data.Length, port); + } + + public bool SendBroadcast(byte[] data, int start, int length, int port) + { + if (!IsRunning) + return false; + + NetPacket packet; + if (_extraPacketLayer != null) + { + var headerSize = NetPacket.GetHeaderSize(PacketProperty.Broadcast); + packet = PoolGetPacket(headerSize + length + _extraPacketLayer.ExtraPacketSizeForLayer); + packet.Property = PacketProperty.Broadcast; + Buffer.BlockCopy(data, start, packet.RawData, headerSize, length); + var checksumComputeStart = 0; + int preCrcLength = length + headerSize; + IPEndPoint emptyEp = null; + _extraPacketLayer.ProcessOutBoundPacket(ref emptyEp, ref packet.RawData, ref checksumComputeStart, ref preCrcLength); + } + else + { + packet = PoolGetWithData(PacketProperty.Broadcast, data, start, length); + } + + bool broadcastSuccess = false; + bool multicastSuccess = false; + try + { + broadcastSuccess = _udpSocketv4.SendTo( + packet.RawData, + 0, + packet.Size, + SocketFlags.None, + new IPEndPoint(IPAddress.Broadcast, port)) > 0; + + if (_udpSocketv6 != null) + { + multicastSuccess = _udpSocketv6.SendTo( + packet.RawData, + 0, + packet.Size, + SocketFlags.None, + new IPEndPoint(MulticastAddressV6, port)) > 0; + } + } + catch (Exception ex) + { + NetDebug.WriteError($"[S][MCAST] {ex}"); + return broadcastSuccess; + } + finally + { + PoolRecycle(packet); + } + + return broadcastSuccess || multicastSuccess; + } + + private void CloseSocket() + { + IsRunning = false; + _udpSocketv4?.Close(); + _udpSocketv6?.Close(); + _udpSocketv4 = null; + _udpSocketv6 = null; + if (_receiveThread != null && _receiveThread != Thread.CurrentThread) + _receiveThread.Join(); + _receiveThread = null; + } + } +} diff --git a/Transport/LiteNetLib Transport/LiteNetLib/NetManager.Socket.cs.meta b/Transport/LiteNetLib Transport/LiteNetLib/NetManager.Socket.cs.meta new file mode 100644 index 0000000..0835e5f --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/NetManager.Socket.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: df17cb0f44f9c5a4faa41f85cc643dd1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Transport/LiteNetLib Transport/LiteNetLib/NetManager.cs b/Transport/LiteNetLib Transport/LiteNetLib/NetManager.cs new file mode 100644 index 0000000..752dfb7 --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/NetManager.cs @@ -0,0 +1,1821 @@ +using System; +using System.Collections; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Diagnostics; +using System.Net; +using System.Net.Sockets; +using System.Threading; +using LiteNetLib.Layers; +using LiteNetLib.Utils; + +namespace LiteNetLib +{ + public sealed class NetPacketReader : NetDataReader + { + private NetPacket _packet; + private readonly NetManager _manager; + private readonly NetEvent _evt; + + internal NetPacketReader(NetManager manager, NetEvent evt) + { + _manager = manager; + _evt = evt; + } + + internal void SetSource(NetPacket packet, int headerSize) + { + if (packet == null) + return; + _packet = packet; + SetSource(packet.RawData, headerSize, packet.Size); + } + + internal void RecycleInternal() + { + Clear(); + if (_packet != null) + _manager.PoolRecycle(_packet); + _packet = null; + _manager.RecycleEvent(_evt); + } + + public void Recycle() + { + if (_manager.AutoRecycle) + return; + RecycleInternal(); + } + } + + internal sealed class NetEvent + { + public NetEvent Next; + + public enum EType + { + Connect, + Disconnect, + Receive, + ReceiveUnconnected, + Error, + ConnectionLatencyUpdated, + Broadcast, + ConnectionRequest, + MessageDelivered, + PeerAddressChanged + } + public EType Type; + + public NetPeer Peer; + public IPEndPoint RemoteEndPoint; + public object UserData; + public int Latency; + public SocketError ErrorCode; + public DisconnectReason DisconnectReason; + public ConnectionRequest ConnectionRequest; + public DeliveryMethod DeliveryMethod; + public byte ChannelNumber; + public readonly NetPacketReader DataReader; + + public NetEvent(NetManager manager) + { + DataReader = new NetPacketReader(manager, this); + } + } + + /// + /// Main class for all network operations. Can be used as client and/or server. + /// + public partial class NetManager : IEnumerable + { + private class IPEndPointComparer : IEqualityComparer + { + public bool Equals(IPEndPoint x, IPEndPoint y) + { + return x.Address.Equals(y.Address) && x.Port == y.Port; + } + + public int GetHashCode(IPEndPoint obj) + { + return obj.GetHashCode(); + } + } + + public struct NetPeerEnumerator : IEnumerator + { + private readonly NetPeer _initialPeer; + private NetPeer _p; + + public NetPeerEnumerator(NetPeer p) + { + _initialPeer = p; + _p = null; + } + + public void Dispose() + { + + } + + public bool MoveNext() + { + _p = _p == null ? _initialPeer : _p.NextPeer; + return _p != null; + } + + public void Reset() + { + throw new NotSupportedException(); + } + + public NetPeer Current => _p; + object IEnumerator.Current => _p; + } + +#if DEBUG + private struct IncomingData + { + public NetPacket Data; + public IPEndPoint EndPoint; + public DateTime TimeWhenGet; + } + private readonly List _pingSimulationList = new List(); + private readonly Random _randomGenerator = new Random(); + private const int MinLatencyThreshold = 5; +#endif + + private Thread _logicThread; + private bool _manualMode; + private readonly AutoResetEvent _updateTriggerEvent = new AutoResetEvent(true); + + private NetEvent _pendingEventHead; + private NetEvent _pendingEventTail; + + private NetEvent _netEventPoolHead; + private readonly INetEventListener _netEventListener; + private readonly IDeliveryEventListener _deliveryEventListener; + private readonly INtpEventListener _ntpEventListener; + private readonly IPeerAddressChangedListener _peerAddressChangedListener; + + private readonly Dictionary _peersDict = new Dictionary(new IPEndPointComparer()); + private readonly Dictionary _requestsDict = new Dictionary(new IPEndPointComparer()); + private readonly Dictionary _ntpRequests = new Dictionary(new IPEndPointComparer()); + private readonly ReaderWriterLockSlim _peersLock = new ReaderWriterLockSlim(LockRecursionPolicy.NoRecursion); + private volatile NetPeer _headPeer; + private int _connectedPeersCount; + private readonly List _connectedPeerListCache = new List(); + private NetPeer[] _peersArray = new NetPeer[32]; + private readonly PacketLayerBase _extraPacketLayer; + private int _lastPeerId; + private ConcurrentQueue _peerIds = new ConcurrentQueue(); + private byte _channelsCount = 1; + private readonly object _eventLock = new object(); + + //config section + /// + /// Enable messages receiving without connection. (with SendUnconnectedMessage method) + /// + public bool UnconnectedMessagesEnabled = false; + + /// + /// Enable nat punch messages + /// + public bool NatPunchEnabled = false; + + /// + /// Library logic update and send period in milliseconds + /// Lowest values in Windows doesn't change much because of Thread.Sleep precision + /// To more frequent sends (or sends tied to your game logic) use + /// + public int UpdateTime = 15; + + /// + /// Interval for latency detection and checking connection (in milliseconds) + /// + public int PingInterval = 1000; + + /// + /// If NetManager doesn't receive any packet from remote peer during this time (in milliseconds) then connection will be closed + /// (including library internal keepalive packets) + /// + public int DisconnectTimeout = 5000; + + /// + /// Simulate packet loss by dropping random amount of packets. (Works only in DEBUG mode) + /// + public bool SimulatePacketLoss = false; + + /// + /// Simulate latency by holding packets for random time. (Works only in DEBUG mode) + /// + public bool SimulateLatency = false; + + /// + /// Chance of packet loss when simulation enabled. value in percents (1 - 100). + /// + public int SimulationPacketLossChance = 10; + + /// + /// Minimum simulated latency (in milliseconds) + /// + public int SimulationMinLatency = 30; + + /// + /// Maximum simulated latency (in milliseconds) + /// + public int SimulationMaxLatency = 100; + + /// + /// Events automatically will be called without PollEvents method from another thread + /// + public bool UnsyncedEvents = false; + + /// + /// If true - receive event will be called from "receive" thread immediately otherwise on PollEvents call + /// + public bool UnsyncedReceiveEvent = false; + + /// + /// If true - delivery event will be called from "receive" thread immediately otherwise on PollEvents call + /// + public bool UnsyncedDeliveryEvent = false; + + /// + /// Allows receive broadcast packets + /// + public bool BroadcastReceiveEnabled = false; + + /// + /// Delay between initial connection attempts (in milliseconds) + /// + public int ReconnectDelay = 500; + + /// + /// Maximum connection attempts before client stops and call disconnect event. + /// + public int MaxConnectAttempts = 10; + + /// + /// Enables socket option "ReuseAddress" for specific purposes + /// + public bool ReuseAddress = false; + + /// + /// Statistics of all connections + /// + public readonly NetStatistics Statistics = new NetStatistics(); + + /// + /// Toggles the collection of network statistics for the instance and all known peers + /// + public bool EnableStatistics = false; + + /// + /// NatPunchModule for NAT hole punching operations + /// + public readonly NatPunchModule NatPunchModule; + + /// + /// Returns true if socket listening and update thread is running + /// + public bool IsRunning { get; private set; } + + /// + /// Local EndPoint (host and port) + /// + public int LocalPort { get; private set; } + + /// + /// Automatically recycle NetPacketReader after OnReceive event + /// + public bool AutoRecycle; + + /// + /// IPv6 support + /// + public bool IPv6Enabled = true; + + /// + /// Override MTU for all new peers registered in this NetManager, will ignores MTU Discovery! + /// + public int MtuOverride = 0; + + /// + /// Sets initial MTU to lowest possible value according to RFC1191 (576 bytes) + /// + public bool UseSafeMtu = false; + + /// + /// First peer. Useful for Client mode + /// + public NetPeer FirstPeer => _headPeer; + + /// + /// Experimental feature mostly for servers. Only for Windows/Linux + /// use direct socket calls for send/receive to drastically increase speed and reduce GC pressure + /// + public bool UseNativeSockets = false; + + /// + /// Disconnect peers if HostUnreachable or NetworkUnreachable spawned (old behaviour 0.9.x was true) + /// + public bool DisconnectOnUnreachable = false; + + /// + /// Allows peer change it's ip (lte to wifi, wifi to lte, etc). Use only on server + /// + public bool AllowPeerAddressChange = false; + + /// + /// QoS channel count per message type (value must be between 1 and 64 channels) + /// + public byte ChannelsCount + { + get => _channelsCount; + set + { + if (value < 1 || value > 64) + throw new ArgumentException("Channels count must be between 1 and 64"); + _channelsCount = value; + } + } + + /// + /// Returns connected peers list (with internal cached list) + /// + public List ConnectedPeerList + { + get + { + GetPeersNonAlloc(_connectedPeerListCache, ConnectionState.Connected); + return _connectedPeerListCache; + } + } + + /// + /// Gets peer by peer id + /// + /// id of peer + /// Peer if peer with id exist, otherwise null + public NetPeer GetPeerById(int id) + { + if (id >= 0 && id < _peersArray.Length) + { + return _peersArray[id]; + } + + return null; + } + + /// + /// Gets peer by peer id + /// + /// id of peer + /// resulting peer + /// True if peer with id exist, otherwise false + public bool TryGetPeerById(int id, out NetPeer peer) + { + peer = GetPeerById(id); + + return peer != null; + } + + /// + /// Returns connected peers count + /// + public int ConnectedPeersCount => Interlocked.CompareExchange(ref _connectedPeersCount,0,0); + + public int ExtraPacketSizeForLayer => _extraPacketLayer?.ExtraPacketSizeForLayer ?? 0; + + private bool TryGetPeer(IPEndPoint endPoint, out NetPeer peer) + { + _peersLock.EnterReadLock(); + bool result = _peersDict.TryGetValue(endPoint, out peer); + _peersLock.ExitReadLock(); + return result; + } + + private void AddPeer(NetPeer peer) + { + _peersLock.EnterWriteLock(); + if (_headPeer != null) + { + peer.NextPeer = _headPeer; + _headPeer.PrevPeer = peer; + } + _headPeer = peer; + _peersDict.Add(peer.EndPoint, peer); + if (peer.Id >= _peersArray.Length) + { + int newSize = _peersArray.Length * 2; + while (peer.Id >= newSize) + newSize *= 2; + Array.Resize(ref _peersArray, newSize); + } + _peersArray[peer.Id] = peer; + RegisterEndPoint(peer.EndPoint); + _peersLock.ExitWriteLock(); + } + + private void RemovePeer(NetPeer peer) + { + _peersLock.EnterWriteLock(); + RemovePeerInternal(peer); + _peersLock.ExitWriteLock(); + } + + private void RemovePeerInternal(NetPeer peer) + { + if (!_peersDict.Remove(peer.EndPoint)) + return; + if (peer == _headPeer) + _headPeer = peer.NextPeer; + + if (peer.PrevPeer != null) + peer.PrevPeer.NextPeer = peer.NextPeer; + if (peer.NextPeer != null) + peer.NextPeer.PrevPeer = peer.PrevPeer; + peer.PrevPeer = null; + + _peersArray[peer.Id] = null; + _peerIds.Enqueue(peer.Id); + UnregisterEndPoint(peer.EndPoint); + } + + /// + /// NetManager constructor + /// + /// Network events listener (also can implement IDeliveryEventListener) + /// Extra processing of packages, like CRC checksum or encryption. All connected NetManagers must have same layer. + public NetManager(INetEventListener listener, PacketLayerBase extraPacketLayer = null) + { + _netEventListener = listener; + _deliveryEventListener = listener as IDeliveryEventListener; + _ntpEventListener = listener as INtpEventListener; + _peerAddressChangedListener = listener as IPeerAddressChangedListener; + NatPunchModule = new NatPunchModule(this); + _extraPacketLayer = extraPacketLayer; + } + + internal void ConnectionLatencyUpdated(NetPeer fromPeer, int latency) + { + CreateEvent(NetEvent.EType.ConnectionLatencyUpdated, fromPeer, latency: latency); + } + + internal void MessageDelivered(NetPeer fromPeer, object userData) + { + if(_deliveryEventListener != null) + CreateEvent(NetEvent.EType.MessageDelivered, fromPeer, userData: userData); + } + + internal void DisconnectPeerForce(NetPeer peer, + DisconnectReason reason, + SocketError socketErrorCode, + NetPacket eventData) + { + DisconnectPeer(peer, reason, socketErrorCode, true, null, 0, 0, eventData); + } + + private void DisconnectPeer( + NetPeer peer, + DisconnectReason reason, + SocketError socketErrorCode, + bool force, + byte[] data, + int start, + int count, + NetPacket eventData) + { + var shutdownResult = peer.Shutdown(data, start, count, force); + if (shutdownResult == ShutdownResult.None) + return; + if(shutdownResult == ShutdownResult.WasConnected) + Interlocked.Decrement(ref _connectedPeersCount); + CreateEvent( + NetEvent.EType.Disconnect, + peer, + errorCode: socketErrorCode, + disconnectReason: reason, + readerSource: eventData); + } + + private void CreateEvent( + NetEvent.EType type, + NetPeer peer = null, + IPEndPoint remoteEndPoint = null, + SocketError errorCode = 0, + int latency = 0, + DisconnectReason disconnectReason = DisconnectReason.ConnectionFailed, + ConnectionRequest connectionRequest = null, + DeliveryMethod deliveryMethod = DeliveryMethod.Unreliable, + byte channelNumber = 0, + NetPacket readerSource = null, + object userData = null) + { + NetEvent evt; + bool unsyncEvent = UnsyncedEvents; + + if (type == NetEvent.EType.Connect) + Interlocked.Increment(ref _connectedPeersCount); + else if (type == NetEvent.EType.MessageDelivered) + unsyncEvent = UnsyncedDeliveryEvent; + + lock(_eventLock) + { + evt = _netEventPoolHead; + if (evt == null) + evt = new NetEvent(this); + else + _netEventPoolHead = evt.Next; + } + + evt.Next = null; + evt.Type = type; + evt.DataReader.SetSource(readerSource, readerSource?.GetHeaderSize() ?? 0); + evt.Peer = peer; + evt.RemoteEndPoint = remoteEndPoint; + evt.Latency = latency; + evt.ErrorCode = errorCode; + evt.DisconnectReason = disconnectReason; + evt.ConnectionRequest = connectionRequest; + evt.DeliveryMethod = deliveryMethod; + evt.ChannelNumber = channelNumber; + evt.UserData = userData; + + if (unsyncEvent || _manualMode) + { + ProcessEvent(evt); + } + else + { + lock (_eventLock) + { + if (_pendingEventTail == null) + _pendingEventHead = evt; + else + _pendingEventTail.Next = evt; + _pendingEventTail = evt; + } + } + } + + private void ProcessEvent(NetEvent evt) + { + NetDebug.Write("[NM] Processing event: " + evt.Type); + bool emptyData = evt.DataReader.IsNull; + switch (evt.Type) + { + case NetEvent.EType.Connect: + _netEventListener.OnPeerConnected(evt.Peer); + break; + case NetEvent.EType.Disconnect: + var info = new DisconnectInfo + { + Reason = evt.DisconnectReason, + AdditionalData = evt.DataReader, + SocketErrorCode = evt.ErrorCode + }; + _netEventListener.OnPeerDisconnected(evt.Peer, info); + break; + case NetEvent.EType.Receive: + _netEventListener.OnNetworkReceive(evt.Peer, evt.DataReader, evt.ChannelNumber, evt.DeliveryMethod); + break; + case NetEvent.EType.ReceiveUnconnected: + _netEventListener.OnNetworkReceiveUnconnected(evt.RemoteEndPoint, evt.DataReader, UnconnectedMessageType.BasicMessage); + break; + case NetEvent.EType.Broadcast: + _netEventListener.OnNetworkReceiveUnconnected(evt.RemoteEndPoint, evt.DataReader, UnconnectedMessageType.Broadcast); + break; + case NetEvent.EType.Error: + _netEventListener.OnNetworkError(evt.RemoteEndPoint, evt.ErrorCode); + break; + case NetEvent.EType.ConnectionLatencyUpdated: + _netEventListener.OnNetworkLatencyUpdate(evt.Peer, evt.Latency); + break; + case NetEvent.EType.ConnectionRequest: + _netEventListener.OnConnectionRequest(evt.ConnectionRequest); + break; + case NetEvent.EType.MessageDelivered: + _deliveryEventListener.OnMessageDelivered(evt.Peer, evt.UserData); + break; + case NetEvent.EType.PeerAddressChanged: + _peersLock.EnterUpgradeableReadLock(); + IPEndPoint previousAddress = null; + if (_peersDict.ContainsKey(evt.Peer.EndPoint)) + { + _peersLock.EnterWriteLock(); + _peersDict.Remove(evt.Peer.EndPoint); + previousAddress = evt.Peer.EndPoint; + evt.Peer.FinishEndPointChange(evt.RemoteEndPoint); + _peersDict.Add(evt.Peer.EndPoint, evt.Peer); + _peersLock.ExitWriteLock(); + } + _peersLock.ExitUpgradeableReadLock(); + if(previousAddress != null) + _peerAddressChangedListener.OnPeerAddressChanged(evt.Peer, previousAddress); + break; + } + //Recycle if not message + if (emptyData) + RecycleEvent(evt); + else if (AutoRecycle) + evt.DataReader.RecycleInternal(); + } + + internal void RecycleEvent(NetEvent evt) + { + evt.Peer = null; + evt.ErrorCode = 0; + evt.RemoteEndPoint = null; + evt.ConnectionRequest = null; + lock(_eventLock) + { + evt.Next = _netEventPoolHead; + _netEventPoolHead = evt; + } + } + + //Update function + private void UpdateLogic() + { + var peersToRemove = new List(); + var stopwatch = new Stopwatch(); + stopwatch.Start(); + + while (IsRunning) + { + try + { + ProcessDelayedPackets(); + int elapsed = (int)stopwatch.ElapsedMilliseconds; + elapsed = elapsed <= 0 ? 1 : elapsed; + stopwatch.Restart(); + + for (var netPeer = _headPeer; netPeer != null; netPeer = netPeer.NextPeer) + { + if (netPeer.ConnectionState == ConnectionState.Disconnected && + netPeer.TimeSinceLastPacket > DisconnectTimeout) + { + peersToRemove.Add(netPeer); + } + else + { + netPeer.Update(elapsed); + } + } + + if (peersToRemove.Count > 0) + { + _peersLock.EnterWriteLock(); + for (int i = 0; i < peersToRemove.Count; i++) + RemovePeerInternal(peersToRemove[i]); + _peersLock.ExitWriteLock(); + peersToRemove.Clear(); + } + + ProcessNtpRequests(elapsed); + + int sleepTime = UpdateTime - (int)stopwatch.ElapsedMilliseconds; + if (sleepTime > 0) + _updateTriggerEvent.WaitOne(sleepTime); + } + catch (ThreadAbortException) + { + return; + } + catch (Exception e) + { + NetDebug.WriteError("[NM] LogicThread error: " + e); + } + } + stopwatch.Stop(); + } + + [Conditional("DEBUG")] + private void ProcessDelayedPackets() + { +#if DEBUG + if (!SimulateLatency) + return; + + var time = DateTime.UtcNow; + lock (_pingSimulationList) + { + for (int i = 0; i < _pingSimulationList.Count; i++) + { + var incomingData = _pingSimulationList[i]; + if (incomingData.TimeWhenGet <= time) + { + DebugMessageReceived(incomingData.Data, incomingData.EndPoint); + _pingSimulationList.RemoveAt(i); + i--; + } + } + } +#endif + } + + private void ProcessNtpRequests(int elapsedMilliseconds) + { + List requestsToRemove = null; + foreach (var ntpRequest in _ntpRequests) + { + ntpRequest.Value.Send(_udpSocketv4, elapsedMilliseconds); + if(ntpRequest.Value.NeedToKill) + { + if (requestsToRemove == null) + requestsToRemove = new List(); + requestsToRemove.Add(ntpRequest.Key); + } + } + + if (requestsToRemove != null) + { + foreach (var ipEndPoint in requestsToRemove) + { + _ntpRequests.Remove(ipEndPoint); + } + } + } + + /// + /// Update and send logic. Use this only when NetManager started in manual mode + /// + /// elapsed milliseconds since last update call + public void ManualUpdate(int elapsedMilliseconds) + { + if (!_manualMode) + return; + + for (var netPeer = _headPeer; netPeer != null; netPeer = netPeer.NextPeer) + { + if (netPeer.ConnectionState == ConnectionState.Disconnected && netPeer.TimeSinceLastPacket > DisconnectTimeout) + { + RemovePeerInternal(netPeer); + } + else + { + netPeer.Update(elapsedMilliseconds); + } + } + ProcessNtpRequests(elapsedMilliseconds); + } + + internal NetPeer OnConnectionSolved(ConnectionRequest request, byte[] rejectData, int start, int length) + { + NetPeer netPeer = null; + + if (request.Result == ConnectionRequestResult.RejectForce) + { + NetDebug.Write(NetLogLevel.Trace, "[NM] Peer connect reject force."); + if (rejectData != null && length > 0) + { + var shutdownPacket = PoolGetWithProperty(PacketProperty.Disconnect, length); + shutdownPacket.ConnectionNumber = request.InternalPacket.ConnectionNumber; + FastBitConverter.GetBytes(shutdownPacket.RawData, 1, request.InternalPacket.ConnectionTime); + if (shutdownPacket.Size >= NetConstants.PossibleMtu[0]) + NetDebug.WriteError("[Peer] Disconnect additional data size more than MTU!"); + else + Buffer.BlockCopy(rejectData, start, shutdownPacket.RawData, 9, length); + SendRawAndRecycle(shutdownPacket, request.RemoteEndPoint); + } + } + else + { + _peersLock.EnterUpgradeableReadLock(); + if (_peersDict.TryGetValue(request.RemoteEndPoint, out netPeer)) + { + //already have peer + _peersLock.ExitUpgradeableReadLock(); + } + else if (request.Result == ConnectionRequestResult.Reject) + { + netPeer = new NetPeer(this, request.RemoteEndPoint, GetNextPeerId()); + netPeer.Reject(request.InternalPacket, rejectData, start, length); + AddPeer(netPeer); + _peersLock.ExitUpgradeableReadLock(); + NetDebug.Write(NetLogLevel.Trace, "[NM] Peer connect reject."); + } + else //Accept + { + netPeer = new NetPeer(this, request, GetNextPeerId()); + AddPeer(netPeer); + _peersLock.ExitUpgradeableReadLock(); + CreateEvent(NetEvent.EType.Connect, netPeer); + NetDebug.Write(NetLogLevel.Trace, $"[NM] Received peer connection Id: {netPeer.ConnectTime}, EP: {netPeer.EndPoint}"); + } + } + + lock(_requestsDict) + _requestsDict.Remove(request.RemoteEndPoint); + + return netPeer; + } + + private int GetNextPeerId() + { + return _peerIds.TryDequeue(out int id) ? id : _lastPeerId++; + } + + private void ProcessConnectRequest( + IPEndPoint remoteEndPoint, + NetPeer netPeer, + NetConnectRequestPacket connRequest) + { + //if we have peer + if (netPeer != null) + { + var processResult = netPeer.ProcessConnectRequest(connRequest); + NetDebug.Write($"ConnectRequest LastId: {netPeer.ConnectTime}, NewId: {connRequest.ConnectionTime}, EP: {remoteEndPoint}, Result: {processResult}"); + + switch (processResult) + { + case ConnectRequestResult.Reconnection: + DisconnectPeerForce(netPeer, DisconnectReason.Reconnect, 0, null); + RemovePeer(netPeer); + //go to new connection + break; + case ConnectRequestResult.NewConnection: + RemovePeer(netPeer); + //go to new connection + break; + case ConnectRequestResult.P2PLose: + DisconnectPeerForce(netPeer, DisconnectReason.PeerToPeerConnection, 0, null); + RemovePeer(netPeer); + //go to new connection + break; + default: + //no operations needed + return; + } + //ConnectRequestResult.NewConnection + //Set next connection number + if(processResult != ConnectRequestResult.P2PLose) + connRequest.ConnectionNumber = (byte)((netPeer.ConnectionNum + 1) % NetConstants.MaxConnectionNumber); + //To reconnect peer + } + else + { + NetDebug.Write($"ConnectRequest Id: {connRequest.ConnectionTime}, EP: {remoteEndPoint}"); + } + + ConnectionRequest req; + lock (_requestsDict) + { + if (_requestsDict.TryGetValue(remoteEndPoint, out req)) + { + req.UpdateRequest(connRequest); + return; + } + req = new ConnectionRequest(remoteEndPoint, connRequest, this); + _requestsDict.Add(remoteEndPoint, req); + } + NetDebug.Write($"[NM] Creating request event: {connRequest.ConnectionTime}"); + CreateEvent(NetEvent.EType.ConnectionRequest, connectionRequest: req); + } + + private void OnMessageReceived(NetPacket packet, IPEndPoint remoteEndPoint) + { +#if DEBUG + if (SimulatePacketLoss && _randomGenerator.NextDouble() * 100 < SimulationPacketLossChance) + { + //drop packet + return; + } + if (SimulateLatency) + { + int latency = _randomGenerator.Next(SimulationMinLatency, SimulationMaxLatency); + if (latency > MinLatencyThreshold) + { + lock (_pingSimulationList) + { + _pingSimulationList.Add(new IncomingData + { + Data = packet, + EndPoint = remoteEndPoint, + TimeWhenGet = DateTime.UtcNow.AddMilliseconds(latency) + }); + } + //hold packet + return; + } + } + + //ProcessEvents + DebugMessageReceived(packet, remoteEndPoint); + } + + private void DebugMessageReceived(NetPacket packet, IPEndPoint remoteEndPoint) + { +#endif + var originalPacketSize = packet.Size; + if (EnableStatistics) + { + Statistics.IncrementPacketsReceived(); + Statistics.AddBytesReceived(originalPacketSize); + } + + if (_ntpRequests.Count > 0) + { + if (_ntpRequests.TryGetValue(remoteEndPoint, out var request)) + { + if (packet.Size < 48) + { + NetDebug.Write(NetLogLevel.Trace, $"NTP response too short: {packet.Size}"); + return; + } + + byte[] copiedData = new byte[packet.Size]; + Buffer.BlockCopy(packet.RawData, 0, copiedData, 0, packet.Size); + NtpPacket ntpPacket = NtpPacket.FromServerResponse(copiedData, DateTime.UtcNow); + try + { + ntpPacket.ValidateReply(); + } + catch (InvalidOperationException ex) + { + NetDebug.Write(NetLogLevel.Trace, $"NTP response error: {ex.Message}"); + ntpPacket = null; + } + + if (ntpPacket != null) + { + _ntpRequests.Remove(remoteEndPoint); + _ntpEventListener?.OnNtpResponse(ntpPacket); + } + return; + } + } + + if (_extraPacketLayer != null) + { + int start = 0; + _extraPacketLayer.ProcessInboundPacket(ref remoteEndPoint, ref packet.RawData, ref start, ref packet.Size); + if (packet.Size == 0) + return; + } + + if (!packet.Verify()) + { + NetDebug.WriteError("[NM] DataReceived: bad!"); + PoolRecycle(packet); + return; + } + + switch (packet.Property) + { + //special case connect request + case PacketProperty.ConnectRequest: + if (NetConnectRequestPacket.GetProtocolId(packet) != NetConstants.ProtocolId) + { + SendRawAndRecycle(PoolGetWithProperty(PacketProperty.InvalidProtocol), remoteEndPoint); + return; + } + break; + //unconnected messages + case PacketProperty.Broadcast: + if (!BroadcastReceiveEnabled) + return; + CreateEvent(NetEvent.EType.Broadcast, remoteEndPoint: remoteEndPoint, readerSource: packet); + return; + case PacketProperty.UnconnectedMessage: + if (!UnconnectedMessagesEnabled) + return; + CreateEvent(NetEvent.EType.ReceiveUnconnected, remoteEndPoint: remoteEndPoint, readerSource: packet); + return; + case PacketProperty.NatMessage: + if (NatPunchEnabled) + NatPunchModule.ProcessMessage(remoteEndPoint, packet); + return; + } + + //Check normal packets + _peersLock.EnterReadLock(); + bool peerFound = _peersDict.TryGetValue(remoteEndPoint, out var netPeer); + _peersLock.ExitReadLock(); + + if (peerFound && EnableStatistics) + { + netPeer.Statistics.IncrementPacketsReceived(); + netPeer.Statistics.AddBytesReceived(originalPacketSize); + } + + switch (packet.Property) + { + case PacketProperty.ConnectRequest: + var connRequest = NetConnectRequestPacket.FromData(packet); + if (connRequest != null) + ProcessConnectRequest(remoteEndPoint, netPeer, connRequest); + break; + case PacketProperty.PeerNotFound: + if (peerFound) //local + { + if (netPeer.ConnectionState != ConnectionState.Connected) + return; + if (packet.Size == 1) + { + //first reply + //send NetworkChanged packet + netPeer.ResetMtu(); + SendRaw(NetConnectAcceptPacket.MakeNetworkChanged(netPeer), remoteEndPoint); + NetDebug.Write($"PeerNotFound sending connection info: {remoteEndPoint}"); + } + else if (packet.Size == 2 && packet.RawData[1] == 1) + { + //second reply + DisconnectPeerForce(netPeer, DisconnectReason.PeerNotFound, 0, null); + } + } + else if (packet.Size > 1) //remote + { + //check if this is old peer + bool isOldPeer = false; + + if (AllowPeerAddressChange) + { + NetDebug.Write($"[NM] Looks like address change: {packet.Size}"); + var remoteData = NetConnectAcceptPacket.FromData(packet); + if (remoteData != null && + remoteData.PeerNetworkChanged && + remoteData.PeerId < _peersArray.Length) + { + _peersLock.EnterUpgradeableReadLock(); + var peer = _peersArray[remoteData.PeerId]; + if (peer != null && + peer.ConnectTime == remoteData.ConnectionTime && + peer.ConnectionNum == remoteData.ConnectionNumber) + { + if (peer.ConnectionState == ConnectionState.Connected) + { + peer.InitiateEndPointChange(); + if (_peerAddressChangedListener != null) + { + CreateEvent(NetEvent.EType.PeerAddressChanged, peer, remoteEndPoint); + } + NetDebug.Write("[NM] PeerNotFound change address of remote peer"); + } + isOldPeer = true; + } + _peersLock.ExitUpgradeableReadLock(); + } + } + + PoolRecycle(packet); + + //else peer really not found + if (!isOldPeer) + { + var secondResponse = PoolGetWithProperty(PacketProperty.PeerNotFound, 1); + secondResponse.RawData[1] = 1; + SendRawAndRecycle(secondResponse, remoteEndPoint); + } + } + break; + case PacketProperty.InvalidProtocol: + if (peerFound && netPeer.ConnectionState == ConnectionState.Outgoing) + DisconnectPeerForce(netPeer, DisconnectReason.InvalidProtocol, 0, null); + break; + case PacketProperty.Disconnect: + if (peerFound) + { + var disconnectResult = netPeer.ProcessDisconnect(packet); + if (disconnectResult == DisconnectResult.None) + { + PoolRecycle(packet); + return; + } + DisconnectPeerForce( + netPeer, + disconnectResult == DisconnectResult.Disconnect + ? DisconnectReason.RemoteConnectionClose + : DisconnectReason.ConnectionRejected, + 0, packet); + } + else + { + PoolRecycle(packet); + } + //Send shutdown + SendRawAndRecycle(PoolGetWithProperty(PacketProperty.ShutdownOk), remoteEndPoint); + break; + case PacketProperty.ConnectAccept: + if (!peerFound) + return; + var connAccept = NetConnectAcceptPacket.FromData(packet); + if (connAccept != null && netPeer.ProcessConnectAccept(connAccept)) + CreateEvent(NetEvent.EType.Connect, netPeer); + break; + default: + if(peerFound) + netPeer.ProcessPacket(packet); + else + SendRawAndRecycle(PoolGetWithProperty(PacketProperty.PeerNotFound), remoteEndPoint); + break; + } + } + + internal void CreateReceiveEvent(NetPacket packet, DeliveryMethod method, byte channelNumber, int headerSize, NetPeer fromPeer) + { + NetEvent evt; + + if (UnsyncedEvents || UnsyncedReceiveEvent || _manualMode) + { + lock (_eventLock) + { + evt = _netEventPoolHead; + if (evt == null) + evt = new NetEvent(this); + else + _netEventPoolHead = evt.Next; + } + evt.Next = null; + evt.Type = NetEvent.EType.Receive; + evt.DataReader.SetSource(packet, headerSize); + evt.Peer = fromPeer; + evt.DeliveryMethod = method; + evt.ChannelNumber = channelNumber; + ProcessEvent(evt); + } + else + { + lock (_eventLock) + { + evt = _netEventPoolHead; + if (evt == null) + evt = new NetEvent(this); + else + _netEventPoolHead = evt.Next; + + evt.Next = null; + evt.Type = NetEvent.EType.Receive; + evt.DataReader.SetSource(packet, headerSize); + evt.Peer = fromPeer; + evt.DeliveryMethod = method; + evt.ChannelNumber = channelNumber; + + if (_pendingEventTail == null) + _pendingEventHead = evt; + else + _pendingEventTail.Next = evt; + _pendingEventTail = evt; + } + } + } + + /// + /// Send data to all connected peers (channel - 0) + /// + /// DataWriter with data + /// Send options (reliable, unreliable, etc.) + public void SendToAll(NetDataWriter writer, DeliveryMethod options) + { + SendToAll(writer.Data, 0, writer.Length, options); + } + + /// + /// Send data to all connected peers (channel - 0) + /// + /// Data + /// Send options (reliable, unreliable, etc.) + public void SendToAll(byte[] data, DeliveryMethod options) + { + SendToAll(data, 0, data.Length, options); + } + + /// + /// Send data to all connected peers (channel - 0) + /// + /// Data + /// Start of data + /// Length of data + /// Send options (reliable, unreliable, etc.) + public void SendToAll(byte[] data, int start, int length, DeliveryMethod options) + { + SendToAll(data, start, length, 0, options); + } + + /// + /// Send data to all connected peers + /// + /// DataWriter with data + /// Number of channel (from 0 to channelsCount - 1) + /// Send options (reliable, unreliable, etc.) + public void SendToAll(NetDataWriter writer, byte channelNumber, DeliveryMethod options) + { + SendToAll(writer.Data, 0, writer.Length, channelNumber, options); + } + + /// + /// Send data to all connected peers + /// + /// Data + /// Number of channel (from 0 to channelsCount - 1) + /// Send options (reliable, unreliable, etc.) + public void SendToAll(byte[] data, byte channelNumber, DeliveryMethod options) + { + SendToAll(data, 0, data.Length, channelNumber, options); + } + + /// + /// Send data to all connected peers + /// + /// Data + /// Start of data + /// Length of data + /// Number of channel (from 0 to channelsCount - 1) + /// Send options (reliable, unreliable, etc.) + public void SendToAll(byte[] data, int start, int length, byte channelNumber, DeliveryMethod options) + { + try + { + _peersLock.EnterReadLock(); + for (var netPeer = _headPeer; netPeer != null; netPeer = netPeer.NextPeer) + netPeer.Send(data, start, length, channelNumber, options); + } + finally + { + _peersLock.ExitReadLock(); + } + } + + /// + /// Send data to all connected peers (channel - 0) + /// + /// DataWriter with data + /// Send options (reliable, unreliable, etc.) + /// Excluded peer + public void SendToAll(NetDataWriter writer, DeliveryMethod options, NetPeer excludePeer) + { + SendToAll(writer.Data, 0, writer.Length, 0, options, excludePeer); + } + + /// + /// Send data to all connected peers (channel - 0) + /// + /// Data + /// Send options (reliable, unreliable, etc.) + /// Excluded peer + public void SendToAll(byte[] data, DeliveryMethod options, NetPeer excludePeer) + { + SendToAll(data, 0, data.Length, 0, options, excludePeer); + } + + /// + /// Send data to all connected peers (channel - 0) + /// + /// Data + /// Start of data + /// Length of data + /// Send options (reliable, unreliable, etc.) + /// Excluded peer + public void SendToAll(byte[] data, int start, int length, DeliveryMethod options, NetPeer excludePeer) + { + SendToAll(data, start, length, 0, options, excludePeer); + } + + /// + /// Send data to all connected peers + /// + /// DataWriter with data + /// Number of channel (from 0 to channelsCount - 1) + /// Send options (reliable, unreliable, etc.) + /// Excluded peer + public void SendToAll(NetDataWriter writer, byte channelNumber, DeliveryMethod options, NetPeer excludePeer) + { + SendToAll(writer.Data, 0, writer.Length, channelNumber, options, excludePeer); + } + + /// + /// Send data to all connected peers + /// + /// Data + /// Number of channel (from 0 to channelsCount - 1) + /// Send options (reliable, unreliable, etc.) + /// Excluded peer + public void SendToAll(byte[] data, byte channelNumber, DeliveryMethod options, NetPeer excludePeer) + { + SendToAll(data, 0, data.Length, channelNumber, options, excludePeer); + } + + + /// + /// Send data to all connected peers + /// + /// Data + /// Start of data + /// Length of data + /// Number of channel (from 0 to channelsCount - 1) + /// Send options (reliable, unreliable, etc.) + /// Excluded peer + public void SendToAll(byte[] data, int start, int length, byte channelNumber, DeliveryMethod options, NetPeer excludePeer) + { + try + { + _peersLock.EnterReadLock(); + for (var netPeer = _headPeer; netPeer != null; netPeer = netPeer.NextPeer) + { + if (netPeer != excludePeer) + netPeer.Send(data, start, length, channelNumber, options); + } + } + finally + { + _peersLock.ExitReadLock(); + } + } + + /// + /// Start logic thread and listening on available port + /// + public bool Start() + { + return Start(0); + } + + /// + /// Start logic thread and listening on selected port + /// + /// bind to specific ipv4 address + /// bind to specific ipv6 address + /// port to listen + public bool Start(IPAddress addressIPv4, IPAddress addressIPv6, int port) + { + return Start(addressIPv4, addressIPv6, port, false); + } + + /// + /// Start logic thread and listening on selected port + /// + /// bind to specific ipv4 address + /// bind to specific ipv6 address + /// port to listen + public bool Start(string addressIPv4, string addressIPv6, int port) + { + IPAddress ipv4 = NetUtils.ResolveAddress(addressIPv4); + IPAddress ipv6 = NetUtils.ResolveAddress(addressIPv6); + return Start(ipv4, ipv6, port); + } + + /// + /// Start logic thread and listening on selected port + /// + /// port to listen + public bool Start(int port) + { + return Start(IPAddress.Any, IPAddress.IPv6Any, port); + } + + /// + /// Start in manual mode and listening on selected port + /// In this mode you should use ManualReceive (without PollEvents) for receive packets + /// and ManualUpdate(...) for update and send packets + /// This mode useful mostly for single-threaded servers + /// + /// bind to specific ipv4 address + /// bind to specific ipv6 address + /// port to listen + public bool StartInManualMode(IPAddress addressIPv4, IPAddress addressIPv6, int port) + { + return Start(addressIPv4, addressIPv6, port, true); + } + + /// + /// Start in manual mode and listening on selected port + /// In this mode you should use ManualReceive (without PollEvents) for receive packets + /// and ManualUpdate(...) for update and send packets + /// This mode useful mostly for single-threaded servers + /// + /// bind to specific ipv4 address + /// bind to specific ipv6 address + /// port to listen + public bool StartInManualMode(string addressIPv4, string addressIPv6, int port) + { + IPAddress ipv4 = NetUtils.ResolveAddress(addressIPv4); + IPAddress ipv6 = NetUtils.ResolveAddress(addressIPv6); + return StartInManualMode(ipv4, ipv6, port); + } + + /// + /// Start in manual mode and listening on selected port + /// In this mode you should use ManualReceive (without PollEvents) for receive packets + /// and ManualUpdate(...) for update and send packets + /// This mode useful mostly for single-threaded servers + /// + /// port to listen + public bool StartInManualMode(int port) + { + return StartInManualMode(IPAddress.Any, IPAddress.IPv6Any, port); + } + + /// + /// Send message without connection + /// + /// Raw data + /// Packet destination + /// Operation result + public bool SendUnconnectedMessage(byte[] message, IPEndPoint remoteEndPoint) + { + return SendUnconnectedMessage(message, 0, message.Length, remoteEndPoint); + } + + /// + /// Send message without connection. WARNING This method allocates a new IPEndPoint object and + /// synchronously makes a DNS request. If you're calling this method every frame it will be + /// much faster to just cache the IPEndPoint. + /// + /// Data serializer + /// Packet destination IP or hostname + /// Packet destination port + /// Operation result + public bool SendUnconnectedMessage(NetDataWriter writer, string address, int port) + { + IPEndPoint remoteEndPoint = NetUtils.MakeEndPoint(address, port); + + return SendUnconnectedMessage(writer.Data, 0, writer.Length, remoteEndPoint); + } + + /// + /// Send message without connection + /// + /// Data serializer + /// Packet destination + /// Operation result + public bool SendUnconnectedMessage(NetDataWriter writer, IPEndPoint remoteEndPoint) + { + return SendUnconnectedMessage(writer.Data, 0, writer.Length, remoteEndPoint); + } + + /// + /// Send message without connection + /// + /// Raw data + /// data start + /// data length + /// Packet destination + /// Operation result + public bool SendUnconnectedMessage(byte[] message, int start, int length, IPEndPoint remoteEndPoint) + { + //No need for CRC here, SendRaw does that + NetPacket packet = PoolGetWithData(PacketProperty.UnconnectedMessage, message, start, length); + return SendRawAndRecycle(packet, remoteEndPoint) > 0; + } + + /// + /// Triggers update and send logic immediately (works asynchronously) + /// + public void TriggerUpdate() + { + _updateTriggerEvent.Set(); + } + + /// + /// Receive all pending events. Call this in game update code + /// In Manual mode it will call also socket Receive (which can be slow) + /// + public void PollEvents() + { + if (_manualMode) + { + if (_udpSocketv4 != null) + ManualReceive(_udpSocketv4, _bufferEndPointv4); + if (_udpSocketv6 != null && _udpSocketv6 != _udpSocketv4) + ManualReceive(_udpSocketv6, _bufferEndPointv6); + ProcessDelayedPackets(); + return; + } + if (UnsyncedEvents) + return; + NetEvent pendingEvent; + lock (_eventLock) + { + pendingEvent = _pendingEventHead; + _pendingEventHead = null; + _pendingEventTail = null; + } + + while (pendingEvent != null) + { + var next = pendingEvent.Next; + ProcessEvent(pendingEvent); + pendingEvent = next; + } + } + + /// + /// Connect to remote host + /// + /// Server IP or hostname + /// Server Port + /// Connection key + /// New NetPeer if new connection, Old NetPeer if already connected, null peer if there is ConnectionRequest awaiting + /// Manager is not running. Call + public NetPeer Connect(string address, int port, string key) + { + return Connect(address, port, NetDataWriter.FromString(key)); + } + + /// + /// Connect to remote host + /// + /// Server IP or hostname + /// Server Port + /// Additional data for remote peer + /// New NetPeer if new connection, Old NetPeer if already connected, null peer if there is ConnectionRequest awaiting + /// Manager is not running. Call + public NetPeer Connect(string address, int port, NetDataWriter connectionData) + { + IPEndPoint ep; + try + { + ep = NetUtils.MakeEndPoint(address, port); + } + catch + { + CreateEvent(NetEvent.EType.Disconnect, disconnectReason: DisconnectReason.UnknownHost); + return null; + } + return Connect(ep, connectionData); + } + + /// + /// Connect to remote host + /// + /// Server end point (ip and port) + /// Connection key + /// New NetPeer if new connection, Old NetPeer if already connected, null peer if there is ConnectionRequest awaiting + /// Manager is not running. Call + public NetPeer Connect(IPEndPoint target, string key) + { + return Connect(target, NetDataWriter.FromString(key)); + } + + /// + /// Connect to remote host + /// + /// Server end point (ip and port) + /// Additional data for remote peer + /// New NetPeer if new connection, Old NetPeer if already connected, null peer if there is ConnectionRequest awaiting + /// Manager is not running. Call + public NetPeer Connect(IPEndPoint target, NetDataWriter connectionData) + { + if (!IsRunning) + throw new InvalidOperationException("Client is not running"); + + lock(_requestsDict) + { + if (_requestsDict.ContainsKey(target)) + return null; + } + + byte connectionNumber = 0; + _peersLock.EnterUpgradeableReadLock(); + if (_peersDict.TryGetValue(target, out var peer)) + { + switch (peer.ConnectionState) + { + //just return already connected peer + case ConnectionState.Connected: + case ConnectionState.Outgoing: + _peersLock.ExitUpgradeableReadLock(); + return peer; + } + //else reconnect + connectionNumber = (byte)((peer.ConnectionNum + 1) % NetConstants.MaxConnectionNumber); + RemovePeer(peer); + } + + //Create reliable connection + //And send connection request + peer = new NetPeer(this, target, GetNextPeerId(), connectionNumber, connectionData); + AddPeer(peer); + _peersLock.ExitUpgradeableReadLock(); + + return peer; + } + + /// + /// Force closes connection and stop all threads. + /// + public void Stop() + { + Stop(true); + } + + /// + /// Force closes connection and stop all threads. + /// + /// Send disconnect messages + public void Stop(bool sendDisconnectMessages) + { + if (!IsRunning) + return; + NetDebug.Write("[NM] Stop"); + +#if UNITY_2018_3_OR_NEWER + _pausedSocketFix.Deinitialize(); + _pausedSocketFix = null; +#endif + + //Send last disconnect + for(var netPeer = _headPeer; netPeer != null; netPeer = netPeer.NextPeer) + netPeer.Shutdown(null, 0, 0, !sendDisconnectMessages); + + //Stop + CloseSocket(); + _updateTriggerEvent.Set(); + if (!_manualMode) + { + _logicThread.Join(); + _logicThread = null; + } + + //clear peers + _peersLock.EnterWriteLock(); + _headPeer = null; + _peersDict.Clear(); + _peersArray = new NetPeer[32]; + _peersLock.ExitWriteLock(); + _peerIds = new ConcurrentQueue(); + _lastPeerId = 0; +#if DEBUG + lock (_pingSimulationList) + _pingSimulationList.Clear(); +#endif + _connectedPeersCount = 0; + _pendingEventHead = null; + _pendingEventTail = null; + } + + /// + /// Return peers count with connection state + /// + /// peer connection state (you can use as bit flags) + /// peers count + public int GetPeersCount(ConnectionState peerState) + { + int count = 0; + _peersLock.EnterReadLock(); + for (var netPeer = _headPeer; netPeer != null; netPeer = netPeer.NextPeer) + { + if ((netPeer.ConnectionState & peerState) != 0) + count++; + } + _peersLock.ExitReadLock(); + return count; + } + + /// + /// Get copy of peers (without allocations) + /// + /// List that will contain result + /// State of peers + public void GetPeersNonAlloc(List peers, ConnectionState peerState) + { + peers.Clear(); + _peersLock.EnterReadLock(); + for (var netPeer = _headPeer; netPeer != null; netPeer = netPeer.NextPeer) + { + if ((netPeer.ConnectionState & peerState) != 0) + peers.Add(netPeer); + } + _peersLock.ExitReadLock(); + } + + /// + /// Disconnect all peers without any additional data + /// + public void DisconnectAll() + { + DisconnectAll(null, 0, 0); + } + + /// + /// Disconnect all peers with shutdown message + /// + /// Data to send (must be less or equal MTU) + /// Data start + /// Data count + public void DisconnectAll(byte[] data, int start, int count) + { + //Send disconnect packets + _peersLock.EnterReadLock(); + for (var netPeer = _headPeer; netPeer != null; netPeer = netPeer.NextPeer) + { + DisconnectPeer( + netPeer, + DisconnectReason.DisconnectPeerCalled, + 0, + false, + data, + start, + count, + null); + } + _peersLock.ExitReadLock(); + } + + /// + /// Immediately disconnect peer from server without additional data + /// + /// peer to disconnect + public void DisconnectPeerForce(NetPeer peer) + { + DisconnectPeerForce(peer, DisconnectReason.DisconnectPeerCalled, 0, null); + } + + /// + /// Disconnect peer from server + /// + /// peer to disconnect + public void DisconnectPeer(NetPeer peer) + { + DisconnectPeer(peer, null, 0, 0); + } + + /// + /// Disconnect peer from server and send additional data (Size must be less or equal MTU - 8) + /// + /// peer to disconnect + /// additional data + public void DisconnectPeer(NetPeer peer, byte[] data) + { + DisconnectPeer(peer, data, 0, data.Length); + } + + /// + /// Disconnect peer from server and send additional data (Size must be less or equal MTU - 8) + /// + /// peer to disconnect + /// additional data + public void DisconnectPeer(NetPeer peer, NetDataWriter writer) + { + DisconnectPeer(peer, writer.Data, 0, writer.Length); + } + + /// + /// Disconnect peer from server and send additional data (Size must be less or equal MTU - 8) + /// + /// peer to disconnect + /// additional data + /// data start + /// data length + public void DisconnectPeer(NetPeer peer, byte[] data, int start, int count) + { + DisconnectPeer( + peer, + DisconnectReason.DisconnectPeerCalled, + 0, + false, + data, + start, + count, + null); + } + + /// + /// Create the requests for NTP server + /// + /// NTP Server address. + public void CreateNtpRequest(IPEndPoint endPoint) + { + _ntpRequests.Add(endPoint, new NtpRequest(endPoint)); + } + + /// + /// Create the requests for NTP server + /// + /// NTP Server address. + /// port + public void CreateNtpRequest(string ntpServerAddress, int port) + { + IPEndPoint endPoint = NetUtils.MakeEndPoint(ntpServerAddress, port); + _ntpRequests.Add(endPoint, new NtpRequest(endPoint)); + } + + /// + /// Create the requests for NTP server (default port) + /// + /// NTP Server address. + public void CreateNtpRequest(string ntpServerAddress) + { + IPEndPoint endPoint = NetUtils.MakeEndPoint(ntpServerAddress, NtpRequest.DefaultPort); + _ntpRequests.Add(endPoint, new NtpRequest(endPoint)); + } + + public NetPeerEnumerator GetEnumerator() + { + return new NetPeerEnumerator(_headPeer); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return new NetPeerEnumerator(_headPeer); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return new NetPeerEnumerator(_headPeer); + } + } +} diff --git a/Transport/LiteNetLib Transport/LiteNetLib/NetManager.cs.meta b/Transport/LiteNetLib Transport/LiteNetLib/NetManager.cs.meta new file mode 100644 index 0000000..0a7b710 --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/NetManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2d529e6190dc14f4e881a06af959b7d2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Transport/LiteNetLib Transport/LiteNetLib/NetPacket.cs b/Transport/LiteNetLib Transport/LiteNetLib/NetPacket.cs new file mode 100644 index 0000000..4b40308 --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/NetPacket.cs @@ -0,0 +1,160 @@ +using System; +using LiteNetLib.Utils; + +namespace LiteNetLib +{ + internal enum PacketProperty : byte + { + Unreliable, + Channeled, + Ack, + Ping, + Pong, + ConnectRequest, + ConnectAccept, + Disconnect, + UnconnectedMessage, + MtuCheck, + MtuOk, + Broadcast, + Merged, + ShutdownOk, + PeerNotFound, + InvalidProtocol, + NatMessage, + Empty + } + + internal sealed class NetPacket + { + private static readonly int PropertiesCount = Enum.GetValues(typeof(PacketProperty)).Length; + private static readonly int[] HeaderSizes; + + static NetPacket() + { + HeaderSizes = NetUtils.AllocatePinnedUninitializedArray(PropertiesCount); + for (int i = 0; i < HeaderSizes.Length; i++) + { + switch ((PacketProperty)i) + { + case PacketProperty.Channeled: + case PacketProperty.Ack: + HeaderSizes[i] = NetConstants.ChanneledHeaderSize; + break; + case PacketProperty.Ping: + HeaderSizes[i] = NetConstants.HeaderSize + 2; + break; + case PacketProperty.ConnectRequest: + HeaderSizes[i] = NetConnectRequestPacket.HeaderSize; + break; + case PacketProperty.ConnectAccept: + HeaderSizes[i] = NetConnectAcceptPacket.Size; + break; + case PacketProperty.Disconnect: + HeaderSizes[i] = NetConstants.HeaderSize + 8; + break; + case PacketProperty.Pong: + HeaderSizes[i] = NetConstants.HeaderSize + 10; + break; + default: + HeaderSizes[i] = NetConstants.HeaderSize; + break; + } + } + } + + //Header + public PacketProperty Property + { + get => (PacketProperty)(RawData[0] & 0x1F); + set => RawData[0] = (byte)((RawData[0] & 0xE0) | (byte)value); + } + + public byte ConnectionNumber + { + get => (byte)((RawData[0] & 0x60) >> 5); + set => RawData[0] = (byte) ((RawData[0] & 0x9F) | (value << 5)); + } + + public ushort Sequence + { + get => BitConverter.ToUInt16(RawData, 1); + set => FastBitConverter.GetBytes(RawData, 1, value); + } + + public bool IsFragmented => (RawData[0] & 0x80) != 0; + + public void MarkFragmented() + { + RawData[0] |= 0x80; //set first bit + } + + public byte ChannelId + { + get => RawData[3]; + set => RawData[3] = value; + } + + public ushort FragmentId + { + get => BitConverter.ToUInt16(RawData, 4); + set => FastBitConverter.GetBytes(RawData, 4, value); + } + + public ushort FragmentPart + { + get => BitConverter.ToUInt16(RawData, 6); + set => FastBitConverter.GetBytes(RawData, 6, value); + } + + public ushort FragmentsTotal + { + get => BitConverter.ToUInt16(RawData, 8); + set => FastBitConverter.GetBytes(RawData, 8, value); + } + + //Data + public byte[] RawData; + public int Size; + + //Delivery + public object UserData; + + //Pool node + public NetPacket Next; + + public NetPacket(int size) + { + RawData = new byte[size]; + Size = size; + } + + public NetPacket(PacketProperty property, int size) + { + size += GetHeaderSize(property); + RawData = new byte[size]; + Property = property; + Size = size; + } + + public static int GetHeaderSize(PacketProperty property) + { + return HeaderSizes[(int)property]; + } + + public int GetHeaderSize() + { + return HeaderSizes[RawData[0] & 0x1F]; + } + + public bool Verify() + { + byte property = (byte)(RawData[0] & 0x1F); + if (property >= PropertiesCount) + return false; + int headerSize = HeaderSizes[property]; + bool fragmented = (RawData[0] & 0x80) != 0; + return Size >= headerSize && (!fragmented || Size >= headerSize + NetConstants.FragmentHeaderSize); + } + } +} diff --git a/Transport/LiteNetLib Transport/LiteNetLib/NetPacket.cs.meta b/Transport/LiteNetLib Transport/LiteNetLib/NetPacket.cs.meta new file mode 100644 index 0000000..28aab14 --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/NetPacket.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f943003c119d42349b59de2a831064b2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Transport/LiteNetLib Transport/LiteNetLib/NetPeer.cs b/Transport/LiteNetLib Transport/LiteNetLib/NetPeer.cs new file mode 100644 index 0000000..6690678 --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/NetPeer.cs @@ -0,0 +1,1398 @@ +#if DEBUG +#define STATS_ENABLED +#endif +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Diagnostics; +using System.Net; +using System.Threading; +using LiteNetLib.Utils; + +namespace LiteNetLib +{ + /// + /// Peer connection state + /// + [Flags] + public enum ConnectionState : byte + { + Outgoing = 1 << 1, + Connected = 1 << 2, + ShutdownRequested = 1 << 3, + Disconnected = 1 << 4, + EndPointChange = 1 << 5, + Any = Outgoing | Connected | ShutdownRequested | EndPointChange + } + + internal enum ConnectRequestResult + { + None, + P2PLose, //when peer connecting + Reconnection, //when peer was connected + NewConnection //when peer was disconnected + } + + internal enum DisconnectResult + { + None, + Reject, + Disconnect + } + + internal enum ShutdownResult + { + None, + Success, + WasConnected + } + + /// + /// Network peer. Main purpose is sending messages to specific peer. + /// + public class NetPeer + { + //Ping and RTT + private int _rtt; + private int _avgRtt; + private int _rttCount; + private double _resendDelay = 27.0; + private int _pingSendTimer; + private int _rttResetTimer; + private readonly Stopwatch _pingTimer = new Stopwatch(); + private int _timeSinceLastPacket; + private long _remoteDelta; + + //Common + private readonly object _shutdownLock = new object(); + + internal volatile NetPeer NextPeer; + internal NetPeer PrevPeer; + + internal byte ConnectionNum + { + get => _connectNum; + private set + { + _connectNum = value; + _mergeData.ConnectionNumber = value; + _pingPacket.ConnectionNumber = value; + _pongPacket.ConnectionNumber = value; + } + } + + //Channels + private readonly Queue _unreliableChannel; + private readonly ConcurrentQueue _channelSendQueue; + private readonly BaseChannel[] _channels; + + //MTU + private int _mtu; + private int _mtuIdx; + private bool _finishMtu; + private int _mtuCheckTimer; + private int _mtuCheckAttempts; + private const int MtuCheckDelay = 1000; + private const int MaxMtuCheckAttempts = 4; + private readonly object _mtuMutex = new object(); + + //Fragment + private class IncomingFragments + { + public NetPacket[] Fragments; + public int ReceivedCount; + public int TotalSize; + public byte ChannelId; + } + private int _fragmentId; + private readonly Dictionary _holdedFragments; + private readonly Dictionary _deliveredFragments; + + //Merging + private readonly NetPacket _mergeData; + private int _mergePos; + private int _mergeCount; + + //Connection + private IPEndPoint _remoteEndPoint; + private int _connectAttempts; + private int _connectTimer; + private long _connectTime; + private byte _connectNum; + private ConnectionState _connectionState; + private NetPacket _shutdownPacket; + private const int ShutdownDelay = 300; + private int _shutdownTimer; + private readonly NetPacket _pingPacket; + private readonly NetPacket _pongPacket; + private readonly NetPacket _connectRequestPacket; + private readonly NetPacket _connectAcceptPacket; + + /// + /// Peer ip address and port + /// + public IPEndPoint EndPoint => _remoteEndPoint; + + /// + /// Peer parent NetManager + /// + public readonly NetManager NetManager; + + /// + /// Current connection state + /// + public ConnectionState ConnectionState => _connectionState; + + /// + /// Connection time for internal purposes + /// + internal long ConnectTime => _connectTime; + + /// + /// Peer id can be used as key in your dictionary of peers + /// + public readonly int Id; + + /// + /// Id assigned from server + /// + public int RemoteId { get; private set; } + + /// + /// Current one-way ping (RTT/2) in milliseconds + /// + public int Ping => _avgRtt/2; + + /// + /// Round trip time in milliseconds + /// + public int RoundTripTime => _avgRtt; + + /// + /// Current MTU - Maximum Transfer Unit ( maximum udp packet size without fragmentation ) + /// + public int Mtu => _mtu; + + /// + /// Delta with remote time in ticks (not accurate) + /// positive - remote time > our time + /// + public long RemoteTimeDelta => _remoteDelta; + + /// + /// Remote UTC time (not accurate) + /// + public DateTime RemoteUtcTime => new DateTime(DateTime.UtcNow.Ticks + _remoteDelta); + + /// + /// Time since last packet received (including internal library packets) + /// + public int TimeSinceLastPacket => _timeSinceLastPacket; + + internal double ResendDelay => _resendDelay; + + /// + /// Application defined object containing data about the connection + /// + public object Tag; + + /// + /// Statistics of peer connection + /// + public readonly NetStatistics Statistics; + + //incoming connection constructor + internal NetPeer(NetManager netManager, IPEndPoint remoteEndPoint, int id) + { + Id = id; + Statistics = new NetStatistics(); + NetManager = netManager; + ResetMtu(); + _remoteEndPoint = remoteEndPoint; + _connectionState = ConnectionState.Connected; + _mergeData = new NetPacket(PacketProperty.Merged, NetConstants.MaxPacketSize); + _pongPacket = new NetPacket(PacketProperty.Pong, 0); + _pingPacket = new NetPacket(PacketProperty.Ping, 0) {Sequence = 1}; + + _unreliableChannel = new Queue(); + _holdedFragments = new Dictionary(); + _deliveredFragments = new Dictionary(); + + _channels = new BaseChannel[netManager.ChannelsCount * NetConstants.ChannelTypeCount]; + _channelSendQueue = new ConcurrentQueue(); + } + + internal void InitiateEndPointChange() + { + ResetMtu(); + _connectionState = ConnectionState.EndPointChange; + } + + internal void FinishEndPointChange(IPEndPoint newEndPoint) + { + if (_connectionState != ConnectionState.EndPointChange) + return; + _connectionState = ConnectionState.Connected; + _remoteEndPoint = newEndPoint; + } + + internal void ResetMtu() + { + _finishMtu = false; + if (NetManager.MtuOverride > 0) + OverrideMtu(NetManager.MtuOverride); + else if (NetManager.UseSafeMtu) + SetMtu(0); + else + SetMtu(1); + } + + private void SetMtu(int mtuIdx) + { + _mtuIdx = mtuIdx; + _mtu = NetConstants.PossibleMtu[mtuIdx] - NetManager.ExtraPacketSizeForLayer; + } + + private void OverrideMtu(int mtuValue) + { + _mtu = mtuValue; + _finishMtu = true; + } + + /// + /// Returns packets count in queue for reliable channel + /// + /// number of channel 0-63 + /// type of channel ReliableOrdered or ReliableUnordered + /// packets count in channel queue + public int GetPacketsCountInReliableQueue(byte channelNumber, bool ordered) + { + int idx = channelNumber * NetConstants.ChannelTypeCount + + (byte) (ordered ? DeliveryMethod.ReliableOrdered : DeliveryMethod.ReliableUnordered); + var channel = _channels[idx]; + return channel != null ? ((ReliableChannel)channel).PacketsInQueue : 0; + } + + /// + /// Create temporary packet (maximum size MTU - headerSize) to send later without additional copies + /// + /// Delivery method (reliable, unreliable, etc.) + /// Number of channel (from 0 to channelsCount - 1) + /// PooledPacket that you can use to write data starting from UserDataOffset + public PooledPacket CreatePacketFromPool(DeliveryMethod deliveryMethod, byte channelNumber) + { + //multithreaded variable + int mtu = _mtu; + var packet = NetManager.PoolGetPacket(mtu); + if (deliveryMethod == DeliveryMethod.Unreliable) + { + packet.Property = PacketProperty.Unreliable; + return new PooledPacket(packet, mtu, 0); + } + else + { + packet.Property = PacketProperty.Channeled; + return new PooledPacket(packet, mtu, (byte)(channelNumber * NetConstants.ChannelTypeCount + (byte)deliveryMethod)); + } + } + + /// + /// Sends pooled packet without data copy + /// + /// packet to send + /// size of user data you want to send + public void SendPooledPacket(PooledPacket packet, int userDataSize) + { + if (_connectionState != ConnectionState.Connected) + return; + packet._packet.Size = packet.UserDataOffset + userDataSize; + if (packet._packet.Property == PacketProperty.Channeled) + { + CreateChannel(packet._channelNumber).AddToQueue(packet._packet); + } + else + { + lock(_unreliableChannel) + _unreliableChannel.Enqueue(packet._packet); + } + } + + private BaseChannel CreateChannel(byte idx) + { + BaseChannel newChannel = _channels[idx]; + if (newChannel != null) + return newChannel; + switch ((DeliveryMethod)(idx % NetConstants.ChannelTypeCount)) + { + case DeliveryMethod.ReliableUnordered: + newChannel = new ReliableChannel(this, false, idx); + break; + case DeliveryMethod.Sequenced: + newChannel = new SequencedChannel(this, false, idx); + break; + case DeliveryMethod.ReliableOrdered: + newChannel = new ReliableChannel(this, true, idx); + break; + case DeliveryMethod.ReliableSequenced: + newChannel = new SequencedChannel(this, true, idx); + break; + } + BaseChannel prevChannel = Interlocked.CompareExchange(ref _channels[idx], newChannel, null); + if (prevChannel != null) + return prevChannel; + + return newChannel; + } + + //"Connect to" constructor + internal NetPeer(NetManager netManager, IPEndPoint remoteEndPoint, int id, byte connectNum, NetDataWriter connectData) + : this(netManager, remoteEndPoint, id) + { + _connectTime = DateTime.UtcNow.Ticks; + _connectionState = ConnectionState.Outgoing; + ConnectionNum = connectNum; + + //Make initial packet + _connectRequestPacket = NetConnectRequestPacket.Make(connectData, remoteEndPoint.Serialize(), _connectTime, id); + _connectRequestPacket.ConnectionNumber = connectNum; + + //Send request + NetManager.SendRaw(_connectRequestPacket, _remoteEndPoint); + + NetDebug.Write(NetLogLevel.Trace, $"[CC] ConnectId: {_connectTime}, ConnectNum: {connectNum}"); + } + + //"Accept" incoming constructor + internal NetPeer(NetManager netManager, ConnectionRequest request, int id) + : this(netManager, request.RemoteEndPoint, id) + { + _connectTime = request.InternalPacket.ConnectionTime; + ConnectionNum = request.InternalPacket.ConnectionNumber; + RemoteId = request.InternalPacket.PeerId; + + //Make initial packet + _connectAcceptPacket = NetConnectAcceptPacket.Make(_connectTime, ConnectionNum, id); + + //Make Connected + _connectionState = ConnectionState.Connected; + + //Send + NetManager.SendRaw(_connectAcceptPacket, _remoteEndPoint); + + NetDebug.Write(NetLogLevel.Trace, $"[CC] ConnectId: {_connectTime}"); + } + + //Reject + internal void Reject(NetConnectRequestPacket requestData, byte[] data, int start, int length) + { + _connectTime = requestData.ConnectionTime; + _connectNum = requestData.ConnectionNumber; + Shutdown(data, start, length, false); + } + + internal bool ProcessConnectAccept(NetConnectAcceptPacket packet) + { + if (_connectionState != ConnectionState.Outgoing) + return false; + + //check connection id + if (packet.ConnectionTime != _connectTime) + { + NetDebug.Write(NetLogLevel.Trace, $"[NC] Invalid connectId: {packet.ConnectionTime} != our({_connectTime})"); + return false; + } + //check connect num + ConnectionNum = packet.ConnectionNumber; + RemoteId = packet.PeerId; + + NetDebug.Write(NetLogLevel.Trace, "[NC] Received connection accept"); + Interlocked.Exchange(ref _timeSinceLastPacket, 0); + _connectionState = ConnectionState.Connected; + return true; + } + + /// + /// Gets maximum size of packet that will be not fragmented. + /// + /// Type of packet that you want send + /// size in bytes + public int GetMaxSinglePacketSize(DeliveryMethod options) + { + return _mtu - NetPacket.GetHeaderSize(options == DeliveryMethod.Unreliable ? PacketProperty.Unreliable : PacketProperty.Channeled); + } + + /// + /// Send data to peer with delivery event called + /// + /// Data + /// Number of channel (from 0 to channelsCount - 1) + /// Delivery method (reliable, unreliable, etc.) + /// User data that will be received in DeliveryEvent + /// + /// If you trying to send unreliable packet type + /// + public void SendWithDeliveryEvent(byte[] data, byte channelNumber, DeliveryMethod deliveryMethod, object userData) + { + if (deliveryMethod != DeliveryMethod.ReliableOrdered && deliveryMethod != DeliveryMethod.ReliableUnordered) + throw new ArgumentException("Delivery event will work only for ReliableOrdered/Unordered packets"); + SendInternal(data, 0, data.Length, channelNumber, deliveryMethod, userData); + } + + /// + /// Send data to peer with delivery event called + /// + /// Data + /// Start of data + /// Length of data + /// Number of channel (from 0 to channelsCount - 1) + /// Delivery method (reliable, unreliable, etc.) + /// User data that will be received in DeliveryEvent + /// + /// If you trying to send unreliable packet type + /// + public void SendWithDeliveryEvent(byte[] data, int start, int length, byte channelNumber, DeliveryMethod deliveryMethod, object userData) + { + if (deliveryMethod != DeliveryMethod.ReliableOrdered && deliveryMethod != DeliveryMethod.ReliableUnordered) + throw new ArgumentException("Delivery event will work only for ReliableOrdered/Unordered packets"); + SendInternal(data, start, length, channelNumber, deliveryMethod, userData); + } + + /// + /// Send data to peer with delivery event called + /// + /// Data + /// Number of channel (from 0 to channelsCount - 1) + /// Delivery method (reliable, unreliable, etc.) + /// User data that will be received in DeliveryEvent + /// + /// If you trying to send unreliable packet type + /// + public void SendWithDeliveryEvent(NetDataWriter dataWriter, byte channelNumber, DeliveryMethod deliveryMethod, object userData) + { + if (deliveryMethod != DeliveryMethod.ReliableOrdered && deliveryMethod != DeliveryMethod.ReliableUnordered) + throw new ArgumentException("Delivery event will work only for ReliableOrdered/Unordered packets"); + SendInternal(dataWriter.Data, 0, dataWriter.Length, channelNumber, deliveryMethod, userData); + } + + /// + /// Send data to peer (channel - 0) + /// + /// Data + /// Send options (reliable, unreliable, etc.) + /// + /// If size exceeds maximum limit: + /// MTU - headerSize bytes for Unreliable + /// Fragment count exceeded ushort.MaxValue + /// + public void Send(byte[] data, DeliveryMethod deliveryMethod) + { + SendInternal(data, 0, data.Length, 0, deliveryMethod, null); + } + + /// + /// Send data to peer (channel - 0) + /// + /// DataWriter with data + /// Send options (reliable, unreliable, etc.) + /// + /// If size exceeds maximum limit: + /// MTU - headerSize bytes for Unreliable + /// Fragment count exceeded ushort.MaxValue + /// + public void Send(NetDataWriter dataWriter, DeliveryMethod deliveryMethod) + { + SendInternal(dataWriter.Data, 0, dataWriter.Length, 0, deliveryMethod, null); + } + + /// + /// Send data to peer (channel - 0) + /// + /// Data + /// Start of data + /// Length of data + /// Send options (reliable, unreliable, etc.) + /// + /// If size exceeds maximum limit: + /// MTU - headerSize bytes for Unreliable + /// Fragment count exceeded ushort.MaxValue + /// + public void Send(byte[] data, int start, int length, DeliveryMethod options) + { + SendInternal(data, start, length, 0, options, null); + } + + /// + /// Send data to peer + /// + /// Data + /// Number of channel (from 0 to channelsCount - 1) + /// Send options (reliable, unreliable, etc.) + /// + /// If size exceeds maximum limit: + /// MTU - headerSize bytes for Unreliable + /// Fragment count exceeded ushort.MaxValue + /// + public void Send(byte[] data, byte channelNumber, DeliveryMethod deliveryMethod) + { + SendInternal(data, 0, data.Length, channelNumber, deliveryMethod, null); + } + + /// + /// Send data to peer + /// + /// DataWriter with data + /// Number of channel (from 0 to channelsCount - 1) + /// Send options (reliable, unreliable, etc.) + /// + /// If size exceeds maximum limit: + /// MTU - headerSize bytes for Unreliable + /// Fragment count exceeded ushort.MaxValue + /// + public void Send(NetDataWriter dataWriter, byte channelNumber, DeliveryMethod deliveryMethod) + { + SendInternal(dataWriter.Data, 0, dataWriter.Length, channelNumber, deliveryMethod, null); + } + + /// + /// Send data to peer + /// + /// Data + /// Start of data + /// Length of data + /// Number of channel (from 0 to channelsCount - 1) + /// Delivery method (reliable, unreliable, etc.) + /// + /// If size exceeds maximum limit: + /// MTU - headerSize bytes for Unreliable + /// Fragment count exceeded ushort.MaxValue + /// + public void Send(byte[] data, int start, int length, byte channelNumber, DeliveryMethod deliveryMethod) + { + SendInternal(data, start, length, channelNumber, deliveryMethod, null); + } + + private void SendInternal( + byte[] data, + int start, + int length, + byte channelNumber, + DeliveryMethod deliveryMethod, + object userData) + { + if (_connectionState != ConnectionState.Connected || channelNumber >= _channels.Length) + return; + + //Select channel + PacketProperty property; + BaseChannel channel = null; + + if (deliveryMethod == DeliveryMethod.Unreliable) + { + property = PacketProperty.Unreliable; + } + else + { + property = PacketProperty.Channeled; + channel = CreateChannel((byte)(channelNumber * NetConstants.ChannelTypeCount + (byte)deliveryMethod)); + } + + //Prepare + NetDebug.Write("[RS]Packet: " + property); + + //Check fragmentation + int headerSize = NetPacket.GetHeaderSize(property); + //Save mtu for multithread + int mtu = _mtu; + if (length + headerSize > mtu) + { + //if cannot be fragmented + if (deliveryMethod != DeliveryMethod.ReliableOrdered && deliveryMethod != DeliveryMethod.ReliableUnordered) + throw new TooBigPacketException("Unreliable or ReliableSequenced packet size exceeded maximum of " + (mtu - headerSize) + " bytes, Check allowed size by GetMaxSinglePacketSize()"); + + int packetFullSize = mtu - headerSize; + int packetDataSize = packetFullSize - NetConstants.FragmentHeaderSize; + int totalPackets = length / packetDataSize + (length % packetDataSize == 0 ? 0 : 1); + + NetDebug.Write($@"FragmentSend: + MTU: {mtu} + headerSize: {headerSize} + packetFullSize: {packetFullSize} + packetDataSize: {packetDataSize} + totalPackets: {totalPackets}"); + + if (totalPackets > ushort.MaxValue) + throw new TooBigPacketException("Data was split in " + totalPackets + " fragments, which exceeds " + ushort.MaxValue); + + ushort currentFragmentId = (ushort)Interlocked.Increment(ref _fragmentId); + + for(ushort partIdx = 0; partIdx < totalPackets; partIdx++) + { + int sendLength = length > packetDataSize ? packetDataSize : length; + + NetPacket p = NetManager.PoolGetPacket(headerSize + sendLength + NetConstants.FragmentHeaderSize); + p.Property = property; + p.UserData = userData; + p.FragmentId = currentFragmentId; + p.FragmentPart = partIdx; + p.FragmentsTotal = (ushort)totalPackets; + p.MarkFragmented(); + + Buffer.BlockCopy(data, start + partIdx * packetDataSize, p.RawData, NetConstants.FragmentedHeaderTotalSize, sendLength); + channel.AddToQueue(p); + + length -= sendLength; + } + return; + } + + //Else just send + NetPacket packet = NetManager.PoolGetPacket(headerSize + length); + packet.Property = property; + Buffer.BlockCopy(data, start, packet.RawData, headerSize, length); + packet.UserData = userData; + + if (channel == null) //unreliable + { + lock(_unreliableChannel) + _unreliableChannel.Enqueue(packet); + } + else + { + channel.AddToQueue(packet); + } + } + +#if LITENETLIB_SPANS || NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER || NETCOREAPP2_1 || NETCOREAPP3_1 || NET5_0 || NETSTANDARD2_1 + /// + /// Send data to peer with delivery event called + /// + /// Data + /// Number of channel (from 0 to channelsCount - 1) + /// Delivery method (reliable, unreliable, etc.) + /// User data that will be received in DeliveryEvent + /// + /// If you trying to send unreliable packet type + /// + public void SendWithDeliveryEvent(ReadOnlySpan data, byte channelNumber, DeliveryMethod deliveryMethod, object userData) + { + if (deliveryMethod != DeliveryMethod.ReliableOrdered && deliveryMethod != DeliveryMethod.ReliableUnordered) + throw new ArgumentException("Delivery event will work only for ReliableOrdered/Unordered packets"); + SendInternal(data, channelNumber, deliveryMethod, userData); + } + + /// + /// Send data to peer (channel - 0) + /// + /// Data + /// Send options (reliable, unreliable, etc.) + /// + /// If size exceeds maximum limit: + /// MTU - headerSize bytes for Unreliable + /// Fragment count exceeded ushort.MaxValue + /// + public void Send(ReadOnlySpan data, DeliveryMethod deliveryMethod) + { + SendInternal(data, 0, deliveryMethod, null); + } + + /// + /// Send data to peer + /// + /// Data + /// Number of channel (from 0 to channelsCount - 1) + /// Send options (reliable, unreliable, etc.) + /// + /// If size exceeds maximum limit: + /// MTU - headerSize bytes for Unreliable + /// Fragment count exceeded ushort.MaxValue + /// + public void Send(ReadOnlySpan data, byte channelNumber, DeliveryMethod deliveryMethod) + { + SendInternal(data, channelNumber, deliveryMethod, null); + } + + private void SendInternal( + ReadOnlySpan data, + byte channelNumber, + DeliveryMethod deliveryMethod, + object userData) + { + if (_connectionState != ConnectionState.Connected || channelNumber >= _channels.Length) + return; + + //Select channel + PacketProperty property; + BaseChannel channel = null; + + if (deliveryMethod == DeliveryMethod.Unreliable) + { + property = PacketProperty.Unreliable; + } + else + { + property = PacketProperty.Channeled; + channel = CreateChannel((byte)(channelNumber * NetConstants.ChannelTypeCount + (byte)deliveryMethod)); + } + + //Prepare + NetDebug.Write("[RS]Packet: " + property); + + //Check fragmentation + int headerSize = NetPacket.GetHeaderSize(property); + //Save mtu for multithread + int mtu = _mtu; + int length = data.Length; + if (length + headerSize > mtu) + { + //if cannot be fragmented + if (deliveryMethod != DeliveryMethod.ReliableOrdered && deliveryMethod != DeliveryMethod.ReliableUnordered) + throw new TooBigPacketException("Unreliable or ReliableSequenced packet size exceeded maximum of " + (mtu - headerSize) + " bytes, Check allowed size by GetMaxSinglePacketSize()"); + + int packetFullSize = mtu - headerSize; + int packetDataSize = packetFullSize - NetConstants.FragmentHeaderSize; + int totalPackets = length / packetDataSize + (length % packetDataSize == 0 ? 0 : 1); + + if (totalPackets > ushort.MaxValue) + throw new TooBigPacketException("Data was split in " + totalPackets + " fragments, which exceeds " + ushort.MaxValue); + + ushort currentFragmentId = (ushort)Interlocked.Increment(ref _fragmentId); + + for (ushort partIdx = 0; partIdx < totalPackets; partIdx++) + { + int sendLength = length > packetDataSize ? packetDataSize : length; + + NetPacket p = NetManager.PoolGetPacket(headerSize + sendLength + NetConstants.FragmentHeaderSize); + p.Property = property; + p.UserData = userData; + p.FragmentId = currentFragmentId; + p.FragmentPart = partIdx; + p.FragmentsTotal = (ushort)totalPackets; + p.MarkFragmented(); + + data.Slice(partIdx * packetDataSize, sendLength).CopyTo(new Span(p.RawData, NetConstants.FragmentedHeaderTotalSize, sendLength)); + channel.AddToQueue(p); + + length -= sendLength; + } + return; + } + + //Else just send + NetPacket packet = NetManager.PoolGetPacket(headerSize + length); + packet.Property = property; + data.CopyTo(new Span(packet.RawData, headerSize, length)); + packet.UserData = userData; + + if (channel == null) //unreliable + { + lock(_unreliableChannel) + _unreliableChannel.Enqueue(packet); + } + else + { + channel.AddToQueue(packet); + } + } +#endif + + public void Disconnect(byte[] data) + { + NetManager.DisconnectPeer(this, data); + } + + public void Disconnect(NetDataWriter writer) + { + NetManager.DisconnectPeer(this, writer); + } + + public void Disconnect(byte[] data, int start, int count) + { + NetManager.DisconnectPeer(this, data, start, count); + } + + public void Disconnect() + { + NetManager.DisconnectPeer(this); + } + + internal DisconnectResult ProcessDisconnect(NetPacket packet) + { + if ((_connectionState == ConnectionState.Connected || _connectionState == ConnectionState.Outgoing) && + packet.Size >= 9 && + BitConverter.ToInt64(packet.RawData, 1) == _connectTime && + packet.ConnectionNumber == _connectNum) + { + return _connectionState == ConnectionState.Connected + ? DisconnectResult.Disconnect + : DisconnectResult.Reject; + } + return DisconnectResult.None; + } + + internal void AddToReliableChannelSendQueue(BaseChannel channel) + { + _channelSendQueue.Enqueue(channel); + } + + internal ShutdownResult Shutdown(byte[] data, int start, int length, bool force) + { + lock (_shutdownLock) + { + //trying to shutdown already disconnected + if (_connectionState == ConnectionState.Disconnected || + _connectionState == ConnectionState.ShutdownRequested) + { + return ShutdownResult.None; + } + + var result = _connectionState == ConnectionState.Connected + ? ShutdownResult.WasConnected + : ShutdownResult.Success; + + //don't send anything + if (force) + { + _connectionState = ConnectionState.Disconnected; + return result; + } + + //reset time for reconnect protection + Interlocked.Exchange(ref _timeSinceLastPacket, 0); + + //send shutdown packet + _shutdownPacket = new NetPacket(PacketProperty.Disconnect, length) {ConnectionNumber = _connectNum}; + FastBitConverter.GetBytes(_shutdownPacket.RawData, 1, _connectTime); + if (_shutdownPacket.Size >= _mtu) + { + //Drop additional data + NetDebug.WriteError("[Peer] Disconnect additional data size more than MTU - 8!"); + } + else if (data != null && length > 0) + { + Buffer.BlockCopy(data, start, _shutdownPacket.RawData, 9, length); + } + _connectionState = ConnectionState.ShutdownRequested; + NetDebug.Write("[Peer] Send disconnect"); + NetManager.SendRaw(_shutdownPacket, _remoteEndPoint); + return result; + } + } + + private void UpdateRoundTripTime(int roundTripTime) + { + _rtt += roundTripTime; + _rttCount++; + _avgRtt = _rtt/_rttCount; + _resendDelay = 25.0 + _avgRtt * 2.1; // 25 ms + double rtt + } + + internal void AddReliablePacket(DeliveryMethod method, NetPacket p) + { + if (p.IsFragmented) + { + NetDebug.Write($"Fragment. Id: {p.FragmentId}, Part: {p.FragmentPart}, Total: {p.FragmentsTotal}"); + //Get needed array from dictionary + ushort packetFragId = p.FragmentId; + byte packetChannelId = p.ChannelId; + if (!_holdedFragments.TryGetValue(packetFragId, out var incomingFragments)) + { + incomingFragments = new IncomingFragments + { + Fragments = new NetPacket[p.FragmentsTotal], + ChannelId = p.ChannelId + }; + _holdedFragments.Add(packetFragId, incomingFragments); + } + + //Cache + var fragments = incomingFragments.Fragments; + + //Error check + if (p.FragmentPart >= fragments.Length || + fragments[p.FragmentPart] != null || + p.ChannelId != incomingFragments.ChannelId) + { + NetManager.PoolRecycle(p); + NetDebug.WriteError("Invalid fragment packet"); + return; + } + //Fill array + fragments[p.FragmentPart] = p; + + //Increase received fragments count + incomingFragments.ReceivedCount++; + + //Increase total size + incomingFragments.TotalSize += p.Size - NetConstants.FragmentedHeaderTotalSize; + + //Check for finish + if (incomingFragments.ReceivedCount != fragments.Length) + return; + + //just simple packet + NetPacket resultingPacket = NetManager.PoolGetPacket(incomingFragments.TotalSize); + + int pos = 0; + for (int i = 0; i < incomingFragments.ReceivedCount; i++) + { + var fragment = fragments[i]; + int writtenSize = fragment.Size - NetConstants.FragmentedHeaderTotalSize; + + if (pos+writtenSize > resultingPacket.RawData.Length) + { + _holdedFragments.Remove(packetFragId); + NetDebug.WriteError($"Fragment error pos: {pos + writtenSize} >= resultPacketSize: {resultingPacket.RawData.Length} , totalSize: {incomingFragments.TotalSize}"); + return; + } + if (fragment.Size > fragment.RawData.Length) + { + _holdedFragments.Remove(packetFragId); + NetDebug.WriteError($"Fragment error size: {fragment.Size} > fragment.RawData.Length: {fragment.RawData.Length}"); + return; + } + + //Create resulting big packet + Buffer.BlockCopy( + fragment.RawData, + NetConstants.FragmentedHeaderTotalSize, + resultingPacket.RawData, + pos, + writtenSize); + pos += writtenSize; + + //Free memory + NetManager.PoolRecycle(fragment); + fragments[i] = null; + } + + //Clear memory + _holdedFragments.Remove(packetFragId); + + //Send to process + NetManager.CreateReceiveEvent(resultingPacket, method, (byte)(packetChannelId / NetConstants.ChannelTypeCount), 0, this); + } + else //Just simple packet + { + NetManager.CreateReceiveEvent(p, method, (byte)(p.ChannelId / NetConstants.ChannelTypeCount), NetConstants.ChanneledHeaderSize, this); + } + } + + private void ProcessMtuPacket(NetPacket packet) + { + //header + int + if (packet.Size < NetConstants.PossibleMtu[0]) + return; + + //first stage check (mtu check and mtu ok) + int receivedMtu = BitConverter.ToInt32(packet.RawData, 1); + int endMtuCheck = BitConverter.ToInt32(packet.RawData, packet.Size - 4); + if (receivedMtu != packet.Size || receivedMtu != endMtuCheck || receivedMtu > NetConstants.MaxPacketSize) + { + NetDebug.WriteError($"[MTU] Broken packet. RMTU {receivedMtu}, EMTU {endMtuCheck}, PSIZE {packet.Size}"); + return; + } + + if (packet.Property == PacketProperty.MtuCheck) + { + _mtuCheckAttempts = 0; + NetDebug.Write("[MTU] check. send back: " + receivedMtu); + packet.Property = PacketProperty.MtuOk; + NetManager.SendRawAndRecycle(packet, _remoteEndPoint); + } + else if(receivedMtu > _mtu && !_finishMtu) //MtuOk + { + //invalid packet + if (receivedMtu != NetConstants.PossibleMtu[_mtuIdx + 1] - NetManager.ExtraPacketSizeForLayer) + return; + + lock (_mtuMutex) + { + SetMtu(_mtuIdx+1); + } + //if maxed - finish. + if (_mtuIdx == NetConstants.PossibleMtu.Length - 1) + _finishMtu = true; + NetManager.PoolRecycle(packet); + NetDebug.Write("[MTU] ok. Increase to: " + _mtu); + } + } + + private void UpdateMtuLogic(int deltaTime) + { + if (_finishMtu) + return; + + _mtuCheckTimer += deltaTime; + if (_mtuCheckTimer < MtuCheckDelay) + return; + + _mtuCheckTimer = 0; + _mtuCheckAttempts++; + if (_mtuCheckAttempts >= MaxMtuCheckAttempts) + { + _finishMtu = true; + return; + } + + lock (_mtuMutex) + { + if (_mtuIdx >= NetConstants.PossibleMtu.Length - 1) + return; + + //Send increased packet + int newMtu = NetConstants.PossibleMtu[_mtuIdx + 1] - NetManager.ExtraPacketSizeForLayer; + var p = NetManager.PoolGetPacket(newMtu); + p.Property = PacketProperty.MtuCheck; + FastBitConverter.GetBytes(p.RawData, 1, newMtu); //place into start + FastBitConverter.GetBytes(p.RawData, p.Size - 4, newMtu);//and end of packet + + //Must check result for MTU fix + if (NetManager.SendRawAndRecycle(p, _remoteEndPoint) <= 0) + _finishMtu = true; + } + } + + internal ConnectRequestResult ProcessConnectRequest(NetConnectRequestPacket connRequest) + { + //current or new request + switch (_connectionState) + { + //P2P case + case ConnectionState.Outgoing: + //fast check + if (connRequest.ConnectionTime < _connectTime) + { + return ConnectRequestResult.P2PLose; + } + //slow rare case check + if (connRequest.ConnectionTime == _connectTime) + { + var remoteBytes = _remoteEndPoint.Serialize(); + var localBytes = connRequest.TargetAddress; + for (int i = remoteBytes.Size-1; i >= 0; i--) + { + byte rb = remoteBytes[i]; + if (rb == localBytes[i]) + continue; + if (rb < localBytes[i]) + return ConnectRequestResult.P2PLose; + } + } + break; + + case ConnectionState.Connected: + //Old connect request + if (connRequest.ConnectionTime == _connectTime) + { + //just reply accept + NetManager.SendRaw(_connectAcceptPacket, _remoteEndPoint); + } + //New connect request + else if (connRequest.ConnectionTime > _connectTime) + { + return ConnectRequestResult.Reconnection; + } + break; + + case ConnectionState.Disconnected: + case ConnectionState.ShutdownRequested: + if (connRequest.ConnectionTime >= _connectTime) + return ConnectRequestResult.NewConnection; + break; + } + return ConnectRequestResult.None; + } + + //Process incoming packet + internal void ProcessPacket(NetPacket packet) + { + //not initialized + if (_connectionState == ConnectionState.Outgoing || _connectionState == ConnectionState.Disconnected) + { + NetManager.PoolRecycle(packet); + return; + } + if (packet.Property == PacketProperty.ShutdownOk) + { + if (_connectionState == ConnectionState.ShutdownRequested) + _connectionState = ConnectionState.Disconnected; + NetManager.PoolRecycle(packet); + return; + } + if (packet.ConnectionNumber != _connectNum) + { + NetDebug.Write(NetLogLevel.Trace, "[RR]Old packet"); + NetManager.PoolRecycle(packet); + return; + } + Interlocked.Exchange(ref _timeSinceLastPacket, 0); + + NetDebug.Write($"[RR]PacketProperty: {packet.Property}"); + switch (packet.Property) + { + case PacketProperty.Merged: + int pos = NetConstants.HeaderSize; + while (pos < packet.Size) + { + ushort size = BitConverter.ToUInt16(packet.RawData, pos); + pos += 2; + if (packet.RawData.Length - pos < size) + break; + + NetPacket mergedPacket = NetManager.PoolGetPacket(size); + Buffer.BlockCopy(packet.RawData, pos, mergedPacket.RawData, 0, size); + mergedPacket.Size = size; + + if (!mergedPacket.Verify()) + break; + + pos += size; + ProcessPacket(mergedPacket); + } + NetManager.PoolRecycle(packet); + break; + //If we get ping, send pong + case PacketProperty.Ping: + if (NetUtils.RelativeSequenceNumber(packet.Sequence, _pongPacket.Sequence) > 0) + { + NetDebug.Write("[PP]Ping receive, send pong"); + FastBitConverter.GetBytes(_pongPacket.RawData, 3, DateTime.UtcNow.Ticks); + _pongPacket.Sequence = packet.Sequence; + NetManager.SendRaw(_pongPacket, _remoteEndPoint); + } + NetManager.PoolRecycle(packet); + break; + + //If we get pong, calculate ping time and rtt + case PacketProperty.Pong: + if (packet.Sequence == _pingPacket.Sequence) + { + _pingTimer.Stop(); + int elapsedMs = (int)_pingTimer.ElapsedMilliseconds; + _remoteDelta = BitConverter.ToInt64(packet.RawData, 3) + (elapsedMs * TimeSpan.TicksPerMillisecond ) / 2 - DateTime.UtcNow.Ticks; + UpdateRoundTripTime(elapsedMs); + NetManager.ConnectionLatencyUpdated(this, elapsedMs / 2); + NetDebug.Write($"[PP]Ping: {packet.Sequence} - {elapsedMs} - {_remoteDelta}"); + } + NetManager.PoolRecycle(packet); + break; + + case PacketProperty.Ack: + case PacketProperty.Channeled: + if (packet.ChannelId > _channels.Length) + { + NetManager.PoolRecycle(packet); + break; + } + var channel = _channels[packet.ChannelId] ?? (packet.Property == PacketProperty.Ack ? null : CreateChannel(packet.ChannelId)); + if (channel != null) + { + if (!channel.ProcessPacket(packet)) + NetManager.PoolRecycle(packet); + } + break; + + //Simple packet without acks + case PacketProperty.Unreliable: + NetManager.CreateReceiveEvent(packet, DeliveryMethod.Unreliable, 0, NetConstants.HeaderSize, this); + return; + + case PacketProperty.MtuCheck: + case PacketProperty.MtuOk: + ProcessMtuPacket(packet); + break; + + default: + NetDebug.WriteError("Error! Unexpected packet type: " + packet.Property); + break; + } + } + + private void SendMerged() + { + if (_mergeCount == 0) + return; + int bytesSent; + if (_mergeCount > 1) + { + NetDebug.Write("[P]Send merged: " + _mergePos + ", count: " + _mergeCount); + bytesSent = NetManager.SendRaw(_mergeData.RawData, 0, NetConstants.HeaderSize + _mergePos, _remoteEndPoint); + } + else + { + //Send without length information and merging + bytesSent = NetManager.SendRaw(_mergeData.RawData, NetConstants.HeaderSize + 2, _mergePos - 2, _remoteEndPoint); + } + + if (NetManager.EnableStatistics) + { + Statistics.IncrementPacketsSent(); + Statistics.AddBytesSent(bytesSent); + } + + _mergePos = 0; + _mergeCount = 0; + } + + internal void SendUserData(NetPacket packet) + { + packet.ConnectionNumber = _connectNum; + int mergedPacketSize = NetConstants.HeaderSize + packet.Size + 2; + const int sizeTreshold = 20; + if (mergedPacketSize + sizeTreshold >= _mtu) + { + NetDebug.Write(NetLogLevel.Trace, "[P]SendingPacket: " + packet.Property); + int bytesSent = NetManager.SendRaw(packet, _remoteEndPoint); + + if (NetManager.EnableStatistics) + { + Statistics.IncrementPacketsSent(); + Statistics.AddBytesSent(bytesSent); + } + + return; + } + if (_mergePos + mergedPacketSize > _mtu) + SendMerged(); + + FastBitConverter.GetBytes(_mergeData.RawData, _mergePos + NetConstants.HeaderSize, (ushort)packet.Size); + Buffer.BlockCopy(packet.RawData, 0, _mergeData.RawData, _mergePos + NetConstants.HeaderSize + 2, packet.Size); + _mergePos += packet.Size + 2; + _mergeCount++; + //DebugWriteForce("Merged: " + _mergePos + "/" + (_mtu - 2) + ", count: " + _mergeCount); + } + + internal void Update(int deltaTime) + { + Interlocked.Add(ref _timeSinceLastPacket, deltaTime); + switch (_connectionState) + { + case ConnectionState.Connected: + if (_timeSinceLastPacket > NetManager.DisconnectTimeout) + { + NetDebug.Write($"[UPDATE] Disconnect by timeout: {_timeSinceLastPacket} > {NetManager.DisconnectTimeout}"); + NetManager.DisconnectPeerForce(this, DisconnectReason.Timeout, 0, null); + return; + } + break; + + case ConnectionState.ShutdownRequested: + if (_timeSinceLastPacket > NetManager.DisconnectTimeout) + { + _connectionState = ConnectionState.Disconnected; + } + else + { + _shutdownTimer += deltaTime; + if (_shutdownTimer >= ShutdownDelay) + { + _shutdownTimer = 0; + NetManager.SendRaw(_shutdownPacket, _remoteEndPoint); + } + } + return; + + case ConnectionState.Outgoing: + _connectTimer += deltaTime; + if (_connectTimer > NetManager.ReconnectDelay) + { + _connectTimer = 0; + _connectAttempts++; + if (_connectAttempts > NetManager.MaxConnectAttempts) + { + NetManager.DisconnectPeerForce(this, DisconnectReason.ConnectionFailed, 0, null); + return; + } + + //else send connect again + NetManager.SendRaw(_connectRequestPacket, _remoteEndPoint); + } + return; + + case ConnectionState.Disconnected: + return; + } + + //Send ping + _pingSendTimer += deltaTime; + if (_pingSendTimer >= NetManager.PingInterval) + { + NetDebug.Write("[PP] Send ping..."); + //reset timer + _pingSendTimer = 0; + //send ping + _pingPacket.Sequence++; + //ping timeout + if (_pingTimer.IsRunning) + UpdateRoundTripTime((int)_pingTimer.ElapsedMilliseconds); + _pingTimer.Restart(); + NetManager.SendRaw(_pingPacket, _remoteEndPoint); + } + + //RTT - round trip time + _rttResetTimer += deltaTime; + if (_rttResetTimer >= NetManager.PingInterval * 3) + { + _rttResetTimer = 0; + _rtt = _avgRtt; + _rttCount = 1; + } + + UpdateMtuLogic(deltaTime); + + //Pending send + int count = _channelSendQueue.Count; + while (count-- > 0) + { + if (!_channelSendQueue.TryDequeue(out var channel)) + break; + if (channel.SendAndCheckQueue()) + { + // still has something to send, re-add it to the send queue + _channelSendQueue.Enqueue(channel); + } + } + + lock (_unreliableChannel) + { + int unreliableCount = _unreliableChannel.Count; + for (int i = 0; i < unreliableCount; i++) + { + var packet = _unreliableChannel.Dequeue(); + SendUserData(packet); + NetManager.PoolRecycle(packet); + } + } + + SendMerged(); + } + + //For reliable channel + internal void RecycleAndDeliver(NetPacket packet) + { + if (packet.UserData != null) + { + if (packet.IsFragmented) + { + _deliveredFragments.TryGetValue(packet.FragmentId, out ushort fragCount); + fragCount++; + if (fragCount == packet.FragmentsTotal) + { + NetManager.MessageDelivered(this, packet.UserData); + _deliveredFragments.Remove(packet.FragmentId); + } + else + { + _deliveredFragments[packet.FragmentId] = fragCount; + } + } + else + { + NetManager.MessageDelivered(this, packet.UserData); + } + packet.UserData = null; + } + NetManager.PoolRecycle(packet); + } + } +} diff --git a/Transport/LiteNetLib Transport/LiteNetLib/NetPeer.cs.meta b/Transport/LiteNetLib Transport/LiteNetLib/NetPeer.cs.meta new file mode 100644 index 0000000..ed39d97 --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/NetPeer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9595868d4426b0447af6d21086c54949 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Transport/LiteNetLib Transport/LiteNetLib/NetStatistics.cs b/Transport/LiteNetLib Transport/LiteNetLib/NetStatistics.cs new file mode 100644 index 0000000..032e275 --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/NetStatistics.cs @@ -0,0 +1,81 @@ +using System.Threading; + +namespace LiteNetLib +{ + public sealed class NetStatistics + { + private long _packetsSent; + private long _packetsReceived; + private long _bytesSent; + private long _bytesReceived; + private long _packetLoss; + + public long PacketsSent => Interlocked.Read(ref _packetsSent); + public long PacketsReceived => Interlocked.Read(ref _packetsReceived); + public long BytesSent => Interlocked.Read(ref _bytesSent); + public long BytesReceived => Interlocked.Read(ref _bytesReceived); + public long PacketLoss => Interlocked.Read(ref _packetLoss); + + public long PacketLossPercent + { + get + { + long sent = PacketsSent, loss = PacketLoss; + + return sent == 0 ? 0 : loss * 100 / sent; + } + } + + public void Reset() + { + Interlocked.Exchange(ref _packetsSent, 0); + Interlocked.Exchange(ref _packetsReceived, 0); + Interlocked.Exchange(ref _bytesSent, 0); + Interlocked.Exchange(ref _bytesReceived, 0); + Interlocked.Exchange(ref _packetLoss, 0); + } + + public void IncrementPacketsSent() + { + Interlocked.Increment(ref _packetsSent); + } + + public void IncrementPacketsReceived() + { + Interlocked.Increment(ref _packetsReceived); + } + + public void AddBytesSent(long bytesSent) + { + Interlocked.Add(ref _bytesSent, bytesSent); + } + + public void AddBytesReceived(long bytesReceived) + { + Interlocked.Add(ref _bytesReceived, bytesReceived); + } + + public void IncrementPacketLoss() + { + Interlocked.Increment(ref _packetLoss); + } + + public void AddPacketLoss(long packetLoss) + { + Interlocked.Add(ref _packetLoss, packetLoss); + } + + public override string ToString() + { + return + string.Format( + "BytesReceived: {0}\nPacketsReceived: {1}\nBytesSent: {2}\nPacketsSent: {3}\nPacketLoss: {4}\nPacketLossPercent: {5}\n", + BytesReceived, + PacketsReceived, + BytesSent, + PacketsSent, + PacketLoss, + PacketLossPercent); + } + } +} diff --git a/Transport/LiteNetLib Transport/LiteNetLib/NetStatistics.cs.meta b/Transport/LiteNetLib Transport/LiteNetLib/NetStatistics.cs.meta new file mode 100644 index 0000000..8562491 --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/NetStatistics.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 319dbb0d3626df34ba9ae71a996b7273 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Transport/LiteNetLib Transport/LiteNetLib/NetUtils.cs b/Transport/LiteNetLib Transport/LiteNetLib/NetUtils.cs new file mode 100644 index 0000000..3b752e9 --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/NetUtils.cs @@ -0,0 +1,190 @@ +using System; +using System.Collections.Generic; +using System.Net; +using System.Net.Sockets; +using System.Net.NetworkInformation; + +namespace LiteNetLib +{ + /// + /// Address type that you want to receive from NetUtils.GetLocalIp method + /// + [Flags] + public enum LocalAddrType + { + IPv4 = 1, + IPv6 = 2, + All = IPv4 | IPv6 + } + + /// + /// Some specific network utilities + /// + public static class NetUtils + { + public static IPEndPoint MakeEndPoint(string hostStr, int port) + { + return new IPEndPoint(ResolveAddress(hostStr), port); + } + + public static IPAddress ResolveAddress(string hostStr) + { + if(hostStr == "localhost") + return IPAddress.Loopback; + + if (!IPAddress.TryParse(hostStr, out var ipAddress)) + { + if (NetManager.IPv6Support) + ipAddress = ResolveAddress(hostStr, AddressFamily.InterNetworkV6); + if (ipAddress == null) + ipAddress = ResolveAddress(hostStr, AddressFamily.InterNetwork); + } + if (ipAddress == null) + throw new ArgumentException("Invalid address: " + hostStr); + + return ipAddress; + } + + public static IPAddress ResolveAddress(string hostStr, AddressFamily addressFamily) + { + IPAddress[] addresses = Dns.GetHostEntry(hostStr).AddressList; + foreach (IPAddress ip in addresses) + { + if (ip.AddressFamily == addressFamily) + { + return ip; + } + } + return null; + } + + /// + /// Get all local ip addresses + /// + /// type of address (IPv4, IPv6 or both) + /// List with all local ip addresses + public static List GetLocalIpList(LocalAddrType addrType) + { + List targetList = new List(); + GetLocalIpList(targetList, addrType); + return targetList; + } + + /// + /// Get all local ip addresses (non alloc version) + /// + /// result list + /// type of address (IPv4, IPv6 or both) + public static void GetLocalIpList(IList targetList, LocalAddrType addrType) + { + bool ipv4 = (addrType & LocalAddrType.IPv4) == LocalAddrType.IPv4; + bool ipv6 = (addrType & LocalAddrType.IPv6) == LocalAddrType.IPv6; + try + { + foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces()) + { + //Skip loopback and disabled network interfaces + if (ni.NetworkInterfaceType == NetworkInterfaceType.Loopback || + ni.OperationalStatus != OperationalStatus.Up) + continue; + + var ipProps = ni.GetIPProperties(); + + //Skip address without gateway + if (ipProps.GatewayAddresses.Count == 0) + continue; + + foreach (UnicastIPAddressInformation ip in ipProps.UnicastAddresses) + { + var address = ip.Address; + if ((ipv4 && address.AddressFamily == AddressFamily.InterNetwork) || + (ipv6 && address.AddressFamily == AddressFamily.InterNetworkV6)) + targetList.Add(address.ToString()); + } + } + + //Fallback mode (unity android) + if (targetList.Count == 0) + { + IPAddress[] addresses = Dns.GetHostEntry(Dns.GetHostName()).AddressList; + foreach (IPAddress ip in addresses) + { + if((ipv4 && ip.AddressFamily == AddressFamily.InterNetwork) || + (ipv6 && ip.AddressFamily == AddressFamily.InterNetworkV6)) + targetList.Add(ip.ToString()); + } + } + } + catch + { + //ignored + } + + if (targetList.Count == 0) + { + if(ipv4) + targetList.Add("127.0.0.1"); + if(ipv6) + targetList.Add("::1"); + } + } + + private static readonly List IpList = new List(); + /// + /// Get first detected local ip address + /// + /// type of address (IPv4, IPv6 or both) + /// IP address if available. Else - string.Empty + public static string GetLocalIp(LocalAddrType addrType) + { + lock (IpList) + { + IpList.Clear(); + GetLocalIpList(IpList, addrType); + return IpList.Count == 0 ? string.Empty : IpList[0]; + } + } + + // =========================================== + // Internal and debug log related stuff + // =========================================== + internal static void PrintInterfaceInfos() + { + NetDebug.WriteForce(NetLogLevel.Info, $"IPv6Support: { NetManager.IPv6Support}"); + try + { + foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces()) + { + foreach (UnicastIPAddressInformation ip in ni.GetIPProperties().UnicastAddresses) + { + if (ip.Address.AddressFamily == AddressFamily.InterNetwork || + ip.Address.AddressFamily == AddressFamily.InterNetworkV6) + { + NetDebug.WriteForce( + NetLogLevel.Info, + $"Interface: {ni.Name}, Type: {ni.NetworkInterfaceType}, Ip: {ip.Address}, OpStatus: {ni.OperationalStatus}"); + } + } + } + } + catch (Exception e) + { + NetDebug.WriteForce(NetLogLevel.Info, $"Error while getting interface infos: {e}"); + } + } + + internal static int RelativeSequenceNumber(int number, int expected) + { + return (number - expected + NetConstants.MaxSequence + NetConstants.HalfMaxSequence) % NetConstants.MaxSequence - NetConstants.HalfMaxSequence; + } + + internal static T[] AllocatePinnedUninitializedArray(int count) where T : unmanaged + { +#if NET5_0_OR_GREATER || NET5_0 + return GC.AllocateUninitializedArray(count, true); +#else + return new T[count]; +#endif + } + } +} diff --git a/Transport/LiteNetLib Transport/LiteNetLib/NetUtils.cs.meta b/Transport/LiteNetLib Transport/LiteNetLib/NetUtils.cs.meta new file mode 100644 index 0000000..60ec556 --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/NetUtils.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 06dc3a0405d23f34f83c3f19cd3733d2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Transport/LiteNetLib Transport/LiteNetLib/PausedSocketFix.cs b/Transport/LiteNetLib Transport/LiteNetLib/PausedSocketFix.cs new file mode 100644 index 0000000..dc92122 --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/PausedSocketFix.cs @@ -0,0 +1,57 @@ +#if UNITY_2018_3_OR_NEWER +using System.Net; + +namespace LiteNetLib +{ + public class PausedSocketFix + { + private readonly NetManager _netManager; + private readonly IPAddress _ipv4; + private readonly IPAddress _ipv6; + private readonly int _port; + private readonly bool _manualMode; + private bool _initialized; + + public PausedSocketFix(NetManager netManager, IPAddress ipv4, IPAddress ipv6, int port, bool manualMode) + { + _netManager = netManager; + _ipv4 = ipv4; + _ipv6 = ipv6; + _port = port; + _manualMode = manualMode; + UnityEngine.Application.focusChanged += Application_focusChanged; + _initialized = true; + } + + public void Deinitialize() + { + if (_initialized) + UnityEngine.Application.focusChanged -= Application_focusChanged; + _initialized = false; + } + + private void Application_focusChanged(bool focused) + { + //If coming back into focus see if a reconnect is needed. + if (focused) + { + //try reconnect + if (!_initialized) + return; + //Was intentionally disconnected at some point. + if (!_netManager.IsRunning) + return; + //Socket is in working state. + if (_netManager.NotConnected == false) + return; + + //Socket isn't running but should be. Try to start again. + if (!_netManager.Start(_ipv4, _ipv6, _port, _manualMode)) + { + NetDebug.WriteError($"[S] Cannot restore connection. Ipv4 {_ipv4}, Ipv6 {_ipv6}, Port {_port}, ManualMode {_manualMode}"); + } + } + } + } +} +#endif diff --git a/Transport/LiteNetLib Transport/LiteNetLib/PausedSocketFix.cs.meta b/Transport/LiteNetLib Transport/LiteNetLib/PausedSocketFix.cs.meta new file mode 100644 index 0000000..50c0591 --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/PausedSocketFix.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ab312f4da204c864cb3b3a1a010aba4b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Transport/LiteNetLib Transport/LiteNetLib/PooledPacket.cs b/Transport/LiteNetLib Transport/LiteNetLib/PooledPacket.cs new file mode 100644 index 0000000..26ef7bd --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/PooledPacket.cs @@ -0,0 +1,32 @@ +namespace LiteNetLib +{ + public readonly ref struct PooledPacket + { + internal readonly NetPacket _packet; + internal readonly byte _channelNumber; + + /// + /// Maximum data size that you can put into such packet + /// + public readonly int MaxUserDataSize; + + /// + /// Offset for user data when writing to Data array + /// + public readonly int UserDataOffset; + + /// + /// Raw packet data. Do not modify header! Use UserDataOffset as start point for your data + /// + public byte[] Data => _packet.RawData; + + internal PooledPacket(NetPacket packet, int maxDataSize, byte channelNumber) + { + _packet = packet; + UserDataOffset = _packet.GetHeaderSize(); + _packet.Size = UserDataOffset; + MaxUserDataSize = maxDataSize - UserDataOffset; + _channelNumber = channelNumber; + } + } +} diff --git a/Transport/LiteNetLib Transport/LiteNetLib/PooledPacket.cs.meta b/Transport/LiteNetLib Transport/LiteNetLib/PooledPacket.cs.meta new file mode 100644 index 0000000..046822a --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/PooledPacket.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fb2cf9f0ef17bc84ba55d4d130e3ee98 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Transport/LiteNetLib Transport/LiteNetLib/ReliableChannel.cs b/Transport/LiteNetLib Transport/LiteNetLib/ReliableChannel.cs new file mode 100644 index 0000000..4a10d17 --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/ReliableChannel.cs @@ -0,0 +1,337 @@ +using System; + +namespace LiteNetLib +{ + internal sealed class ReliableChannel : BaseChannel + { + private struct PendingPacket + { + private NetPacket _packet; + private long _timeStamp; + private bool _isSent; + + public override string ToString() + { + return _packet == null ? "Empty" : _packet.Sequence.ToString(); + } + + public void Init(NetPacket packet) + { + _packet = packet; + _isSent = false; + } + + //Returns true if there is a pending packet inside + public bool TrySend(long currentTime, NetPeer peer) + { + if (_packet == null) + return false; + + if (_isSent) //check send time + { + double resendDelay = peer.ResendDelay * TimeSpan.TicksPerMillisecond; + double packetHoldTime = currentTime - _timeStamp; + if (packetHoldTime < resendDelay) + return true; + NetDebug.Write($"[RC]Resend: {packetHoldTime} > {resendDelay}"); + } + _timeStamp = currentTime; + _isSent = true; + peer.SendUserData(_packet); + return true; + } + + public bool Clear(NetPeer peer) + { + if (_packet != null) + { + peer.RecycleAndDeliver(_packet); + _packet = null; + return true; + } + return false; + } + } + + private readonly NetPacket _outgoingAcks; //for send acks + private readonly PendingPacket[] _pendingPackets; //for unacked packets and duplicates + private readonly NetPacket[] _receivedPackets; //for order + private readonly bool[] _earlyReceived; //for unordered + + private int _localSeqence; + private int _remoteSequence; + private int _localWindowStart; + private int _remoteWindowStart; + + private bool _mustSendAcks; + + private readonly DeliveryMethod _deliveryMethod; + private readonly bool _ordered; + private readonly int _windowSize; + private const int BitsInByte = 8; + private readonly byte _id; + + public ReliableChannel(NetPeer peer, bool ordered, byte id) : base(peer) + { + _id = id; + _windowSize = NetConstants.DefaultWindowSize; + _ordered = ordered; + _pendingPackets = new PendingPacket[_windowSize]; + for (int i = 0; i < _pendingPackets.Length; i++) + _pendingPackets[i] = new PendingPacket(); + + if (_ordered) + { + _deliveryMethod = DeliveryMethod.ReliableOrdered; + _receivedPackets = new NetPacket[_windowSize]; + } + else + { + _deliveryMethod = DeliveryMethod.ReliableUnordered; + _earlyReceived = new bool[_windowSize]; + } + + _localWindowStart = 0; + _localSeqence = 0; + _remoteSequence = 0; + _remoteWindowStart = 0; + _outgoingAcks = new NetPacket(PacketProperty.Ack, (_windowSize - 1) / BitsInByte + 2) {ChannelId = id}; + } + + //ProcessAck in packet + private void ProcessAck(NetPacket packet) + { + if (packet.Size != _outgoingAcks.Size) + { + NetDebug.Write("[PA]Invalid acks packet size"); + return; + } + + ushort ackWindowStart = packet.Sequence; + int windowRel = NetUtils.RelativeSequenceNumber(_localWindowStart, ackWindowStart); + if (ackWindowStart >= NetConstants.MaxSequence || windowRel < 0) + { + NetDebug.Write("[PA]Bad window start"); + return; + } + + //check relevance + if (windowRel >= _windowSize) + { + NetDebug.Write("[PA]Old acks"); + return; + } + + byte[] acksData = packet.RawData; + lock (_pendingPackets) + { + for (int pendingSeq = _localWindowStart; + pendingSeq != _localSeqence; + pendingSeq = (pendingSeq + 1) % NetConstants.MaxSequence) + { + int rel = NetUtils.RelativeSequenceNumber(pendingSeq, ackWindowStart); + if (rel >= _windowSize) + { + NetDebug.Write("[PA]REL: " + rel); + break; + } + + int pendingIdx = pendingSeq % _windowSize; + int currentByte = NetConstants.ChanneledHeaderSize + pendingIdx / BitsInByte; + int currentBit = pendingIdx % BitsInByte; + if ((acksData[currentByte] & (1 << currentBit)) == 0) + { + if (Peer.NetManager.EnableStatistics) + { + Peer.Statistics.IncrementPacketLoss(); + Peer.NetManager.Statistics.IncrementPacketLoss(); + } + + //Skip false ack + NetDebug.Write($"[PA]False ack: {pendingSeq}"); + continue; + } + + if (pendingSeq == _localWindowStart) + { + //Move window + _localWindowStart = (_localWindowStart + 1) % NetConstants.MaxSequence; + } + + //clear packet + if (_pendingPackets[pendingIdx].Clear(Peer)) + NetDebug.Write($"[PA]Removing reliableInOrder ack: {pendingSeq} - true"); + } + } + } + + protected override bool SendNextPackets() + { + if (_mustSendAcks) + { + _mustSendAcks = false; + NetDebug.Write("[RR]SendAcks"); + lock(_outgoingAcks) + Peer.SendUserData(_outgoingAcks); + } + + long currentTime = DateTime.UtcNow.Ticks; + bool hasPendingPackets = false; + + lock (_pendingPackets) + { + //get packets from queue + lock (OutgoingQueue) + { + while (OutgoingQueue.Count > 0) + { + int relate = NetUtils.RelativeSequenceNumber(_localSeqence, _localWindowStart); + if (relate >= _windowSize) + break; + + var netPacket = OutgoingQueue.Dequeue(); + netPacket.Sequence = (ushort) _localSeqence; + netPacket.ChannelId = _id; + _pendingPackets[_localSeqence % _windowSize].Init(netPacket); + _localSeqence = (_localSeqence + 1) % NetConstants.MaxSequence; + } + } + + //send + for (int pendingSeq = _localWindowStart; pendingSeq != _localSeqence; pendingSeq = (pendingSeq + 1) % NetConstants.MaxSequence) + { + // Please note: TrySend is invoked on a mutable struct, it's important to not extract it into a variable here + if (_pendingPackets[pendingSeq % _windowSize].TrySend(currentTime, Peer)) + hasPendingPackets = true; + } + } + + return hasPendingPackets || _mustSendAcks || OutgoingQueue.Count > 0; + } + + //Process incoming packet + public override bool ProcessPacket(NetPacket packet) + { + if (packet.Property == PacketProperty.Ack) + { + ProcessAck(packet); + return false; + } + int seq = packet.Sequence; + if (seq >= NetConstants.MaxSequence) + { + NetDebug.Write("[RR]Bad sequence"); + return false; + } + + int relate = NetUtils.RelativeSequenceNumber(seq, _remoteWindowStart); + int relateSeq = NetUtils.RelativeSequenceNumber(seq, _remoteSequence); + + if (relateSeq > _windowSize) + { + NetDebug.Write("[RR]Bad sequence"); + return false; + } + + //Drop bad packets + if (relate < 0) + { + //Too old packet doesn't ack + NetDebug.Write("[RR]ReliableInOrder too old"); + return false; + } + if (relate >= _windowSize * 2) + { + //Some very new packet + NetDebug.Write("[RR]ReliableInOrder too new"); + return false; + } + + //If very new - move window + int ackIdx; + int ackByte; + int ackBit; + lock (_outgoingAcks) + { + if (relate >= _windowSize) + { + //New window position + int newWindowStart = (_remoteWindowStart + relate - _windowSize + 1) % NetConstants.MaxSequence; + _outgoingAcks.Sequence = (ushort) newWindowStart; + + //Clean old data + while (_remoteWindowStart != newWindowStart) + { + ackIdx = _remoteWindowStart % _windowSize; + ackByte = NetConstants.ChanneledHeaderSize + ackIdx / BitsInByte; + ackBit = ackIdx % BitsInByte; + _outgoingAcks.RawData[ackByte] &= (byte) ~(1 << ackBit); + _remoteWindowStart = (_remoteWindowStart + 1) % NetConstants.MaxSequence; + } + } + + //Final stage - process valid packet + //trigger acks send + _mustSendAcks = true; + + ackIdx = seq % _windowSize; + ackByte = NetConstants.ChanneledHeaderSize + ackIdx / BitsInByte; + ackBit = ackIdx % BitsInByte; + if ((_outgoingAcks.RawData[ackByte] & (1 << ackBit)) != 0) + { + NetDebug.Write("[RR]ReliableInOrder duplicate"); + //because _mustSendAcks == true + AddToPeerChannelSendQueue(); + return false; + } + + //save ack + _outgoingAcks.RawData[ackByte] |= (byte) (1 << ackBit); + } + + AddToPeerChannelSendQueue(); + + //detailed check + if (seq == _remoteSequence) + { + NetDebug.Write("[RR]ReliableInOrder packet succes"); + Peer.AddReliablePacket(_deliveryMethod, packet); + _remoteSequence = (_remoteSequence + 1) % NetConstants.MaxSequence; + + if (_ordered) + { + NetPacket p; + while ((p = _receivedPackets[_remoteSequence % _windowSize]) != null) + { + //process holden packet + _receivedPackets[_remoteSequence % _windowSize] = null; + Peer.AddReliablePacket(_deliveryMethod, p); + _remoteSequence = (_remoteSequence + 1) % NetConstants.MaxSequence; + } + } + else + { + while (_earlyReceived[_remoteSequence % _windowSize]) + { + //process early packet + _earlyReceived[_remoteSequence % _windowSize] = false; + _remoteSequence = (_remoteSequence + 1) % NetConstants.MaxSequence; + } + } + return true; + } + + //holden packet + if (_ordered) + { + _receivedPackets[ackIdx] = packet; + } + else + { + _earlyReceived[ackIdx] = true; + Peer.AddReliablePacket(_deliveryMethod, packet); + } + return true; + } + } +} diff --git a/Transport/LiteNetLib Transport/LiteNetLib/ReliableChannel.cs.meta b/Transport/LiteNetLib Transport/LiteNetLib/ReliableChannel.cs.meta new file mode 100644 index 0000000..80c709e --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/ReliableChannel.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9ff71f2b64d81a64ea6232007c316adf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Transport/LiteNetLib Transport/LiteNetLib/SequencedChannel.cs b/Transport/LiteNetLib Transport/LiteNetLib/SequencedChannel.cs new file mode 100644 index 0000000..bc47f86 --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/SequencedChannel.cs @@ -0,0 +1,114 @@ +using System; + +namespace LiteNetLib +{ + internal sealed class SequencedChannel : BaseChannel + { + private int _localSequence; + private ushort _remoteSequence; + private readonly bool _reliable; + private NetPacket _lastPacket; + private readonly NetPacket _ackPacket; + private bool _mustSendAck; + private readonly byte _id; + private long _lastPacketSendTime; + + public SequencedChannel(NetPeer peer, bool reliable, byte id) : base(peer) + { + _id = id; + _reliable = reliable; + if (_reliable) + _ackPacket = new NetPacket(PacketProperty.Ack, 0) {ChannelId = id}; + } + + protected override bool SendNextPackets() + { + if (_reliable && OutgoingQueue.Count == 0) + { + long currentTime = DateTime.UtcNow.Ticks; + long packetHoldTime = currentTime - _lastPacketSendTime; + if (packetHoldTime >= Peer.ResendDelay * TimeSpan.TicksPerMillisecond) + { + var packet = _lastPacket; + if (packet != null) + { + _lastPacketSendTime = currentTime; + Peer.SendUserData(packet); + } + } + } + else + { + lock (OutgoingQueue) + { + while (OutgoingQueue.Count > 0) + { + NetPacket packet = OutgoingQueue.Dequeue(); + _localSequence = (_localSequence + 1) % NetConstants.MaxSequence; + packet.Sequence = (ushort)_localSequence; + packet.ChannelId = _id; + Peer.SendUserData(packet); + + if (_reliable && OutgoingQueue.Count == 0) + { + _lastPacketSendTime = DateTime.UtcNow.Ticks; + _lastPacket = packet; + } + else + { + Peer.NetManager.PoolRecycle(packet); + } + } + } + } + + if (_reliable && _mustSendAck) + { + _mustSendAck = false; + _ackPacket.Sequence = _remoteSequence; + Peer.SendUserData(_ackPacket); + } + + return _lastPacket != null; + } + + public override bool ProcessPacket(NetPacket packet) + { + if (packet.IsFragmented) + return false; + if (packet.Property == PacketProperty.Ack) + { + if (_reliable && _lastPacket != null && packet.Sequence == _lastPacket.Sequence) + _lastPacket = null; + return false; + } + int relative = NetUtils.RelativeSequenceNumber(packet.Sequence, _remoteSequence); + bool packetProcessed = false; + if (packet.Sequence < NetConstants.MaxSequence && relative > 0) + { + if (Peer.NetManager.EnableStatistics) + { + Peer.Statistics.AddPacketLoss(relative - 1); + Peer.NetManager.Statistics.AddPacketLoss(relative - 1); + } + + _remoteSequence = packet.Sequence; + Peer.NetManager.CreateReceiveEvent( + packet, + _reliable ? DeliveryMethod.ReliableSequenced : DeliveryMethod.Sequenced, + (byte)(packet.ChannelId / NetConstants.ChannelTypeCount), + NetConstants.ChanneledHeaderSize, + Peer); + packetProcessed = true; + } + + if (_reliable) + { + _mustSendAck = true; + AddToPeerChannelSendQueue(); + } + + return packetProcessed; + } + } +} diff --git a/Transport/LiteNetLib Transport/LiteNetLib/SequencedChannel.cs.meta b/Transport/LiteNetLib Transport/LiteNetLib/SequencedChannel.cs.meta new file mode 100644 index 0000000..cde6643 --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/SequencedChannel.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 424b628addd10374abcf8b934ae19768 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Transport/LiteNetLib Transport/LiteNetLib/Utils.meta b/Transport/LiteNetLib Transport/LiteNetLib/Utils.meta new file mode 100644 index 0000000..a1d32cd --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/Utils.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9e74c8c18ebed5d4a9ba20c8623fafaa +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Transport/LiteNetLib Transport/LiteNetLib/Utils/CRC32C.cs b/Transport/LiteNetLib Transport/LiteNetLib/Utils/CRC32C.cs new file mode 100644 index 0000000..7e85680 --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/Utils/CRC32C.cs @@ -0,0 +1,150 @@ +#if NETCOREAPP3_0_OR_GREATER || NETCOREAPP3_1 || NET5_0 +using System; +using System.Runtime.InteropServices; +using System.Runtime.Intrinsics.X86; +#endif +#if NET5_0_OR_GREATER || NET5_0 +using System.Runtime.Intrinsics.Arm; +#endif + +namespace LiteNetLib.Utils +{ + //Implementation from Crc32.NET + public static class CRC32C + { + public const int ChecksumSize = 4; + private const uint Poly = 0x82F63B78u; + private static readonly uint[] Table; + + static CRC32C() + { +#if NETCOREAPP3_0_OR_GREATER || NETCOREAPP3_1 || NET5_0 + if (Sse42.IsSupported) + return; +#endif +#if NET5_0_OR_GREATER || NET5_0 + if (Crc32.IsSupported) + return; +#endif + Table = NetUtils.AllocatePinnedUninitializedArray(16 * 256); + for (uint i = 0; i < 256; i++) + { + uint res = i; + for (int t = 0; t < 16; t++) + { + for (int k = 0; k < 8; k++) + res = (res & 1) == 1 ? Poly ^ (res >> 1) : (res >> 1); + Table[t * 256 + i] = res; + } + } + } + + /// + /// Compute CRC32C for data + /// + /// input data + /// offset + /// length + /// CRC32C checksum + public static uint Compute(byte[] input, int offset, int length) + { + uint crcLocal = uint.MaxValue; +#if NETCOREAPP3_0_OR_GREATER || NETCOREAPP3_1 || NET5_0 + if (Sse42.IsSupported) + { + var data = new ReadOnlySpan(input, offset, length); + int processed = 0; + if (Sse42.X64.IsSupported && data.Length > sizeof(ulong)) + { + processed = data.Length / sizeof(ulong) * sizeof(ulong); + var ulongs = MemoryMarshal.Cast(data.Slice(0, processed)); + ulong crclong = crcLocal; + for (int i = 0; i < ulongs.Length; i++) + { + crclong = Sse42.X64.Crc32(crclong, ulongs[i]); + } + + crcLocal = (uint)crclong; + } + else if (data.Length > sizeof(uint)) + { + processed = data.Length / sizeof(uint) * sizeof(uint); + var uints = MemoryMarshal.Cast(data.Slice(0, processed)); + for (int i = 0; i < uints.Length; i++) + { + crcLocal = Sse42.Crc32(crcLocal, uints[i]); + } + } + + for (int i = processed; i < data.Length; i++) + { + crcLocal = Sse42.Crc32(crcLocal, data[i]); + } + + return crcLocal ^ uint.MaxValue; + } +#endif +#if NET5_0_OR_GREATER || NET5_0 + if (Crc32.IsSupported) + { + var data = new ReadOnlySpan(input, offset, length); + int processed = 0; + if (Crc32.Arm64.IsSupported && data.Length > sizeof(ulong)) + { + processed = data.Length / sizeof(ulong) * sizeof(ulong); + var ulongs = MemoryMarshal.Cast(data.Slice(0, processed)); + for (int i = 0; i < ulongs.Length; i++) + { + crcLocal = Crc32.Arm64.ComputeCrc32C(crcLocal, ulongs[i]); + } + } + else if (data.Length > sizeof(uint)) + { + processed = data.Length / sizeof(uint) * sizeof(uint); + var uints = MemoryMarshal.Cast(data.Slice(0, processed)); + for (int i = 0; i < uints.Length; i++) + { + crcLocal = Crc32.ComputeCrc32C(crcLocal, uints[i]); + } + } + + for (int i = processed; i < data.Length; i++) + { + crcLocal = Crc32.ComputeCrc32C(crcLocal, data[i]); + } + + return crcLocal ^ uint.MaxValue; + } +#endif + while (length >= 16) + { + var a = Table[(3 * 256) + input[offset + 12]] + ^ Table[(2 * 256) + input[offset + 13]] + ^ Table[(1 * 256) + input[offset + 14]] + ^ Table[(0 * 256) + input[offset + 15]]; + + var b = Table[(7 * 256) + input[offset + 8]] + ^ Table[(6 * 256) + input[offset + 9]] + ^ Table[(5 * 256) + input[offset + 10]] + ^ Table[(4 * 256) + input[offset + 11]]; + + var c = Table[(11 * 256) + input[offset + 4]] + ^ Table[(10 * 256) + input[offset + 5]] + ^ Table[(9 * 256) + input[offset + 6]] + ^ Table[(8 * 256) + input[offset + 7]]; + + var d = Table[(15 * 256) + ((byte)crcLocal ^ input[offset])] + ^ Table[(14 * 256) + ((byte)(crcLocal >> 8) ^ input[offset + 1])] + ^ Table[(13 * 256) + ((byte)(crcLocal >> 16) ^ input[offset + 2])] + ^ Table[(12 * 256) + ((crcLocal >> 24) ^ input[offset + 3])]; + + crcLocal = d ^ c ^ b ^ a; + offset += 16; + length -= 16; + } + while (--length >= 0) + crcLocal = Table[(byte)(crcLocal ^ input[offset++])] ^ crcLocal >> 8; + return crcLocal ^ uint.MaxValue; + } + } +} diff --git a/Transport/LiteNetLib Transport/LiteNetLib/Utils/CRC32C.cs.meta b/Transport/LiteNetLib Transport/LiteNetLib/Utils/CRC32C.cs.meta new file mode 100644 index 0000000..fdce2fd --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/Utils/CRC32C.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 76883c4cc6dbb0a43b3a7755fd827824 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Transport/LiteNetLib Transport/LiteNetLib/Utils/FastBitConverter.cs b/Transport/LiteNetLib Transport/LiteNetLib/Utils/FastBitConverter.cs new file mode 100644 index 0000000..3ecd10c --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/Utils/FastBitConverter.cs @@ -0,0 +1,175 @@ +using System; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace LiteNetLib.Utils +{ + public static class FastBitConverter + { +#if (LITENETLIB_UNSAFE || LITENETLIB_UNSAFELIB || NETCOREAPP3_1 || NET5_0 || NETCOREAPP3_0_OR_GREATER) && !BIGENDIAN +#if LITENETLIB_UNSAFE + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe void GetBytes(byte[] bytes, int startIndex, T value) where T : unmanaged + { + int size = sizeof(T); + if (bytes.Length < startIndex + size) + ThrowIndexOutOfRangeException(); +#if LITENETLIB_UNSAFELIB || NETCOREAPP3_1 || NET5_0 || NETCOREAPP3_0_OR_GREATER + Unsafe.As(ref bytes[startIndex]) = value; +#else + fixed (byte* ptr = &bytes[startIndex]) + { +#if UNITY_ANDROID + // On some android systems, assigning *(T*)ptr throws a NRE if + // the ptr isn't aligned (i.e. if Position is 1,2,3,5, etc.). + // Here we have to use memcpy. + // + // => we can't get a pointer of a struct in C# without + // marshalling allocations + // => instead, we stack allocate an array of type T and use that + // => stackalloc avoids GC and is very fast. it only works for + // value types, but all blittable types are anyway. + T* valueBuffer = stackalloc T[1] { value }; + UnsafeUtility.MemCpy(ptr, valueBuffer, size); +#else + *(T*)ptr = value; +#endif + } +#endif + } +#else + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void GetBytes(byte[] bytes, int startIndex, T value) where T : unmanaged + { + if (bytes.Length < startIndex + Unsafe.SizeOf()) + ThrowIndexOutOfRangeException(); + Unsafe.As(ref bytes[startIndex]) = value; + } +#endif + + private static void ThrowIndexOutOfRangeException() => throw new IndexOutOfRangeException(); +#else + [StructLayout(LayoutKind.Explicit)] + private struct ConverterHelperDouble + { + [FieldOffset(0)] + public ulong Along; + + [FieldOffset(0)] + public double Adouble; + } + + [StructLayout(LayoutKind.Explicit)] + private struct ConverterHelperFloat + { + [FieldOffset(0)] + public int Aint; + + [FieldOffset(0)] + public float Afloat; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void WriteLittleEndian(byte[] buffer, int offset, ulong data) + { +#if BIGENDIAN + buffer[offset + 7] = (byte)(data); + buffer[offset + 6] = (byte)(data >> 8); + buffer[offset + 5] = (byte)(data >> 16); + buffer[offset + 4] = (byte)(data >> 24); + buffer[offset + 3] = (byte)(data >> 32); + buffer[offset + 2] = (byte)(data >> 40); + buffer[offset + 1] = (byte)(data >> 48); + buffer[offset ] = (byte)(data >> 56); +#else + buffer[offset] = (byte)(data); + buffer[offset + 1] = (byte)(data >> 8); + buffer[offset + 2] = (byte)(data >> 16); + buffer[offset + 3] = (byte)(data >> 24); + buffer[offset + 4] = (byte)(data >> 32); + buffer[offset + 5] = (byte)(data >> 40); + buffer[offset + 6] = (byte)(data >> 48); + buffer[offset + 7] = (byte)(data >> 56); +#endif + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static void WriteLittleEndian(byte[] buffer, int offset, int data) + { +#if BIGENDIAN + buffer[offset + 3] = (byte)(data); + buffer[offset + 2] = (byte)(data >> 8); + buffer[offset + 1] = (byte)(data >> 16); + buffer[offset ] = (byte)(data >> 24); +#else + buffer[offset] = (byte)(data); + buffer[offset + 1] = (byte)(data >> 8); + buffer[offset + 2] = (byte)(data >> 16); + buffer[offset + 3] = (byte)(data >> 24); +#endif + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void WriteLittleEndian(byte[] buffer, int offset, short data) + { +#if BIGENDIAN + buffer[offset + 1] = (byte)(data); + buffer[offset ] = (byte)(data >> 8); +#else + buffer[offset] = (byte)(data); + buffer[offset + 1] = (byte)(data >> 8); +#endif + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void GetBytes(byte[] bytes, int startIndex, double value) + { + ConverterHelperDouble ch = new ConverterHelperDouble { Adouble = value }; + WriteLittleEndian(bytes, startIndex, ch.Along); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void GetBytes(byte[] bytes, int startIndex, float value) + { + ConverterHelperFloat ch = new ConverterHelperFloat { Afloat = value }; + WriteLittleEndian(bytes, startIndex, ch.Aint); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void GetBytes(byte[] bytes, int startIndex, short value) + { + WriteLittleEndian(bytes, startIndex, value); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void GetBytes(byte[] bytes, int startIndex, ushort value) + { + WriteLittleEndian(bytes, startIndex, (short)value); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void GetBytes(byte[] bytes, int startIndex, int value) + { + WriteLittleEndian(bytes, startIndex, value); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void GetBytes(byte[] bytes, int startIndex, uint value) + { + WriteLittleEndian(bytes, startIndex, (int)value); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void GetBytes(byte[] bytes, int startIndex, long value) + { + WriteLittleEndian(bytes, startIndex, (ulong)value); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void GetBytes(byte[] bytes, int startIndex, ulong value) + { + WriteLittleEndian(bytes, startIndex, value); + } +#endif + } +} diff --git a/Transport/LiteNetLib Transport/LiteNetLib/Utils/FastBitConverter.cs.meta b/Transport/LiteNetLib Transport/LiteNetLib/Utils/FastBitConverter.cs.meta new file mode 100644 index 0000000..020aed5 --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/Utils/FastBitConverter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 62e022071d6c4284986276c32b92b32c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Transport/LiteNetLib Transport/LiteNetLib/Utils/INetSerializable.cs b/Transport/LiteNetLib Transport/LiteNetLib/Utils/INetSerializable.cs new file mode 100644 index 0000000..92f14be --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/Utils/INetSerializable.cs @@ -0,0 +1,8 @@ +namespace LiteNetLib.Utils +{ + public interface INetSerializable + { + void Serialize(NetDataWriter writer); + void Deserialize(NetDataReader reader); + } +} diff --git a/Transport/LiteNetLib Transport/LiteNetLib/Utils/INetSerializable.cs.meta b/Transport/LiteNetLib Transport/LiteNetLib/Utils/INetSerializable.cs.meta new file mode 100644 index 0000000..22a3e17 --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/Utils/INetSerializable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 819c3f8d629972f49bdf77b1fc3d1c2e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Transport/LiteNetLib Transport/LiteNetLib/Utils/NetDataReader.cs b/Transport/LiteNetLib Transport/LiteNetLib/Utils/NetDataReader.cs new file mode 100644 index 0000000..6ddab0e --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/Utils/NetDataReader.cs @@ -0,0 +1,673 @@ +using System; +using System.Net; +using System.Runtime.CompilerServices; + +namespace LiteNetLib.Utils +{ + public class NetDataReader + { + protected byte[] _data; + protected int _position; + protected int _dataSize; + private int _offset; + + public byte[] RawData + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => _data; + } + public int RawDataSize + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => _dataSize; + } + public int UserDataOffset + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => _offset; + } + public int UserDataSize + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => _dataSize - _offset; + } + public bool IsNull + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => _data == null; + } + public int Position + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => _position; + } + public bool EndOfData + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => _position == _dataSize; + } + public int AvailableBytes + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => _dataSize - _position; + } + + public void SkipBytes(int count) + { + _position += count; + } + + public void SetPosition(int position) + { + _position = position; + } + + public void SetSource(NetDataWriter dataWriter) + { + _data = dataWriter.Data; + _position = 0; + _offset = 0; + _dataSize = dataWriter.Length; + } + + public void SetSource(byte[] source) + { + _data = source; + _position = 0; + _offset = 0; + _dataSize = source.Length; + } + + public void SetSource(byte[] source, int offset, int maxSize) + { + _data = source; + _position = offset; + _offset = offset; + _dataSize = maxSize; + } + + public NetDataReader() + { + + } + + public NetDataReader(NetDataWriter writer) + { + SetSource(writer); + } + + public NetDataReader(byte[] source) + { + SetSource(source); + } + + public NetDataReader(byte[] source, int offset, int maxSize) + { + SetSource(source, offset, maxSize); + } + + #region GetMethods + public IPEndPoint GetNetEndPoint() + { + string host = GetString(1000); + int port = GetInt(); + return NetUtils.MakeEndPoint(host, port); + } + + public byte GetByte() + { + byte res = _data[_position]; + _position++; + return res; + } + + public sbyte GetSByte() + { + return (sbyte)GetByte(); + } + + public T[] GetArray(ushort size) + { + ushort length = BitConverter.ToUInt16(_data, _position); + _position += 2; + T[] result = new T[length]; + length *= size; + Buffer.BlockCopy(_data, _position, result, 0, length); + _position += length; + return result; + } + + public bool[] GetBoolArray() + { + return GetArray(1); + } + + public ushort[] GetUShortArray() + { + return GetArray(2); + } + + public short[] GetShortArray() + { + return GetArray(2); + } + + public int[] GetIntArray() + { + return GetArray(4); + } + + public uint[] GetUIntArray() + { + return GetArray(4); + } + + public float[] GetFloatArray() + { + return GetArray(4); + } + + public double[] GetDoubleArray() + { + return GetArray(8); + } + + public long[] GetLongArray() + { + return GetArray(8); + } + + public ulong[] GetULongArray() + { + return GetArray(8); + } + + public string[] GetStringArray() + { + ushort length = GetUShort(); + string[] arr = new string[length]; + for (int i = 0; i < length; i++) + { + arr[i] = GetString(); + } + return arr; + } + + /// + /// Note that "maxStringLength" only limits the number of characters in a string, not its size in bytes. + /// Strings that exceed this parameter are returned as empty + /// + public string[] GetStringArray(int maxStringLength) + { + ushort length = GetUShort(); + string[] arr = new string[length]; + for (int i = 0; i < length; i++) + { + arr[i] = GetString(maxStringLength); + } + return arr; + } + + public bool GetBool() + { + return GetByte() == 1; + } + + public char GetChar() + { + return (char)GetUShort(); + } + + public ushort GetUShort() + { + ushort result = BitConverter.ToUInt16(_data, _position); + _position += 2; + return result; + } + + public short GetShort() + { + short result = BitConverter.ToInt16(_data, _position); + _position += 2; + return result; + } + + public long GetLong() + { + long result = BitConverter.ToInt64(_data, _position); + _position += 8; + return result; + } + + public ulong GetULong() + { + ulong result = BitConverter.ToUInt64(_data, _position); + _position += 8; + return result; + } + + public int GetInt() + { + int result = BitConverter.ToInt32(_data, _position); + _position += 4; + return result; + } + + public uint GetUInt() + { + uint result = BitConverter.ToUInt32(_data, _position); + _position += 4; + return result; + } + + public float GetFloat() + { + float result = BitConverter.ToSingle(_data, _position); + _position += 4; + return result; + } + + public double GetDouble() + { + double result = BitConverter.ToDouble(_data, _position); + _position += 8; + return result; + } + + /// + /// Note that "maxLength" only limits the number of characters in a string, not its size in bytes. + /// + /// "string.Empty" if value > "maxLength" + public string GetString(int maxLength) + { + ushort size = GetUShort(); + if (size == 0) + { + return string.Empty; + } + + int actualSize = size - 1; + if (actualSize >= NetDataWriter.StringBufferMaxLength) + { + return null; + } + + ArraySegment data = GetBytesSegment(actualSize); + + return (maxLength > 0 && NetDataWriter.uTF8Encoding.Value.GetCharCount(data.Array, data.Offset, data.Count) > maxLength) ? + string.Empty : + NetDataWriter.uTF8Encoding.Value.GetString(data.Array, data.Offset, data.Count); + } + + public string GetString() + { + ushort size = GetUShort(); + if (size == 0) + { + return string.Empty; + } + + int actualSize = size - 1; + if (actualSize >= NetDataWriter.StringBufferMaxLength) + { + return null; + } + + ArraySegment data = GetBytesSegment(actualSize); + + return NetDataWriter.uTF8Encoding.Value.GetString(data.Array, data.Offset, data.Count); + } + + public ArraySegment GetBytesSegment(int count) + { + ArraySegment segment = new ArraySegment(_data, _position, count); + _position += count; + return segment; + } + + public ArraySegment GetRemainingBytesSegment() + { + ArraySegment segment = new ArraySegment(_data, _position, AvailableBytes); + _position = _data.Length; + return segment; + } + + public T Get() where T : struct, INetSerializable + { + var obj = default(T); + obj.Deserialize(this); + return obj; + } + + public T Get(Func constructor) where T : class, INetSerializable + { + var obj = constructor(); + obj.Deserialize(this); + return obj; + } + + public byte[] GetRemainingBytes() + { + byte[] outgoingData = new byte[AvailableBytes]; + Buffer.BlockCopy(_data, _position, outgoingData, 0, AvailableBytes); + _position = _data.Length; + return outgoingData; + } + + public void GetBytes(byte[] destination, int start, int count) + { + Buffer.BlockCopy(_data, _position, destination, start, count); + _position += count; + } + + public void GetBytes(byte[] destination, int count) + { + Buffer.BlockCopy(_data, _position, destination, 0, count); + _position += count; + } + + public sbyte[] GetSBytesWithLength() + { + return GetArray(1); + } + + public byte[] GetBytesWithLength() + { + return GetArray(1); + } + #endregion + + #region PeekMethods + + public byte PeekByte() + { + return _data[_position]; + } + + public sbyte PeekSByte() + { + return (sbyte)_data[_position]; + } + + public bool PeekBool() + { + return _data[_position] == 1; + } + + public char PeekChar() + { + return (char)PeekUShort(); + } + + public ushort PeekUShort() + { + return BitConverter.ToUInt16(_data, _position); + } + + public short PeekShort() + { + return BitConverter.ToInt16(_data, _position); + } + + public long PeekLong() + { + return BitConverter.ToInt64(_data, _position); + } + + public ulong PeekULong() + { + return BitConverter.ToUInt64(_data, _position); + } + + public int PeekInt() + { + return BitConverter.ToInt32(_data, _position); + } + + public uint PeekUInt() + { + return BitConverter.ToUInt32(_data, _position); + } + + public float PeekFloat() + { + return BitConverter.ToSingle(_data, _position); + } + + public double PeekDouble() + { + return BitConverter.ToDouble(_data, _position); + } + + /// + /// Note that "maxLength" only limits the number of characters in a string, not its size in bytes. + /// + public string PeekString(int maxLength) + { + ushort size = PeekUShort(); + if (size == 0) + { + return string.Empty; + } + + int actualSize = size - 1; + if (actualSize >= NetDataWriter.StringBufferMaxLength) + { + return null; + } + + return (maxLength > 0 && NetDataWriter.uTF8Encoding.Value.GetCharCount(_data, _position + 2, actualSize) > maxLength) ? + string.Empty : + NetDataWriter.uTF8Encoding.Value.GetString(_data, _position + 2, actualSize); + } + + public string PeekString() + { + ushort size = PeekUShort(); + if (size == 0) + { + return string.Empty; + } + + int actualSize = size - 1; + if (actualSize >= NetDataWriter.StringBufferMaxLength) + { + return null; + } + + return NetDataWriter.uTF8Encoding.Value.GetString(_data, _position + 2, actualSize); + } + #endregion + + #region TryGetMethods + public bool TryGetByte(out byte result) + { + if (AvailableBytes >= 1) + { + result = GetByte(); + return true; + } + result = 0; + return false; + } + + public bool TryGetSByte(out sbyte result) + { + if (AvailableBytes >= 1) + { + result = GetSByte(); + return true; + } + result = 0; + return false; + } + + public bool TryGetBool(out bool result) + { + if (AvailableBytes >= 1) + { + result = GetBool(); + return true; + } + result = false; + return false; + } + + public bool TryGetChar(out char result) + { + if (!TryGetUShort(out ushort uShortValue)) + { + result = '\0'; + return false; + } + result = (char)uShortValue; + return true; + } + + public bool TryGetShort(out short result) + { + if (AvailableBytes >= 2) + { + result = GetShort(); + return true; + } + result = 0; + return false; + } + + public bool TryGetUShort(out ushort result) + { + if (AvailableBytes >= 2) + { + result = GetUShort(); + return true; + } + result = 0; + return false; + } + + public bool TryGetInt(out int result) + { + if (AvailableBytes >= 4) + { + result = GetInt(); + return true; + } + result = 0; + return false; + } + + public bool TryGetUInt(out uint result) + { + if (AvailableBytes >= 4) + { + result = GetUInt(); + return true; + } + result = 0; + return false; + } + + public bool TryGetLong(out long result) + { + if (AvailableBytes >= 8) + { + result = GetLong(); + return true; + } + result = 0; + return false; + } + + public bool TryGetULong(out ulong result) + { + if (AvailableBytes >= 8) + { + result = GetULong(); + return true; + } + result = 0; + return false; + } + + public bool TryGetFloat(out float result) + { + if (AvailableBytes >= 4) + { + result = GetFloat(); + return true; + } + result = 0; + return false; + } + + public bool TryGetDouble(out double result) + { + if (AvailableBytes >= 8) + { + result = GetDouble(); + return true; + } + result = 0; + return false; + } + + public bool TryGetString(out string result) + { + if (AvailableBytes >= 2) + { + ushort strSize = PeekUShort(); + if (AvailableBytes >= strSize + 1) + { + result = GetString(); + return true; + } + } + result = null; + return false; + } + + public bool TryGetStringArray(out string[] result) + { + if (!TryGetUShort(out ushort strArrayLength)) { + result = null; + return false; + } + + result = new string[strArrayLength]; + for (int i = 0; i < strArrayLength; i++) + { + if (!TryGetString(out result[i])) + { + result = null; + return false; + } + } + + return true; + } + + public bool TryGetBytesWithLength(out byte[] result) + { + if (AvailableBytes >= 2) + { + ushort length = PeekUShort(); + if (length >= 0 && AvailableBytes >= 2 + length) + { + result = GetBytesWithLength(); + return true; + } + } + result = null; + return false; + } + #endregion + + public void Clear() + { + _position = 0; + _dataSize = 0; + _data = null; + } + } +} diff --git a/Transport/LiteNetLib Transport/LiteNetLib/Utils/NetDataReader.cs.meta b/Transport/LiteNetLib Transport/LiteNetLib/Utils/NetDataReader.cs.meta new file mode 100644 index 0000000..3f858d8 --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/Utils/NetDataReader.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 40f1663f22634e9499bb37bbe6a10992 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Transport/LiteNetLib Transport/LiteNetLib/Utils/NetDataWriter.cs b/Transport/LiteNetLib Transport/LiteNetLib/Utils/NetDataWriter.cs new file mode 100644 index 0000000..baa8351 --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/Utils/NetDataWriter.cs @@ -0,0 +1,381 @@ +using System; +using System.Net; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading; + +namespace LiteNetLib.Utils +{ + public class NetDataWriter + { + protected byte[] _data; + protected int _position; + private const int InitialSize = 64; + private readonly bool _autoResize; + + public int Capacity + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => _data.Length; + } + public byte[] Data + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => _data; + } + public int Length + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => _position; + } + + public static readonly ThreadLocal uTF8Encoding = new ThreadLocal(() => new UTF8Encoding(false, true)); + public const int StringBufferMaxLength = 65535; + private readonly byte[] _stringBuffer = new byte[StringBufferMaxLength]; + + public NetDataWriter() : this(true, InitialSize) + { + } + + public NetDataWriter(bool autoResize) : this(autoResize, InitialSize) + { + } + + public NetDataWriter(bool autoResize, int initialSize) + { + _data = new byte[initialSize]; + _autoResize = autoResize; + } + + /// + /// Creates NetDataWriter from existing ByteArray + /// + /// Source byte array + /// Copy array to new location or use existing + public static NetDataWriter FromBytes(byte[] bytes, bool copy) + { + if (copy) + { + var netDataWriter = new NetDataWriter(true, bytes.Length); + netDataWriter.Put(bytes); + return netDataWriter; + } + return new NetDataWriter(true, 0) {_data = bytes, _position = bytes.Length}; + } + + /// + /// Creates NetDataWriter from existing ByteArray (always copied data) + /// + /// Source byte array + /// Offset of array + /// Length of array + public static NetDataWriter FromBytes(byte[] bytes, int offset, int length) + { + var netDataWriter = new NetDataWriter(true, bytes.Length); + netDataWriter.Put(bytes, offset, length); + return netDataWriter; + } + + public static NetDataWriter FromString(string value) + { + var netDataWriter = new NetDataWriter(); + netDataWriter.Put(value); + return netDataWriter; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void ResizeIfNeed(int newSize) + { + if (_data.Length < newSize) + { + Array.Resize(ref _data, Math.Max(newSize, _data.Length * 2)); + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void EnsureFit(int additionalSize) + { + if (_data.Length < _position + additionalSize) + { + Array.Resize(ref _data, Math.Max(_position + additionalSize, _data.Length * 2)); + } + } + + public void Reset(int size) + { + ResizeIfNeed(size); + _position = 0; + } + + public void Reset() + { + _position = 0; + } + + public byte[] CopyData() + { + byte[] resultData = new byte[_position]; + Buffer.BlockCopy(_data, 0, resultData, 0, _position); + return resultData; + } + + /// + /// Sets position of NetDataWriter to rewrite previous values + /// + /// new byte position + /// previous position of data writer + public int SetPosition(int position) + { + int prevPosition = _position; + _position = position; + return prevPosition; + } + + public void Put(float value) + { + if (_autoResize) + ResizeIfNeed(_position + 4); + FastBitConverter.GetBytes(_data, _position, value); + _position += 4; + } + + public void Put(double value) + { + if (_autoResize) + ResizeIfNeed(_position + 8); + FastBitConverter.GetBytes(_data, _position, value); + _position += 8; + } + + public void Put(long value) + { + if (_autoResize) + ResizeIfNeed(_position + 8); + FastBitConverter.GetBytes(_data, _position, value); + _position += 8; + } + + public void Put(ulong value) + { + if (_autoResize) + ResizeIfNeed(_position + 8); + FastBitConverter.GetBytes(_data, _position, value); + _position += 8; + } + + public void Put(int value) + { + if (_autoResize) + ResizeIfNeed(_position + 4); + FastBitConverter.GetBytes(_data, _position, value); + _position += 4; + } + + public void Put(uint value) + { + if (_autoResize) + ResizeIfNeed(_position + 4); + FastBitConverter.GetBytes(_data, _position, value); + _position += 4; + } + + public void Put(char value) + { + Put((ushort)value); + } + + public void Put(ushort value) + { + if (_autoResize) + ResizeIfNeed(_position + 2); + FastBitConverter.GetBytes(_data, _position, value); + _position += 2; + } + + public void Put(short value) + { + if (_autoResize) + ResizeIfNeed(_position + 2); + FastBitConverter.GetBytes(_data, _position, value); + _position += 2; + } + + public void Put(sbyte value) + { + if (_autoResize) + ResizeIfNeed(_position + 1); + _data[_position] = (byte)value; + _position++; + } + + public void Put(byte value) + { + if (_autoResize) + ResizeIfNeed(_position + 1); + _data[_position] = value; + _position++; + } + + public void Put(byte[] data, int offset, int length) + { + if (_autoResize) + ResizeIfNeed(_position + length); + Buffer.BlockCopy(data, offset, _data, _position, length); + _position += length; + } + + public void Put(byte[] data) + { + if (_autoResize) + ResizeIfNeed(_position + data.Length); + Buffer.BlockCopy(data, 0, _data, _position, data.Length); + _position += data.Length; + } + + public void PutSBytesWithLength(sbyte[] data, int offset, ushort length) + { + if (_autoResize) + ResizeIfNeed(_position + 2 + length); + FastBitConverter.GetBytes(_data, _position, length); + Buffer.BlockCopy(data, offset, _data, _position + 2, length); + _position += 2 + length; + } + + public void PutSBytesWithLength(sbyte[] data) + { + PutArray(data, 1); + } + + public void PutBytesWithLength(byte[] data, int offset, ushort length) + { + if (_autoResize) + ResizeIfNeed(_position + 2 + length); + FastBitConverter.GetBytes(_data, _position, length); + Buffer.BlockCopy(data, offset, _data, _position + 2, length); + _position += 2 + length; + } + + public void PutBytesWithLength(byte[] data) + { + PutArray(data, 1); + } + + public void Put(bool value) + { + Put((byte)(value ? 1 : 0)); + } + + public void PutArray(Array arr, int sz) + { + ushort length = arr == null ? (ushort) 0 : (ushort)arr.Length; + sz *= length; + if (_autoResize) + ResizeIfNeed(_position + sz + 2); + FastBitConverter.GetBytes(_data, _position, length); + if (arr != null) + Buffer.BlockCopy(arr, 0, _data, _position + 2, sz); + _position += sz + 2; + } + + public void PutArray(float[] value) + { + PutArray(value, 4); + } + + public void PutArray(double[] value) + { + PutArray(value, 8); + } + + public void PutArray(long[] value) + { + PutArray(value, 8); + } + + public void PutArray(ulong[] value) + { + PutArray(value, 8); + } + + public void PutArray(int[] value) + { + PutArray(value, 4); + } + + public void PutArray(uint[] value) + { + PutArray(value, 4); + } + + public void PutArray(ushort[] value) + { + PutArray(value, 2); + } + + public void PutArray(short[] value) + { + PutArray(value, 2); + } + + public void PutArray(bool[] value) + { + PutArray(value, 1); + } + + public void PutArray(string[] value) + { + ushort strArrayLength = value == null ? (ushort)0 : (ushort)value.Length; + Put(strArrayLength); + for (int i = 0; i < strArrayLength; i++) + Put(value[i]); + } + + public void PutArray(string[] value, int strMaxLength) + { + ushort strArrayLength = value == null ? (ushort)0 : (ushort)value.Length; + Put(strArrayLength); + for (int i = 0; i < strArrayLength; i++) + Put(value[i], strMaxLength); + } + + public void Put(IPEndPoint endPoint) + { + Put(endPoint.Address.ToString()); + Put(endPoint.Port); + } + + public void Put(string value) + { + Put(value, 0); + } + + /// + /// Note that "maxLength" only limits the number of characters in a string, not its size in bytes. + /// + public void Put(string value, int maxLength) + { + if (string.IsNullOrEmpty(value)) + { + Put((ushort)0); + return; + } + + int length = maxLength > 0 && value.Length > maxLength ? maxLength : value.Length; + int size = uTF8Encoding.Value.GetBytes(value, 0, length, _stringBuffer, 0); + + if (size == 0 || size >= StringBufferMaxLength) + { + Put((ushort)0); + return; + } + + Put(checked((ushort)(size + 1))); + Put(_stringBuffer, 0, size); + } + + public void Put(T obj) where T : INetSerializable + { + obj.Serialize(this); + } + } +} diff --git a/Transport/LiteNetLib Transport/LiteNetLib/Utils/NetDataWriter.cs.meta b/Transport/LiteNetLib Transport/LiteNetLib/Utils/NetDataWriter.cs.meta new file mode 100644 index 0000000..eb0534c --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/Utils/NetDataWriter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1a7c2666c073f0241ba672f218278a4d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Transport/LiteNetLib Transport/LiteNetLib/Utils/NetPacketProcessor.cs b/Transport/LiteNetLib Transport/LiteNetLib/Utils/NetPacketProcessor.cs new file mode 100644 index 0000000..f3d1493 --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/Utils/NetPacketProcessor.cs @@ -0,0 +1,267 @@ +using System; +using System.Collections.Generic; + +namespace LiteNetLib.Utils +{ + public class NetPacketProcessor + { + private static class HashCache + { + public static readonly ulong Id; + + //FNV-1 64 bit hash + static HashCache() + { + ulong hash = 14695981039346656037UL; //offset + string typeName = typeof(T).ToString(); + for (var i = 0; i < typeName.Length; i++) + { + hash ^= typeName[i]; + hash *= 1099511628211UL; //prime + } + Id = hash; + } + } + + protected delegate void SubscribeDelegate(NetDataReader reader, object userData); + private readonly NetSerializer _netSerializer; + private readonly Dictionary _callbacks = new Dictionary(); + + public NetPacketProcessor() + { + _netSerializer = new NetSerializer(); + } + + public NetPacketProcessor(int maxStringLength) + { + _netSerializer = new NetSerializer(maxStringLength); + } + + protected virtual ulong GetHash() + { + return HashCache.Id; + } + + protected virtual SubscribeDelegate GetCallbackFromData(NetDataReader reader) + { + ulong hash = reader.GetULong(); + if (!_callbacks.TryGetValue(hash, out var action)) + { + throw new ParseException("Undefined packet in NetDataReader"); + } + return action; + } + + protected virtual void WriteHash(NetDataWriter writer) + { + writer.Put(GetHash()); + } + + /// + /// Register nested property type + /// + /// INetSerializable structure + public void RegisterNestedType() where T : struct, INetSerializable + { + _netSerializer.RegisterNestedType(); + } + + /// + /// Register nested property type + /// + /// + /// + public void RegisterNestedType(Action writeDelegate, Func readDelegate) + { + _netSerializer.RegisterNestedType(writeDelegate, readDelegate); + } + + /// + /// Register nested property type + /// + /// INetSerializable class + public void RegisterNestedType(Func constructor) where T : class, INetSerializable + { + _netSerializer.RegisterNestedType(constructor); + } + + /// + /// Reads all available data from NetDataReader and calls OnReceive delegates + /// + /// NetDataReader with packets data + public void ReadAllPackets(NetDataReader reader) + { + while (reader.AvailableBytes > 0) + ReadPacket(reader); + } + + /// + /// Reads all available data from NetDataReader and calls OnReceive delegates + /// + /// NetDataReader with packets data + /// Argument that passed to OnReceivedEvent + /// Malformed packet + public void ReadAllPackets(NetDataReader reader, object userData) + { + while (reader.AvailableBytes > 0) + ReadPacket(reader, userData); + } + + /// + /// Reads one packet from NetDataReader and calls OnReceive delegate + /// + /// NetDataReader with packet + /// Malformed packet + public void ReadPacket(NetDataReader reader) + { + ReadPacket(reader, null); + } + + public void Write(NetDataWriter writer, T packet) where T : class, new() + { + WriteHash(writer); + _netSerializer.Serialize(writer, packet); + } + + public void WriteNetSerializable(NetDataWriter writer, ref T packet) where T : INetSerializable + { + WriteHash(writer); + packet.Serialize(writer); + } + + /// + /// Reads one packet from NetDataReader and calls OnReceive delegate + /// + /// NetDataReader with packet + /// Argument that passed to OnReceivedEvent + /// Malformed packet + public void ReadPacket(NetDataReader reader, object userData) + { + GetCallbackFromData(reader)(reader, userData); + } + + /// + /// Register and subscribe to packet receive event + /// + /// event that will be called when packet deserialized with ReadPacket method + /// Method that constructs packet instead of slow Activator.CreateInstance + /// 's fields are not supported, or it has no fields + public void Subscribe(Action onReceive, Func packetConstructor) where T : class, new() + { + _netSerializer.Register(); + _callbacks[GetHash()] = (reader, userData) => + { + var reference = packetConstructor(); + _netSerializer.Deserialize(reader, reference); + onReceive(reference); + }; + } + + /// + /// Register and subscribe to packet receive event (with userData) + /// + /// event that will be called when packet deserialized with ReadPacket method + /// Method that constructs packet instead of slow Activator.CreateInstance + /// 's fields are not supported, or it has no fields + public void Subscribe(Action onReceive, Func packetConstructor) where T : class, new() + { + _netSerializer.Register(); + _callbacks[GetHash()] = (reader, userData) => + { + var reference = packetConstructor(); + _netSerializer.Deserialize(reader, reference); + onReceive(reference, (TUserData)userData); + }; + } + + /// + /// Register and subscribe to packet receive event + /// This method will overwrite last received packet class on receive (less garbage) + /// + /// event that will be called when packet deserialized with ReadPacket method + /// 's fields are not supported, or it has no fields + public void SubscribeReusable(Action onReceive) where T : class, new() + { + _netSerializer.Register(); + var reference = new T(); + _callbacks[GetHash()] = (reader, userData) => + { + _netSerializer.Deserialize(reader, reference); + onReceive(reference); + }; + } + + /// + /// Register and subscribe to packet receive event + /// This method will overwrite last received packet class on receive (less garbage) + /// + /// event that will be called when packet deserialized with ReadPacket method + /// 's fields are not supported, or it has no fields + public void SubscribeReusable(Action onReceive) where T : class, new() + { + _netSerializer.Register(); + var reference = new T(); + _callbacks[GetHash()] = (reader, userData) => + { + _netSerializer.Deserialize(reader, reference); + onReceive(reference, (TUserData)userData); + }; + } + + public void SubscribeNetSerializable( + Action onReceive, + Func packetConstructor) where T : INetSerializable + { + _callbacks[GetHash()] = (reader, userData) => + { + var pkt = packetConstructor(); + pkt.Deserialize(reader); + onReceive(pkt, (TUserData)userData); + }; + } + + public void SubscribeNetSerializable( + Action onReceive, + Func packetConstructor) where T : INetSerializable + { + _callbacks[GetHash()] = (reader, userData) => + { + var pkt = packetConstructor(); + pkt.Deserialize(reader); + onReceive(pkt); + }; + } + + public void SubscribeNetSerializable( + Action onReceive) where T : INetSerializable, new() + { + var reference = new T(); + _callbacks[GetHash()] = (reader, userData) => + { + reference.Deserialize(reader); + onReceive(reference, (TUserData)userData); + }; + } + + public void SubscribeNetSerializable( + Action onReceive) where T : INetSerializable, new() + { + var reference = new T(); + _callbacks[GetHash()] = (reader, userData) => + { + reference.Deserialize(reader); + onReceive(reference); + }; + } + + /// + /// Remove any subscriptions by type + /// + /// Packet type + /// true if remove is success + public bool RemoveSubscription() + { + return _callbacks.Remove(GetHash()); + } + } +} diff --git a/Transport/LiteNetLib Transport/LiteNetLib/Utils/NetPacketProcessor.cs.meta b/Transport/LiteNetLib Transport/LiteNetLib/Utils/NetPacketProcessor.cs.meta new file mode 100644 index 0000000..6f215e0 --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/Utils/NetPacketProcessor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 31df8ab0b770a5149a8ba538a6d16989 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Transport/LiteNetLib Transport/LiteNetLib/Utils/NetSerializer.cs b/Transport/LiteNetLib Transport/LiteNetLib/Utils/NetSerializer.cs new file mode 100644 index 0000000..63f6cd6 --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/Utils/NetSerializer.cs @@ -0,0 +1,738 @@ +using System; +using System.Reflection; +using System.Collections.Generic; +using System.Net; +using System.Runtime.Serialization; + +namespace LiteNetLib.Utils +{ + public class InvalidTypeException : ArgumentException + { + public InvalidTypeException(string message) : base(message) { } + } + + public class ParseException : Exception + { + public ParseException(string message) : base(message) { } + } + + public class NetSerializer + { + private enum CallType + { + Basic, + Array, + List + } + + private abstract class FastCall + { + public CallType Type; + public virtual void Init(MethodInfo getMethod, MethodInfo setMethod, CallType type) { Type = type; } + public abstract void Read(T inf, NetDataReader r); + public abstract void Write(T inf, NetDataWriter w); + public abstract void ReadArray(T inf, NetDataReader r); + public abstract void WriteArray(T inf, NetDataWriter w); + public abstract void ReadList(T inf, NetDataReader r); + public abstract void WriteList(T inf, NetDataWriter w); + } + + private abstract class FastCallSpecific : FastCall + { + protected Func Getter; + protected Action Setter; + protected Func GetterArr; + protected Action SetterArr; + protected Func> GetterList; + protected Action> SetterList; + + public override void ReadArray(TClass inf, NetDataReader r) { throw new InvalidTypeException("Unsupported type: " + typeof(TProperty) + "[]"); } + public override void WriteArray(TClass inf, NetDataWriter w) { throw new InvalidTypeException("Unsupported type: " + typeof(TProperty) + "[]"); } + public override void ReadList(TClass inf, NetDataReader r) { throw new InvalidTypeException("Unsupported type: List<" + typeof(TProperty) + ">"); } + public override void WriteList(TClass inf, NetDataWriter w) { throw new InvalidTypeException("Unsupported type: List<" + typeof(TProperty) + ">"); } + + protected TProperty[] ReadArrayHelper(TClass inf, NetDataReader r) + { + ushort count = r.GetUShort(); + var arr = GetterArr(inf); + arr = arr == null || arr.Length != count ? new TProperty[count] : arr; + SetterArr(inf, arr); + return arr; + } + + protected TProperty[] WriteArrayHelper(TClass inf, NetDataWriter w) + { + var arr = GetterArr(inf); + w.Put((ushort)arr.Length); + return arr; + } + + protected List ReadListHelper(TClass inf, NetDataReader r, out int len) + { + len = r.GetUShort(); + var list = GetterList(inf); + if (list == null) + { + list = new List(len); + SetterList(inf, list); + } + return list; + } + + protected List WriteListHelper(TClass inf, NetDataWriter w, out int len) + { + var list = GetterList(inf); + if (list == null) + { + len = 0; + w.Put(0); + return null; + } + len = list.Count; + w.Put((ushort)len); + return list; + } + + public override void Init(MethodInfo getMethod, MethodInfo setMethod, CallType type) + { + base.Init(getMethod, setMethod, type); + switch (type) + { + case CallType.Array: + GetterArr = (Func)Delegate.CreateDelegate(typeof(Func), getMethod); + SetterArr = (Action)Delegate.CreateDelegate(typeof(Action), setMethod); + break; + case CallType.List: + GetterList = (Func>)Delegate.CreateDelegate(typeof(Func>), getMethod); + SetterList = (Action>)Delegate.CreateDelegate(typeof(Action>), setMethod); + break; + default: + Getter = (Func)Delegate.CreateDelegate(typeof(Func), getMethod); + Setter = (Action)Delegate.CreateDelegate(typeof(Action), setMethod); + break; + } + } + } + + private abstract class FastCallSpecificAuto : FastCallSpecific + { + protected abstract void ElementRead(NetDataReader r, out TProperty prop); + protected abstract void ElementWrite(NetDataWriter w, ref TProperty prop); + + public override void Read(TClass inf, NetDataReader r) + { + ElementRead(r, out var elem); + Setter(inf, elem); + } + + public override void Write(TClass inf, NetDataWriter w) + { + var elem = Getter(inf); + ElementWrite(w, ref elem); + } + + public override void ReadArray(TClass inf, NetDataReader r) + { + var arr = ReadArrayHelper(inf, r); + for (int i = 0; i < arr.Length; i++) + ElementRead(r, out arr[i]); + } + + public override void WriteArray(TClass inf, NetDataWriter w) + { + var arr = WriteArrayHelper(inf, w); + for (int i = 0; i < arr.Length; i++) + ElementWrite(w, ref arr[i]); + } + } + + private sealed class FastCallStatic : FastCallSpecific + { + private readonly Action _writer; + private readonly Func _reader; + + public FastCallStatic(Action write, Func read) + { + _writer = write; + _reader = read; + } + + public override void Read(TClass inf, NetDataReader r) { Setter(inf, _reader(r)); } + public override void Write(TClass inf, NetDataWriter w) { _writer(w, Getter(inf)); } + + public override void ReadList(TClass inf, NetDataReader r) + { + var list = ReadListHelper(inf, r, out int len); + int listCount = list.Count; + for (int i = 0; i < len; i++) + { + if (i < listCount) + list[i] = _reader(r); + else + list.Add(_reader(r)); + } + if (len < listCount) + list.RemoveRange(len, listCount - len); + } + + public override void WriteList(TClass inf, NetDataWriter w) + { + var list = WriteListHelper(inf, w, out int len); + for (int i = 0; i < len; i++) + _writer(w, list[i]); + } + + public override void ReadArray(TClass inf, NetDataReader r) + { + var arr = ReadArrayHelper(inf, r); + int len = arr.Length; + for (int i = 0; i < len; i++) + arr[i] = _reader(r); + } + + public override void WriteArray(TClass inf, NetDataWriter w) + { + var arr = WriteArrayHelper(inf, w); + int len = arr.Length; + for (int i = 0; i < len; i++) + _writer(w, arr[i]); + } + } + + private sealed class FastCallStruct : FastCallSpecific where TProperty : struct, INetSerializable + { + private TProperty _p; + + public override void Read(TClass inf, NetDataReader r) + { + _p.Deserialize(r); + Setter(inf, _p); + } + + public override void Write(TClass inf, NetDataWriter w) + { + _p = Getter(inf); + _p.Serialize(w); + } + + public override void ReadList(TClass inf, NetDataReader r) + { + var list = ReadListHelper(inf, r, out int len); + int listCount = list.Count; + for (int i = 0; i < len; i++) + { + var itm = default(TProperty); + itm.Deserialize(r); + if(i < listCount) + list[i] = itm; + else + list.Add(itm); + } + if (len < listCount) + list.RemoveRange(len, listCount - len); + } + + public override void WriteList(TClass inf, NetDataWriter w) + { + var list = WriteListHelper(inf, w, out int len); + for (int i = 0; i < len; i++) + list[i].Serialize(w); + } + + public override void ReadArray(TClass inf, NetDataReader r) + { + var arr = ReadArrayHelper(inf, r); + int len = arr.Length; + for (int i = 0; i < len; i++) + arr[i].Deserialize(r); + } + + public override void WriteArray(TClass inf, NetDataWriter w) + { + var arr = WriteArrayHelper(inf, w); + int len = arr.Length; + for (int i = 0; i < len; i++) + arr[i].Serialize(w); + } + } + + private sealed class FastCallClass : FastCallSpecific where TProperty : class, INetSerializable + { + private readonly Func _constructor; + public FastCallClass(Func constructor) { _constructor = constructor; } + + public override void Read(TClass inf, NetDataReader r) + { + var p = _constructor(); + p.Deserialize(r); + Setter(inf, p); + } + + public override void Write(TClass inf, NetDataWriter w) + { + var p = Getter(inf); + p?.Serialize(w); + } + + public override void ReadList(TClass inf, NetDataReader r) + { + var list = ReadListHelper(inf, r, out int len); + int listCount = list.Count; + for (int i = 0; i < len; i++) + { + if (i < listCount) + { + list[i].Deserialize(r); + } + else + { + var itm = _constructor(); + itm.Deserialize(r); + list.Add(itm); + } + } + if (len < listCount) + list.RemoveRange(len, listCount - len); + } + + public override void WriteList(TClass inf, NetDataWriter w) + { + var list = WriteListHelper(inf, w, out int len); + for (int i = 0; i < len; i++) + list[i].Serialize(w); + } + + public override void ReadArray(TClass inf, NetDataReader r) + { + var arr = ReadArrayHelper(inf, r); + int len = arr.Length; + for (int i = 0; i < len; i++) + { + arr[i] = _constructor(); + arr[i].Deserialize(r); + } + } + + public override void WriteArray(TClass inf, NetDataWriter w) + { + var arr = WriteArrayHelper(inf, w); + int len = arr.Length; + for (int i = 0; i < len; i++) + arr[i].Serialize(w); + } + } + + private class IntSerializer : FastCallSpecific + { + public override void Read(T inf, NetDataReader r) { Setter(inf, r.GetInt()); } + public override void Write(T inf, NetDataWriter w) { w.Put(Getter(inf)); } + public override void ReadArray(T inf, NetDataReader r) { SetterArr(inf, r.GetIntArray()); } + public override void WriteArray(T inf, NetDataWriter w) { w.PutArray(GetterArr(inf)); } + } + + private class UIntSerializer : FastCallSpecific + { + public override void Read(T inf, NetDataReader r) { Setter(inf, r.GetUInt()); } + public override void Write(T inf, NetDataWriter w) { w.Put(Getter(inf)); } + public override void ReadArray(T inf, NetDataReader r) { SetterArr(inf, r.GetUIntArray()); } + public override void WriteArray(T inf, NetDataWriter w) { w.PutArray(GetterArr(inf)); } + } + + private class ShortSerializer : FastCallSpecific + { + public override void Read(T inf, NetDataReader r) { Setter(inf, r.GetShort()); } + public override void Write(T inf, NetDataWriter w) { w.Put(Getter(inf)); } + public override void ReadArray(T inf, NetDataReader r) { SetterArr(inf, r.GetShortArray()); } + public override void WriteArray(T inf, NetDataWriter w) { w.PutArray(GetterArr(inf)); } + } + + private class UShortSerializer : FastCallSpecific + { + public override void Read(T inf, NetDataReader r) { Setter(inf, r.GetUShort()); } + public override void Write(T inf, NetDataWriter w) { w.Put(Getter(inf)); } + public override void ReadArray(T inf, NetDataReader r) { SetterArr(inf, r.GetUShortArray()); } + public override void WriteArray(T inf, NetDataWriter w) { w.PutArray(GetterArr(inf)); } + } + + private class LongSerializer : FastCallSpecific + { + public override void Read(T inf, NetDataReader r) { Setter(inf, r.GetLong()); } + public override void Write(T inf, NetDataWriter w) { w.Put(Getter(inf)); } + public override void ReadArray(T inf, NetDataReader r) { SetterArr(inf, r.GetLongArray()); } + public override void WriteArray(T inf, NetDataWriter w) { w.PutArray(GetterArr(inf)); } + } + + private class ULongSerializer : FastCallSpecific + { + public override void Read(T inf, NetDataReader r) { Setter(inf, r.GetULong()); } + public override void Write(T inf, NetDataWriter w) { w.Put(Getter(inf)); } + public override void ReadArray(T inf, NetDataReader r) { SetterArr(inf, r.GetULongArray()); } + public override void WriteArray(T inf, NetDataWriter w) { w.PutArray(GetterArr(inf)); } + } + + private class ByteSerializer : FastCallSpecific + { + public override void Read(T inf, NetDataReader r) { Setter(inf, r.GetByte()); } + public override void Write(T inf, NetDataWriter w) { w.Put(Getter(inf)); } + public override void ReadArray(T inf, NetDataReader r) { SetterArr(inf, r.GetBytesWithLength()); } + public override void WriteArray(T inf, NetDataWriter w) { w.PutBytesWithLength(GetterArr(inf)); } + } + + private class SByteSerializer : FastCallSpecific + { + public override void Read(T inf, NetDataReader r) { Setter(inf, r.GetSByte()); } + public override void Write(T inf, NetDataWriter w) { w.Put(Getter(inf)); } + public override void ReadArray(T inf, NetDataReader r) { SetterArr(inf, r.GetSBytesWithLength()); } + public override void WriteArray(T inf, NetDataWriter w) { w.PutSBytesWithLength(GetterArr(inf)); } + } + + private class FloatSerializer : FastCallSpecific + { + public override void Read(T inf, NetDataReader r) { Setter(inf, r.GetFloat()); } + public override void Write(T inf, NetDataWriter w) { w.Put(Getter(inf)); } + public override void ReadArray(T inf, NetDataReader r) { SetterArr(inf, r.GetFloatArray()); } + public override void WriteArray(T inf, NetDataWriter w) { w.PutArray(GetterArr(inf)); } + } + + private class DoubleSerializer : FastCallSpecific + { + public override void Read(T inf, NetDataReader r) { Setter(inf, r.GetDouble()); } + public override void Write(T inf, NetDataWriter w) { w.Put(Getter(inf)); } + public override void ReadArray(T inf, NetDataReader r) { SetterArr(inf, r.GetDoubleArray()); } + public override void WriteArray(T inf, NetDataWriter w) { w.PutArray(GetterArr(inf)); } + } + + private class BoolSerializer : FastCallSpecific + { + public override void Read(T inf, NetDataReader r) { Setter(inf, r.GetBool()); } + public override void Write(T inf, NetDataWriter w) { w.Put(Getter(inf)); } + public override void ReadArray(T inf, NetDataReader r) { SetterArr(inf, r.GetBoolArray()); } + public override void WriteArray(T inf, NetDataWriter w) { w.PutArray(GetterArr(inf)); } + } + + private class CharSerializer : FastCallSpecificAuto + { + protected override void ElementWrite(NetDataWriter w, ref char prop) { w.Put(prop); } + protected override void ElementRead(NetDataReader r, out char prop) { prop = r.GetChar(); } + } + + private class IPEndPointSerializer : FastCallSpecificAuto + { + protected override void ElementWrite(NetDataWriter w, ref IPEndPoint prop) { w.Put(prop); } + protected override void ElementRead(NetDataReader r, out IPEndPoint prop) { prop = r.GetNetEndPoint(); } + } + + private class StringSerializer : FastCallSpecific + { + private readonly int _maxLength; + public StringSerializer(int maxLength) { _maxLength = maxLength > 0 ? maxLength : short.MaxValue; } + public override void Read(T inf, NetDataReader r) { Setter(inf, r.GetString(_maxLength)); } + public override void Write(T inf, NetDataWriter w) { w.Put(Getter(inf), _maxLength); } + public override void ReadArray(T inf, NetDataReader r) { SetterArr(inf, r.GetStringArray(_maxLength)); } + public override void WriteArray(T inf, NetDataWriter w) { w.PutArray(GetterArr(inf), _maxLength); } + } + + private class EnumByteSerializer : FastCall + { + protected readonly PropertyInfo Property; + protected readonly Type PropertyType; + public EnumByteSerializer(PropertyInfo property, Type propertyType) + { + Property = property; + PropertyType = propertyType; + } + public override void Read(T inf, NetDataReader r) { Property.SetValue(inf, Enum.ToObject(PropertyType, r.GetByte()), null); } + public override void Write(T inf, NetDataWriter w) { w.Put((byte)Property.GetValue(inf, null)); } + public override void ReadArray(T inf, NetDataReader r) { throw new InvalidTypeException("Unsupported type: Enum[]"); } + public override void WriteArray(T inf, NetDataWriter w) { throw new InvalidTypeException("Unsupported type: Enum[]"); } + public override void ReadList(T inf, NetDataReader r) { throw new InvalidTypeException("Unsupported type: List"); } + public override void WriteList(T inf, NetDataWriter w) { throw new InvalidTypeException("Unsupported type: List"); } + } + + private class EnumIntSerializer : EnumByteSerializer + { + public EnumIntSerializer(PropertyInfo property, Type propertyType) : base(property, propertyType) { } + public override void Read(T inf, NetDataReader r) { Property.SetValue(inf, Enum.ToObject(PropertyType, r.GetInt()), null); } + public override void Write(T inf, NetDataWriter w) { w.Put((int)Property.GetValue(inf, null)); } + } + + private sealed class ClassInfo + { + public static ClassInfo Instance; + private readonly FastCall[] _serializers; + private readonly int _membersCount; + + public ClassInfo(List> serializers) + { + _membersCount = serializers.Count; + _serializers = serializers.ToArray(); + } + + public void Write(T obj, NetDataWriter writer) + { + for (int i = 0; i < _membersCount; i++) + { + var s = _serializers[i]; + if (s.Type == CallType.Basic) + s.Write(obj, writer); + else if (s.Type == CallType.Array) + s.WriteArray(obj, writer); + else + s.WriteList(obj, writer); + } + } + + public void Read(T obj, NetDataReader reader) + { + for (int i = 0; i < _membersCount; i++) + { + var s = _serializers[i]; + if (s.Type == CallType.Basic) + s.Read(obj, reader); + else if(s.Type == CallType.Array) + s.ReadArray(obj, reader); + else + s.ReadList(obj, reader); + } + } + } + + private abstract class CustomType + { + public abstract FastCall Get(); + } + + private sealed class CustomTypeStruct : CustomType where TProperty : struct, INetSerializable + { + public override FastCall Get() { return new FastCallStruct(); } + } + + private sealed class CustomTypeClass : CustomType where TProperty : class, INetSerializable + { + private readonly Func _constructor; + public CustomTypeClass(Func constructor) { _constructor = constructor; } + public override FastCall Get() { return new FastCallClass(_constructor); } + } + + private sealed class CustomTypeStatic : CustomType + { + private readonly Action _writer; + private readonly Func _reader; + public CustomTypeStatic(Action writer, Func reader) + { + _writer = writer; + _reader = reader; + } + public override FastCall Get() { return new FastCallStatic(_writer, _reader); } + } + + /// + /// Register custom property type + /// + /// INetSerializable structure + public void RegisterNestedType() where T : struct, INetSerializable + { + _registeredTypes.Add(typeof(T), new CustomTypeStruct()); + } + + /// + /// Register custom property type + /// + /// INetSerializable class + public void RegisterNestedType(Func constructor) where T : class, INetSerializable + { + _registeredTypes.Add(typeof(T), new CustomTypeClass(constructor)); + } + + /// + /// Register custom property type + /// + /// Any packet + /// custom type writer + /// custom type reader + public void RegisterNestedType(Action writer, Func reader) + { + _registeredTypes.Add(typeof(T), new CustomTypeStatic(writer, reader)); + } + + private NetDataWriter _writer; + private readonly int _maxStringLength; + private readonly Dictionary _registeredTypes = new Dictionary(); + + public NetSerializer() : this(0) + { + } + + public NetSerializer(int maxStringLength) + { + _maxStringLength = maxStringLength; + } + + private ClassInfo RegisterInternal() + { + if (ClassInfo.Instance != null) + return ClassInfo.Instance; + + Type t = typeof(T); + var props = t.GetProperties( + BindingFlags.Instance | + BindingFlags.Public | + BindingFlags.GetProperty | + BindingFlags.SetProperty); + var serializers = new List>(); + for (int i = 0; i < props.Length; i++) + { + var property = props[i]; + var propertyType = property.PropertyType; + + var elementType = propertyType.IsArray ? propertyType.GetElementType() : propertyType; + var callType = propertyType.IsArray ? CallType.Array : CallType.Basic; + + if (propertyType.IsGenericType && propertyType.GetGenericTypeDefinition() == typeof(List<>)) + { + elementType = propertyType.GetGenericArguments()[0]; + callType = CallType.List; + } + + if (Attribute.IsDefined(property, typeof(IgnoreDataMemberAttribute))) + continue; + + var getMethod = property.GetGetMethod(); + var setMethod = property.GetSetMethod(); + if (getMethod == null || setMethod == null) + continue; + + FastCall serialzer = null; + if (propertyType.IsEnum) + { + var underlyingType = Enum.GetUnderlyingType(propertyType); + if (underlyingType == typeof(byte)) + serialzer = new EnumByteSerializer(property, propertyType); + else if (underlyingType == typeof(int)) + serialzer = new EnumIntSerializer(property, propertyType); + else + throw new InvalidTypeException("Not supported enum underlying type: " + underlyingType.Name); + } + else if (elementType == typeof(string)) + serialzer = new StringSerializer(_maxStringLength); + else if (elementType == typeof(bool)) + serialzer = new BoolSerializer(); + else if (elementType == typeof(byte)) + serialzer = new ByteSerializer(); + else if (elementType == typeof(sbyte)) + serialzer = new SByteSerializer(); + else if (elementType == typeof(short)) + serialzer = new ShortSerializer(); + else if (elementType == typeof(ushort)) + serialzer = new UShortSerializer(); + else if (elementType == typeof(int)) + serialzer = new IntSerializer(); + else if (elementType == typeof(uint)) + serialzer = new UIntSerializer(); + else if (elementType == typeof(long)) + serialzer = new LongSerializer(); + else if (elementType == typeof(ulong)) + serialzer = new ULongSerializer(); + else if (elementType == typeof(float)) + serialzer = new FloatSerializer(); + else if (elementType == typeof(double)) + serialzer = new DoubleSerializer(); + else if (elementType == typeof(char)) + serialzer = new CharSerializer(); + else if (elementType == typeof(IPEndPoint)) + serialzer = new IPEndPointSerializer(); + else + { + _registeredTypes.TryGetValue(elementType, out var customType); + if (customType != null) + serialzer = customType.Get(); + } + + if (serialzer != null) + { + serialzer.Init(getMethod, setMethod, callType); + serializers.Add(serialzer); + } + else + { + throw new InvalidTypeException("Unknown property type: " + propertyType.FullName); + } + } + ClassInfo.Instance = new ClassInfo(serializers); + return ClassInfo.Instance; + } + + /// 's fields are not supported, or it has no fields + public void Register() + { + RegisterInternal(); + } + + /// + /// Reads packet with known type + /// + /// NetDataReader with packet + /// Returns packet if packet in reader is matched type + /// 's fields are not supported, or it has no fields + public T Deserialize(NetDataReader reader) where T : class, new() + { + var info = RegisterInternal(); + var result = new T(); + try + { + info.Read(result, reader); + } + catch + { + return null; + } + return result; + } + + /// + /// Reads packet with known type (non alloc variant) + /// + /// NetDataReader with packet + /// Deserialization target + /// Returns true if packet in reader is matched type + /// 's fields are not supported, or it has no fields + public bool Deserialize(NetDataReader reader, T target) where T : class, new() + { + var info = RegisterInternal(); + try + { + info.Read(target, reader); + } + catch + { + return false; + } + return true; + } + + /// + /// Serialize object to NetDataWriter (fast) + /// + /// Serialization target NetDataWriter + /// Object to serialize + /// 's fields are not supported, or it has no fields + public void Serialize(NetDataWriter writer, T obj) where T : class, new() + { + RegisterInternal().Write(obj, writer); + } + + /// + /// Serialize object to byte array + /// + /// Object to serialize + /// byte array with serialized data + public byte[] Serialize(T obj) where T : class, new() + { + if (_writer == null) + _writer = new NetDataWriter(); + _writer.Reset(); + Serialize(_writer, obj); + return _writer.CopyData(); + } + } +} diff --git a/Transport/LiteNetLib Transport/LiteNetLib/Utils/NetSerializer.cs.meta b/Transport/LiteNetLib Transport/LiteNetLib/Utils/NetSerializer.cs.meta new file mode 100644 index 0000000..0caf97d --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/Utils/NetSerializer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e77693e1445e6a748b5044f29adc4d4e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Transport/LiteNetLib Transport/LiteNetLib/Utils/NtpPacket.cs b/Transport/LiteNetLib Transport/LiteNetLib/Utils/NtpPacket.cs new file mode 100644 index 0000000..1ba5210 --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/Utils/NtpPacket.cs @@ -0,0 +1,423 @@ +using System; + +namespace LiteNetLib.Utils +{ + /// + /// Represents RFC4330 SNTP packet used for communication to and from a network time server. + /// + /// + /// + /// Most applications should just use the property. + /// + /// + /// The same data structure represents both request and reply packets. + /// Request and reply differ in which properties are set and to what values. + /// + /// + /// The only real property is . + /// All other properties read from and write to the underlying byte array + /// with the exception of , + /// which is not part of the packet on network and it is instead set locally after receiving the packet. + /// + /// + /// Copied from GuerrillaNtp project + /// with permission from Robert Vazan (@robertvazan) under MIT license, see https://github.com/RevenantX/LiteNetLib/pull/236 + /// + /// + public class NtpPacket + { + private static readonly DateTime Epoch = new DateTime(1900, 1, 1); + + /// + /// Gets RFC4330-encoded SNTP packet. + /// + /// + /// Byte array containing RFC4330-encoded SNTP packet. It is at least 48 bytes long. + /// + /// + /// This is the only real property. All other properties except + /// read from or write to this byte array. + /// + public byte[] Bytes { get; } + + /// + /// Gets the leap second indicator. + /// + /// + /// Leap second warning, if any. Special value + /// indicates unsynchronized server clock. + /// Default is . + /// + /// + /// Only servers fill in this property. Clients can consult this property for possible leap second warning. + /// + public NtpLeapIndicator LeapIndicator => (NtpLeapIndicator)((Bytes[0] & 0xC0) >> 6); + + /// + /// Gets or sets protocol version number. + /// + /// + /// SNTP protocol version. Default is 4, which is the latest version at the time of this writing. + /// + /// + /// In request packets, clients should leave this property at default value 4. + /// Servers usually reply with the same protocol version. + /// + public int VersionNumber + { + get => (Bytes[0] & 0x38) >> 3; + private set => Bytes[0] = (byte)((Bytes[0] & ~0x38) | value << 3); + } + + /// + /// Gets or sets SNTP packet mode, i.e. whether this is client or server packet. + /// + /// + /// SNTP packet mode. Default is in newly created packets. + /// Server reply should have this property set to . + /// + public NtpMode Mode + { + get => (NtpMode)(Bytes[0] & 0x07); + private set => Bytes[0] = (byte)((Bytes[0] & ~0x07) | (int)value); + } + + /// + /// Gets server's distance from the reference clock. + /// + /// + /// + /// Distance from the reference clock. This property is set only in server reply packets. + /// Servers connected directly to reference clock hardware set this property to 1. + /// Statum number is incremented by 1 on every hop down the NTP server hierarchy. + /// + /// + /// Special value 0 indicates that this packet is a Kiss-o'-Death message + /// with kiss code stored in . + /// + /// + public int Stratum => Bytes[1]; + + /// + /// Gets server's preferred polling interval. + /// + /// + /// Polling interval in log2 seconds, e.g. 4 stands for 16s and 17 means 131,072s. + /// + public int Poll => Bytes[2]; + + /// + /// Gets the precision of server clock. + /// + /// + /// Clock precision in log2 seconds, e.g. -20 for microsecond precision. + /// + public int Precision => (sbyte)Bytes[3]; + + /// + /// Gets the total round-trip delay from the server to the reference clock. + /// + /// + /// Round-trip delay to the reference clock. Normally a positive value smaller than one second. + /// + public TimeSpan RootDelay => GetTimeSpan32(4); + + /// + /// Gets the estimated error in time reported by the server. + /// + /// + /// Estimated error in time reported by the server. Normally a positive value smaller than one second. + /// + public TimeSpan RootDispersion => GetTimeSpan32(8); + + /// + /// Gets the ID of the time source used by the server or Kiss-o'-Death code sent by the server. + /// + /// + /// + /// ID of server's time source or Kiss-o'-Death code. + /// Purpose of this property depends on value of property. + /// + /// + /// Stratum 1 servers write here one of several special values that describe the kind of hardware clock they use. + /// + /// + /// Stratum 2 and lower servers set this property to IPv4 address of their upstream server. + /// If upstream server has IPv6 address, the address is hashed, because it doesn't fit in this property. + /// + /// + /// When server sets to special value 0, + /// this property contains so called kiss code that instructs the client to stop querying the server. + /// + /// + public uint ReferenceId => GetUInt32BE(12); + + /// + /// Gets or sets the time when the server clock was last set or corrected. + /// + /// + /// Time when the server clock was last set or corrected or null when not specified. + /// + /// + /// This Property is usually set only by servers. It usually lags server's current time by several minutes, + /// so don't use this property for time synchronization. + /// + public DateTime? ReferenceTimestamp => GetDateTime64(16); + + /// + /// Gets or sets the time when the client sent its request. + /// + /// + /// This property is null in request packets. + /// In reply packets, it is the time when the client sent its request. + /// Servers copy this value from + /// that they find in received request packet. + /// + /// + /// + public DateTime? OriginTimestamp => GetDateTime64(24); + + /// + /// Gets or sets the time when the request was received by the server. + /// + /// + /// This property is null in request packets. + /// In reply packets, it is the time when the server received client request. + /// + /// + /// + public DateTime? ReceiveTimestamp => GetDateTime64(32); + + /// + /// Gets or sets the time when the packet was sent. + /// + /// + /// Time when the packet was sent. It should never be null. + /// Default value is . + /// + /// + /// This property must be set by both clients and servers. + /// + /// + /// + public DateTime? TransmitTimestamp { get { return GetDateTime64(40); } private set { SetDateTime64(40, value); } } + + /// + /// Gets or sets the time of reception of response SNTP packet on the client. + /// + /// + /// Time of reception of response SNTP packet on the client. It is null in request packets. + /// + /// + /// This property is not part of the protocol and has to be set when reply packet is received. + /// + /// + /// + public DateTime? DestinationTimestamp { get; private set; } + + /// + /// Gets the round-trip time to the server. + /// + /// + /// Time the request spent traveling to the server plus the time the reply spent traveling back. + /// This is calculated from timestamps in the packet as (t1 - t0) + (t3 - t2) + /// where t0 is , + /// t1 is , + /// t2 is , + /// and t3 is . + /// This property throws an exception in request packets. + /// + public TimeSpan RoundTripTime + { + get + { + CheckTimestamps(); + return (ReceiveTimestamp.Value - OriginTimestamp.Value) + (DestinationTimestamp.Value - TransmitTimestamp.Value); + } + } + + /// + /// Gets the offset that should be added to local time to synchronize it with server time. + /// + /// + /// Time difference between server and client. It should be added to local time to get server time. + /// It is calculated from timestamps in the packet as 0.5 * ((t1 - t0) - (t3 - t2)) + /// where t0 is , + /// t1 is , + /// t2 is , + /// and t3 is . + /// This property throws an exception in request packets. + /// + public TimeSpan CorrectionOffset + { + get + { + CheckTimestamps(); + return TimeSpan.FromTicks(((ReceiveTimestamp.Value - OriginTimestamp.Value) - (DestinationTimestamp.Value - TransmitTimestamp.Value)).Ticks / 2); + } + } + + /// + /// Initializes default request packet. + /// + /// + /// Properties and + /// are set appropriately for request packet. Property + /// is set to . + /// + public NtpPacket() : this(new byte[48]) + { + Mode = NtpMode.Client; + VersionNumber = 4; + TransmitTimestamp = DateTime.UtcNow; + } + + /// + /// Initializes packet from received data. + /// + internal NtpPacket(byte[] bytes) + { + if (bytes.Length < 48) + throw new ArgumentException("SNTP reply packet must be at least 48 bytes long.", "bytes"); + Bytes = bytes; + } + + /// + /// Initializes packet from data received from a server. + /// + /// Data received from the server. + /// Utc time of reception of response SNTP packet on the client. + /// + public static NtpPacket FromServerResponse(byte[] bytes, DateTime destinationTimestamp) + { + return new NtpPacket(bytes) { DestinationTimestamp = destinationTimestamp }; + } + + internal void ValidateRequest() + { + if (Mode != NtpMode.Client) + throw new InvalidOperationException("This is not a request SNTP packet."); + if (VersionNumber == 0) + throw new InvalidOperationException("Protocol version of the request is not specified."); + if (TransmitTimestamp == null) + throw new InvalidOperationException("TransmitTimestamp must be set in request packet."); + } + + internal void ValidateReply() + { + if (Mode != NtpMode.Server) + throw new InvalidOperationException("This is not a reply SNTP packet."); + if (VersionNumber == 0) + throw new InvalidOperationException("Protocol version of the reply is not specified."); + if (Stratum == 0) + throw new InvalidOperationException(string.Format("Received Kiss-o'-Death SNTP packet with code 0x{0:x}.", ReferenceId)); + if (LeapIndicator == NtpLeapIndicator.AlarmCondition) + throw new InvalidOperationException("SNTP server has unsynchronized clock."); + CheckTimestamps(); + } + + private void CheckTimestamps() + { + if (OriginTimestamp == null) + throw new InvalidOperationException("Origin timestamp is missing."); + if (ReceiveTimestamp == null) + throw new InvalidOperationException("Receive timestamp is missing."); + if (TransmitTimestamp == null) + throw new InvalidOperationException("Transmit timestamp is missing."); + if (DestinationTimestamp == null) + throw new InvalidOperationException("Destination timestamp is missing."); + } + + private DateTime? GetDateTime64(int offset) + { + var field = GetUInt64BE(offset); + if (field == 0) + return null; + return new DateTime(Epoch.Ticks + Convert.ToInt64(field * (1.0 / (1L << 32) * 10000000.0))); + } + + private void SetDateTime64(int offset, DateTime? value) + { + SetUInt64BE(offset, value == null ? 0 : Convert.ToUInt64((value.Value.Ticks - Epoch.Ticks) * (0.0000001 * (1L << 32)))); + } + + private TimeSpan GetTimeSpan32(int offset) + { + return TimeSpan.FromSeconds(GetInt32BE(offset) / (double)(1 << 16)); + } + + private ulong GetUInt64BE(int offset) + { + return SwapEndianness(BitConverter.ToUInt64(Bytes, offset)); + } + + private void SetUInt64BE(int offset, ulong value) + { + FastBitConverter.GetBytes(Bytes, offset, SwapEndianness(value)); + } + + private int GetInt32BE(int offset) + { + return (int)GetUInt32BE(offset); + } + + private uint GetUInt32BE(int offset) + { + return SwapEndianness(BitConverter.ToUInt32(Bytes, offset)); + } + + private static uint SwapEndianness(uint x) + { + return ((x & 0xff) << 24) | ((x & 0xff00) << 8) | ((x & 0xff0000) >> 8) | ((x & 0xff000000) >> 24); + } + + private static ulong SwapEndianness(ulong x) + { + return ((ulong)SwapEndianness((uint)x) << 32) | SwapEndianness((uint)(x >> 32)); + } + } + + /// + /// Represents leap second warning from the server that instructs the client to add or remove leap second. + /// + /// + public enum NtpLeapIndicator + { + /// + /// No leap second warning. No action required. + /// + NoWarning, + + /// + /// Warns the client that the last minute of the current day has 61 seconds. + /// + LastMinuteHas61Seconds, + + /// + /// Warns the client that the last minute of the current day has 59 seconds. + /// + LastMinuteHas59Seconds, + + /// + /// Special value indicating that the server clock is unsynchronized and the returned time is unreliable. + /// + AlarmCondition + } + + /// + /// Describes SNTP packet mode, i.e. client or server. + /// + /// + public enum NtpMode + { + /// + /// Identifies client-to-server SNTP packet. + /// + Client = 3, + + /// + /// Identifies server-to-client SNTP packet. + /// + Server = 4, + } +} diff --git a/Transport/LiteNetLib Transport/LiteNetLib/Utils/NtpPacket.cs.meta b/Transport/LiteNetLib Transport/LiteNetLib/Utils/NtpPacket.cs.meta new file mode 100644 index 0000000..2d831ef --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/Utils/NtpPacket.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a1ab93956916692409ea5f00f581db6f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Transport/LiteNetLib Transport/LiteNetLib/Utils/NtpRequest.cs b/Transport/LiteNetLib Transport/LiteNetLib/Utils/NtpRequest.cs new file mode 100644 index 0000000..bd7f74f --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/Utils/NtpRequest.cs @@ -0,0 +1,42 @@ +using System.Net; +using System.Net.Sockets; + +namespace LiteNetLib.Utils +{ + internal sealed class NtpRequest + { + private const int ResendTimer = 1000; + private const int KillTimer = 10000; + public const int DefaultPort = 123; + private readonly IPEndPoint _ntpEndPoint; + private int _resendTime = ResendTimer; + private int _killTime = 0; + + public NtpRequest(IPEndPoint endPoint) + { + _ntpEndPoint = endPoint; + } + + public bool NeedToKill => _killTime >= KillTimer; + + public bool Send(Socket socket, int time) + { + _resendTime += time; + _killTime += time; + if (_resendTime < ResendTimer) + { + return false; + } + var packet = new NtpPacket(); + try + { + int sendCount = socket.SendTo(packet.Bytes, 0, packet.Bytes.Length, SocketFlags.None, _ntpEndPoint); + return sendCount == packet.Bytes.Length; + } + catch + { + return false; + } + } + } +} diff --git a/Transport/LiteNetLib Transport/LiteNetLib/Utils/NtpRequest.cs.meta b/Transport/LiteNetLib Transport/LiteNetLib/Utils/NtpRequest.cs.meta new file mode 100644 index 0000000..8a906bb --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/Utils/NtpRequest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2feec8d850902ea4daaad8d9b1dec189 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Transport/LiteNetLib Transport/LiteNetLib/package.json b/Transport/LiteNetLib Transport/LiteNetLib/package.json new file mode 100644 index 0000000..e501145 --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/package.json @@ -0,0 +1,11 @@ +{ + "name": "com.revenantx.litenetlib", + "version": "1.0.1-1", + "displayName": "LiteNetLib", + "description": "Lite reliable UDP library for .NET Standard 2.0 (Mono, .NET Core, .NET Framework)", + "unity": "2018.3", + "author": { + "name": "RevenantX", + "url": "https://github.com/RevenantX" + } +} \ No newline at end of file diff --git a/Transport/LiteNetLib Transport/LiteNetLib/package.json.meta b/Transport/LiteNetLib Transport/LiteNetLib/package.json.meta new file mode 100644 index 0000000..61f9570 --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 64eaff286dd146747bc5b21fda9c8213 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Transport/LiteNetLib Transport/LiteNetLibTransportProvider.asset b/Transport/LiteNetLib Transport/LiteNetLibTransportProvider.asset new file mode 100644 index 0000000..a4cd2ed --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLibTransportProvider.asset @@ -0,0 +1,14 @@ +%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: 5b519f64e02c1ed48a5a00039c4f6c4e, type: 3} + m_Name: LiteNetLibTransportProvider + m_EditorClassIdentifier: diff --git a/Transport/LiteNetLib Transport/LiteNetLibTransportProvider.asset.meta b/Transport/LiteNetLib Transport/LiteNetLibTransportProvider.asset.meta new file mode 100644 index 0000000..466ef66 --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLibTransportProvider.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 45d8249dfdf511d429f92c6a4a4e26f4 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Transport/LiteNetLib Transport/LiteNetLibTransportProvider.cs b/Transport/LiteNetLib Transport/LiteNetLibTransportProvider.cs new file mode 100644 index 0000000..ca80dd5 --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLibTransportProvider.cs @@ -0,0 +1,279 @@ +using LiteNetLib; +using LiteNetLib.Utils; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using System.Net; +using System.Net.Sockets; +using System.Runtime; +using System; +using Netick.Unity; + +namespace Netick.Transport +{ + [CreateAssetMenu(fileName = "LiteNetLibTransportProvider", menuName = "Netick/Transport/LiteNetLibTransportProvider", order = 1)] + public class LiteNetLibTransportProvider : NetworkTransportProvider + { + public override NetworkTransport MakeTransportInstance() => new LiteNetLibTransport(); + } + + public class LiteNetLibTransport : NetworkTransport, INetEventListener + { + public class LNLConnection : TransportConnection + { + public LiteNetLibTransport Transport; + public NetPeer LNLPeer; + public override IEndPoint EndPoint => LNLPeer.EndPoint.ToNetickEndPoint(); + + public override int Mtu => LNLPeer.Mtu; + + public LNLConnection(LiteNetLibTransport transport) + { + Transport = transport; + } + + public unsafe override void Send(IntPtr ptr, int length) + { + byte* p = (byte*)ptr.ToPointer(); + + for (int i = 0; i < length; i++) + Transport._bytes[i] = p[i]; + + LNLPeer.Send(Transport._bytes, 0, length, DeliveryMethod.Unreliable); + } + } + + private NetManager _netManager; + + + private BitBuffer _buffer; + // private int _bufferSize; + + private readonly byte[] _bytes = new byte[2048]; + private readonly byte[] _connectionBytes = new byte[200]; + + private int _port; + private bool _isServer = false; + private Dictionary _clients = new Dictionary(); + private Queue _freeClients = new Queue(); + + // LAN Matchmaking + private List _sessions = new List(); + private NetDataWriter _writer = new NetDataWriter(); + private string _machineName; + + public override void Init() + { + _buffer = new BitBuffer(createChunks: false); + // _bufferSize = 875 * 4; + + _netManager = new NetManager((INetEventListener)this) { AutoRecycle = true }; + _machineName = Environment.MachineName; + //_netManager.DisconnectTimeout = 1000; + + for (int i = 0; i < Engine.Config.MaxPlayers; i++) + _freeClients.Enqueue(new LNLConnection(this)); + } + + public override void PollEvents() + { + _netManager.PollEvents(); + } + + public override void ForceUpdate() + { + _netManager.TriggerUpdate(); + } + + public override void Run(RunMode mode, int port) + { + if (mode == RunMode.Client) + { + _netManager.UnconnectedMessagesEnabled = true; + _netManager.Start(); + _isServer = false; + } + + else + { + _netManager.BroadcastReceiveEnabled = true; + _netManager.Start(port); + _isServer = true; + } + + _port = port; + } + + public override void Shutdown() + { + _netManager.Stop(); + } + + public override void Connect(string address, int port, byte[] connectionData, int connectionDataLen) + { + if (!_netManager.IsRunning) + _netManager.Start(); + + if (connectionData == null) + { + _netManager.Connect(address, port, ""); + } + else + { + _writer.Reset(); + _writer.Put(connectionData, 0, connectionDataLen); + _netManager.Connect(address, port, _writer); + } + + + } + + public override void Disconnect(TransportConnection connection) + { + _netManager.DisconnectPeer(((LNLConnection)connection).LNLPeer); + } + + //public override void HostMatch(string name) + //{ + + //} + + //public override void UpdateMatchList() + //{ + // if (!_netManager.IsRunning) + // _netManager.Start(); + + // _sessions.Clear(); + // _writer.Reset(); + // _writer.Put(NetickConfig.LAN_DISCOVERY); + // _netManager.SendBroadcast(_writer, _port); + //} + + /// //////////////////////////////////////////// + + void INetEventListener.OnConnectionRequest(ConnectionRequest request) + { + if (_clients.Count >= Engine.Config.MaxPlayers) + { + request.Reject(); + return; + } + + int len = request.Data.AvailableBytes; + request.Data.GetBytes(_connectionBytes, 0, len); + bool accepted = NetworkPeer.OnConnectRequest(_connectionBytes, len, request.RemoteEndPoint.ToNetickEndPoint()); + + if (accepted) + request.Accept(); + else + request.Reject(); + } + + void INetEventListener.OnPeerConnected(NetPeer peer) + { + var connection = _freeClients.Dequeue(); + connection.LNLPeer = peer; + + _clients.Add(peer, connection); + NetworkPeer.OnConnected(connection); + } + + void INetEventListener.OnPeerDisconnected(NetPeer peer, DisconnectInfo disconnectInfo) + { + if (!_isServer) + { + if (disconnectInfo.Reason == DisconnectReason.ConnectionRejected || disconnectInfo.Reason == DisconnectReason.ConnectionFailed) + { + NetworkPeer.OnConnectFailed(ConnectionFailedReason.Refused); + return; + } + + if (peer == null) + { + Debug.Log($"ERROR: {disconnectInfo.Reason}"); + NetworkPeer.OnConnectFailed(ConnectionFailedReason.Refused); + return; + } + + } + + if (peer == null) + { + return; + } + + if (_clients.ContainsKey(peer)) + { + TransportDisconnectReason reason = disconnectInfo.Reason == DisconnectReason.Timeout ? TransportDisconnectReason.Timeout : TransportDisconnectReason.Shutdown; + + NetworkPeer.OnDisconnected(_clients[peer], reason); + _freeClients.Enqueue(_clients[peer]); + _clients.Remove(peer); + } + } + + unsafe void INetEventListener.OnNetworkReceive(NetPeer peer, NetPacketReader reader, byte channel, DeliveryMethod deliveryMethod) + { + if (_clients.TryGetValue(peer, out var c)) + { + var len = reader.AvailableBytes; + reader.GetBytes(_bytes, 0, reader.AvailableBytes); + + fixed(byte* ptr = _bytes) + { + _buffer.SetFrom(ptr, len, _bytes.Length); + NetworkPeer.Receive(c, _buffer); + } + } + } + + + void INetEventListener.OnNetworkReceiveUnconnected(IPEndPoint remoteEndPoint, NetPacketReader reader, UnconnectedMessageType messageType) + { + //ulong msgType = reader.GetULong(); + + //if (msgType == NetickConfig.LAN_DISCOVERY_RESPONSE) + //{ + // string name = reader.GetString(); + // int port = reader.GetInt(); + + // var newSession = new Session() + // { + // Name = name, + // IP = remoteEndPoint.Address.ToString(), + // Port = port + // }; + + // if (!_sessions.Contains(newSession)) + // _sessions.Add(newSession); + + // OnMatchListUpdate(_sessions); + //} + + //else if (_isServer && msgType == NetickConfig.LAN_DISCOVERY) + //{ + // _writer.Reset(); + // _writer.Put(NetickConfig.LAN_DISCOVERY_RESPONSE); + // _writer.Put(_machineName); + // _writer.Put(_port); + + // _netManager.SendUnconnectedMessage(_writer, remoteEndPoint); + //} + } + + + void INetEventListener.OnNetworkError(IPEndPoint endPoint, SocketError socketError) + { + Debug.Log("[S] NetworkError: " + socketError); + NetworkPeer.OnConnectFailed(ConnectionFailedReason.Refused); + } + + void INetEventListener.OnNetworkLatencyUpdate(NetPeer peer, int latency) { } + + + + } + + +} + diff --git a/Transport/LiteNetLib Transport/LiteNetLibTransportProvider.cs.meta b/Transport/LiteNetLib Transport/LiteNetLibTransportProvider.cs.meta new file mode 100644 index 0000000..b3b4f25 --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLibTransportProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5b519f64e02c1ed48a5a00039c4f6c4e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/package.json b/package.json new file mode 100644 index 0000000..a3993cf --- /dev/null +++ b/package.json @@ -0,0 +1,33 @@ +{ + "name": "com.karrar.netick", + "version": "0.11.12", + "displayName": "Netick", + "description": "A networking library for unity", + "unity": "2021.3", + "dependencies": { + "com.unity.nuget.mono-cecil": "1.11.4" + }, + "documentationUrl": "https://www.netick.net/docs.html", + "samples": [ + { + "displayName": "Bomberman", + "description": "A simple bomberman clone.", + "path": "Samples~/Bomberman" + }, + { + "displayName": "FPS", + "description": "A basic FPS sample.", + "path": "Samples~/First Person Shooter" + } + ], + "keywords": [ + "networking", + "multiplayer", + "online" + ], + "author": { + "name": "Karrar Rahim", + "email": "karsoftgames@gmail.com", + "url": "https://www.netick.net" + } +} \ No newline at end of file diff --git a/package.json.meta b/package.json.meta new file mode 100644 index 0000000..19102f6 --- /dev/null +++ b/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: a8a6adca0f532e840a1aeb3a5891c393 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant:

pBP>s|# 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 z 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 Lo0Oz7De3k__BackingField: {x: 0, y: 0} +--- !u!143 &1417749684482701243 +CharacterController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7011933354638177272} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Height: 2 + m_Radius: 0.5 + m_SlopeLimit: 45 + m_StepOffset: 0.3 + m_SkinWidth: 0.08 + m_MinMoveDistance: 0.001 + m_Center: {x: 0, y: 0, z: 0} diff --git a/Samples~/First Person Shooter/Network Prefabs/FPS Player.prefab.meta b/Samples~/First Person Shooter/Network Prefabs/FPS Player.prefab.meta new file mode 100644 index 0000000..b9ee946 --- /dev/null +++ b/Samples~/First Person Shooter/Network Prefabs/FPS Player.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d66d5a97430d3364890108321123b309 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/First Person Shooter/Scenes.meta b/Samples~/First Person Shooter/Scenes.meta new file mode 100644 index 0000000..cc394b9 --- /dev/null +++ b/Samples~/First Person Shooter/Scenes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 436fd3bf7e09a43439f6045fafe14bec +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/First Person Shooter/Scenes/FPS Scene.unity b/Samples~/First Person Shooter/Scenes/FPS Scene.unity new file mode 100644 index 0000000..fed3209 --- /dev/null +++ b/Samples~/First Person Shooter/Scenes/FPS Scene.unity @@ -0,0 +1,798 @@ +%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: 0} + m_IndirectSpecularColor: {r: 0.43668216, g: 0.48427725, b: 0.56452835, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + 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: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + 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 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &10129274 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 10129275} + m_Layer: 0 + m_Name: SpawnPos + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &10129275 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 10129274} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -135.0816, y: 76.5, z: 44.8519} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &375435379 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 375435382} + - component: {fileID: 375435381} + - component: {fileID: 375435380} + - component: {fileID: 375435383} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &375435380 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 375435379} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SendPointerHoverToParent: 1 + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &375435381 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 375435379} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!4 &375435382 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 375435379} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -416.5, y: -284, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 476934809} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &375435383 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 375435379} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -355052428, guid: da78c2c9df60edc4fb5f65b59fa57c41, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &476934805 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 476934809} + - component: {fileID: 476934808} + - component: {fileID: 476934807} + - component: {fileID: 476934806} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &476934806 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 476934805} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &476934807 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 476934805} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &476934808 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 476934805} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 + m_AdditionalShaderChannelsFlag: 0 + m_UpdateRectTransformForStandalone: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &476934809 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 476934805} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1219430060} + - {fileID: 375435382} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &1219430059 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1219430060} + - component: {fileID: 1219430062} + - component: {fileID: 1219430061} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1219430060 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1219430059} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.3, y: 0.3, z: 0.3} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 476934809} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1219430061 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1219430059} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 63263eeffad3c8045afd6175e2a92bda, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1219430062 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1219430059} + m_CullTransparentMesh: 1 +--- !u!1 &1293352707 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1293352709} + - component: {fileID: 1293352708} + - component: {fileID: 1293352711} + - component: {fileID: 1293352710} + m_Layer: 0 + m_Name: Network + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1293352708 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1293352707} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5922d4a2e010aac4cb20e7dcf04236f4, type: 3} + m_Name: + m_EditorClassIdentifier: + SandboxPrefab: {fileID: 0} + Transport: {fileID: 11400000, guid: 45d8249dfdf511d429f92c6a4a4e26f4, type: 2} + Mode: 2 + Clients: 1 + StartServerInMultiplePeersMode: 1 + AutoStart: 0 + AutoConnect: 0 + Port: 36339 + ServerIPAddress: 127.0.0.1 +--- !u!4 &1293352709 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1293352707} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -56.185825, y: 21.7, z: 36.253082} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1293352710 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1293352707} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d6475ef2cc420914e87d5433265300cf, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &1293352711 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1293352707} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fb5a4e3a1e885b04e8f36bf0b0597274, type: 3} + m_Name: + m_EditorClassIdentifier: + SpawnPos: {fileID: 10129275} + PlayerPrefab: {fileID: 7011933354638177272, guid: d66d5a97430d3364890108321123b309, + type: 3} +--- !u!1 &1318413499 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1318413501} + - component: {fileID: 1318413500} + - component: {fileID: 1318413502} + 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 &1318413500 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1318413499} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + 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: 4 + 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_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1318413501 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1318413499} + serializedVersion: 2 + m_LocalRotation: {x: 0.38322243, y: -0.59215844, z: 0.59922826, w: 0.3787011} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 90.68, y: -114.8, z: 0} +--- !u!114 &1318413502 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1318413499} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -355052428, guid: da78c2c9df60edc4fb5f65b59fa57c41, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1929588641 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1929588644} + - component: {fileID: 1929588643} + - component: {fileID: 1929588642} + m_Layer: 0 + m_Name: Terrain + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!154 &1929588642 +TerrainCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1929588641} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 2 + m_TerrainData: {fileID: 15600000, guid: a7c9e0b93a39e1b499f31bebcf1c4b68, type: 2} + m_EnableTreeColliders: 1 +--- !u!218 &1929588643 +Terrain: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1929588641} + m_Enabled: 1 + serializedVersion: 6 + m_TerrainData: {fileID: 15600000, guid: a7c9e0b93a39e1b499f31bebcf1c4b68, type: 2} + m_TreeDistance: 5000 + m_TreeBillboardDistance: 50 + m_TreeCrossFadeLength: 5 + m_TreeMaximumFullLODCount: 50 + m_DetailObjectDistance: 80 + m_DetailObjectDensity: 1 + m_HeightmapPixelError: 5 + m_SplatMapDistance: 1000 + m_HeightmapMaximumLOD: 0 + m_ShadowCastingMode: 2 + m_DrawHeightmap: 1 + m_DrawInstanced: 0 + m_DrawTreesAndFoliage: 1 + m_StaticShadowCaster: 0 + m_IgnoreQualitySettings: 0 + m_ReflectionProbeUsage: 1 + m_MaterialTemplate: {fileID: 2100000, guid: 7e5cbdf4ac1327b4aa364279ab2c2ef9, type: 2} + m_BakeLightProbesForTrees: 1 + m_PreserveTreePrototypeLayers: 0 + m_DeringLightProbesForTrees: 1 + m_ReceiveGI: 1 + m_ScaleInLightmap: 0.0256 + m_LightmapParameters: {fileID: 15203, guid: 0000000000000000f000000000000000, type: 0} + m_GroupingID: 0 + m_RenderingLayerMask: 1 + m_AllowAutoConnect: 1 + m_EnableHeightmapRayTracing: 1 + m_EnableTreesAndDetailsRayTracing: 0 + m_TreeMotionVectorModeOverride: 3 +--- !u!4 &1929588644 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1929588641} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -594.5, y: 51, z: -594} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2022675084 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2022675087} + - component: {fileID: 2022675086} + - component: {fileID: 2022675085} + 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 &2022675085 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2022675084} + m_Enabled: 0 +--- !u!20 &2022675086 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2022675084} + 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_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + 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 &2022675087 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2022675084} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 71.1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 1293352709} + - {fileID: 1318413501} + - {fileID: 2022675087} + - {fileID: 476934809} + - {fileID: 10129275} + - {fileID: 1929588644} diff --git a/Samples~/First Person Shooter/Scenes/FPS Scene.unity.meta b/Samples~/First Person Shooter/Scenes/FPS Scene.unity.meta new file mode 100644 index 0000000..778e6d2 --- /dev/null +++ b/Samples~/First Person Shooter/Scenes/FPS Scene.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d9bdde016645d2b4195fe3de5b49e870 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/First Person Shooter/Scripts.meta b/Samples~/First Person Shooter/Scripts.meta new file mode 100644 index 0000000..b2245a8 --- /dev/null +++ b/Samples~/First Person Shooter/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 26ae7a469d4c66241836f40114e6af9d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/First Person Shooter/Scripts/FPSController.cs b/Samples~/First Person Shooter/Scripts/FPSController.cs new file mode 100644 index 0000000..41d9ee6 --- /dev/null +++ b/Samples~/First Person Shooter/Scripts/FPSController.cs @@ -0,0 +1,120 @@ +using UnityEngine; +using Netick; +using Netick.Unity; + +namespace Netick.Samples.FPS +{ + public class FPSController : NetworkBehaviour + { + [SerializeField] + private float _movementSpeed = 10; + [SerializeField] + private float _sensitivityX = 1.6f; + [SerializeField] + private float _sensitivityY = -1f; + [SerializeField] + private Transform _cameraParent; + private CharacterController _CC; + private Vector2 _camAngles; + + // Networked properties + [Networked][Smooth] + public Vector2 YawPitch { get; set; } + + public override void NetworkStart() + { + _CC = GetComponent(); + + if (IsInputSource) + { + var cam = Sandbox.FindObjectOfType(); + cam.transform.parent = _cameraParent; + cam.transform.localPosition = Vector3.zero; + cam.transform.localRotation = Quaternion.identity; + } + } + + public override void OnInputSourceLeft() + { + // destroy the player object when its input source (controller player) leaves the game + Sandbox.Destroy(Object); + } + + public override void NetworkUpdate() + { + if (!IsInputSource || !Sandbox.InputEnabled) + return; + + Vector2 input = new Vector2(Input.GetAxisRaw("Mouse X") * _sensitivityX, Input.GetAxisRaw("Mouse Y") * _sensitivityY); + + var networkInput = Sandbox.GetInput(); + networkInput.YawPitch += input; + Sandbox.SetInput(networkInput); + + // we apply the rotation in update too to have smooth camera control + _camAngles = ClampAngles(_camAngles.x + input.x, _camAngles.y + input.y); + ApplyRotations(_camAngles); + } + + public override void NetworkFixedUpdate() + { + if (FetchInput(out FPSInput input)) + MoveAndRotate(input); + } + + private void MoveAndRotate(FPSInput input) + { + // rotation + YawPitch = ClampAngles(YawPitch.x + input.YawPitch.x, YawPitch.y + input.YawPitch.y); + ApplyRotations(YawPitch); + + // movement direction + var movement = transform.TransformVector(new Vector3(input.Movement.x, 0, input.Movement.y)) * _movementSpeed; + movement.y = 0; + + var gravity = 15f * Vector3.down; + + // move + _CC.Move((movement + gravity) * Sandbox.FixedDeltaTime); + } + + + [OnChanged(nameof(YawPitch), invokeDuringResimulation: true)] + private void OnYawPitchChanged(OnChangedData onChanged) + { + ApplyRotations(YawPitch); + } + + public override void NetworkRender() + { + if (IsProxy) + ApplyRotations(YawPitch); + } + + private void ApplyRotations(Vector2 camAngles) + { + // on the player transform, we apply yaw + transform.rotation = Quaternion.Euler(new Vector3(0, camAngles.x, 0)); + + // on the weapon/camera holder, we apply the pitch angle + _cameraParent.localEulerAngles = new Vector3(camAngles.y, 0, 0); + _camAngles = camAngles; + } + + + private Vector2 ClampAngles(float yaw, float pitch) + { + return new Vector2(ClampAngle(yaw, -360, 360), ClampAngle(pitch, -80, 80)); + } + + private float ClampAngle(float angle, float min, float max) + { + if (angle < -360F) + angle += 360F; + if (angle > 360F) + angle -= 360F; + return Mathf.Clamp(angle, min, max); + } + } +} + diff --git a/Samples~/First Person Shooter/Scripts/FPSController.cs.meta b/Samples~/First Person Shooter/Scripts/FPSController.cs.meta new file mode 100644 index 0000000..d314419 --- /dev/null +++ b/Samples~/First Person Shooter/Scripts/FPSController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 754e582306c60a24eb1619b9878f55fd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/First Person Shooter/Scripts/FPSEventsHandler.cs b/Samples~/First Person Shooter/Scripts/FPSEventsHandler.cs new file mode 100644 index 0000000..098f7f3 --- /dev/null +++ b/Samples~/First Person Shooter/Scripts/FPSEventsHandler.cs @@ -0,0 +1,30 @@ +using UnityEngine; +using Netick; +using Netick.Unity; + +namespace Netick.Samples.FPS +{ + public class FPSEventsHandler : NetworkEventsListener + { + public Transform SpawnPos; + public GameObject PlayerPrefab; + + // This is called to read inputs. + public override void OnInput(NetworkSandbox sandbox) + { + var input = sandbox.GetInput(); + + input.Movement = new Vector2(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical")); + input.ShootInput |= Input.GetMouseButton(0); + sandbox.SetInput(input); + } + + // This is called on the server when a player has connected. + public override void OnPlayerConnected(NetworkSandbox sandbox, NetworkPlayer networkPlayer) + { + var spawnPos = SpawnPos.position + Vector3.left * (1 + sandbox.ConnectedPlayers.Count); + var player = sandbox.NetworkInstantiate(PlayerPrefab, spawnPos, Quaternion.identity, networkPlayer).GetComponent(); + networkPlayer.PlayerObject = player.gameObject; + } + } +} \ No newline at end of file diff --git a/Samples~/First Person Shooter/Scripts/FPSEventsHandler.cs.meta b/Samples~/First Person Shooter/Scripts/FPSEventsHandler.cs.meta new file mode 100644 index 0000000..baa8cf0 --- /dev/null +++ b/Samples~/First Person Shooter/Scripts/FPSEventsHandler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fb5a4e3a1e885b04e8f36bf0b0597274 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/First Person Shooter/Scripts/FPSInput.cs b/Samples~/First Person Shooter/Scripts/FPSInput.cs new file mode 100644 index 0000000..dd0d38f --- /dev/null +++ b/Samples~/First Person Shooter/Scripts/FPSInput.cs @@ -0,0 +1,12 @@ +using UnityEngine; +using Netick; + +namespace Netick.Samples.FPS +{ + public struct FPSInput : INetworkInput + { + public Vector2 YawPitch; + public Vector2 Movement; + public NetworkBool ShootInput; + } +} \ No newline at end of file diff --git a/Samples~/First Person Shooter/Scripts/FPSInput.cs.meta b/Samples~/First Person Shooter/Scripts/FPSInput.cs.meta new file mode 100644 index 0000000..26981c5 --- /dev/null +++ b/Samples~/First Person Shooter/Scripts/FPSInput.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 98d08627104b50542980cdb39ff586af +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/First Person Shooter/Textures.meta b/Samples~/First Person Shooter/Textures.meta new file mode 100644 index 0000000..434ad95 --- /dev/null +++ b/Samples~/First Person Shooter/Textures.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5e186e549a7f576468144131be2b1f08 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/First Person Shooter/Textures/CheckerTexture.png b/Samples~/First Person Shooter/Textures/CheckerTexture.png new file mode 100644 index 0000000000000000000000000000000000000000..338b469ed9bf12a41ac4326fb8a639d85c23be62 GIT binary patch literal 68831 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 Iol`;+080|ZA^-pY literal 0 HcmV?d00001 diff --git a/Samples~/First Person Shooter/Textures/Crossharis.png.meta b/Samples~/First Person Shooter/Textures/Crossharis.png.meta new file mode 100644 index 0000000..2798d45 --- /dev/null +++ b/Samples~/First Person Shooter/Textures/Crossharis.png.meta @@ -0,0 +1,124 @@ +fileFormatVersion: 2 +guid: 63263eeffad3c8045afd6175e2a92bda +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + 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 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + 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: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts.meta b/Scripts.meta new file mode 100644 index 0000000..4f738bb --- /dev/null +++ b/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7415f62e2e910674993f7ccbea1a09b4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts/GameStarter.cs b/Scripts/GameStarter.cs new file mode 100644 index 0000000..307f508 --- /dev/null +++ b/Scripts/GameStarter.cs @@ -0,0 +1,125 @@ +using UnityEngine; +using Netick; +using Netick.Unity; +using Network = Netick.Unity.Network; + +namespace Netick.Samples +{ + [AddComponentMenu("Netick/Game Starter")] + public class GameStarter : NetworkEventsListener + { + public GameObject SandboxPrefab; + public NetworkTransportProvider Transport; + public StartMode Mode = StartMode.MultiplePeers; + [Range(1, 5)] + public int Clients = 1; + public bool StartServerInMultiplePeersMode = true; + + public bool AutoStart; + public bool AutoConnect; + + [Header("Network")] + [Range(0, 65535)] + public int Port; + public string ServerIPAddress = "127.0.0.1"; + + private void Reset() + { + if (Port == 0) + Port = Random.Range(4000, 65535); + } + + private void Awake() + { + if (Application.isBatchMode) + { + Network.StartAsServer(Transport, Port, SandboxPrefab); + } + + else if (AutoStart) + { + if (Network.Instance == null) + { + switch (Mode) + { + case StartMode.Server: + Network.StartAsServer(Transport, Port, SandboxPrefab); + break; + case StartMode.Client: + Network.StartAsClient(Transport, Port, SandboxPrefab).Connect(Port, ServerIPAddress); + break; + case StartMode.MultiplePeers: + var sandboxes = Network.StartAsMultiplePeers(Transport, Port, SandboxPrefab, StartServerInMultiplePeersMode, true, Clients); + + if (AutoConnect) + { + for (int i = 0; i < sandboxes.Clients.Length; i++) + sandboxes.Clients[i].Connect(Port, ServerIPAddress); + } + + + break; + } + } + } + } + + private void OnGUI() + { + if (Network.IsRunning) + { + if (Sandbox != null && Sandbox.IsClient) + { + if (Sandbox.IsConnected) + { + GUI.Label(new Rect(10, 130, 200, 50), $"Connected to {Sandbox.ServerEndPoint}"); + + if (GUI.Button(new Rect(10, 220, 200, 50), "Disconnect")) + Sandbox.DisconnectFromServer(); + } + else + { + if (GUI.Button(new Rect(10, 10, 200, 50), "Connect")) + Sandbox.Connect(Port, ServerIPAddress); + + ServerIPAddress = GUI.TextField(new Rect(10, 70, 200, 50), ServerIPAddress); + Port = int.Parse(GUI.TextField(new Rect(10, 130, 200, 50), Port.ToString())); + } + } + + + return; + } + + if (GUI.Button(new Rect(10, 10, 200, 50), "Run Host")) + { + Network.StartAsHost(Transport, Port, SandboxPrefab); + } + + if (GUI.Button(new Rect(10, 70, 200, 50), "Run Client")) + { + var sandbox = Network.StartAsClient(Transport, Port, SandboxPrefab); + sandbox.Connect(Port, ServerIPAddress); + } + + if (GUI.Button(new Rect(10, 130, 200, 50), "Run Server")) + { + Network.StartAsServer(Transport, Port, SandboxPrefab); + } + + if (GUI.Button(new Rect(10, 190, 200, 50), "Run Host + Client")) + { + var sandboxes = Network.StartAsMultiplePeers(Transport, Port, SandboxPrefab, StartServerInMultiplePeersMode, true, Clients); + + if (AutoConnect) + { + for (int i = 0; i < Clients; i++) + sandboxes.Clients[i].Connect(Port, ServerIPAddress); + } + } + + ServerIPAddress = GUI.TextField(new Rect(10, 250, 200, 50), ServerIPAddress); + + } + } +} diff --git a/Scripts/GameStarter.cs.meta b/Scripts/GameStarter.cs.meta new file mode 100644 index 0000000..2fe5fb9 --- /dev/null +++ b/Scripts/GameStarter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5922d4a2e010aac4cb20e7dcf04236f4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts/NetworkInfo.cs b/Scripts/NetworkInfo.cs new file mode 100644 index 0000000..c53fdc2 --- /dev/null +++ b/Scripts/NetworkInfo.cs @@ -0,0 +1,33 @@ +using UnityEngine; +using Netick; +using Netick.Unity; +using Network = Netick.Unity.Network; + +namespace Netick.Samples +{ + [AddComponentMenu("Netick/Network Info")] + public class NetworkInfo : NetworkEventsListener + { + private void OnGUI() + { + if (Network.Instance != null) + { + if (Sandbox != null && Sandbox.IsConnected) + { + Draw(0, "In", Sandbox.InKBps.ToString(), "KB/s"); + Draw(1, "Out", Sandbox.OutKBps.ToString(), "KB/s"); + Draw(2, "RTT", (Sandbox.RTT * 1000f).ToString(), "ms"); + Draw(3, "Interp Delay", (Sandbox.InterpolationDelay * 1000f).ToString(), "ms"); + Draw(4, "Resims", Sandbox.Monitor.Resimulations.Average.ToString(), "Ticks"); + Draw(5, "Delta time", (Time.deltaTime * 1000f).ToString(), "ms"); + } + } + } + + private void Draw(int offset, string title, string content, string unit) + { + GUI.Label(new Rect(10, 10 + (15 * offset), 200, 50), $"{title}: "); + GUI.Label(new Rect(130, 10 + (15 * offset), 200, 50), $"{content} {unit}"); + } + } +} diff --git a/Scripts/NetworkInfo.cs.meta b/Scripts/NetworkInfo.cs.meta new file mode 100644 index 0000000..a00f2c2 --- /dev/null +++ b/Scripts/NetworkInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d6475ef2cc420914e87d5433265300cf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Third-Party-Notices.txt b/Third-Party-Notices.txt new file mode 100644 index 0000000..0dacd26 --- /dev/null +++ b/Third-Party-Notices.txt @@ -0,0 +1,51 @@ +- Mono.Cecil + https://github.com/jbevain/cecil + Copyright (c) 2008-2015 Jb Evain. Copyright (c) 2008-2011 Novell, Inc. + MIT license + +- Nano Sockets + https://github.com/nxrighthere/NanoSockets + Copyright (c) 2019 Stanislav Denisov + MIT License + +- LiteNetLib + https://github.com/RevenantX/LiteNetLib + Copyright (c) 2020 Ruslan Pyrch + MIT License + +- GameObjects Netcode + https://github.com/Unity-Technologies/com.unity.netcode.gameobjects + Copyright (c) 2021 Unity Technologies + MIT License + +- Unity FPS Sample + https://github.com/Unity-Technologies/FPSSample + Copyright (c) 2018 Unity Technologies ApS + Licensed under the Unity Companion License for Unity-dependent projects--see Unity Companion License. + +- Unity Execution Order + https://github.com/azixMcAze/Unity-ExecutionOrder + Copyright (c) 2017 Mathieu Le Ber + MIT License + +- RailgunNet + https://github.com/ashoulson/RailgunNet + Copyright (c) 2016 - Alexander Shoulson - http://ashoulson.com + + 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 acknowledgement 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. + + diff --git a/Third-Party-Notices.txt.meta b/Third-Party-Notices.txt.meta new file mode 100644 index 0000000..0739a5c --- /dev/null +++ b/Third-Party-Notices.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: a1b43c7b995f9d043b3ce0ade11f0015 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Transport.meta b/Transport.meta new file mode 100644 index 0000000..f0654c1 --- /dev/null +++ b/Transport.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f9680013a7e74694d9c5aa5bbf59e2fd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Transport/LiteNetLib Transport.meta b/Transport/LiteNetLib Transport.meta new file mode 100644 index 0000000..1a546be --- /dev/null +++ b/Transport/LiteNetLib Transport.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1b8e779ebd0227d4188d4cc1d55a8d29 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Transport/LiteNetLib Transport/LiteNetLib.asmdef b/Transport/LiteNetLib Transport/LiteNetLib.asmdef new file mode 100644 index 0000000..530c72e --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib.asmdef @@ -0,0 +1,13 @@ +{ + "name": "LiteNetLib", + "references": [], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": true, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Transport/LiteNetLib Transport/LiteNetLib.asmdef.meta b/Transport/LiteNetLib Transport/LiteNetLib.asmdef.meta new file mode 100644 index 0000000..8e14c62 --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 166c61f9e22d9df41a00ea20161d3d57 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Transport/LiteNetLib Transport/LiteNetLib.meta b/Transport/LiteNetLib Transport/LiteNetLib.meta new file mode 100644 index 0000000..674719e --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 93d0e374be380054baa67bb06948b893 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Transport/LiteNetLib Transport/LiteNetLib/BaseChannel.cs b/Transport/LiteNetLib Transport/LiteNetLib/BaseChannel.cs new file mode 100644 index 0000000..b70c436 --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/BaseChannel.cs @@ -0,0 +1,48 @@ +using System.Collections.Generic; +using System.Threading; + +namespace LiteNetLib +{ + internal abstract class BaseChannel + { + protected readonly NetPeer Peer; + protected readonly Queue OutgoingQueue = new Queue(NetConstants.DefaultWindowSize); + private int _isAddedToPeerChannelSendQueue; + + public int PacketsInQueue => OutgoingQueue.Count; + + protected BaseChannel(NetPeer peer) + { + Peer = peer; + } + + public void AddToQueue(NetPacket packet) + { + lock (OutgoingQueue) + { + OutgoingQueue.Enqueue(packet); + } + AddToPeerChannelSendQueue(); + } + + protected void AddToPeerChannelSendQueue() + { + if (Interlocked.CompareExchange(ref _isAddedToPeerChannelSendQueue, 1, 0) == 0) + { + Peer.AddToReliableChannelSendQueue(this); + } + } + + public bool SendAndCheckQueue() + { + bool hasPacketsToSend = SendNextPackets(); + if (!hasPacketsToSend) + Interlocked.Exchange(ref _isAddedToPeerChannelSendQueue, 0); + + return hasPacketsToSend; + } + + protected abstract bool SendNextPackets(); + public abstract bool ProcessPacket(NetPacket packet); + } +} diff --git a/Transport/LiteNetLib Transport/LiteNetLib/BaseChannel.cs.meta b/Transport/LiteNetLib Transport/LiteNetLib/BaseChannel.cs.meta new file mode 100644 index 0000000..42cd714 --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/BaseChannel.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0eff1fca12b255a4897973f25ddfe588 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Transport/LiteNetLib Transport/LiteNetLib/ConnectionRequest.cs b/Transport/LiteNetLib Transport/LiteNetLib/ConnectionRequest.cs new file mode 100644 index 0000000..4a2cdd9 --- /dev/null +++ b/Transport/LiteNetLib Transport/LiteNetLib/ConnectionRequest.cs @@ -0,0 +1,134 @@ +using System.Net; +using System.Threading; +using LiteNetLib.Utils; + +namespace LiteNetLib +{ + internal enum ConnectionRequestResult + { + None, + Accept, + Reject, + RejectForce + } + + public class ConnectionRequest + { + private readonly NetManager _listener; + private int _used; + + public NetDataReader Data => InternalPacket.Data; + + internal ConnectionRequestResult Result { get; private set; } + internal NetConnectRequestPacket InternalPacket; + + public readonly IPEndPoint RemoteEndPoint; + + internal void UpdateRequest(NetConnectRequestPacket connectRequest) + { + //old request + if (connectRequest.ConnectionTime < InternalPacket.ConnectionTime) + return; + + if (connectRequest.ConnectionTime == InternalPacket.ConnectionTime && + connectRequest.ConnectionNumber == InternalPacket.ConnectionNumber) + return; + + InternalPacket = connectRequest; + } + + private bool TryActivate() + { + return Interlocked.CompareExchange(ref _used, 1, 0) == 0; + } + + internal ConnectionRequest(IPEndPoint remoteEndPoint, NetConnectRequestPacket requestPacket, NetManager listener) + { + InternalPacket = requestPacket; + RemoteEndPoint = remoteEndPoint; + _listener = listener; + } + + public NetPeer AcceptIfKey(string key) + { + if (!TryActivate()) + return null; + try + { + if (Data.GetString() == key) + Result = ConnectionRequestResult.Accept; + } + catch + { + NetDebug.WriteError("[AC] Invalid incoming data"); + } + if (Result == ConnectionRequestResult.Accept) + return _listener.OnConnectionSolved(this, null, 0, 0); + + Result = ConnectionRequestResult.Reject; + _listener.OnConnectionSolved(this, null, 0, 0); + return null; + } + + ///

MI0t<&RbnCLe81`evtgJdTo&WzB2dVcumL50p?_v{TAk= zPKz0Al8zl;5Dfzbe((JG3l{F`91CZoh^ehsKyr^=h8{U$b2MAPu9_FPX?RwR6yMLx z9y>=KKN#H9$*pD@_JG|hTkxTpb=XQ;cEcohTDE}OaG3%v>xzjjPWF@@J5DCQ-ERFs z`e_EcL3-SQ@g*|*7;A9VL{>u#q)Ar8r2hAHtaLi_(jN}dHeZ){4U^jG+y?2Fr+h2v zM({@OodYO6*PYIMqu_EG>raQ_utSSpiT}k*P#KJ*}N#b8bKj zwG5i;=QVH2;r8BRgWKvWs2p;-;yWIaDi^BP&CVH&t2zp*<~RRQdatOOx2}Iks?}Gt zY@L327#yx%z_B^G%;`iY3D7tnOglS|jM1<7W%FWE*Zq88(u2P^^~2-kV-_dt<2t>j z2rerxb(mpQT5$zieWcZU@9XH^*m0e=bWgH4EXh}KJs54U7_CJ@~Wd5sKmO(y?QUt!nUqWk+uQt1K#fe$MR+}|5aKfQd$(d zV{sgHIXHDMx*A}f4MEfOv;lRx>Oh+7c@&d>9@r3*zdw(`N>BSXv2-OW81$XR*$2s& z=qqYu$H^9=nTfY9nJpwM8W9Wrwh3?VgexHJ8j@od$$F4vEke8*EBflI!j!jn$`z1x z4JojT^sz$X+F;$WzOs~rd{_|)f3&pXs<*kmvNbQj3CHl!!71}4`~|Tu;Wsb=piq(* zbCwWKoG94=-0%ZIdPTxDOlx+O>_I&61B13hIZK!qoTxZ=Wtqadc_voJCU4UdYM+jG zU-eNNU-i?gYQFg5Hipf+N55cQa62Nmqw<=*2;8wJ0xC0NIRY>19FElLVlv;&v0g<@ ztB3(nnoW*{I2j$59XTwobQ$M2yKSnX=WeP#UKozlNs%x!k=_@oqVH~H4P-kPAJ>S3 za(ca>2gQlPHox0T_y6D!i8tVSFzgg38dh=Q&f6a(1Tx7FMRY;BoVLqRZg%muYRmav zt`*-MuIA}hzpv&Q%bq?zn2iaYjXyu|O|Fwq=}fAvYI|h)7>eI;J3JXeG%#6PYVtTw zNvt(2J~kBMRJ^~RpU%xLu4H0tc6~poBxxwS_w>74sKeKsS>*Fcmp)^;sh_S}RLXSD z5b~_8#H+jw@zGN6s1a_j@#aWt7Q;WW=old{Nt4kc3BIpCcxb2UCRo}i?YyO%)8W%Xvrf^62@95Qd=OQ+g5 zcsHQt681LAh8RZnb9pLMqx*L89$!R-=u9y&=Ndcls8=f&&%1ujU^Sf*LRz+--W?a4 zeMO)8$ZyQC?n2*koMA0?&|Kx#wMpV|a_%iIm|Z`*z#1t=Fwl9!TL&C z?sdcs=jgQY^k?Bdhxe=1)9+KSaIrV{`aj?B=BeP%kFO>)*od0r80tmVl#7TWvbq5t z(y#9qygB3KjCR0r02^QX7lXP>}Ub<<_3>0}BvZ6B|e zJUSAu)$lGd+LN443rUh0{c0?60(DlRA6v1J2!uTNg&9tZxDu|#j2Vs(xf0GL5OR`k z$KpqC%PzB&H8?zUgPl~1+NPHa;1;oR%5De!&KCTD_Nofb@f}CC+{&{&-m+Ze1wtVg zUQJ3=eb)DZi90%}PV4rT=x*djK5}^`!1}#An9>=nCJ|27FUO!?&quv}-k;KHp76X9 zI3u*uRnUok&?`q$j-n**{x*Vi<|f7J!wV+;dNm|_FfW?F(i(mqPWNGsPAtthA&cx5 zu2>#=e*M{P1BT5{D-C#kcpNUlwnb@ehRuenwy-W%I8ob$xvNvjGgJMK$LPI?7k9u{ zm=~_!Twz_>fp~*>bb#>t@ECv)wq+TBqPL?ke1~j@V7kB9fo(CZT?1bsUO17wUmN2Y zj$Qsk=u#0C>$gmnK$i$MR(y0=oqBCUhIWeP*3|DN^X8Vf{bo(Wb#W+(vX9B9j>#0L z2~gv4ClP)oxNRTNVJ5b4a_bx3n^!P5A9UoalB>$=tCu)Y7EY^aovmz}87seT&h{f} zsxlI6s4wAOR}7yAZ(j8`_rMmr01oH3U*llEUZszfHy*2Y#Yd!hiPG81@$mVvnGer~ z)~fpE?ot-Swhh8)ClCDqE6U3LNk&zgO=`PG%&Zf$xKz>l(OCyVwJsXhrIq9Np-D09 z6+fmfxdXSPda|8FHtDkP|`!GBXGH((`l#wunW&=XFjyzxn26Hom#yP#i#IE`2? zOD1n$Cn3MSy3PjirFWf8E}Q6rC+jhDeIZo;)>JM3ui zzo6C(S4?B7FfldEbPZ^o7$%q57&{@y*v@}cnoIIrtlcN-9p5iz&*_y<#XRPcuTc_?ui|0_?B%bi$LDF~Lwj7-HQ z`N8|ApCi?-9cSCr@T}OB&XiHSEGz3qPO^lsHMy@Ah131y=2zeTyoxwEm7hCH)A7YJ zVdG1wBrm@du)yVud10h-*)HQ>U4G$Lm)}?a)#WGuHD=5P*%tNHgFO2D?BSXHmv&<& z*1uaY<-Qzz4vzmg$U6NpFt#_hHf0bocQE|B&6A1k?@qY?9t!*amY)t$OV}&Gaa~}3y&7_?^o%%+vzI>v!R`zX!jv4DC41Am zjHks|r8*QmPUH2MCHQ#@&lOa~d2*GXEw zjOtK2s|(kC?A%~9n>khNi{enDOiPgEqU5NG>YYxOV=S$vgd#_+tV3)g=~PPuR-ESS z;?LOjUln3=D0^okBBwDH__N#!r*ZRI1MLzEk0p17BMnl&8Vm7tmC9n{T*w+!9;uzu z8mrvApN;SB-{5838@Sawv^qXs%+)f^8W)S&C@}i=PnOeC3-Nb;X>{;PWkkUc@VP&2 z(c9^8e55o#Q21jTjPe=WL>poo;M>SnF$9;bM+4Q4W}gj5`sWB$FeTdoBxHr_fU{ zQ)6%GPl@ju52s62yB;q6{|4!8By!@JnY?^%?vu-LRTKop2brFH&%Rs%b*ylPCa7Y@ ztYW6L5p;$_Klq;ruLPN&{|Q^+-57ohz`CHFke*0S#8;yKypY>ZW%uvpugY|=^Z_@W zgBS<&Np()sF>kuphO@<5U8#-4uP>;r&~6kz3ShZ>5`@2#_%Ag7c|qYR_eyj-ycZ*o z0a_Qeld@gjHRnobJFpif5F_=lIkCoY5BJ~Cp&3whz8buQ%!vOShWM+s=ReUyXXN7f zbMKG}qA9&ZBHyiaro3g->j>V(jya$a(C{tvwe_`mqRTH2VmP02u7tOPdl3Q&paoFz zDS72xv#-8y`}KkZK!A6O2{69+`qlYW`IY$<`Q`a#`NjPwi1rJ{%EHOQIRqjA!2m%3 zf!KZI@OE+FFY3ba>OKMyBlsdP4H3bww`H_tboVU}K~0MP#cvuR!dveSB#!{|y}Nt$ zKf)2jUtIlq{<;AKSbR)g+bfqB-&u%s{;jL-5|3a6*>#?F+mns$V5LV{KA!utt@FQN zE-#?%pP-Zl|6%Q*H8%X{k09&C{nd8%t8Es%T>2-J%MI7_Ri-YRJ^uK+1@f9EywSJ8MN*?x_r|sORty`IynWb$5(RmtvIyR-8lK;%D z4hDn~CLs~U^3Gl-fi26LTE7iCP6|Jy&QsE7w;*$4n|>e1pU%t?CzM|3HWM;iAJ%8m zc`fH}m%2iVRa7FEYnPh164`>+6z88_xSmf`WG+xLe0(>NPf}!_8NWy5rc=%kJZ1A> zlP5dM+AZBTrsa9TkgoQ530>4={sx_5G2%E|5Z0RKuE_I4a%_S<519;2uzqHDCQJr; zGrnxnu0(Xh89dGDt-<6&G5QA+eAgdCg(OigbSI5DONAz|_r^bV3R9xm828$9ZVH#8 z>lpXCbAFqrJq7d;FN`Ps#Ta?k5id+9!^ISNm9Q`NIV^b_5v?pIQ^mr0_>rxwC$q&$ z0Xo`83&py5QIYNs!L816D%*;*@z-`SI0F|<(^B}q z6*?iXx_;k2CfqA*h^G+jd;flic_#SfYX%{r>HGeiH|HgKZK$LoslI-JBvM7_3J!Bg z=nmQB2DP_~@Gz*9%m@BZgqu*?c8$$x!{Y(Dm%|+8fjAu=k|}aW?k_%#_fZ@lt;qh! zL66uOAAB9`XlO*3TmqYRSBwg0zBbRfV{&#Z!JJV6=YO;?L>ILT ztj}^}_@_TR@L6z?)v@gP%&sU@w#Tr-`$aiL8Jw#vxf&FYIPK`mTq5?P(#Qm*5n>ig#bsc@%)^)+7 z-_C|Qa<{P7mwCeQ74Kqmi|#s_er9WK7b=?d6r>1rl^vpX6dB_Gyvxm{K#tOS1m(|3e`(&H%*Z6@J-0TEPo(Wx_Rq-F(q!MS5n0PDBP6S zG>S!H?A-lyRWM&bNcD1!5Wd33pT{Lho~OoTXn`U=ys#oT^r?$q*(-K%Z~dOPd3J%I z)u;yXc&gbIzgM}PHqH97ll1uUPxGIbJlALK3*t+9ug?qFNdzHsQ6g-Y5FD?H7n}K! z(D+%MCK)Z8;8V--XN>F96`q`AD1(zqyTi^>?c%p-G8n8XAzJopYUIPTV5i9P_nZ$U zu&7Cc`glonk{E+j<7_Uo!FCh4Z}RWoUgI`W(8r zAl430sy{f8LT~_!2_prTLUH2IL|8sF$=Fw-*bo&Lp<9R?5k$i!EaDI*txVK@%!kms zdZK=58IcZYOZiDu8)+$dC=I_YXV0g4s4@1q0f`ikrU^q7XX+{IS={{!(42PTCMt0h zc90yX@B>xO6}1-u^OLyx*rx1QL^ub@fM8BD9-mT<+2Z_Be<=1cjz3Qa#l?~4%yM?7 zDFZm!3)xu2bww&BiBqg~j5_O5IENOvpR0csk`Q;=Z#euRoN%WX+Ez{TFJG7}-@JfO zgBivDH%jvNY3=_>Ntl?K|7|-d6Co2bCnNKJTF7yh0i_i`|MHY|+sOhl4$M*x(#Oom z=nK+E4NMsN8P)M%Es#G zgk)Pm&s)|lKMSOV@%ly8)cf0^pK0eI?_v5O-yzo_-=!N88YYn0wJ><3@j$`7DqQp` zh!p{LA3rS(zP5e2^B}pNb~w{x?v77NhC)_)b~Z8~PS|{W(9QrP%D`jr|fIfSpBVzY0$%!rRt`#Kvc95Uqe+yQ`Oq zTa)?^J&znXy-+y9H{q=sc~tM_bKo{Zi$B%7h{p(851w|*Qt37-^tdiJ8JRt!l%Lq; zI6%O^^?1PUfLE*5JZ~~k7Af;c<=#o{X__#>d)Bi9MF|b0=#0LT_`Z0wSNay@p7H84 z4EN}E>SPAc8;0(bT>*eT2tl8ra;3?kYf1E+E(7|drhfrFYHORa`Xg=SN4#vgBL9AJ7ZQO!2vg%QXyCEN&RrUj`MrYLbjtRkNJu- zI5m%iJUOvgg(S+L({y&`yz4r-$I{ZD+OC zW>V(4IYSY9Z?vgRS#kF%zt02nGLN1>Qm2RL8P~peqN4_`M)qF$FM6;(UrX!2vZ;Ib z+8#Z5$8@eoW~}6afb5rn4{w;f$$Jg2&ay50ns3yTDhExd)NgM&LP$UM)tW56YYK2) zYE=@I`~MiIL&QP^im6R{Ezl&q(ORK#&d}tm6423Ah~#;rGt~)58tIc;ek=S=TItn? z)hUZpHssvGG4TP1@vi7o9raUJ1rh^>`ms&RO~=#0H*0KaLB)xR*WT)P~&@27F&DN8aR?SUNKddR@P$A2mMEZyAIMP z@b=ARw_}hO4(0#`;hWaGEmCF>?>472q9hT4Iwdbc;F)p=`UOyjEi!pE8DpaMxwqz0 z@G%&pAUnkAhp#&>v@6dDgkC3NPz}lw{3_(*E;p;Mf-B~|pYEsChc2qtVmJRwp2s#y z)>A(PY42AwA-TkfAXV_ahI%=e0R1{W{{qvchAuAx3{64A@F$OTb1$=i9IXL@^`VxJ zSb}Z)X2=E!H3XO3%uQ1p-!>gQ~NLc*P(JBJj5R0CLcxo{fK|U zCDllSggac3Xp!;7JD_fprtt^UtIfLEIP|a>x^T{VnW$0NmQ2t(Rk?^%v_LT&vTECi z_65$<R`{m--iMD(i-ml8mwSiB)8@nf-)2?bkTJSTIutHDlk4dLCzeeYkA z{I5i=LtjG$S|RwaM+j(h#q*ARVht`0;gxoXe%F{z%Y(504nSAJW)!40`VNoUOIh3> zd#g_@9i*ZLo2HL*=DSWSg^3)8ZWuWdHWG@3tAxoyTeyU&H-{}85i_W`%e<>Rcp9g} zP30iP`i0+OXieILmzE=ZvAc3#_&TArx5A$a?#2Y^eyNa<=FxnR%>yu-2 z;JVmj0JFWVz(-qK8X1LaeWKUFpoJ3{yv?Cgjq9q6=XuwhfWu4c?Hb89TGg|CCtw>W z^HbHb9`zgjt~^B#D;3}A+Q%YMd^lfvUmI~I#RfS){mOt_u5daC^B+ORBc>aZA3=(g z0n`ykpvl0q*U-Nhv!G~0%+*oDjj76mWc1>et=NMbs+}8s>5La^=g+_!{rCnSYD|~D zJ+w>5k1Xk%=&P`Y?blJuS6}9r`MA7%A_uwk-1>w;UEK=N@p)ZpvL=O(k-8578#FyJ zT$g>o4fuW5zIIOoSCSxKHs^c}^Wi7v>1-blGV}vmrlUvdVlEOe7#}9 z2M8+k4iYOulGz72<&2C}WZUgdWiRKttxshyH9svIsUOs5q~)7XGhyaNNKB2;wi2oU znYEOZffF-rimyzZVXljx)+6V~*TfvVtCNhBT`;3{NMuN!S6EOB``}g{MOGStHFn2# zq*hM;sXv-xU~z6lMUotks5lDE19r7|HO4)VUt4%QnW`bKUP8p*DOf8Qx;IurY4;-0 z8Byn!wasm4y3!dnudR{1V5T6)A!C!eXB#H7R4hz;dZczdr=DI?sAzf;OX7}u18bUE zQa^6alv7t~=Y^ps>lV9UbjAt4GsYXPWbMP>sjjJ9!cysfmd?!g$0=#{-%f{3tDZ}1%exLc_)Vj>-(V>NsZoM(czmoGJ?34Z7cJ#xmx%V zjE6{&p|$_mlaZo^y@tCc6__OpD3ZG&E%Fi2)nL8553Rh7)6QFI7cLpB#VUB`=Ikz6 zn-z?1s(V!0s=3m_)O@-tpSk)9Yn3Dzm$)xmJ_9 z)l@buEzQ{aZL(S?c>=Ll%$sE|8!}{IBSzW7re@9LTBJN09ed-o95x$9(=jjz@1vxw z4dG&a!wE{VA;@VK*iw7k`nILj&NgP}!jiy|as{QlF+I1h!(Wj%YjSEvXPK@%?3GMi zb$CX7~A${;J(*HP3w+pjY3ys}i<3Kg~fw8vIi>e38K9?y!- z;Ye|j~9XB@4(*)QyXTsA&`Zz0ay1%&y1q!M~(F|+e zQVBDfg9lO*MvQjPxpy<88fV|u6<BOr7`1pcps^C9NDhVmMS%P%Q_$wo$dh-r?!B`Z-kPJ!`@W?vE?LS=o=wC5PpG|vj0U&@w z$X6&IVqPiNpz7!=)@RSKD^jdSByR2LWk?GBHX3e- zYf60_eHwk3Z6sAk^d0?P;kgUJUJ$@5)FaXb*_!agCAk&374e#AbDS+i%f^qT?-PqC z))Z@E%?Y+J4Q(maQMM@CV!d#H2EggaJ+?(>sx4klfGwRq8k?F#b5OOvE!#GAZvwqA z{SI`meJ^wGKA-?F2APDMh=`7Yj)abkj<^DK3-t@&29ScR0HCYR>Gcl)S^!*ta7YYf z6BH99dctwiaYAVdR+K`dRLDp`34jVP0+0ZN0-ylks(Xll09$^2-X7UviaDe~Bnv1u zKn;KiV9{$PgtpBqM3&>v7$z@ENfM7N2{{0W0maD)Vf1HAXN+Ksm;XU&dklm43?KsV z_UZ}I69xa4874N8L`;#g8PEd9ssK0&VfP4Oiu@qUM~sCs5sIZTpd^mbvlqPr%h(E| z6zPwf{t-gbk8A)r4GKaOhA8m|g&1-hz}PB8sZ9ik=mEtOl!7D%MP>zM6BLz41|BXF z=!uSi_D?4y2?6!%h9vZBf$9L@_eKNa04M+g$W4?FI_*R+ipUT=ie0AOCV&m3E=m+~ zC-GbOADO4vE3j>cUQ>V^RMwySk7H;Kq7OmN9q1vjL4I=2J?JTM&mWv;&)jk))-758hc==7Q<=_n2p4^b z-cq^mZ>6RHERAh-2ZF)!NAh*Xz;^alVSwDjjgUbXcN5g%K6 z2Z=A70waajcA@KtE()pBN=C^`?J<;F;zlpBQ*o%8{46Rd)@0$VN!CuF%LLbiCTz&d zN!CQPTVpIXzOyYNSGokw6EDb5%mYp#@hasZb~IGYKnxOS9FYwQXdIb$uvL%TLeMJz zgoc!roKcs$ktw(IHsZOl7Smpob%!;Zt;*Yoc7WZR%sCZv z6jjshXt~A}31DCNYB& z1bp`&42+u@m;*%O&#{#t0i7uypBK0T}7&xD1t14 z=qHL8N-5+a5;YVWKmlMcgq0Kj`+G>yBo34vKurjiC{>S81c?~R9oqzyXsr=xIpBrl zL}Cu5SYQj(C;G)^?ovKF4`28l-Si%3u1Y~b@SWmBKt4L#JK_cDB$%@eLP1x^3+Wzg zt}FWk>)ve+qNKzKd06~u`o%PS|?pgrCeOTSSnSe%GG-1b|b zF}XgtK6g$EW8@zZGg4_XX(DNIX<}(oX+l;+T)-{VE|jwnA5nl_fqW6l3?zClp%67u z;BRS0lvp!sWGM1~e`k-PKv(&Ga9A*$6k#rL$m@#p0ba0AHswFVUZ_uKiWv;EUGgds z<8~_1E9_L6EY}jy#?Do()U9<@YUaG36APT@XL6*<62nRh!21iNnrOXTN_J|)$R56m zHDieYdZhSp8uS&6U+QM6bVes&Xy*?v4_K8;rKK zSF4`$XW_A=rp-U}0D~5wbJ~!!-Bo43{ac!Y<<-XVy0L@(Nt7V`v?2H@L!kp+6_zTy zOy36QaVcr4!v=^cm}u(7$+2|PGzuNXX#<<}83TgVnVH&hW2LcKx*KCUOHIIeGO`uj zx73?(nu8UA1Ue6Zj^0(mA4`Y2a7G{u140u`hU%#mdq1y2r&h1Q z#N!8(Q&x|-hH3tJ?qz=CF{4+~Q_$CbI+QawmEd>Ja)AvEnS|goPo%p(uGA2N*1qmi%1K!sS_!jVCb@AH_T=+ln@G<= zzcNChoS~3&b7Qr2=EOmf-A~GY)HzXg8BAb@P*vIw&T(n&9853`z$s7e^Zu%nFz1j1 zQ8BNUHn+5~OtUes+k!ZWXRjZ(8M1+b6^J>%bsKqO@1{=7Le$BN%+oHNTi|cN^V0j4 zx=PA2B@!tn9g1VnGtS-SedAkv9xo6&e&Bpc(s-F->#yW#Zi zjj|2>)(Xb=`zBDd=7mI|UZm zjDU*xZHs^Vqx@0-(X^Ql^r5c2PYW>aIl2Sy?2=`Ds=c^6|5_^qrcqL%;)+xuuHN(t zkng{};LXHPxv8JqDc;oXSoPq5JCdat4{%lk4cCX#f|lC0R|8k=VXH<~>1n_WH%{(^ zSLwrU#$V`#vn5#rJ>4>C2D1)a-Evk#z|kWayq0Z-VRsvK{h)tqRi@r2d+Y|eVzd(7 zfO+hBzar!XJc~2FXl^Ui#{}N2{;9>f5IY4i+iz(8#pBJDgQ8Up;=Gftu#tA^?^O+h zFMct&yawX2E#V4%Xh$%4Ru>zo+5VhWDUs#l|9*vw>wCC8b%mjY#n3Bdi>MQ%>a8^5 z;Dw&)f%XCI)7Rh(sT0hxCF6>-5%{TUHWi$fI`1Cs%<`vmmg=QobC? zR)RnO-1hUOWN#a>kq=fpSpe4*I31Lu@ab%wdg70}IsWt6^>T|`7)w_4dGaC4o!;h} zRUf8J-}4?<=Ehb^q9@3KPcgcd@Mchyz`3>q9x;G z4IYhCrzIgXkh+%`8C{Rz+X7ozibj;~Ki#R_+Xs=#`|`%UU?a}OmlAWQR_#4L+1tIAn``%p4xWZakDvC5eB6Tuf&gzlTNuR@*&*qqON^=K*@zJOXjG`@|np^q1R^L)PaS^lxQqT8-$$Y31y5Nq^B%WLni6K3|u_NbI*Yn9`cOtXJm=twn0%oZcjHuRm!8r^iq>ng{JRV%3I`_V6y%>g`3PytF`3rvuE55c~R{$CxxJDTh2=LFU- zsm7u8j2Qd{WH&P!5mU06FvFw+(8>lhw2fmnEpqU~+&6qKfxK~H>4!OonKw?o^E6i- zzN`M8_A2IK2|wO(iVXsX_V$Jjr0SuDm1RHN-!qCv1V2obf%5Y=8k@jj78)OkLhF~W zG6rnCRR16}|w; zDqb7W^!u@_G9u2e6MG+v@a+=PhQa*B@0>8O9A)u^pk%|+(x%K5+nPmm3x&XJFzE9q zd&wekR4OG<5K8_V44fuf)!Nn&UJ42dwjzR^^y0yO8QjM9vOite!^e}E)qNOwOpiz3 zUsJq4<45Ah$9qxg_4NqwcSAq7G*Z;jrGyn-IVaR>F)uMFQ<29H+KD2_se7kL2gkVQ z!>-=S)BV*N&fYeP?U-f8^}^XWe&(21qG`;Ar0499a1Yd-*)1^B*~uqs!TzyGE~j7= zAyX28WgelQ4J;8+K*P7sKE%@sw*)eBYo<2r0e-eE;%Kz%Z5_(}sjpAH<#Uj1GP&&o zT@)rch;fOhuI?SGooPq0GuBG?T{Erhutn=b!{)YZ=vvfCGpv=4v-tuzaXKSoI`WjI z8ECO6=eEghWZa^gjE-f1A{pY;{?>kniBR7&awv>;kvdtLyR%zZmdx1gAa3hfkHa<)&(0EXh{+V$M;QX;#vliG!A5=Eid zS);m{SS1UFvZ-R4iFxX}A)R6VANVoY8>g&BsP}Kb`Keh-AA>^fkUv&y4A*ss=j>57 zW)~Ijw5IjkBwg`=1*cL8@y9b2QlI5?giegKt$KF@SPF7XZU`opfCq1L9@OBSFs>0I z7Kyau!c2hz47)uQJJHlh}id_g!#B z2ZJPy(OqNJCBdf09P@qR08M3vgM&k2bf zYqAaaj|A{LV2pBUH_vA z6B-bIS8mE|7p7MnIbGkh&M^P{22H1&RU7APpA& zWB(XKzEtxvdS$5J5@uICp~`uYs^yZIKm~N1T=gwczn3FMp|B7!n)XE>Pj!$GwiO{x z#gPGu%L=juNkIjw_z_lC;E+{U<#*_0na9_bb4~I0-90aBcal($pZXElOR2u!6SO3o zN_K1GCb(*_BMeZQMlV8T=F2=Tl}?ll43%C(YvJ-NdMOWk7Ki?ekEgDX_n33YI=NuS~@Sq?=GmD++W4Rv4yQ2pq zLzuu&7Q-Z~CUQQ3sRXF1OhiGzBDT59fP+JE2*6lQ2Q7Fv1A-|flq)UO??k0BbZj)}w=$8W!WB0<5< z5Gb#@Y|fs`PD~hp4f{zBFNxc7)q_QcFhv6kXKa4#Hhln@K+Q{EUqr#qN6r0n`Rb|( zhyC7BHZ+7o{P2&vann{P39MqrlnA1=_juu4RNf)SSjY~~G`!7*hvl??_Bva{dTwaJ z^J2eoT3nqWTc~7(;$I^AW)oIf*bI6ZrGG`PJyAGgWFlr{L|NhP^)rdl%hVuIqoTim z_jj@?PKnC#W3^+o-@KP&(E@42WN%3gmK(Lum;l=ymfx+Ja(}_x;PUGv-rH7>kGwxc z)R`6TV9te=c2uIz5p7*!rR3o0%q!aF$4m!lW8d87&KM#UdiETHO#s zS^Vjv_}uhO?P&^ui#pwyI1D3d%sa#AVQ@5Za4-X!DSWciScpE`CBeFC8m=GaaL~~E zU0KMM6Jlq8r8m10UicnC6MaXEFgC%8eX0gYq`84a{wNQ^O@Z>aXsh;D2C=+sAcXH= z=_T!W(g&tImr-ASbV*wW%;wzu_7gE&Z4B8HjLgteAE}bjgw`Z$#_-3(|HA1p4f#^Tw*Xi)R zxck#xnbw<{=w@!#DwdA0crw3emMtwJ`u^IK3nJYxz?&!PkxiT%{Ei2Hm3#vX>}QmO4#25An$XaL5AqqB$-DRkxCPPj`#q$JOs>`Q z9CF=-Uvk|vHEN}Q?q_sWyYGqKlL!GTK~q;)*GZ&XJAjU%b#P$UN=%2REnEsf+N9Olq?L$6t55uN?_%VPNLhNesA~g?4j&NbfVj zVP>oFleNM0w7$~nL{hrr%~_(3aCuksqS9mbxCg?_6lpoM+{fJ_YGAYbT|zW_Qax9Y zSc#GA66|=1dC52~A18O6`%1a_e2VdT8g_Y{g&5#v1Z-L^PtiD04%?tcy_b1VHjB+m zn!L^ZAPC03Zx=bYw%jft_vba$HBx|B@@!ZwZA#zyttCZOiWS`4P!PCSa;|}5?%ecs zP<8$qCQL$;{@lE)^*gSr6Y!kdg|Ylri&L;p5#&P1Zb#=H+@;{_fu443kF{IeL>7uh8AayHCFtl%u9;%7b>pnn%NB?Zdvsrt#PfwM{Io zRHLD(Ir@+UE``htyF}WYIdUsUz2D4?F*qitBlH{NIOEomgtp@79}_*_M19G^?+}!4 zceo$SuJG|6jK2)`KRZ3h)OFGt)1RX!V=7VAA73{PwKE^zH!fiYW^JK;Fp+I`Bp z>P~c6?p8KS9*Y}nbBmv5T7hm8&fY)mA4d)+_c+O6F%i?!%r2K^PffP!4bcBT07pQ$ zzXtu^Q_tMp+kX1#(|FA$7KqZ(f}8C>)Qi(KngnK~1wQ6~ff>1w!Ah=;7yvyg&AJSX zK?m~*IwLVyNA#q!Ld%rtPSg<5Up4}Tmj4_)foVOp>D;@-5^pb!(~I~dZ?))Y>fXcBEj(MEzXH$}n;m5>R;+6qdD7=?s51&c2PrIuYW z;=fX87_RyP=McF1wonb`&{mBO8F7SSkhW-)0Su#*q1qUoUgCB-8OI#%*fXK%i5fQA9UhXMpm1>Dxs>>oGMpP4& zjlVmQ?(-_if5k45N>5L!1-ucIUlC)5bRv>6QTVUX-w_gPQz)9YN{KhIU*nW1841R; zxVT4emXV~)tjCjAUeKB4+%<8)<5!P+?gS=Os5i^X^JgK~%ydHtm1&$xY z3{F&#F>!jpy+&h;)i%%aY8$~<+XA#m+nS0sn`ok|ysw>v)wWPfC8W_ofx^|1@U{Ak z3P9$ukE8B!r&mMbLYd^*IVqr>0q3g!#tBHW{X20ZE4(3^riib$kVwQJ!KBt;7wc_9+(jA60h z9C~P4cmU~KxI8w`Jyq&r?qzx5TBR-gBVuzRzrFGJH_qfs5B$@yz-X@7#E>G1h;g-y zq&s$XIlTRo9m!I&hY?Z&{PVu3*`$~C-v7df?||SbQTZZz5BP}O-Qdi%H^qOA!k=MXAvn70 zuKt#=5N#j_?w_$(U=8NfIm9b_7JCAyaVM%oNW_VXFBm{lV~A3)OSNU6dJb)yjvlB8 zxyGnqT}1)wDyvmK8l8)QALeZWA@7lEwT}i;ObZl=!J7sKPH&AzH=oE^yBjVFfs_Fn zLiD7?uF*O-ZrvF=^Y4!jZ~U8|-dDVBTM7iDyR04^RN&~gJ2z~;`?{b+@(QJK8I3ND z*lRBj8r(vORxZw;{r+9|y!1#(WiqQn6;uc<@V5~pIqhWNmK~jo2H?yhI{zdyhu)YG zyIjkBY%Q&=s1i?T6e~G`eUTh!0SRzJILcE1814!J9z}>vueoJsSv(!1MpF@vKlbi~m9Eq-A zE?B~Q7f0}#HG6cUDHXOcLIUtuS|nELY&wHOLoqPJ02v25wCmKCh=7(#Bx;+^9X5(- znqsW6X6zrTL#$fU&%kJ!k<8PG6MJbk6w)>)p2bc9{z_waB3gvPUdc!ht#{HvD@>D$ z8h&XGKKVj?J_5m96qE;D1;WaL6c<%c)Pmzb10mn*OWG8|@(U}F^a_>MDCVaqMO_g$?Z1M5KvodHOxGyo83IkX5 zY*m<7E>U`KMWW>Mz&|x3`PrZ*VYewvlM5s{6kp#r!`iuf`H0}*)Y23{2HD52U zh?JvQoJlCt?XZrohcz}x%j!#E751@ODU2sxfO%=i=jn#1n~j<%to$RQxziRh$?)=z zG4LtNMjEIv`_)h;Y-N5*yehEMw3(6g7@4_W4 z?Qe0)g1)NNcLAxkBH?Mf5^irY5mE306vosvN&9us4deUk6{c$M0w>^39vl{))O_uB z`E0aWT_TLvB?esq_Pf5Q^5^!91;sE_toJ({A%i%~{!nQ(YQ^7k_t-ELLs7B8?{EeT z;!VCF>qozx{dkupo6lLwSp8(gDzm!0W9X5*b9iLfh5l1@kpe{OO~8lW2YfiJIeB2U z>5E*o=}WNM1RS<(pA+g0Z>>ur^*Xg8;=bJ3@85IRKcDIA2d}4}zdv7oqoHH6zqqfn zp`l}Me_?;dgxSyh=#gUEJ^%LTT|fMIspFm(J~e#j_GoJSbl;|Xw?|UrcS05c?DZ+2 zU1q=qW7DkQBCt^f9NalX0fMz;h9ns`eAVn_>H^^98p~T*-hmYivc7DAKh=8l3%4BP ztTJI{!Ymr}7G2%f=RM^=#KJ1S;o$K^n^%SXV*H`;X!+TCsS1R2a_HdZ)F9yP<@3gH zCsG;nZ@`!nAS!l04IIjsXJhh!A_+IVvaJdjEKC6fpsF*it-3TA{CTK0yiv^87KFJ1 z!^`!4#vG1Fr zPIdXe)b1p-kDjZ)#r;5&29OO;Bi-2P^K6n$O3iSqE+UOyL}6bC1qiGv4IcWAIg~zc z?jZyF^pJM(3RbDwt}L^x8X?xJjQBeae`>68&v05L5@5K9p_oW+SBJaBuk&_qyl!Kc zw{`zVhr^q*ak-GhK}-?T{`TRhJ>gRNdNys{)a^rC2S2nWA~%?oGL2Ph_39~;qd{&B znjA5Y-J8fwbQg{d`=uI#T&i;zjCQq1XVl3}9<3wFIy~{*ZXl5cpbNWzF4z$3G(rG^ zFr$?b@;Nj$)3BG~6t-FlflRFqUFVWQ$1a8ZDh$4!m|1dFB!P%XL^vj5K!EsGbLh(R zHI&-(1q7y+cEXkn{WKe zR6ApiyFDO&S<*w{a4BV?Em77NG1KT1$N%Prmc+hK-Gv>j#*2k7j&4jfm{WrT*kmmr zbMhffV0;cFb`H^j*pZ%f=qR0L4m+KpXq|adOIFB9wN9~Erf{#7l*3dU`#vdibR^od ztehsSOi0YhU?{E<(E+)d!a-`S#6RKmsbMFG?8@(OiCje!LXFSK z*CGVtV0>-J<|S2#(WO<0&tw#OCN=4w>Y)gCJ0(3U%;^|3Lpwn?dLKP7U=SS09hoEP0t`M?6Zgw@j^kw4T-oB zJP;||8Lo$`a8G9B2*a{WXp&`A)=5=8i!wwK5j}vALov;*;Pb`Ly3QVt5U&**@I`s( zQZ+H)__qwGsWT93wn+tZG&M^~&5f>5hZ)nMqCco;T}LX?WR(cND5akurKVUgkyg`+ zHzuPlg@6z%BxuoOD$g)-iV!HA0rV33d6!QG7?zwV|JY(dT~a0Z7q!n(9tSh0!OWlM zswNY7*{o(!tE*`x?3g6wODc)F zEfr2#CFFPTZ;}#oBGA;LVU*~Z@+WHqe?Qjc@&c$tGNybhAm%a=PO5>XVo2`l>-eqs zk73k7J(b#@SO(D>yP~9ApM6V>#B-|we)V+%A&($_q#b#zf+}Tix`^!p>01E1HzP(gR8ym!AfwefdUOsQ$Vk{i zLsni)bCu~d+)9`sOV!FW>~_(mD=Y~@ap8UbL|uv7qgfd`c;{86hC+o_%TYrlx#ywn zp}}0Ai#GTzR-b`l%u%;HYGxe0y?O7%*)87kI|_eK!Vpa~SsHgY#(G0)^mkLwp2;iN z7T<1eorsdrq_euHT2?utR_V~0nd9k$BQdF?$y@$OZ!SK(57=%Va1uNIGSXOGb3123 zJkMgsxb8D6Vy$&3y5LqxRe|_Annz+l6=@nR#e&@IgK)oPMqH|Nkp*gPXqV!ZHnb1) zLreP6s%%EUlNrI1ik%%Nh5DAlmhk@1-jM1!@%cU8Qct5+OyX*}f=%Y*d#*PoN{Qq^ zGb<5;RQYR0r(UMB8|9e~%^o}R{GAbM zCy?XFEi?PaHynhnBbwTPnC7tY8INaN{VX<)hybrUhKwTt)SRIY=aT>3()q{u-u$ME zV6sIdhh{U>wi05(9YrZzaxP8d1&&}q*S~OizB2)z_$&fa-S{sqa|@QhQ}WKSJ~QIx zFI@b9Wh>;4SY14tB|_BdShgZgTtobQ_nE@>50xB@Dduv=OpKCkW@EdXs&B<6I@urA zn%tBCS1aU>cwej{%R-|I$Wlb$q)6M`znPPK=HR`3a)-1*-*n5llc{apeg%GArnBw( zk4!B5oZ=HJ3SH27lTbZuQ8t&W4tV(Q4!|u(&O>F<>`3buz78 z&!KhSH%_EU(vS&u-Lg4GQjAi;BP5sy2u&e(&ukvdY=sC}*^Ktsv%nurA`HMsi|oTL zTsWcyk3s4p2G7rpVaF~EPSWI|e&ZZOZD-E;-@fo4?W6f#h*~Ssgl5n8mlQ>^2!r$@ zN)WUPQamAFh`%PU0k&HG;{zbHSTYd^Q53|+dD@)tdXsjgp#1VOm>Sqcn06m{4=|x( zq1qnf`i$h#^4n;bVeB9YhH+nlzFhV$hsvK}-w#w*uAmc)lKUxI=1`S?QVyxjJbvWM z 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 literal 0 HcmV?d00001 diff --git a/Documentation/Offline Documentation.pdf.meta b/Documentation/Offline Documentation.pdf.meta new file mode 100644 index 0000000..25f2861 --- /dev/null +++ b/Documentation/Offline Documentation.pdf.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 10f0e80e72776854e983d4cdf6df9df2 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Netick.meta b/Netick.meta new file mode 100644 index 0000000..f8429b4 --- /dev/null +++ b/Netick.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ffca512e01cb5674d8215ce67d2c7dec +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Netick/Editor Resources.meta b/Netick/Editor Resources.meta new file mode 100644 index 0000000..7472d10 --- /dev/null +++ b/Netick/Editor Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bd9795de06261034eacaca0cd29e74f0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Netick/Editor Resources/Gizmos.meta b/Netick/Editor Resources/Gizmos.meta new file mode 100644 index 0000000..7b4decc --- /dev/null +++ b/Netick/Editor Resources/Gizmos.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b2ce39a104d64d74b97f14f1dcdea813 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Netick/Editor Resources/Gizmos/Netick.meta b/Netick/Editor Resources/Gizmos/Netick.meta new file mode 100644 index 0000000..a7c0e40 --- /dev/null +++ b/Netick/Editor Resources/Gizmos/Netick.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 823a1236c720025419bc82f62eb82a3a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Netick/Editor Resources/Gizmos/Netick/Network Icon.png b/Netick/Editor Resources/Gizmos/Netick/Network Icon.png new file mode 100644 index 0000000000000000000000000000000000000000..42f9caea26f2a507d411d898770f30ec23fe1334 GIT binary patch literal 65212 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