diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index c92e6ba58..d9a511b98 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -50,6 +50,20 @@ For an in-depth overview of the project's architecture please check out our [ARC - Once path-plan is finished, server representation of entity starts updating its NetworkedTransform at 30fps. Graphics is on a separate GO and is connected to the networked GO via a spring, to smooth out small corrections. - Graphics GO never passes the simulation GO; if it catches up to the sim due to a network delay, the user will see a hitch. +### Transports + +Boss Room provides players with two ways to connect to a server. + +- IP based: The clients connect directy to a host via IP address. This will only work if both are in the same local are network or if the host forwards ports. +- Relay Based: The clients and the host connect to a relay server with a room key and run all traffic over this relay server. + +To allow for both of these options to be chosen at runtime we created `TransportPicker`. `Transport` picker allows to chose a ip based and a relay based transport and will hook up the game UI to use those transports. The transport field in the `NetworkManager` will be ignored. Currently we support the following transports: +- **UNet(IP):** UNet is the default MLAPI transport and the default IP transport for Boss Room. +- **LiteNetLib(IP):** We use LiteNetLib in Boss Room because it has a built in way to simulate latency which is useful for spotting networking issues early during development. +- **Photon Realtime (Relay):** Photon Realtime is a relay transport using the [Photon Realtime Service](https://www.photonengine.com/Realtime). + +To add new transport in the project parts of `GameNetPortal` and `ClientGameNetPortal` (transport switches) need to be extended. + ### Navigation System #### Building a navigation mesh diff --git a/Assets/BossRoom/GameData/Action/Archer/ArcherChargedShot.asset b/Assets/BossRoom/GameData/Action/Archer/ArcherChargedShot.asset index 9738de423..abc370920 100644 --- a/Assets/BossRoom/GameData/Action/Archer/ArcherChargedShot.asset +++ b/Assets/BossRoom/GameData/Action/Archer/ArcherChargedShot.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:00671f43bc621582d3df54d0dab1dbb99bf124d6bd44d7b6f4d0844b04703acb -size 1682 +oid sha256:afabf49dab53bbbb8a34f457329a3d0d61e0a82164a97e209ddaa5d20ebe61f8 +size 1683 diff --git a/Assets/BossRoom/GameData/Action/Archer/ArcherVolley.asset b/Assets/BossRoom/GameData/Action/Archer/ArcherVolley.asset index d4a6dbfc3..610410455 100644 --- a/Assets/BossRoom/GameData/Action/Archer/ArcherVolley.asset +++ b/Assets/BossRoom/GameData/Action/Archer/ArcherVolley.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:978c285031469d9ed347e21f328e2c03e7512b04d3301b7c21727b8ba91f5bb9 -size 1629 +oid sha256:640c858ecd9c5827053df2e45988039fd7f1e255bddedb21d588fa6bdc697ecd +size 1630 diff --git a/Assets/BossRoom/GameData/Action/General/Revive.asset b/Assets/BossRoom/GameData/Action/General/Revive.asset index a3f5c622e..13fac32f9 100644 --- a/Assets/BossRoom/GameData/Action/General/Revive.asset +++ b/Assets/BossRoom/GameData/Action/General/Revive.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bbc1c14f35b828ccdfc656f1bb6e00c92d659dd859aff843a5e1f6f51083e803 -size 847 +oid sha256:a8f40e307bb0a0385d428a744699698fa02a931e5874290d58b3a335b60cabc1 +size 858 diff --git a/Assets/BossRoom/GameData/Action/Imp/ImpBaseAttack.asset b/Assets/BossRoom/GameData/Action/Imp/ImpBaseAttack.asset index 42aa395d7..da63bc034 100644 --- a/Assets/BossRoom/GameData/Action/Imp/ImpBaseAttack.asset +++ b/Assets/BossRoom/GameData/Action/Imp/ImpBaseAttack.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a2ee589c52ecd8bc0037717c84d838d6f6d4822b9846e4be97effdc24dea6b97 -size 863 +oid sha256:5ba7dbcb8c32a01bdacdf8a5591b7a17bf0d68547e61b0376533608123a31b26 +size 864 diff --git a/Assets/BossRoom/GameData/Action/Mage/MageBaseAttack.asset b/Assets/BossRoom/GameData/Action/Mage/MageBaseAttack.asset index 3e37a1125..63d5462d2 100644 --- a/Assets/BossRoom/GameData/Action/Mage/MageBaseAttack.asset +++ b/Assets/BossRoom/GameData/Action/Mage/MageBaseAttack.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1422735750a15bb73198babdd42d61e446c2cf664e132863f34a67b029850dc5 -size 1132 +oid sha256:9457e6f90f0fcc1e75c612d0c5ba498c47e64d695ed4334020ffba744f3bfb87 +size 1178 diff --git a/Assets/BossRoom/GameData/Action/Mage/MageHeal.asset b/Assets/BossRoom/GameData/Action/Mage/MageHeal.asset index cb2045942..08d65b4b0 100644 --- a/Assets/BossRoom/GameData/Action/Mage/MageHeal.asset +++ b/Assets/BossRoom/GameData/Action/Mage/MageHeal.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d4648ec34aac10b4a98225e881194cf20a824ca22822418660861ea89d1797ac -size 991 +oid sha256:4faf37ef9b30e641b5b7ddcfc46655f75a6da2b9aa9123599f2f2d2272ba2064 +size 971 diff --git a/Assets/BossRoom/GameData/Action/Rogue/RogueBaseAttack.asset b/Assets/BossRoom/GameData/Action/Rogue/RogueBaseAttack.asset index 597ef4bbc..680ebb8fd 100644 --- a/Assets/BossRoom/GameData/Action/Rogue/RogueBaseAttack.asset +++ b/Assets/BossRoom/GameData/Action/Rogue/RogueBaseAttack.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2528bd442c336345ec9e48c53e94827fd41b5477adaed6830067c97447b9225f -size 952 +oid sha256:8624f1f954b41512c61899c7a36503df267e72f87281dd7bf8fdcb5f1438d55c +size 953 diff --git a/Assets/BossRoom/GameData/Action/Rogue/RogueStealthMode.asset b/Assets/BossRoom/GameData/Action/Rogue/RogueStealthMode.asset index a5c692e50..48f75a2ae 100644 --- a/Assets/BossRoom/GameData/Action/Rogue/RogueStealthMode.asset +++ b/Assets/BossRoom/GameData/Action/Rogue/RogueStealthMode.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dd5a352dfe61dd0a5dacdfe6b8f18dc5da9a8886d039fda1c832fcf140aabc78 -size 1064 +oid sha256:75d15662edfa081857e9aa63b434b39e1f77153652e07fa05bee1adf200f195f +size 1088 diff --git a/Assets/BossRoom/GameData/Action/Tank/TankBaseAttack.asset b/Assets/BossRoom/GameData/Action/Tank/TankBaseAttack.asset index 92f4e1b05..f82849890 100644 --- a/Assets/BossRoom/GameData/Action/Tank/TankBaseAttack.asset +++ b/Assets/BossRoom/GameData/Action/Tank/TankBaseAttack.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dbe38680d5f9c214f52841cad7e0f4fc6eae9c4ddd388c71cea139e8fcf74e45 -size 970 +oid sha256:9f2f2f09871b56ad3a0bb2beedb17c4192941891ae675ed1e21dbdb615730023 +size 971 diff --git a/Assets/BossRoom/GameData/Action/Tank/TankShieldBuff.asset b/Assets/BossRoom/GameData/Action/Tank/TankShieldBuff.asset index dd4b77c8c..d1ae0d23d 100644 --- a/Assets/BossRoom/GameData/Action/Tank/TankShieldBuff.asset +++ b/Assets/BossRoom/GameData/Action/Tank/TankShieldBuff.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:164d1dbc96dc311e4df22aa6926906c06cba3ee0ad5598bcb203385bfe5eebf6 -size 1177 +oid sha256:0fdd18eb27cbdd45fc44eb10b66d60a614edbc59f4e800f0160dd2a22bfb3c50 +size 1180 diff --git a/Assets/BossRoom/Prefabs/CharGFX/BossGraphics.prefab b/Assets/BossRoom/Prefabs/CharGFX/BossGraphics.prefab index cf9137c76..91d0f938d 100644 --- a/Assets/BossRoom/Prefabs/CharGFX/BossGraphics.prefab +++ b/Assets/BossRoom/Prefabs/CharGFX/BossGraphics.prefab @@ -634,7 +634,8 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2305735426247598617} - m_LocalRotation: {x: -0.000000066579034, y: -0.000000043711385, z: -0.00000011029043, w: 1} + m_LocalRotation: {x: -0.000000066579034, y: -0.000000043711385, z: -0.00000011029043, + w: 1} m_LocalPosition: {x: -15.063482, y: -0.56256866, z: -0.0000076293945} m_LocalScale: {x: 100, y: 99.999985, z: 100} m_Children: [] @@ -2018,7 +2019,8 @@ MonoBehaviour: m_EventsOnNodeEntry: - m_AnimatorNodeName: Action - Boss Trample m_AnimatorNodeNameHash: -1491039896 - m_Prefab: {fileID: -1433333703484781611, guid: 1333b84cd80da3e4a820009415068d44, type: 3} + m_Prefab: {fileID: -1433333703484781611, guid: 1333b84cd80da3e4a820009415068d44, + type: 3} m_PrefabSpawnDelaySeconds: 0 m_PrefabCanBeAbortedUntilSecs: 0 m_SoundEffect: {fileID: 8300000, guid: a3d48c8599f0d584abc8ea603587d496, type: 3} @@ -2045,7 +2047,8 @@ MonoBehaviour: m_LoopSound: 1 - m_AnimatorNodeName: Stunned m_AnimatorNodeNameHash: -449490811 - m_Prefab: {fileID: -7841978760598146115, guid: 1fab07feb34d8c94c96944f0124d92e3, type: 3} + m_Prefab: {fileID: -7841978760598146115, guid: 1fab07feb34d8c94c96944f0124d92e3, + type: 3} m_PrefabSpawnDelaySeconds: 0 m_PrefabCanBeAbortedUntilSecs: 0 m_SoundEffect: {fileID: 8300000, guid: 3d6f2e33acb1e8f4b9d829e245c62e16, type: 3} @@ -2054,7 +2057,8 @@ MonoBehaviour: m_LoopSound: 0 - m_AnimatorNodeName: HitReact1 m_AnimatorNodeNameHash: -1747783153 - m_Prefab: {fileID: -2843690008440830094, guid: de5b665e7f32274419072e7bf4c3eff8, type: 3} + m_Prefab: {fileID: -2843690008440830094, guid: de5b665e7f32274419072e7bf4c3eff8, + type: 3} m_PrefabSpawnDelaySeconds: 0 m_PrefabCanBeAbortedUntilSecs: 0 m_SoundEffect: {fileID: 8300000, guid: 5ef809d665d13b245b559cd6170f5794, type: 3} @@ -2063,7 +2067,8 @@ MonoBehaviour: m_LoopSound: 0 - m_AnimatorNodeName: WalkRun m_AnimatorNodeNameHash: -1624701500 - m_Prefab: {fileID: -8608552164340512473, guid: 9336eb30e2a836544bfd5b5985fd0573, type: 3} + m_Prefab: {fileID: -8608552164340512473, guid: 9336eb30e2a836544bfd5b5985fd0573, + type: 3} m_PrefabSpawnDelaySeconds: 0 m_PrefabCanBeAbortedUntilSecs: 0 m_SoundEffect: {fileID: 0} @@ -2083,7 +2088,8 @@ AudioSource: m_GameObject: {fileID: 6839301660383890230} m_Enabled: 1 serializedVersion: 4 - OutputAudioMixerGroup: {fileID: 0} + OutputAudioMixerGroup: {fileID: -6199682581367681880, guid: e39f39bfdfb22b541bbc115192fc2809, + type: 2} m_audioClip: {fileID: 0} m_PlayOnAwake: 0 m_Volume: 1 @@ -2094,10 +2100,10 @@ AudioSource: SpatializePostEffects: 0 Priority: 128 DopplerLevel: 1 - MinDistance: 1 + MinDistance: 10 MaxDistance: 100 Pan2D: 0 - rolloffMode: 0 + rolloffMode: 2 BypassEffects: 0 BypassListenerEffects: 0 BypassReverbZones: 0 @@ -2105,23 +2111,50 @@ AudioSource: serializedVersion: 2 m_Curve: - serializedVersion: 3 - time: 0 + time: 0.1 value: 1 - inSlope: 0 - outSlope: 0 + inSlope: -10.0039835 + outSlope: -10.0039835 tangentMode: 0 weightedMode: 0 - inWeight: 0.33333334 - outWeight: 0.33333334 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.2 + value: 0.5 + inSlope: -2.5009959 + outSlope: -2.5009959 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.4 + value: 0.25 + inSlope: -0.62524897 + outSlope: -0.62524897 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.7163666 + value: 0.05203247 + inSlope: -0.15631224 + outSlope: -0.15631224 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 - serializedVersion: 3 time: 1 value: 0 - inSlope: 0 - outSlope: 0 + inSlope: -0.10003988 + outSlope: -0.10003988 tangentMode: 0 weightedMode: 0 - inWeight: 0.33333334 - outWeight: 0.33333334 + inWeight: 0 + outWeight: 0 m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 @@ -2179,7 +2212,8 @@ AudioSource: m_GameObject: {fileID: 6839301660383890230} m_Enabled: 1 serializedVersion: 4 - OutputAudioMixerGroup: {fileID: 0} + OutputAudioMixerGroup: {fileID: -6199682581367681880, guid: e39f39bfdfb22b541bbc115192fc2809, + type: 2} m_audioClip: {fileID: 0} m_PlayOnAwake: 0 m_Volume: 1 @@ -2190,10 +2224,10 @@ AudioSource: SpatializePostEffects: 0 Priority: 128 DopplerLevel: 1 - MinDistance: 1 + MinDistance: 10 MaxDistance: 100 Pan2D: 0 - rolloffMode: 0 + rolloffMode: 2 BypassEffects: 0 BypassListenerEffects: 0 BypassReverbZones: 0 @@ -2201,23 +2235,50 @@ AudioSource: serializedVersion: 2 m_Curve: - serializedVersion: 3 - time: 0 + time: 0.1 value: 1 - inSlope: 0 - outSlope: 0 + inSlope: -10.0039835 + outSlope: -10.0039835 tangentMode: 0 weightedMode: 0 - inWeight: 0.33333334 - outWeight: 0.33333334 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.2 + value: 0.5 + inSlope: -2.5009959 + outSlope: -2.5009959 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.4 + value: 0.25 + inSlope: -0.62524897 + outSlope: -0.62524897 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.7163666 + value: 0.05203247 + inSlope: -0.15631224 + outSlope: -0.15631224 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 - serializedVersion: 3 time: 1 value: 0 - inSlope: 0 - outSlope: 0 + inSlope: -0.10003988 + outSlope: -0.10003988 tangentMode: 0 weightedMode: 0 - inWeight: 0.33333334 - outWeight: 0.33333334 + inWeight: 0 + outWeight: 0 m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 @@ -2282,9 +2343,11 @@ MonoBehaviour: m_AnimatorVariable: Speed m_AnimatorVariableHash: -823668238 m_AudioSource: {fileID: -2129752889114835779} - m_WalkFootstepAudioClip: {fileID: 8300000, guid: 58dfe905701797d4aa32f946d9c41be5, type: 3} + m_WalkFootstepAudioClip: {fileID: 8300000, guid: 58dfe905701797d4aa32f946d9c41be5, + type: 3} m_WalkFootstepVolume: 1 - m_RunFootstepAudioClip: {fileID: 8300000, guid: 81079ef149d08774ab3eadab80944fa0, type: 3} + m_RunFootstepAudioClip: {fileID: 8300000, guid: 81079ef149d08774ab3eadab80944fa0, + type: 3} m_RunFootstepVolume: 1 m_WalkingPoint: 0.6 m_SilentPoint: 0.3 @@ -2297,7 +2360,8 @@ AudioSource: m_GameObject: {fileID: 6839301660383890230} m_Enabled: 1 serializedVersion: 4 - OutputAudioMixerGroup: {fileID: 0} + OutputAudioMixerGroup: {fileID: -4341177700643628062, guid: e39f39bfdfb22b541bbc115192fc2809, + type: 2} m_audioClip: {fileID: 0} m_PlayOnAwake: 0 m_Volume: 1 @@ -2308,10 +2372,10 @@ AudioSource: SpatializePostEffects: 0 Priority: 128 DopplerLevel: 1 - MinDistance: 1 + MinDistance: 10 MaxDistance: 100 Pan2D: 0 - rolloffMode: 0 + rolloffMode: 2 BypassEffects: 0 BypassListenerEffects: 0 BypassReverbZones: 0 @@ -2319,23 +2383,50 @@ AudioSource: serializedVersion: 2 m_Curve: - serializedVersion: 3 - time: 0 + time: 0.1 value: 1 - inSlope: 0 - outSlope: 0 + inSlope: -10.0039835 + outSlope: -10.0039835 tangentMode: 0 weightedMode: 0 - inWeight: 0.33333334 - outWeight: 0.33333334 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.2 + value: 0.5 + inSlope: -2.5009959 + outSlope: -2.5009959 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.4 + value: 0.25 + inSlope: -0.62524897 + outSlope: -0.62524897 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.7163666 + value: 0.05203247 + inSlope: -0.15631224 + outSlope: -0.15631224 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 - serializedVersion: 3 time: 1 value: 0 - inSlope: 0 - outSlope: 0 + inSlope: -0.10003988 + outSlope: -0.10003988 tangentMode: 0 weightedMode: 0 - inWeight: 0.33333334 - outWeight: 0.33333334 + inWeight: 0 + outWeight: 0 m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 diff --git a/Assets/BossRoom/Prefabs/CharGFX/ImpGraphics.prefab b/Assets/BossRoom/Prefabs/CharGFX/ImpGraphics.prefab index 2429266aa..bf96cd0e3 100644 --- a/Assets/BossRoom/Prefabs/CharGFX/ImpGraphics.prefab +++ b/Assets/BossRoom/Prefabs/CharGFX/ImpGraphics.prefab @@ -389,7 +389,8 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2305735426247598617} - m_LocalRotation: {x: -0.000000066579034, y: -0.000000043711385, z: -0.00000011029043, w: 1} + m_LocalRotation: {x: -0.000000066579034, y: -0.000000043711385, z: -0.00000011029043, + w: 1} m_LocalPosition: {x: -15.063482, y: -0.56256866, z: -0.0000076293945} m_LocalScale: {x: 100, y: 99.999985, z: 100} m_Children: [] @@ -1152,7 +1153,8 @@ MonoBehaviour: m_EventsOnNodeEntry: - m_AnimatorNodeName: Attack1 m_AnimatorNodeNameHash: -47317214 - m_Prefab: {fileID: 1652666497380707034, guid: abf9f7de0d4eb4941a1b17568597deb2, type: 3} + m_Prefab: {fileID: 1652666497380707034, guid: abf9f7de0d4eb4941a1b17568597deb2, + type: 3} m_PrefabSpawnDelaySeconds: 0.8 m_PrefabCanBeAbortedUntilSecs: 0 m_SoundEffect: {fileID: 8300000, guid: 714700a9be690ab4ab62c7cad766e9ee, type: 3} @@ -1161,7 +1163,8 @@ MonoBehaviour: m_LoopSound: 0 - m_AnimatorNodeName: Dead Loop m_AnimatorNodeNameHash: -1573871441 - m_Prefab: {fileID: -1487195197790481162, guid: 9537f4739c7bc2f4e8d6b2d49bfcc97e, type: 3} + m_Prefab: {fileID: -1487195197790481162, guid: 9537f4739c7bc2f4e8d6b2d49bfcc97e, + type: 3} m_PrefabSpawnDelaySeconds: 0 m_PrefabCanBeAbortedUntilSecs: 0 m_SoundEffect: {fileID: 8300000, guid: 7fbc6b32425f98840b339a705b4a28cb, type: 3} @@ -1170,7 +1173,8 @@ MonoBehaviour: m_LoopSound: 0 - m_AnimatorNodeName: HitReact1 m_AnimatorNodeNameHash: -1747783153 - m_Prefab: {fileID: -2843690008440830094, guid: de5b665e7f32274419072e7bf4c3eff8, type: 3} + m_Prefab: {fileID: -2843690008440830094, guid: de5b665e7f32274419072e7bf4c3eff8, + type: 3} m_PrefabSpawnDelaySeconds: 0 m_PrefabCanBeAbortedUntilSecs: 0 m_SoundEffect: {fileID: 8300000, guid: 5ef809d665d13b245b559cd6170f5794, type: 3} @@ -1179,7 +1183,8 @@ MonoBehaviour: m_LoopSound: 0 - m_AnimatorNodeName: WalkRun m_AnimatorNodeNameHash: -1624701500 - m_Prefab: {fileID: -8608552164340512473, guid: 9336eb30e2a836544bfd5b5985fd0573, type: 3} + m_Prefab: {fileID: -8608552164340512473, guid: 9336eb30e2a836544bfd5b5985fd0573, + type: 3} m_PrefabSpawnDelaySeconds: 0 m_PrefabCanBeAbortedUntilSecs: 0 m_SoundEffect: {fileID: 0} @@ -1199,7 +1204,8 @@ AudioSource: m_GameObject: {fileID: 6839301660383890230} m_Enabled: 1 serializedVersion: 4 - OutputAudioMixerGroup: {fileID: 0} + OutputAudioMixerGroup: {fileID: -6199682581367681880, guid: e39f39bfdfb22b541bbc115192fc2809, + type: 2} m_audioClip: {fileID: 0} m_PlayOnAwake: 0 m_Volume: 1 @@ -1210,10 +1216,10 @@ AudioSource: SpatializePostEffects: 0 Priority: 128 DopplerLevel: 1 - MinDistance: 1 + MinDistance: 10 MaxDistance: 100 Pan2D: 0 - rolloffMode: 0 + rolloffMode: 2 BypassEffects: 0 BypassListenerEffects: 0 BypassReverbZones: 0 @@ -1221,23 +1227,50 @@ AudioSource: serializedVersion: 2 m_Curve: - serializedVersion: 3 - time: 0 + time: 0.1 value: 1 - inSlope: 0 - outSlope: 0 + inSlope: -10.0039835 + outSlope: -10.0039835 tangentMode: 0 weightedMode: 0 - inWeight: 0.33333334 - outWeight: 0.33333334 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.2 + value: 0.5 + inSlope: -2.5009959 + outSlope: -2.5009959 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.4 + value: 0.25 + inSlope: -0.62524897 + outSlope: -0.62524897 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.7163666 + value: 0.05203247 + inSlope: -0.15631224 + outSlope: -0.15631224 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 - serializedVersion: 3 time: 1 value: 0 - inSlope: 0 - outSlope: 0 + inSlope: -0.10003988 + outSlope: -0.10003988 tangentMode: 0 weightedMode: 0 - inWeight: 0.33333334 - outWeight: 0.33333334 + inWeight: 0 + outWeight: 0 m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 @@ -1295,7 +1328,8 @@ AudioSource: m_GameObject: {fileID: 6839301660383890230} m_Enabled: 1 serializedVersion: 4 - OutputAudioMixerGroup: {fileID: 0} + OutputAudioMixerGroup: {fileID: -6199682581367681880, guid: e39f39bfdfb22b541bbc115192fc2809, + type: 2} m_audioClip: {fileID: 0} m_PlayOnAwake: 0 m_Volume: 1 @@ -1306,10 +1340,10 @@ AudioSource: SpatializePostEffects: 0 Priority: 128 DopplerLevel: 1 - MinDistance: 1 + MinDistance: 10 MaxDistance: 100 Pan2D: 0 - rolloffMode: 0 + rolloffMode: 2 BypassEffects: 0 BypassListenerEffects: 0 BypassReverbZones: 0 @@ -1317,23 +1351,50 @@ AudioSource: serializedVersion: 2 m_Curve: - serializedVersion: 3 - time: 0 + time: 0.1 value: 1 - inSlope: 0 - outSlope: 0 + inSlope: -10.0039835 + outSlope: -10.0039835 tangentMode: 0 weightedMode: 0 - inWeight: 0.33333334 - outWeight: 0.33333334 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.2 + value: 0.5 + inSlope: -2.5009959 + outSlope: -2.5009959 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.4 + value: 0.25 + inSlope: -0.62524897 + outSlope: -0.62524897 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.7163666 + value: 0.05203247 + inSlope: -0.15631224 + outSlope: -0.15631224 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 - serializedVersion: 3 time: 1 value: 0 - inSlope: 0 - outSlope: 0 + inSlope: -0.10003988 + outSlope: -0.10003988 tangentMode: 0 weightedMode: 0 - inWeight: 0.33333334 - outWeight: 0.33333334 + inWeight: 0 + outWeight: 0 m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 @@ -1398,9 +1459,11 @@ MonoBehaviour: m_AnimatorVariable: Speed m_AnimatorVariableHash: -823668238 m_AudioSource: {fileID: -8995571906845300287} - m_WalkFootstepAudioClip: {fileID: 8300000, guid: 6fd6fb49b9fc5324a8baf1de798388fa, type: 3} + m_WalkFootstepAudioClip: {fileID: 8300000, guid: 6fd6fb49b9fc5324a8baf1de798388fa, + type: 3} m_WalkFootstepVolume: 0.8 - m_RunFootstepAudioClip: {fileID: 8300000, guid: 6ad4d1d63bc70494bbc9172ae70bcdd0, type: 3} + m_RunFootstepAudioClip: {fileID: 8300000, guid: 6ad4d1d63bc70494bbc9172ae70bcdd0, + type: 3} m_RunFootstepVolume: 0.8 m_WalkingPoint: 0.6 m_SilentPoint: 0.3 @@ -1413,7 +1476,8 @@ AudioSource: m_GameObject: {fileID: 6839301660383890230} m_Enabled: 1 serializedVersion: 4 - OutputAudioMixerGroup: {fileID: 0} + OutputAudioMixerGroup: {fileID: -4341177700643628062, guid: e39f39bfdfb22b541bbc115192fc2809, + type: 2} m_audioClip: {fileID: 0} m_PlayOnAwake: 0 m_Volume: 1 @@ -1424,10 +1488,10 @@ AudioSource: SpatializePostEffects: 0 Priority: 128 DopplerLevel: 1 - MinDistance: 1 + MinDistance: 10 MaxDistance: 100 Pan2D: 0 - rolloffMode: 0 + rolloffMode: 2 BypassEffects: 0 BypassListenerEffects: 0 BypassReverbZones: 0 @@ -1435,23 +1499,50 @@ AudioSource: serializedVersion: 2 m_Curve: - serializedVersion: 3 - time: 0 + time: 0.1 value: 1 - inSlope: 0 - outSlope: 0 + inSlope: -10.0039835 + outSlope: -10.0039835 tangentMode: 0 weightedMode: 0 - inWeight: 0.33333334 - outWeight: 0.33333334 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.2 + value: 0.5 + inSlope: -2.5009959 + outSlope: -2.5009959 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.4 + value: 0.25 + inSlope: -0.62524897 + outSlope: -0.62524897 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.7163666 + value: 0.05203247 + inSlope: -0.15631224 + outSlope: -0.15631224 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 - serializedVersion: 3 time: 1 value: 0 - inSlope: 0 - outSlope: 0 + inSlope: -0.10003988 + outSlope: -0.10003988 tangentMode: 0 weightedMode: 0 - inWeight: 0.33333334 - outWeight: 0.33333334 + inWeight: 0 + outWeight: 0 m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 diff --git a/Assets/BossRoom/Prefabs/CharGFX/PlayerGraphics.prefab b/Assets/BossRoom/Prefabs/CharGFX/PlayerGraphics.prefab index a22a3dde2..4c8f332ee 100644 --- a/Assets/BossRoom/Prefabs/CharGFX/PlayerGraphics.prefab +++ b/Assets/BossRoom/Prefabs/CharGFX/PlayerGraphics.prefab @@ -1188,7 +1188,8 @@ MonoBehaviour: m_EditorClassIdentifier: m_ClientVisualsAnimator: {fileID: 4199396739699390757} m_CharacterSwapper: {fileID: 579958722332811098} - TargetReticule: {fileID: 3697322597467218969, guid: 546d1949af792c245b0861507d25a349, type: 3} + TargetReticule: {fileID: 3697322597467218969, guid: 546d1949af792c245b0861507d25a349, + type: 3} ReticuleFriendlyMat: {fileID: 2100000, guid: 0bc9c70c830bca44dbddfbc5c49830f8, type: 2} ReticuleHostileMat: {fileID: 2100000, guid: 06ea36c997b09a943b6f5ea691093c21, type: 2} --- !u!114 &579958722332811098 @@ -1217,7 +1218,8 @@ MonoBehaviour: shoulderRight: {fileID: 1781409292828974927} shoulderLeft: {fileID: 530452607416789901} specialFx: {fileID: 3474339246132219073} - animatorOverrides: {fileID: 22100000, guid: c84cdd5b9f976074b8545c42342d2ce0, type: 2} + animatorOverrides: {fileID: 22100000, guid: c84cdd5b9f976074b8545c42342d2ce0, + type: 2} - ears: {fileID: 4321881827279680677} head: {fileID: 133758652153398652} mouth: {fileID: 923827126477259202} @@ -1231,7 +1233,8 @@ MonoBehaviour: shoulderRight: {fileID: 6545411513259302461} shoulderLeft: {fileID: 8232172533547502877} specialFx: {fileID: 3474339246132219073} - animatorOverrides: {fileID: 22100000, guid: c84cdd5b9f976074b8545c42342d2ce0, type: 2} + animatorOverrides: {fileID: 22100000, guid: c84cdd5b9f976074b8545c42342d2ce0, + type: 2} - ears: {fileID: 6390976879751649216} head: {fileID: 4973265795085780639} mouth: {fileID: 3719508152487413442} @@ -1245,7 +1248,8 @@ MonoBehaviour: shoulderRight: {fileID: 6383224644280082103} shoulderLeft: {fileID: 4549751628748142226} specialFx: {fileID: -2356631595065836862} - animatorOverrides: {fileID: 22100000, guid: a264cfb5b89b3054d83727922fcf312c, type: 2} + animatorOverrides: {fileID: 22100000, guid: a264cfb5b89b3054d83727922fcf312c, + type: 2} - ears: {fileID: 8404362065137065518} head: {fileID: 5889946301165906892} mouth: {fileID: 4660821811407251521} @@ -1259,7 +1263,8 @@ MonoBehaviour: shoulderRight: {fileID: 4203481789317505848} shoulderLeft: {fileID: 2991311409585703954} specialFx: {fileID: -2356631595065836862} - animatorOverrides: {fileID: 22100000, guid: a264cfb5b89b3054d83727922fcf312c, type: 2} + animatorOverrides: {fileID: 22100000, guid: a264cfb5b89b3054d83727922fcf312c, + type: 2} - ears: {fileID: 5899458652462590968} head: {fileID: 7369345984981431406} mouth: {fileID: 4136368192088449017} @@ -1273,7 +1278,8 @@ MonoBehaviour: shoulderRight: {fileID: 7630942137655852301} shoulderLeft: {fileID: 2144849655946590485} specialFx: {fileID: 4677558719418193770} - animatorOverrides: {fileID: 22100000, guid: 2c3286578a51645449e8926f958438a7, type: 2} + animatorOverrides: {fileID: 22100000, guid: 2c3286578a51645449e8926f958438a7, + type: 2} - ears: {fileID: 4002719052165595995} head: {fileID: 5585089004425583065} mouth: {fileID: 5217950414587416094} @@ -1287,7 +1293,8 @@ MonoBehaviour: shoulderRight: {fileID: 1364570524081569281} shoulderLeft: {fileID: 6080563669559509259} specialFx: {fileID: 4677558719418193770} - animatorOverrides: {fileID: 22100000, guid: 2c3286578a51645449e8926f958438a7, type: 2} + animatorOverrides: {fileID: 22100000, guid: 2c3286578a51645449e8926f958438a7, + type: 2} - ears: {fileID: 6919461923485979499} head: {fileID: 3560807020904556643} mouth: {fileID: 533753975163153916} @@ -1301,7 +1308,8 @@ MonoBehaviour: shoulderRight: {fileID: 5905537651277146449} shoulderLeft: {fileID: 7270238299152864853} specialFx: {fileID: -4883610069003345042} - animatorOverrides: {fileID: 22100000, guid: 59250e4e9e5786b408633dbbdb2cecff, type: 2} + animatorOverrides: {fileID: 22100000, guid: 59250e4e9e5786b408633dbbdb2cecff, + type: 2} - ears: {fileID: 3602020854034061651} head: {fileID: 6269848250764621111} mouth: {fileID: 4712135659507493662} @@ -1315,7 +1323,8 @@ MonoBehaviour: shoulderRight: {fileID: 5037577724869065192} shoulderLeft: {fileID: 1918162386034545041} specialFx: {fileID: -4883610069003345042} - animatorOverrides: {fileID: 22100000, guid: 59250e4e9e5786b408633dbbdb2cecff, type: 2} + animatorOverrides: {fileID: 22100000, guid: 59250e4e9e5786b408633dbbdb2cecff, + type: 2} m_Animator: {fileID: 4199396739699390757} --- !u!114 &-2356631595065836862 MonoBehaviour: @@ -1370,7 +1379,8 @@ MonoBehaviour: m_LoopSound: 0 - m_AnimatorNodeName: Attack2 m_AnimatorNodeNameHash: 1680125592 - m_Prefab: {fileID: 5031766593922921982, guid: 916fc51d2167e1f42a14e1fb9cd224a8, type: 3} + m_Prefab: {fileID: 5031766593922921982, guid: 916fc51d2167e1f42a14e1fb9cd224a8, + type: 3} m_PrefabSpawnDelaySeconds: 0 m_PrefabCanBeAbortedUntilSecs: 0 m_SoundEffect: {fileID: 8300000, guid: 142f526f026d1c241b01ebb524d19903, type: 3} @@ -1379,7 +1389,8 @@ MonoBehaviour: m_LoopSound: 0 - m_AnimatorNodeName: Fall Down m_AnimatorNodeNameHash: 950593707 - m_Prefab: {fileID: -288210933268752174, guid: 98f11693945a93b4abd1cebb803338cc, type: 3} + m_Prefab: {fileID: -288210933268752174, guid: 98f11693945a93b4abd1cebb803338cc, + type: 3} m_PrefabSpawnDelaySeconds: 1.4 m_PrefabCanBeAbortedUntilSecs: 0 m_SoundEffect: {fileID: 8300000, guid: 7fbc6b32425f98840b339a705b4a28cb, type: 3} @@ -1388,7 +1399,8 @@ MonoBehaviour: m_LoopSound: 0 - m_AnimatorNodeName: WalkRun m_AnimatorNodeNameHash: -1624701500 - m_Prefab: {fileID: -8608552164340512473, guid: 9336eb30e2a836544bfd5b5985fd0573, type: 3} + m_Prefab: {fileID: -8608552164340512473, guid: 9336eb30e2a836544bfd5b5985fd0573, + type: 3} m_PrefabSpawnDelaySeconds: 0 m_PrefabCanBeAbortedUntilSecs: 0 m_SoundEffect: {fileID: 0} @@ -1397,7 +1409,8 @@ MonoBehaviour: m_LoopSound: 0 - m_AnimatorNodeName: Stand Up m_AnimatorNodeNameHash: 1489384510 - m_Prefab: {fileID: 5012378715484584769, guid: 8b58298c2bb9f0d4f8cb8243450adeda, type: 3} + m_Prefab: {fileID: 5012378715484584769, guid: 8b58298c2bb9f0d4f8cb8243450adeda, + type: 3} m_PrefabSpawnDelaySeconds: 0 m_PrefabCanBeAbortedUntilSecs: 0 m_SoundEffect: {fileID: 8300000, guid: c6c3998cfe5b6b94ab3b60a57f1c1598, type: 3} @@ -1406,7 +1419,8 @@ MonoBehaviour: m_LoopSound: 0 - m_AnimatorNodeName: Stunned m_AnimatorNodeNameHash: -449490811 - m_Prefab: {fileID: -7841978760598146115, guid: 1fab07feb34d8c94c96944f0124d92e3, type: 3} + m_Prefab: {fileID: -7841978760598146115, guid: 1fab07feb34d8c94c96944f0124d92e3, + type: 3} m_PrefabSpawnDelaySeconds: 0 m_PrefabCanBeAbortedUntilSecs: 0 m_SoundEffect: {fileID: 8300000, guid: 3d6f2e33acb1e8f4b9d829e245c62e16, type: 3} @@ -1415,7 +1429,8 @@ MonoBehaviour: m_LoopSound: 0 - m_AnimatorNodeName: HitReact1 m_AnimatorNodeNameHash: -1747783153 - m_Prefab: {fileID: -2843690008440830094, guid: de5b665e7f32274419072e7bf4c3eff8, type: 3} + m_Prefab: {fileID: -2843690008440830094, guid: de5b665e7f32274419072e7bf4c3eff8, + type: 3} m_PrefabSpawnDelaySeconds: 0 m_PrefabCanBeAbortedUntilSecs: 0 m_SoundEffect: {fileID: 8300000, guid: 5ef809d665d13b245b559cd6170f5794, type: 3} @@ -1442,7 +1457,8 @@ MonoBehaviour: m_EventsOnNodeEntry: - m_AnimatorNodeName: Attack1 m_AnimatorNodeNameHash: -47317214 - m_Prefab: {fileID: 4268371053021891542, guid: e1a27cb18e3a1d649aa3fc6420f3731b, type: 3} + m_Prefab: {fileID: 4268371053021891542, guid: e1a27cb18e3a1d649aa3fc6420f3731b, + type: 3} m_PrefabSpawnDelaySeconds: 0 m_PrefabCanBeAbortedUntilSecs: 0 m_SoundEffect: {fileID: 8300000, guid: 62f4581e195a41c4eb9b5429dc33e34e, type: 3} @@ -1469,7 +1485,8 @@ MonoBehaviour: m_LoopSound: 0 - m_AnimatorNodeName: Fall Down m_AnimatorNodeNameHash: 950593707 - m_Prefab: {fileID: -288210933268752174, guid: 98f11693945a93b4abd1cebb803338cc, type: 3} + m_Prefab: {fileID: -288210933268752174, guid: 98f11693945a93b4abd1cebb803338cc, + type: 3} m_PrefabSpawnDelaySeconds: 1.4 m_PrefabCanBeAbortedUntilSecs: 0 m_SoundEffect: {fileID: 0} @@ -1478,7 +1495,8 @@ MonoBehaviour: m_LoopSound: 0 - m_AnimatorNodeName: WalkRun m_AnimatorNodeNameHash: -1624701500 - m_Prefab: {fileID: -8608552164340512473, guid: 9336eb30e2a836544bfd5b5985fd0573, type: 3} + m_Prefab: {fileID: -8608552164340512473, guid: 9336eb30e2a836544bfd5b5985fd0573, + type: 3} m_PrefabSpawnDelaySeconds: 0 m_PrefabCanBeAbortedUntilSecs: 0 m_SoundEffect: {fileID: 0} @@ -1487,7 +1505,8 @@ MonoBehaviour: m_LoopSound: 0 - m_AnimatorNodeName: Stand Up m_AnimatorNodeNameHash: 1489384510 - m_Prefab: {fileID: 5012378715484584769, guid: 8b58298c2bb9f0d4f8cb8243450adeda, type: 3} + m_Prefab: {fileID: 5012378715484584769, guid: 8b58298c2bb9f0d4f8cb8243450adeda, + type: 3} m_PrefabSpawnDelaySeconds: 0 m_PrefabCanBeAbortedUntilSecs: 0 m_SoundEffect: {fileID: 8300000, guid: c6c3998cfe5b6b94ab3b60a57f1c1598, type: 3} @@ -1496,7 +1515,8 @@ MonoBehaviour: m_LoopSound: 0 - m_AnimatorNodeName: Stunned m_AnimatorNodeNameHash: -449490811 - m_Prefab: {fileID: -7841978760598146115, guid: 1fab07feb34d8c94c96944f0124d92e3, type: 3} + m_Prefab: {fileID: -7841978760598146115, guid: 1fab07feb34d8c94c96944f0124d92e3, + type: 3} m_PrefabSpawnDelaySeconds: 0 m_PrefabCanBeAbortedUntilSecs: 0 m_SoundEffect: {fileID: 8300000, guid: 3d6f2e33acb1e8f4b9d829e245c62e16, type: 3} @@ -1505,7 +1525,8 @@ MonoBehaviour: m_LoopSound: 0 - m_AnimatorNodeName: HitReact1 m_AnimatorNodeNameHash: -1747783153 - m_Prefab: {fileID: -2843690008440830094, guid: de5b665e7f32274419072e7bf4c3eff8, type: 3} + m_Prefab: {fileID: -2843690008440830094, guid: de5b665e7f32274419072e7bf4c3eff8, + type: 3} m_PrefabSpawnDelaySeconds: 0 m_PrefabCanBeAbortedUntilSecs: 0 m_SoundEffect: {fileID: 8300000, guid: 5ef809d665d13b245b559cd6170f5794, type: 3} @@ -1532,7 +1553,8 @@ MonoBehaviour: m_EventsOnNodeEntry: - m_AnimatorNodeName: Attack1 m_AnimatorNodeNameHash: -47317214 - m_Prefab: {fileID: 2787649059963953560, guid: 5121957b2fabba043a36ec5641e54be7, type: 3} + m_Prefab: {fileID: 2787649059963953560, guid: 5121957b2fabba043a36ec5641e54be7, + type: 3} m_PrefabSpawnDelaySeconds: 0.8 m_PrefabCanBeAbortedUntilSecs: 0 m_SoundEffect: {fileID: 8300000, guid: aafc6fae94f920546bf019c2d9cec45c, type: 3} @@ -1541,7 +1563,8 @@ MonoBehaviour: m_LoopSound: 0 - m_AnimatorNodeName: Fall Down m_AnimatorNodeNameHash: 950593707 - m_Prefab: {fileID: -288210933268752174, guid: 98f11693945a93b4abd1cebb803338cc, type: 3} + m_Prefab: {fileID: -288210933268752174, guid: 98f11693945a93b4abd1cebb803338cc, + type: 3} m_PrefabSpawnDelaySeconds: 1.4 m_PrefabCanBeAbortedUntilSecs: 0 m_SoundEffect: {fileID: 8300000, guid: 7fbc6b32425f98840b339a705b4a28cb, type: 3} @@ -1550,7 +1573,8 @@ MonoBehaviour: m_LoopSound: 0 - m_AnimatorNodeName: WalkRun m_AnimatorNodeNameHash: -1624701500 - m_Prefab: {fileID: -8608552164340512473, guid: 9336eb30e2a836544bfd5b5985fd0573, type: 3} + m_Prefab: {fileID: -8608552164340512473, guid: 9336eb30e2a836544bfd5b5985fd0573, + type: 3} m_PrefabSpawnDelaySeconds: 0 m_PrefabCanBeAbortedUntilSecs: 0 m_SoundEffect: {fileID: 0} @@ -1559,7 +1583,8 @@ MonoBehaviour: m_LoopSound: 0 - m_AnimatorNodeName: Stand Up m_AnimatorNodeNameHash: 1489384510 - m_Prefab: {fileID: 5012378715484584769, guid: 8b58298c2bb9f0d4f8cb8243450adeda, type: 3} + m_Prefab: {fileID: 5012378715484584769, guid: 8b58298c2bb9f0d4f8cb8243450adeda, + type: 3} m_PrefabSpawnDelaySeconds: 0 m_PrefabCanBeAbortedUntilSecs: 0 m_SoundEffect: {fileID: 8300000, guid: c6c3998cfe5b6b94ab3b60a57f1c1598, type: 3} @@ -1568,7 +1593,8 @@ MonoBehaviour: m_LoopSound: 0 - m_AnimatorNodeName: Stunned m_AnimatorNodeNameHash: -449490811 - m_Prefab: {fileID: -7841978760598146115, guid: 1fab07feb34d8c94c96944f0124d92e3, type: 3} + m_Prefab: {fileID: -7841978760598146115, guid: 1fab07feb34d8c94c96944f0124d92e3, + type: 3} m_PrefabSpawnDelaySeconds: 0 m_PrefabCanBeAbortedUntilSecs: 0 m_SoundEffect: {fileID: 8300000, guid: 3d6f2e33acb1e8f4b9d829e245c62e16, type: 3} @@ -1577,7 +1603,8 @@ MonoBehaviour: m_LoopSound: 0 - m_AnimatorNodeName: HitReact1 m_AnimatorNodeNameHash: -1747783153 - m_Prefab: {fileID: -2843690008440830094, guid: de5b665e7f32274419072e7bf4c3eff8, type: 3} + m_Prefab: {fileID: -2843690008440830094, guid: de5b665e7f32274419072e7bf4c3eff8, + type: 3} m_PrefabSpawnDelaySeconds: 0 m_PrefabCanBeAbortedUntilSecs: 0 m_SoundEffect: {fileID: 8300000, guid: 5ef809d665d13b245b559cd6170f5794, type: 3} @@ -1622,7 +1649,8 @@ MonoBehaviour: m_LoopSound: 0 - m_AnimatorNodeName: Fall Down m_AnimatorNodeNameHash: 950593707 - m_Prefab: {fileID: -288210933268752174, guid: 98f11693945a93b4abd1cebb803338cc, type: 3} + m_Prefab: {fileID: -288210933268752174, guid: 98f11693945a93b4abd1cebb803338cc, + type: 3} m_PrefabSpawnDelaySeconds: 1.4 m_PrefabCanBeAbortedUntilSecs: 0 m_SoundEffect: {fileID: 8300000, guid: 7fbc6b32425f98840b339a705b4a28cb, type: 3} @@ -1631,7 +1659,8 @@ MonoBehaviour: m_LoopSound: 0 - m_AnimatorNodeName: WalkRun m_AnimatorNodeNameHash: -1624701500 - m_Prefab: {fileID: -8608552164340512473, guid: 9336eb30e2a836544bfd5b5985fd0573, type: 3} + m_Prefab: {fileID: -8608552164340512473, guid: 9336eb30e2a836544bfd5b5985fd0573, + type: 3} m_PrefabSpawnDelaySeconds: 0 m_PrefabCanBeAbortedUntilSecs: 0 m_SoundEffect: {fileID: 0} @@ -1640,7 +1669,8 @@ MonoBehaviour: m_LoopSound: 0 - m_AnimatorNodeName: Stand Up m_AnimatorNodeNameHash: 1489384510 - m_Prefab: {fileID: 5012378715484584769, guid: 8b58298c2bb9f0d4f8cb8243450adeda, type: 3} + m_Prefab: {fileID: 5012378715484584769, guid: 8b58298c2bb9f0d4f8cb8243450adeda, + type: 3} m_PrefabSpawnDelaySeconds: 0 m_PrefabCanBeAbortedUntilSecs: 0 m_SoundEffect: {fileID: 8300000, guid: c6c3998cfe5b6b94ab3b60a57f1c1598, type: 3} @@ -1649,7 +1679,8 @@ MonoBehaviour: m_LoopSound: 0 - m_AnimatorNodeName: Stunned m_AnimatorNodeNameHash: -449490811 - m_Prefab: {fileID: -7841978760598146115, guid: 1fab07feb34d8c94c96944f0124d92e3, type: 3} + m_Prefab: {fileID: -7841978760598146115, guid: 1fab07feb34d8c94c96944f0124d92e3, + type: 3} m_PrefabSpawnDelaySeconds: 0 m_PrefabCanBeAbortedUntilSecs: 0 m_SoundEffect: {fileID: 8300000, guid: 3d6f2e33acb1e8f4b9d829e245c62e16, type: 3} @@ -1658,7 +1689,8 @@ MonoBehaviour: m_LoopSound: 0 - m_AnimatorNodeName: HitReact1 m_AnimatorNodeNameHash: -1747783153 - m_Prefab: {fileID: -2843690008440830094, guid: de5b665e7f32274419072e7bf4c3eff8, type: 3} + m_Prefab: {fileID: -2843690008440830094, guid: de5b665e7f32274419072e7bf4c3eff8, + type: 3} m_PrefabSpawnDelaySeconds: 0 m_PrefabCanBeAbortedUntilSecs: 0 m_SoundEffect: {fileID: 8300000, guid: 5ef809d665d13b245b559cd6170f5794, type: 3} @@ -1678,7 +1710,8 @@ AudioSource: m_GameObject: {fileID: 3736552308919084700} m_Enabled: 1 serializedVersion: 4 - OutputAudioMixerGroup: {fileID: 0} + OutputAudioMixerGroup: {fileID: -6199682581367681880, guid: e39f39bfdfb22b541bbc115192fc2809, + type: 2} m_audioClip: {fileID: 0} m_PlayOnAwake: 0 m_Volume: 1 @@ -1689,10 +1722,10 @@ AudioSource: SpatializePostEffects: 0 Priority: 128 DopplerLevel: 1 - MinDistance: 1 + MinDistance: 10 MaxDistance: 100 Pan2D: 0 - rolloffMode: 0 + rolloffMode: 2 BypassEffects: 0 BypassListenerEffects: 0 BypassReverbZones: 0 @@ -1700,23 +1733,50 @@ AudioSource: serializedVersion: 2 m_Curve: - serializedVersion: 3 - time: 0 + time: 0.1 value: 1 - inSlope: 0 - outSlope: 0 + inSlope: -10.0039835 + outSlope: -10.0039835 tangentMode: 0 weightedMode: 0 - inWeight: 0.33333334 - outWeight: 0.33333334 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.2 + value: 0.5 + inSlope: -2.5009959 + outSlope: -2.5009959 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.4 + value: 0.25 + inSlope: -0.62524897 + outSlope: -0.62524897 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.7163666 + value: 0.05203247 + inSlope: -0.15631224 + outSlope: -0.15631224 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 - serializedVersion: 3 time: 1 value: 0 - inSlope: 0 - outSlope: 0 + inSlope: -0.10003988 + outSlope: -0.10003988 tangentMode: 0 weightedMode: 0 - inWeight: 0.33333334 - outWeight: 0.33333334 + inWeight: 0 + outWeight: 0 m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 @@ -1774,7 +1834,8 @@ AudioSource: m_GameObject: {fileID: 3736552308919084700} m_Enabled: 1 serializedVersion: 4 - OutputAudioMixerGroup: {fileID: 0} + OutputAudioMixerGroup: {fileID: -6199682581367681880, guid: e39f39bfdfb22b541bbc115192fc2809, + type: 2} m_audioClip: {fileID: 0} m_PlayOnAwake: 0 m_Volume: 1 @@ -1785,10 +1846,10 @@ AudioSource: SpatializePostEffects: 0 Priority: 128 DopplerLevel: 1 - MinDistance: 1 + MinDistance: 10 MaxDistance: 100 Pan2D: 0 - rolloffMode: 0 + rolloffMode: 2 BypassEffects: 0 BypassListenerEffects: 0 BypassReverbZones: 0 @@ -1796,23 +1857,50 @@ AudioSource: serializedVersion: 2 m_Curve: - serializedVersion: 3 - time: 0 + time: 0.1 value: 1 - inSlope: 0 - outSlope: 0 + inSlope: -10.0039835 + outSlope: -10.0039835 tangentMode: 0 weightedMode: 0 - inWeight: 0.33333334 - outWeight: 0.33333334 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.2 + value: 0.5 + inSlope: -2.5009959 + outSlope: -2.5009959 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.4 + value: 0.25 + inSlope: -0.62524897 + outSlope: -0.62524897 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.7163666 + value: 0.05203247 + inSlope: -0.15631224 + outSlope: -0.15631224 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 - serializedVersion: 3 time: 1 value: 0 - inSlope: 0 - outSlope: 0 + inSlope: -0.10003988 + outSlope: -0.10003988 tangentMode: 0 weightedMode: 0 - inWeight: 0.33333334 - outWeight: 0.33333334 + inWeight: 0 + outWeight: 0 m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 @@ -1877,9 +1965,11 @@ MonoBehaviour: m_AnimatorVariable: Speed m_AnimatorVariableHash: -823668238 m_AudioSource: {fileID: 3410014739571049847} - m_WalkFootstepAudioClip: {fileID: 8300000, guid: 6fd6fb49b9fc5324a8baf1de798388fa, type: 3} + m_WalkFootstepAudioClip: {fileID: 8300000, guid: 6fd6fb49b9fc5324a8baf1de798388fa, + type: 3} m_WalkFootstepVolume: 1 - m_RunFootstepAudioClip: {fileID: 8300000, guid: 6ad4d1d63bc70494bbc9172ae70bcdd0, type: 3} + m_RunFootstepAudioClip: {fileID: 8300000, guid: 6ad4d1d63bc70494bbc9172ae70bcdd0, + type: 3} m_RunFootstepVolume: 1 m_WalkingPoint: 0.6 m_SilentPoint: 0.3 @@ -1892,7 +1982,8 @@ AudioSource: m_GameObject: {fileID: 3736552308919084700} m_Enabled: 1 serializedVersion: 4 - OutputAudioMixerGroup: {fileID: 0} + OutputAudioMixerGroup: {fileID: -4341177700643628062, guid: e39f39bfdfb22b541bbc115192fc2809, + type: 2} m_audioClip: {fileID: 0} m_PlayOnAwake: 0 m_Volume: 1 @@ -1903,10 +1994,10 @@ AudioSource: SpatializePostEffects: 0 Priority: 128 DopplerLevel: 1 - MinDistance: 1 + MinDistance: 10 MaxDistance: 100 Pan2D: 0 - rolloffMode: 0 + rolloffMode: 2 BypassEffects: 0 BypassListenerEffects: 0 BypassReverbZones: 0 @@ -1914,23 +2005,50 @@ AudioSource: serializedVersion: 2 m_Curve: - serializedVersion: 3 - time: 0 + time: 0.1 value: 1 - inSlope: 0 - outSlope: 0 + inSlope: -10.0039835 + outSlope: -10.0039835 tangentMode: 0 weightedMode: 0 - inWeight: 0.33333334 - outWeight: 0.33333334 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.2 + value: 0.5 + inSlope: -2.5009959 + outSlope: -2.5009959 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.4 + value: 0.25 + inSlope: -0.62524897 + outSlope: -0.62524897 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.7163666 + value: 0.05203247 + inSlope: -0.15631224 + outSlope: -0.15631224 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 - serializedVersion: 3 time: 1 value: 0 - inSlope: 0 - outSlope: 0 + inSlope: -0.10003988 + outSlope: -0.10003988 tangentMode: 0 weightedMode: 0 - inWeight: 0.33333334 - outWeight: 0.33333334 + inWeight: 0 + outWeight: 0 m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 @@ -3265,7 +3383,8 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 8021677031855140055} - m_LocalRotation: {x: -0.000000066579034, y: -0.000000043711385, z: -0.00000011029043, w: 1} + m_LocalRotation: {x: -0.000000066579034, y: -0.000000043711385, z: -0.00000011029043, + w: 1} m_LocalPosition: {x: -15.063486, y: -0.5625534, z: -0.000015258789} m_LocalScale: {x: 100, y: 99.999985, z: 100} m_Children: [] @@ -3879,107 +3998,133 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4076098699203836966} m_Modifications: - - target: {fileID: 599907153232206429, guid: 6736c1870dd3e95478501ee9f3ba294e, type: 3} + - target: {fileID: 599907153232206429, guid: 6736c1870dd3e95478501ee9f3ba294e, + type: 3} propertyPath: m_RootBone value: objectReference: {fileID: 3335427089582007770} - - target: {fileID: 599907153232206429, guid: 6736c1870dd3e95478501ee9f3ba294e, type: 3} + - target: {fileID: 599907153232206429, guid: 6736c1870dd3e95478501ee9f3ba294e, + type: 3} propertyPath: m_Bones.Array.data[0] value: objectReference: {fileID: 7738679323201646151} - - target: {fileID: 599907153232206429, guid: 6736c1870dd3e95478501ee9f3ba294e, type: 3} + - target: {fileID: 599907153232206429, guid: 6736c1870dd3e95478501ee9f3ba294e, + type: 3} propertyPath: m_Bones.Array.data[1] value: objectReference: {fileID: 8498953204661844621} - - target: {fileID: 599907153232206429, guid: 6736c1870dd3e95478501ee9f3ba294e, type: 3} + - target: {fileID: 599907153232206429, guid: 6736c1870dd3e95478501ee9f3ba294e, + type: 3} propertyPath: m_Bones.Array.data[2] value: objectReference: {fileID: 1323154135719462797} - - target: {fileID: 599907153232206429, guid: 6736c1870dd3e95478501ee9f3ba294e, type: 3} + - target: {fileID: 599907153232206429, guid: 6736c1870dd3e95478501ee9f3ba294e, + type: 3} propertyPath: m_Bones.Array.data[3] value: objectReference: {fileID: 587759327283076790} - - target: {fileID: 599907153232206429, guid: 6736c1870dd3e95478501ee9f3ba294e, type: 3} + - target: {fileID: 599907153232206429, guid: 6736c1870dd3e95478501ee9f3ba294e, + type: 3} propertyPath: m_Bones.Array.data[4] value: objectReference: {fileID: 5606035577626729233} - - target: {fileID: 599907153232206429, guid: 6736c1870dd3e95478501ee9f3ba294e, type: 3} + - target: {fileID: 599907153232206429, guid: 6736c1870dd3e95478501ee9f3ba294e, + type: 3} propertyPath: m_Bones.Array.data[5] value: objectReference: {fileID: 7527788754810788122} - - target: {fileID: 599907153232206429, guid: 6736c1870dd3e95478501ee9f3ba294e, type: 3} + - target: {fileID: 599907153232206429, guid: 6736c1870dd3e95478501ee9f3ba294e, + type: 3} propertyPath: m_Bones.Array.data[6] value: objectReference: {fileID: 8247809510486077625} - - target: {fileID: 599907153232206429, guid: 6736c1870dd3e95478501ee9f3ba294e, type: 3} + - target: {fileID: 599907153232206429, guid: 6736c1870dd3e95478501ee9f3ba294e, + type: 3} propertyPath: m_Bones.Array.data[7] value: objectReference: {fileID: 1055663782864180258} - - target: {fileID: 599907153232206429, guid: 6736c1870dd3e95478501ee9f3ba294e, type: 3} + - target: {fileID: 599907153232206429, guid: 6736c1870dd3e95478501ee9f3ba294e, + type: 3} propertyPath: m_Bones.Array.data[8] value: objectReference: {fileID: 3335427089582007770} - - target: {fileID: 599907153232206429, guid: 6736c1870dd3e95478501ee9f3ba294e, type: 3} + - target: {fileID: 599907153232206429, guid: 6736c1870dd3e95478501ee9f3ba294e, + type: 3} propertyPath: m_Bones.Array.data[9] value: objectReference: {fileID: 432724711772772565} - - target: {fileID: 599907153232206429, guid: 6736c1870dd3e95478501ee9f3ba294e, type: 3} + - target: {fileID: 599907153232206429, guid: 6736c1870dd3e95478501ee9f3ba294e, + type: 3} propertyPath: m_Bones.Array.data[10] value: objectReference: {fileID: 600274334256031679} - - target: {fileID: 599907153232206429, guid: 6736c1870dd3e95478501ee9f3ba294e, type: 3} + - target: {fileID: 599907153232206429, guid: 6736c1870dd3e95478501ee9f3ba294e, + type: 3} propertyPath: m_Bones.Array.data[11] value: objectReference: {fileID: 7079448961355668684} - - target: {fileID: 8740140211590691880, guid: 6736c1870dd3e95478501ee9f3ba294e, type: 3} + - target: {fileID: 8740140211590691880, guid: 6736c1870dd3e95478501ee9f3ba294e, + type: 3} propertyPath: m_RootOrder value: 10 objectReference: {fileID: 0} - - target: {fileID: 8740140211590691880, guid: 6736c1870dd3e95478501ee9f3ba294e, type: 3} + - target: {fileID: 8740140211590691880, guid: 6736c1870dd3e95478501ee9f3ba294e, + type: 3} propertyPath: m_LocalPosition.x value: 6.34 objectReference: {fileID: 0} - - target: {fileID: 8740140211590691880, guid: 6736c1870dd3e95478501ee9f3ba294e, type: 3} + - target: {fileID: 8740140211590691880, guid: 6736c1870dd3e95478501ee9f3ba294e, + type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 8740140211590691880, guid: 6736c1870dd3e95478501ee9f3ba294e, type: 3} + - target: {fileID: 8740140211590691880, guid: 6736c1870dd3e95478501ee9f3ba294e, + type: 3} propertyPath: m_LocalPosition.z value: -1.35 objectReference: {fileID: 0} - - target: {fileID: 8740140211590691880, guid: 6736c1870dd3e95478501ee9f3ba294e, type: 3} + - target: {fileID: 8740140211590691880, guid: 6736c1870dd3e95478501ee9f3ba294e, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 8740140211590691880, guid: 6736c1870dd3e95478501ee9f3ba294e, type: 3} + - target: {fileID: 8740140211590691880, guid: 6736c1870dd3e95478501ee9f3ba294e, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 8740140211590691880, guid: 6736c1870dd3e95478501ee9f3ba294e, type: 3} + - target: {fileID: 8740140211590691880, guid: 6736c1870dd3e95478501ee9f3ba294e, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 8740140211590691880, guid: 6736c1870dd3e95478501ee9f3ba294e, type: 3} + - target: {fileID: 8740140211590691880, guid: 6736c1870dd3e95478501ee9f3ba294e, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 8740140211590691880, guid: 6736c1870dd3e95478501ee9f3ba294e, type: 3} + - target: {fileID: 8740140211590691880, guid: 6736c1870dd3e95478501ee9f3ba294e, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 8740140211590691880, guid: 6736c1870dd3e95478501ee9f3ba294e, type: 3} + - target: {fileID: 8740140211590691880, guid: 6736c1870dd3e95478501ee9f3ba294e, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 8740140211590691880, guid: 6736c1870dd3e95478501ee9f3ba294e, type: 3} + - target: {fileID: 8740140211590691880, guid: 6736c1870dd3e95478501ee9f3ba294e, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 8913447336708360286, guid: 6736c1870dd3e95478501ee9f3ba294e, type: 3} + - target: {fileID: 8913447336708360286, guid: 6736c1870dd3e95478501ee9f3ba294e, + type: 3} propertyPath: m_Name value: Rogue_Torso_Girl objectReference: {fileID: 0} - - target: {fileID: 8913447336708360286, guid: 6736c1870dd3e95478501ee9f3ba294e, type: 3} + - target: {fileID: 8913447336708360286, guid: 6736c1870dd3e95478501ee9f3ba294e, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -3987,12 +4132,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 6736c1870dd3e95478501ee9f3ba294e, type: 3} --- !u!4 &9017672052453996497 stripped Transform: - m_CorrespondingSourceObject: {fileID: 8740140211590691880, guid: 6736c1870dd3e95478501ee9f3ba294e, type: 3} + m_CorrespondingSourceObject: {fileID: 8740140211590691880, guid: 6736c1870dd3e95478501ee9f3ba294e, + type: 3} m_PrefabInstance: {fileID: 319196760407051257} m_PrefabAsset: {fileID: 0} --- !u!1 &9213501599524307879 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 8913447336708360286, guid: 6736c1870dd3e95478501ee9f3ba294e, type: 3} + m_CorrespondingSourceObject: {fileID: 8913447336708360286, guid: 6736c1870dd3e95478501ee9f3ba294e, + type: 3} m_PrefabInstance: {fileID: 319196760407051257} m_PrefabAsset: {fileID: 0} --- !u!1001 &413242213926702227 @@ -4002,55 +4149,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 600274334256031679} m_Modifications: - - target: {fileID: 4605464913980944296, guid: 16e18be1966134d449090777b5a7146f, type: 3} + - target: {fileID: 4605464913980944296, guid: 16e18be1966134d449090777b5a7146f, + type: 3} propertyPath: m_RootOrder value: 3 objectReference: {fileID: 0} - - target: {fileID: 4605464913980944296, guid: 16e18be1966134d449090777b5a7146f, type: 3} + - target: {fileID: 4605464913980944296, guid: 16e18be1966134d449090777b5a7146f, + type: 3} propertyPath: m_LocalPosition.x value: 163.42566 objectReference: {fileID: 0} - - target: {fileID: 4605464913980944296, guid: 16e18be1966134d449090777b5a7146f, type: 3} + - target: {fileID: 4605464913980944296, guid: 16e18be1966134d449090777b5a7146f, + type: 3} propertyPath: m_LocalPosition.y value: 103.55921 objectReference: {fileID: 0} - - target: {fileID: 4605464913980944296, guid: 16e18be1966134d449090777b5a7146f, type: 3} + - target: {fileID: 4605464913980944296, guid: 16e18be1966134d449090777b5a7146f, + type: 3} propertyPath: m_LocalPosition.z value: -120.06873 objectReference: {fileID: 0} - - target: {fileID: 4605464913980944296, guid: 16e18be1966134d449090777b5a7146f, type: 3} + - target: {fileID: 4605464913980944296, guid: 16e18be1966134d449090777b5a7146f, + type: 3} propertyPath: m_LocalRotation.w value: -6.123234e-17 objectReference: {fileID: 0} - - target: {fileID: 4605464913980944296, guid: 16e18be1966134d449090777b5a7146f, type: 3} + - target: {fileID: 4605464913980944296, guid: 16e18be1966134d449090777b5a7146f, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 4605464913980944296, guid: 16e18be1966134d449090777b5a7146f, type: 3} + - target: {fileID: 4605464913980944296, guid: 16e18be1966134d449090777b5a7146f, + type: 3} propertyPath: m_LocalRotation.y value: -1 objectReference: {fileID: 0} - - target: {fileID: 4605464913980944296, guid: 16e18be1966134d449090777b5a7146f, type: 3} + - target: {fileID: 4605464913980944296, guid: 16e18be1966134d449090777b5a7146f, + type: 3} propertyPath: m_LocalRotation.z value: 6.123234e-17 objectReference: {fileID: 0} - - target: {fileID: 4605464913980944296, guid: 16e18be1966134d449090777b5a7146f, type: 3} + - target: {fileID: 4605464913980944296, guid: 16e18be1966134d449090777b5a7146f, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4605464913980944296, guid: 16e18be1966134d449090777b5a7146f, type: 3} + - target: {fileID: 4605464913980944296, guid: 16e18be1966134d449090777b5a7146f, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4605464913980944296, guid: 16e18be1966134d449090777b5a7146f, type: 3} + - target: {fileID: 4605464913980944296, guid: 16e18be1966134d449090777b5a7146f, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4605464913980944299, guid: 16e18be1966134d449090777b5a7146f, type: 3} + - target: {fileID: 4605464913980944299, guid: 16e18be1966134d449090777b5a7146f, + type: 3} propertyPath: m_Name value: Empty_Gear_RS_Slot_Archer_Girl objectReference: {fileID: 0} - - target: {fileID: 4605464913980944299, guid: 16e18be1966134d449090777b5a7146f, type: 3} + - target: {fileID: 4605464913980944299, guid: 16e18be1966134d449090777b5a7146f, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -4058,12 +4218,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 16e18be1966134d449090777b5a7146f, type: 3} --- !u!1 &4203481789317505848 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 4605464913980944299, guid: 16e18be1966134d449090777b5a7146f, type: 3} + m_CorrespondingSourceObject: {fileID: 4605464913980944299, guid: 16e18be1966134d449090777b5a7146f, + type: 3} m_PrefabInstance: {fileID: 413242213926702227} m_PrefabAsset: {fileID: 0} --- !u!4 &4203481789317505851 stripped Transform: - m_CorrespondingSourceObject: {fileID: 4605464913980944296, guid: 16e18be1966134d449090777b5a7146f, type: 3} + m_CorrespondingSourceObject: {fileID: 4605464913980944296, guid: 16e18be1966134d449090777b5a7146f, + type: 3} m_PrefabInstance: {fileID: 413242213926702227} m_PrefabAsset: {fileID: 0} --- !u!1001 &524969750215604698 @@ -4073,55 +4235,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 1313590801738418481} m_Modifications: - - target: {fileID: 3402651816915360572, guid: d150bbb7c8be9e547b64254792715f9d, type: 3} + - target: {fileID: 3402651816915360572, guid: d150bbb7c8be9e547b64254792715f9d, + type: 3} propertyPath: m_Name value: Mage_Weapon_Girl objectReference: {fileID: 0} - - target: {fileID: 3402651816915360572, guid: d150bbb7c8be9e547b64254792715f9d, type: 3} + - target: {fileID: 3402651816915360572, guid: d150bbb7c8be9e547b64254792715f9d, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - - target: {fileID: 4115030874830168185, guid: d150bbb7c8be9e547b64254792715f9d, type: 3} + - target: {fileID: 4115030874830168185, guid: d150bbb7c8be9e547b64254792715f9d, + type: 3} propertyPath: m_RootOrder value: 11 objectReference: {fileID: 0} - - target: {fileID: 4115030874830168185, guid: d150bbb7c8be9e547b64254792715f9d, type: 3} + - target: {fileID: 4115030874830168185, guid: d150bbb7c8be9e547b64254792715f9d, + type: 3} propertyPath: m_LocalPosition.x value: 12.885166 objectReference: {fileID: 0} - - target: {fileID: 4115030874830168185, guid: d150bbb7c8be9e547b64254792715f9d, type: 3} + - target: {fileID: 4115030874830168185, guid: d150bbb7c8be9e547b64254792715f9d, + type: 3} propertyPath: m_LocalPosition.y value: -4.0088196 objectReference: {fileID: 0} - - target: {fileID: 4115030874830168185, guid: d150bbb7c8be9e547b64254792715f9d, type: 3} + - target: {fileID: 4115030874830168185, guid: d150bbb7c8be9e547b64254792715f9d, + type: 3} propertyPath: m_LocalPosition.z value: 22.168991 objectReference: {fileID: 0} - - target: {fileID: 4115030874830168185, guid: d150bbb7c8be9e547b64254792715f9d, type: 3} + - target: {fileID: 4115030874830168185, guid: d150bbb7c8be9e547b64254792715f9d, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 4115030874830168185, guid: d150bbb7c8be9e547b64254792715f9d, type: 3} + - target: {fileID: 4115030874830168185, guid: d150bbb7c8be9e547b64254792715f9d, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4115030874830168185, guid: d150bbb7c8be9e547b64254792715f9d, type: 3} + - target: {fileID: 4115030874830168185, guid: d150bbb7c8be9e547b64254792715f9d, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 4115030874830168185, guid: d150bbb7c8be9e547b64254792715f9d, type: 3} + - target: {fileID: 4115030874830168185, guid: d150bbb7c8be9e547b64254792715f9d, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 4115030874830168185, guid: d150bbb7c8be9e547b64254792715f9d, type: 3} + - target: {fileID: 4115030874830168185, guid: d150bbb7c8be9e547b64254792715f9d, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4115030874830168185, guid: d150bbb7c8be9e547b64254792715f9d, type: 3} + - target: {fileID: 4115030874830168185, guid: d150bbb7c8be9e547b64254792715f9d, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4115030874830168185, guid: d150bbb7c8be9e547b64254792715f9d, type: 3} + - target: {fileID: 4115030874830168185, guid: d150bbb7c8be9e547b64254792715f9d, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} @@ -4129,12 +4304,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: d150bbb7c8be9e547b64254792715f9d, type: 3} --- !u!1 &2914309413260944102 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 3402651816915360572, guid: d150bbb7c8be9e547b64254792715f9d, type: 3} + m_CorrespondingSourceObject: {fileID: 3402651816915360572, guid: d150bbb7c8be9e547b64254792715f9d, + type: 3} m_PrefabInstance: {fileID: 524969750215604698} m_PrefabAsset: {fileID: 0} --- !u!4 &4490818852290648483 stripped Transform: - m_CorrespondingSourceObject: {fileID: 4115030874830168185, guid: d150bbb7c8be9e547b64254792715f9d, type: 3} + m_CorrespondingSourceObject: {fileID: 4115030874830168185, guid: d150bbb7c8be9e547b64254792715f9d, + type: 3} m_PrefabInstance: {fileID: 524969750215604698} m_PrefabAsset: {fileID: 0} --- !u!1001 &553046688190965221 @@ -4144,55 +4321,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 3241768821857961484} m_Modifications: - - target: {fileID: 3913667562099702966, guid: fc9e7bbe884b0b041934fa7f4e52d837, type: 3} + - target: {fileID: 3913667562099702966, guid: fc9e7bbe884b0b041934fa7f4e52d837, + type: 3} propertyPath: m_Name value: Rogue_Ears_Girl objectReference: {fileID: 0} - - target: {fileID: 3913667562099702966, guid: fc9e7bbe884b0b041934fa7f4e52d837, type: 3} + - target: {fileID: 3913667562099702966, guid: fc9e7bbe884b0b041934fa7f4e52d837, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - - target: {fileID: 7319431539464016495, guid: fc9e7bbe884b0b041934fa7f4e52d837, type: 3} + - target: {fileID: 7319431539464016495, guid: fc9e7bbe884b0b041934fa7f4e52d837, + type: 3} propertyPath: m_RootOrder value: 0 objectReference: {fileID: 0} - - target: {fileID: 7319431539464016495, guid: fc9e7bbe884b0b041934fa7f4e52d837, type: 3} + - target: {fileID: 7319431539464016495, guid: fc9e7bbe884b0b041934fa7f4e52d837, + type: 3} propertyPath: m_LocalPosition.x value: -0.00000023841858 objectReference: {fileID: 0} - - target: {fileID: 7319431539464016495, guid: fc9e7bbe884b0b041934fa7f4e52d837, type: 3} + - target: {fileID: 7319431539464016495, guid: fc9e7bbe884b0b041934fa7f4e52d837, + type: 3} propertyPath: m_LocalPosition.y value: -8.682825 objectReference: {fileID: 0} - - target: {fileID: 7319431539464016495, guid: fc9e7bbe884b0b041934fa7f4e52d837, type: 3} + - target: {fileID: 7319431539464016495, guid: fc9e7bbe884b0b041934fa7f4e52d837, + type: 3} propertyPath: m_LocalPosition.z value: -7.228368 objectReference: {fileID: 0} - - target: {fileID: 7319431539464016495, guid: fc9e7bbe884b0b041934fa7f4e52d837, type: 3} + - target: {fileID: 7319431539464016495, guid: fc9e7bbe884b0b041934fa7f4e52d837, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 7319431539464016495, guid: fc9e7bbe884b0b041934fa7f4e52d837, type: 3} + - target: {fileID: 7319431539464016495, guid: fc9e7bbe884b0b041934fa7f4e52d837, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 7319431539464016495, guid: fc9e7bbe884b0b041934fa7f4e52d837, type: 3} + - target: {fileID: 7319431539464016495, guid: fc9e7bbe884b0b041934fa7f4e52d837, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 7319431539464016495, guid: fc9e7bbe884b0b041934fa7f4e52d837, type: 3} + - target: {fileID: 7319431539464016495, guid: fc9e7bbe884b0b041934fa7f4e52d837, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 7319431539464016495, guid: fc9e7bbe884b0b041934fa7f4e52d837, type: 3} + - target: {fileID: 7319431539464016495, guid: fc9e7bbe884b0b041934fa7f4e52d837, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 7319431539464016495, guid: fc9e7bbe884b0b041934fa7f4e52d837, type: 3} + - target: {fileID: 7319431539464016495, guid: fc9e7bbe884b0b041934fa7f4e52d837, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 7319431539464016495, guid: fc9e7bbe884b0b041934fa7f4e52d837, type: 3} + - target: {fileID: 7319431539464016495, guid: fc9e7bbe884b0b041934fa7f4e52d837, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} @@ -4200,12 +4390,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: fc9e7bbe884b0b041934fa7f4e52d837, type: 3} --- !u!1 &3602020854034061651 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 3913667562099702966, guid: fc9e7bbe884b0b041934fa7f4e52d837, type: 3} + m_CorrespondingSourceObject: {fileID: 3913667562099702966, guid: fc9e7bbe884b0b041934fa7f4e52d837, + type: 3} m_PrefabInstance: {fileID: 553046688190965221} m_PrefabAsset: {fileID: 0} --- !u!4 &7079387296350287754 stripped Transform: - m_CorrespondingSourceObject: {fileID: 7319431539464016495, guid: fc9e7bbe884b0b041934fa7f4e52d837, type: 3} + m_CorrespondingSourceObject: {fileID: 7319431539464016495, guid: fc9e7bbe884b0b041934fa7f4e52d837, + type: 3} m_PrefabInstance: {fileID: 553046688190965221} m_PrefabAsset: {fileID: 0} --- !u!1001 &583285992859927225 @@ -4215,55 +4407,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 3241768821857961484} m_Modifications: - - target: {fileID: 1697190417846331861, guid: c97569ffa17e804409a4e46db1ec123e, type: 3} + - target: {fileID: 1697190417846331861, guid: c97569ffa17e804409a4e46db1ec123e, + type: 3} propertyPath: m_RootOrder value: 4 objectReference: {fileID: 0} - - target: {fileID: 1697190417846331861, guid: c97569ffa17e804409a4e46db1ec123e, type: 3} + - target: {fileID: 1697190417846331861, guid: c97569ffa17e804409a4e46db1ec123e, + type: 3} propertyPath: m_LocalPosition.x value: 0.00000071525574 objectReference: {fileID: 0} - - target: {fileID: 1697190417846331861, guid: c97569ffa17e804409a4e46db1ec123e, type: 3} + - target: {fileID: 1697190417846331861, guid: c97569ffa17e804409a4e46db1ec123e, + type: 3} propertyPath: m_LocalPosition.y value: 148.35704 objectReference: {fileID: 0} - - target: {fileID: 1697190417846331861, guid: c97569ffa17e804409a4e46db1ec123e, type: 3} + - target: {fileID: 1697190417846331861, guid: c97569ffa17e804409a4e46db1ec123e, + type: 3} propertyPath: m_LocalPosition.z value: 9.336105 objectReference: {fileID: 0} - - target: {fileID: 1697190417846331861, guid: c97569ffa17e804409a4e46db1ec123e, type: 3} + - target: {fileID: 1697190417846331861, guid: c97569ffa17e804409a4e46db1ec123e, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 1697190417846331861, guid: c97569ffa17e804409a4e46db1ec123e, type: 3} + - target: {fileID: 1697190417846331861, guid: c97569ffa17e804409a4e46db1ec123e, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 1697190417846331861, guid: c97569ffa17e804409a4e46db1ec123e, type: 3} + - target: {fileID: 1697190417846331861, guid: c97569ffa17e804409a4e46db1ec123e, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 1697190417846331861, guid: c97569ffa17e804409a4e46db1ec123e, type: 3} + - target: {fileID: 1697190417846331861, guid: c97569ffa17e804409a4e46db1ec123e, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 1697190417846331861, guid: c97569ffa17e804409a4e46db1ec123e, type: 3} + - target: {fileID: 1697190417846331861, guid: c97569ffa17e804409a4e46db1ec123e, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 1697190417846331861, guid: c97569ffa17e804409a4e46db1ec123e, type: 3} + - target: {fileID: 1697190417846331861, guid: c97569ffa17e804409a4e46db1ec123e, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 1697190417846331861, guid: c97569ffa17e804409a4e46db1ec123e, type: 3} + - target: {fileID: 1697190417846331861, guid: c97569ffa17e804409a4e46db1ec123e, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 5295355681455843751, guid: c97569ffa17e804409a4e46db1ec123e, type: 3} + - target: {fileID: 5295355681455843751, guid: c97569ffa17e804409a4e46db1ec123e, + type: 3} propertyPath: m_Name value: Rogue_Mouth_Girl objectReference: {fileID: 0} - - target: {fileID: 5295355681455843751, guid: c97569ffa17e804409a4e46db1ec123e, type: 3} + - target: {fileID: 5295355681455843751, guid: c97569ffa17e804409a4e46db1ec123e, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -4271,12 +4476,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: c97569ffa17e804409a4e46db1ec123e, type: 3} --- !u!1 &4712135659507493662 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 5295355681455843751, guid: c97569ffa17e804409a4e46db1ec123e, type: 3} + m_CorrespondingSourceObject: {fileID: 5295355681455843751, guid: c97569ffa17e804409a4e46db1ec123e, + type: 3} m_PrefabInstance: {fileID: 583285992859927225} m_PrefabAsset: {fileID: 0} --- !u!4 &2275899134039681900 stripped Transform: - m_CorrespondingSourceObject: {fileID: 1697190417846331861, guid: c97569ffa17e804409a4e46db1ec123e, type: 3} + m_CorrespondingSourceObject: {fileID: 1697190417846331861, guid: c97569ffa17e804409a4e46db1ec123e, + type: 3} m_PrefabInstance: {fileID: 583285992859927225} m_PrefabAsset: {fileID: 0} --- !u!1001 &647046037485598876 @@ -4286,55 +4493,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 1313590801738418481} m_Modifications: - - target: {fileID: 1671131016001457994, guid: 466962df4dff02741afcb80f011cd120, type: 3} + - target: {fileID: 1671131016001457994, guid: 466962df4dff02741afcb80f011cd120, + type: 3} propertyPath: m_Name value: Mage_Hand_Rt_Girl objectReference: {fileID: 0} - - target: {fileID: 1671131016001457994, guid: 466962df4dff02741afcb80f011cd120, type: 3} + - target: {fileID: 1671131016001457994, guid: 466962df4dff02741afcb80f011cd120, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - - target: {fileID: 5120114671387204663, guid: 466962df4dff02741afcb80f011cd120, type: 3} + - target: {fileID: 5120114671387204663, guid: 466962df4dff02741afcb80f011cd120, + type: 3} propertyPath: m_RootOrder value: 9 objectReference: {fileID: 0} - - target: {fileID: 5120114671387204663, guid: 466962df4dff02741afcb80f011cd120, type: 3} + - target: {fileID: 5120114671387204663, guid: 466962df4dff02741afcb80f011cd120, + type: 3} propertyPath: m_LocalPosition.x value: 12.516148 objectReference: {fileID: 0} - - target: {fileID: 5120114671387204663, guid: 466962df4dff02741afcb80f011cd120, type: 3} + - target: {fileID: 5120114671387204663, guid: 466962df4dff02741afcb80f011cd120, + type: 3} propertyPath: m_LocalPosition.y value: -3.1288605 objectReference: {fileID: 0} - - target: {fileID: 5120114671387204663, guid: 466962df4dff02741afcb80f011cd120, type: 3} + - target: {fileID: 5120114671387204663, guid: 466962df4dff02741afcb80f011cd120, + type: 3} propertyPath: m_LocalPosition.z value: -1.3515625 objectReference: {fileID: 0} - - target: {fileID: 5120114671387204663, guid: 466962df4dff02741afcb80f011cd120, type: 3} + - target: {fileID: 5120114671387204663, guid: 466962df4dff02741afcb80f011cd120, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 5120114671387204663, guid: 466962df4dff02741afcb80f011cd120, type: 3} + - target: {fileID: 5120114671387204663, guid: 466962df4dff02741afcb80f011cd120, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 5120114671387204663, guid: 466962df4dff02741afcb80f011cd120, type: 3} + - target: {fileID: 5120114671387204663, guid: 466962df4dff02741afcb80f011cd120, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 5120114671387204663, guid: 466962df4dff02741afcb80f011cd120, type: 3} + - target: {fileID: 5120114671387204663, guid: 466962df4dff02741afcb80f011cd120, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 5120114671387204663, guid: 466962df4dff02741afcb80f011cd120, type: 3} + - target: {fileID: 5120114671387204663, guid: 466962df4dff02741afcb80f011cd120, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 5120114671387204663, guid: 466962df4dff02741afcb80f011cd120, type: 3} + - target: {fileID: 5120114671387204663, guid: 466962df4dff02741afcb80f011cd120, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 5120114671387204663, guid: 466962df4dff02741afcb80f011cd120, type: 3} + - target: {fileID: 5120114671387204663, guid: 466962df4dff02741afcb80f011cd120, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} @@ -4342,12 +4562,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 466962df4dff02741afcb80f011cd120, type: 3} --- !u!1 &2291145010306922454 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 1671131016001457994, guid: 466962df4dff02741afcb80f011cd120, type: 3} + m_CorrespondingSourceObject: {fileID: 1671131016001457994, guid: 466962df4dff02741afcb80f011cd120, + type: 3} m_PrefabInstance: {fileID: 647046037485598876} m_PrefabAsset: {fileID: 0} --- !u!4 &5761381400845214891 stripped Transform: - m_CorrespondingSourceObject: {fileID: 5120114671387204663, guid: 466962df4dff02741afcb80f011cd120, type: 3} + m_CorrespondingSourceObject: {fileID: 5120114671387204663, guid: 466962df4dff02741afcb80f011cd120, + type: 3} m_PrefabInstance: {fileID: 647046037485598876} m_PrefabAsset: {fileID: 0} --- !u!1001 &683990144928135082 @@ -4357,107 +4579,133 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4076098699203836966} m_Modifications: - - target: {fileID: 1216477890596159439, guid: 0269d0030cf2d374e8a645ffabbcd808, type: 3} + - target: {fileID: 1216477890596159439, guid: 0269d0030cf2d374e8a645ffabbcd808, + type: 3} propertyPath: m_RootOrder value: 8 objectReference: {fileID: 0} - - target: {fileID: 1216477890596159439, guid: 0269d0030cf2d374e8a645ffabbcd808, type: 3} + - target: {fileID: 1216477890596159439, guid: 0269d0030cf2d374e8a645ffabbcd808, + type: 3} propertyPath: m_LocalPosition.x value: 6.34 objectReference: {fileID: 0} - - target: {fileID: 1216477890596159439, guid: 0269d0030cf2d374e8a645ffabbcd808, type: 3} + - target: {fileID: 1216477890596159439, guid: 0269d0030cf2d374e8a645ffabbcd808, + type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 1216477890596159439, guid: 0269d0030cf2d374e8a645ffabbcd808, type: 3} + - target: {fileID: 1216477890596159439, guid: 0269d0030cf2d374e8a645ffabbcd808, + type: 3} propertyPath: m_LocalPosition.z value: -1.35 objectReference: {fileID: 0} - - target: {fileID: 1216477890596159439, guid: 0269d0030cf2d374e8a645ffabbcd808, type: 3} + - target: {fileID: 1216477890596159439, guid: 0269d0030cf2d374e8a645ffabbcd808, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 1216477890596159439, guid: 0269d0030cf2d374e8a645ffabbcd808, type: 3} + - target: {fileID: 1216477890596159439, guid: 0269d0030cf2d374e8a645ffabbcd808, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 1216477890596159439, guid: 0269d0030cf2d374e8a645ffabbcd808, type: 3} + - target: {fileID: 1216477890596159439, guid: 0269d0030cf2d374e8a645ffabbcd808, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 1216477890596159439, guid: 0269d0030cf2d374e8a645ffabbcd808, type: 3} + - target: {fileID: 1216477890596159439, guid: 0269d0030cf2d374e8a645ffabbcd808, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 1216477890596159439, guid: 0269d0030cf2d374e8a645ffabbcd808, type: 3} + - target: {fileID: 1216477890596159439, guid: 0269d0030cf2d374e8a645ffabbcd808, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 1216477890596159439, guid: 0269d0030cf2d374e8a645ffabbcd808, type: 3} + - target: {fileID: 1216477890596159439, guid: 0269d0030cf2d374e8a645ffabbcd808, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 1216477890596159439, guid: 0269d0030cf2d374e8a645ffabbcd808, type: 3} + - target: {fileID: 1216477890596159439, guid: 0269d0030cf2d374e8a645ffabbcd808, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4592677145569246425, guid: 0269d0030cf2d374e8a645ffabbcd808, type: 3} + - target: {fileID: 4592677145569246425, guid: 0269d0030cf2d374e8a645ffabbcd808, + type: 3} propertyPath: m_Name value: Mage_Torso_Girl objectReference: {fileID: 0} - - target: {fileID: 4592677145569246425, guid: 0269d0030cf2d374e8a645ffabbcd808, type: 3} + - target: {fileID: 4592677145569246425, guid: 0269d0030cf2d374e8a645ffabbcd808, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - - target: {fileID: 7765515337484600618, guid: 0269d0030cf2d374e8a645ffabbcd808, type: 3} + - target: {fileID: 7765515337484600618, guid: 0269d0030cf2d374e8a645ffabbcd808, + type: 3} propertyPath: m_RootBone value: objectReference: {fileID: 3335427089582007770} - - target: {fileID: 7765515337484600618, guid: 0269d0030cf2d374e8a645ffabbcd808, type: 3} + - target: {fileID: 7765515337484600618, guid: 0269d0030cf2d374e8a645ffabbcd808, + type: 3} propertyPath: m_Bones.Array.data[0] value: objectReference: {fileID: 3335427089582007770} - - target: {fileID: 7765515337484600618, guid: 0269d0030cf2d374e8a645ffabbcd808, type: 3} + - target: {fileID: 7765515337484600618, guid: 0269d0030cf2d374e8a645ffabbcd808, + type: 3} propertyPath: m_Bones.Array.data[1] value: objectReference: {fileID: 8498953204661844621} - - target: {fileID: 7765515337484600618, guid: 0269d0030cf2d374e8a645ffabbcd808, type: 3} + - target: {fileID: 7765515337484600618, guid: 0269d0030cf2d374e8a645ffabbcd808, + type: 3} propertyPath: m_Bones.Array.data[2] value: objectReference: {fileID: 1323154135719462797} - - target: {fileID: 7765515337484600618, guid: 0269d0030cf2d374e8a645ffabbcd808, type: 3} + - target: {fileID: 7765515337484600618, guid: 0269d0030cf2d374e8a645ffabbcd808, + type: 3} propertyPath: m_Bones.Array.data[3] value: objectReference: {fileID: 587759327283076790} - - target: {fileID: 7765515337484600618, guid: 0269d0030cf2d374e8a645ffabbcd808, type: 3} + - target: {fileID: 7765515337484600618, guid: 0269d0030cf2d374e8a645ffabbcd808, + type: 3} propertyPath: m_Bones.Array.data[4] value: objectReference: {fileID: 7738679323201646151} - - target: {fileID: 7765515337484600618, guid: 0269d0030cf2d374e8a645ffabbcd808, type: 3} + - target: {fileID: 7765515337484600618, guid: 0269d0030cf2d374e8a645ffabbcd808, + type: 3} propertyPath: m_Bones.Array.data[5] value: objectReference: {fileID: 7527788754810788122} - - target: {fileID: 7765515337484600618, guid: 0269d0030cf2d374e8a645ffabbcd808, type: 3} + - target: {fileID: 7765515337484600618, guid: 0269d0030cf2d374e8a645ffabbcd808, + type: 3} propertyPath: m_Bones.Array.data[6] value: objectReference: {fileID: 8247809510486077625} - - target: {fileID: 7765515337484600618, guid: 0269d0030cf2d374e8a645ffabbcd808, type: 3} + - target: {fileID: 7765515337484600618, guid: 0269d0030cf2d374e8a645ffabbcd808, + type: 3} propertyPath: m_Bones.Array.data[7] value: objectReference: {fileID: 1055663782864180258} - - target: {fileID: 7765515337484600618, guid: 0269d0030cf2d374e8a645ffabbcd808, type: 3} + - target: {fileID: 7765515337484600618, guid: 0269d0030cf2d374e8a645ffabbcd808, + type: 3} propertyPath: m_Bones.Array.data[8] value: objectReference: {fileID: 5606035577626729233} - - target: {fileID: 7765515337484600618, guid: 0269d0030cf2d374e8a645ffabbcd808, type: 3} + - target: {fileID: 7765515337484600618, guid: 0269d0030cf2d374e8a645ffabbcd808, + type: 3} propertyPath: m_Bones.Array.data[9] value: objectReference: {fileID: 432724711772772565} - - target: {fileID: 7765515337484600618, guid: 0269d0030cf2d374e8a645ffabbcd808, type: 3} + - target: {fileID: 7765515337484600618, guid: 0269d0030cf2d374e8a645ffabbcd808, + type: 3} propertyPath: m_Bones.Array.data[10] value: objectReference: {fileID: 600274334256031679} - - target: {fileID: 7765515337484600618, guid: 0269d0030cf2d374e8a645ffabbcd808, type: 3} + - target: {fileID: 7765515337484600618, guid: 0269d0030cf2d374e8a645ffabbcd808, + type: 3} propertyPath: m_Bones.Array.data[11] value: objectReference: {fileID: 7079448961355668684} @@ -4465,12 +4713,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 0269d0030cf2d374e8a645ffabbcd808, type: 3} --- !u!1 &3945842591533796211 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 4592677145569246425, guid: 0269d0030cf2d374e8a645ffabbcd808, type: 3} + m_CorrespondingSourceObject: {fileID: 4592677145569246425, guid: 0269d0030cf2d374e8a645ffabbcd808, + type: 3} m_PrefabInstance: {fileID: 683990144928135082} m_PrefabAsset: {fileID: 0} --- !u!4 &1846415768956602469 stripped Transform: - m_CorrespondingSourceObject: {fileID: 1216477890596159439, guid: 0269d0030cf2d374e8a645ffabbcd808, type: 3} + m_CorrespondingSourceObject: {fileID: 1216477890596159439, guid: 0269d0030cf2d374e8a645ffabbcd808, + type: 3} m_PrefabInstance: {fileID: 683990144928135082} m_PrefabAsset: {fileID: 0} --- !u!1001 &774187519778230136 @@ -4480,55 +4730,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 5429000291070753441} m_Modifications: - - target: {fileID: 7263095444436225434, guid: 1729cc3a86309324b99bd80dba3a99c9, type: 3} + - target: {fileID: 7263095444436225434, guid: 1729cc3a86309324b99bd80dba3a99c9, + type: 3} propertyPath: m_RootOrder value: 1 objectReference: {fileID: 0} - - target: {fileID: 7263095444436225434, guid: 1729cc3a86309324b99bd80dba3a99c9, type: 3} + - target: {fileID: 7263095444436225434, guid: 1729cc3a86309324b99bd80dba3a99c9, + type: 3} propertyPath: m_LocalPosition.x value: -0.0000011920929 objectReference: {fileID: 0} - - target: {fileID: 7263095444436225434, guid: 1729cc3a86309324b99bd80dba3a99c9, type: 3} + - target: {fileID: 7263095444436225434, guid: 1729cc3a86309324b99bd80dba3a99c9, + type: 3} propertyPath: m_LocalPosition.y value: 148.35704 objectReference: {fileID: 0} - - target: {fileID: 7263095444436225434, guid: 1729cc3a86309324b99bd80dba3a99c9, type: 3} + - target: {fileID: 7263095444436225434, guid: 1729cc3a86309324b99bd80dba3a99c9, + type: 3} propertyPath: m_LocalPosition.z value: 9.308052 objectReference: {fileID: 0} - - target: {fileID: 7263095444436225434, guid: 1729cc3a86309324b99bd80dba3a99c9, type: 3} + - target: {fileID: 7263095444436225434, guid: 1729cc3a86309324b99bd80dba3a99c9, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 7263095444436225434, guid: 1729cc3a86309324b99bd80dba3a99c9, type: 3} + - target: {fileID: 7263095444436225434, guid: 1729cc3a86309324b99bd80dba3a99c9, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 7263095444436225434, guid: 1729cc3a86309324b99bd80dba3a99c9, type: 3} + - target: {fileID: 7263095444436225434, guid: 1729cc3a86309324b99bd80dba3a99c9, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 7263095444436225434, guid: 1729cc3a86309324b99bd80dba3a99c9, type: 3} + - target: {fileID: 7263095444436225434, guid: 1729cc3a86309324b99bd80dba3a99c9, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 7263095444436225434, guid: 1729cc3a86309324b99bd80dba3a99c9, type: 3} + - target: {fileID: 7263095444436225434, guid: 1729cc3a86309324b99bd80dba3a99c9, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 7263095444436225434, guid: 1729cc3a86309324b99bd80dba3a99c9, type: 3} + - target: {fileID: 7263095444436225434, guid: 1729cc3a86309324b99bd80dba3a99c9, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 7263095444436225434, guid: 1729cc3a86309324b99bd80dba3a99c9, type: 3} + - target: {fileID: 7263095444436225434, guid: 1729cc3a86309324b99bd80dba3a99c9, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 8886598451278635141, guid: 1729cc3a86309324b99bd80dba3a99c9, type: 3} + - target: {fileID: 8886598451278635141, guid: 1729cc3a86309324b99bd80dba3a99c9, + type: 3} propertyPath: m_Name value: Archer_Eyes_Girl objectReference: {fileID: 0} - - target: {fileID: 8886598451278635141, guid: 1729cc3a86309324b99bd80dba3a99c9, type: 3} + - target: {fileID: 8886598451278635141, guid: 1729cc3a86309324b99bd80dba3a99c9, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -4536,12 +4799,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 1729cc3a86309324b99bd80dba3a99c9, type: 3} --- !u!4 &7959485214790320866 stripped Transform: - m_CorrespondingSourceObject: {fileID: 7263095444436225434, guid: 1729cc3a86309324b99bd80dba3a99c9, type: 3} + m_CorrespondingSourceObject: {fileID: 7263095444436225434, guid: 1729cc3a86309324b99bd80dba3a99c9, + type: 3} m_PrefabInstance: {fileID: 774187519778230136} m_PrefabAsset: {fileID: 0} --- !u!1 &8209496180440428541 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 8886598451278635141, guid: 1729cc3a86309324b99bd80dba3a99c9, type: 3} + m_CorrespondingSourceObject: {fileID: 8886598451278635141, guid: 1729cc3a86309324b99bd80dba3a99c9, + type: 3} m_PrefabInstance: {fileID: 774187519778230136} m_PrefabAsset: {fileID: 0} --- !u!1001 &864361796010452425 @@ -4551,107 +4816,133 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4076098699203836966} m_Modifications: - - target: {fileID: 887262200266008504, guid: 92698cb64b2f9384890c5dc3da156532, type: 3} + - target: {fileID: 887262200266008504, guid: 92698cb64b2f9384890c5dc3da156532, + type: 3} propertyPath: m_Name value: Mage_Torso_Boy objectReference: {fileID: 0} - - target: {fileID: 887262200266008504, guid: 92698cb64b2f9384890c5dc3da156532, type: 3} + - target: {fileID: 887262200266008504, guid: 92698cb64b2f9384890c5dc3da156532, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - - target: {fileID: 4229215826600775248, guid: 92698cb64b2f9384890c5dc3da156532, type: 3} + - target: {fileID: 4229215826600775248, guid: 92698cb64b2f9384890c5dc3da156532, + type: 3} propertyPath: m_RootOrder value: 7 objectReference: {fileID: 0} - - target: {fileID: 4229215826600775248, guid: 92698cb64b2f9384890c5dc3da156532, type: 3} + - target: {fileID: 4229215826600775248, guid: 92698cb64b2f9384890c5dc3da156532, + type: 3} propertyPath: m_LocalPosition.x value: 6.34 objectReference: {fileID: 0} - - target: {fileID: 4229215826600775248, guid: 92698cb64b2f9384890c5dc3da156532, type: 3} + - target: {fileID: 4229215826600775248, guid: 92698cb64b2f9384890c5dc3da156532, + type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4229215826600775248, guid: 92698cb64b2f9384890c5dc3da156532, type: 3} + - target: {fileID: 4229215826600775248, guid: 92698cb64b2f9384890c5dc3da156532, + type: 3} propertyPath: m_LocalPosition.z value: -1.35 objectReference: {fileID: 0} - - target: {fileID: 4229215826600775248, guid: 92698cb64b2f9384890c5dc3da156532, type: 3} + - target: {fileID: 4229215826600775248, guid: 92698cb64b2f9384890c5dc3da156532, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 4229215826600775248, guid: 92698cb64b2f9384890c5dc3da156532, type: 3} + - target: {fileID: 4229215826600775248, guid: 92698cb64b2f9384890c5dc3da156532, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 4229215826600775248, guid: 92698cb64b2f9384890c5dc3da156532, type: 3} + - target: {fileID: 4229215826600775248, guid: 92698cb64b2f9384890c5dc3da156532, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 4229215826600775248, guid: 92698cb64b2f9384890c5dc3da156532, type: 3} + - target: {fileID: 4229215826600775248, guid: 92698cb64b2f9384890c5dc3da156532, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 4229215826600775248, guid: 92698cb64b2f9384890c5dc3da156532, type: 3} + - target: {fileID: 4229215826600775248, guid: 92698cb64b2f9384890c5dc3da156532, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4229215826600775248, guid: 92698cb64b2f9384890c5dc3da156532, type: 3} + - target: {fileID: 4229215826600775248, guid: 92698cb64b2f9384890c5dc3da156532, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4229215826600775248, guid: 92698cb64b2f9384890c5dc3da156532, type: 3} + - target: {fileID: 4229215826600775248, guid: 92698cb64b2f9384890c5dc3da156532, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 7696524815867791342, guid: 92698cb64b2f9384890c5dc3da156532, type: 3} + - target: {fileID: 7696524815867791342, guid: 92698cb64b2f9384890c5dc3da156532, + type: 3} propertyPath: m_RootBone value: objectReference: {fileID: 3335427089582007770} - - target: {fileID: 7696524815867791342, guid: 92698cb64b2f9384890c5dc3da156532, type: 3} + - target: {fileID: 7696524815867791342, guid: 92698cb64b2f9384890c5dc3da156532, + type: 3} propertyPath: m_Bones.Array.data[0] value: objectReference: {fileID: 3335427089582007770} - - target: {fileID: 7696524815867791342, guid: 92698cb64b2f9384890c5dc3da156532, type: 3} + - target: {fileID: 7696524815867791342, guid: 92698cb64b2f9384890c5dc3da156532, + type: 3} propertyPath: m_Bones.Array.data[1] value: objectReference: {fileID: 8498953204661844621} - - target: {fileID: 7696524815867791342, guid: 92698cb64b2f9384890c5dc3da156532, type: 3} + - target: {fileID: 7696524815867791342, guid: 92698cb64b2f9384890c5dc3da156532, + type: 3} propertyPath: m_Bones.Array.data[2] value: objectReference: {fileID: 1323154135719462797} - - target: {fileID: 7696524815867791342, guid: 92698cb64b2f9384890c5dc3da156532, type: 3} + - target: {fileID: 7696524815867791342, guid: 92698cb64b2f9384890c5dc3da156532, + type: 3} propertyPath: m_Bones.Array.data[3] value: objectReference: {fileID: 587759327283076790} - - target: {fileID: 7696524815867791342, guid: 92698cb64b2f9384890c5dc3da156532, type: 3} + - target: {fileID: 7696524815867791342, guid: 92698cb64b2f9384890c5dc3da156532, + type: 3} propertyPath: m_Bones.Array.data[4] value: objectReference: {fileID: 7738679323201646151} - - target: {fileID: 7696524815867791342, guid: 92698cb64b2f9384890c5dc3da156532, type: 3} + - target: {fileID: 7696524815867791342, guid: 92698cb64b2f9384890c5dc3da156532, + type: 3} propertyPath: m_Bones.Array.data[5] value: objectReference: {fileID: 7527788754810788122} - - target: {fileID: 7696524815867791342, guid: 92698cb64b2f9384890c5dc3da156532, type: 3} + - target: {fileID: 7696524815867791342, guid: 92698cb64b2f9384890c5dc3da156532, + type: 3} propertyPath: m_Bones.Array.data[6] value: objectReference: {fileID: 8247809510486077625} - - target: {fileID: 7696524815867791342, guid: 92698cb64b2f9384890c5dc3da156532, type: 3} + - target: {fileID: 7696524815867791342, guid: 92698cb64b2f9384890c5dc3da156532, + type: 3} propertyPath: m_Bones.Array.data[7] value: objectReference: {fileID: 1055663782864180258} - - target: {fileID: 7696524815867791342, guid: 92698cb64b2f9384890c5dc3da156532, type: 3} + - target: {fileID: 7696524815867791342, guid: 92698cb64b2f9384890c5dc3da156532, + type: 3} propertyPath: m_Bones.Array.data[8] value: objectReference: {fileID: 5606035577626729233} - - target: {fileID: 7696524815867791342, guid: 92698cb64b2f9384890c5dc3da156532, type: 3} + - target: {fileID: 7696524815867791342, guid: 92698cb64b2f9384890c5dc3da156532, + type: 3} propertyPath: m_Bones.Array.data[9] value: objectReference: {fileID: 432724711772772565} - - target: {fileID: 7696524815867791342, guid: 92698cb64b2f9384890c5dc3da156532, type: 3} + - target: {fileID: 7696524815867791342, guid: 92698cb64b2f9384890c5dc3da156532, + type: 3} propertyPath: m_Bones.Array.data[10] value: objectReference: {fileID: 600274334256031679} - - target: {fileID: 7696524815867791342, guid: 92698cb64b2f9384890c5dc3da156532, type: 3} + - target: {fileID: 7696524815867791342, guid: 92698cb64b2f9384890c5dc3da156532, + type: 3} propertyPath: m_Bones.Array.data[11] value: objectReference: {fileID: 7079448961355668684} @@ -4659,12 +4950,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 92698cb64b2f9384890c5dc3da156532, type: 3} --- !u!1 &553630752674382449 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 887262200266008504, guid: 92698cb64b2f9384890c5dc3da156532, type: 3} + m_CorrespondingSourceObject: {fileID: 887262200266008504, guid: 92698cb64b2f9384890c5dc3da156532, + type: 3} m_PrefabInstance: {fileID: 864361796010452425} m_PrefabAsset: {fileID: 0} --- !u!4 &3553310532433931161 stripped Transform: - m_CorrespondingSourceObject: {fileID: 4229215826600775248, guid: 92698cb64b2f9384890c5dc3da156532, type: 3} + m_CorrespondingSourceObject: {fileID: 4229215826600775248, guid: 92698cb64b2f9384890c5dc3da156532, + type: 3} m_PrefabInstance: {fileID: 864361796010452425} m_PrefabAsset: {fileID: 0} --- !u!1001 &907876727354884108 @@ -4674,55 +4967,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 6681451058136744116} m_Modifications: - - target: {fileID: 6651896622154746105, guid: 95b4343d0db9cfe42b11efe12f92a336, type: 3} + - target: {fileID: 6651896622154746105, guid: 95b4343d0db9cfe42b11efe12f92a336, + type: 3} propertyPath: m_RootOrder value: 0 objectReference: {fileID: 0} - - target: {fileID: 6651896622154746105, guid: 95b4343d0db9cfe42b11efe12f92a336, type: 3} + - target: {fileID: 6651896622154746105, guid: 95b4343d0db9cfe42b11efe12f92a336, + type: 3} propertyPath: m_LocalPosition.x value: -0.00000023841858 objectReference: {fileID: 0} - - target: {fileID: 6651896622154746105, guid: 95b4343d0db9cfe42b11efe12f92a336, type: 3} + - target: {fileID: 6651896622154746105, guid: 95b4343d0db9cfe42b11efe12f92a336, + type: 3} propertyPath: m_LocalPosition.y value: -8.682825 objectReference: {fileID: 0} - - target: {fileID: 6651896622154746105, guid: 95b4343d0db9cfe42b11efe12f92a336, type: 3} + - target: {fileID: 6651896622154746105, guid: 95b4343d0db9cfe42b11efe12f92a336, + type: 3} propertyPath: m_LocalPosition.z value: -7.228368 objectReference: {fileID: 0} - - target: {fileID: 6651896622154746105, guid: 95b4343d0db9cfe42b11efe12f92a336, type: 3} + - target: {fileID: 6651896622154746105, guid: 95b4343d0db9cfe42b11efe12f92a336, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 6651896622154746105, guid: 95b4343d0db9cfe42b11efe12f92a336, type: 3} + - target: {fileID: 6651896622154746105, guid: 95b4343d0db9cfe42b11efe12f92a336, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 6651896622154746105, guid: 95b4343d0db9cfe42b11efe12f92a336, type: 3} + - target: {fileID: 6651896622154746105, guid: 95b4343d0db9cfe42b11efe12f92a336, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 6651896622154746105, guid: 95b4343d0db9cfe42b11efe12f92a336, type: 3} + - target: {fileID: 6651896622154746105, guid: 95b4343d0db9cfe42b11efe12f92a336, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 6651896622154746105, guid: 95b4343d0db9cfe42b11efe12f92a336, type: 3} + - target: {fileID: 6651896622154746105, guid: 95b4343d0db9cfe42b11efe12f92a336, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 6651896622154746105, guid: 95b4343d0db9cfe42b11efe12f92a336, type: 3} + - target: {fileID: 6651896622154746105, guid: 95b4343d0db9cfe42b11efe12f92a336, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 6651896622154746105, guid: 95b4343d0db9cfe42b11efe12f92a336, type: 3} + - target: {fileID: 6651896622154746105, guid: 95b4343d0db9cfe42b11efe12f92a336, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 7827169186461520743, guid: 95b4343d0db9cfe42b11efe12f92a336, type: 3} + - target: {fileID: 7827169186461520743, guid: 95b4343d0db9cfe42b11efe12f92a336, + type: 3} propertyPath: m_Name value: Rogue_Ears_Boy objectReference: {fileID: 0} - - target: {fileID: 7827169186461520743, guid: 95b4343d0db9cfe42b11efe12f92a336, type: 3} + - target: {fileID: 7827169186461520743, guid: 95b4343d0db9cfe42b11efe12f92a336, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -4730,12 +5036,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 95b4343d0db9cfe42b11efe12f92a336, type: 3} --- !u!1 &6919461923485979499 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 7827169186461520743, guid: 95b4343d0db9cfe42b11efe12f92a336, type: 3} + m_CorrespondingSourceObject: {fileID: 7827169186461520743, guid: 95b4343d0db9cfe42b11efe12f92a336, + type: 3} m_PrefabInstance: {fileID: 907876727354884108} m_PrefabAsset: {fileID: 0} --- !u!4 &5821225425962174709 stripped Transform: - m_CorrespondingSourceObject: {fileID: 6651896622154746105, guid: 95b4343d0db9cfe42b11efe12f92a336, type: 3} + m_CorrespondingSourceObject: {fileID: 6651896622154746105, guid: 95b4343d0db9cfe42b11efe12f92a336, + type: 3} m_PrefabInstance: {fileID: 907876727354884108} m_PrefabAsset: {fileID: 0} --- !u!1001 &970359815452655840 @@ -4745,55 +5053,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 8183775978794224953} m_Modifications: - - target: {fileID: 2814902011636462628, guid: 0cf2aeda621a7674fb8caf72b7b9f656, type: 3} + - target: {fileID: 2814902011636462628, guid: 0cf2aeda621a7674fb8caf72b7b9f656, + type: 3} propertyPath: m_RootOrder value: 2 objectReference: {fileID: 0} - - target: {fileID: 2814902011636462628, guid: 0cf2aeda621a7674fb8caf72b7b9f656, type: 3} + - target: {fileID: 2814902011636462628, guid: 0cf2aeda621a7674fb8caf72b7b9f656, + type: 3} propertyPath: m_LocalPosition.x value: 0.0000014305115 objectReference: {fileID: 0} - - target: {fileID: 2814902011636462628, guid: 0cf2aeda621a7674fb8caf72b7b9f656, type: 3} + - target: {fileID: 2814902011636462628, guid: 0cf2aeda621a7674fb8caf72b7b9f656, + type: 3} propertyPath: m_LocalPosition.y value: 169.33168 objectReference: {fileID: 0} - - target: {fileID: 2814902011636462628, guid: 0cf2aeda621a7674fb8caf72b7b9f656, type: 3} + - target: {fileID: 2814902011636462628, guid: 0cf2aeda621a7674fb8caf72b7b9f656, + type: 3} propertyPath: m_LocalPosition.z value: -25.155542 objectReference: {fileID: 0} - - target: {fileID: 2814902011636462628, guid: 0cf2aeda621a7674fb8caf72b7b9f656, type: 3} + - target: {fileID: 2814902011636462628, guid: 0cf2aeda621a7674fb8caf72b7b9f656, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 2814902011636462628, guid: 0cf2aeda621a7674fb8caf72b7b9f656, type: 3} + - target: {fileID: 2814902011636462628, guid: 0cf2aeda621a7674fb8caf72b7b9f656, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2814902011636462628, guid: 0cf2aeda621a7674fb8caf72b7b9f656, type: 3} + - target: {fileID: 2814902011636462628, guid: 0cf2aeda621a7674fb8caf72b7b9f656, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 2814902011636462628, guid: 0cf2aeda621a7674fb8caf72b7b9f656, type: 3} + - target: {fileID: 2814902011636462628, guid: 0cf2aeda621a7674fb8caf72b7b9f656, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 2814902011636462628, guid: 0cf2aeda621a7674fb8caf72b7b9f656, type: 3} + - target: {fileID: 2814902011636462628, guid: 0cf2aeda621a7674fb8caf72b7b9f656, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2814902011636462628, guid: 0cf2aeda621a7674fb8caf72b7b9f656, type: 3} + - target: {fileID: 2814902011636462628, guid: 0cf2aeda621a7674fb8caf72b7b9f656, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 2814902011636462628, guid: 0cf2aeda621a7674fb8caf72b7b9f656, type: 3} + - target: {fileID: 2814902011636462628, guid: 0cf2aeda621a7674fb8caf72b7b9f656, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 8951841582444836088, guid: 0cf2aeda621a7674fb8caf72b7b9f656, type: 3} + - target: {fileID: 8951841582444836088, guid: 0cf2aeda621a7674fb8caf72b7b9f656, + type: 3} propertyPath: m_Name value: Tank_Hair_Girl objectReference: {fileID: 0} - - target: {fileID: 8951841582444836088, guid: 0cf2aeda621a7674fb8caf72b7b9f656, type: 3} + - target: {fileID: 8951841582444836088, guid: 0cf2aeda621a7674fb8caf72b7b9f656, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -4801,12 +5122,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 0cf2aeda621a7674fb8caf72b7b9f656, type: 3} --- !u!1 &8163967715354047512 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 8951841582444836088, guid: 0cf2aeda621a7674fb8caf72b7b9f656, type: 3} + m_CorrespondingSourceObject: {fileID: 8951841582444836088, guid: 0cf2aeda621a7674fb8caf72b7b9f656, + type: 3} m_PrefabInstance: {fileID: 970359815452655840} m_PrefabAsset: {fileID: 0} --- !u!4 &3055660922392622276 stripped Transform: - m_CorrespondingSourceObject: {fileID: 2814902011636462628, guid: 0cf2aeda621a7674fb8caf72b7b9f656, type: 3} + m_CorrespondingSourceObject: {fileID: 2814902011636462628, guid: 0cf2aeda621a7674fb8caf72b7b9f656, + type: 3} m_PrefabInstance: {fileID: 970359815452655840} m_PrefabAsset: {fileID: 0} --- !u!1001 &1041023215035169858 @@ -4816,55 +5139,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 600274334256031679} m_Modifications: - - target: {fileID: 2061972087593140802, guid: 5a00a605bbd4cc641812bdd66c5f930a, type: 3} + - target: {fileID: 2061972087593140802, guid: 5a00a605bbd4cc641812bdd66c5f930a, + type: 3} propertyPath: m_RootOrder value: 5 objectReference: {fileID: 0} - - target: {fileID: 2061972087593140802, guid: 5a00a605bbd4cc641812bdd66c5f930a, type: 3} + - target: {fileID: 2061972087593140802, guid: 5a00a605bbd4cc641812bdd66c5f930a, + type: 3} propertyPath: m_LocalPosition.x value: 163.42566 objectReference: {fileID: 0} - - target: {fileID: 2061972087593140802, guid: 5a00a605bbd4cc641812bdd66c5f930a, type: 3} + - target: {fileID: 2061972087593140802, guid: 5a00a605bbd4cc641812bdd66c5f930a, + type: 3} propertyPath: m_LocalPosition.y value: 103.55921 objectReference: {fileID: 0} - - target: {fileID: 2061972087593140802, guid: 5a00a605bbd4cc641812bdd66c5f930a, type: 3} + - target: {fileID: 2061972087593140802, guid: 5a00a605bbd4cc641812bdd66c5f930a, + type: 3} propertyPath: m_LocalPosition.z value: -120.06873 objectReference: {fileID: 0} - - target: {fileID: 2061972087593140802, guid: 5a00a605bbd4cc641812bdd66c5f930a, type: 3} + - target: {fileID: 2061972087593140802, guid: 5a00a605bbd4cc641812bdd66c5f930a, + type: 3} propertyPath: m_LocalRotation.w value: -6.123234e-17 objectReference: {fileID: 0} - - target: {fileID: 2061972087593140802, guid: 5a00a605bbd4cc641812bdd66c5f930a, type: 3} + - target: {fileID: 2061972087593140802, guid: 5a00a605bbd4cc641812bdd66c5f930a, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 2061972087593140802, guid: 5a00a605bbd4cc641812bdd66c5f930a, type: 3} + - target: {fileID: 2061972087593140802, guid: 5a00a605bbd4cc641812bdd66c5f930a, + type: 3} propertyPath: m_LocalRotation.y value: -1 objectReference: {fileID: 0} - - target: {fileID: 2061972087593140802, guid: 5a00a605bbd4cc641812bdd66c5f930a, type: 3} + - target: {fileID: 2061972087593140802, guid: 5a00a605bbd4cc641812bdd66c5f930a, + type: 3} propertyPath: m_LocalRotation.z value: 6.123234e-17 objectReference: {fileID: 0} - - target: {fileID: 2061972087593140802, guid: 5a00a605bbd4cc641812bdd66c5f930a, type: 3} + - target: {fileID: 2061972087593140802, guid: 5a00a605bbd4cc641812bdd66c5f930a, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2061972087593140802, guid: 5a00a605bbd4cc641812bdd66c5f930a, type: 3} + - target: {fileID: 2061972087593140802, guid: 5a00a605bbd4cc641812bdd66c5f930a, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 2061972087593140802, guid: 5a00a605bbd4cc641812bdd66c5f930a, type: 3} + - target: {fileID: 2061972087593140802, guid: 5a00a605bbd4cc641812bdd66c5f930a, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 2061972087593140803, guid: 5a00a605bbd4cc641812bdd66c5f930a, type: 3} + - target: {fileID: 2061972087593140803, guid: 5a00a605bbd4cc641812bdd66c5f930a, + type: 3} propertyPath: m_Name value: Empty_Gear_RS_Slot_Mage_Girl objectReference: {fileID: 0} - - target: {fileID: 2061972087593140803, guid: 5a00a605bbd4cc641812bdd66c5f930a, type: 3} + - target: {fileID: 2061972087593140803, guid: 5a00a605bbd4cc641812bdd66c5f930a, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -4872,12 +5208,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 5a00a605bbd4cc641812bdd66c5f930a, type: 3} --- !u!4 &1364570524081569280 stripped Transform: - m_CorrespondingSourceObject: {fileID: 2061972087593140802, guid: 5a00a605bbd4cc641812bdd66c5f930a, type: 3} + m_CorrespondingSourceObject: {fileID: 2061972087593140802, guid: 5a00a605bbd4cc641812bdd66c5f930a, + type: 3} m_PrefabInstance: {fileID: 1041023215035169858} m_PrefabAsset: {fileID: 0} --- !u!1 &1364570524081569281 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 2061972087593140803, guid: 5a00a605bbd4cc641812bdd66c5f930a, type: 3} + m_CorrespondingSourceObject: {fileID: 2061972087593140803, guid: 5a00a605bbd4cc641812bdd66c5f930a, + type: 3} m_PrefabInstance: {fileID: 1041023215035169858} m_PrefabAsset: {fileID: 0} --- !u!1001 &1407632629150619274 @@ -4887,55 +5225,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 867326443869147655} m_Modifications: - - target: {fileID: 3341828393456257833, guid: d5bb4efe5a3b7044ab0c08247bb3b573, type: 3} + - target: {fileID: 3341828393456257833, guid: d5bb4efe5a3b7044ab0c08247bb3b573, + type: 3} propertyPath: m_RootOrder value: 9 objectReference: {fileID: 0} - - target: {fileID: 3341828393456257833, guid: d5bb4efe5a3b7044ab0c08247bb3b573, type: 3} + - target: {fileID: 3341828393456257833, guid: d5bb4efe5a3b7044ab0c08247bb3b573, + type: 3} propertyPath: m_LocalPosition.x value: 92.7072 objectReference: {fileID: 0} - - target: {fileID: 3341828393456257833, guid: d5bb4efe5a3b7044ab0c08247bb3b573, type: 3} + - target: {fileID: 3341828393456257833, guid: d5bb4efe5a3b7044ab0c08247bb3b573, + type: 3} propertyPath: m_LocalPosition.y value: -86.04759 objectReference: {fileID: 0} - - target: {fileID: 3341828393456257833, guid: d5bb4efe5a3b7044ab0c08247bb3b573, type: 3} + - target: {fileID: 3341828393456257833, guid: d5bb4efe5a3b7044ab0c08247bb3b573, + type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 3341828393456257833, guid: d5bb4efe5a3b7044ab0c08247bb3b573, type: 3} + - target: {fileID: 3341828393456257833, guid: d5bb4efe5a3b7044ab0c08247bb3b573, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 3341828393456257833, guid: d5bb4efe5a3b7044ab0c08247bb3b573, type: 3} + - target: {fileID: 3341828393456257833, guid: d5bb4efe5a3b7044ab0c08247bb3b573, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3341828393456257833, guid: d5bb4efe5a3b7044ab0c08247bb3b573, type: 3} + - target: {fileID: 3341828393456257833, guid: d5bb4efe5a3b7044ab0c08247bb3b573, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 3341828393456257833, guid: d5bb4efe5a3b7044ab0c08247bb3b573, type: 3} + - target: {fileID: 3341828393456257833, guid: d5bb4efe5a3b7044ab0c08247bb3b573, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 3341828393456257833, guid: d5bb4efe5a3b7044ab0c08247bb3b573, type: 3} + - target: {fileID: 3341828393456257833, guid: d5bb4efe5a3b7044ab0c08247bb3b573, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3341828393456257833, guid: d5bb4efe5a3b7044ab0c08247bb3b573, type: 3} + - target: {fileID: 3341828393456257833, guid: d5bb4efe5a3b7044ab0c08247bb3b573, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3341828393456257833, guid: d5bb4efe5a3b7044ab0c08247bb3b573, type: 3} + - target: {fileID: 3341828393456257833, guid: d5bb4efe5a3b7044ab0c08247bb3b573, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 3383003268717833891, guid: d5bb4efe5a3b7044ab0c08247bb3b573, type: 3} + - target: {fileID: 3383003268717833891, guid: d5bb4efe5a3b7044ab0c08247bb3b573, + type: 3} propertyPath: m_Name value: Tank_Glove_Lt_Boy objectReference: {fileID: 0} - - target: {fileID: 3383003268717833891, guid: d5bb4efe5a3b7044ab0c08247bb3b573, type: 3} + - target: {fileID: 3383003268717833891, guid: d5bb4efe5a3b7044ab0c08247bb3b573, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -4943,12 +5294,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: d5bb4efe5a3b7044ab0c08247bb3b573, type: 3} --- !u!4 &4460926880052403619 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3341828393456257833, guid: d5bb4efe5a3b7044ab0c08247bb3b573, type: 3} + m_CorrespondingSourceObject: {fileID: 3341828393456257833, guid: d5bb4efe5a3b7044ab0c08247bb3b573, + type: 3} m_PrefabInstance: {fileID: 1407632629150619274} m_PrefabAsset: {fileID: 0} --- !u!1 &4429921248422459433 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 3383003268717833891, guid: d5bb4efe5a3b7044ab0c08247bb3b573, type: 3} + m_CorrespondingSourceObject: {fileID: 3383003268717833891, guid: d5bb4efe5a3b7044ab0c08247bb3b573, + type: 3} m_PrefabInstance: {fileID: 1407632629150619274} m_PrefabAsset: {fileID: 0} --- !u!1001 &1525047530299003233 @@ -4958,55 +5311,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4591219086638572107} m_Modifications: - - target: {fileID: 2512169531542778051, guid: 851c7450e4d0c6f459eb97d498d44df2, type: 3} + - target: {fileID: 2512169531542778051, guid: 851c7450e4d0c6f459eb97d498d44df2, + type: 3} propertyPath: m_Name value: Tank_Mouth_Boy objectReference: {fileID: 0} - - target: {fileID: 2512169531542778051, guid: 851c7450e4d0c6f459eb97d498d44df2, type: 3} + - target: {fileID: 2512169531542778051, guid: 851c7450e4d0c6f459eb97d498d44df2, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - - target: {fileID: 4259329777549511304, guid: 851c7450e4d0c6f459eb97d498d44df2, type: 3} + - target: {fileID: 4259329777549511304, guid: 851c7450e4d0c6f459eb97d498d44df2, + type: 3} propertyPath: m_RootOrder value: 4 objectReference: {fileID: 0} - - target: {fileID: 4259329777549511304, guid: 851c7450e4d0c6f459eb97d498d44df2, type: 3} + - target: {fileID: 4259329777549511304, guid: 851c7450e4d0c6f459eb97d498d44df2, + type: 3} propertyPath: m_LocalPosition.x value: 0.000002861023 objectReference: {fileID: 0} - - target: {fileID: 4259329777549511304, guid: 851c7450e4d0c6f459eb97d498d44df2, type: 3} + - target: {fileID: 4259329777549511304, guid: 851c7450e4d0c6f459eb97d498d44df2, + type: 3} propertyPath: m_LocalPosition.y value: 112.05777 objectReference: {fileID: 0} - - target: {fileID: 4259329777549511304, guid: 851c7450e4d0c6f459eb97d498d44df2, type: 3} + - target: {fileID: 4259329777549511304, guid: 851c7450e4d0c6f459eb97d498d44df2, + type: 3} propertyPath: m_LocalPosition.z value: 53.615967 objectReference: {fileID: 0} - - target: {fileID: 4259329777549511304, guid: 851c7450e4d0c6f459eb97d498d44df2, type: 3} + - target: {fileID: 4259329777549511304, guid: 851c7450e4d0c6f459eb97d498d44df2, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 4259329777549511304, guid: 851c7450e4d0c6f459eb97d498d44df2, type: 3} + - target: {fileID: 4259329777549511304, guid: 851c7450e4d0c6f459eb97d498d44df2, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4259329777549511304, guid: 851c7450e4d0c6f459eb97d498d44df2, type: 3} + - target: {fileID: 4259329777549511304, guid: 851c7450e4d0c6f459eb97d498d44df2, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 4259329777549511304, guid: 851c7450e4d0c6f459eb97d498d44df2, type: 3} + - target: {fileID: 4259329777549511304, guid: 851c7450e4d0c6f459eb97d498d44df2, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 4259329777549511304, guid: 851c7450e4d0c6f459eb97d498d44df2, type: 3} + - target: {fileID: 4259329777549511304, guid: 851c7450e4d0c6f459eb97d498d44df2, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4259329777549511304, guid: 851c7450e4d0c6f459eb97d498d44df2, type: 3} + - target: {fileID: 4259329777549511304, guid: 851c7450e4d0c6f459eb97d498d44df2, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4259329777549511304, guid: 851c7450e4d0c6f459eb97d498d44df2, type: 3} + - target: {fileID: 4259329777549511304, guid: 851c7450e4d0c6f459eb97d498d44df2, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} @@ -5014,12 +5380,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 851c7450e4d0c6f459eb97d498d44df2, type: 3} --- !u!1 &4032703291025891746 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 2512169531542778051, guid: 851c7450e4d0c6f459eb97d498d44df2, type: 3} + m_CorrespondingSourceObject: {fileID: 2512169531542778051, guid: 851c7450e4d0c6f459eb97d498d44df2, + type: 3} m_PrefabInstance: {fileID: 1525047530299003233} m_PrefabAsset: {fileID: 0} --- !u!4 &3329887988646288361 stripped Transform: - m_CorrespondingSourceObject: {fileID: 4259329777549511304, guid: 851c7450e4d0c6f459eb97d498d44df2, type: 3} + m_CorrespondingSourceObject: {fileID: 4259329777549511304, guid: 851c7450e4d0c6f459eb97d498d44df2, + type: 3} m_PrefabInstance: {fileID: 1525047530299003233} m_PrefabAsset: {fileID: 0} --- !u!1001 &1525864208295672007 @@ -5029,55 +5397,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 1459343620667739469} m_Modifications: - - target: {fileID: 4779039001483274684, guid: 5343c2282b0988947a5b17d9458843be, type: 3} + - target: {fileID: 4779039001483274684, guid: 5343c2282b0988947a5b17d9458843be, + type: 3} propertyPath: m_RootOrder value: 0 objectReference: {fileID: 0} - - target: {fileID: 4779039001483274684, guid: 5343c2282b0988947a5b17d9458843be, type: 3} + - target: {fileID: 4779039001483274684, guid: 5343c2282b0988947a5b17d9458843be, + type: 3} propertyPath: m_LocalPosition.x value: 0.00006580353 objectReference: {fileID: 0} - - target: {fileID: 4779039001483274684, guid: 5343c2282b0988947a5b17d9458843be, type: 3} + - target: {fileID: 4779039001483274684, guid: 5343c2282b0988947a5b17d9458843be, + type: 3} propertyPath: m_LocalPosition.y value: 131.48639 objectReference: {fileID: 0} - - target: {fileID: 4779039001483274684, guid: 5343c2282b0988947a5b17d9458843be, type: 3} + - target: {fileID: 4779039001483274684, guid: 5343c2282b0988947a5b17d9458843be, + type: 3} propertyPath: m_LocalPosition.z value: -6.743724 objectReference: {fileID: 0} - - target: {fileID: 4779039001483274684, guid: 5343c2282b0988947a5b17d9458843be, type: 3} + - target: {fileID: 4779039001483274684, guid: 5343c2282b0988947a5b17d9458843be, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 4779039001483274684, guid: 5343c2282b0988947a5b17d9458843be, type: 3} + - target: {fileID: 4779039001483274684, guid: 5343c2282b0988947a5b17d9458843be, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4779039001483274684, guid: 5343c2282b0988947a5b17d9458843be, type: 3} + - target: {fileID: 4779039001483274684, guid: 5343c2282b0988947a5b17d9458843be, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 4779039001483274684, guid: 5343c2282b0988947a5b17d9458843be, type: 3} + - target: {fileID: 4779039001483274684, guid: 5343c2282b0988947a5b17d9458843be, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 4779039001483274684, guid: 5343c2282b0988947a5b17d9458843be, type: 3} + - target: {fileID: 4779039001483274684, guid: 5343c2282b0988947a5b17d9458843be, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4779039001483274684, guid: 5343c2282b0988947a5b17d9458843be, type: 3} + - target: {fileID: 4779039001483274684, guid: 5343c2282b0988947a5b17d9458843be, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4779039001483274684, guid: 5343c2282b0988947a5b17d9458843be, type: 3} + - target: {fileID: 4779039001483274684, guid: 5343c2282b0988947a5b17d9458843be, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4968564450267304767, guid: 5343c2282b0988947a5b17d9458843be, type: 3} + - target: {fileID: 4968564450267304767, guid: 5343c2282b0988947a5b17d9458843be, + type: 3} propertyPath: m_Name value: Mage_Ears_Boy objectReference: {fileID: 0} - - target: {fileID: 4968564450267304767, guid: 5343c2282b0988947a5b17d9458843be, type: 3} + - target: {fileID: 4968564450267304767, guid: 5343c2282b0988947a5b17d9458843be, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -5085,12 +5466,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 5343c2282b0988947a5b17d9458843be, type: 3} --- !u!1 &5899458652462590968 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 4968564450267304767, guid: 5343c2282b0988947a5b17d9458843be, type: 3} + m_CorrespondingSourceObject: {fileID: 4968564450267304767, guid: 5343c2282b0988947a5b17d9458843be, + type: 3} m_PrefabInstance: {fileID: 1525864208295672007} m_PrefabAsset: {fileID: 0} --- !u!4 &6304612659465015675 stripped Transform: - m_CorrespondingSourceObject: {fileID: 4779039001483274684, guid: 5343c2282b0988947a5b17d9458843be, type: 3} + m_CorrespondingSourceObject: {fileID: 4779039001483274684, guid: 5343c2282b0988947a5b17d9458843be, + type: 3} m_PrefabInstance: {fileID: 1525864208295672007} m_PrefabAsset: {fileID: 0} --- !u!1001 &1530390420197160566 @@ -5100,55 +5483,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 867326443869147655} m_Modifications: - - target: {fileID: 279505333653245249, guid: 749589e505128684eb316dea71eb9ab1, type: 3} + - target: {fileID: 279505333653245249, guid: 749589e505128684eb316dea71eb9ab1, + type: 3} propertyPath: m_RootOrder value: 10 objectReference: {fileID: 0} - - target: {fileID: 279505333653245249, guid: 749589e505128684eb316dea71eb9ab1, type: 3} + - target: {fileID: 279505333653245249, guid: 749589e505128684eb316dea71eb9ab1, + type: 3} propertyPath: m_LocalPosition.x value: 92.7072 objectReference: {fileID: 0} - - target: {fileID: 279505333653245249, guid: 749589e505128684eb316dea71eb9ab1, type: 3} + - target: {fileID: 279505333653245249, guid: 749589e505128684eb316dea71eb9ab1, + type: 3} propertyPath: m_LocalPosition.y value: -86.04759 objectReference: {fileID: 0} - - target: {fileID: 279505333653245249, guid: 749589e505128684eb316dea71eb9ab1, type: 3} + - target: {fileID: 279505333653245249, guid: 749589e505128684eb316dea71eb9ab1, + type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 279505333653245249, guid: 749589e505128684eb316dea71eb9ab1, type: 3} + - target: {fileID: 279505333653245249, guid: 749589e505128684eb316dea71eb9ab1, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 279505333653245249, guid: 749589e505128684eb316dea71eb9ab1, type: 3} + - target: {fileID: 279505333653245249, guid: 749589e505128684eb316dea71eb9ab1, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 279505333653245249, guid: 749589e505128684eb316dea71eb9ab1, type: 3} + - target: {fileID: 279505333653245249, guid: 749589e505128684eb316dea71eb9ab1, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 279505333653245249, guid: 749589e505128684eb316dea71eb9ab1, type: 3} + - target: {fileID: 279505333653245249, guid: 749589e505128684eb316dea71eb9ab1, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 279505333653245249, guid: 749589e505128684eb316dea71eb9ab1, type: 3} + - target: {fileID: 279505333653245249, guid: 749589e505128684eb316dea71eb9ab1, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 279505333653245249, guid: 749589e505128684eb316dea71eb9ab1, type: 3} + - target: {fileID: 279505333653245249, guid: 749589e505128684eb316dea71eb9ab1, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 279505333653245249, guid: 749589e505128684eb316dea71eb9ab1, type: 3} + - target: {fileID: 279505333653245249, guid: 749589e505128684eb316dea71eb9ab1, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 402289688452098713, guid: 749589e505128684eb316dea71eb9ab1, type: 3} + - target: {fileID: 402289688452098713, guid: 749589e505128684eb316dea71eb9ab1, + type: 3} propertyPath: m_Name value: Tank_Glove_Lt_Girl objectReference: {fileID: 0} - - target: {fileID: 402289688452098713, guid: 749589e505128684eb316dea71eb9ab1, type: 3} + - target: {fileID: 402289688452098713, guid: 749589e505128684eb316dea71eb9ab1, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -5156,12 +5552,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 749589e505128684eb316dea71eb9ab1, type: 3} --- !u!4 &1647201889596062519 stripped Transform: - m_CorrespondingSourceObject: {fileID: 279505333653245249, guid: 749589e505128684eb316dea71eb9ab1, type: 3} + m_CorrespondingSourceObject: {fileID: 279505333653245249, guid: 749589e505128684eb316dea71eb9ab1, + type: 3} m_PrefabInstance: {fileID: 1530390420197160566} m_PrefabAsset: {fileID: 0} --- !u!1 &1200263922133654767 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 402289688452098713, guid: 749589e505128684eb316dea71eb9ab1, type: 3} + m_CorrespondingSourceObject: {fileID: 402289688452098713, guid: 749589e505128684eb316dea71eb9ab1, + type: 3} m_PrefabInstance: {fileID: 1530390420197160566} m_PrefabAsset: {fileID: 0} --- !u!1001 &1544335454924945057 @@ -5171,55 +5569,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 600274334256031679} m_Modifications: - - target: {fileID: 997057733040613870, guid: e95ffc00c4cf0854394e0b43cde7ea46, type: 3} + - target: {fileID: 997057733040613870, guid: e95ffc00c4cf0854394e0b43cde7ea46, + type: 3} propertyPath: m_Name value: Gear_RS_Tank_ShoulderPad_Boy objectReference: {fileID: 0} - - target: {fileID: 997057733040613870, guid: e95ffc00c4cf0854394e0b43cde7ea46, type: 3} + - target: {fileID: 997057733040613870, guid: e95ffc00c4cf0854394e0b43cde7ea46, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - - target: {fileID: 5380725463209725638, guid: e95ffc00c4cf0854394e0b43cde7ea46, type: 3} + - target: {fileID: 5380725463209725638, guid: e95ffc00c4cf0854394e0b43cde7ea46, + type: 3} propertyPath: m_RootOrder value: 8 objectReference: {fileID: 0} - - target: {fileID: 5380725463209725638, guid: e95ffc00c4cf0854394e0b43cde7ea46, type: 3} + - target: {fileID: 5380725463209725638, guid: e95ffc00c4cf0854394e0b43cde7ea46, + type: 3} propertyPath: m_LocalPosition.x value: 17.70731 objectReference: {fileID: 0} - - target: {fileID: 5380725463209725638, guid: e95ffc00c4cf0854394e0b43cde7ea46, type: 3} + - target: {fileID: 5380725463209725638, guid: e95ffc00c4cf0854394e0b43cde7ea46, + type: 3} propertyPath: m_LocalPosition.y value: -86.047585 objectReference: {fileID: 0} - - target: {fileID: 5380725463209725638, guid: e95ffc00c4cf0854394e0b43cde7ea46, type: 3} + - target: {fileID: 5380725463209725638, guid: e95ffc00c4cf0854394e0b43cde7ea46, + type: 3} propertyPath: m_LocalPosition.z value: 0.0000076293945 objectReference: {fileID: 0} - - target: {fileID: 5380725463209725638, guid: e95ffc00c4cf0854394e0b43cde7ea46, type: 3} + - target: {fileID: 5380725463209725638, guid: e95ffc00c4cf0854394e0b43cde7ea46, + type: 3} propertyPath: m_LocalRotation.w value: -6.123234e-17 objectReference: {fileID: 0} - - target: {fileID: 5380725463209725638, guid: e95ffc00c4cf0854394e0b43cde7ea46, type: 3} + - target: {fileID: 5380725463209725638, guid: e95ffc00c4cf0854394e0b43cde7ea46, + type: 3} propertyPath: m_LocalRotation.x value: 6.123234e-17 objectReference: {fileID: 0} - - target: {fileID: 5380725463209725638, guid: e95ffc00c4cf0854394e0b43cde7ea46, type: 3} + - target: {fileID: 5380725463209725638, guid: e95ffc00c4cf0854394e0b43cde7ea46, + type: 3} propertyPath: m_LocalRotation.y value: 1 objectReference: {fileID: 0} - - target: {fileID: 5380725463209725638, guid: e95ffc00c4cf0854394e0b43cde7ea46, type: 3} + - target: {fileID: 5380725463209725638, guid: e95ffc00c4cf0854394e0b43cde7ea46, + type: 3} propertyPath: m_LocalRotation.z value: -6.123234e-17 objectReference: {fileID: 0} - - target: {fileID: 5380725463209725638, guid: e95ffc00c4cf0854394e0b43cde7ea46, type: 3} + - target: {fileID: 5380725463209725638, guid: e95ffc00c4cf0854394e0b43cde7ea46, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 5380725463209725638, guid: e95ffc00c4cf0854394e0b43cde7ea46, type: 3} + - target: {fileID: 5380725463209725638, guid: e95ffc00c4cf0854394e0b43cde7ea46, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 5380725463209725638, guid: e95ffc00c4cf0854394e0b43cde7ea46, type: 3} + - target: {fileID: 5380725463209725638, guid: e95ffc00c4cf0854394e0b43cde7ea46, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} @@ -5227,12 +5638,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: e95ffc00c4cf0854394e0b43cde7ea46, type: 3} --- !u!4 &6900281697679734887 stripped Transform: - m_CorrespondingSourceObject: {fileID: 5380725463209725638, guid: e95ffc00c4cf0854394e0b43cde7ea46, type: 3} + m_CorrespondingSourceObject: {fileID: 5380725463209725638, guid: e95ffc00c4cf0854394e0b43cde7ea46, + type: 3} m_PrefabInstance: {fileID: 1544335454924945057} m_PrefabAsset: {fileID: 0} --- !u!1 &1781409292828974927 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 997057733040613870, guid: e95ffc00c4cf0854394e0b43cde7ea46, type: 3} + m_CorrespondingSourceObject: {fileID: 997057733040613870, guid: e95ffc00c4cf0854394e0b43cde7ea46, + type: 3} m_PrefabInstance: {fileID: 1544335454924945057} m_PrefabAsset: {fileID: 0} --- !u!1001 &1545513285034164983 @@ -5242,55 +5655,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 600274334256031679} m_Modifications: - - target: {fileID: 5613456398685740096, guid: e30891497dc4b1a418444a1b8b4ef6a1, type: 3} + - target: {fileID: 5613456398685740096, guid: e30891497dc4b1a418444a1b8b4ef6a1, + type: 3} propertyPath: m_Name value: Empty_Gear_RS_Slot_Archer_Boy objectReference: {fileID: 0} - - target: {fileID: 5613456398685740096, guid: e30891497dc4b1a418444a1b8b4ef6a1, type: 3} + - target: {fileID: 5613456398685740096, guid: e30891497dc4b1a418444a1b8b4ef6a1, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - - target: {fileID: 5613456398685740099, guid: e30891497dc4b1a418444a1b8b4ef6a1, type: 3} + - target: {fileID: 5613456398685740099, guid: e30891497dc4b1a418444a1b8b4ef6a1, + type: 3} propertyPath: m_RootOrder value: 2 objectReference: {fileID: 0} - - target: {fileID: 5613456398685740099, guid: e30891497dc4b1a418444a1b8b4ef6a1, type: 3} + - target: {fileID: 5613456398685740099, guid: e30891497dc4b1a418444a1b8b4ef6a1, + type: 3} propertyPath: m_LocalPosition.x value: 163.42566 objectReference: {fileID: 0} - - target: {fileID: 5613456398685740099, guid: e30891497dc4b1a418444a1b8b4ef6a1, type: 3} + - target: {fileID: 5613456398685740099, guid: e30891497dc4b1a418444a1b8b4ef6a1, + type: 3} propertyPath: m_LocalPosition.y value: 103.55921 objectReference: {fileID: 0} - - target: {fileID: 5613456398685740099, guid: e30891497dc4b1a418444a1b8b4ef6a1, type: 3} + - target: {fileID: 5613456398685740099, guid: e30891497dc4b1a418444a1b8b4ef6a1, + type: 3} propertyPath: m_LocalPosition.z value: -120.06873 objectReference: {fileID: 0} - - target: {fileID: 5613456398685740099, guid: e30891497dc4b1a418444a1b8b4ef6a1, type: 3} + - target: {fileID: 5613456398685740099, guid: e30891497dc4b1a418444a1b8b4ef6a1, + type: 3} propertyPath: m_LocalRotation.w value: -6.123234e-17 objectReference: {fileID: 0} - - target: {fileID: 5613456398685740099, guid: e30891497dc4b1a418444a1b8b4ef6a1, type: 3} + - target: {fileID: 5613456398685740099, guid: e30891497dc4b1a418444a1b8b4ef6a1, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 5613456398685740099, guid: e30891497dc4b1a418444a1b8b4ef6a1, type: 3} + - target: {fileID: 5613456398685740099, guid: e30891497dc4b1a418444a1b8b4ef6a1, + type: 3} propertyPath: m_LocalRotation.y value: -1 objectReference: {fileID: 0} - - target: {fileID: 5613456398685740099, guid: e30891497dc4b1a418444a1b8b4ef6a1, type: 3} + - target: {fileID: 5613456398685740099, guid: e30891497dc4b1a418444a1b8b4ef6a1, + type: 3} propertyPath: m_LocalRotation.z value: 6.123234e-17 objectReference: {fileID: 0} - - target: {fileID: 5613456398685740099, guid: e30891497dc4b1a418444a1b8b4ef6a1, type: 3} + - target: {fileID: 5613456398685740099, guid: e30891497dc4b1a418444a1b8b4ef6a1, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 5613456398685740099, guid: e30891497dc4b1a418444a1b8b4ef6a1, type: 3} + - target: {fileID: 5613456398685740099, guid: e30891497dc4b1a418444a1b8b4ef6a1, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 5613456398685740099, guid: e30891497dc4b1a418444a1b8b4ef6a1, type: 3} + - target: {fileID: 5613456398685740099, guid: e30891497dc4b1a418444a1b8b4ef6a1, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} @@ -5298,12 +5724,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: e30891497dc4b1a418444a1b8b4ef6a1, type: 3} --- !u!4 &6383224644280082100 stripped Transform: - m_CorrespondingSourceObject: {fileID: 5613456398685740099, guid: e30891497dc4b1a418444a1b8b4ef6a1, type: 3} + m_CorrespondingSourceObject: {fileID: 5613456398685740099, guid: e30891497dc4b1a418444a1b8b4ef6a1, + type: 3} m_PrefabInstance: {fileID: 1545513285034164983} m_PrefabAsset: {fileID: 0} --- !u!1 &6383224644280082103 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 5613456398685740096, guid: e30891497dc4b1a418444a1b8b4ef6a1, type: 3} + m_CorrespondingSourceObject: {fileID: 5613456398685740096, guid: e30891497dc4b1a418444a1b8b4ef6a1, + type: 3} m_PrefabInstance: {fileID: 1545513285034164983} m_PrefabAsset: {fileID: 0} --- !u!1001 &1719225765058067700 @@ -5313,55 +5741,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 1313590801738418481} m_Modifications: - - target: {fileID: 4732351145213135857, guid: b9c518a283189a1458bf47f8d1ccad83, type: 3} + - target: {fileID: 4732351145213135857, guid: b9c518a283189a1458bf47f8d1ccad83, + type: 3} propertyPath: m_RootOrder value: 8 objectReference: {fileID: 0} - - target: {fileID: 4732351145213135857, guid: b9c518a283189a1458bf47f8d1ccad83, type: 3} + - target: {fileID: 4732351145213135857, guid: b9c518a283189a1458bf47f8d1ccad83, + type: 3} propertyPath: m_LocalPosition.x value: 12.516148 objectReference: {fileID: 0} - - target: {fileID: 4732351145213135857, guid: b9c518a283189a1458bf47f8d1ccad83, type: 3} + - target: {fileID: 4732351145213135857, guid: b9c518a283189a1458bf47f8d1ccad83, + type: 3} propertyPath: m_LocalPosition.y value: -3.1288605 objectReference: {fileID: 0} - - target: {fileID: 4732351145213135857, guid: b9c518a283189a1458bf47f8d1ccad83, type: 3} + - target: {fileID: 4732351145213135857, guid: b9c518a283189a1458bf47f8d1ccad83, + type: 3} propertyPath: m_LocalPosition.z value: -1.3515625 objectReference: {fileID: 0} - - target: {fileID: 4732351145213135857, guid: b9c518a283189a1458bf47f8d1ccad83, type: 3} + - target: {fileID: 4732351145213135857, guid: b9c518a283189a1458bf47f8d1ccad83, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 4732351145213135857, guid: b9c518a283189a1458bf47f8d1ccad83, type: 3} + - target: {fileID: 4732351145213135857, guid: b9c518a283189a1458bf47f8d1ccad83, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4732351145213135857, guid: b9c518a283189a1458bf47f8d1ccad83, type: 3} + - target: {fileID: 4732351145213135857, guid: b9c518a283189a1458bf47f8d1ccad83, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 4732351145213135857, guid: b9c518a283189a1458bf47f8d1ccad83, type: 3} + - target: {fileID: 4732351145213135857, guid: b9c518a283189a1458bf47f8d1ccad83, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 4732351145213135857, guid: b9c518a283189a1458bf47f8d1ccad83, type: 3} + - target: {fileID: 4732351145213135857, guid: b9c518a283189a1458bf47f8d1ccad83, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4732351145213135857, guid: b9c518a283189a1458bf47f8d1ccad83, type: 3} + - target: {fileID: 4732351145213135857, guid: b9c518a283189a1458bf47f8d1ccad83, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4732351145213135857, guid: b9c518a283189a1458bf47f8d1ccad83, type: 3} + - target: {fileID: 4732351145213135857, guid: b9c518a283189a1458bf47f8d1ccad83, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4790444154655256179, guid: b9c518a283189a1458bf47f8d1ccad83, type: 3} + - target: {fileID: 4790444154655256179, guid: b9c518a283189a1458bf47f8d1ccad83, + type: 3} propertyPath: m_Name value: Mage_Hand_Rt_Boy objectReference: {fileID: 0} - - target: {fileID: 4790444154655256179, guid: b9c518a283189a1458bf47f8d1ccad83, type: 3} + - target: {fileID: 4790444154655256179, guid: b9c518a283189a1458bf47f8d1ccad83, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -5369,12 +5810,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: b9c518a283189a1458bf47f8d1ccad83, type: 3} --- !u!4 &6230548606331107077 stripped Transform: - m_CorrespondingSourceObject: {fileID: 4732351145213135857, guid: b9c518a283189a1458bf47f8d1ccad83, type: 3} + m_CorrespondingSourceObject: {fileID: 4732351145213135857, guid: b9c518a283189a1458bf47f8d1ccad83, + type: 3} m_PrefabInstance: {fileID: 1719225765058067700} m_PrefabAsset: {fileID: 0} --- !u!1 &6170205450906014343 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 4790444154655256179, guid: b9c518a283189a1458bf47f8d1ccad83, type: 3} + m_CorrespondingSourceObject: {fileID: 4790444154655256179, guid: b9c518a283189a1458bf47f8d1ccad83, + type: 3} m_PrefabInstance: {fileID: 1719225765058067700} m_PrefabAsset: {fileID: 0} --- !u!1001 &1740753026150502923 @@ -5384,55 +5827,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 867326443869147655} m_Modifications: - - target: {fileID: 2473400487196023196, guid: 23cab34076009b549acfa160f180b79a, type: 3} + - target: {fileID: 2473400487196023196, guid: 23cab34076009b549acfa160f180b79a, + type: 3} propertyPath: m_Name value: Archer_Hand_Lt_Boy objectReference: {fileID: 0} - - target: {fileID: 2473400487196023196, guid: 23cab34076009b549acfa160f180b79a, type: 3} + - target: {fileID: 2473400487196023196, guid: 23cab34076009b549acfa160f180b79a, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - - target: {fileID: 6312070341093225193, guid: 23cab34076009b549acfa160f180b79a, type: 3} + - target: {fileID: 6312070341093225193, guid: 23cab34076009b549acfa160f180b79a, + type: 3} propertyPath: m_RootOrder value: 0 objectReference: {fileID: 0} - - target: {fileID: 6312070341093225193, guid: 23cab34076009b549acfa160f180b79a, type: 3} + - target: {fileID: 6312070341093225193, guid: 23cab34076009b549acfa160f180b79a, + type: 3} propertyPath: m_LocalPosition.x value: 92.7072 objectReference: {fileID: 0} - - target: {fileID: 6312070341093225193, guid: 23cab34076009b549acfa160f180b79a, type: 3} + - target: {fileID: 6312070341093225193, guid: 23cab34076009b549acfa160f180b79a, + type: 3} propertyPath: m_LocalPosition.y value: -86.04759 objectReference: {fileID: 0} - - target: {fileID: 6312070341093225193, guid: 23cab34076009b549acfa160f180b79a, type: 3} + - target: {fileID: 6312070341093225193, guid: 23cab34076009b549acfa160f180b79a, + type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 6312070341093225193, guid: 23cab34076009b549acfa160f180b79a, type: 3} + - target: {fileID: 6312070341093225193, guid: 23cab34076009b549acfa160f180b79a, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 6312070341093225193, guid: 23cab34076009b549acfa160f180b79a, type: 3} + - target: {fileID: 6312070341093225193, guid: 23cab34076009b549acfa160f180b79a, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 6312070341093225193, guid: 23cab34076009b549acfa160f180b79a, type: 3} + - target: {fileID: 6312070341093225193, guid: 23cab34076009b549acfa160f180b79a, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 6312070341093225193, guid: 23cab34076009b549acfa160f180b79a, type: 3} + - target: {fileID: 6312070341093225193, guid: 23cab34076009b549acfa160f180b79a, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 6312070341093225193, guid: 23cab34076009b549acfa160f180b79a, type: 3} + - target: {fileID: 6312070341093225193, guid: 23cab34076009b549acfa160f180b79a, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 6312070341093225193, guid: 23cab34076009b549acfa160f180b79a, type: 3} + - target: {fileID: 6312070341093225193, guid: 23cab34076009b549acfa160f180b79a, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 6312070341093225193, guid: 23cab34076009b549acfa160f180b79a, type: 3} + - target: {fileID: 6312070341093225193, guid: 23cab34076009b549acfa160f180b79a, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} @@ -5440,12 +5896,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 23cab34076009b549acfa160f180b79a, type: 3} --- !u!1 &4214011375698824087 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 2473400487196023196, guid: 23cab34076009b549acfa160f180b79a, type: 3} + m_CorrespondingSourceObject: {fileID: 2473400487196023196, guid: 23cab34076009b549acfa160f180b79a, + type: 3} m_PrefabInstance: {fileID: 1740753026150502923} m_PrefabAsset: {fileID: 0} --- !u!4 &5742264552519688418 stripped Transform: - m_CorrespondingSourceObject: {fileID: 6312070341093225193, guid: 23cab34076009b549acfa160f180b79a, type: 3} + m_CorrespondingSourceObject: {fileID: 6312070341093225193, guid: 23cab34076009b549acfa160f180b79a, + type: 3} m_PrefabInstance: {fileID: 1740753026150502923} m_PrefabAsset: {fileID: 0} --- !u!1001 &1838082428626372544 @@ -5455,55 +5913,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 867326443869147655} m_Modifications: - - target: {fileID: 8454221756294058385, guid: 00155254db96ce542a09c3e678c72b44, type: 3} + - target: {fileID: 8454221756294058385, guid: 00155254db96ce542a09c3e678c72b44, + type: 3} propertyPath: m_RootOrder value: 17 objectReference: {fileID: 0} - - target: {fileID: 8454221756294058385, guid: 00155254db96ce542a09c3e678c72b44, type: 3} + - target: {fileID: 8454221756294058385, guid: 00155254db96ce542a09c3e678c72b44, + type: 3} propertyPath: m_LocalPosition.x value: -53.010986 objectReference: {fileID: 0} - - target: {fileID: 8454221756294058385, guid: 00155254db96ce542a09c3e678c72b44, type: 3} + - target: {fileID: 8454221756294058385, guid: 00155254db96ce542a09c3e678c72b44, + type: 3} propertyPath: m_LocalPosition.y value: 103.55913 objectReference: {fileID: 0} - - target: {fileID: 8454221756294058385, guid: 00155254db96ce542a09c3e678c72b44, type: 3} + - target: {fileID: 8454221756294058385, guid: 00155254db96ce542a09c3e678c72b44, + type: 3} propertyPath: m_LocalPosition.z value: 120.0687 objectReference: {fileID: 0} - - target: {fileID: 8454221756294058385, guid: 00155254db96ce542a09c3e678c72b44, type: 3} + - target: {fileID: 8454221756294058385, guid: 00155254db96ce542a09c3e678c72b44, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 8454221756294058385, guid: 00155254db96ce542a09c3e678c72b44, type: 3} + - target: {fileID: 8454221756294058385, guid: 00155254db96ce542a09c3e678c72b44, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 8454221756294058385, guid: 00155254db96ce542a09c3e678c72b44, type: 3} + - target: {fileID: 8454221756294058385, guid: 00155254db96ce542a09c3e678c72b44, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 8454221756294058385, guid: 00155254db96ce542a09c3e678c72b44, type: 3} + - target: {fileID: 8454221756294058385, guid: 00155254db96ce542a09c3e678c72b44, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 8454221756294058385, guid: 00155254db96ce542a09c3e678c72b44, type: 3} + - target: {fileID: 8454221756294058385, guid: 00155254db96ce542a09c3e678c72b44, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 8454221756294058385, guid: 00155254db96ce542a09c3e678c72b44, type: 3} + - target: {fileID: 8454221756294058385, guid: 00155254db96ce542a09c3e678c72b44, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 8454221756294058385, guid: 00155254db96ce542a09c3e678c72b44, type: 3} + - target: {fileID: 8454221756294058385, guid: 00155254db96ce542a09c3e678c72b44, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 8454221756294058386, guid: 00155254db96ce542a09c3e678c72b44, type: 3} + - target: {fileID: 8454221756294058386, guid: 00155254db96ce542a09c3e678c72b44, + type: 3} propertyPath: m_Name value: Empty_Gear_LH_Slot_Rogue_Boy objectReference: {fileID: 0} - - target: {fileID: 8454221756294058386, guid: 00155254db96ce542a09c3e678c72b44, type: 3} + - target: {fileID: 8454221756294058386, guid: 00155254db96ce542a09c3e678c72b44, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -5511,12 +5982,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 00155254db96ce542a09c3e678c72b44, type: 3} --- !u!1 &7841123055284835922 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 8454221756294058386, guid: 00155254db96ce542a09c3e678c72b44, type: 3} + m_CorrespondingSourceObject: {fileID: 8454221756294058386, guid: 00155254db96ce542a09c3e678c72b44, + type: 3} m_PrefabInstance: {fileID: 1838082428626372544} m_PrefabAsset: {fileID: 0} --- !u!4 &7841123055284835921 stripped Transform: - m_CorrespondingSourceObject: {fileID: 8454221756294058385, guid: 00155254db96ce542a09c3e678c72b44, type: 3} + m_CorrespondingSourceObject: {fileID: 8454221756294058385, guid: 00155254db96ce542a09c3e678c72b44, + type: 3} m_PrefabInstance: {fileID: 1838082428626372544} m_PrefabAsset: {fileID: 0} --- !u!1001 &1893181253840720784 @@ -5526,55 +5999,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 1459343620667739469} m_Modifications: - - target: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, type: 3} + - target: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, + type: 3} propertyPath: m_RootOrder value: 4 objectReference: {fileID: 0} - - target: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, type: 3} + - target: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, + type: 3} propertyPath: m_LocalPosition.x value: 24.35378 objectReference: {fileID: 0} - - target: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, type: 3} + - target: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, + type: 3} propertyPath: m_LocalPosition.y value: 148.51102 objectReference: {fileID: 0} - - target: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, type: 3} + - target: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, + type: 3} propertyPath: m_LocalPosition.z value: 3.4166515 objectReference: {fileID: 0} - - target: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, type: 3} + - target: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, type: 3} + - target: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, type: 3} + - target: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, type: 3} + - target: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, type: 3} + - target: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, type: 3} + - target: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, type: 3} + - target: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 2531791160233610345, guid: 15ed538aa9a05d949b95ac6489a23e05, type: 3} + - target: {fileID: 2531791160233610345, guid: 15ed538aa9a05d949b95ac6489a23e05, + type: 3} propertyPath: m_Name value: Mage_Mouth_Boy objectReference: {fileID: 0} - - target: {fileID: 2531791160233610345, guid: 15ed538aa9a05d949b95ac6489a23e05, type: 3} + - target: {fileID: 2531791160233610345, guid: 15ed538aa9a05d949b95ac6489a23e05, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -5582,12 +6068,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 15ed538aa9a05d949b95ac6489a23e05, type: 3} --- !u!1 &4136368192088449017 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 2531791160233610345, guid: 15ed538aa9a05d949b95ac6489a23e05, type: 3} + m_CorrespondingSourceObject: {fileID: 2531791160233610345, guid: 15ed538aa9a05d949b95ac6489a23e05, + type: 3} m_PrefabInstance: {fileID: 1893181253840720784} m_PrefabAsset: {fileID: 0} --- !u!4 &310944755209449431 stripped Transform: - m_CorrespondingSourceObject: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, type: 3} + m_CorrespondingSourceObject: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, + type: 3} m_PrefabInstance: {fileID: 1893181253840720784} m_PrefabAsset: {fileID: 0} --- !u!1001 &1949685545803549988 @@ -5597,55 +6085,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 8183775978794224953} m_Modifications: - - target: {fileID: 1719455096982047974, guid: cc7b3978b651c414f819440ad2c22b05, type: 3} + - target: {fileID: 1719455096982047974, guid: cc7b3978b651c414f819440ad2c22b05, + type: 3} propertyPath: m_Name value: Tank_Mouth_Girl objectReference: {fileID: 0} - - target: {fileID: 1719455096982047974, guid: cc7b3978b651c414f819440ad2c22b05, type: 3} + - target: {fileID: 1719455096982047974, guid: cc7b3978b651c414f819440ad2c22b05, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - - target: {fileID: 7154921953636240311, guid: cc7b3978b651c414f819440ad2c22b05, type: 3} + - target: {fileID: 7154921953636240311, guid: cc7b3978b651c414f819440ad2c22b05, + type: 3} propertyPath: m_RootOrder value: 4 objectReference: {fileID: 0} - - target: {fileID: 7154921953636240311, guid: cc7b3978b651c414f819440ad2c22b05, type: 3} + - target: {fileID: 7154921953636240311, guid: cc7b3978b651c414f819440ad2c22b05, + type: 3} propertyPath: m_LocalPosition.x value: -0.00000047683716 objectReference: {fileID: 0} - - target: {fileID: 7154921953636240311, guid: cc7b3978b651c414f819440ad2c22b05, type: 3} + - target: {fileID: 7154921953636240311, guid: cc7b3978b651c414f819440ad2c22b05, + type: 3} propertyPath: m_LocalPosition.y value: 148.357 objectReference: {fileID: 0} - - target: {fileID: 7154921953636240311, guid: cc7b3978b651c414f819440ad2c22b05, type: 3} + - target: {fileID: 7154921953636240311, guid: cc7b3978b651c414f819440ad2c22b05, + type: 3} propertyPath: m_LocalPosition.z value: 9.3361025 objectReference: {fileID: 0} - - target: {fileID: 7154921953636240311, guid: cc7b3978b651c414f819440ad2c22b05, type: 3} + - target: {fileID: 7154921953636240311, guid: cc7b3978b651c414f819440ad2c22b05, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 7154921953636240311, guid: cc7b3978b651c414f819440ad2c22b05, type: 3} + - target: {fileID: 7154921953636240311, guid: cc7b3978b651c414f819440ad2c22b05, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 7154921953636240311, guid: cc7b3978b651c414f819440ad2c22b05, type: 3} + - target: {fileID: 7154921953636240311, guid: cc7b3978b651c414f819440ad2c22b05, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 7154921953636240311, guid: cc7b3978b651c414f819440ad2c22b05, type: 3} + - target: {fileID: 7154921953636240311, guid: cc7b3978b651c414f819440ad2c22b05, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 7154921953636240311, guid: cc7b3978b651c414f819440ad2c22b05, type: 3} + - target: {fileID: 7154921953636240311, guid: cc7b3978b651c414f819440ad2c22b05, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 7154921953636240311, guid: cc7b3978b651c414f819440ad2c22b05, type: 3} + - target: {fileID: 7154921953636240311, guid: cc7b3978b651c414f819440ad2c22b05, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 7154921953636240311, guid: cc7b3978b651c414f819440ad2c22b05, type: 3} + - target: {fileID: 7154921953636240311, guid: cc7b3978b651c414f819440ad2c22b05, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} @@ -5653,12 +6154,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: cc7b3978b651c414f819440ad2c22b05, type: 3} --- !u!4 &8666560894407558803 stripped Transform: - m_CorrespondingSourceObject: {fileID: 7154921953636240311, guid: cc7b3978b651c414f819440ad2c22b05, type: 3} + m_CorrespondingSourceObject: {fileID: 7154921953636240311, guid: cc7b3978b651c414f819440ad2c22b05, + type: 3} m_PrefabInstance: {fileID: 1949685545803549988} m_PrefabAsset: {fileID: 0} --- !u!1 &923827126477259202 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 1719455096982047974, guid: cc7b3978b651c414f819440ad2c22b05, type: 3} + m_CorrespondingSourceObject: {fileID: 1719455096982047974, guid: cc7b3978b651c414f819440ad2c22b05, + type: 3} m_PrefabInstance: {fileID: 1949685545803549988} m_PrefabAsset: {fileID: 0} --- !u!1001 &1968929121083536983 @@ -5668,55 +6171,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 3241768821857961484} m_Modifications: - - target: {fileID: 5008728519802004323, guid: ea7dd189a245f1e4f97809d5788424b1, type: 3} + - target: {fileID: 5008728519802004323, guid: ea7dd189a245f1e4f97809d5788424b1, + type: 3} propertyPath: m_RootOrder value: 3 objectReference: {fileID: 0} - - target: {fileID: 5008728519802004323, guid: ea7dd189a245f1e4f97809d5788424b1, type: 3} + - target: {fileID: 5008728519802004323, guid: ea7dd189a245f1e4f97809d5788424b1, + type: 3} propertyPath: m_LocalPosition.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 5008728519802004323, guid: ea7dd189a245f1e4f97809d5788424b1, type: 3} + - target: {fileID: 5008728519802004323, guid: ea7dd189a245f1e4f97809d5788424b1, + type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 5008728519802004323, guid: ea7dd189a245f1e4f97809d5788424b1, type: 3} + - target: {fileID: 5008728519802004323, guid: ea7dd189a245f1e4f97809d5788424b1, + type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 5008728519802004323, guid: ea7dd189a245f1e4f97809d5788424b1, type: 3} + - target: {fileID: 5008728519802004323, guid: ea7dd189a245f1e4f97809d5788424b1, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 5008728519802004323, guid: ea7dd189a245f1e4f97809d5788424b1, type: 3} + - target: {fileID: 5008728519802004323, guid: ea7dd189a245f1e4f97809d5788424b1, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 5008728519802004323, guid: ea7dd189a245f1e4f97809d5788424b1, type: 3} + - target: {fileID: 5008728519802004323, guid: ea7dd189a245f1e4f97809d5788424b1, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 5008728519802004323, guid: ea7dd189a245f1e4f97809d5788424b1, type: 3} + - target: {fileID: 5008728519802004323, guid: ea7dd189a245f1e4f97809d5788424b1, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 5008728519802004323, guid: ea7dd189a245f1e4f97809d5788424b1, type: 3} + - target: {fileID: 5008728519802004323, guid: ea7dd189a245f1e4f97809d5788424b1, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 5008728519802004323, guid: ea7dd189a245f1e4f97809d5788424b1, type: 3} + - target: {fileID: 5008728519802004323, guid: ea7dd189a245f1e4f97809d5788424b1, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 5008728519802004323, guid: ea7dd189a245f1e4f97809d5788424b1, type: 3} + - target: {fileID: 5008728519802004323, guid: ea7dd189a245f1e4f97809d5788424b1, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 5499444184722359136, guid: ea7dd189a245f1e4f97809d5788424b1, type: 3} + - target: {fileID: 5499444184722359136, guid: ea7dd189a245f1e4f97809d5788424b1, + type: 3} propertyPath: m_Name value: Rogue_Head_Girl objectReference: {fileID: 0} - - target: {fileID: 5499444184722359136, guid: ea7dd189a245f1e4f97809d5788424b1, type: 3} + - target: {fileID: 5499444184722359136, guid: ea7dd189a245f1e4f97809d5788424b1, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -5724,12 +6240,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: ea7dd189a245f1e4f97809d5788424b1, type: 3} --- !u!1 &6269848250764621111 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 5499444184722359136, guid: ea7dd189a245f1e4f97809d5788424b1, type: 3} + m_CorrespondingSourceObject: {fileID: 5499444184722359136, guid: ea7dd189a245f1e4f97809d5788424b1, + type: 3} m_PrefabInstance: {fileID: 1968929121083536983} m_PrefabAsset: {fileID: 0} --- !u!4 &6832416484114928948 stripped Transform: - m_CorrespondingSourceObject: {fileID: 5008728519802004323, guid: ea7dd189a245f1e4f97809d5788424b1, type: 3} + m_CorrespondingSourceObject: {fileID: 5008728519802004323, guid: ea7dd189a245f1e4f97809d5788424b1, + type: 3} m_PrefabInstance: {fileID: 1968929121083536983} m_PrefabAsset: {fileID: 0} --- !u!1001 &2084436998976433826 @@ -5739,55 +6257,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 6681451058136744116} m_Modifications: - - target: {fileID: 4211075572028788711, guid: 6c1c9f3a5e505d64bb9fe43c16b70ef4, type: 3} + - target: {fileID: 4211075572028788711, guid: 6c1c9f3a5e505d64bb9fe43c16b70ef4, + type: 3} propertyPath: m_RootOrder value: 1 objectReference: {fileID: 0} - - target: {fileID: 4211075572028788711, guid: 6c1c9f3a5e505d64bb9fe43c16b70ef4, type: 3} + - target: {fileID: 4211075572028788711, guid: 6c1c9f3a5e505d64bb9fe43c16b70ef4, + type: 3} propertyPath: m_LocalPosition.x value: -0.0000011920929 objectReference: {fileID: 0} - - target: {fileID: 4211075572028788711, guid: 6c1c9f3a5e505d64bb9fe43c16b70ef4, type: 3} + - target: {fileID: 4211075572028788711, guid: 6c1c9f3a5e505d64bb9fe43c16b70ef4, + type: 3} propertyPath: m_LocalPosition.y value: 148.35704 objectReference: {fileID: 0} - - target: {fileID: 4211075572028788711, guid: 6c1c9f3a5e505d64bb9fe43c16b70ef4, type: 3} + - target: {fileID: 4211075572028788711, guid: 6c1c9f3a5e505d64bb9fe43c16b70ef4, + type: 3} propertyPath: m_LocalPosition.z value: 9.308052 objectReference: {fileID: 0} - - target: {fileID: 4211075572028788711, guid: 6c1c9f3a5e505d64bb9fe43c16b70ef4, type: 3} + - target: {fileID: 4211075572028788711, guid: 6c1c9f3a5e505d64bb9fe43c16b70ef4, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 4211075572028788711, guid: 6c1c9f3a5e505d64bb9fe43c16b70ef4, type: 3} + - target: {fileID: 4211075572028788711, guid: 6c1c9f3a5e505d64bb9fe43c16b70ef4, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4211075572028788711, guid: 6c1c9f3a5e505d64bb9fe43c16b70ef4, type: 3} + - target: {fileID: 4211075572028788711, guid: 6c1c9f3a5e505d64bb9fe43c16b70ef4, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 4211075572028788711, guid: 6c1c9f3a5e505d64bb9fe43c16b70ef4, type: 3} + - target: {fileID: 4211075572028788711, guid: 6c1c9f3a5e505d64bb9fe43c16b70ef4, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 4211075572028788711, guid: 6c1c9f3a5e505d64bb9fe43c16b70ef4, type: 3} + - target: {fileID: 4211075572028788711, guid: 6c1c9f3a5e505d64bb9fe43c16b70ef4, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4211075572028788711, guid: 6c1c9f3a5e505d64bb9fe43c16b70ef4, type: 3} + - target: {fileID: 4211075572028788711, guid: 6c1c9f3a5e505d64bb9fe43c16b70ef4, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4211075572028788711, guid: 6c1c9f3a5e505d64bb9fe43c16b70ef4, type: 3} + - target: {fileID: 4211075572028788711, guid: 6c1c9f3a5e505d64bb9fe43c16b70ef4, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 8882283713551114303, guid: 6c1c9f3a5e505d64bb9fe43c16b70ef4, type: 3} + - target: {fileID: 8882283713551114303, guid: 6c1c9f3a5e505d64bb9fe43c16b70ef4, + type: 3} propertyPath: m_Name value: Rogue_Eyes_Boy objectReference: {fileID: 0} - - target: {fileID: 8882283713551114303, guid: 6c1c9f3a5e505d64bb9fe43c16b70ef4, type: 3} + - target: {fileID: 8882283713551114303, guid: 6c1c9f3a5e505d64bb9fe43c16b70ef4, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -5795,12 +6326,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 6c1c9f3a5e505d64bb9fe43c16b70ef4, type: 3} --- !u!4 &2782616006297788741 stripped Transform: - m_CorrespondingSourceObject: {fileID: 4211075572028788711, guid: 6c1c9f3a5e505d64bb9fe43c16b70ef4, type: 3} + m_CorrespondingSourceObject: {fileID: 4211075572028788711, guid: 6c1c9f3a5e505d64bb9fe43c16b70ef4, + type: 3} m_PrefabInstance: {fileID: 2084436998976433826} m_PrefabAsset: {fileID: 0} --- !u!1 &7469604338698571421 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 8882283713551114303, guid: 6c1c9f3a5e505d64bb9fe43c16b70ef4, type: 3} + m_CorrespondingSourceObject: {fileID: 8882283713551114303, guid: 6c1c9f3a5e505d64bb9fe43c16b70ef4, + type: 3} m_PrefabInstance: {fileID: 2084436998976433826} m_PrefabAsset: {fileID: 0} --- !u!1001 &2318115637226772464 @@ -5810,55 +6343,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 1313590801738418481} m_Modifications: - - target: {fileID: 3245266833684916619, guid: 5addd2b4f6888c94989b2bd8b076d83c, type: 3} + - target: {fileID: 3245266833684916619, guid: 5addd2b4f6888c94989b2bd8b076d83c, + type: 3} propertyPath: m_RootOrder value: 12 objectReference: {fileID: 0} - - target: {fileID: 3245266833684916619, guid: 5addd2b4f6888c94989b2bd8b076d83c, type: 3} + - target: {fileID: 3245266833684916619, guid: 5addd2b4f6888c94989b2bd8b076d83c, + type: 3} propertyPath: m_LocalPosition.x value: -92.707245 objectReference: {fileID: 0} - - target: {fileID: 3245266833684916619, guid: 5addd2b4f6888c94989b2bd8b076d83c, type: 3} + - target: {fileID: 3245266833684916619, guid: 5addd2b4f6888c94989b2bd8b076d83c, + type: 3} propertyPath: m_LocalPosition.y value: -86.04758 objectReference: {fileID: 0} - - target: {fileID: 3245266833684916619, guid: 5addd2b4f6888c94989b2bd8b076d83c, type: 3} + - target: {fileID: 3245266833684916619, guid: 5addd2b4f6888c94989b2bd8b076d83c, + type: 3} propertyPath: m_LocalPosition.z value: 0.0000076293945 objectReference: {fileID: 0} - - target: {fileID: 3245266833684916619, guid: 5addd2b4f6888c94989b2bd8b076d83c, type: 3} + - target: {fileID: 3245266833684916619, guid: 5addd2b4f6888c94989b2bd8b076d83c, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 3245266833684916619, guid: 5addd2b4f6888c94989b2bd8b076d83c, type: 3} + - target: {fileID: 3245266833684916619, guid: 5addd2b4f6888c94989b2bd8b076d83c, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3245266833684916619, guid: 5addd2b4f6888c94989b2bd8b076d83c, type: 3} + - target: {fileID: 3245266833684916619, guid: 5addd2b4f6888c94989b2bd8b076d83c, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 3245266833684916619, guid: 5addd2b4f6888c94989b2bd8b076d83c, type: 3} + - target: {fileID: 3245266833684916619, guid: 5addd2b4f6888c94989b2bd8b076d83c, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 3245266833684916619, guid: 5addd2b4f6888c94989b2bd8b076d83c, type: 3} + - target: {fileID: 3245266833684916619, guid: 5addd2b4f6888c94989b2bd8b076d83c, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3245266833684916619, guid: 5addd2b4f6888c94989b2bd8b076d83c, type: 3} + - target: {fileID: 3245266833684916619, guid: 5addd2b4f6888c94989b2bd8b076d83c, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3245266833684916619, guid: 5addd2b4f6888c94989b2bd8b076d83c, type: 3} + - target: {fileID: 3245266833684916619, guid: 5addd2b4f6888c94989b2bd8b076d83c, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 7585741428052102613, guid: 5addd2b4f6888c94989b2bd8b076d83c, type: 3} + - target: {fileID: 7585741428052102613, guid: 5addd2b4f6888c94989b2bd8b076d83c, + type: 3} propertyPath: m_Name value: Rogue_Hand_Rt_Boy objectReference: {fileID: 0} - - target: {fileID: 7585741428052102613, guid: 5addd2b4f6888c94989b2bd8b076d83c, type: 3} + - target: {fileID: 7585741428052102613, guid: 5addd2b4f6888c94989b2bd8b076d83c, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -5866,12 +6412,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 5addd2b4f6888c94989b2bd8b076d83c, type: 3} --- !u!1 &5291287836185369125 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 7585741428052102613, guid: 5addd2b4f6888c94989b2bd8b076d83c, type: 3} + m_CorrespondingSourceObject: {fileID: 7585741428052102613, guid: 5addd2b4f6888c94989b2bd8b076d83c, + type: 3} m_PrefabInstance: {fileID: 2318115637226772464} m_PrefabAsset: {fileID: 0} --- !u!4 &946346489784532603 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3245266833684916619, guid: 5addd2b4f6888c94989b2bd8b076d83c, type: 3} + m_CorrespondingSourceObject: {fileID: 3245266833684916619, guid: 5addd2b4f6888c94989b2bd8b076d83c, + type: 3} m_PrefabInstance: {fileID: 2318115637226772464} m_PrefabAsset: {fileID: 0} --- !u!1001 &2341151091306314121 @@ -5881,55 +6429,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 1313590801738418481} m_Modifications: - - target: {fileID: 817025813802805483, guid: 1b7ee039c62e1ae4592949f0c7a68fd4, type: 3} + - target: {fileID: 817025813802805483, guid: 1b7ee039c62e1ae4592949f0c7a68fd4, + type: 3} propertyPath: m_RootOrder value: 15 objectReference: {fileID: 0} - - target: {fileID: 817025813802805483, guid: 1b7ee039c62e1ae4592949f0c7a68fd4, type: 3} + - target: {fileID: 817025813802805483, guid: 1b7ee039c62e1ae4592949f0c7a68fd4, + type: 3} propertyPath: m_LocalPosition.x value: 14.610222 objectReference: {fileID: 0} - - target: {fileID: 817025813802805483, guid: 1b7ee039c62e1ae4592949f0c7a68fd4, type: 3} + - target: {fileID: 817025813802805483, guid: 1b7ee039c62e1ae4592949f0c7a68fd4, + type: 3} propertyPath: m_LocalPosition.y value: -3.3644562 objectReference: {fileID: 0} - - target: {fileID: 817025813802805483, guid: 1b7ee039c62e1ae4592949f0c7a68fd4, type: 3} + - target: {fileID: 817025813802805483, guid: 1b7ee039c62e1ae4592949f0c7a68fd4, + type: 3} propertyPath: m_LocalPosition.z value: 21.182846 objectReference: {fileID: 0} - - target: {fileID: 817025813802805483, guid: 1b7ee039c62e1ae4592949f0c7a68fd4, type: 3} + - target: {fileID: 817025813802805483, guid: 1b7ee039c62e1ae4592949f0c7a68fd4, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 817025813802805483, guid: 1b7ee039c62e1ae4592949f0c7a68fd4, type: 3} + - target: {fileID: 817025813802805483, guid: 1b7ee039c62e1ae4592949f0c7a68fd4, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 817025813802805483, guid: 1b7ee039c62e1ae4592949f0c7a68fd4, type: 3} + - target: {fileID: 817025813802805483, guid: 1b7ee039c62e1ae4592949f0c7a68fd4, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 817025813802805483, guid: 1b7ee039c62e1ae4592949f0c7a68fd4, type: 3} + - target: {fileID: 817025813802805483, guid: 1b7ee039c62e1ae4592949f0c7a68fd4, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 817025813802805483, guid: 1b7ee039c62e1ae4592949f0c7a68fd4, type: 3} + - target: {fileID: 817025813802805483, guid: 1b7ee039c62e1ae4592949f0c7a68fd4, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 817025813802805483, guid: 1b7ee039c62e1ae4592949f0c7a68fd4, type: 3} + - target: {fileID: 817025813802805483, guid: 1b7ee039c62e1ae4592949f0c7a68fd4, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 817025813802805483, guid: 1b7ee039c62e1ae4592949f0c7a68fd4, type: 3} + - target: {fileID: 817025813802805483, guid: 1b7ee039c62e1ae4592949f0c7a68fd4, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 3340434134900626965, guid: 1b7ee039c62e1ae4592949f0c7a68fd4, type: 3} + - target: {fileID: 3340434134900626965, guid: 1b7ee039c62e1ae4592949f0c7a68fd4, + type: 3} propertyPath: m_Name value: Rogue_Weapon_Girl objectReference: {fileID: 0} - - target: {fileID: 3340434134900626965, guid: 1b7ee039c62e1ae4592949f0c7a68fd4, type: 3} + - target: {fileID: 3340434134900626965, guid: 1b7ee039c62e1ae4592949f0c7a68fd4, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -5937,12 +6498,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 1b7ee039c62e1ae4592949f0c7a68fd4, type: 3} --- !u!4 &3110817622780727650 stripped Transform: - m_CorrespondingSourceObject: {fileID: 817025813802805483, guid: 1b7ee039c62e1ae4592949f0c7a68fd4, type: 3} + m_CorrespondingSourceObject: {fileID: 817025813802805483, guid: 1b7ee039c62e1ae4592949f0c7a68fd4, + type: 3} m_PrefabInstance: {fileID: 2341151091306314121} m_PrefabAsset: {fileID: 0} --- !u!1 &1019761467274293148 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 3340434134900626965, guid: 1b7ee039c62e1ae4592949f0c7a68fd4, type: 3} + m_CorrespondingSourceObject: {fileID: 3340434134900626965, guid: 1b7ee039c62e1ae4592949f0c7a68fd4, + type: 3} m_PrefabInstance: {fileID: 2341151091306314121} m_PrefabAsset: {fileID: 0} --- !u!1001 &2436757550069919423 @@ -5952,55 +6515,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 1313590801738418481} m_Modifications: - - target: {fileID: 4492336882625596236, guid: 2ad3a98d28a525148aca777a01a89d3d, type: 3} + - target: {fileID: 4492336882625596236, guid: 2ad3a98d28a525148aca777a01a89d3d, + type: 3} propertyPath: m_RootOrder value: 0 objectReference: {fileID: 0} - - target: {fileID: 4492336882625596236, guid: 2ad3a98d28a525148aca777a01a89d3d, type: 3} + - target: {fileID: 4492336882625596236, guid: 2ad3a98d28a525148aca777a01a89d3d, + type: 3} propertyPath: m_LocalPosition.x value: -92.707245 objectReference: {fileID: 0} - - target: {fileID: 4492336882625596236, guid: 2ad3a98d28a525148aca777a01a89d3d, type: 3} + - target: {fileID: 4492336882625596236, guid: 2ad3a98d28a525148aca777a01a89d3d, + type: 3} propertyPath: m_LocalPosition.y value: -86.04758 objectReference: {fileID: 0} - - target: {fileID: 4492336882625596236, guid: 2ad3a98d28a525148aca777a01a89d3d, type: 3} + - target: {fileID: 4492336882625596236, guid: 2ad3a98d28a525148aca777a01a89d3d, + type: 3} propertyPath: m_LocalPosition.z value: 0.0000076293945 objectReference: {fileID: 0} - - target: {fileID: 4492336882625596236, guid: 2ad3a98d28a525148aca777a01a89d3d, type: 3} + - target: {fileID: 4492336882625596236, guid: 2ad3a98d28a525148aca777a01a89d3d, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 4492336882625596236, guid: 2ad3a98d28a525148aca777a01a89d3d, type: 3} + - target: {fileID: 4492336882625596236, guid: 2ad3a98d28a525148aca777a01a89d3d, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4492336882625596236, guid: 2ad3a98d28a525148aca777a01a89d3d, type: 3} + - target: {fileID: 4492336882625596236, guid: 2ad3a98d28a525148aca777a01a89d3d, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 4492336882625596236, guid: 2ad3a98d28a525148aca777a01a89d3d, type: 3} + - target: {fileID: 4492336882625596236, guid: 2ad3a98d28a525148aca777a01a89d3d, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 4492336882625596236, guid: 2ad3a98d28a525148aca777a01a89d3d, type: 3} + - target: {fileID: 4492336882625596236, guid: 2ad3a98d28a525148aca777a01a89d3d, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4492336882625596236, guid: 2ad3a98d28a525148aca777a01a89d3d, type: 3} + - target: {fileID: 4492336882625596236, guid: 2ad3a98d28a525148aca777a01a89d3d, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4492336882625596236, guid: 2ad3a98d28a525148aca777a01a89d3d, type: 3} + - target: {fileID: 4492336882625596236, guid: 2ad3a98d28a525148aca777a01a89d3d, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4885471469442762161, guid: 2ad3a98d28a525148aca777a01a89d3d, type: 3} + - target: {fileID: 4885471469442762161, guid: 2ad3a98d28a525148aca777a01a89d3d, + type: 3} propertyPath: m_Name value: Archer_Hand_Rt_Boy objectReference: {fileID: 0} - - target: {fileID: 4885471469442762161, guid: 2ad3a98d28a525148aca777a01a89d3d, type: 3} + - target: {fileID: 4885471469442762161, guid: 2ad3a98d28a525148aca777a01a89d3d, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -6008,12 +6584,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 2ad3a98d28a525148aca777a01a89d3d, type: 3} --- !u!1 &7070005443432164110 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 4885471469442762161, guid: 2ad3a98d28a525148aca777a01a89d3d, type: 3} + m_CorrespondingSourceObject: {fileID: 4885471469442762161, guid: 2ad3a98d28a525148aca777a01a89d3d, + type: 3} m_PrefabInstance: {fileID: 2436757550069919423} m_PrefabAsset: {fileID: 0} --- !u!4 &2271756513106454003 stripped Transform: - m_CorrespondingSourceObject: {fileID: 4492336882625596236, guid: 2ad3a98d28a525148aca777a01a89d3d, type: 3} + m_CorrespondingSourceObject: {fileID: 4492336882625596236, guid: 2ad3a98d28a525148aca777a01a89d3d, + type: 3} m_PrefabInstance: {fileID: 2436757550069919423} m_PrefabAsset: {fileID: 0} --- !u!1001 &2455654212074367900 @@ -6023,55 +6601,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 1313590801738418481} m_Modifications: - - target: {fileID: 5330180246001123789, guid: b416c02263c8963429c2dbbdd3420f10, type: 3} + - target: {fileID: 5330180246001123789, guid: b416c02263c8963429c2dbbdd3420f10, + type: 3} propertyPath: m_Name value: Tank_Weapon_Boy objectReference: {fileID: 0} - - target: {fileID: 5330180246001123789, guid: b416c02263c8963429c2dbbdd3420f10, type: 3} + - target: {fileID: 5330180246001123789, guid: b416c02263c8963429c2dbbdd3420f10, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - - target: {fileID: 6459692695757479420, guid: b416c02263c8963429c2dbbdd3420f10, type: 3} + - target: {fileID: 6459692695757479420, guid: b416c02263c8963429c2dbbdd3420f10, + type: 3} propertyPath: m_RootOrder value: 18 objectReference: {fileID: 0} - - target: {fileID: 6459692695757479420, guid: b416c02263c8963429c2dbbdd3420f10, type: 3} + - target: {fileID: 6459692695757479420, guid: b416c02263c8963429c2dbbdd3420f10, + type: 3} propertyPath: m_LocalPosition.x value: 22.374321 objectReference: {fileID: 0} - - target: {fileID: 6459692695757479420, guid: b416c02263c8963429c2dbbdd3420f10, type: 3} + - target: {fileID: 6459692695757479420, guid: b416c02263c8963429c2dbbdd3420f10, + type: 3} propertyPath: m_LocalPosition.y value: -3.6189651 objectReference: {fileID: 0} - - target: {fileID: 6459692695757479420, guid: b416c02263c8963429c2dbbdd3420f10, type: 3} + - target: {fileID: 6459692695757479420, guid: b416c02263c8963429c2dbbdd3420f10, + type: 3} propertyPath: m_LocalPosition.z value: 30.211304 objectReference: {fileID: 0} - - target: {fileID: 6459692695757479420, guid: b416c02263c8963429c2dbbdd3420f10, type: 3} + - target: {fileID: 6459692695757479420, guid: b416c02263c8963429c2dbbdd3420f10, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 6459692695757479420, guid: b416c02263c8963429c2dbbdd3420f10, type: 3} + - target: {fileID: 6459692695757479420, guid: b416c02263c8963429c2dbbdd3420f10, + type: 3} propertyPath: m_LocalRotation.x value: 0.00000022165477 objectReference: {fileID: 0} - - target: {fileID: 6459692695757479420, guid: b416c02263c8963429c2dbbdd3420f10, type: 3} + - target: {fileID: 6459692695757479420, guid: b416c02263c8963429c2dbbdd3420f10, + type: 3} propertyPath: m_LocalRotation.y value: -3.3029135e-15 objectReference: {fileID: 0} - - target: {fileID: 6459692695757479420, guid: b416c02263c8963429c2dbbdd3420f10, type: 3} + - target: {fileID: 6459692695757479420, guid: b416c02263c8963429c2dbbdd3420f10, + type: 3} propertyPath: m_LocalRotation.z value: -0.000000014901161 objectReference: {fileID: 0} - - target: {fileID: 6459692695757479420, guid: b416c02263c8963429c2dbbdd3420f10, type: 3} + - target: {fileID: 6459692695757479420, guid: b416c02263c8963429c2dbbdd3420f10, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 6459692695757479420, guid: b416c02263c8963429c2dbbdd3420f10, type: 3} + - target: {fileID: 6459692695757479420, guid: b416c02263c8963429c2dbbdd3420f10, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 6459692695757479420, guid: b416c02263c8963429c2dbbdd3420f10, type: 3} + - target: {fileID: 6459692695757479420, guid: b416c02263c8963429c2dbbdd3420f10, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} @@ -6079,12 +6670,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: b416c02263c8963429c2dbbdd3420f10, type: 3} --- !u!1 &7776774067743484497 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 5330180246001123789, guid: b416c02263c8963429c2dbbdd3420f10, type: 3} + m_CorrespondingSourceObject: {fileID: 5330180246001123789, guid: b416c02263c8963429c2dbbdd3420f10, + type: 3} m_PrefabInstance: {fileID: 2455654212074367900} m_PrefabAsset: {fileID: 0} --- !u!4 &8912988936132703840 stripped Transform: - m_CorrespondingSourceObject: {fileID: 6459692695757479420, guid: b416c02263c8963429c2dbbdd3420f10, type: 3} + m_CorrespondingSourceObject: {fileID: 6459692695757479420, guid: b416c02263c8963429c2dbbdd3420f10, + type: 3} m_PrefabInstance: {fileID: 2455654212074367900} m_PrefabAsset: {fileID: 0} --- !u!1001 &2595088238063107441 @@ -6094,55 +6687,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 432724711772772565} m_Modifications: - - target: {fileID: 1954680989313797091, guid: d5ce6d09afe6d8d47af7eba5a27706bc, type: 3} + - target: {fileID: 1954680989313797091, guid: d5ce6d09afe6d8d47af7eba5a27706bc, + type: 3} propertyPath: m_Name value: Gear_LS_Archer_Quiver_Boy objectReference: {fileID: 0} - - target: {fileID: 1954680989313797091, guid: d5ce6d09afe6d8d47af7eba5a27706bc, type: 3} + - target: {fileID: 1954680989313797091, guid: d5ce6d09afe6d8d47af7eba5a27706bc, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - - target: {fileID: 6254936495104989614, guid: d5ce6d09afe6d8d47af7eba5a27706bc, type: 3} + - target: {fileID: 6254936495104989614, guid: d5ce6d09afe6d8d47af7eba5a27706bc, + type: 3} propertyPath: m_RootOrder value: 4 objectReference: {fileID: 0} - - target: {fileID: 6254936495104989614, guid: d5ce6d09afe6d8d47af7eba5a27706bc, type: 3} + - target: {fileID: 6254936495104989614, guid: d5ce6d09afe6d8d47af7eba5a27706bc, + type: 3} propertyPath: m_LocalPosition.x value: -53.217487 objectReference: {fileID: 0} - - target: {fileID: 6254936495104989614, guid: d5ce6d09afe6d8d47af7eba5a27706bc, type: 3} + - target: {fileID: 6254936495104989614, guid: d5ce6d09afe6d8d47af7eba5a27706bc, + type: 3} propertyPath: m_LocalPosition.y value: -45.060722 objectReference: {fileID: 0} - - target: {fileID: 6254936495104989614, guid: d5ce6d09afe6d8d47af7eba5a27706bc, type: 3} + - target: {fileID: 6254936495104989614, guid: d5ce6d09afe6d8d47af7eba5a27706bc, + type: 3} propertyPath: m_LocalPosition.z value: -33.072945 objectReference: {fileID: 0} - - target: {fileID: 6254936495104989614, guid: d5ce6d09afe6d8d47af7eba5a27706bc, type: 3} + - target: {fileID: 6254936495104989614, guid: d5ce6d09afe6d8d47af7eba5a27706bc, + type: 3} propertyPath: m_LocalRotation.w value: 0.7071068 objectReference: {fileID: 0} - - target: {fileID: 6254936495104989614, guid: d5ce6d09afe6d8d47af7eba5a27706bc, type: 3} + - target: {fileID: 6254936495104989614, guid: d5ce6d09afe6d8d47af7eba5a27706bc, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 6254936495104989614, guid: d5ce6d09afe6d8d47af7eba5a27706bc, type: 3} + - target: {fileID: 6254936495104989614, guid: d5ce6d09afe6d8d47af7eba5a27706bc, + type: 3} propertyPath: m_LocalRotation.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 6254936495104989614, guid: d5ce6d09afe6d8d47af7eba5a27706bc, type: 3} + - target: {fileID: 6254936495104989614, guid: d5ce6d09afe6d8d47af7eba5a27706bc, + type: 3} propertyPath: m_LocalRotation.z value: 0.7071068 objectReference: {fileID: 0} - - target: {fileID: 6254936495104989614, guid: d5ce6d09afe6d8d47af7eba5a27706bc, type: 3} + - target: {fileID: 6254936495104989614, guid: d5ce6d09afe6d8d47af7eba5a27706bc, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 6254936495104989614, guid: d5ce6d09afe6d8d47af7eba5a27706bc, type: 3} + - target: {fileID: 6254936495104989614, guid: d5ce6d09afe6d8d47af7eba5a27706bc, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 6254936495104989614, guid: d5ce6d09afe6d8d47af7eba5a27706bc, type: 3} + - target: {fileID: 6254936495104989614, guid: d5ce6d09afe6d8d47af7eba5a27706bc, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} @@ -6150,12 +6756,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: d5ce6d09afe6d8d47af7eba5a27706bc, type: 3} --- !u!1 &4549751628748142226 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 1954680989313797091, guid: d5ce6d09afe6d8d47af7eba5a27706bc, type: 3} + m_CorrespondingSourceObject: {fileID: 1954680989313797091, guid: d5ce6d09afe6d8d47af7eba5a27706bc, + type: 3} m_PrefabInstance: {fileID: 2595088238063107441} m_PrefabAsset: {fileID: 0} --- !u!4 &8272660181970035935 stripped Transform: - m_CorrespondingSourceObject: {fileID: 6254936495104989614, guid: d5ce6d09afe6d8d47af7eba5a27706bc, type: 3} + m_CorrespondingSourceObject: {fileID: 6254936495104989614, guid: d5ce6d09afe6d8d47af7eba5a27706bc, + type: 3} m_PrefabInstance: {fileID: 2595088238063107441} m_PrefabAsset: {fileID: 0} --- !u!1001 &2615066747127978517 @@ -6165,55 +6773,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4591219086638572107} m_Modifications: - - target: {fileID: 4958516034356901597, guid: d2e21a9b0aea21f44837d0b7d0375487, type: 3} + - target: {fileID: 4958516034356901597, guid: d2e21a9b0aea21f44837d0b7d0375487, + type: 3} propertyPath: m_RootOrder value: 3 objectReference: {fileID: 0} - - target: {fileID: 4958516034356901597, guid: d2e21a9b0aea21f44837d0b7d0375487, type: 3} + - target: {fileID: 4958516034356901597, guid: d2e21a9b0aea21f44837d0b7d0375487, + type: 3} propertyPath: m_LocalPosition.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 4958516034356901597, guid: d2e21a9b0aea21f44837d0b7d0375487, type: 3} + - target: {fileID: 4958516034356901597, guid: d2e21a9b0aea21f44837d0b7d0375487, + type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4958516034356901597, guid: d2e21a9b0aea21f44837d0b7d0375487, type: 3} + - target: {fileID: 4958516034356901597, guid: d2e21a9b0aea21f44837d0b7d0375487, + type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4958516034356901597, guid: d2e21a9b0aea21f44837d0b7d0375487, type: 3} + - target: {fileID: 4958516034356901597, guid: d2e21a9b0aea21f44837d0b7d0375487, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 4958516034356901597, guid: d2e21a9b0aea21f44837d0b7d0375487, type: 3} + - target: {fileID: 4958516034356901597, guid: d2e21a9b0aea21f44837d0b7d0375487, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4958516034356901597, guid: d2e21a9b0aea21f44837d0b7d0375487, type: 3} + - target: {fileID: 4958516034356901597, guid: d2e21a9b0aea21f44837d0b7d0375487, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 4958516034356901597, guid: d2e21a9b0aea21f44837d0b7d0375487, type: 3} + - target: {fileID: 4958516034356901597, guid: d2e21a9b0aea21f44837d0b7d0375487, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 4958516034356901597, guid: d2e21a9b0aea21f44837d0b7d0375487, type: 3} + - target: {fileID: 4958516034356901597, guid: d2e21a9b0aea21f44837d0b7d0375487, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4958516034356901597, guid: d2e21a9b0aea21f44837d0b7d0375487, type: 3} + - target: {fileID: 4958516034356901597, guid: d2e21a9b0aea21f44837d0b7d0375487, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4958516034356901597, guid: d2e21a9b0aea21f44837d0b7d0375487, type: 3} + - target: {fileID: 4958516034356901597, guid: d2e21a9b0aea21f44837d0b7d0375487, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 5946450302687132905, guid: d2e21a9b0aea21f44837d0b7d0375487, type: 3} + - target: {fileID: 5946450302687132905, guid: d2e21a9b0aea21f44837d0b7d0375487, + type: 3} propertyPath: m_Name value: Tank_Head_Boy objectReference: {fileID: 0} - - target: {fileID: 5946450302687132905, guid: d2e21a9b0aea21f44837d0b7d0375487, type: 3} + - target: {fileID: 5946450302687132905, guid: d2e21a9b0aea21f44837d0b7d0375487, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -6221,12 +6842,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: d2e21a9b0aea21f44837d0b7d0375487, type: 3} --- !u!4 &6961057963755973832 stripped Transform: - m_CorrespondingSourceObject: {fileID: 4958516034356901597, guid: d2e21a9b0aea21f44837d0b7d0375487, type: 3} + m_CorrespondingSourceObject: {fileID: 4958516034356901597, guid: d2e21a9b0aea21f44837d0b7d0375487, + type: 3} m_PrefabInstance: {fileID: 2615066747127978517} m_PrefabAsset: {fileID: 0} --- !u!1 &8560388869878572796 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 5946450302687132905, guid: d2e21a9b0aea21f44837d0b7d0375487, type: 3} + m_CorrespondingSourceObject: {fileID: 5946450302687132905, guid: d2e21a9b0aea21f44837d0b7d0375487, + type: 3} m_PrefabInstance: {fileID: 2615066747127978517} m_PrefabAsset: {fileID: 0} --- !u!1001 &2751892945663168530 @@ -6236,55 +6859,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 5429000291070753441} m_Modifications: - - target: {fileID: 6241857703965964626, guid: 429abba4e95dd014c9b1866b95076ec2, type: 3} + - target: {fileID: 6241857703965964626, guid: 429abba4e95dd014c9b1866b95076ec2, + type: 3} propertyPath: m_RootOrder value: 4 objectReference: {fileID: 0} - - target: {fileID: 6241857703965964626, guid: 429abba4e95dd014c9b1866b95076ec2, type: 3} + - target: {fileID: 6241857703965964626, guid: 429abba4e95dd014c9b1866b95076ec2, + type: 3} propertyPath: m_LocalPosition.x value: 0.00000071525574 objectReference: {fileID: 0} - - target: {fileID: 6241857703965964626, guid: 429abba4e95dd014c9b1866b95076ec2, type: 3} + - target: {fileID: 6241857703965964626, guid: 429abba4e95dd014c9b1866b95076ec2, + type: 3} propertyPath: m_LocalPosition.y value: 148.35704 objectReference: {fileID: 0} - - target: {fileID: 6241857703965964626, guid: 429abba4e95dd014c9b1866b95076ec2, type: 3} + - target: {fileID: 6241857703965964626, guid: 429abba4e95dd014c9b1866b95076ec2, + type: 3} propertyPath: m_LocalPosition.z value: 9.336105 objectReference: {fileID: 0} - - target: {fileID: 6241857703965964626, guid: 429abba4e95dd014c9b1866b95076ec2, type: 3} + - target: {fileID: 6241857703965964626, guid: 429abba4e95dd014c9b1866b95076ec2, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 6241857703965964626, guid: 429abba4e95dd014c9b1866b95076ec2, type: 3} + - target: {fileID: 6241857703965964626, guid: 429abba4e95dd014c9b1866b95076ec2, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 6241857703965964626, guid: 429abba4e95dd014c9b1866b95076ec2, type: 3} + - target: {fileID: 6241857703965964626, guid: 429abba4e95dd014c9b1866b95076ec2, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 6241857703965964626, guid: 429abba4e95dd014c9b1866b95076ec2, type: 3} + - target: {fileID: 6241857703965964626, guid: 429abba4e95dd014c9b1866b95076ec2, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 6241857703965964626, guid: 429abba4e95dd014c9b1866b95076ec2, type: 3} + - target: {fileID: 6241857703965964626, guid: 429abba4e95dd014c9b1866b95076ec2, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 6241857703965964626, guid: 429abba4e95dd014c9b1866b95076ec2, type: 3} + - target: {fileID: 6241857703965964626, guid: 429abba4e95dd014c9b1866b95076ec2, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 6241857703965964626, guid: 429abba4e95dd014c9b1866b95076ec2, type: 3} + - target: {fileID: 6241857703965964626, guid: 429abba4e95dd014c9b1866b95076ec2, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 7394383593515677779, guid: 429abba4e95dd014c9b1866b95076ec2, type: 3} + - target: {fileID: 7394383593515677779, guid: 429abba4e95dd014c9b1866b95076ec2, + type: 3} propertyPath: m_Name value: Archer_Mouth_Girl objectReference: {fileID: 0} - - target: {fileID: 7394383593515677779, guid: 429abba4e95dd014c9b1866b95076ec2, type: 3} + - target: {fileID: 7394383593515677779, guid: 429abba4e95dd014c9b1866b95076ec2, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -6292,12 +6928,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 429abba4e95dd014c9b1866b95076ec2, type: 3} --- !u!4 &8119770840025082176 stripped Transform: - m_CorrespondingSourceObject: {fileID: 6241857703965964626, guid: 429abba4e95dd014c9b1866b95076ec2, type: 3} + m_CorrespondingSourceObject: {fileID: 6241857703965964626, guid: 429abba4e95dd014c9b1866b95076ec2, + type: 3} m_PrefabInstance: {fileID: 2751892945663168530} m_PrefabAsset: {fileID: 0} --- !u!1 &4660821811407251521 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 7394383593515677779, guid: 429abba4e95dd014c9b1866b95076ec2, type: 3} + m_CorrespondingSourceObject: {fileID: 7394383593515677779, guid: 429abba4e95dd014c9b1866b95076ec2, + type: 3} m_PrefabInstance: {fileID: 2751892945663168530} m_PrefabAsset: {fileID: 0} --- !u!1001 &2941724644804634565 @@ -6307,55 +6945,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 867326443869147655} m_Modifications: - - target: {fileID: 6020426494497837068, guid: 3e983bd9d10c8114b8c111165ff2d489, type: 3} + - target: {fileID: 6020426494497837068, guid: 3e983bd9d10c8114b8c111165ff2d489, + type: 3} propertyPath: m_Name value: Empty_Gear_LH_Slot_Rogue_Girl objectReference: {fileID: 0} - - target: {fileID: 6020426494497837068, guid: 3e983bd9d10c8114b8c111165ff2d489, type: 3} + - target: {fileID: 6020426494497837068, guid: 3e983bd9d10c8114b8c111165ff2d489, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - - target: {fileID: 6020426494497837075, guid: 3e983bd9d10c8114b8c111165ff2d489, type: 3} + - target: {fileID: 6020426494497837075, guid: 3e983bd9d10c8114b8c111165ff2d489, + type: 3} propertyPath: m_RootOrder value: 18 objectReference: {fileID: 0} - - target: {fileID: 6020426494497837075, guid: 3e983bd9d10c8114b8c111165ff2d489, type: 3} + - target: {fileID: 6020426494497837075, guid: 3e983bd9d10c8114b8c111165ff2d489, + type: 3} propertyPath: m_LocalPosition.x value: -53.010986 objectReference: {fileID: 0} - - target: {fileID: 6020426494497837075, guid: 3e983bd9d10c8114b8c111165ff2d489, type: 3} + - target: {fileID: 6020426494497837075, guid: 3e983bd9d10c8114b8c111165ff2d489, + type: 3} propertyPath: m_LocalPosition.y value: 103.55913 objectReference: {fileID: 0} - - target: {fileID: 6020426494497837075, guid: 3e983bd9d10c8114b8c111165ff2d489, type: 3} + - target: {fileID: 6020426494497837075, guid: 3e983bd9d10c8114b8c111165ff2d489, + type: 3} propertyPath: m_LocalPosition.z value: 120.0687 objectReference: {fileID: 0} - - target: {fileID: 6020426494497837075, guid: 3e983bd9d10c8114b8c111165ff2d489, type: 3} + - target: {fileID: 6020426494497837075, guid: 3e983bd9d10c8114b8c111165ff2d489, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 6020426494497837075, guid: 3e983bd9d10c8114b8c111165ff2d489, type: 3} + - target: {fileID: 6020426494497837075, guid: 3e983bd9d10c8114b8c111165ff2d489, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 6020426494497837075, guid: 3e983bd9d10c8114b8c111165ff2d489, type: 3} + - target: {fileID: 6020426494497837075, guid: 3e983bd9d10c8114b8c111165ff2d489, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 6020426494497837075, guid: 3e983bd9d10c8114b8c111165ff2d489, type: 3} + - target: {fileID: 6020426494497837075, guid: 3e983bd9d10c8114b8c111165ff2d489, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 6020426494497837075, guid: 3e983bd9d10c8114b8c111165ff2d489, type: 3} + - target: {fileID: 6020426494497837075, guid: 3e983bd9d10c8114b8c111165ff2d489, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 6020426494497837075, guid: 3e983bd9d10c8114b8c111165ff2d489, type: 3} + - target: {fileID: 6020426494497837075, guid: 3e983bd9d10c8114b8c111165ff2d489, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 6020426494497837075, guid: 3e983bd9d10c8114b8c111165ff2d489, type: 3} + - target: {fileID: 6020426494497837075, guid: 3e983bd9d10c8114b8c111165ff2d489, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} @@ -6363,12 +7014,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 3e983bd9d10c8114b8c111165ff2d489, type: 3} --- !u!4 &8890038616910428118 stripped Transform: - m_CorrespondingSourceObject: {fileID: 6020426494497837075, guid: 3e983bd9d10c8114b8c111165ff2d489, type: 3} + m_CorrespondingSourceObject: {fileID: 6020426494497837075, guid: 3e983bd9d10c8114b8c111165ff2d489, + type: 3} m_PrefabInstance: {fileID: 2941724644804634565} m_PrefabAsset: {fileID: 0} --- !u!1 &8890038616910428105 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 6020426494497837068, guid: 3e983bd9d10c8114b8c111165ff2d489, type: 3} + m_CorrespondingSourceObject: {fileID: 6020426494497837068, guid: 3e983bd9d10c8114b8c111165ff2d489, + type: 3} m_PrefabInstance: {fileID: 2941724644804634565} m_PrefabAsset: {fileID: 0} --- !u!1001 &2948118286179281755 @@ -6378,55 +7031,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 867326443869147655} m_Modifications: - - target: {fileID: 1525218823356145763, guid: e7fcc0aad90c3374e97cf06d197dfdc4, type: 3} + - target: {fileID: 1525218823356145763, guid: e7fcc0aad90c3374e97cf06d197dfdc4, + type: 3} propertyPath: m_RootOrder value: 8 objectReference: {fileID: 0} - - target: {fileID: 1525218823356145763, guid: e7fcc0aad90c3374e97cf06d197dfdc4, type: 3} + - target: {fileID: 1525218823356145763, guid: e7fcc0aad90c3374e97cf06d197dfdc4, + type: 3} propertyPath: m_LocalPosition.x value: 92.7072 objectReference: {fileID: 0} - - target: {fileID: 1525218823356145763, guid: e7fcc0aad90c3374e97cf06d197dfdc4, type: 3} + - target: {fileID: 1525218823356145763, guid: e7fcc0aad90c3374e97cf06d197dfdc4, + type: 3} propertyPath: m_LocalPosition.y value: -86.04759 objectReference: {fileID: 0} - - target: {fileID: 1525218823356145763, guid: e7fcc0aad90c3374e97cf06d197dfdc4, type: 3} + - target: {fileID: 1525218823356145763, guid: e7fcc0aad90c3374e97cf06d197dfdc4, + type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 1525218823356145763, guid: e7fcc0aad90c3374e97cf06d197dfdc4, type: 3} + - target: {fileID: 1525218823356145763, guid: e7fcc0aad90c3374e97cf06d197dfdc4, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 1525218823356145763, guid: e7fcc0aad90c3374e97cf06d197dfdc4, type: 3} + - target: {fileID: 1525218823356145763, guid: e7fcc0aad90c3374e97cf06d197dfdc4, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 1525218823356145763, guid: e7fcc0aad90c3374e97cf06d197dfdc4, type: 3} + - target: {fileID: 1525218823356145763, guid: e7fcc0aad90c3374e97cf06d197dfdc4, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 1525218823356145763, guid: e7fcc0aad90c3374e97cf06d197dfdc4, type: 3} + - target: {fileID: 1525218823356145763, guid: e7fcc0aad90c3374e97cf06d197dfdc4, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 1525218823356145763, guid: e7fcc0aad90c3374e97cf06d197dfdc4, type: 3} + - target: {fileID: 1525218823356145763, guid: e7fcc0aad90c3374e97cf06d197dfdc4, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 1525218823356145763, guid: e7fcc0aad90c3374e97cf06d197dfdc4, type: 3} + - target: {fileID: 1525218823356145763, guid: e7fcc0aad90c3374e97cf06d197dfdc4, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 1525218823356145763, guid: e7fcc0aad90c3374e97cf06d197dfdc4, type: 3} + - target: {fileID: 1525218823356145763, guid: e7fcc0aad90c3374e97cf06d197dfdc4, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4341847452759049920, guid: e7fcc0aad90c3374e97cf06d197dfdc4, type: 3} + - target: {fileID: 4341847452759049920, guid: e7fcc0aad90c3374e97cf06d197dfdc4, + type: 3} propertyPath: m_Name value: Rogue_Hand_Lt_Girl objectReference: {fileID: 0} - - target: {fileID: 4341847452759049920, guid: e7fcc0aad90c3374e97cf06d197dfdc4, type: 3} + - target: {fileID: 4341847452759049920, guid: e7fcc0aad90c3374e97cf06d197dfdc4, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -6434,12 +7100,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: e7fcc0aad90c3374e97cf06d197dfdc4, type: 3} --- !u!4 &4450536674265221944 stripped Transform: - m_CorrespondingSourceObject: {fileID: 1525218823356145763, guid: e7fcc0aad90c3374e97cf06d197dfdc4, type: 3} + m_CorrespondingSourceObject: {fileID: 1525218823356145763, guid: e7fcc0aad90c3374e97cf06d197dfdc4, + type: 3} m_PrefabInstance: {fileID: 2948118286179281755} m_PrefabAsset: {fileID: 0} --- !u!1 &1488587798208310683 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 4341847452759049920, guid: e7fcc0aad90c3374e97cf06d197dfdc4, type: 3} + m_CorrespondingSourceObject: {fileID: 4341847452759049920, guid: e7fcc0aad90c3374e97cf06d197dfdc4, + type: 3} m_PrefabInstance: {fileID: 2948118286179281755} m_PrefabAsset: {fileID: 0} --- !u!1001 &2986948834108358761 @@ -6449,55 +7117,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 867326443869147655} m_Modifications: - - target: {fileID: 3950397291363578250, guid: 14ae21b20bfde0a4bbad35fbc18b52c2, type: 3} + - target: {fileID: 3950397291363578250, guid: 14ae21b20bfde0a4bbad35fbc18b52c2, + type: 3} propertyPath: m_Name value: Rogue_Hand_Lt_Boy objectReference: {fileID: 0} - - target: {fileID: 3950397291363578250, guid: 14ae21b20bfde0a4bbad35fbc18b52c2, type: 3} + - target: {fileID: 3950397291363578250, guid: 14ae21b20bfde0a4bbad35fbc18b52c2, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - - target: {fileID: 7022111826865720621, guid: 14ae21b20bfde0a4bbad35fbc18b52c2, type: 3} + - target: {fileID: 7022111826865720621, guid: 14ae21b20bfde0a4bbad35fbc18b52c2, + type: 3} propertyPath: m_RootOrder value: 7 objectReference: {fileID: 0} - - target: {fileID: 7022111826865720621, guid: 14ae21b20bfde0a4bbad35fbc18b52c2, type: 3} + - target: {fileID: 7022111826865720621, guid: 14ae21b20bfde0a4bbad35fbc18b52c2, + type: 3} propertyPath: m_LocalPosition.x value: 92.7072 objectReference: {fileID: 0} - - target: {fileID: 7022111826865720621, guid: 14ae21b20bfde0a4bbad35fbc18b52c2, type: 3} + - target: {fileID: 7022111826865720621, guid: 14ae21b20bfde0a4bbad35fbc18b52c2, + type: 3} propertyPath: m_LocalPosition.y value: -86.04759 objectReference: {fileID: 0} - - target: {fileID: 7022111826865720621, guid: 14ae21b20bfde0a4bbad35fbc18b52c2, type: 3} + - target: {fileID: 7022111826865720621, guid: 14ae21b20bfde0a4bbad35fbc18b52c2, + type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 7022111826865720621, guid: 14ae21b20bfde0a4bbad35fbc18b52c2, type: 3} + - target: {fileID: 7022111826865720621, guid: 14ae21b20bfde0a4bbad35fbc18b52c2, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 7022111826865720621, guid: 14ae21b20bfde0a4bbad35fbc18b52c2, type: 3} + - target: {fileID: 7022111826865720621, guid: 14ae21b20bfde0a4bbad35fbc18b52c2, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 7022111826865720621, guid: 14ae21b20bfde0a4bbad35fbc18b52c2, type: 3} + - target: {fileID: 7022111826865720621, guid: 14ae21b20bfde0a4bbad35fbc18b52c2, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 7022111826865720621, guid: 14ae21b20bfde0a4bbad35fbc18b52c2, type: 3} + - target: {fileID: 7022111826865720621, guid: 14ae21b20bfde0a4bbad35fbc18b52c2, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 7022111826865720621, guid: 14ae21b20bfde0a4bbad35fbc18b52c2, type: 3} + - target: {fileID: 7022111826865720621, guid: 14ae21b20bfde0a4bbad35fbc18b52c2, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 7022111826865720621, guid: 14ae21b20bfde0a4bbad35fbc18b52c2, type: 3} + - target: {fileID: 7022111826865720621, guid: 14ae21b20bfde0a4bbad35fbc18b52c2, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 7022111826865720621, guid: 14ae21b20bfde0a4bbad35fbc18b52c2, type: 3} + - target: {fileID: 7022111826865720621, guid: 14ae21b20bfde0a4bbad35fbc18b52c2, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} @@ -6505,12 +7186,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 14ae21b20bfde0a4bbad35fbc18b52c2, type: 3} --- !u!4 &5188229938178510148 stripped Transform: - m_CorrespondingSourceObject: {fileID: 7022111826865720621, guid: 14ae21b20bfde0a4bbad35fbc18b52c2, type: 3} + m_CorrespondingSourceObject: {fileID: 7022111826865720621, guid: 14ae21b20bfde0a4bbad35fbc18b52c2, + type: 3} m_PrefabInstance: {fileID: 2986948834108358761} m_PrefabAsset: {fileID: 0} --- !u!1 &2279216460699005411 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 3950397291363578250, guid: 14ae21b20bfde0a4bbad35fbc18b52c2, type: 3} + m_CorrespondingSourceObject: {fileID: 3950397291363578250, guid: 14ae21b20bfde0a4bbad35fbc18b52c2, + type: 3} m_PrefabInstance: {fileID: 2986948834108358761} m_PrefabAsset: {fileID: 0} --- !u!1001 &3012945733370250206 @@ -6520,55 +7203,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 5429000291070753441} m_Modifications: - - target: {fileID: 7976863351860651966, guid: 36a7cbf5af4403342968f6676664f30f, type: 3} + - target: {fileID: 7976863351860651966, guid: 36a7cbf5af4403342968f6676664f30f, + type: 3} propertyPath: m_RootOrder value: 3 objectReference: {fileID: 0} - - target: {fileID: 7976863351860651966, guid: 36a7cbf5af4403342968f6676664f30f, type: 3} + - target: {fileID: 7976863351860651966, guid: 36a7cbf5af4403342968f6676664f30f, + type: 3} propertyPath: m_LocalPosition.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 7976863351860651966, guid: 36a7cbf5af4403342968f6676664f30f, type: 3} + - target: {fileID: 7976863351860651966, guid: 36a7cbf5af4403342968f6676664f30f, + type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 7976863351860651966, guid: 36a7cbf5af4403342968f6676664f30f, type: 3} + - target: {fileID: 7976863351860651966, guid: 36a7cbf5af4403342968f6676664f30f, + type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 7976863351860651966, guid: 36a7cbf5af4403342968f6676664f30f, type: 3} + - target: {fileID: 7976863351860651966, guid: 36a7cbf5af4403342968f6676664f30f, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 7976863351860651966, guid: 36a7cbf5af4403342968f6676664f30f, type: 3} + - target: {fileID: 7976863351860651966, guid: 36a7cbf5af4403342968f6676664f30f, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 7976863351860651966, guid: 36a7cbf5af4403342968f6676664f30f, type: 3} + - target: {fileID: 7976863351860651966, guid: 36a7cbf5af4403342968f6676664f30f, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 7976863351860651966, guid: 36a7cbf5af4403342968f6676664f30f, type: 3} + - target: {fileID: 7976863351860651966, guid: 36a7cbf5af4403342968f6676664f30f, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 7976863351860651966, guid: 36a7cbf5af4403342968f6676664f30f, type: 3} + - target: {fileID: 7976863351860651966, guid: 36a7cbf5af4403342968f6676664f30f, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 7976863351860651966, guid: 36a7cbf5af4403342968f6676664f30f, type: 3} + - target: {fileID: 7976863351860651966, guid: 36a7cbf5af4403342968f6676664f30f, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 7976863351860651966, guid: 36a7cbf5af4403342968f6676664f30f, type: 3} + - target: {fileID: 7976863351860651966, guid: 36a7cbf5af4403342968f6676664f30f, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 8677707342626596882, guid: 36a7cbf5af4403342968f6676664f30f, type: 3} + - target: {fileID: 8677707342626596882, guid: 36a7cbf5af4403342968f6676664f30f, + type: 3} propertyPath: m_Name value: Archer_Head_Girl objectReference: {fileID: 0} - - target: {fileID: 8677707342626596882, guid: 36a7cbf5af4403342968f6676664f30f, type: 3} + - target: {fileID: 8677707342626596882, guid: 36a7cbf5af4403342968f6676664f30f, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -6576,12 +7272,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 36a7cbf5af4403342968f6676664f30f, type: 3} --- !u!4 &5144132061449970784 stripped Transform: - m_CorrespondingSourceObject: {fileID: 7976863351860651966, guid: 36a7cbf5af4403342968f6676664f30f, type: 3} + m_CorrespondingSourceObject: {fileID: 7976863351860651966, guid: 36a7cbf5af4403342968f6676664f30f, + type: 3} m_PrefabInstance: {fileID: 3012945733370250206} m_PrefabAsset: {fileID: 0} --- !u!1 &5889946301165906892 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 8677707342626596882, guid: 36a7cbf5af4403342968f6676664f30f, type: 3} + m_CorrespondingSourceObject: {fileID: 8677707342626596882, guid: 36a7cbf5af4403342968f6676664f30f, + type: 3} m_PrefabInstance: {fileID: 3012945733370250206} m_PrefabAsset: {fileID: 0} --- !u!1001 &3102062703919275870 @@ -6591,55 +7289,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 1313590801738418481} m_Modifications: - - target: {fileID: 6204630729657250600, guid: c7e31d49191942841934cc5934d5afc8, type: 3} + - target: {fileID: 6204630729657250600, guid: c7e31d49191942841934cc5934d5afc8, + type: 3} propertyPath: m_Name value: Archer_Hand_Rt_Girl objectReference: {fileID: 0} - - target: {fileID: 6204630729657250600, guid: c7e31d49191942841934cc5934d5afc8, type: 3} + - target: {fileID: 6204630729657250600, guid: c7e31d49191942841934cc5934d5afc8, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - - target: {fileID: 7291111733323637110, guid: c7e31d49191942841934cc5934d5afc8, type: 3} + - target: {fileID: 7291111733323637110, guid: c7e31d49191942841934cc5934d5afc8, + type: 3} propertyPath: m_RootOrder value: 1 objectReference: {fileID: 0} - - target: {fileID: 7291111733323637110, guid: c7e31d49191942841934cc5934d5afc8, type: 3} + - target: {fileID: 7291111733323637110, guid: c7e31d49191942841934cc5934d5afc8, + type: 3} propertyPath: m_LocalPosition.x value: -92.707245 objectReference: {fileID: 0} - - target: {fileID: 7291111733323637110, guid: c7e31d49191942841934cc5934d5afc8, type: 3} + - target: {fileID: 7291111733323637110, guid: c7e31d49191942841934cc5934d5afc8, + type: 3} propertyPath: m_LocalPosition.y value: -86.04758 objectReference: {fileID: 0} - - target: {fileID: 7291111733323637110, guid: c7e31d49191942841934cc5934d5afc8, type: 3} + - target: {fileID: 7291111733323637110, guid: c7e31d49191942841934cc5934d5afc8, + type: 3} propertyPath: m_LocalPosition.z value: 0.0000076293945 objectReference: {fileID: 0} - - target: {fileID: 7291111733323637110, guid: c7e31d49191942841934cc5934d5afc8, type: 3} + - target: {fileID: 7291111733323637110, guid: c7e31d49191942841934cc5934d5afc8, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 7291111733323637110, guid: c7e31d49191942841934cc5934d5afc8, type: 3} + - target: {fileID: 7291111733323637110, guid: c7e31d49191942841934cc5934d5afc8, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 7291111733323637110, guid: c7e31d49191942841934cc5934d5afc8, type: 3} + - target: {fileID: 7291111733323637110, guid: c7e31d49191942841934cc5934d5afc8, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 7291111733323637110, guid: c7e31d49191942841934cc5934d5afc8, type: 3} + - target: {fileID: 7291111733323637110, guid: c7e31d49191942841934cc5934d5afc8, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 7291111733323637110, guid: c7e31d49191942841934cc5934d5afc8, type: 3} + - target: {fileID: 7291111733323637110, guid: c7e31d49191942841934cc5934d5afc8, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 7291111733323637110, guid: c7e31d49191942841934cc5934d5afc8, type: 3} + - target: {fileID: 7291111733323637110, guid: c7e31d49191942841934cc5934d5afc8, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 7291111733323637110, guid: c7e31d49191942841934cc5934d5afc8, type: 3} + - target: {fileID: 7291111733323637110, guid: c7e31d49191942841934cc5934d5afc8, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} @@ -6647,12 +7358,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: c7e31d49191942841934cc5934d5afc8, type: 3} --- !u!1 &9013949562123578486 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 6204630729657250600, guid: c7e31d49191942841934cc5934d5afc8, type: 3} + m_CorrespondingSourceObject: {fileID: 6204630729657250600, guid: c7e31d49191942841934cc5934d5afc8, + type: 3} m_PrefabInstance: {fileID: 3102062703919275870} m_PrefabAsset: {fileID: 0} --- !u!4 &5630492280745410088 stripped Transform: - m_CorrespondingSourceObject: {fileID: 7291111733323637110, guid: c7e31d49191942841934cc5934d5afc8, type: 3} + m_CorrespondingSourceObject: {fileID: 7291111733323637110, guid: c7e31d49191942841934cc5934d5afc8, + type: 3} m_PrefabInstance: {fileID: 3102062703919275870} m_PrefabAsset: {fileID: 0} --- !u!1001 &3455867881234608439 @@ -6662,59 +7375,73 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 1313590801738418481} m_Modifications: - - target: {fileID: 513651104027861187, guid: 870b6f3cba9788341babda2ff9b0b592, type: 3} + - target: {fileID: 513651104027861187, guid: 870b6f3cba9788341babda2ff9b0b592, + type: 3} propertyPath: m_Materials.Array.data[0] value: objectReference: {fileID: 2100000, guid: fbe92527c02bb6043831341dd1bcf20e, type: 2} - - target: {fileID: 1743154203849973970, guid: 870b6f3cba9788341babda2ff9b0b592, type: 3} + - target: {fileID: 1743154203849973970, guid: 870b6f3cba9788341babda2ff9b0b592, + type: 3} propertyPath: m_Name value: Rogue_Hand_Rt_Girl objectReference: {fileID: 0} - - target: {fileID: 1743154203849973970, guid: 870b6f3cba9788341babda2ff9b0b592, type: 3} + - target: {fileID: 1743154203849973970, guid: 870b6f3cba9788341babda2ff9b0b592, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - - target: {fileID: 3820040150773180028, guid: 870b6f3cba9788341babda2ff9b0b592, type: 3} + - target: {fileID: 3820040150773180028, guid: 870b6f3cba9788341babda2ff9b0b592, + type: 3} propertyPath: m_RootOrder value: 13 objectReference: {fileID: 0} - - target: {fileID: 3820040150773180028, guid: 870b6f3cba9788341babda2ff9b0b592, type: 3} + - target: {fileID: 3820040150773180028, guid: 870b6f3cba9788341babda2ff9b0b592, + type: 3} propertyPath: m_LocalPosition.x value: -92.707245 objectReference: {fileID: 0} - - target: {fileID: 3820040150773180028, guid: 870b6f3cba9788341babda2ff9b0b592, type: 3} + - target: {fileID: 3820040150773180028, guid: 870b6f3cba9788341babda2ff9b0b592, + type: 3} propertyPath: m_LocalPosition.y value: -86.04758 objectReference: {fileID: 0} - - target: {fileID: 3820040150773180028, guid: 870b6f3cba9788341babda2ff9b0b592, type: 3} + - target: {fileID: 3820040150773180028, guid: 870b6f3cba9788341babda2ff9b0b592, + type: 3} propertyPath: m_LocalPosition.z value: 0.0000076293945 objectReference: {fileID: 0} - - target: {fileID: 3820040150773180028, guid: 870b6f3cba9788341babda2ff9b0b592, type: 3} + - target: {fileID: 3820040150773180028, guid: 870b6f3cba9788341babda2ff9b0b592, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 3820040150773180028, guid: 870b6f3cba9788341babda2ff9b0b592, type: 3} + - target: {fileID: 3820040150773180028, guid: 870b6f3cba9788341babda2ff9b0b592, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3820040150773180028, guid: 870b6f3cba9788341babda2ff9b0b592, type: 3} + - target: {fileID: 3820040150773180028, guid: 870b6f3cba9788341babda2ff9b0b592, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 3820040150773180028, guid: 870b6f3cba9788341babda2ff9b0b592, type: 3} + - target: {fileID: 3820040150773180028, guid: 870b6f3cba9788341babda2ff9b0b592, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 3820040150773180028, guid: 870b6f3cba9788341babda2ff9b0b592, type: 3} + - target: {fileID: 3820040150773180028, guid: 870b6f3cba9788341babda2ff9b0b592, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3820040150773180028, guid: 870b6f3cba9788341babda2ff9b0b592, type: 3} + - target: {fileID: 3820040150773180028, guid: 870b6f3cba9788341babda2ff9b0b592, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3820040150773180028, guid: 870b6f3cba9788341babda2ff9b0b592, type: 3} + - target: {fileID: 3820040150773180028, guid: 870b6f3cba9788341babda2ff9b0b592, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} @@ -6722,12 +7449,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 870b6f3cba9788341babda2ff9b0b592, type: 3} --- !u!1 &4018715018557084133 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 1743154203849973970, guid: 870b6f3cba9788341babda2ff9b0b592, type: 3} + m_CorrespondingSourceObject: {fileID: 1743154203849973970, guid: 870b6f3cba9788341babda2ff9b0b592, + type: 3} m_PrefabInstance: {fileID: 3455867881234608439} m_PrefabAsset: {fileID: 0} --- !u!4 &1942801588057478987 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3820040150773180028, guid: 870b6f3cba9788341babda2ff9b0b592, type: 3} + m_CorrespondingSourceObject: {fileID: 3820040150773180028, guid: 870b6f3cba9788341babda2ff9b0b592, + type: 3} m_PrefabInstance: {fileID: 3455867881234608439} m_PrefabAsset: {fileID: 0} --- !u!1001 &3511020148782931454 @@ -6737,107 +7466,133 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4076098699203836966} m_Modifications: - - target: {fileID: 339808626682580166, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, type: 3} + - target: {fileID: 339808626682580166, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, + type: 3} propertyPath: m_RootOrder value: 1 objectReference: {fileID: 0} - - target: {fileID: 339808626682580166, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, type: 3} + - target: {fileID: 339808626682580166, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, + type: 3} propertyPath: m_LocalPosition.x value: 6.34 objectReference: {fileID: 0} - - target: {fileID: 339808626682580166, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, type: 3} + - target: {fileID: 339808626682580166, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, + type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 339808626682580166, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, type: 3} + - target: {fileID: 339808626682580166, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, + type: 3} propertyPath: m_LocalPosition.z value: -1.35 objectReference: {fileID: 0} - - target: {fileID: 339808626682580166, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, type: 3} + - target: {fileID: 339808626682580166, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 339808626682580166, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, type: 3} + - target: {fileID: 339808626682580166, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 339808626682580166, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, type: 3} + - target: {fileID: 339808626682580166, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 339808626682580166, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, type: 3} + - target: {fileID: 339808626682580166, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 339808626682580166, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, type: 3} + - target: {fileID: 339808626682580166, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 339808626682580166, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, type: 3} + - target: {fileID: 339808626682580166, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 339808626682580166, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, type: 3} + - target: {fileID: 339808626682580166, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 2553773835187233826, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, type: 3} + - target: {fileID: 2553773835187233826, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, + type: 3} propertyPath: m_Name value: Archer_Torso_Girl objectReference: {fileID: 0} - - target: {fileID: 2553773835187233826, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, type: 3} + - target: {fileID: 2553773835187233826, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - - target: {fileID: 7509385438916429888, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, type: 3} + - target: {fileID: 7509385438916429888, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, + type: 3} propertyPath: m_RootBone value: objectReference: {fileID: 3335427089582007770} - - target: {fileID: 7509385438916429888, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, type: 3} + - target: {fileID: 7509385438916429888, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, + type: 3} propertyPath: m_Bones.Array.data[0] value: objectReference: {fileID: 8498953204661844621} - - target: {fileID: 7509385438916429888, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, type: 3} + - target: {fileID: 7509385438916429888, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, + type: 3} propertyPath: m_Bones.Array.data[1] value: objectReference: {fileID: 7738679323201646151} - - target: {fileID: 7509385438916429888, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, type: 3} + - target: {fileID: 7509385438916429888, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, + type: 3} propertyPath: m_Bones.Array.data[2] value: objectReference: {fileID: 1323154135719462797} - - target: {fileID: 7509385438916429888, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, type: 3} + - target: {fileID: 7509385438916429888, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, + type: 3} propertyPath: m_Bones.Array.data[3] value: objectReference: {fileID: 587759327283076790} - - target: {fileID: 7509385438916429888, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, type: 3} + - target: {fileID: 7509385438916429888, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, + type: 3} propertyPath: m_Bones.Array.data[4] value: objectReference: {fileID: 7527788754810788122} - - target: {fileID: 7509385438916429888, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, type: 3} + - target: {fileID: 7509385438916429888, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, + type: 3} propertyPath: m_Bones.Array.data[5] value: objectReference: {fileID: 5606035577626729233} - - target: {fileID: 7509385438916429888, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, type: 3} + - target: {fileID: 7509385438916429888, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, + type: 3} propertyPath: m_Bones.Array.data[6] value: objectReference: {fileID: 8247809510486077625} - - target: {fileID: 7509385438916429888, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, type: 3} + - target: {fileID: 7509385438916429888, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, + type: 3} propertyPath: m_Bones.Array.data[7] value: objectReference: {fileID: 1055663782864180258} - - target: {fileID: 7509385438916429888, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, type: 3} + - target: {fileID: 7509385438916429888, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, + type: 3} propertyPath: m_Bones.Array.data[8] value: objectReference: {fileID: 432724711772772565} - - target: {fileID: 7509385438916429888, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, type: 3} + - target: {fileID: 7509385438916429888, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, + type: 3} propertyPath: m_Bones.Array.data[9] value: objectReference: {fileID: 3335427089582007770} - - target: {fileID: 7509385438916429888, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, type: 3} + - target: {fileID: 7509385438916429888, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, + type: 3} propertyPath: m_Bones.Array.data[10] value: objectReference: {fileID: 7079448961355668684} - - target: {fileID: 7509385438916429888, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, type: 3} + - target: {fileID: 7509385438916429888, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, + type: 3} propertyPath: m_Bones.Array.data[11] value: objectReference: {fileID: 600274334256031679} @@ -6845,12 +7600,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, type: 3} --- !u!4 &3751102787190346040 stripped Transform: - m_CorrespondingSourceObject: {fileID: 339808626682580166, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, type: 3} + m_CorrespondingSourceObject: {fileID: 339808626682580166, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, + type: 3} m_PrefabInstance: {fileID: 3511020148782931454} m_PrefabAsset: {fileID: 0} --- !u!1 &1425800485796297180 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 2553773835187233826, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, type: 3} + m_CorrespondingSourceObject: {fileID: 2553773835187233826, guid: 32e0bb1b65649ad49949dd7f98d2e0cb, + type: 3} m_PrefabInstance: {fileID: 3511020148782931454} m_PrefabAsset: {fileID: 0} --- !u!1001 &3533321356218339958 @@ -6860,55 +7617,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 600274334256031679} m_Modifications: - - target: {fileID: 1484627001885488624, guid: df7bee6905d5b984294b747e2e4b96f5, type: 3} + - target: {fileID: 1484627001885488624, guid: df7bee6905d5b984294b747e2e4b96f5, + type: 3} propertyPath: m_RootOrder value: 9 objectReference: {fileID: 0} - - target: {fileID: 1484627001885488624, guid: df7bee6905d5b984294b747e2e4b96f5, type: 3} + - target: {fileID: 1484627001885488624, guid: df7bee6905d5b984294b747e2e4b96f5, + type: 3} propertyPath: m_LocalPosition.x value: 17.70731 objectReference: {fileID: 0} - - target: {fileID: 1484627001885488624, guid: df7bee6905d5b984294b747e2e4b96f5, type: 3} + - target: {fileID: 1484627001885488624, guid: df7bee6905d5b984294b747e2e4b96f5, + type: 3} propertyPath: m_LocalPosition.y value: -86.047585 objectReference: {fileID: 0} - - target: {fileID: 1484627001885488624, guid: df7bee6905d5b984294b747e2e4b96f5, type: 3} + - target: {fileID: 1484627001885488624, guid: df7bee6905d5b984294b747e2e4b96f5, + type: 3} propertyPath: m_LocalPosition.z value: 0.0000076293945 objectReference: {fileID: 0} - - target: {fileID: 1484627001885488624, guid: df7bee6905d5b984294b747e2e4b96f5, type: 3} + - target: {fileID: 1484627001885488624, guid: df7bee6905d5b984294b747e2e4b96f5, + type: 3} propertyPath: m_LocalRotation.w value: -6.123234e-17 objectReference: {fileID: 0} - - target: {fileID: 1484627001885488624, guid: df7bee6905d5b984294b747e2e4b96f5, type: 3} + - target: {fileID: 1484627001885488624, guid: df7bee6905d5b984294b747e2e4b96f5, + type: 3} propertyPath: m_LocalRotation.x value: 6.123234e-17 objectReference: {fileID: 0} - - target: {fileID: 1484627001885488624, guid: df7bee6905d5b984294b747e2e4b96f5, type: 3} + - target: {fileID: 1484627001885488624, guid: df7bee6905d5b984294b747e2e4b96f5, + type: 3} propertyPath: m_LocalRotation.y value: 1 objectReference: {fileID: 0} - - target: {fileID: 1484627001885488624, guid: df7bee6905d5b984294b747e2e4b96f5, type: 3} + - target: {fileID: 1484627001885488624, guid: df7bee6905d5b984294b747e2e4b96f5, + type: 3} propertyPath: m_LocalRotation.z value: -6.123234e-17 objectReference: {fileID: 0} - - target: {fileID: 1484627001885488624, guid: df7bee6905d5b984294b747e2e4b96f5, type: 3} + - target: {fileID: 1484627001885488624, guid: df7bee6905d5b984294b747e2e4b96f5, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 1484627001885488624, guid: df7bee6905d5b984294b747e2e4b96f5, type: 3} + - target: {fileID: 1484627001885488624, guid: df7bee6905d5b984294b747e2e4b96f5, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 1484627001885488624, guid: df7bee6905d5b984294b747e2e4b96f5, type: 3} + - target: {fileID: 1484627001885488624, guid: df7bee6905d5b984294b747e2e4b96f5, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 7772395031962356811, guid: df7bee6905d5b984294b747e2e4b96f5, type: 3} + - target: {fileID: 7772395031962356811, guid: df7bee6905d5b984294b747e2e4b96f5, + type: 3} propertyPath: m_Name value: Gear_RS_Tank_ShoulderPad_Girl objectReference: {fileID: 0} - - target: {fileID: 7772395031962356811, guid: df7bee6905d5b984294b747e2e4b96f5, type: 3} + - target: {fileID: 7772395031962356811, guid: df7bee6905d5b984294b747e2e4b96f5, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -6916,12 +7686,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: df7bee6905d5b984294b747e2e4b96f5, type: 3} --- !u!1 &6545411513259302461 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 7772395031962356811, guid: df7bee6905d5b984294b747e2e4b96f5, type: 3} + m_CorrespondingSourceObject: {fileID: 7772395031962356811, guid: df7bee6905d5b984294b747e2e4b96f5, + type: 3} m_PrefabInstance: {fileID: 3533321356218339958} m_PrefabAsset: {fileID: 0} --- !u!4 &2707390608332580742 stripped Transform: - m_CorrespondingSourceObject: {fileID: 1484627001885488624, guid: df7bee6905d5b984294b747e2e4b96f5, type: 3} + m_CorrespondingSourceObject: {fileID: 1484627001885488624, guid: df7bee6905d5b984294b747e2e4b96f5, + type: 3} m_PrefabInstance: {fileID: 3533321356218339958} m_PrefabAsset: {fileID: 0} --- !u!1001 &3537299510406037756 @@ -6931,55 +7703,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 3241768821857961484} m_Modifications: - - target: {fileID: 158891113777832030, guid: 84a4d4f112390454b966e659f4416ca1, type: 3} + - target: {fileID: 158891113777832030, guid: 84a4d4f112390454b966e659f4416ca1, + type: 3} propertyPath: m_Name value: Rogue_Eyes_Girl objectReference: {fileID: 0} - - target: {fileID: 158891113777832030, guid: 84a4d4f112390454b966e659f4416ca1, type: 3} + - target: {fileID: 158891113777832030, guid: 84a4d4f112390454b966e659f4416ca1, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - - target: {fileID: 6027840460203598174, guid: 84a4d4f112390454b966e659f4416ca1, type: 3} + - target: {fileID: 6027840460203598174, guid: 84a4d4f112390454b966e659f4416ca1, + type: 3} propertyPath: m_RootOrder value: 1 objectReference: {fileID: 0} - - target: {fileID: 6027840460203598174, guid: 84a4d4f112390454b966e659f4416ca1, type: 3} + - target: {fileID: 6027840460203598174, guid: 84a4d4f112390454b966e659f4416ca1, + type: 3} propertyPath: m_LocalPosition.x value: -0.0000011920929 objectReference: {fileID: 0} - - target: {fileID: 6027840460203598174, guid: 84a4d4f112390454b966e659f4416ca1, type: 3} + - target: {fileID: 6027840460203598174, guid: 84a4d4f112390454b966e659f4416ca1, + type: 3} propertyPath: m_LocalPosition.y value: 148.35704 objectReference: {fileID: 0} - - target: {fileID: 6027840460203598174, guid: 84a4d4f112390454b966e659f4416ca1, type: 3} + - target: {fileID: 6027840460203598174, guid: 84a4d4f112390454b966e659f4416ca1, + type: 3} propertyPath: m_LocalPosition.z value: 9.308052 objectReference: {fileID: 0} - - target: {fileID: 6027840460203598174, guid: 84a4d4f112390454b966e659f4416ca1, type: 3} + - target: {fileID: 6027840460203598174, guid: 84a4d4f112390454b966e659f4416ca1, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 6027840460203598174, guid: 84a4d4f112390454b966e659f4416ca1, type: 3} + - target: {fileID: 6027840460203598174, guid: 84a4d4f112390454b966e659f4416ca1, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 6027840460203598174, guid: 84a4d4f112390454b966e659f4416ca1, type: 3} + - target: {fileID: 6027840460203598174, guid: 84a4d4f112390454b966e659f4416ca1, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 6027840460203598174, guid: 84a4d4f112390454b966e659f4416ca1, type: 3} + - target: {fileID: 6027840460203598174, guid: 84a4d4f112390454b966e659f4416ca1, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 6027840460203598174, guid: 84a4d4f112390454b966e659f4416ca1, type: 3} + - target: {fileID: 6027840460203598174, guid: 84a4d4f112390454b966e659f4416ca1, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 6027840460203598174, guid: 84a4d4f112390454b966e659f4416ca1, type: 3} + - target: {fileID: 6027840460203598174, guid: 84a4d4f112390454b966e659f4416ca1, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 6027840460203598174, guid: 84a4d4f112390454b966e659f4416ca1, type: 3} + - target: {fileID: 6027840460203598174, guid: 84a4d4f112390454b966e659f4416ca1, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} @@ -6987,12 +7772,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 84a4d4f112390454b966e659f4416ca1, type: 3} --- !u!4 &7111240848729432482 stripped Transform: - m_CorrespondingSourceObject: {fileID: 6027840460203598174, guid: 84a4d4f112390454b966e659f4416ca1, type: 3} + m_CorrespondingSourceObject: {fileID: 6027840460203598174, guid: 84a4d4f112390454b966e659f4416ca1, + type: 3} m_PrefabInstance: {fileID: 3537299510406037756} m_PrefabAsset: {fileID: 0} --- !u!1 &3684926949754134690 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 158891113777832030, guid: 84a4d4f112390454b966e659f4416ca1, type: 3} + m_CorrespondingSourceObject: {fileID: 158891113777832030, guid: 84a4d4f112390454b966e659f4416ca1, + type: 3} m_PrefabInstance: {fileID: 3537299510406037756} m_PrefabAsset: {fileID: 0} --- !u!1001 &3544655747293794831 @@ -7002,55 +7789,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 1459343620667739469} m_Modifications: - - target: {fileID: 1214956448934411486, guid: dec3713b55346784a84debdb68770c2c, type: 3} + - target: {fileID: 1214956448934411486, guid: dec3713b55346784a84debdb68770c2c, + type: 3} propertyPath: m_Name value: Mage_Eyes_Boy objectReference: {fileID: 0} - - target: {fileID: 1214956448934411486, guid: dec3713b55346784a84debdb68770c2c, type: 3} + - target: {fileID: 1214956448934411486, guid: dec3713b55346784a84debdb68770c2c, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - - target: {fileID: 5755377848072173704, guid: dec3713b55346784a84debdb68770c2c, type: 3} + - target: {fileID: 5755377848072173704, guid: dec3713b55346784a84debdb68770c2c, + type: 3} propertyPath: m_RootOrder value: 1 objectReference: {fileID: 0} - - target: {fileID: 5755377848072173704, guid: dec3713b55346784a84debdb68770c2c, type: 3} + - target: {fileID: 5755377848072173704, guid: dec3713b55346784a84debdb68770c2c, + type: 3} propertyPath: m_LocalPosition.x value: 0.00007176399 objectReference: {fileID: 0} - - target: {fileID: 5755377848072173704, guid: dec3713b55346784a84debdb68770c2c, type: 3} + - target: {fileID: 5755377848072173704, guid: dec3713b55346784a84debdb68770c2c, + type: 3} propertyPath: m_LocalPosition.y value: 148.35703 objectReference: {fileID: 0} - - target: {fileID: 5755377848072173704, guid: dec3713b55346784a84debdb68770c2c, type: 3} + - target: {fileID: 5755377848072173704, guid: dec3713b55346784a84debdb68770c2c, + type: 3} propertyPath: m_LocalPosition.z value: 9.308073 objectReference: {fileID: 0} - - target: {fileID: 5755377848072173704, guid: dec3713b55346784a84debdb68770c2c, type: 3} + - target: {fileID: 5755377848072173704, guid: dec3713b55346784a84debdb68770c2c, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 5755377848072173704, guid: dec3713b55346784a84debdb68770c2c, type: 3} + - target: {fileID: 5755377848072173704, guid: dec3713b55346784a84debdb68770c2c, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 5755377848072173704, guid: dec3713b55346784a84debdb68770c2c, type: 3} + - target: {fileID: 5755377848072173704, guid: dec3713b55346784a84debdb68770c2c, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 5755377848072173704, guid: dec3713b55346784a84debdb68770c2c, type: 3} + - target: {fileID: 5755377848072173704, guid: dec3713b55346784a84debdb68770c2c, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 5755377848072173704, guid: dec3713b55346784a84debdb68770c2c, type: 3} + - target: {fileID: 5755377848072173704, guid: dec3713b55346784a84debdb68770c2c, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 5755377848072173704, guid: dec3713b55346784a84debdb68770c2c, type: 3} + - target: {fileID: 5755377848072173704, guid: dec3713b55346784a84debdb68770c2c, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 5755377848072173704, guid: dec3713b55346784a84debdb68770c2c, type: 3} + - target: {fileID: 5755377848072173704, guid: dec3713b55346784a84debdb68770c2c, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} @@ -7058,12 +7858,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: dec3713b55346784a84debdb68770c2c, type: 3} --- !u!1 &2444682650979430097 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 1214956448934411486, guid: dec3713b55346784a84debdb68770c2c, type: 3} + m_CorrespondingSourceObject: {fileID: 1214956448934411486, guid: dec3713b55346784a84debdb68770c2c, + type: 3} m_PrefabInstance: {fileID: 3544655747293794831} m_PrefabAsset: {fileID: 0} --- !u!4 &9146265725839616647 stripped Transform: - m_CorrespondingSourceObject: {fileID: 5755377848072173704, guid: dec3713b55346784a84debdb68770c2c, type: 3} + m_CorrespondingSourceObject: {fileID: 5755377848072173704, guid: dec3713b55346784a84debdb68770c2c, + type: 3} m_PrefabInstance: {fileID: 3544655747293794831} m_PrefabAsset: {fileID: 0} --- !u!1001 &3568093513386432236 @@ -7073,55 +7875,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 867326443869147655} m_Modifications: - - target: {fileID: 3486737413932836516, guid: b9a1a9f4bc888a24d809051694f49a12, type: 3} + - target: {fileID: 3486737413932836516, guid: b9a1a9f4bc888a24d809051694f49a12, + type: 3} propertyPath: m_Name value: Mage_Hand_Lt1_Boy objectReference: {fileID: 0} - - target: {fileID: 3486737413932836516, guid: b9a1a9f4bc888a24d809051694f49a12, type: 3} + - target: {fileID: 3486737413932836516, guid: b9a1a9f4bc888a24d809051694f49a12, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - - target: {fileID: 6260362284390267161, guid: b9a1a9f4bc888a24d809051694f49a12, type: 3} + - target: {fileID: 6260362284390267161, guid: b9a1a9f4bc888a24d809051694f49a12, + type: 3} propertyPath: m_RootOrder value: 5 objectReference: {fileID: 0} - - target: {fileID: 6260362284390267161, guid: b9a1a9f4bc888a24d809051694f49a12, type: 3} + - target: {fileID: 6260362284390267161, guid: b9a1a9f4bc888a24d809051694f49a12, + type: 3} propertyPath: m_LocalPosition.x value: -14.748636 objectReference: {fileID: 0} - - target: {fileID: 6260362284390267161, guid: b9a1a9f4bc888a24d809051694f49a12, type: 3} + - target: {fileID: 6260362284390267161, guid: b9a1a9f4bc888a24d809051694f49a12, + type: 3} propertyPath: m_LocalPosition.y value: -3.1288147 objectReference: {fileID: 0} - - target: {fileID: 6260362284390267161, guid: b9a1a9f4bc888a24d809051694f49a12, type: 3} + - target: {fileID: 6260362284390267161, guid: b9a1a9f4bc888a24d809051694f49a12, + type: 3} propertyPath: m_LocalPosition.z value: -1.3515778 objectReference: {fileID: 0} - - target: {fileID: 6260362284390267161, guid: b9a1a9f4bc888a24d809051694f49a12, type: 3} + - target: {fileID: 6260362284390267161, guid: b9a1a9f4bc888a24d809051694f49a12, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 6260362284390267161, guid: b9a1a9f4bc888a24d809051694f49a12, type: 3} + - target: {fileID: 6260362284390267161, guid: b9a1a9f4bc888a24d809051694f49a12, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 6260362284390267161, guid: b9a1a9f4bc888a24d809051694f49a12, type: 3} + - target: {fileID: 6260362284390267161, guid: b9a1a9f4bc888a24d809051694f49a12, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 6260362284390267161, guid: b9a1a9f4bc888a24d809051694f49a12, type: 3} + - target: {fileID: 6260362284390267161, guid: b9a1a9f4bc888a24d809051694f49a12, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 6260362284390267161, guid: b9a1a9f4bc888a24d809051694f49a12, type: 3} + - target: {fileID: 6260362284390267161, guid: b9a1a9f4bc888a24d809051694f49a12, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 6260362284390267161, guid: b9a1a9f4bc888a24d809051694f49a12, type: 3} + - target: {fileID: 6260362284390267161, guid: b9a1a9f4bc888a24d809051694f49a12, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 6260362284390267161, guid: b9a1a9f4bc888a24d809051694f49a12, type: 3} + - target: {fileID: 6260362284390267161, guid: b9a1a9f4bc888a24d809051694f49a12, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} @@ -7129,12 +7944,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: b9a1a9f4bc888a24d809051694f49a12, type: 3} --- !u!4 &7450410024420225013 stripped Transform: - m_CorrespondingSourceObject: {fileID: 6260362284390267161, guid: b9a1a9f4bc888a24d809051694f49a12, type: 3} + m_CorrespondingSourceObject: {fileID: 6260362284390267161, guid: b9a1a9f4bc888a24d809051694f49a12, + type: 3} m_PrefabInstance: {fileID: 3568093513386432236} m_PrefabAsset: {fileID: 0} --- !u!1 &137090481304760392 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 3486737413932836516, guid: b9a1a9f4bc888a24d809051694f49a12, type: 3} + m_CorrespondingSourceObject: {fileID: 3486737413932836516, guid: b9a1a9f4bc888a24d809051694f49a12, + type: 3} m_PrefabInstance: {fileID: 3568093513386432236} m_PrefabAsset: {fileID: 0} --- !u!1001 &3691710672244189991 @@ -7144,55 +7961,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 1206277181869945479} m_Modifications: - - target: {fileID: 328842330913013315, guid: df5ee76ae42145e418fa85121f35c1fc, type: 3} + - target: {fileID: 328842330913013315, guid: df5ee76ae42145e418fa85121f35c1fc, + type: 3} propertyPath: m_Name value: Archer_Hair_Boy objectReference: {fileID: 0} - - target: {fileID: 328842330913013315, guid: df5ee76ae42145e418fa85121f35c1fc, type: 3} + - target: {fileID: 328842330913013315, guid: df5ee76ae42145e418fa85121f35c1fc, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - - target: {fileID: 3706971812536504914, guid: df5ee76ae42145e418fa85121f35c1fc, type: 3} + - target: {fileID: 3706971812536504914, guid: df5ee76ae42145e418fa85121f35c1fc, + type: 3} propertyPath: m_RootOrder value: 2 objectReference: {fileID: 0} - - target: {fileID: 3706971812536504914, guid: df5ee76ae42145e418fa85121f35c1fc, type: 3} + - target: {fileID: 3706971812536504914, guid: df5ee76ae42145e418fa85121f35c1fc, + type: 3} propertyPath: m_LocalPosition.x value: -0.000006198883 objectReference: {fileID: 0} - - target: {fileID: 3706971812536504914, guid: df5ee76ae42145e418fa85121f35c1fc, type: 3} + - target: {fileID: 3706971812536504914, guid: df5ee76ae42145e418fa85121f35c1fc, + type: 3} propertyPath: m_LocalPosition.y value: 0.000006198883 objectReference: {fileID: 0} - - target: {fileID: 3706971812536504914, guid: df5ee76ae42145e418fa85121f35c1fc, type: 3} + - target: {fileID: 3706971812536504914, guid: df5ee76ae42145e418fa85121f35c1fc, + type: 3} propertyPath: m_LocalPosition.z value: 0.0000029802322 objectReference: {fileID: 0} - - target: {fileID: 3706971812536504914, guid: df5ee76ae42145e418fa85121f35c1fc, type: 3} + - target: {fileID: 3706971812536504914, guid: df5ee76ae42145e418fa85121f35c1fc, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 3706971812536504914, guid: df5ee76ae42145e418fa85121f35c1fc, type: 3} + - target: {fileID: 3706971812536504914, guid: df5ee76ae42145e418fa85121f35c1fc, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3706971812536504914, guid: df5ee76ae42145e418fa85121f35c1fc, type: 3} + - target: {fileID: 3706971812536504914, guid: df5ee76ae42145e418fa85121f35c1fc, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 3706971812536504914, guid: df5ee76ae42145e418fa85121f35c1fc, type: 3} + - target: {fileID: 3706971812536504914, guid: df5ee76ae42145e418fa85121f35c1fc, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 3706971812536504914, guid: df5ee76ae42145e418fa85121f35c1fc, type: 3} + - target: {fileID: 3706971812536504914, guid: df5ee76ae42145e418fa85121f35c1fc, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3706971812536504914, guid: df5ee76ae42145e418fa85121f35c1fc, type: 3} + - target: {fileID: 3706971812536504914, guid: df5ee76ae42145e418fa85121f35c1fc, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3706971812536504914, guid: df5ee76ae42145e418fa85121f35c1fc, type: 3} + - target: {fileID: 3706971812536504914, guid: df5ee76ae42145e418fa85121f35c1fc, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} @@ -7200,12 +8030,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: df5ee76ae42145e418fa85121f35c1fc, type: 3} --- !u!4 &20926408318384501 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3706971812536504914, guid: df5ee76ae42145e418fa85121f35c1fc, type: 3} + m_CorrespondingSourceObject: {fileID: 3706971812536504914, guid: df5ee76ae42145e418fa85121f35c1fc, + type: 3} m_PrefabInstance: {fileID: 3691710672244189991} m_PrefabAsset: {fileID: 0} --- !u!1 &4011545185422693732 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 328842330913013315, guid: df5ee76ae42145e418fa85121f35c1fc, type: 3} + m_CorrespondingSourceObject: {fileID: 328842330913013315, guid: df5ee76ae42145e418fa85121f35c1fc, + type: 3} m_PrefabInstance: {fileID: 3691710672244189991} m_PrefabAsset: {fileID: 0} --- !u!1001 &3771532297100308735 @@ -7215,55 +8047,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 867326443869147655} m_Modifications: - - target: {fileID: 3820746449368866964, guid: ed24796831d4621449bac9de9c857e31, type: 3} + - target: {fileID: 3820746449368866964, guid: ed24796831d4621449bac9de9c857e31, + type: 3} propertyPath: m_RootOrder value: 16 objectReference: {fileID: 0} - - target: {fileID: 3820746449368866964, guid: ed24796831d4621449bac9de9c857e31, type: 3} + - target: {fileID: 3820746449368866964, guid: ed24796831d4621449bac9de9c857e31, + type: 3} propertyPath: m_LocalPosition.x value: -53.010986 objectReference: {fileID: 0} - - target: {fileID: 3820746449368866964, guid: ed24796831d4621449bac9de9c857e31, type: 3} + - target: {fileID: 3820746449368866964, guid: ed24796831d4621449bac9de9c857e31, + type: 3} propertyPath: m_LocalPosition.y value: 103.55913 objectReference: {fileID: 0} - - target: {fileID: 3820746449368866964, guid: ed24796831d4621449bac9de9c857e31, type: 3} + - target: {fileID: 3820746449368866964, guid: ed24796831d4621449bac9de9c857e31, + type: 3} propertyPath: m_LocalPosition.z value: 120.0687 objectReference: {fileID: 0} - - target: {fileID: 3820746449368866964, guid: ed24796831d4621449bac9de9c857e31, type: 3} + - target: {fileID: 3820746449368866964, guid: ed24796831d4621449bac9de9c857e31, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 3820746449368866964, guid: ed24796831d4621449bac9de9c857e31, type: 3} + - target: {fileID: 3820746449368866964, guid: ed24796831d4621449bac9de9c857e31, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 3820746449368866964, guid: ed24796831d4621449bac9de9c857e31, type: 3} + - target: {fileID: 3820746449368866964, guid: ed24796831d4621449bac9de9c857e31, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 3820746449368866964, guid: ed24796831d4621449bac9de9c857e31, type: 3} + - target: {fileID: 3820746449368866964, guid: ed24796831d4621449bac9de9c857e31, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 3820746449368866964, guid: ed24796831d4621449bac9de9c857e31, type: 3} + - target: {fileID: 3820746449368866964, guid: ed24796831d4621449bac9de9c857e31, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3820746449368866964, guid: ed24796831d4621449bac9de9c857e31, type: 3} + - target: {fileID: 3820746449368866964, guid: ed24796831d4621449bac9de9c857e31, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3820746449368866964, guid: ed24796831d4621449bac9de9c857e31, type: 3} + - target: {fileID: 3820746449368866964, guid: ed24796831d4621449bac9de9c857e31, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 3820746449368866965, guid: ed24796831d4621449bac9de9c857e31, type: 3} + - target: {fileID: 3820746449368866965, guid: ed24796831d4621449bac9de9c857e31, + type: 3} propertyPath: m_Name value: Empty_Gear_LH_Slot_Mage_Girl objectReference: {fileID: 0} - - target: {fileID: 3820746449368866965, guid: ed24796831d4621449bac9de9c857e31, type: 3} + - target: {fileID: 3820746449368866965, guid: ed24796831d4621449bac9de9c857e31, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -7271,12 +8116,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: ed24796831d4621449bac9de9c857e31, type: 3} --- !u!4 &94901061590241387 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3820746449368866964, guid: ed24796831d4621449bac9de9c857e31, type: 3} + m_CorrespondingSourceObject: {fileID: 3820746449368866964, guid: ed24796831d4621449bac9de9c857e31, + type: 3} m_PrefabInstance: {fileID: 3771532297100308735} m_PrefabAsset: {fileID: 0} --- !u!1 &94901061590241386 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 3820746449368866965, guid: ed24796831d4621449bac9de9c857e31, type: 3} + m_CorrespondingSourceObject: {fileID: 3820746449368866965, guid: ed24796831d4621449bac9de9c857e31, + type: 3} m_PrefabInstance: {fileID: 3771532297100308735} m_PrefabAsset: {fileID: 0} --- !u!1001 &3810611455252489291 @@ -7286,55 +8133,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 8543977087292382539} m_Modifications: - - target: {fileID: 1772050867187502108, guid: 5c5c94297c522fa42be4650a0281e729, type: 3} + - target: {fileID: 1772050867187502108, guid: 5c5c94297c522fa42be4650a0281e729, + type: 3} propertyPath: m_RootOrder value: 2 objectReference: {fileID: 0} - - target: {fileID: 1772050867187502108, guid: 5c5c94297c522fa42be4650a0281e729, type: 3} + - target: {fileID: 1772050867187502108, guid: 5c5c94297c522fa42be4650a0281e729, + type: 3} propertyPath: m_LocalPosition.x value: -0.000030755997 objectReference: {fileID: 0} - - target: {fileID: 1772050867187502108, guid: 5c5c94297c522fa42be4650a0281e729, type: 3} + - target: {fileID: 1772050867187502108, guid: 5c5c94297c522fa42be4650a0281e729, + type: 3} propertyPath: m_LocalPosition.y value: 169.33167 objectReference: {fileID: 0} - - target: {fileID: 1772050867187502108, guid: 5c5c94297c522fa42be4650a0281e729, type: 3} + - target: {fileID: 1772050867187502108, guid: 5c5c94297c522fa42be4650a0281e729, + type: 3} propertyPath: m_LocalPosition.z value: -25.155985 objectReference: {fileID: 0} - - target: {fileID: 1772050867187502108, guid: 5c5c94297c522fa42be4650a0281e729, type: 3} + - target: {fileID: 1772050867187502108, guid: 5c5c94297c522fa42be4650a0281e729, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 1772050867187502108, guid: 5c5c94297c522fa42be4650a0281e729, type: 3} + - target: {fileID: 1772050867187502108, guid: 5c5c94297c522fa42be4650a0281e729, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 1772050867187502108, guid: 5c5c94297c522fa42be4650a0281e729, type: 3} + - target: {fileID: 1772050867187502108, guid: 5c5c94297c522fa42be4650a0281e729, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 1772050867187502108, guid: 5c5c94297c522fa42be4650a0281e729, type: 3} + - target: {fileID: 1772050867187502108, guid: 5c5c94297c522fa42be4650a0281e729, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 1772050867187502108, guid: 5c5c94297c522fa42be4650a0281e729, type: 3} + - target: {fileID: 1772050867187502108, guid: 5c5c94297c522fa42be4650a0281e729, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 1772050867187502108, guid: 5c5c94297c522fa42be4650a0281e729, type: 3} + - target: {fileID: 1772050867187502108, guid: 5c5c94297c522fa42be4650a0281e729, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 1772050867187502108, guid: 5c5c94297c522fa42be4650a0281e729, type: 3} + - target: {fileID: 1772050867187502108, guid: 5c5c94297c522fa42be4650a0281e729, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4206587401245074754, guid: 5c5c94297c522fa42be4650a0281e729, type: 3} + - target: {fileID: 4206587401245074754, guid: 5c5c94297c522fa42be4650a0281e729, + type: 3} propertyPath: m_Name value: Mage_Hair_Girl objectReference: {fileID: 0} - - target: {fileID: 4206587401245074754, guid: 5c5c94297c522fa42be4650a0281e729, type: 3} + - target: {fileID: 4206587401245074754, guid: 5c5c94297c522fa42be4650a0281e729, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -7342,12 +8202,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 5c5c94297c522fa42be4650a0281e729, type: 3} --- !u!4 &3203629653117478999 stripped Transform: - m_CorrespondingSourceObject: {fileID: 1772050867187502108, guid: 5c5c94297c522fa42be4650a0281e729, type: 3} + m_CorrespondingSourceObject: {fileID: 1772050867187502108, guid: 5c5c94297c522fa42be4650a0281e729, + type: 3} m_PrefabInstance: {fileID: 3810611455252489291} m_PrefabAsset: {fileID: 0} --- !u!1 &1045624674039578889 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 4206587401245074754, guid: 5c5c94297c522fa42be4650a0281e729, type: 3} + m_CorrespondingSourceObject: {fileID: 4206587401245074754, guid: 5c5c94297c522fa42be4650a0281e729, + type: 3} m_PrefabInstance: {fileID: 3810611455252489291} m_PrefabAsset: {fileID: 0} --- !u!1001 &3812512034361450423 @@ -7357,55 +8219,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 8543977087292382539} m_Modifications: - - target: {fileID: 7190898396763878457, guid: a55c8b86b1bf5bd4fa89f9140086a295, type: 3} + - target: {fileID: 7190898396763878457, guid: a55c8b86b1bf5bd4fa89f9140086a295, + type: 3} propertyPath: m_RootOrder value: 3 objectReference: {fileID: 0} - - target: {fileID: 7190898396763878457, guid: a55c8b86b1bf5bd4fa89f9140086a295, type: 3} + - target: {fileID: 7190898396763878457, guid: a55c8b86b1bf5bd4fa89f9140086a295, + type: 3} propertyPath: m_LocalPosition.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 7190898396763878457, guid: a55c8b86b1bf5bd4fa89f9140086a295, type: 3} + - target: {fileID: 7190898396763878457, guid: a55c8b86b1bf5bd4fa89f9140086a295, + type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 7190898396763878457, guid: a55c8b86b1bf5bd4fa89f9140086a295, type: 3} + - target: {fileID: 7190898396763878457, guid: a55c8b86b1bf5bd4fa89f9140086a295, + type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 7190898396763878457, guid: a55c8b86b1bf5bd4fa89f9140086a295, type: 3} + - target: {fileID: 7190898396763878457, guid: a55c8b86b1bf5bd4fa89f9140086a295, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 7190898396763878457, guid: a55c8b86b1bf5bd4fa89f9140086a295, type: 3} + - target: {fileID: 7190898396763878457, guid: a55c8b86b1bf5bd4fa89f9140086a295, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 7190898396763878457, guid: a55c8b86b1bf5bd4fa89f9140086a295, type: 3} + - target: {fileID: 7190898396763878457, guid: a55c8b86b1bf5bd4fa89f9140086a295, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 7190898396763878457, guid: a55c8b86b1bf5bd4fa89f9140086a295, type: 3} + - target: {fileID: 7190898396763878457, guid: a55c8b86b1bf5bd4fa89f9140086a295, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 7190898396763878457, guid: a55c8b86b1bf5bd4fa89f9140086a295, type: 3} + - target: {fileID: 7190898396763878457, guid: a55c8b86b1bf5bd4fa89f9140086a295, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 7190898396763878457, guid: a55c8b86b1bf5bd4fa89f9140086a295, type: 3} + - target: {fileID: 7190898396763878457, guid: a55c8b86b1bf5bd4fa89f9140086a295, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 7190898396763878457, guid: a55c8b86b1bf5bd4fa89f9140086a295, type: 3} + - target: {fileID: 7190898396763878457, guid: a55c8b86b1bf5bd4fa89f9140086a295, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 8749081912841995886, guid: a55c8b86b1bf5bd4fa89f9140086a295, type: 3} + - target: {fileID: 8749081912841995886, guid: a55c8b86b1bf5bd4fa89f9140086a295, + type: 3} propertyPath: m_Name value: Mage_Head_Girl objectReference: {fileID: 0} - - target: {fileID: 8749081912841995886, guid: a55c8b86b1bf5bd4fa89f9140086a295, type: 3} + - target: {fileID: 8749081912841995886, guid: a55c8b86b1bf5bd4fa89f9140086a295, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -7413,12 +8288,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: a55c8b86b1bf5bd4fa89f9140086a295, type: 3} --- !u!4 &6279126741471292302 stripped Transform: - m_CorrespondingSourceObject: {fileID: 7190898396763878457, guid: a55c8b86b1bf5bd4fa89f9140086a295, type: 3} + m_CorrespondingSourceObject: {fileID: 7190898396763878457, guid: a55c8b86b1bf5bd4fa89f9140086a295, + type: 3} m_PrefabInstance: {fileID: 3812512034361450423} m_PrefabAsset: {fileID: 0} --- !u!1 &5585089004425583065 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 8749081912841995886, guid: a55c8b86b1bf5bd4fa89f9140086a295, type: 3} + m_CorrespondingSourceObject: {fileID: 8749081912841995886, guid: a55c8b86b1bf5bd4fa89f9140086a295, + type: 3} m_PrefabInstance: {fileID: 3812512034361450423} m_PrefabAsset: {fileID: 0} --- !u!1001 &3855452106780114726 @@ -7428,55 +8305,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4591219086638572107} m_Modifications: - - target: {fileID: 3513077010049599875, guid: d5095bf0b22bdc64a961c16588678071, type: 3} + - target: {fileID: 3513077010049599875, guid: d5095bf0b22bdc64a961c16588678071, + type: 3} propertyPath: m_RootOrder value: 1 objectReference: {fileID: 0} - - target: {fileID: 3513077010049599875, guid: d5095bf0b22bdc64a961c16588678071, type: 3} + - target: {fileID: 3513077010049599875, guid: d5095bf0b22bdc64a961c16588678071, + type: 3} propertyPath: m_LocalPosition.x value: -0.0000011920929 objectReference: {fileID: 0} - - target: {fileID: 3513077010049599875, guid: d5095bf0b22bdc64a961c16588678071, type: 3} + - target: {fileID: 3513077010049599875, guid: d5095bf0b22bdc64a961c16588678071, + type: 3} propertyPath: m_LocalPosition.y value: 148.35704 objectReference: {fileID: 0} - - target: {fileID: 3513077010049599875, guid: d5095bf0b22bdc64a961c16588678071, type: 3} + - target: {fileID: 3513077010049599875, guid: d5095bf0b22bdc64a961c16588678071, + type: 3} propertyPath: m_LocalPosition.z value: 9.308052 objectReference: {fileID: 0} - - target: {fileID: 3513077010049599875, guid: d5095bf0b22bdc64a961c16588678071, type: 3} + - target: {fileID: 3513077010049599875, guid: d5095bf0b22bdc64a961c16588678071, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 3513077010049599875, guid: d5095bf0b22bdc64a961c16588678071, type: 3} + - target: {fileID: 3513077010049599875, guid: d5095bf0b22bdc64a961c16588678071, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3513077010049599875, guid: d5095bf0b22bdc64a961c16588678071, type: 3} + - target: {fileID: 3513077010049599875, guid: d5095bf0b22bdc64a961c16588678071, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 3513077010049599875, guid: d5095bf0b22bdc64a961c16588678071, type: 3} + - target: {fileID: 3513077010049599875, guid: d5095bf0b22bdc64a961c16588678071, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 3513077010049599875, guid: d5095bf0b22bdc64a961c16588678071, type: 3} + - target: {fileID: 3513077010049599875, guid: d5095bf0b22bdc64a961c16588678071, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3513077010049599875, guid: d5095bf0b22bdc64a961c16588678071, type: 3} + - target: {fileID: 3513077010049599875, guid: d5095bf0b22bdc64a961c16588678071, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3513077010049599875, guid: d5095bf0b22bdc64a961c16588678071, type: 3} + - target: {fileID: 3513077010049599875, guid: d5095bf0b22bdc64a961c16588678071, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 9187548002642268252, guid: d5095bf0b22bdc64a961c16588678071, type: 3} + - target: {fileID: 9187548002642268252, guid: d5095bf0b22bdc64a961c16588678071, + type: 3} propertyPath: m_Name value: Tank_Eyes_Boy objectReference: {fileID: 0} - - target: {fileID: 9187548002642268252, guid: d5095bf0b22bdc64a961c16588678071, type: 3} + - target: {fileID: 9187548002642268252, guid: d5095bf0b22bdc64a961c16588678071, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -7484,12 +8374,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: d5095bf0b22bdc64a961c16588678071, type: 3} --- !u!4 &378766014406588069 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3513077010049599875, guid: d5095bf0b22bdc64a961c16588678071, type: 3} + m_CorrespondingSourceObject: {fileID: 3513077010049599875, guid: d5095bf0b22bdc64a961c16588678071, + type: 3} m_PrefabInstance: {fileID: 3855452106780114726} m_PrefabAsset: {fileID: 0} --- !u!1 &5332802336953692026 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 9187548002642268252, guid: d5095bf0b22bdc64a961c16588678071, type: 3} + m_CorrespondingSourceObject: {fileID: 9187548002642268252, guid: d5095bf0b22bdc64a961c16588678071, + type: 3} m_PrefabInstance: {fileID: 3855452106780114726} m_PrefabAsset: {fileID: 0} --- !u!1001 &3861401900322865902 @@ -7499,55 +8391,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4591219086638572107} m_Modifications: - - target: {fileID: 6194745680868109641, guid: 2ea4539a3858d5148937ef0a7e36bd95, type: 3} + - target: {fileID: 6194745680868109641, guid: 2ea4539a3858d5148937ef0a7e36bd95, + type: 3} propertyPath: m_RootOrder value: 0 objectReference: {fileID: 0} - - target: {fileID: 6194745680868109641, guid: 2ea4539a3858d5148937ef0a7e36bd95, type: 3} + - target: {fileID: 6194745680868109641, guid: 2ea4539a3858d5148937ef0a7e36bd95, + type: 3} propertyPath: m_LocalPosition.x value: -0.00000071525574 objectReference: {fileID: 0} - - target: {fileID: 6194745680868109641, guid: 2ea4539a3858d5148937ef0a7e36bd95, type: 3} + - target: {fileID: 6194745680868109641, guid: 2ea4539a3858d5148937ef0a7e36bd95, + type: 3} propertyPath: m_LocalPosition.y value: 131.48633 objectReference: {fileID: 0} - - target: {fileID: 6194745680868109641, guid: 2ea4539a3858d5148937ef0a7e36bd95, type: 3} + - target: {fileID: 6194745680868109641, guid: 2ea4539a3858d5148937ef0a7e36bd95, + type: 3} propertyPath: m_LocalPosition.z value: -6.742197 objectReference: {fileID: 0} - - target: {fileID: 6194745680868109641, guid: 2ea4539a3858d5148937ef0a7e36bd95, type: 3} + - target: {fileID: 6194745680868109641, guid: 2ea4539a3858d5148937ef0a7e36bd95, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 6194745680868109641, guid: 2ea4539a3858d5148937ef0a7e36bd95, type: 3} + - target: {fileID: 6194745680868109641, guid: 2ea4539a3858d5148937ef0a7e36bd95, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 6194745680868109641, guid: 2ea4539a3858d5148937ef0a7e36bd95, type: 3} + - target: {fileID: 6194745680868109641, guid: 2ea4539a3858d5148937ef0a7e36bd95, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 6194745680868109641, guid: 2ea4539a3858d5148937ef0a7e36bd95, type: 3} + - target: {fileID: 6194745680868109641, guid: 2ea4539a3858d5148937ef0a7e36bd95, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 6194745680868109641, guid: 2ea4539a3858d5148937ef0a7e36bd95, type: 3} + - target: {fileID: 6194745680868109641, guid: 2ea4539a3858d5148937ef0a7e36bd95, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 6194745680868109641, guid: 2ea4539a3858d5148937ef0a7e36bd95, type: 3} + - target: {fileID: 6194745680868109641, guid: 2ea4539a3858d5148937ef0a7e36bd95, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 6194745680868109641, guid: 2ea4539a3858d5148937ef0a7e36bd95, type: 3} + - target: {fileID: 6194745680868109641, guid: 2ea4539a3858d5148937ef0a7e36bd95, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 6225253164200502289, guid: 2ea4539a3858d5148937ef0a7e36bd95, type: 3} + - target: {fileID: 6225253164200502289, guid: 2ea4539a3858d5148937ef0a7e36bd95, + type: 3} propertyPath: m_Name value: Tank_Ears_Boy objectReference: {fileID: 0} - - target: {fileID: 6225253164200502289, guid: 2ea4539a3858d5148937ef0a7e36bd95, type: 3} + - target: {fileID: 6225253164200502289, guid: 2ea4539a3858d5148937ef0a7e36bd95, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -7555,12 +8460,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 2ea4539a3858d5148937ef0a7e36bd95, type: 3} --- !u!4 &6948593469493620647 stripped Transform: - m_CorrespondingSourceObject: {fileID: 6194745680868109641, guid: 2ea4539a3858d5148937ef0a7e36bd95, type: 3} + m_CorrespondingSourceObject: {fileID: 6194745680868109641, guid: 2ea4539a3858d5148937ef0a7e36bd95, + type: 3} m_PrefabInstance: {fileID: 3861401900322865902} m_PrefabAsset: {fileID: 0} --- !u!1 &7202098395057448703 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 6225253164200502289, guid: 2ea4539a3858d5148937ef0a7e36bd95, type: 3} + m_CorrespondingSourceObject: {fileID: 6225253164200502289, guid: 2ea4539a3858d5148937ef0a7e36bd95, + type: 3} m_PrefabInstance: {fileID: 3861401900322865902} m_PrefabAsset: {fileID: 0} --- !u!1001 &3878248926818027304 @@ -7570,107 +8477,133 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4076098699203836966} m_Modifications: - - target: {fileID: 405751281216187910, guid: 9229fe18666e4f64aa7648e5dc956e44, type: 3} + - target: {fileID: 405751281216187910, guid: 9229fe18666e4f64aa7648e5dc956e44, + type: 3} propertyPath: m_Name value: Tank_Torso_Girl objectReference: {fileID: 0} - - target: {fileID: 405751281216187910, guid: 9229fe18666e4f64aa7648e5dc956e44, type: 3} + - target: {fileID: 405751281216187910, guid: 9229fe18666e4f64aa7648e5dc956e44, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - - target: {fileID: 3958143234325365264, guid: 9229fe18666e4f64aa7648e5dc956e44, type: 3} + - target: {fileID: 3958143234325365264, guid: 9229fe18666e4f64aa7648e5dc956e44, + type: 3} propertyPath: m_RootOrder value: 12 objectReference: {fileID: 0} - - target: {fileID: 3958143234325365264, guid: 9229fe18666e4f64aa7648e5dc956e44, type: 3} + - target: {fileID: 3958143234325365264, guid: 9229fe18666e4f64aa7648e5dc956e44, + type: 3} propertyPath: m_LocalPosition.x value: 6.34 objectReference: {fileID: 0} - - target: {fileID: 3958143234325365264, guid: 9229fe18666e4f64aa7648e5dc956e44, type: 3} + - target: {fileID: 3958143234325365264, guid: 9229fe18666e4f64aa7648e5dc956e44, + type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3958143234325365264, guid: 9229fe18666e4f64aa7648e5dc956e44, type: 3} + - target: {fileID: 3958143234325365264, guid: 9229fe18666e4f64aa7648e5dc956e44, + type: 3} propertyPath: m_LocalPosition.z value: -1.35 objectReference: {fileID: 0} - - target: {fileID: 3958143234325365264, guid: 9229fe18666e4f64aa7648e5dc956e44, type: 3} + - target: {fileID: 3958143234325365264, guid: 9229fe18666e4f64aa7648e5dc956e44, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 3958143234325365264, guid: 9229fe18666e4f64aa7648e5dc956e44, type: 3} + - target: {fileID: 3958143234325365264, guid: 9229fe18666e4f64aa7648e5dc956e44, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 3958143234325365264, guid: 9229fe18666e4f64aa7648e5dc956e44, type: 3} + - target: {fileID: 3958143234325365264, guid: 9229fe18666e4f64aa7648e5dc956e44, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 3958143234325365264, guid: 9229fe18666e4f64aa7648e5dc956e44, type: 3} + - target: {fileID: 3958143234325365264, guid: 9229fe18666e4f64aa7648e5dc956e44, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 3958143234325365264, guid: 9229fe18666e4f64aa7648e5dc956e44, type: 3} + - target: {fileID: 3958143234325365264, guid: 9229fe18666e4f64aa7648e5dc956e44, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3958143234325365264, guid: 9229fe18666e4f64aa7648e5dc956e44, type: 3} + - target: {fileID: 3958143234325365264, guid: 9229fe18666e4f64aa7648e5dc956e44, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3958143234325365264, guid: 9229fe18666e4f64aa7648e5dc956e44, type: 3} + - target: {fileID: 3958143234325365264, guid: 9229fe18666e4f64aa7648e5dc956e44, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4333061663706910602, guid: 9229fe18666e4f64aa7648e5dc956e44, type: 3} + - target: {fileID: 4333061663706910602, guid: 9229fe18666e4f64aa7648e5dc956e44, + type: 3} propertyPath: m_RootBone value: objectReference: {fileID: 3335427089582007770} - - target: {fileID: 4333061663706910602, guid: 9229fe18666e4f64aa7648e5dc956e44, type: 3} + - target: {fileID: 4333061663706910602, guid: 9229fe18666e4f64aa7648e5dc956e44, + type: 3} propertyPath: m_Bones.Array.data[0] value: objectReference: {fileID: 432724711772772565} - - target: {fileID: 4333061663706910602, guid: 9229fe18666e4f64aa7648e5dc956e44, type: 3} + - target: {fileID: 4333061663706910602, guid: 9229fe18666e4f64aa7648e5dc956e44, + type: 3} propertyPath: m_Bones.Array.data[1] value: objectReference: {fileID: 3335427089582007770} - - target: {fileID: 4333061663706910602, guid: 9229fe18666e4f64aa7648e5dc956e44, type: 3} + - target: {fileID: 4333061663706910602, guid: 9229fe18666e4f64aa7648e5dc956e44, + type: 3} propertyPath: m_Bones.Array.data[2] value: objectReference: {fileID: 7738679323201646151} - - target: {fileID: 4333061663706910602, guid: 9229fe18666e4f64aa7648e5dc956e44, type: 3} + - target: {fileID: 4333061663706910602, guid: 9229fe18666e4f64aa7648e5dc956e44, + type: 3} propertyPath: m_Bones.Array.data[3] value: objectReference: {fileID: 600274334256031679} - - target: {fileID: 4333061663706910602, guid: 9229fe18666e4f64aa7648e5dc956e44, type: 3} + - target: {fileID: 4333061663706910602, guid: 9229fe18666e4f64aa7648e5dc956e44, + type: 3} propertyPath: m_Bones.Array.data[4] value: objectReference: {fileID: 7079448961355668684} - - target: {fileID: 4333061663706910602, guid: 9229fe18666e4f64aa7648e5dc956e44, type: 3} + - target: {fileID: 4333061663706910602, guid: 9229fe18666e4f64aa7648e5dc956e44, + type: 3} propertyPath: m_Bones.Array.data[5] value: objectReference: {fileID: 5606035577626729233} - - target: {fileID: 4333061663706910602, guid: 9229fe18666e4f64aa7648e5dc956e44, type: 3} + - target: {fileID: 4333061663706910602, guid: 9229fe18666e4f64aa7648e5dc956e44, + type: 3} propertyPath: m_Bones.Array.data[6] value: objectReference: {fileID: 8498953204661844621} - - target: {fileID: 4333061663706910602, guid: 9229fe18666e4f64aa7648e5dc956e44, type: 3} + - target: {fileID: 4333061663706910602, guid: 9229fe18666e4f64aa7648e5dc956e44, + type: 3} propertyPath: m_Bones.Array.data[7] value: objectReference: {fileID: 1323154135719462797} - - target: {fileID: 4333061663706910602, guid: 9229fe18666e4f64aa7648e5dc956e44, type: 3} + - target: {fileID: 4333061663706910602, guid: 9229fe18666e4f64aa7648e5dc956e44, + type: 3} propertyPath: m_Bones.Array.data[8] value: objectReference: {fileID: 587759327283076790} - - target: {fileID: 4333061663706910602, guid: 9229fe18666e4f64aa7648e5dc956e44, type: 3} + - target: {fileID: 4333061663706910602, guid: 9229fe18666e4f64aa7648e5dc956e44, + type: 3} propertyPath: m_Bones.Array.data[9] value: objectReference: {fileID: 7527788754810788122} - - target: {fileID: 4333061663706910602, guid: 9229fe18666e4f64aa7648e5dc956e44, type: 3} + - target: {fileID: 4333061663706910602, guid: 9229fe18666e4f64aa7648e5dc956e44, + type: 3} propertyPath: m_Bones.Array.data[10] value: objectReference: {fileID: 8247809510486077625} - - target: {fileID: 4333061663706910602, guid: 9229fe18666e4f64aa7648e5dc956e44, type: 3} + - target: {fileID: 4333061663706910602, guid: 9229fe18666e4f64aa7648e5dc956e44, + type: 3} propertyPath: m_Bones.Array.data[11] value: objectReference: {fileID: 1055663782864180258} @@ -7678,12 +8611,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 9229fe18666e4f64aa7648e5dc956e44, type: 3} --- !u!4 &233176270103577912 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3958143234325365264, guid: 9229fe18666e4f64aa7648e5dc956e44, type: 3} + m_CorrespondingSourceObject: {fileID: 3958143234325365264, guid: 9229fe18666e4f64aa7648e5dc956e44, + type: 3} m_PrefabInstance: {fileID: 3878248926818027304} m_PrefabAsset: {fileID: 0} --- !u!1 &3491356761905670446 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 405751281216187910, guid: 9229fe18666e4f64aa7648e5dc956e44, type: 3} + m_CorrespondingSourceObject: {fileID: 405751281216187910, guid: 9229fe18666e4f64aa7648e5dc956e44, + type: 3} m_PrefabInstance: {fileID: 3878248926818027304} m_PrefabAsset: {fileID: 0} --- !u!1001 &3911753892790213641 @@ -7693,55 +8628,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 5429000291070753441} m_Modifications: - - target: {fileID: 3877572312902708792, guid: ca8d48c7092d3d048b1d11bd0e6aee0e, type: 3} + - target: {fileID: 3877572312902708792, guid: ca8d48c7092d3d048b1d11bd0e6aee0e, + type: 3} propertyPath: m_Name value: Archer_Hair_Girl objectReference: {fileID: 0} - - target: {fileID: 3877572312902708792, guid: ca8d48c7092d3d048b1d11bd0e6aee0e, type: 3} + - target: {fileID: 3877572312902708792, guid: ca8d48c7092d3d048b1d11bd0e6aee0e, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - - target: {fileID: 4942721011261555818, guid: ca8d48c7092d3d048b1d11bd0e6aee0e, type: 3} + - target: {fileID: 4942721011261555818, guid: ca8d48c7092d3d048b1d11bd0e6aee0e, + type: 3} propertyPath: m_RootOrder value: 2 objectReference: {fileID: 0} - - target: {fileID: 4942721011261555818, guid: ca8d48c7092d3d048b1d11bd0e6aee0e, type: 3} + - target: {fileID: 4942721011261555818, guid: ca8d48c7092d3d048b1d11bd0e6aee0e, + type: 3} propertyPath: m_LocalPosition.x value: -0.000025987625 objectReference: {fileID: 0} - - target: {fileID: 4942721011261555818, guid: ca8d48c7092d3d048b1d11bd0e6aee0e, type: 3} + - target: {fileID: 4942721011261555818, guid: ca8d48c7092d3d048b1d11bd0e6aee0e, + type: 3} propertyPath: m_LocalPosition.y value: 169.33165 objectReference: {fileID: 0} - - target: {fileID: 4942721011261555818, guid: ca8d48c7092d3d048b1d11bd0e6aee0e, type: 3} + - target: {fileID: 4942721011261555818, guid: ca8d48c7092d3d048b1d11bd0e6aee0e, + type: 3} propertyPath: m_LocalPosition.z value: -25.155195 objectReference: {fileID: 0} - - target: {fileID: 4942721011261555818, guid: ca8d48c7092d3d048b1d11bd0e6aee0e, type: 3} + - target: {fileID: 4942721011261555818, guid: ca8d48c7092d3d048b1d11bd0e6aee0e, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 4942721011261555818, guid: ca8d48c7092d3d048b1d11bd0e6aee0e, type: 3} + - target: {fileID: 4942721011261555818, guid: ca8d48c7092d3d048b1d11bd0e6aee0e, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4942721011261555818, guid: ca8d48c7092d3d048b1d11bd0e6aee0e, type: 3} + - target: {fileID: 4942721011261555818, guid: ca8d48c7092d3d048b1d11bd0e6aee0e, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 4942721011261555818, guid: ca8d48c7092d3d048b1d11bd0e6aee0e, type: 3} + - target: {fileID: 4942721011261555818, guid: ca8d48c7092d3d048b1d11bd0e6aee0e, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 4942721011261555818, guid: ca8d48c7092d3d048b1d11bd0e6aee0e, type: 3} + - target: {fileID: 4942721011261555818, guid: ca8d48c7092d3d048b1d11bd0e6aee0e, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4942721011261555818, guid: ca8d48c7092d3d048b1d11bd0e6aee0e, type: 3} + - target: {fileID: 4942721011261555818, guid: ca8d48c7092d3d048b1d11bd0e6aee0e, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4942721011261555818, guid: ca8d48c7092d3d048b1d11bd0e6aee0e, type: 3} + - target: {fileID: 4942721011261555818, guid: ca8d48c7092d3d048b1d11bd0e6aee0e, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} @@ -7749,12 +8697,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: ca8d48c7092d3d048b1d11bd0e6aee0e, type: 3} --- !u!1 &254083984948441649 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 3877572312902708792, guid: ca8d48c7092d3d048b1d11bd0e6aee0e, type: 3} + m_CorrespondingSourceObject: {fileID: 3877572312902708792, guid: ca8d48c7092d3d048b1d11bd0e6aee0e, + type: 3} m_PrefabInstance: {fileID: 3911753892790213641} m_PrefabAsset: {fileID: 0} --- !u!4 &8273470831055198307 stripped Transform: - m_CorrespondingSourceObject: {fileID: 4942721011261555818, guid: ca8d48c7092d3d048b1d11bd0e6aee0e, type: 3} + m_CorrespondingSourceObject: {fileID: 4942721011261555818, guid: ca8d48c7092d3d048b1d11bd0e6aee0e, + type: 3} m_PrefabInstance: {fileID: 3911753892790213641} m_PrefabAsset: {fileID: 0} --- !u!1001 &3983427400962373682 @@ -7764,55 +8714,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 867326443869147655} m_Modifications: - - target: {fileID: 346216998567761015, guid: 04305502153bd804895c15a55a9df5d0, type: 3} + - target: {fileID: 346216998567761015, guid: 04305502153bd804895c15a55a9df5d0, + type: 3} propertyPath: m_RootOrder value: 6 objectReference: {fileID: 0} - - target: {fileID: 346216998567761015, guid: 04305502153bd804895c15a55a9df5d0, type: 3} + - target: {fileID: 346216998567761015, guid: 04305502153bd804895c15a55a9df5d0, + type: 3} propertyPath: m_LocalPosition.x value: -14.748636 objectReference: {fileID: 0} - - target: {fileID: 346216998567761015, guid: 04305502153bd804895c15a55a9df5d0, type: 3} + - target: {fileID: 346216998567761015, guid: 04305502153bd804895c15a55a9df5d0, + type: 3} propertyPath: m_LocalPosition.y value: -3.1288147 objectReference: {fileID: 0} - - target: {fileID: 346216998567761015, guid: 04305502153bd804895c15a55a9df5d0, type: 3} + - target: {fileID: 346216998567761015, guid: 04305502153bd804895c15a55a9df5d0, + type: 3} propertyPath: m_LocalPosition.z value: -1.3515778 objectReference: {fileID: 0} - - target: {fileID: 346216998567761015, guid: 04305502153bd804895c15a55a9df5d0, type: 3} + - target: {fileID: 346216998567761015, guid: 04305502153bd804895c15a55a9df5d0, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 346216998567761015, guid: 04305502153bd804895c15a55a9df5d0, type: 3} + - target: {fileID: 346216998567761015, guid: 04305502153bd804895c15a55a9df5d0, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 346216998567761015, guid: 04305502153bd804895c15a55a9df5d0, type: 3} + - target: {fileID: 346216998567761015, guid: 04305502153bd804895c15a55a9df5d0, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 346216998567761015, guid: 04305502153bd804895c15a55a9df5d0, type: 3} + - target: {fileID: 346216998567761015, guid: 04305502153bd804895c15a55a9df5d0, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 346216998567761015, guid: 04305502153bd804895c15a55a9df5d0, type: 3} + - target: {fileID: 346216998567761015, guid: 04305502153bd804895c15a55a9df5d0, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 346216998567761015, guid: 04305502153bd804895c15a55a9df5d0, type: 3} + - target: {fileID: 346216998567761015, guid: 04305502153bd804895c15a55a9df5d0, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 346216998567761015, guid: 04305502153bd804895c15a55a9df5d0, type: 3} + - target: {fileID: 346216998567761015, guid: 04305502153bd804895c15a55a9df5d0, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 7041917610482621706, guid: 04305502153bd804895c15a55a9df5d0, type: 3} + - target: {fileID: 7041917610482621706, guid: 04305502153bd804895c15a55a9df5d0, + type: 3} propertyPath: m_Name value: Mage_Hand_Lt1_Girl objectReference: {fileID: 0} - - target: {fileID: 7041917610482621706, guid: 04305502153bd804895c15a55a9df5d0, type: 3} + - target: {fileID: 7041917610482621706, guid: 04305502153bd804895c15a55a9df5d0, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -7820,12 +8783,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 04305502153bd804895c15a55a9df5d0, type: 3} --- !u!1 &6268466270447412536 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 7041917610482621706, guid: 04305502153bd804895c15a55a9df5d0, type: 3} + m_CorrespondingSourceObject: {fileID: 7041917610482621706, guid: 04305502153bd804895c15a55a9df5d0, + type: 3} m_PrefabInstance: {fileID: 3983427400962373682} m_PrefabAsset: {fileID: 0} --- !u!4 &3713772713022467141 stripped Transform: - m_CorrespondingSourceObject: {fileID: 346216998567761015, guid: 04305502153bd804895c15a55a9df5d0, type: 3} + m_CorrespondingSourceObject: {fileID: 346216998567761015, guid: 04305502153bd804895c15a55a9df5d0, + type: 3} m_PrefabInstance: {fileID: 3983427400962373682} m_PrefabAsset: {fileID: 0} --- !u!1001 &4018178243839850218 @@ -7835,107 +8800,133 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4076098699203836966} m_Modifications: - - target: {fileID: 4863238318113424071, guid: da41d56a03723b34dbef30c31fcab42b, type: 3} + - target: {fileID: 4863238318113424071, guid: da41d56a03723b34dbef30c31fcab42b, + type: 3} propertyPath: m_RootOrder value: 9 objectReference: {fileID: 0} - - target: {fileID: 4863238318113424071, guid: da41d56a03723b34dbef30c31fcab42b, type: 3} + - target: {fileID: 4863238318113424071, guid: da41d56a03723b34dbef30c31fcab42b, + type: 3} propertyPath: m_LocalPosition.x value: 6.34 objectReference: {fileID: 0} - - target: {fileID: 4863238318113424071, guid: da41d56a03723b34dbef30c31fcab42b, type: 3} + - target: {fileID: 4863238318113424071, guid: da41d56a03723b34dbef30c31fcab42b, + type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4863238318113424071, guid: da41d56a03723b34dbef30c31fcab42b, type: 3} + - target: {fileID: 4863238318113424071, guid: da41d56a03723b34dbef30c31fcab42b, + type: 3} propertyPath: m_LocalPosition.z value: -1.35 objectReference: {fileID: 0} - - target: {fileID: 4863238318113424071, guid: da41d56a03723b34dbef30c31fcab42b, type: 3} + - target: {fileID: 4863238318113424071, guid: da41d56a03723b34dbef30c31fcab42b, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 4863238318113424071, guid: da41d56a03723b34dbef30c31fcab42b, type: 3} + - target: {fileID: 4863238318113424071, guid: da41d56a03723b34dbef30c31fcab42b, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 4863238318113424071, guid: da41d56a03723b34dbef30c31fcab42b, type: 3} + - target: {fileID: 4863238318113424071, guid: da41d56a03723b34dbef30c31fcab42b, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 4863238318113424071, guid: da41d56a03723b34dbef30c31fcab42b, type: 3} + - target: {fileID: 4863238318113424071, guid: da41d56a03723b34dbef30c31fcab42b, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 4863238318113424071, guid: da41d56a03723b34dbef30c31fcab42b, type: 3} + - target: {fileID: 4863238318113424071, guid: da41d56a03723b34dbef30c31fcab42b, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4863238318113424071, guid: da41d56a03723b34dbef30c31fcab42b, type: 3} + - target: {fileID: 4863238318113424071, guid: da41d56a03723b34dbef30c31fcab42b, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4863238318113424071, guid: da41d56a03723b34dbef30c31fcab42b, type: 3} + - target: {fileID: 4863238318113424071, guid: da41d56a03723b34dbef30c31fcab42b, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4873742077042584900, guid: da41d56a03723b34dbef30c31fcab42b, type: 3} + - target: {fileID: 4873742077042584900, guid: da41d56a03723b34dbef30c31fcab42b, + type: 3} propertyPath: m_Name value: Rogue_Torso_Boy objectReference: {fileID: 0} - - target: {fileID: 4873742077042584900, guid: da41d56a03723b34dbef30c31fcab42b, type: 3} + - target: {fileID: 4873742077042584900, guid: da41d56a03723b34dbef30c31fcab42b, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - - target: {fileID: 6414136068798745613, guid: da41d56a03723b34dbef30c31fcab42b, type: 3} + - target: {fileID: 6414136068798745613, guid: da41d56a03723b34dbef30c31fcab42b, + type: 3} propertyPath: m_RootBone value: objectReference: {fileID: 3335427089582007770} - - target: {fileID: 6414136068798745613, guid: da41d56a03723b34dbef30c31fcab42b, type: 3} + - target: {fileID: 6414136068798745613, guid: da41d56a03723b34dbef30c31fcab42b, + type: 3} propertyPath: m_Bones.Array.data[0] value: objectReference: {fileID: 7738679323201646151} - - target: {fileID: 6414136068798745613, guid: da41d56a03723b34dbef30c31fcab42b, type: 3} + - target: {fileID: 6414136068798745613, guid: da41d56a03723b34dbef30c31fcab42b, + type: 3} propertyPath: m_Bones.Array.data[1] value: objectReference: {fileID: 8498953204661844621} - - target: {fileID: 6414136068798745613, guid: da41d56a03723b34dbef30c31fcab42b, type: 3} + - target: {fileID: 6414136068798745613, guid: da41d56a03723b34dbef30c31fcab42b, + type: 3} propertyPath: m_Bones.Array.data[2] value: objectReference: {fileID: 1323154135719462797} - - target: {fileID: 6414136068798745613, guid: da41d56a03723b34dbef30c31fcab42b, type: 3} + - target: {fileID: 6414136068798745613, guid: da41d56a03723b34dbef30c31fcab42b, + type: 3} propertyPath: m_Bones.Array.data[3] value: objectReference: {fileID: 587759327283076790} - - target: {fileID: 6414136068798745613, guid: da41d56a03723b34dbef30c31fcab42b, type: 3} + - target: {fileID: 6414136068798745613, guid: da41d56a03723b34dbef30c31fcab42b, + type: 3} propertyPath: m_Bones.Array.data[4] value: objectReference: {fileID: 5606035577626729233} - - target: {fileID: 6414136068798745613, guid: da41d56a03723b34dbef30c31fcab42b, type: 3} + - target: {fileID: 6414136068798745613, guid: da41d56a03723b34dbef30c31fcab42b, + type: 3} propertyPath: m_Bones.Array.data[5] value: objectReference: {fileID: 7527788754810788122} - - target: {fileID: 6414136068798745613, guid: da41d56a03723b34dbef30c31fcab42b, type: 3} + - target: {fileID: 6414136068798745613, guid: da41d56a03723b34dbef30c31fcab42b, + type: 3} propertyPath: m_Bones.Array.data[6] value: objectReference: {fileID: 8247809510486077625} - - target: {fileID: 6414136068798745613, guid: da41d56a03723b34dbef30c31fcab42b, type: 3} + - target: {fileID: 6414136068798745613, guid: da41d56a03723b34dbef30c31fcab42b, + type: 3} propertyPath: m_Bones.Array.data[7] value: objectReference: {fileID: 1055663782864180258} - - target: {fileID: 6414136068798745613, guid: da41d56a03723b34dbef30c31fcab42b, type: 3} + - target: {fileID: 6414136068798745613, guid: da41d56a03723b34dbef30c31fcab42b, + type: 3} propertyPath: m_Bones.Array.data[8] value: objectReference: {fileID: 3335427089582007770} - - target: {fileID: 6414136068798745613, guid: da41d56a03723b34dbef30c31fcab42b, type: 3} + - target: {fileID: 6414136068798745613, guid: da41d56a03723b34dbef30c31fcab42b, + type: 3} propertyPath: m_Bones.Array.data[9] value: objectReference: {fileID: 432724711772772565} - - target: {fileID: 6414136068798745613, guid: da41d56a03723b34dbef30c31fcab42b, type: 3} + - target: {fileID: 6414136068798745613, guid: da41d56a03723b34dbef30c31fcab42b, + type: 3} propertyPath: m_Bones.Array.data[10] value: objectReference: {fileID: 600274334256031679} - - target: {fileID: 6414136068798745613, guid: da41d56a03723b34dbef30c31fcab42b, type: 3} + - target: {fileID: 6414136068798745613, guid: da41d56a03723b34dbef30c31fcab42b, + type: 3} propertyPath: m_Bones.Array.data[11] value: objectReference: {fileID: 7079448961355668684} @@ -7943,12 +8934,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: da41d56a03723b34dbef30c31fcab42b, type: 3} --- !u!4 &8412405971631928365 stripped Transform: - m_CorrespondingSourceObject: {fileID: 4863238318113424071, guid: da41d56a03723b34dbef30c31fcab42b, type: 3} + m_CorrespondingSourceObject: {fileID: 4863238318113424071, guid: da41d56a03723b34dbef30c31fcab42b, + type: 3} m_PrefabInstance: {fileID: 4018178243839850218} m_PrefabAsset: {fileID: 0} --- !u!1 &8385822671173688238 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 4873742077042584900, guid: da41d56a03723b34dbef30c31fcab42b, type: 3} + m_CorrespondingSourceObject: {fileID: 4873742077042584900, guid: da41d56a03723b34dbef30c31fcab42b, + type: 3} m_PrefabInstance: {fileID: 4018178243839850218} m_PrefabAsset: {fileID: 0} --- !u!1001 &4227450192997314527 @@ -7958,55 +8951,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 1313590801738418481} m_Modifications: - - target: {fileID: 5061189832937129367, guid: 26f0d3659f5a1ba4a896b4811fa58397, type: 3} + - target: {fileID: 5061189832937129367, guid: 26f0d3659f5a1ba4a896b4811fa58397, + type: 3} propertyPath: m_RootOrder value: 14 objectReference: {fileID: 0} - - target: {fileID: 5061189832937129367, guid: 26f0d3659f5a1ba4a896b4811fa58397, type: 3} + - target: {fileID: 5061189832937129367, guid: 26f0d3659f5a1ba4a896b4811fa58397, + type: 3} propertyPath: m_LocalPosition.x value: 14.610222 objectReference: {fileID: 0} - - target: {fileID: 5061189832937129367, guid: 26f0d3659f5a1ba4a896b4811fa58397, type: 3} + - target: {fileID: 5061189832937129367, guid: 26f0d3659f5a1ba4a896b4811fa58397, + type: 3} propertyPath: m_LocalPosition.y value: -3.3644562 objectReference: {fileID: 0} - - target: {fileID: 5061189832937129367, guid: 26f0d3659f5a1ba4a896b4811fa58397, type: 3} + - target: {fileID: 5061189832937129367, guid: 26f0d3659f5a1ba4a896b4811fa58397, + type: 3} propertyPath: m_LocalPosition.z value: 21.182846 objectReference: {fileID: 0} - - target: {fileID: 5061189832937129367, guid: 26f0d3659f5a1ba4a896b4811fa58397, type: 3} + - target: {fileID: 5061189832937129367, guid: 26f0d3659f5a1ba4a896b4811fa58397, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 5061189832937129367, guid: 26f0d3659f5a1ba4a896b4811fa58397, type: 3} + - target: {fileID: 5061189832937129367, guid: 26f0d3659f5a1ba4a896b4811fa58397, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 5061189832937129367, guid: 26f0d3659f5a1ba4a896b4811fa58397, type: 3} + - target: {fileID: 5061189832937129367, guid: 26f0d3659f5a1ba4a896b4811fa58397, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 5061189832937129367, guid: 26f0d3659f5a1ba4a896b4811fa58397, type: 3} + - target: {fileID: 5061189832937129367, guid: 26f0d3659f5a1ba4a896b4811fa58397, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 5061189832937129367, guid: 26f0d3659f5a1ba4a896b4811fa58397, type: 3} + - target: {fileID: 5061189832937129367, guid: 26f0d3659f5a1ba4a896b4811fa58397, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 5061189832937129367, guid: 26f0d3659f5a1ba4a896b4811fa58397, type: 3} + - target: {fileID: 5061189832937129367, guid: 26f0d3659f5a1ba4a896b4811fa58397, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 5061189832937129367, guid: 26f0d3659f5a1ba4a896b4811fa58397, type: 3} + - target: {fileID: 5061189832937129367, guid: 26f0d3659f5a1ba4a896b4811fa58397, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 5950119043085361482, guid: 26f0d3659f5a1ba4a896b4811fa58397, type: 3} + - target: {fileID: 5950119043085361482, guid: 26f0d3659f5a1ba4a896b4811fa58397, + type: 3} propertyPath: m_Name value: Rogue_Weapon_Boy objectReference: {fileID: 0} - - target: {fileID: 5950119043085361482, guid: 26f0d3659f5a1ba4a896b4811fa58397, type: 3} + - target: {fileID: 5950119043085361482, guid: 26f0d3659f5a1ba4a896b4811fa58397, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -8014,12 +9020,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 26f0d3659f5a1ba4a896b4811fa58397, type: 3} --- !u!1 &7510308954545655445 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 5950119043085361482, guid: 26f0d3659f5a1ba4a896b4811fa58397, type: 3} + m_CorrespondingSourceObject: {fileID: 5950119043085361482, guid: 26f0d3659f5a1ba4a896b4811fa58397, + type: 3} m_PrefabInstance: {fileID: 4227450192997314527} m_PrefabAsset: {fileID: 0} --- !u!4 &8977396833261955656 stripped Transform: - m_CorrespondingSourceObject: {fileID: 5061189832937129367, guid: 26f0d3659f5a1ba4a896b4811fa58397, type: 3} + m_CorrespondingSourceObject: {fileID: 5061189832937129367, guid: 26f0d3659f5a1ba4a896b4811fa58397, + type: 3} m_PrefabInstance: {fileID: 4227450192997314527} m_PrefabAsset: {fileID: 0} --- !u!1001 &4391275700096481013 @@ -8029,55 +9037,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 1313590801738418481} m_Modifications: - - target: {fileID: 5965419572804802562, guid: 42c55d5fc0ddb2040864db8ec9c1c01b, type: 3} + - target: {fileID: 5965419572804802562, guid: 42c55d5fc0ddb2040864db8ec9c1c01b, + type: 3} propertyPath: m_Name value: Archer_weapon_Boy objectReference: {fileID: 0} - - target: {fileID: 5965419572804802562, guid: 42c55d5fc0ddb2040864db8ec9c1c01b, type: 3} + - target: {fileID: 5965419572804802562, guid: 42c55d5fc0ddb2040864db8ec9c1c01b, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - - target: {fileID: 8282075800537489241, guid: 42c55d5fc0ddb2040864db8ec9c1c01b, type: 3} + - target: {fileID: 8282075800537489241, guid: 42c55d5fc0ddb2040864db8ec9c1c01b, + type: 3} propertyPath: m_RootOrder value: 2 objectReference: {fileID: 0} - - target: {fileID: 8282075800537489241, guid: 42c55d5fc0ddb2040864db8ec9c1c01b, type: 3} + - target: {fileID: 8282075800537489241, guid: 42c55d5fc0ddb2040864db8ec9c1c01b, + type: 3} propertyPath: m_LocalPosition.x value: -0.067899704 objectReference: {fileID: 0} - - target: {fileID: 8282075800537489241, guid: 42c55d5fc0ddb2040864db8ec9c1c01b, type: 3} + - target: {fileID: 8282075800537489241, guid: 42c55d5fc0ddb2040864db8ec9c1c01b, + type: 3} propertyPath: m_LocalPosition.y value: -6.548729 objectReference: {fileID: 0} - - target: {fileID: 8282075800537489241, guid: 42c55d5fc0ddb2040864db8ec9c1c01b, type: 3} + - target: {fileID: 8282075800537489241, guid: 42c55d5fc0ddb2040864db8ec9c1c01b, + type: 3} propertyPath: m_LocalPosition.z value: -0.04371643 objectReference: {fileID: 0} - - target: {fileID: 8282075800537489241, guid: 42c55d5fc0ddb2040864db8ec9c1c01b, type: 3} + - target: {fileID: 8282075800537489241, guid: 42c55d5fc0ddb2040864db8ec9c1c01b, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 8282075800537489241, guid: 42c55d5fc0ddb2040864db8ec9c1c01b, type: 3} + - target: {fileID: 8282075800537489241, guid: 42c55d5fc0ddb2040864db8ec9c1c01b, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 8282075800537489241, guid: 42c55d5fc0ddb2040864db8ec9c1c01b, type: 3} + - target: {fileID: 8282075800537489241, guid: 42c55d5fc0ddb2040864db8ec9c1c01b, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 8282075800537489241, guid: 42c55d5fc0ddb2040864db8ec9c1c01b, type: 3} + - target: {fileID: 8282075800537489241, guid: 42c55d5fc0ddb2040864db8ec9c1c01b, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 8282075800537489241, guid: 42c55d5fc0ddb2040864db8ec9c1c01b, type: 3} + - target: {fileID: 8282075800537489241, guid: 42c55d5fc0ddb2040864db8ec9c1c01b, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 8282075800537489241, guid: 42c55d5fc0ddb2040864db8ec9c1c01b, type: 3} + - target: {fileID: 8282075800537489241, guid: 42c55d5fc0ddb2040864db8ec9c1c01b, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 8282075800537489241, guid: 42c55d5fc0ddb2040864db8ec9c1c01b, type: 3} + - target: {fileID: 8282075800537489241, guid: 42c55d5fc0ddb2040864db8ec9c1c01b, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} @@ -8085,12 +9106,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 42c55d5fc0ddb2040864db8ec9c1c01b, type: 3} --- !u!1 &7942551514940141303 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 5965419572804802562, guid: 42c55d5fc0ddb2040864db8ec9c1c01b, type: 3} + m_CorrespondingSourceObject: {fileID: 5965419572804802562, guid: 42c55d5fc0ddb2040864db8ec9c1c01b, + type: 3} m_PrefabInstance: {fileID: 4391275700096481013} m_PrefabAsset: {fileID: 0} --- !u!4 &5629264190858029484 stripped Transform: - m_CorrespondingSourceObject: {fileID: 8282075800537489241, guid: 42c55d5fc0ddb2040864db8ec9c1c01b, type: 3} + m_CorrespondingSourceObject: {fileID: 8282075800537489241, guid: 42c55d5fc0ddb2040864db8ec9c1c01b, + type: 3} m_PrefabInstance: {fileID: 4391275700096481013} m_PrefabAsset: {fileID: 0} --- !u!1001 &4429822112805148243 @@ -8100,55 +9123,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 7079448961355668684} m_Modifications: - - target: {fileID: 5243211113693908564, guid: 55be08d05a818c043b0ae57c4aa15cd1, type: 3} + - target: {fileID: 5243211113693908564, guid: 55be08d05a818c043b0ae57c4aa15cd1, + type: 3} propertyPath: m_RootOrder value: 8 objectReference: {fileID: 0} - - target: {fileID: 5243211113693908564, guid: 55be08d05a818c043b0ae57c4aa15cd1, type: 3} + - target: {fileID: 5243211113693908564, guid: 55be08d05a818c043b0ae57c4aa15cd1, + type: 3} propertyPath: m_LocalPosition.x value: 17.707241 objectReference: {fileID: 0} - - target: {fileID: 5243211113693908564, guid: 55be08d05a818c043b0ae57c4aa15cd1, type: 3} + - target: {fileID: 5243211113693908564, guid: 55be08d05a818c043b0ae57c4aa15cd1, + type: 3} propertyPath: m_LocalPosition.y value: -86.04756 objectReference: {fileID: 0} - - target: {fileID: 5243211113693908564, guid: 55be08d05a818c043b0ae57c4aa15cd1, type: 3} + - target: {fileID: 5243211113693908564, guid: 55be08d05a818c043b0ae57c4aa15cd1, + type: 3} propertyPath: m_LocalPosition.z value: -0.0000019073486 objectReference: {fileID: 0} - - target: {fileID: 5243211113693908564, guid: 55be08d05a818c043b0ae57c4aa15cd1, type: 3} + - target: {fileID: 5243211113693908564, guid: 55be08d05a818c043b0ae57c4aa15cd1, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 5243211113693908564, guid: 55be08d05a818c043b0ae57c4aa15cd1, type: 3} + - target: {fileID: 5243211113693908564, guid: 55be08d05a818c043b0ae57c4aa15cd1, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 5243211113693908564, guid: 55be08d05a818c043b0ae57c4aa15cd1, type: 3} + - target: {fileID: 5243211113693908564, guid: 55be08d05a818c043b0ae57c4aa15cd1, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 5243211113693908564, guid: 55be08d05a818c043b0ae57c4aa15cd1, type: 3} + - target: {fileID: 5243211113693908564, guid: 55be08d05a818c043b0ae57c4aa15cd1, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 5243211113693908564, guid: 55be08d05a818c043b0ae57c4aa15cd1, type: 3} + - target: {fileID: 5243211113693908564, guid: 55be08d05a818c043b0ae57c4aa15cd1, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 5243211113693908564, guid: 55be08d05a818c043b0ae57c4aa15cd1, type: 3} + - target: {fileID: 5243211113693908564, guid: 55be08d05a818c043b0ae57c4aa15cd1, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 5243211113693908564, guid: 55be08d05a818c043b0ae57c4aa15cd1, type: 3} + - target: {fileID: 5243211113693908564, guid: 55be08d05a818c043b0ae57c4aa15cd1, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 5712656631229602638, guid: 55be08d05a818c043b0ae57c4aa15cd1, type: 3} + - target: {fileID: 5712656631229602638, guid: 55be08d05a818c043b0ae57c4aa15cd1, + type: 3} propertyPath: m_Name value: Gear_LS_Tank_ShoulderPad_Girl objectReference: {fileID: 0} - - target: {fileID: 5712656631229602638, guid: 55be08d05a818c043b0ae57c4aa15cd1, type: 3} + - target: {fileID: 5712656631229602638, guid: 55be08d05a818c043b0ae57c4aa15cd1, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -8156,12 +9192,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 55be08d05a818c043b0ae57c4aa15cd1, type: 3} --- !u!1 &8232172533547502877 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 5712656631229602638, guid: 55be08d05a818c043b0ae57c4aa15cd1, type: 3} + m_CorrespondingSourceObject: {fileID: 5712656631229602638, guid: 55be08d05a818c043b0ae57c4aa15cd1, + type: 3} m_PrefabInstance: {fileID: 4429822112805148243} m_PrefabAsset: {fileID: 0} --- !u!4 &8483166548166498311 stripped Transform: - m_CorrespondingSourceObject: {fileID: 5243211113693908564, guid: 55be08d05a818c043b0ae57c4aa15cd1, type: 3} + m_CorrespondingSourceObject: {fileID: 5243211113693908564, guid: 55be08d05a818c043b0ae57c4aa15cd1, + type: 3} m_PrefabInstance: {fileID: 4429822112805148243} m_PrefabAsset: {fileID: 0} --- !u!1001 &4448547236455274131 @@ -8171,55 +9209,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 7079448961355668684} m_Modifications: - - target: {fileID: 4242639280095608094, guid: 6cf96e9326cc7c14dbe80a7cc46e5529, type: 3} + - target: {fileID: 4242639280095608094, guid: 6cf96e9326cc7c14dbe80a7cc46e5529, + type: 3} propertyPath: m_Name value: Gear_LS_Tank_ShoulderPad_Boy objectReference: {fileID: 0} - - target: {fileID: 4242639280095608094, guid: 6cf96e9326cc7c14dbe80a7cc46e5529, type: 3} + - target: {fileID: 4242639280095608094, guid: 6cf96e9326cc7c14dbe80a7cc46e5529, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - - target: {fileID: 4351603251723243349, guid: 6cf96e9326cc7c14dbe80a7cc46e5529, type: 3} + - target: {fileID: 4351603251723243349, guid: 6cf96e9326cc7c14dbe80a7cc46e5529, + type: 3} propertyPath: m_RootOrder value: 7 objectReference: {fileID: 0} - - target: {fileID: 4351603251723243349, guid: 6cf96e9326cc7c14dbe80a7cc46e5529, type: 3} + - target: {fileID: 4351603251723243349, guid: 6cf96e9326cc7c14dbe80a7cc46e5529, + type: 3} propertyPath: m_LocalPosition.x value: 17.707241 objectReference: {fileID: 0} - - target: {fileID: 4351603251723243349, guid: 6cf96e9326cc7c14dbe80a7cc46e5529, type: 3} + - target: {fileID: 4351603251723243349, guid: 6cf96e9326cc7c14dbe80a7cc46e5529, + type: 3} propertyPath: m_LocalPosition.y value: -86.04756 objectReference: {fileID: 0} - - target: {fileID: 4351603251723243349, guid: 6cf96e9326cc7c14dbe80a7cc46e5529, type: 3} + - target: {fileID: 4351603251723243349, guid: 6cf96e9326cc7c14dbe80a7cc46e5529, + type: 3} propertyPath: m_LocalPosition.z value: -0.0000019073486 objectReference: {fileID: 0} - - target: {fileID: 4351603251723243349, guid: 6cf96e9326cc7c14dbe80a7cc46e5529, type: 3} + - target: {fileID: 4351603251723243349, guid: 6cf96e9326cc7c14dbe80a7cc46e5529, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 4351603251723243349, guid: 6cf96e9326cc7c14dbe80a7cc46e5529, type: 3} + - target: {fileID: 4351603251723243349, guid: 6cf96e9326cc7c14dbe80a7cc46e5529, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4351603251723243349, guid: 6cf96e9326cc7c14dbe80a7cc46e5529, type: 3} + - target: {fileID: 4351603251723243349, guid: 6cf96e9326cc7c14dbe80a7cc46e5529, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 4351603251723243349, guid: 6cf96e9326cc7c14dbe80a7cc46e5529, type: 3} + - target: {fileID: 4351603251723243349, guid: 6cf96e9326cc7c14dbe80a7cc46e5529, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 4351603251723243349, guid: 6cf96e9326cc7c14dbe80a7cc46e5529, type: 3} + - target: {fileID: 4351603251723243349, guid: 6cf96e9326cc7c14dbe80a7cc46e5529, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4351603251723243349, guid: 6cf96e9326cc7c14dbe80a7cc46e5529, type: 3} + - target: {fileID: 4351603251723243349, guid: 6cf96e9326cc7c14dbe80a7cc46e5529, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4351603251723243349, guid: 6cf96e9326cc7c14dbe80a7cc46e5529, type: 3} + - target: {fileID: 4351603251723243349, guid: 6cf96e9326cc7c14dbe80a7cc46e5529, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} @@ -8227,12 +9278,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 6cf96e9326cc7c14dbe80a7cc46e5529, type: 3} --- !u!1 &530452607416789901 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 4242639280095608094, guid: 6cf96e9326cc7c14dbe80a7cc46e5529, type: 3} + m_CorrespondingSourceObject: {fileID: 4242639280095608094, guid: 6cf96e9326cc7c14dbe80a7cc46e5529, + type: 3} m_PrefabInstance: {fileID: 4448547236455274131} m_PrefabAsset: {fileID: 0} --- !u!4 &132973005223516614 stripped Transform: - m_CorrespondingSourceObject: {fileID: 4351603251723243349, guid: 6cf96e9326cc7c14dbe80a7cc46e5529, type: 3} + m_CorrespondingSourceObject: {fileID: 4351603251723243349, guid: 6cf96e9326cc7c14dbe80a7cc46e5529, + type: 3} m_PrefabInstance: {fileID: 4448547236455274131} m_PrefabAsset: {fileID: 0} --- !u!1001 &4539265286341224239 @@ -8242,59 +9295,73 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 7079448961355668684} m_Modifications: - - target: {fileID: 2621124930539599549, guid: 33232a688db322c4487996ec15632341, type: 3} + - target: {fileID: 2621124930539599549, guid: 33232a688db322c4487996ec15632341, + type: 3} propertyPath: m_RootOrder value: 6 objectReference: {fileID: 0} - - target: {fileID: 2621124930539599549, guid: 33232a688db322c4487996ec15632341, type: 3} + - target: {fileID: 2621124930539599549, guid: 33232a688db322c4487996ec15632341, + type: 3} propertyPath: m_LocalScale.y value: 99.99997 objectReference: {fileID: 0} - - target: {fileID: 2621124930539599549, guid: 33232a688db322c4487996ec15632341, type: 3} + - target: {fileID: 2621124930539599549, guid: 33232a688db322c4487996ec15632341, + type: 3} propertyPath: m_LocalPosition.x value: -174.81204 objectReference: {fileID: 0} - - target: {fileID: 2621124930539599549, guid: 33232a688db322c4487996ec15632341, type: 3} + - target: {fileID: 2621124930539599549, guid: 33232a688db322c4487996ec15632341, + type: 3} propertyPath: m_LocalPosition.y value: 112.23023 objectReference: {fileID: 0} - - target: {fileID: 2621124930539599549, guid: 33232a688db322c4487996ec15632341, type: 3} + - target: {fileID: 2621124930539599549, guid: 33232a688db322c4487996ec15632341, + type: 3} propertyPath: m_LocalPosition.z value: 143.44847 objectReference: {fileID: 0} - - target: {fileID: 2621124930539599549, guid: 33232a688db322c4487996ec15632341, type: 3} + - target: {fileID: 2621124930539599549, guid: 33232a688db322c4487996ec15632341, + type: 3} propertyPath: m_LocalRotation.w value: 0.5698161 objectReference: {fileID: 0} - - target: {fileID: 2621124930539599549, guid: 33232a688db322c4487996ec15632341, type: 3} + - target: {fileID: 2621124930539599549, guid: 33232a688db322c4487996ec15632341, + type: 3} propertyPath: m_LocalRotation.x value: -0.45872247 objectReference: {fileID: 0} - - target: {fileID: 2621124930539599549, guid: 33232a688db322c4487996ec15632341, type: 3} + - target: {fileID: 2621124930539599549, guid: 33232a688db322c4487996ec15632341, + type: 3} propertyPath: m_LocalRotation.y value: 0.4735928 objectReference: {fileID: 0} - - target: {fileID: 2621124930539599549, guid: 33232a688db322c4487996ec15632341, type: 3} + - target: {fileID: 2621124930539599549, guid: 33232a688db322c4487996ec15632341, + type: 3} propertyPath: m_LocalRotation.z value: 0.49050307 objectReference: {fileID: 0} - - target: {fileID: 2621124930539599549, guid: 33232a688db322c4487996ec15632341, type: 3} + - target: {fileID: 2621124930539599549, guid: 33232a688db322c4487996ec15632341, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2621124930539599549, guid: 33232a688db322c4487996ec15632341, type: 3} + - target: {fileID: 2621124930539599549, guid: 33232a688db322c4487996ec15632341, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 2621124930539599549, guid: 33232a688db322c4487996ec15632341, type: 3} + - target: {fileID: 2621124930539599549, guid: 33232a688db322c4487996ec15632341, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 2621124930539599550, guid: 33232a688db322c4487996ec15632341, type: 3} + - target: {fileID: 2621124930539599550, guid: 33232a688db322c4487996ec15632341, + type: 3} propertyPath: m_Name value: Empty_Gear_LS_Slot_Rogue_Girl objectReference: {fileID: 0} - - target: {fileID: 2621124930539599550, guid: 33232a688db322c4487996ec15632341, type: 3} + - target: {fileID: 2621124930539599550, guid: 33232a688db322c4487996ec15632341, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -8302,12 +9369,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 33232a688db322c4487996ec15632341, type: 3} --- !u!4 &1918162386034545042 stripped Transform: - m_CorrespondingSourceObject: {fileID: 2621124930539599549, guid: 33232a688db322c4487996ec15632341, type: 3} + m_CorrespondingSourceObject: {fileID: 2621124930539599549, guid: 33232a688db322c4487996ec15632341, + type: 3} m_PrefabInstance: {fileID: 4539265286341224239} m_PrefabAsset: {fileID: 0} --- !u!1 &1918162386034545041 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 2621124930539599550, guid: 33232a688db322c4487996ec15632341, type: 3} + m_CorrespondingSourceObject: {fileID: 2621124930539599550, guid: 33232a688db322c4487996ec15632341, + type: 3} m_PrefabInstance: {fileID: 4539265286341224239} m_PrefabAsset: {fileID: 0} --- !u!1001 &4868151302983044478 @@ -8317,55 +9386,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 867326443869147655} m_Modifications: - - target: {fileID: 7965103143551427644, guid: e68ed9fb2d4ffb5478cd20996586aade, type: 3} + - target: {fileID: 7965103143551427644, guid: e68ed9fb2d4ffb5478cd20996586aade, + type: 3} propertyPath: m_Name value: Empty_Gear_LH_Slot_Archer_Girl objectReference: {fileID: 0} - - target: {fileID: 7965103143551427644, guid: e68ed9fb2d4ffb5478cd20996586aade, type: 3} + - target: {fileID: 7965103143551427644, guid: e68ed9fb2d4ffb5478cd20996586aade, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - - target: {fileID: 7965103143551427647, guid: e68ed9fb2d4ffb5478cd20996586aade, type: 3} + - target: {fileID: 7965103143551427647, guid: e68ed9fb2d4ffb5478cd20996586aade, + type: 3} propertyPath: m_RootOrder value: 14 objectReference: {fileID: 0} - - target: {fileID: 7965103143551427647, guid: e68ed9fb2d4ffb5478cd20996586aade, type: 3} + - target: {fileID: 7965103143551427647, guid: e68ed9fb2d4ffb5478cd20996586aade, + type: 3} propertyPath: m_LocalPosition.x value: -53.010986 objectReference: {fileID: 0} - - target: {fileID: 7965103143551427647, guid: e68ed9fb2d4ffb5478cd20996586aade, type: 3} + - target: {fileID: 7965103143551427647, guid: e68ed9fb2d4ffb5478cd20996586aade, + type: 3} propertyPath: m_LocalPosition.y value: 103.55913 objectReference: {fileID: 0} - - target: {fileID: 7965103143551427647, guid: e68ed9fb2d4ffb5478cd20996586aade, type: 3} + - target: {fileID: 7965103143551427647, guid: e68ed9fb2d4ffb5478cd20996586aade, + type: 3} propertyPath: m_LocalPosition.z value: 120.0687 objectReference: {fileID: 0} - - target: {fileID: 7965103143551427647, guid: e68ed9fb2d4ffb5478cd20996586aade, type: 3} + - target: {fileID: 7965103143551427647, guid: e68ed9fb2d4ffb5478cd20996586aade, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 7965103143551427647, guid: e68ed9fb2d4ffb5478cd20996586aade, type: 3} + - target: {fileID: 7965103143551427647, guid: e68ed9fb2d4ffb5478cd20996586aade, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 7965103143551427647, guid: e68ed9fb2d4ffb5478cd20996586aade, type: 3} + - target: {fileID: 7965103143551427647, guid: e68ed9fb2d4ffb5478cd20996586aade, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 7965103143551427647, guid: e68ed9fb2d4ffb5478cd20996586aade, type: 3} + - target: {fileID: 7965103143551427647, guid: e68ed9fb2d4ffb5478cd20996586aade, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 7965103143551427647, guid: e68ed9fb2d4ffb5478cd20996586aade, type: 3} + - target: {fileID: 7965103143551427647, guid: e68ed9fb2d4ffb5478cd20996586aade, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 7965103143551427647, guid: e68ed9fb2d4ffb5478cd20996586aade, type: 3} + - target: {fileID: 7965103143551427647, guid: e68ed9fb2d4ffb5478cd20996586aade, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 7965103143551427647, guid: e68ed9fb2d4ffb5478cd20996586aade, type: 3} + - target: {fileID: 7965103143551427647, guid: e68ed9fb2d4ffb5478cd20996586aade, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} @@ -8373,12 +9455,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: e68ed9fb2d4ffb5478cd20996586aade, type: 3} --- !u!4 &3244455175906273601 stripped Transform: - m_CorrespondingSourceObject: {fileID: 7965103143551427647, guid: e68ed9fb2d4ffb5478cd20996586aade, type: 3} + m_CorrespondingSourceObject: {fileID: 7965103143551427647, guid: e68ed9fb2d4ffb5478cd20996586aade, + type: 3} m_PrefabInstance: {fileID: 4868151302983044478} m_PrefabAsset: {fileID: 0} --- !u!1 &3244455175906273602 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 7965103143551427644, guid: e68ed9fb2d4ffb5478cd20996586aade, type: 3} + m_CorrespondingSourceObject: {fileID: 7965103143551427644, guid: e68ed9fb2d4ffb5478cd20996586aade, + type: 3} m_PrefabInstance: {fileID: 4868151302983044478} m_PrefabAsset: {fileID: 0} --- !u!1001 &4871864343211773472 @@ -8388,55 +9472,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 867326443869147655} m_Modifications: - - target: {fileID: 3509871059147111769, guid: 06510dc984ab25a4897bb02f9eeef15a, type: 3} + - target: {fileID: 3509871059147111769, guid: 06510dc984ab25a4897bb02f9eeef15a, + type: 3} propertyPath: m_Name value: Tank_Shield_Boy objectReference: {fileID: 0} - - target: {fileID: 3509871059147111769, guid: 06510dc984ab25a4897bb02f9eeef15a, type: 3} + - target: {fileID: 3509871059147111769, guid: 06510dc984ab25a4897bb02f9eeef15a, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - - target: {fileID: 5385510199437149151, guid: 06510dc984ab25a4897bb02f9eeef15a, type: 3} + - target: {fileID: 5385510199437149151, guid: 06510dc984ab25a4897bb02f9eeef15a, + type: 3} propertyPath: m_RootOrder value: 11 objectReference: {fileID: 0} - - target: {fileID: 5385510199437149151, guid: 06510dc984ab25a4897bb02f9eeef15a, type: 3} + - target: {fileID: 5385510199437149151, guid: 06510dc984ab25a4897bb02f9eeef15a, + type: 3} propertyPath: m_LocalPosition.x value: -18 objectReference: {fileID: 0} - - target: {fileID: 5385510199437149151, guid: 06510dc984ab25a4897bb02f9eeef15a, type: 3} + - target: {fileID: 5385510199437149151, guid: 06510dc984ab25a4897bb02f9eeef15a, + type: 3} propertyPath: m_LocalPosition.y value: -4.9 objectReference: {fileID: 0} - - target: {fileID: 5385510199437149151, guid: 06510dc984ab25a4897bb02f9eeef15a, type: 3} + - target: {fileID: 5385510199437149151, guid: 06510dc984ab25a4897bb02f9eeef15a, + type: 3} propertyPath: m_LocalPosition.z value: -5.4 objectReference: {fileID: 0} - - target: {fileID: 5385510199437149151, guid: 06510dc984ab25a4897bb02f9eeef15a, type: 3} + - target: {fileID: 5385510199437149151, guid: 06510dc984ab25a4897bb02f9eeef15a, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 5385510199437149151, guid: 06510dc984ab25a4897bb02f9eeef15a, type: 3} + - target: {fileID: 5385510199437149151, guid: 06510dc984ab25a4897bb02f9eeef15a, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 5385510199437149151, guid: 06510dc984ab25a4897bb02f9eeef15a, type: 3} + - target: {fileID: 5385510199437149151, guid: 06510dc984ab25a4897bb02f9eeef15a, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 5385510199437149151, guid: 06510dc984ab25a4897bb02f9eeef15a, type: 3} + - target: {fileID: 5385510199437149151, guid: 06510dc984ab25a4897bb02f9eeef15a, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 5385510199437149151, guid: 06510dc984ab25a4897bb02f9eeef15a, type: 3} + - target: {fileID: 5385510199437149151, guid: 06510dc984ab25a4897bb02f9eeef15a, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 5385510199437149151, guid: 06510dc984ab25a4897bb02f9eeef15a, type: 3} + - target: {fileID: 5385510199437149151, guid: 06510dc984ab25a4897bb02f9eeef15a, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 5385510199437149151, guid: 06510dc984ab25a4897bb02f9eeef15a, type: 3} + - target: {fileID: 5385510199437149151, guid: 06510dc984ab25a4897bb02f9eeef15a, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} @@ -8444,12 +9541,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 06510dc984ab25a4897bb02f9eeef15a, type: 3} --- !u!4 &657941371188301311 stripped Transform: - m_CorrespondingSourceObject: {fileID: 5385510199437149151, guid: 06510dc984ab25a4897bb02f9eeef15a, type: 3} + m_CorrespondingSourceObject: {fileID: 5385510199437149151, guid: 06510dc984ab25a4897bb02f9eeef15a, + type: 3} m_PrefabInstance: {fileID: 4871864343211773472} m_PrefabAsset: {fileID: 0} --- !u!1 &8298383617800057721 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 3509871059147111769, guid: 06510dc984ab25a4897bb02f9eeef15a, type: 3} + m_CorrespondingSourceObject: {fileID: 3509871059147111769, guid: 06510dc984ab25a4897bb02f9eeef15a, + type: 3} m_PrefabInstance: {fileID: 4871864343211773472} m_PrefabAsset: {fileID: 0} --- !u!1001 &4880754290186887191 @@ -8459,76 +9558,94 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 8543977087292382539} m_Modifications: - - target: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, type: 3} + - target: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, + type: 3} propertyPath: m_RootOrder value: 1 objectReference: {fileID: 0} - - target: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, type: 3} + - target: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, + type: 3} propertyPath: m_LocalPosition.x value: -0.0000011920929 objectReference: {fileID: 0} - - target: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, type: 3} + - target: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, + type: 3} propertyPath: m_LocalPosition.y value: 148.35704 objectReference: {fileID: 0} - - target: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, type: 3} + - target: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, + type: 3} propertyPath: m_LocalPosition.z value: 9.308052 objectReference: {fileID: 0} - - target: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, type: 3} + - target: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, type: 3} + - target: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, type: 3} + - target: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, type: 3} + - target: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, type: 3} + - target: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, type: 3} + - target: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, type: 3} + - target: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 2531791160233610345, guid: 15ed538aa9a05d949b95ac6489a23e05, type: 3} + - target: {fileID: 2531791160233610345, guid: 15ed538aa9a05d949b95ac6489a23e05, + type: 3} propertyPath: m_Name value: Mage_Eyes_Girl objectReference: {fileID: 0} - - target: {fileID: 2531791160233610345, guid: 15ed538aa9a05d949b95ac6489a23e05, type: 3} + - target: {fileID: 2531791160233610345, guid: 15ed538aa9a05d949b95ac6489a23e05, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - - target: {fileID: 5537303030436161620, guid: 15ed538aa9a05d949b95ac6489a23e05, type: 3} + - target: {fileID: 5537303030436161620, guid: 15ed538aa9a05d949b95ac6489a23e05, + type: 3} propertyPath: m_Materials.Array.data[0] value: objectReference: {fileID: 2100000, guid: 83e9907752fa0454aabda2854e946e5d, type: 2} - - target: {fileID: 9124943291452211255, guid: 15ed538aa9a05d949b95ac6489a23e05, type: 3} + - target: {fileID: 9124943291452211255, guid: 15ed538aa9a05d949b95ac6489a23e05, + type: 3} propertyPath: m_Mesh value: - objectReference: {fileID: 3157339011911344240, guid: 2115c4661f55eff45a5a0f91fc0a12f0, type: 3} + objectReference: {fileID: 3157339011911344240, guid: 2115c4661f55eff45a5a0f91fc0a12f0, + type: 3} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 15ed538aa9a05d949b95ac6489a23e05, type: 3} --- !u!1 &6960689873569148030 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 2531791160233610345, guid: 15ed538aa9a05d949b95ac6489a23e05, type: 3} + m_CorrespondingSourceObject: {fileID: 2531791160233610345, guid: 15ed538aa9a05d949b95ac6489a23e05, + type: 3} m_PrefabInstance: {fileID: 4880754290186887191} m_PrefabAsset: {fileID: 0} --- !u!4 &6750527369658817616 stripped Transform: - m_CorrespondingSourceObject: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, type: 3} + m_CorrespondingSourceObject: {fileID: 2167740820946254919, guid: 15ed538aa9a05d949b95ac6489a23e05, + type: 3} m_PrefabInstance: {fileID: 4880754290186887191} m_PrefabAsset: {fileID: 0} --- !u!1001 &4934808914666633646 @@ -8538,55 +9655,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 8183775978794224953} m_Modifications: - - target: {fileID: 7964898783750966180, guid: 2a6f74fd75525dc4183a720daef707f9, type: 3} + - target: {fileID: 7964898783750966180, guid: 2a6f74fd75525dc4183a720daef707f9, + type: 3} propertyPath: m_RootOrder value: 0 objectReference: {fileID: 0} - - target: {fileID: 7964898783750966180, guid: 2a6f74fd75525dc4183a720daef707f9, type: 3} + - target: {fileID: 7964898783750966180, guid: 2a6f74fd75525dc4183a720daef707f9, + type: 3} propertyPath: m_LocalPosition.x value: 0.00000023841858 objectReference: {fileID: 0} - - target: {fileID: 7964898783750966180, guid: 2a6f74fd75525dc4183a720daef707f9, type: 3} + - target: {fileID: 7964898783750966180, guid: 2a6f74fd75525dc4183a720daef707f9, + type: 3} propertyPath: m_LocalPosition.y value: 131.48633 objectReference: {fileID: 0} - - target: {fileID: 7964898783750966180, guid: 2a6f74fd75525dc4183a720daef707f9, type: 3} + - target: {fileID: 7964898783750966180, guid: 2a6f74fd75525dc4183a720daef707f9, + type: 3} propertyPath: m_LocalPosition.z value: -6.742197 objectReference: {fileID: 0} - - target: {fileID: 7964898783750966180, guid: 2a6f74fd75525dc4183a720daef707f9, type: 3} + - target: {fileID: 7964898783750966180, guid: 2a6f74fd75525dc4183a720daef707f9, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 7964898783750966180, guid: 2a6f74fd75525dc4183a720daef707f9, type: 3} + - target: {fileID: 7964898783750966180, guid: 2a6f74fd75525dc4183a720daef707f9, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 7964898783750966180, guid: 2a6f74fd75525dc4183a720daef707f9, type: 3} + - target: {fileID: 7964898783750966180, guid: 2a6f74fd75525dc4183a720daef707f9, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 7964898783750966180, guid: 2a6f74fd75525dc4183a720daef707f9, type: 3} + - target: {fileID: 7964898783750966180, guid: 2a6f74fd75525dc4183a720daef707f9, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 7964898783750966180, guid: 2a6f74fd75525dc4183a720daef707f9, type: 3} + - target: {fileID: 7964898783750966180, guid: 2a6f74fd75525dc4183a720daef707f9, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 7964898783750966180, guid: 2a6f74fd75525dc4183a720daef707f9, type: 3} + - target: {fileID: 7964898783750966180, guid: 2a6f74fd75525dc4183a720daef707f9, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 7964898783750966180, guid: 2a6f74fd75525dc4183a720daef707f9, type: 3} + - target: {fileID: 7964898783750966180, guid: 2a6f74fd75525dc4183a720daef707f9, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 9187798507662740747, guid: 2a6f74fd75525dc4183a720daef707f9, type: 3} + - target: {fileID: 9187798507662740747, guid: 2a6f74fd75525dc4183a720daef707f9, + type: 3} propertyPath: m_Name value: Tank_Ears_Girl objectReference: {fileID: 0} - - target: {fileID: 9187798507662740747, guid: 2a6f74fd75525dc4183a720daef707f9, type: 3} + - target: {fileID: 9187798507662740747, guid: 2a6f74fd75525dc4183a720daef707f9, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -8594,12 +9724,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 2a6f74fd75525dc4183a720daef707f9, type: 3} --- !u!4 &3094808236160217610 stripped Transform: - m_CorrespondingSourceObject: {fileID: 7964898783750966180, guid: 2a6f74fd75525dc4183a720daef707f9, type: 3} + m_CorrespondingSourceObject: {fileID: 7964898783750966180, guid: 2a6f74fd75525dc4183a720daef707f9, + type: 3} m_PrefabInstance: {fileID: 4934808914666633646} m_PrefabAsset: {fileID: 0} --- !u!1 &4321881827279680677 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 9187798507662740747, guid: 2a6f74fd75525dc4183a720daef707f9, type: 3} + m_CorrespondingSourceObject: {fileID: 9187798507662740747, guid: 2a6f74fd75525dc4183a720daef707f9, + type: 3} m_PrefabInstance: {fileID: 4934808914666633646} m_PrefabAsset: {fileID: 0} --- !u!1001 &5029098520368680701 @@ -8609,55 +9741,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 432724711772772565} m_Modifications: - - target: {fileID: 7802969682724078319, guid: dcc72c5e95842204f90ab7856cf57b18, type: 3} + - target: {fileID: 7802969682724078319, guid: dcc72c5e95842204f90ab7856cf57b18, + type: 3} propertyPath: m_Name value: Gear_LS_Archer_Quiver_Girl objectReference: {fileID: 0} - - target: {fileID: 7802969682724078319, guid: dcc72c5e95842204f90ab7856cf57b18, type: 3} + - target: {fileID: 7802969682724078319, guid: dcc72c5e95842204f90ab7856cf57b18, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - - target: {fileID: 8384144163728124606, guid: dcc72c5e95842204f90ab7856cf57b18, type: 3} + - target: {fileID: 8384144163728124606, guid: dcc72c5e95842204f90ab7856cf57b18, + type: 3} propertyPath: m_RootOrder value: 5 objectReference: {fileID: 0} - - target: {fileID: 8384144163728124606, guid: dcc72c5e95842204f90ab7856cf57b18, type: 3} + - target: {fileID: 8384144163728124606, guid: dcc72c5e95842204f90ab7856cf57b18, + type: 3} propertyPath: m_LocalPosition.x value: -53.217487 objectReference: {fileID: 0} - - target: {fileID: 8384144163728124606, guid: dcc72c5e95842204f90ab7856cf57b18, type: 3} + - target: {fileID: 8384144163728124606, guid: dcc72c5e95842204f90ab7856cf57b18, + type: 3} propertyPath: m_LocalPosition.y value: -45.060722 objectReference: {fileID: 0} - - target: {fileID: 8384144163728124606, guid: dcc72c5e95842204f90ab7856cf57b18, type: 3} + - target: {fileID: 8384144163728124606, guid: dcc72c5e95842204f90ab7856cf57b18, + type: 3} propertyPath: m_LocalPosition.z value: -33.072945 objectReference: {fileID: 0} - - target: {fileID: 8384144163728124606, guid: dcc72c5e95842204f90ab7856cf57b18, type: 3} + - target: {fileID: 8384144163728124606, guid: dcc72c5e95842204f90ab7856cf57b18, + type: 3} propertyPath: m_LocalRotation.w value: 0.7071068 objectReference: {fileID: 0} - - target: {fileID: 8384144163728124606, guid: dcc72c5e95842204f90ab7856cf57b18, type: 3} + - target: {fileID: 8384144163728124606, guid: dcc72c5e95842204f90ab7856cf57b18, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 8384144163728124606, guid: dcc72c5e95842204f90ab7856cf57b18, type: 3} + - target: {fileID: 8384144163728124606, guid: dcc72c5e95842204f90ab7856cf57b18, + type: 3} propertyPath: m_LocalRotation.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 8384144163728124606, guid: dcc72c5e95842204f90ab7856cf57b18, type: 3} + - target: {fileID: 8384144163728124606, guid: dcc72c5e95842204f90ab7856cf57b18, + type: 3} propertyPath: m_LocalRotation.z value: 0.7071068 objectReference: {fileID: 0} - - target: {fileID: 8384144163728124606, guid: dcc72c5e95842204f90ab7856cf57b18, type: 3} + - target: {fileID: 8384144163728124606, guid: dcc72c5e95842204f90ab7856cf57b18, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 8384144163728124606, guid: dcc72c5e95842204f90ab7856cf57b18, type: 3} + - target: {fileID: 8384144163728124606, guid: dcc72c5e95842204f90ab7856cf57b18, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 8384144163728124606, guid: dcc72c5e95842204f90ab7856cf57b18, type: 3} + - target: {fileID: 8384144163728124606, guid: dcc72c5e95842204f90ab7856cf57b18, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} @@ -8665,12 +9810,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: dcc72c5e95842204f90ab7856cf57b18, type: 3} --- !u!4 &3571500496343098435 stripped Transform: - m_CorrespondingSourceObject: {fileID: 8384144163728124606, guid: dcc72c5e95842204f90ab7856cf57b18, type: 3} + m_CorrespondingSourceObject: {fileID: 8384144163728124606, guid: dcc72c5e95842204f90ab7856cf57b18, + type: 3} m_PrefabInstance: {fileID: 5029098520368680701} m_PrefabAsset: {fileID: 0} --- !u!1 &2991311409585703954 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 7802969682724078319, guid: dcc72c5e95842204f90ab7856cf57b18, type: 3} + m_CorrespondingSourceObject: {fileID: 7802969682724078319, guid: dcc72c5e95842204f90ab7856cf57b18, + type: 3} m_PrefabInstance: {fileID: 5029098520368680701} m_PrefabAsset: {fileID: 0} --- !u!1001 &5303372242775348149 @@ -8680,55 +9827,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 8183775978794224953} m_Modifications: - - target: {fileID: 4430959853493139204, guid: 91434bf93e40fcd43bd05ba6764b59a6, type: 3} + - target: {fileID: 4430959853493139204, guid: 91434bf93e40fcd43bd05ba6764b59a6, + type: 3} propertyPath: m_Name value: Tank_Eyes_Girl objectReference: {fileID: 0} - - target: {fileID: 4430959853493139204, guid: 91434bf93e40fcd43bd05ba6764b59a6, type: 3} + - target: {fileID: 4430959853493139204, guid: 91434bf93e40fcd43bd05ba6764b59a6, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - - target: {fileID: 8811682967955375752, guid: 91434bf93e40fcd43bd05ba6764b59a6, type: 3} + - target: {fileID: 8811682967955375752, guid: 91434bf93e40fcd43bd05ba6764b59a6, + type: 3} propertyPath: m_RootOrder value: 1 objectReference: {fileID: 0} - - target: {fileID: 8811682967955375752, guid: 91434bf93e40fcd43bd05ba6764b59a6, type: 3} + - target: {fileID: 8811682967955375752, guid: 91434bf93e40fcd43bd05ba6764b59a6, + type: 3} propertyPath: m_LocalPosition.x value: -0.0000011920929 objectReference: {fileID: 0} - - target: {fileID: 8811682967955375752, guid: 91434bf93e40fcd43bd05ba6764b59a6, type: 3} + - target: {fileID: 8811682967955375752, guid: 91434bf93e40fcd43bd05ba6764b59a6, + type: 3} propertyPath: m_LocalPosition.y value: 148.35704 objectReference: {fileID: 0} - - target: {fileID: 8811682967955375752, guid: 91434bf93e40fcd43bd05ba6764b59a6, type: 3} + - target: {fileID: 8811682967955375752, guid: 91434bf93e40fcd43bd05ba6764b59a6, + type: 3} propertyPath: m_LocalPosition.z value: 9.308052 objectReference: {fileID: 0} - - target: {fileID: 8811682967955375752, guid: 91434bf93e40fcd43bd05ba6764b59a6, type: 3} + - target: {fileID: 8811682967955375752, guid: 91434bf93e40fcd43bd05ba6764b59a6, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 8811682967955375752, guid: 91434bf93e40fcd43bd05ba6764b59a6, type: 3} + - target: {fileID: 8811682967955375752, guid: 91434bf93e40fcd43bd05ba6764b59a6, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 8811682967955375752, guid: 91434bf93e40fcd43bd05ba6764b59a6, type: 3} + - target: {fileID: 8811682967955375752, guid: 91434bf93e40fcd43bd05ba6764b59a6, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 8811682967955375752, guid: 91434bf93e40fcd43bd05ba6764b59a6, type: 3} + - target: {fileID: 8811682967955375752, guid: 91434bf93e40fcd43bd05ba6764b59a6, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 8811682967955375752, guid: 91434bf93e40fcd43bd05ba6764b59a6, type: 3} + - target: {fileID: 8811682967955375752, guid: 91434bf93e40fcd43bd05ba6764b59a6, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 8811682967955375752, guid: 91434bf93e40fcd43bd05ba6764b59a6, type: 3} + - target: {fileID: 8811682967955375752, guid: 91434bf93e40fcd43bd05ba6764b59a6, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 8811682967955375752, guid: 91434bf93e40fcd43bd05ba6764b59a6, type: 3} + - target: {fileID: 8811682967955375752, guid: 91434bf93e40fcd43bd05ba6764b59a6, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} @@ -8736,12 +9896,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 91434bf93e40fcd43bd05ba6764b59a6, type: 3} --- !u!4 &3733552320003020093 stripped Transform: - m_CorrespondingSourceObject: {fileID: 8811682967955375752, guid: 91434bf93e40fcd43bd05ba6764b59a6, type: 3} + m_CorrespondingSourceObject: {fileID: 8811682967955375752, guid: 91434bf93e40fcd43bd05ba6764b59a6, + type: 3} m_PrefabInstance: {fileID: 5303372242775348149} m_PrefabAsset: {fileID: 0} --- !u!1 &8423053424629851313 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 4430959853493139204, guid: 91434bf93e40fcd43bd05ba6764b59a6, type: 3} + m_CorrespondingSourceObject: {fileID: 4430959853493139204, guid: 91434bf93e40fcd43bd05ba6764b59a6, + type: 3} m_PrefabInstance: {fileID: 5303372242775348149} m_PrefabAsset: {fileID: 0} --- !u!1001 &5663654460053290902 @@ -8751,55 +9913,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 600274334256031679} m_Modifications: - - target: {fileID: 824235669658650209, guid: 74a7d6d2f76fc6d4797beb48b1cd7646, type: 3} + - target: {fileID: 824235669658650209, guid: 74a7d6d2f76fc6d4797beb48b1cd7646, + type: 3} propertyPath: m_RootOrder value: 7 objectReference: {fileID: 0} - - target: {fileID: 824235669658650209, guid: 74a7d6d2f76fc6d4797beb48b1cd7646, type: 3} + - target: {fileID: 824235669658650209, guid: 74a7d6d2f76fc6d4797beb48b1cd7646, + type: 3} propertyPath: m_LocalPosition.x value: 163.42566 objectReference: {fileID: 0} - - target: {fileID: 824235669658650209, guid: 74a7d6d2f76fc6d4797beb48b1cd7646, type: 3} + - target: {fileID: 824235669658650209, guid: 74a7d6d2f76fc6d4797beb48b1cd7646, + type: 3} propertyPath: m_LocalPosition.y value: 103.55921 objectReference: {fileID: 0} - - target: {fileID: 824235669658650209, guid: 74a7d6d2f76fc6d4797beb48b1cd7646, type: 3} + - target: {fileID: 824235669658650209, guid: 74a7d6d2f76fc6d4797beb48b1cd7646, + type: 3} propertyPath: m_LocalPosition.z value: -120.06873 objectReference: {fileID: 0} - - target: {fileID: 824235669658650209, guid: 74a7d6d2f76fc6d4797beb48b1cd7646, type: 3} + - target: {fileID: 824235669658650209, guid: 74a7d6d2f76fc6d4797beb48b1cd7646, + type: 3} propertyPath: m_LocalRotation.w value: -6.123234e-17 objectReference: {fileID: 0} - - target: {fileID: 824235669658650209, guid: 74a7d6d2f76fc6d4797beb48b1cd7646, type: 3} + - target: {fileID: 824235669658650209, guid: 74a7d6d2f76fc6d4797beb48b1cd7646, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 824235669658650209, guid: 74a7d6d2f76fc6d4797beb48b1cd7646, type: 3} + - target: {fileID: 824235669658650209, guid: 74a7d6d2f76fc6d4797beb48b1cd7646, + type: 3} propertyPath: m_LocalRotation.y value: -1 objectReference: {fileID: 0} - - target: {fileID: 824235669658650209, guid: 74a7d6d2f76fc6d4797beb48b1cd7646, type: 3} + - target: {fileID: 824235669658650209, guid: 74a7d6d2f76fc6d4797beb48b1cd7646, + type: 3} propertyPath: m_LocalRotation.z value: 6.123234e-17 objectReference: {fileID: 0} - - target: {fileID: 824235669658650209, guid: 74a7d6d2f76fc6d4797beb48b1cd7646, type: 3} + - target: {fileID: 824235669658650209, guid: 74a7d6d2f76fc6d4797beb48b1cd7646, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 824235669658650209, guid: 74a7d6d2f76fc6d4797beb48b1cd7646, type: 3} + - target: {fileID: 824235669658650209, guid: 74a7d6d2f76fc6d4797beb48b1cd7646, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 824235669658650209, guid: 74a7d6d2f76fc6d4797beb48b1cd7646, type: 3} + - target: {fileID: 824235669658650209, guid: 74a7d6d2f76fc6d4797beb48b1cd7646, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 824235669658650238, guid: 74a7d6d2f76fc6d4797beb48b1cd7646, type: 3} + - target: {fileID: 824235669658650238, guid: 74a7d6d2f76fc6d4797beb48b1cd7646, + type: 3} propertyPath: m_Name value: Empty_Gear_RS_Slot_Rogue_Girl objectReference: {fileID: 0} - - target: {fileID: 824235669658650238, guid: 74a7d6d2f76fc6d4797beb48b1cd7646, type: 3} + - target: {fileID: 824235669658650238, guid: 74a7d6d2f76fc6d4797beb48b1cd7646, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -8807,12 +9982,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 74a7d6d2f76fc6d4797beb48b1cd7646, type: 3} --- !u!1 &5037577724869065192 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 824235669658650238, guid: 74a7d6d2f76fc6d4797beb48b1cd7646, type: 3} + m_CorrespondingSourceObject: {fileID: 824235669658650238, guid: 74a7d6d2f76fc6d4797beb48b1cd7646, + type: 3} m_PrefabInstance: {fileID: 5663654460053290902} m_PrefabAsset: {fileID: 0} --- !u!4 &5037577724869065207 stripped Transform: - m_CorrespondingSourceObject: {fileID: 824235669658650209, guid: 74a7d6d2f76fc6d4797beb48b1cd7646, type: 3} + m_CorrespondingSourceObject: {fileID: 824235669658650209, guid: 74a7d6d2f76fc6d4797beb48b1cd7646, + type: 3} m_PrefabInstance: {fileID: 5663654460053290902} m_PrefabAsset: {fileID: 0} --- !u!1001 &5876312914575183525 @@ -8822,55 +9999,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 6681451058136744116} m_Modifications: - - target: {fileID: 6261302141127107417, guid: 15097331d7b2ce0418441fbee17a054f, type: 3} + - target: {fileID: 6261302141127107417, guid: 15097331d7b2ce0418441fbee17a054f, + type: 3} propertyPath: m_Name value: Rogue_Mouth_Boy objectReference: {fileID: 0} - - target: {fileID: 6261302141127107417, guid: 15097331d7b2ce0418441fbee17a054f, type: 3} + - target: {fileID: 6261302141127107417, guid: 15097331d7b2ce0418441fbee17a054f, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - - target: {fileID: 8369030876925468785, guid: 15097331d7b2ce0418441fbee17a054f, type: 3} + - target: {fileID: 8369030876925468785, guid: 15097331d7b2ce0418441fbee17a054f, + type: 3} propertyPath: m_RootOrder value: 4 objectReference: {fileID: 0} - - target: {fileID: 8369030876925468785, guid: 15097331d7b2ce0418441fbee17a054f, type: 3} + - target: {fileID: 8369030876925468785, guid: 15097331d7b2ce0418441fbee17a054f, + type: 3} propertyPath: m_LocalPosition.x value: 0.00000071525574 objectReference: {fileID: 0} - - target: {fileID: 8369030876925468785, guid: 15097331d7b2ce0418441fbee17a054f, type: 3} + - target: {fileID: 8369030876925468785, guid: 15097331d7b2ce0418441fbee17a054f, + type: 3} propertyPath: m_LocalPosition.y value: 148.35704 objectReference: {fileID: 0} - - target: {fileID: 8369030876925468785, guid: 15097331d7b2ce0418441fbee17a054f, type: 3} + - target: {fileID: 8369030876925468785, guid: 15097331d7b2ce0418441fbee17a054f, + type: 3} propertyPath: m_LocalPosition.z value: 9.336105 objectReference: {fileID: 0} - - target: {fileID: 8369030876925468785, guid: 15097331d7b2ce0418441fbee17a054f, type: 3} + - target: {fileID: 8369030876925468785, guid: 15097331d7b2ce0418441fbee17a054f, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 8369030876925468785, guid: 15097331d7b2ce0418441fbee17a054f, type: 3} + - target: {fileID: 8369030876925468785, guid: 15097331d7b2ce0418441fbee17a054f, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 8369030876925468785, guid: 15097331d7b2ce0418441fbee17a054f, type: 3} + - target: {fileID: 8369030876925468785, guid: 15097331d7b2ce0418441fbee17a054f, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 8369030876925468785, guid: 15097331d7b2ce0418441fbee17a054f, type: 3} + - target: {fileID: 8369030876925468785, guid: 15097331d7b2ce0418441fbee17a054f, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 8369030876925468785, guid: 15097331d7b2ce0418441fbee17a054f, type: 3} + - target: {fileID: 8369030876925468785, guid: 15097331d7b2ce0418441fbee17a054f, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 8369030876925468785, guid: 15097331d7b2ce0418441fbee17a054f, type: 3} + - target: {fileID: 8369030876925468785, guid: 15097331d7b2ce0418441fbee17a054f, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 8369030876925468785, guid: 15097331d7b2ce0418441fbee17a054f, type: 3} + - target: {fileID: 8369030876925468785, guid: 15097331d7b2ce0418441fbee17a054f, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} @@ -8878,12 +10068,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 15097331d7b2ce0418441fbee17a054f, type: 3} --- !u!4 &2713452086772657876 stripped Transform: - m_CorrespondingSourceObject: {fileID: 8369030876925468785, guid: 15097331d7b2ce0418441fbee17a054f, type: 3} + m_CorrespondingSourceObject: {fileID: 8369030876925468785, guid: 15097331d7b2ce0418441fbee17a054f, + type: 3} m_PrefabInstance: {fileID: 5876312914575183525} m_PrefabAsset: {fileID: 0} --- !u!1 &533753975163153916 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 6261302141127107417, guid: 15097331d7b2ce0418441fbee17a054f, type: 3} + m_CorrespondingSourceObject: {fileID: 6261302141127107417, guid: 15097331d7b2ce0418441fbee17a054f, + type: 3} m_PrefabInstance: {fileID: 5876312914575183525} m_PrefabAsset: {fileID: 0} --- !u!1001 &5954005251041186103 @@ -8893,55 +10085,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 1206277181869945479} m_Modifications: - - target: {fileID: 6830032637672783817, guid: 342abab4ebf914b4b8da5bc74cea64c7, type: 3} + - target: {fileID: 6830032637672783817, guid: 342abab4ebf914b4b8da5bc74cea64c7, + type: 3} propertyPath: m_RootOrder value: 4 objectReference: {fileID: 0} - - target: {fileID: 6830032637672783817, guid: 342abab4ebf914b4b8da5bc74cea64c7, type: 3} + - target: {fileID: 6830032637672783817, guid: 342abab4ebf914b4b8da5bc74cea64c7, + type: 3} propertyPath: m_LocalPosition.x value: 0.00000071525574 objectReference: {fileID: 0} - - target: {fileID: 6830032637672783817, guid: 342abab4ebf914b4b8da5bc74cea64c7, type: 3} + - target: {fileID: 6830032637672783817, guid: 342abab4ebf914b4b8da5bc74cea64c7, + type: 3} propertyPath: m_LocalPosition.y value: 148.35704 objectReference: {fileID: 0} - - target: {fileID: 6830032637672783817, guid: 342abab4ebf914b4b8da5bc74cea64c7, type: 3} + - target: {fileID: 6830032637672783817, guid: 342abab4ebf914b4b8da5bc74cea64c7, + type: 3} propertyPath: m_LocalPosition.z value: 9.336105 objectReference: {fileID: 0} - - target: {fileID: 6830032637672783817, guid: 342abab4ebf914b4b8da5bc74cea64c7, type: 3} + - target: {fileID: 6830032637672783817, guid: 342abab4ebf914b4b8da5bc74cea64c7, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 6830032637672783817, guid: 342abab4ebf914b4b8da5bc74cea64c7, type: 3} + - target: {fileID: 6830032637672783817, guid: 342abab4ebf914b4b8da5bc74cea64c7, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 6830032637672783817, guid: 342abab4ebf914b4b8da5bc74cea64c7, type: 3} + - target: {fileID: 6830032637672783817, guid: 342abab4ebf914b4b8da5bc74cea64c7, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 6830032637672783817, guid: 342abab4ebf914b4b8da5bc74cea64c7, type: 3} + - target: {fileID: 6830032637672783817, guid: 342abab4ebf914b4b8da5bc74cea64c7, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 6830032637672783817, guid: 342abab4ebf914b4b8da5bc74cea64c7, type: 3} + - target: {fileID: 6830032637672783817, guid: 342abab4ebf914b4b8da5bc74cea64c7, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 6830032637672783817, guid: 342abab4ebf914b4b8da5bc74cea64c7, type: 3} + - target: {fileID: 6830032637672783817, guid: 342abab4ebf914b4b8da5bc74cea64c7, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 6830032637672783817, guid: 342abab4ebf914b4b8da5bc74cea64c7, type: 3} + - target: {fileID: 6830032637672783817, guid: 342abab4ebf914b4b8da5bc74cea64c7, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 7007241272975972341, guid: 342abab4ebf914b4b8da5bc74cea64c7, type: 3} + - target: {fileID: 7007241272975972341, guid: 342abab4ebf914b4b8da5bc74cea64c7, + type: 3} propertyPath: m_Name value: Archer_Mouth_Boy objectReference: {fileID: 0} - - target: {fileID: 7007241272975972341, guid: 342abab4ebf914b4b8da5bc74cea64c7, type: 3} + - target: {fileID: 7007241272975972341, guid: 342abab4ebf914b4b8da5bc74cea64c7, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -8949,12 +10154,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 342abab4ebf914b4b8da5bc74cea64c7, type: 3} --- !u!4 &894464004419858174 stripped Transform: - m_CorrespondingSourceObject: {fileID: 6830032637672783817, guid: 342abab4ebf914b4b8da5bc74cea64c7, type: 3} + m_CorrespondingSourceObject: {fileID: 6830032637672783817, guid: 342abab4ebf914b4b8da5bc74cea64c7, + type: 3} m_PrefabInstance: {fileID: 5954005251041186103} m_PrefabAsset: {fileID: 0} --- !u!1 &3719508152487413442 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 7007241272975972341, guid: 342abab4ebf914b4b8da5bc74cea64c7, type: 3} + m_CorrespondingSourceObject: {fileID: 7007241272975972341, guid: 342abab4ebf914b4b8da5bc74cea64c7, + type: 3} m_PrefabInstance: {fileID: 5954005251041186103} m_PrefabAsset: {fileID: 0} --- !u!1001 &5958241405309199534 @@ -8964,55 +10171,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 8543977087292382539} m_Modifications: - - target: {fileID: 7287790909289031669, guid: 65a2626844f6ca342b52eec1b82ce368, type: 3} + - target: {fileID: 7287790909289031669, guid: 65a2626844f6ca342b52eec1b82ce368, + type: 3} propertyPath: m_Name value: Mage_Ears_Girl objectReference: {fileID: 0} - - target: {fileID: 7287790909289031669, guid: 65a2626844f6ca342b52eec1b82ce368, type: 3} + - target: {fileID: 7287790909289031669, guid: 65a2626844f6ca342b52eec1b82ce368, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - - target: {fileID: 7564265044771374542, guid: 65a2626844f6ca342b52eec1b82ce368, type: 3} + - target: {fileID: 7564265044771374542, guid: 65a2626844f6ca342b52eec1b82ce368, + type: 3} propertyPath: m_RootOrder value: 0 objectReference: {fileID: 0} - - target: {fileID: 7564265044771374542, guid: 65a2626844f6ca342b52eec1b82ce368, type: 3} + - target: {fileID: 7564265044771374542, guid: 65a2626844f6ca342b52eec1b82ce368, + type: 3} propertyPath: m_LocalPosition.x value: -0.000030755997 objectReference: {fileID: 0} - - target: {fileID: 7564265044771374542, guid: 65a2626844f6ca342b52eec1b82ce368, type: 3} + - target: {fileID: 7564265044771374542, guid: 65a2626844f6ca342b52eec1b82ce368, + type: 3} propertyPath: m_LocalPosition.y value: 131.48633 objectReference: {fileID: 0} - - target: {fileID: 7564265044771374542, guid: 65a2626844f6ca342b52eec1b82ce368, type: 3} + - target: {fileID: 7564265044771374542, guid: 65a2626844f6ca342b52eec1b82ce368, + type: 3} propertyPath: m_LocalPosition.z value: -6.742197 objectReference: {fileID: 0} - - target: {fileID: 7564265044771374542, guid: 65a2626844f6ca342b52eec1b82ce368, type: 3} + - target: {fileID: 7564265044771374542, guid: 65a2626844f6ca342b52eec1b82ce368, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 7564265044771374542, guid: 65a2626844f6ca342b52eec1b82ce368, type: 3} + - target: {fileID: 7564265044771374542, guid: 65a2626844f6ca342b52eec1b82ce368, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 7564265044771374542, guid: 65a2626844f6ca342b52eec1b82ce368, type: 3} + - target: {fileID: 7564265044771374542, guid: 65a2626844f6ca342b52eec1b82ce368, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 7564265044771374542, guid: 65a2626844f6ca342b52eec1b82ce368, type: 3} + - target: {fileID: 7564265044771374542, guid: 65a2626844f6ca342b52eec1b82ce368, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 7564265044771374542, guid: 65a2626844f6ca342b52eec1b82ce368, type: 3} + - target: {fileID: 7564265044771374542, guid: 65a2626844f6ca342b52eec1b82ce368, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 7564265044771374542, guid: 65a2626844f6ca342b52eec1b82ce368, type: 3} + - target: {fileID: 7564265044771374542, guid: 65a2626844f6ca342b52eec1b82ce368, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 7564265044771374542, guid: 65a2626844f6ca342b52eec1b82ce368, type: 3} + - target: {fileID: 7564265044771374542, guid: 65a2626844f6ca342b52eec1b82ce368, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} @@ -9020,12 +10240,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 65a2626844f6ca342b52eec1b82ce368, type: 3} --- !u!1 &4002719052165595995 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 7287790909289031669, guid: 65a2626844f6ca342b52eec1b82ce368, type: 3} + m_CorrespondingSourceObject: {fileID: 7287790909289031669, guid: 65a2626844f6ca342b52eec1b82ce368, + type: 3} m_PrefabInstance: {fileID: 5958241405309199534} m_PrefabAsset: {fileID: 0} --- !u!4 &4203624295223140704 stripped Transform: - m_CorrespondingSourceObject: {fileID: 7564265044771374542, guid: 65a2626844f6ca342b52eec1b82ce368, type: 3} + m_CorrespondingSourceObject: {fileID: 7564265044771374542, guid: 65a2626844f6ca342b52eec1b82ce368, + type: 3} m_PrefabInstance: {fileID: 5958241405309199534} m_PrefabAsset: {fileID: 0} --- !u!1001 &6208432101827980315 @@ -9035,55 +10257,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 8543977087292382539} m_Modifications: - - target: {fileID: 43258729208463311, guid: 81d416e4d50ab674baec059dbf80c8c3, type: 3} + - target: {fileID: 43258729208463311, guid: 81d416e4d50ab674baec059dbf80c8c3, + type: 3} propertyPath: m_RootOrder value: 4 objectReference: {fileID: 0} - - target: {fileID: 43258729208463311, guid: 81d416e4d50ab674baec059dbf80c8c3, type: 3} + - target: {fileID: 43258729208463311, guid: 81d416e4d50ab674baec059dbf80c8c3, + type: 3} propertyPath: m_LocalPosition.x value: 24.35381 objectReference: {fileID: 0} - - target: {fileID: 43258729208463311, guid: 81d416e4d50ab674baec059dbf80c8c3, type: 3} + - target: {fileID: 43258729208463311, guid: 81d416e4d50ab674baec059dbf80c8c3, + type: 3} propertyPath: m_LocalPosition.y value: 148.51106 objectReference: {fileID: 0} - - target: {fileID: 43258729208463311, guid: 81d416e4d50ab674baec059dbf80c8c3, type: 3} + - target: {fileID: 43258729208463311, guid: 81d416e4d50ab674baec059dbf80c8c3, + type: 3} propertyPath: m_LocalPosition.z value: 3.415941 objectReference: {fileID: 0} - - target: {fileID: 43258729208463311, guid: 81d416e4d50ab674baec059dbf80c8c3, type: 3} + - target: {fileID: 43258729208463311, guid: 81d416e4d50ab674baec059dbf80c8c3, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 43258729208463311, guid: 81d416e4d50ab674baec059dbf80c8c3, type: 3} + - target: {fileID: 43258729208463311, guid: 81d416e4d50ab674baec059dbf80c8c3, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 43258729208463311, guid: 81d416e4d50ab674baec059dbf80c8c3, type: 3} + - target: {fileID: 43258729208463311, guid: 81d416e4d50ab674baec059dbf80c8c3, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 43258729208463311, guid: 81d416e4d50ab674baec059dbf80c8c3, type: 3} + - target: {fileID: 43258729208463311, guid: 81d416e4d50ab674baec059dbf80c8c3, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 43258729208463311, guid: 81d416e4d50ab674baec059dbf80c8c3, type: 3} + - target: {fileID: 43258729208463311, guid: 81d416e4d50ab674baec059dbf80c8c3, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 43258729208463311, guid: 81d416e4d50ab674baec059dbf80c8c3, type: 3} + - target: {fileID: 43258729208463311, guid: 81d416e4d50ab674baec059dbf80c8c3, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 43258729208463311, guid: 81d416e4d50ab674baec059dbf80c8c3, type: 3} + - target: {fileID: 43258729208463311, guid: 81d416e4d50ab674baec059dbf80c8c3, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 2180070268385583621, guid: 81d416e4d50ab674baec059dbf80c8c3, type: 3} + - target: {fileID: 2180070268385583621, guid: 81d416e4d50ab674baec059dbf80c8c3, + type: 3} propertyPath: m_Name value: Mage_Mouth_Girl objectReference: {fileID: 0} - - target: {fileID: 2180070268385583621, guid: 81d416e4d50ab674baec059dbf80c8c3, type: 3} + - target: {fileID: 2180070268385583621, guid: 81d416e4d50ab674baec059dbf80c8c3, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -9091,12 +10326,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 81d416e4d50ab674baec059dbf80c8c3, type: 3} --- !u!1 &5217950414587416094 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 2180070268385583621, guid: 81d416e4d50ab674baec059dbf80c8c3, type: 3} + m_CorrespondingSourceObject: {fileID: 2180070268385583621, guid: 81d416e4d50ab674baec059dbf80c8c3, + type: 3} m_PrefabInstance: {fileID: 6208432101827980315} m_PrefabAsset: {fileID: 0} --- !u!4 &6246888024608674772 stripped Transform: - m_CorrespondingSourceObject: {fileID: 43258729208463311, guid: 81d416e4d50ab674baec059dbf80c8c3, type: 3} + m_CorrespondingSourceObject: {fileID: 43258729208463311, guid: 81d416e4d50ab674baec059dbf80c8c3, + type: 3} m_PrefabInstance: {fileID: 6208432101827980315} m_PrefabAsset: {fileID: 0} --- !u!1001 &6397055331922713218 @@ -9106,55 +10343,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 1313590801738418481} m_Modifications: - - target: {fileID: 7139357363232580974, guid: c6ac3982604073840a8fec4ffae70cff, type: 3} + - target: {fileID: 7139357363232580974, guid: c6ac3982604073840a8fec4ffae70cff, + type: 3} propertyPath: m_Name value: Tank_Glove_Rt_Boy objectReference: {fileID: 0} - - target: {fileID: 7139357363232580974, guid: c6ac3982604073840a8fec4ffae70cff, type: 3} + - target: {fileID: 7139357363232580974, guid: c6ac3982604073840a8fec4ffae70cff, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - - target: {fileID: 8505267692060151539, guid: c6ac3982604073840a8fec4ffae70cff, type: 3} + - target: {fileID: 8505267692060151539, guid: c6ac3982604073840a8fec4ffae70cff, + type: 3} propertyPath: m_RootOrder value: 16 objectReference: {fileID: 0} - - target: {fileID: 8505267692060151539, guid: c6ac3982604073840a8fec4ffae70cff, type: 3} + - target: {fileID: 8505267692060151539, guid: c6ac3982604073840a8fec4ffae70cff, + type: 3} propertyPath: m_LocalPosition.x value: 11.502487 objectReference: {fileID: 0} - - target: {fileID: 8505267692060151539, guid: c6ac3982604073840a8fec4ffae70cff, type: 3} + - target: {fileID: 8505267692060151539, guid: c6ac3982604073840a8fec4ffae70cff, + type: 3} propertyPath: m_LocalPosition.y value: -0.9710541 objectReference: {fileID: 0} - - target: {fileID: 8505267692060151539, guid: c6ac3982604073840a8fec4ffae70cff, type: 3} + - target: {fileID: 8505267692060151539, guid: c6ac3982604073840a8fec4ffae70cff, + type: 3} propertyPath: m_LocalPosition.z value: -0.18229675 objectReference: {fileID: 0} - - target: {fileID: 8505267692060151539, guid: c6ac3982604073840a8fec4ffae70cff, type: 3} + - target: {fileID: 8505267692060151539, guid: c6ac3982604073840a8fec4ffae70cff, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 8505267692060151539, guid: c6ac3982604073840a8fec4ffae70cff, type: 3} + - target: {fileID: 8505267692060151539, guid: c6ac3982604073840a8fec4ffae70cff, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 8505267692060151539, guid: c6ac3982604073840a8fec4ffae70cff, type: 3} + - target: {fileID: 8505267692060151539, guid: c6ac3982604073840a8fec4ffae70cff, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 8505267692060151539, guid: c6ac3982604073840a8fec4ffae70cff, type: 3} + - target: {fileID: 8505267692060151539, guid: c6ac3982604073840a8fec4ffae70cff, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 8505267692060151539, guid: c6ac3982604073840a8fec4ffae70cff, type: 3} + - target: {fileID: 8505267692060151539, guid: c6ac3982604073840a8fec4ffae70cff, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 8505267692060151539, guid: c6ac3982604073840a8fec4ffae70cff, type: 3} + - target: {fileID: 8505267692060151539, guid: c6ac3982604073840a8fec4ffae70cff, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 8505267692060151539, guid: c6ac3982604073840a8fec4ffae70cff, type: 3} + - target: {fileID: 8505267692060151539, guid: c6ac3982604073840a8fec4ffae70cff, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} @@ -9162,12 +10412,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: c6ac3982604073840a8fec4ffae70cff, type: 3} --- !u!1 &4310772072411938796 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 7139357363232580974, guid: c6ac3982604073840a8fec4ffae70cff, type: 3} + m_CorrespondingSourceObject: {fileID: 7139357363232580974, guid: c6ac3982604073840a8fec4ffae70cff, + type: 3} m_PrefabInstance: {fileID: 6397055331922713218} m_PrefabAsset: {fileID: 0} --- !u!4 &3372668395502670961 stripped Transform: - m_CorrespondingSourceObject: {fileID: 8505267692060151539, guid: c6ac3982604073840a8fec4ffae70cff, type: 3} + m_CorrespondingSourceObject: {fileID: 8505267692060151539, guid: c6ac3982604073840a8fec4ffae70cff, + type: 3} m_PrefabInstance: {fileID: 6397055331922713218} m_PrefabAsset: {fileID: 0} --- !u!1001 &6448532790863189501 @@ -9177,107 +10429,133 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4076098699203836966} m_Modifications: - - target: {fileID: 2011652338959278226, guid: d4c70436be25d444ea1438fd6b2e344c, type: 3} + - target: {fileID: 2011652338959278226, guid: d4c70436be25d444ea1438fd6b2e344c, + type: 3} propertyPath: m_RootOrder value: 0 objectReference: {fileID: 0} - - target: {fileID: 2011652338959278226, guid: d4c70436be25d444ea1438fd6b2e344c, type: 3} + - target: {fileID: 2011652338959278226, guid: d4c70436be25d444ea1438fd6b2e344c, + type: 3} propertyPath: m_LocalPosition.x value: 6.34 objectReference: {fileID: 0} - - target: {fileID: 2011652338959278226, guid: d4c70436be25d444ea1438fd6b2e344c, type: 3} + - target: {fileID: 2011652338959278226, guid: d4c70436be25d444ea1438fd6b2e344c, + type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 2011652338959278226, guid: d4c70436be25d444ea1438fd6b2e344c, type: 3} + - target: {fileID: 2011652338959278226, guid: d4c70436be25d444ea1438fd6b2e344c, + type: 3} propertyPath: m_LocalPosition.z value: -1.35 objectReference: {fileID: 0} - - target: {fileID: 2011652338959278226, guid: d4c70436be25d444ea1438fd6b2e344c, type: 3} + - target: {fileID: 2011652338959278226, guid: d4c70436be25d444ea1438fd6b2e344c, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 2011652338959278226, guid: d4c70436be25d444ea1438fd6b2e344c, type: 3} + - target: {fileID: 2011652338959278226, guid: d4c70436be25d444ea1438fd6b2e344c, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 2011652338959278226, guid: d4c70436be25d444ea1438fd6b2e344c, type: 3} + - target: {fileID: 2011652338959278226, guid: d4c70436be25d444ea1438fd6b2e344c, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 2011652338959278226, guid: d4c70436be25d444ea1438fd6b2e344c, type: 3} + - target: {fileID: 2011652338959278226, guid: d4c70436be25d444ea1438fd6b2e344c, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 2011652338959278226, guid: d4c70436be25d444ea1438fd6b2e344c, type: 3} + - target: {fileID: 2011652338959278226, guid: d4c70436be25d444ea1438fd6b2e344c, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2011652338959278226, guid: d4c70436be25d444ea1438fd6b2e344c, type: 3} + - target: {fileID: 2011652338959278226, guid: d4c70436be25d444ea1438fd6b2e344c, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 2011652338959278226, guid: d4c70436be25d444ea1438fd6b2e344c, type: 3} + - target: {fileID: 2011652338959278226, guid: d4c70436be25d444ea1438fd6b2e344c, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 3589556583489171081, guid: d4c70436be25d444ea1438fd6b2e344c, type: 3} + - target: {fileID: 3589556583489171081, guid: d4c70436be25d444ea1438fd6b2e344c, + type: 3} propertyPath: m_RootBone value: objectReference: {fileID: 3335427089582007770} - - target: {fileID: 3589556583489171081, guid: d4c70436be25d444ea1438fd6b2e344c, type: 3} + - target: {fileID: 3589556583489171081, guid: d4c70436be25d444ea1438fd6b2e344c, + type: 3} propertyPath: m_Bones.Array.data[0] value: objectReference: {fileID: 8498953204661844621} - - target: {fileID: 3589556583489171081, guid: d4c70436be25d444ea1438fd6b2e344c, type: 3} + - target: {fileID: 3589556583489171081, guid: d4c70436be25d444ea1438fd6b2e344c, + type: 3} propertyPath: m_Bones.Array.data[1] value: objectReference: {fileID: 7738679323201646151} - - target: {fileID: 3589556583489171081, guid: d4c70436be25d444ea1438fd6b2e344c, type: 3} + - target: {fileID: 3589556583489171081, guid: d4c70436be25d444ea1438fd6b2e344c, + type: 3} propertyPath: m_Bones.Array.data[2] value: objectReference: {fileID: 1323154135719462797} - - target: {fileID: 3589556583489171081, guid: d4c70436be25d444ea1438fd6b2e344c, type: 3} + - target: {fileID: 3589556583489171081, guid: d4c70436be25d444ea1438fd6b2e344c, + type: 3} propertyPath: m_Bones.Array.data[3] value: objectReference: {fileID: 587759327283076790} - - target: {fileID: 3589556583489171081, guid: d4c70436be25d444ea1438fd6b2e344c, type: 3} + - target: {fileID: 3589556583489171081, guid: d4c70436be25d444ea1438fd6b2e344c, + type: 3} propertyPath: m_Bones.Array.data[4] value: objectReference: {fileID: 7527788754810788122} - - target: {fileID: 3589556583489171081, guid: d4c70436be25d444ea1438fd6b2e344c, type: 3} + - target: {fileID: 3589556583489171081, guid: d4c70436be25d444ea1438fd6b2e344c, + type: 3} propertyPath: m_Bones.Array.data[5] value: objectReference: {fileID: 5606035577626729233} - - target: {fileID: 3589556583489171081, guid: d4c70436be25d444ea1438fd6b2e344c, type: 3} + - target: {fileID: 3589556583489171081, guid: d4c70436be25d444ea1438fd6b2e344c, + type: 3} propertyPath: m_Bones.Array.data[6] value: objectReference: {fileID: 8247809510486077625} - - target: {fileID: 3589556583489171081, guid: d4c70436be25d444ea1438fd6b2e344c, type: 3} + - target: {fileID: 3589556583489171081, guid: d4c70436be25d444ea1438fd6b2e344c, + type: 3} propertyPath: m_Bones.Array.data[7] value: objectReference: {fileID: 1055663782864180258} - - target: {fileID: 3589556583489171081, guid: d4c70436be25d444ea1438fd6b2e344c, type: 3} + - target: {fileID: 3589556583489171081, guid: d4c70436be25d444ea1438fd6b2e344c, + type: 3} propertyPath: m_Bones.Array.data[8] value: objectReference: {fileID: 432724711772772565} - - target: {fileID: 3589556583489171081, guid: d4c70436be25d444ea1438fd6b2e344c, type: 3} + - target: {fileID: 3589556583489171081, guid: d4c70436be25d444ea1438fd6b2e344c, + type: 3} propertyPath: m_Bones.Array.data[9] value: objectReference: {fileID: 3335427089582007770} - - target: {fileID: 3589556583489171081, guid: d4c70436be25d444ea1438fd6b2e344c, type: 3} + - target: {fileID: 3589556583489171081, guid: d4c70436be25d444ea1438fd6b2e344c, + type: 3} propertyPath: m_Bones.Array.data[10] value: objectReference: {fileID: 7079448961355668684} - - target: {fileID: 3589556583489171081, guid: d4c70436be25d444ea1438fd6b2e344c, type: 3} + - target: {fileID: 3589556583489171081, guid: d4c70436be25d444ea1438fd6b2e344c, + type: 3} propertyPath: m_Bones.Array.data[11] value: objectReference: {fileID: 600274334256031679} - - target: {fileID: 5776159984710506897, guid: d4c70436be25d444ea1438fd6b2e344c, type: 3} + - target: {fileID: 5776159984710506897, guid: d4c70436be25d444ea1438fd6b2e344c, + type: 3} propertyPath: m_Name value: Archer_Torso_Boy objectReference: {fileID: 0} - - target: {fileID: 5776159984710506897, guid: d4c70436be25d444ea1438fd6b2e344c, type: 3} + - target: {fileID: 5776159984710506897, guid: d4c70436be25d444ea1438fd6b2e344c, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -9285,12 +10563,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: d4c70436be25d444ea1438fd6b2e344c, type: 3} --- !u!4 &4798331745191310703 stripped Transform: - m_CorrespondingSourceObject: {fileID: 2011652338959278226, guid: d4c70436be25d444ea1438fd6b2e344c, type: 3} + m_CorrespondingSourceObject: {fileID: 2011652338959278226, guid: d4c70436be25d444ea1438fd6b2e344c, + type: 3} m_PrefabInstance: {fileID: 6448532790863189501} m_PrefabAsset: {fileID: 0} --- !u!1 &672373965999901804 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 5776159984710506897, guid: d4c70436be25d444ea1438fd6b2e344c, type: 3} + m_CorrespondingSourceObject: {fileID: 5776159984710506897, guid: d4c70436be25d444ea1438fd6b2e344c, + type: 3} m_PrefabInstance: {fileID: 6448532790863189501} m_PrefabAsset: {fileID: 0} --- !u!1001 &6606700807831919945 @@ -9300,55 +10580,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 600274334256031679} m_Modifications: - - target: {fileID: 746216920839762968, guid: 9f6459f592f802242a3d69d74824e9fe, type: 3} + - target: {fileID: 746216920839762968, guid: 9f6459f592f802242a3d69d74824e9fe, + type: 3} propertyPath: m_Name value: Empty_Gear_RS_Slot_Rogue_Boy objectReference: {fileID: 0} - - target: {fileID: 746216920839762968, guid: 9f6459f592f802242a3d69d74824e9fe, type: 3} + - target: {fileID: 746216920839762968, guid: 9f6459f592f802242a3d69d74824e9fe, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - - target: {fileID: 746216920839762969, guid: 9f6459f592f802242a3d69d74824e9fe, type: 3} + - target: {fileID: 746216920839762969, guid: 9f6459f592f802242a3d69d74824e9fe, + type: 3} propertyPath: m_RootOrder value: 6 objectReference: {fileID: 0} - - target: {fileID: 746216920839762969, guid: 9f6459f592f802242a3d69d74824e9fe, type: 3} + - target: {fileID: 746216920839762969, guid: 9f6459f592f802242a3d69d74824e9fe, + type: 3} propertyPath: m_LocalPosition.x value: 163.42566 objectReference: {fileID: 0} - - target: {fileID: 746216920839762969, guid: 9f6459f592f802242a3d69d74824e9fe, type: 3} + - target: {fileID: 746216920839762969, guid: 9f6459f592f802242a3d69d74824e9fe, + type: 3} propertyPath: m_LocalPosition.y value: 103.55921 objectReference: {fileID: 0} - - target: {fileID: 746216920839762969, guid: 9f6459f592f802242a3d69d74824e9fe, type: 3} + - target: {fileID: 746216920839762969, guid: 9f6459f592f802242a3d69d74824e9fe, + type: 3} propertyPath: m_LocalPosition.z value: -120.06873 objectReference: {fileID: 0} - - target: {fileID: 746216920839762969, guid: 9f6459f592f802242a3d69d74824e9fe, type: 3} + - target: {fileID: 746216920839762969, guid: 9f6459f592f802242a3d69d74824e9fe, + type: 3} propertyPath: m_LocalRotation.w value: -6.123234e-17 objectReference: {fileID: 0} - - target: {fileID: 746216920839762969, guid: 9f6459f592f802242a3d69d74824e9fe, type: 3} + - target: {fileID: 746216920839762969, guid: 9f6459f592f802242a3d69d74824e9fe, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 746216920839762969, guid: 9f6459f592f802242a3d69d74824e9fe, type: 3} + - target: {fileID: 746216920839762969, guid: 9f6459f592f802242a3d69d74824e9fe, + type: 3} propertyPath: m_LocalRotation.y value: -1 objectReference: {fileID: 0} - - target: {fileID: 746216920839762969, guid: 9f6459f592f802242a3d69d74824e9fe, type: 3} + - target: {fileID: 746216920839762969, guid: 9f6459f592f802242a3d69d74824e9fe, + type: 3} propertyPath: m_LocalRotation.z value: 6.123234e-17 objectReference: {fileID: 0} - - target: {fileID: 746216920839762969, guid: 9f6459f592f802242a3d69d74824e9fe, type: 3} + - target: {fileID: 746216920839762969, guid: 9f6459f592f802242a3d69d74824e9fe, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 746216920839762969, guid: 9f6459f592f802242a3d69d74824e9fe, type: 3} + - target: {fileID: 746216920839762969, guid: 9f6459f592f802242a3d69d74824e9fe, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 746216920839762969, guid: 9f6459f592f802242a3d69d74824e9fe, type: 3} + - target: {fileID: 746216920839762969, guid: 9f6459f592f802242a3d69d74824e9fe, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} @@ -9356,12 +10649,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 9f6459f592f802242a3d69d74824e9fe, type: 3} --- !u!1 &5905537651277146449 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 746216920839762968, guid: 9f6459f592f802242a3d69d74824e9fe, type: 3} + m_CorrespondingSourceObject: {fileID: 746216920839762968, guid: 9f6459f592f802242a3d69d74824e9fe, + type: 3} m_PrefabInstance: {fileID: 6606700807831919945} m_PrefabAsset: {fileID: 0} --- !u!4 &5905537651277146448 stripped Transform: - m_CorrespondingSourceObject: {fileID: 746216920839762969, guid: 9f6459f592f802242a3d69d74824e9fe, type: 3} + m_CorrespondingSourceObject: {fileID: 746216920839762969, guid: 9f6459f592f802242a3d69d74824e9fe, + type: 3} m_PrefabInstance: {fileID: 6606700807831919945} m_PrefabAsset: {fileID: 0} --- !u!1001 &6866304493091563963 @@ -9371,55 +10666,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 8183775978794224953} m_Modifications: - - target: {fileID: 6006542803703651031, guid: e175816b7acd11844aa43433f1ccce78, type: 3} + - target: {fileID: 6006542803703651031, guid: e175816b7acd11844aa43433f1ccce78, + type: 3} propertyPath: m_RootOrder value: 3 objectReference: {fileID: 0} - - target: {fileID: 6006542803703651031, guid: e175816b7acd11844aa43433f1ccce78, type: 3} + - target: {fileID: 6006542803703651031, guid: e175816b7acd11844aa43433f1ccce78, + type: 3} propertyPath: m_LocalPosition.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 6006542803703651031, guid: e175816b7acd11844aa43433f1ccce78, type: 3} + - target: {fileID: 6006542803703651031, guid: e175816b7acd11844aa43433f1ccce78, + type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 6006542803703651031, guid: e175816b7acd11844aa43433f1ccce78, type: 3} + - target: {fileID: 6006542803703651031, guid: e175816b7acd11844aa43433f1ccce78, + type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 6006542803703651031, guid: e175816b7acd11844aa43433f1ccce78, type: 3} + - target: {fileID: 6006542803703651031, guid: e175816b7acd11844aa43433f1ccce78, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 6006542803703651031, guid: e175816b7acd11844aa43433f1ccce78, type: 3} + - target: {fileID: 6006542803703651031, guid: e175816b7acd11844aa43433f1ccce78, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 6006542803703651031, guid: e175816b7acd11844aa43433f1ccce78, type: 3} + - target: {fileID: 6006542803703651031, guid: e175816b7acd11844aa43433f1ccce78, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 6006542803703651031, guid: e175816b7acd11844aa43433f1ccce78, type: 3} + - target: {fileID: 6006542803703651031, guid: e175816b7acd11844aa43433f1ccce78, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 6006542803703651031, guid: e175816b7acd11844aa43433f1ccce78, type: 3} + - target: {fileID: 6006542803703651031, guid: e175816b7acd11844aa43433f1ccce78, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 6006542803703651031, guid: e175816b7acd11844aa43433f1ccce78, type: 3} + - target: {fileID: 6006542803703651031, guid: e175816b7acd11844aa43433f1ccce78, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 6006542803703651031, guid: e175816b7acd11844aa43433f1ccce78, type: 3} + - target: {fileID: 6006542803703651031, guid: e175816b7acd11844aa43433f1ccce78, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 6814288492312997063, guid: e175816b7acd11844aa43433f1ccce78, type: 3} + - target: {fileID: 6814288492312997063, guid: e175816b7acd11844aa43433f1ccce78, + type: 3} propertyPath: m_Name value: Tank_Head_Girl objectReference: {fileID: 0} - - target: {fileID: 6814288492312997063, guid: e175816b7acd11844aa43433f1ccce78, type: 3} + - target: {fileID: 6814288492312997063, guid: e175816b7acd11844aa43433f1ccce78, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -9427,12 +10735,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: e175816b7acd11844aa43433f1ccce78, type: 3} --- !u!1 &133758652153398652 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 6814288492312997063, guid: e175816b7acd11844aa43433f1ccce78, type: 3} + m_CorrespondingSourceObject: {fileID: 6814288492312997063, guid: e175816b7acd11844aa43433f1ccce78, + type: 3} m_PrefabInstance: {fileID: 6866304493091563963} m_PrefabAsset: {fileID: 0} --- !u!4 &869622806274077548 stripped Transform: - m_CorrespondingSourceObject: {fileID: 6006542803703651031, guid: e175816b7acd11844aa43433f1ccce78, type: 3} + m_CorrespondingSourceObject: {fileID: 6006542803703651031, guid: e175816b7acd11844aa43433f1ccce78, + type: 3} m_PrefabInstance: {fileID: 6866304493091563963} m_PrefabAsset: {fileID: 0} --- !u!1001 &6871000889768776274 @@ -9442,55 +10752,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 867326443869147655} m_Modifications: - - target: {fileID: 191184210285897690, guid: 504e553e61eeb8f408a21a553029d953, type: 3} + - target: {fileID: 191184210285897690, guid: 504e553e61eeb8f408a21a553029d953, + type: 3} propertyPath: m_RootOrder value: 1 objectReference: {fileID: 0} - - target: {fileID: 191184210285897690, guid: 504e553e61eeb8f408a21a553029d953, type: 3} + - target: {fileID: 191184210285897690, guid: 504e553e61eeb8f408a21a553029d953, + type: 3} propertyPath: m_LocalPosition.x value: 92.7072 objectReference: {fileID: 0} - - target: {fileID: 191184210285897690, guid: 504e553e61eeb8f408a21a553029d953, type: 3} + - target: {fileID: 191184210285897690, guid: 504e553e61eeb8f408a21a553029d953, + type: 3} propertyPath: m_LocalPosition.y value: -86.04759 objectReference: {fileID: 0} - - target: {fileID: 191184210285897690, guid: 504e553e61eeb8f408a21a553029d953, type: 3} + - target: {fileID: 191184210285897690, guid: 504e553e61eeb8f408a21a553029d953, + type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 191184210285897690, guid: 504e553e61eeb8f408a21a553029d953, type: 3} + - target: {fileID: 191184210285897690, guid: 504e553e61eeb8f408a21a553029d953, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 191184210285897690, guid: 504e553e61eeb8f408a21a553029d953, type: 3} + - target: {fileID: 191184210285897690, guid: 504e553e61eeb8f408a21a553029d953, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 191184210285897690, guid: 504e553e61eeb8f408a21a553029d953, type: 3} + - target: {fileID: 191184210285897690, guid: 504e553e61eeb8f408a21a553029d953, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 191184210285897690, guid: 504e553e61eeb8f408a21a553029d953, type: 3} + - target: {fileID: 191184210285897690, guid: 504e553e61eeb8f408a21a553029d953, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 191184210285897690, guid: 504e553e61eeb8f408a21a553029d953, type: 3} + - target: {fileID: 191184210285897690, guid: 504e553e61eeb8f408a21a553029d953, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 191184210285897690, guid: 504e553e61eeb8f408a21a553029d953, type: 3} + - target: {fileID: 191184210285897690, guid: 504e553e61eeb8f408a21a553029d953, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 191184210285897690, guid: 504e553e61eeb8f408a21a553029d953, type: 3} + - target: {fileID: 191184210285897690, guid: 504e553e61eeb8f408a21a553029d953, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 7944953250984988272, guid: 504e553e61eeb8f408a21a553029d953, type: 3} + - target: {fileID: 7944953250984988272, guid: 504e553e61eeb8f408a21a553029d953, + type: 3} propertyPath: m_Name value: Archer_Hand_Lt_Girl objectReference: {fileID: 0} - - target: {fileID: 7944953250984988272, guid: 504e553e61eeb8f408a21a553029d953, type: 3} + - target: {fileID: 7944953250984988272, guid: 504e553e61eeb8f408a21a553029d953, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -9498,12 +10821,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 504e553e61eeb8f408a21a553029d953, type: 3} --- !u!1 &3537742453572639778 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 7944953250984988272, guid: 504e553e61eeb8f408a21a553029d953, type: 3} + m_CorrespondingSourceObject: {fileID: 7944953250984988272, guid: 504e553e61eeb8f408a21a553029d953, + type: 3} m_PrefabInstance: {fileID: 6871000889768776274} m_PrefabAsset: {fileID: 0} --- !u!4 &6772723213300315528 stripped Transform: - m_CorrespondingSourceObject: {fileID: 191184210285897690, guid: 504e553e61eeb8f408a21a553029d953, type: 3} + m_CorrespondingSourceObject: {fileID: 191184210285897690, guid: 504e553e61eeb8f408a21a553029d953, + type: 3} m_PrefabInstance: {fileID: 6871000889768776274} m_PrefabAsset: {fileID: 0} --- !u!1001 &6893049245738629348 @@ -9513,59 +10838,73 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 7079448961355668684} m_Modifications: - - target: {fileID: 4786498065510351345, guid: 366173ddb12eeaa44a8b07044adb53bf, type: 3} + - target: {fileID: 4786498065510351345, guid: 366173ddb12eeaa44a8b07044adb53bf, + type: 3} propertyPath: m_Name value: Empty_Gear_LS_Slot_Mage_Boy objectReference: {fileID: 0} - - target: {fileID: 4786498065510351345, guid: 366173ddb12eeaa44a8b07044adb53bf, type: 3} + - target: {fileID: 4786498065510351345, guid: 366173ddb12eeaa44a8b07044adb53bf, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - - target: {fileID: 4786498065510351346, guid: 366173ddb12eeaa44a8b07044adb53bf, type: 3} + - target: {fileID: 4786498065510351346, guid: 366173ddb12eeaa44a8b07044adb53bf, + type: 3} propertyPath: m_RootOrder value: 3 objectReference: {fileID: 0} - - target: {fileID: 4786498065510351346, guid: 366173ddb12eeaa44a8b07044adb53bf, type: 3} + - target: {fileID: 4786498065510351346, guid: 366173ddb12eeaa44a8b07044adb53bf, + type: 3} propertyPath: m_LocalScale.y value: 99.99997 objectReference: {fileID: 0} - - target: {fileID: 4786498065510351346, guid: 366173ddb12eeaa44a8b07044adb53bf, type: 3} + - target: {fileID: 4786498065510351346, guid: 366173ddb12eeaa44a8b07044adb53bf, + type: 3} propertyPath: m_LocalPosition.x value: -174.81204 objectReference: {fileID: 0} - - target: {fileID: 4786498065510351346, guid: 366173ddb12eeaa44a8b07044adb53bf, type: 3} + - target: {fileID: 4786498065510351346, guid: 366173ddb12eeaa44a8b07044adb53bf, + type: 3} propertyPath: m_LocalPosition.y value: 112.23023 objectReference: {fileID: 0} - - target: {fileID: 4786498065510351346, guid: 366173ddb12eeaa44a8b07044adb53bf, type: 3} + - target: {fileID: 4786498065510351346, guid: 366173ddb12eeaa44a8b07044adb53bf, + type: 3} propertyPath: m_LocalPosition.z value: 143.44847 objectReference: {fileID: 0} - - target: {fileID: 4786498065510351346, guid: 366173ddb12eeaa44a8b07044adb53bf, type: 3} + - target: {fileID: 4786498065510351346, guid: 366173ddb12eeaa44a8b07044adb53bf, + type: 3} propertyPath: m_LocalRotation.w value: 0.5698161 objectReference: {fileID: 0} - - target: {fileID: 4786498065510351346, guid: 366173ddb12eeaa44a8b07044adb53bf, type: 3} + - target: {fileID: 4786498065510351346, guid: 366173ddb12eeaa44a8b07044adb53bf, + type: 3} propertyPath: m_LocalRotation.x value: -0.45872247 objectReference: {fileID: 0} - - target: {fileID: 4786498065510351346, guid: 366173ddb12eeaa44a8b07044adb53bf, type: 3} + - target: {fileID: 4786498065510351346, guid: 366173ddb12eeaa44a8b07044adb53bf, + type: 3} propertyPath: m_LocalRotation.y value: 0.4735928 objectReference: {fileID: 0} - - target: {fileID: 4786498065510351346, guid: 366173ddb12eeaa44a8b07044adb53bf, type: 3} + - target: {fileID: 4786498065510351346, guid: 366173ddb12eeaa44a8b07044adb53bf, + type: 3} propertyPath: m_LocalRotation.z value: 0.49050307 objectReference: {fileID: 0} - - target: {fileID: 4786498065510351346, guid: 366173ddb12eeaa44a8b07044adb53bf, type: 3} + - target: {fileID: 4786498065510351346, guid: 366173ddb12eeaa44a8b07044adb53bf, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4786498065510351346, guid: 366173ddb12eeaa44a8b07044adb53bf, type: 3} + - target: {fileID: 4786498065510351346, guid: 366173ddb12eeaa44a8b07044adb53bf, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4786498065510351346, guid: 366173ddb12eeaa44a8b07044adb53bf, type: 3} + - target: {fileID: 4786498065510351346, guid: 366173ddb12eeaa44a8b07044adb53bf, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} @@ -9573,12 +10912,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 366173ddb12eeaa44a8b07044adb53bf, type: 3} --- !u!1 &2144849655946590485 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 4786498065510351345, guid: 366173ddb12eeaa44a8b07044adb53bf, type: 3} + m_CorrespondingSourceObject: {fileID: 4786498065510351345, guid: 366173ddb12eeaa44a8b07044adb53bf, + type: 3} m_PrefabInstance: {fileID: 6893049245738629348} m_PrefabAsset: {fileID: 0} --- !u!4 &2144849655946590486 stripped Transform: - m_CorrespondingSourceObject: {fileID: 4786498065510351346, guid: 366173ddb12eeaa44a8b07044adb53bf, type: 3} + m_CorrespondingSourceObject: {fileID: 4786498065510351346, guid: 366173ddb12eeaa44a8b07044adb53bf, + type: 3} m_PrefabInstance: {fileID: 6893049245738629348} m_PrefabAsset: {fileID: 0} --- !u!1001 &7004206993844692110 @@ -9588,55 +10929,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 6681451058136744116} m_Modifications: - - target: {fileID: 4883758558422511117, guid: 8333151726cf4304794824fd636cfe65, type: 3} + - target: {fileID: 4883758558422511117, guid: 8333151726cf4304794824fd636cfe65, + type: 3} propertyPath: m_RootOrder value: 3 objectReference: {fileID: 0} - - target: {fileID: 4883758558422511117, guid: 8333151726cf4304794824fd636cfe65, type: 3} + - target: {fileID: 4883758558422511117, guid: 8333151726cf4304794824fd636cfe65, + type: 3} propertyPath: m_LocalPosition.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 4883758558422511117, guid: 8333151726cf4304794824fd636cfe65, type: 3} + - target: {fileID: 4883758558422511117, guid: 8333151726cf4304794824fd636cfe65, + type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4883758558422511117, guid: 8333151726cf4304794824fd636cfe65, type: 3} + - target: {fileID: 4883758558422511117, guid: 8333151726cf4304794824fd636cfe65, + type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4883758558422511117, guid: 8333151726cf4304794824fd636cfe65, type: 3} + - target: {fileID: 4883758558422511117, guid: 8333151726cf4304794824fd636cfe65, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 4883758558422511117, guid: 8333151726cf4304794824fd636cfe65, type: 3} + - target: {fileID: 4883758558422511117, guid: 8333151726cf4304794824fd636cfe65, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4883758558422511117, guid: 8333151726cf4304794824fd636cfe65, type: 3} + - target: {fileID: 4883758558422511117, guid: 8333151726cf4304794824fd636cfe65, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 4883758558422511117, guid: 8333151726cf4304794824fd636cfe65, type: 3} + - target: {fileID: 4883758558422511117, guid: 8333151726cf4304794824fd636cfe65, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 4883758558422511117, guid: 8333151726cf4304794824fd636cfe65, type: 3} + - target: {fileID: 4883758558422511117, guid: 8333151726cf4304794824fd636cfe65, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4883758558422511117, guid: 8333151726cf4304794824fd636cfe65, type: 3} + - target: {fileID: 4883758558422511117, guid: 8333151726cf4304794824fd636cfe65, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4883758558422511117, guid: 8333151726cf4304794824fd636cfe65, type: 3} + - target: {fileID: 4883758558422511117, guid: 8333151726cf4304794824fd636cfe65, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 5789788779721051373, guid: 8333151726cf4304794824fd636cfe65, type: 3} + - target: {fileID: 5789788779721051373, guid: 8333151726cf4304794824fd636cfe65, + type: 3} propertyPath: m_Name value: Rogue_Head_Boy objectReference: {fileID: 0} - - target: {fileID: 5789788779721051373, guid: 8333151726cf4304794824fd636cfe65, type: 3} + - target: {fileID: 5789788779721051373, guid: 8333151726cf4304794824fd636cfe65, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -9644,12 +10998,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 8333151726cf4304794824fd636cfe65, type: 3} --- !u!4 &2519035763482905219 stripped Transform: - m_CorrespondingSourceObject: {fileID: 4883758558422511117, guid: 8333151726cf4304794824fd636cfe65, type: 3} + m_CorrespondingSourceObject: {fileID: 4883758558422511117, guid: 8333151726cf4304794824fd636cfe65, + type: 3} m_PrefabInstance: {fileID: 7004206993844692110} m_PrefabAsset: {fileID: 0} --- !u!1 &3560807020904556643 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 5789788779721051373, guid: 8333151726cf4304794824fd636cfe65, type: 3} + m_CorrespondingSourceObject: {fileID: 5789788779721051373, guid: 8333151726cf4304794824fd636cfe65, + type: 3} m_PrefabInstance: {fileID: 7004206993844692110} m_PrefabAsset: {fileID: 0} --- !u!1001 &7044127606035756360 @@ -9659,55 +11015,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 5429000291070753441} m_Modifications: - - target: {fileID: 466514913485880409, guid: 04ff3bf4a191dc04289e64c606a908eb, type: 3} + - target: {fileID: 466514913485880409, guid: 04ff3bf4a191dc04289e64c606a908eb, + type: 3} propertyPath: m_RootOrder value: 0 objectReference: {fileID: 0} - - target: {fileID: 466514913485880409, guid: 04ff3bf4a191dc04289e64c606a908eb, type: 3} + - target: {fileID: 466514913485880409, guid: 04ff3bf4a191dc04289e64c606a908eb, + type: 3} propertyPath: m_LocalPosition.x value: 0.0000009536743 objectReference: {fileID: 0} - - target: {fileID: 466514913485880409, guid: 04ff3bf4a191dc04289e64c606a908eb, type: 3} + - target: {fileID: 466514913485880409, guid: 04ff3bf4a191dc04289e64c606a908eb, + type: 3} propertyPath: m_LocalPosition.y value: 131.4864 objectReference: {fileID: 0} - - target: {fileID: 466514913485880409, guid: 04ff3bf4a191dc04289e64c606a908eb, type: 3} + - target: {fileID: 466514913485880409, guid: 04ff3bf4a191dc04289e64c606a908eb, + type: 3} propertyPath: m_LocalPosition.z value: -6.742526 objectReference: {fileID: 0} - - target: {fileID: 466514913485880409, guid: 04ff3bf4a191dc04289e64c606a908eb, type: 3} + - target: {fileID: 466514913485880409, guid: 04ff3bf4a191dc04289e64c606a908eb, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 466514913485880409, guid: 04ff3bf4a191dc04289e64c606a908eb, type: 3} + - target: {fileID: 466514913485880409, guid: 04ff3bf4a191dc04289e64c606a908eb, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 466514913485880409, guid: 04ff3bf4a191dc04289e64c606a908eb, type: 3} + - target: {fileID: 466514913485880409, guid: 04ff3bf4a191dc04289e64c606a908eb, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 466514913485880409, guid: 04ff3bf4a191dc04289e64c606a908eb, type: 3} + - target: {fileID: 466514913485880409, guid: 04ff3bf4a191dc04289e64c606a908eb, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 466514913485880409, guid: 04ff3bf4a191dc04289e64c606a908eb, type: 3} + - target: {fileID: 466514913485880409, guid: 04ff3bf4a191dc04289e64c606a908eb, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 466514913485880409, guid: 04ff3bf4a191dc04289e64c606a908eb, type: 3} + - target: {fileID: 466514913485880409, guid: 04ff3bf4a191dc04289e64c606a908eb, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 466514913485880409, guid: 04ff3bf4a191dc04289e64c606a908eb, type: 3} + - target: {fileID: 466514913485880409, guid: 04ff3bf4a191dc04289e64c606a908eb, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 1541232149410868070, guid: 04ff3bf4a191dc04289e64c606a908eb, type: 3} + - target: {fileID: 1541232149410868070, guid: 04ff3bf4a191dc04289e64c606a908eb, + type: 3} propertyPath: m_Name value: Archer_Ears_Girl objectReference: {fileID: 0} - - target: {fileID: 1541232149410868070, guid: 04ff3bf4a191dc04289e64c606a908eb, type: 3} + - target: {fileID: 1541232149410868070, guid: 04ff3bf4a191dc04289e64c606a908eb, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -9715,12 +11084,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 04ff3bf4a191dc04289e64c606a908eb, type: 3} --- !u!1 &8404362065137065518 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 1541232149410868070, guid: 04ff3bf4a191dc04289e64c606a908eb, type: 3} + m_CorrespondingSourceObject: {fileID: 1541232149410868070, guid: 04ff3bf4a191dc04289e64c606a908eb, + type: 3} m_PrefabInstance: {fileID: 7044127606035756360} m_PrefabAsset: {fileID: 0} --- !u!4 &7473899966985390353 stripped Transform: - m_CorrespondingSourceObject: {fileID: 466514913485880409, guid: 04ff3bf4a191dc04289e64c606a908eb, type: 3} + m_CorrespondingSourceObject: {fileID: 466514913485880409, guid: 04ff3bf4a191dc04289e64c606a908eb, + type: 3} m_PrefabInstance: {fileID: 7044127606035756360} m_PrefabAsset: {fileID: 0} --- !u!1001 &7099168928194408615 @@ -9730,107 +11101,133 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4076098699203836966} m_Modifications: - - target: {fileID: 5000179183518570097, guid: 96d162b8d0449a24b942c1b529aaf0eb, type: 3} + - target: {fileID: 5000179183518570097, guid: 96d162b8d0449a24b942c1b529aaf0eb, + type: 3} propertyPath: m_RootBone value: objectReference: {fileID: 3335427089582007770} - - target: {fileID: 5000179183518570097, guid: 96d162b8d0449a24b942c1b529aaf0eb, type: 3} + - target: {fileID: 5000179183518570097, guid: 96d162b8d0449a24b942c1b529aaf0eb, + type: 3} propertyPath: m_Bones.Array.data[0] value: objectReference: {fileID: 432724711772772565} - - target: {fileID: 5000179183518570097, guid: 96d162b8d0449a24b942c1b529aaf0eb, type: 3} + - target: {fileID: 5000179183518570097, guid: 96d162b8d0449a24b942c1b529aaf0eb, + type: 3} propertyPath: m_Bones.Array.data[1] value: objectReference: {fileID: 3335427089582007770} - - target: {fileID: 5000179183518570097, guid: 96d162b8d0449a24b942c1b529aaf0eb, type: 3} + - target: {fileID: 5000179183518570097, guid: 96d162b8d0449a24b942c1b529aaf0eb, + type: 3} propertyPath: m_Bones.Array.data[2] value: objectReference: {fileID: 7738679323201646151} - - target: {fileID: 5000179183518570097, guid: 96d162b8d0449a24b942c1b529aaf0eb, type: 3} + - target: {fileID: 5000179183518570097, guid: 96d162b8d0449a24b942c1b529aaf0eb, + type: 3} propertyPath: m_Bones.Array.data[3] value: objectReference: {fileID: 600274334256031679} - - target: {fileID: 5000179183518570097, guid: 96d162b8d0449a24b942c1b529aaf0eb, type: 3} + - target: {fileID: 5000179183518570097, guid: 96d162b8d0449a24b942c1b529aaf0eb, + type: 3} propertyPath: m_Bones.Array.data[4] value: objectReference: {fileID: 7079448961355668684} - - target: {fileID: 5000179183518570097, guid: 96d162b8d0449a24b942c1b529aaf0eb, type: 3} + - target: {fileID: 5000179183518570097, guid: 96d162b8d0449a24b942c1b529aaf0eb, + type: 3} propertyPath: m_Bones.Array.data[5] value: objectReference: {fileID: 5606035577626729233} - - target: {fileID: 5000179183518570097, guid: 96d162b8d0449a24b942c1b529aaf0eb, type: 3} + - target: {fileID: 5000179183518570097, guid: 96d162b8d0449a24b942c1b529aaf0eb, + type: 3} propertyPath: m_Bones.Array.data[6] value: objectReference: {fileID: 8498953204661844621} - - target: {fileID: 5000179183518570097, guid: 96d162b8d0449a24b942c1b529aaf0eb, type: 3} + - target: {fileID: 5000179183518570097, guid: 96d162b8d0449a24b942c1b529aaf0eb, + type: 3} propertyPath: m_Bones.Array.data[7] value: objectReference: {fileID: 1323154135719462797} - - target: {fileID: 5000179183518570097, guid: 96d162b8d0449a24b942c1b529aaf0eb, type: 3} + - target: {fileID: 5000179183518570097, guid: 96d162b8d0449a24b942c1b529aaf0eb, + type: 3} propertyPath: m_Bones.Array.data[8] value: objectReference: {fileID: 587759327283076790} - - target: {fileID: 5000179183518570097, guid: 96d162b8d0449a24b942c1b529aaf0eb, type: 3} + - target: {fileID: 5000179183518570097, guid: 96d162b8d0449a24b942c1b529aaf0eb, + type: 3} propertyPath: m_Bones.Array.data[9] value: objectReference: {fileID: 7527788754810788122} - - target: {fileID: 5000179183518570097, guid: 96d162b8d0449a24b942c1b529aaf0eb, type: 3} + - target: {fileID: 5000179183518570097, guid: 96d162b8d0449a24b942c1b529aaf0eb, + type: 3} propertyPath: m_Bones.Array.data[10] value: objectReference: {fileID: 8247809510486077625} - - target: {fileID: 5000179183518570097, guid: 96d162b8d0449a24b942c1b529aaf0eb, type: 3} + - target: {fileID: 5000179183518570097, guid: 96d162b8d0449a24b942c1b529aaf0eb, + type: 3} propertyPath: m_Bones.Array.data[11] value: objectReference: {fileID: 1055663782864180258} - - target: {fileID: 5394793644269933502, guid: 96d162b8d0449a24b942c1b529aaf0eb, type: 3} + - target: {fileID: 5394793644269933502, guid: 96d162b8d0449a24b942c1b529aaf0eb, + type: 3} propertyPath: m_RootOrder value: 11 objectReference: {fileID: 0} - - target: {fileID: 5394793644269933502, guid: 96d162b8d0449a24b942c1b529aaf0eb, type: 3} + - target: {fileID: 5394793644269933502, guid: 96d162b8d0449a24b942c1b529aaf0eb, + type: 3} propertyPath: m_LocalPosition.x value: 6.34 objectReference: {fileID: 0} - - target: {fileID: 5394793644269933502, guid: 96d162b8d0449a24b942c1b529aaf0eb, type: 3} + - target: {fileID: 5394793644269933502, guid: 96d162b8d0449a24b942c1b529aaf0eb, + type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 5394793644269933502, guid: 96d162b8d0449a24b942c1b529aaf0eb, type: 3} + - target: {fileID: 5394793644269933502, guid: 96d162b8d0449a24b942c1b529aaf0eb, + type: 3} propertyPath: m_LocalPosition.z value: -1.35 objectReference: {fileID: 0} - - target: {fileID: 5394793644269933502, guid: 96d162b8d0449a24b942c1b529aaf0eb, type: 3} + - target: {fileID: 5394793644269933502, guid: 96d162b8d0449a24b942c1b529aaf0eb, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 5394793644269933502, guid: 96d162b8d0449a24b942c1b529aaf0eb, type: 3} + - target: {fileID: 5394793644269933502, guid: 96d162b8d0449a24b942c1b529aaf0eb, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 5394793644269933502, guid: 96d162b8d0449a24b942c1b529aaf0eb, type: 3} + - target: {fileID: 5394793644269933502, guid: 96d162b8d0449a24b942c1b529aaf0eb, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 5394793644269933502, guid: 96d162b8d0449a24b942c1b529aaf0eb, type: 3} + - target: {fileID: 5394793644269933502, guid: 96d162b8d0449a24b942c1b529aaf0eb, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 5394793644269933502, guid: 96d162b8d0449a24b942c1b529aaf0eb, type: 3} + - target: {fileID: 5394793644269933502, guid: 96d162b8d0449a24b942c1b529aaf0eb, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 5394793644269933502, guid: 96d162b8d0449a24b942c1b529aaf0eb, type: 3} + - target: {fileID: 5394793644269933502, guid: 96d162b8d0449a24b942c1b529aaf0eb, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 5394793644269933502, guid: 96d162b8d0449a24b942c1b529aaf0eb, type: 3} + - target: {fileID: 5394793644269933502, guid: 96d162b8d0449a24b942c1b529aaf0eb, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 8859048948852385141, guid: 96d162b8d0449a24b942c1b529aaf0eb, type: 3} + - target: {fileID: 8859048948852385141, guid: 96d162b8d0449a24b942c1b529aaf0eb, + type: 3} propertyPath: m_Name value: Tank_Torso_Boy objectReference: {fileID: 0} - - target: {fileID: 8859048948852385141, guid: 96d162b8d0449a24b942c1b529aaf0eb, type: 3} + - target: {fileID: 8859048948852385141, guid: 96d162b8d0449a24b942c1b529aaf0eb, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -9838,12 +11235,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 96d162b8d0449a24b942c1b529aaf0eb, type: 3} --- !u!4 &2908050726380512025 stripped Transform: - m_CorrespondingSourceObject: {fileID: 5394793644269933502, guid: 96d162b8d0449a24b942c1b529aaf0eb, type: 3} + m_CorrespondingSourceObject: {fileID: 5394793644269933502, guid: 96d162b8d0449a24b942c1b529aaf0eb, + type: 3} m_PrefabInstance: {fileID: 7099168928194408615} m_PrefabAsset: {fileID: 0} --- !u!1 &1762308859610813906 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 8859048948852385141, guid: 96d162b8d0449a24b942c1b529aaf0eb, type: 3} + m_CorrespondingSourceObject: {fileID: 8859048948852385141, guid: 96d162b8d0449a24b942c1b529aaf0eb, + type: 3} m_PrefabInstance: {fileID: 7099168928194408615} m_PrefabAsset: {fileID: 0} --- !u!1001 &7521723659311259115 @@ -9853,55 +11252,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 867326443869147655} m_Modifications: - - target: {fileID: 2520521945591834894, guid: 2487d13b49e97a942aa791451c11aff5, type: 3} + - target: {fileID: 2520521945591834894, guid: 2487d13b49e97a942aa791451c11aff5, + type: 3} propertyPath: m_RootOrder value: 13 objectReference: {fileID: 0} - - target: {fileID: 2520521945591834894, guid: 2487d13b49e97a942aa791451c11aff5, type: 3} + - target: {fileID: 2520521945591834894, guid: 2487d13b49e97a942aa791451c11aff5, + type: 3} propertyPath: m_LocalPosition.x value: -53.010986 objectReference: {fileID: 0} - - target: {fileID: 2520521945591834894, guid: 2487d13b49e97a942aa791451c11aff5, type: 3} + - target: {fileID: 2520521945591834894, guid: 2487d13b49e97a942aa791451c11aff5, + type: 3} propertyPath: m_LocalPosition.y value: 103.55913 objectReference: {fileID: 0} - - target: {fileID: 2520521945591834894, guid: 2487d13b49e97a942aa791451c11aff5, type: 3} + - target: {fileID: 2520521945591834894, guid: 2487d13b49e97a942aa791451c11aff5, + type: 3} propertyPath: m_LocalPosition.z value: 120.0687 objectReference: {fileID: 0} - - target: {fileID: 2520521945591834894, guid: 2487d13b49e97a942aa791451c11aff5, type: 3} + - target: {fileID: 2520521945591834894, guid: 2487d13b49e97a942aa791451c11aff5, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 2520521945591834894, guid: 2487d13b49e97a942aa791451c11aff5, type: 3} + - target: {fileID: 2520521945591834894, guid: 2487d13b49e97a942aa791451c11aff5, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 2520521945591834894, guid: 2487d13b49e97a942aa791451c11aff5, type: 3} + - target: {fileID: 2520521945591834894, guid: 2487d13b49e97a942aa791451c11aff5, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 2520521945591834894, guid: 2487d13b49e97a942aa791451c11aff5, type: 3} + - target: {fileID: 2520521945591834894, guid: 2487d13b49e97a942aa791451c11aff5, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 2520521945591834894, guid: 2487d13b49e97a942aa791451c11aff5, type: 3} + - target: {fileID: 2520521945591834894, guid: 2487d13b49e97a942aa791451c11aff5, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2520521945591834894, guid: 2487d13b49e97a942aa791451c11aff5, type: 3} + - target: {fileID: 2520521945591834894, guid: 2487d13b49e97a942aa791451c11aff5, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 2520521945591834894, guid: 2487d13b49e97a942aa791451c11aff5, type: 3} + - target: {fileID: 2520521945591834894, guid: 2487d13b49e97a942aa791451c11aff5, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 2520521945591834895, guid: 2487d13b49e97a942aa791451c11aff5, type: 3} + - target: {fileID: 2520521945591834895, guid: 2487d13b49e97a942aa791451c11aff5, + type: 3} propertyPath: m_Name value: Empty_Gear_LH_Slot_Archer_Boy objectReference: {fileID: 0} - - target: {fileID: 2520521945591834895, guid: 2487d13b49e97a942aa791451c11aff5, type: 3} + - target: {fileID: 2520521945591834895, guid: 2487d13b49e97a942aa791451c11aff5, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -9909,12 +11321,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 2487d13b49e97a942aa791451c11aff5, type: 3} --- !u!4 &5375106121943348453 stripped Transform: - m_CorrespondingSourceObject: {fileID: 2520521945591834894, guid: 2487d13b49e97a942aa791451c11aff5, type: 3} + m_CorrespondingSourceObject: {fileID: 2520521945591834894, guid: 2487d13b49e97a942aa791451c11aff5, + type: 3} m_PrefabInstance: {fileID: 7521723659311259115} m_PrefabAsset: {fileID: 0} --- !u!1 &5375106121943348452 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 2520521945591834895, guid: 2487d13b49e97a942aa791451c11aff5, type: 3} + m_CorrespondingSourceObject: {fileID: 2520521945591834895, guid: 2487d13b49e97a942aa791451c11aff5, + type: 3} m_PrefabInstance: {fileID: 7521723659311259115} m_PrefabAsset: {fileID: 0} --- !u!1001 &7839961676450993726 @@ -9924,55 +11338,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 867326443869147655} m_Modifications: - - target: {fileID: 7553149160173740277, guid: 9247620d554536843aeffd44c5beac1a, type: 3} + - target: {fileID: 7553149160173740277, guid: 9247620d554536843aeffd44c5beac1a, + type: 3} propertyPath: m_RootOrder value: 15 objectReference: {fileID: 0} - - target: {fileID: 7553149160173740277, guid: 9247620d554536843aeffd44c5beac1a, type: 3} + - target: {fileID: 7553149160173740277, guid: 9247620d554536843aeffd44c5beac1a, + type: 3} propertyPath: m_LocalPosition.x value: -53.010986 objectReference: {fileID: 0} - - target: {fileID: 7553149160173740277, guid: 9247620d554536843aeffd44c5beac1a, type: 3} + - target: {fileID: 7553149160173740277, guid: 9247620d554536843aeffd44c5beac1a, + type: 3} propertyPath: m_LocalPosition.y value: 103.55913 objectReference: {fileID: 0} - - target: {fileID: 7553149160173740277, guid: 9247620d554536843aeffd44c5beac1a, type: 3} + - target: {fileID: 7553149160173740277, guid: 9247620d554536843aeffd44c5beac1a, + type: 3} propertyPath: m_LocalPosition.z value: 120.0687 objectReference: {fileID: 0} - - target: {fileID: 7553149160173740277, guid: 9247620d554536843aeffd44c5beac1a, type: 3} + - target: {fileID: 7553149160173740277, guid: 9247620d554536843aeffd44c5beac1a, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 7553149160173740277, guid: 9247620d554536843aeffd44c5beac1a, type: 3} + - target: {fileID: 7553149160173740277, guid: 9247620d554536843aeffd44c5beac1a, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 7553149160173740277, guid: 9247620d554536843aeffd44c5beac1a, type: 3} + - target: {fileID: 7553149160173740277, guid: 9247620d554536843aeffd44c5beac1a, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 7553149160173740277, guid: 9247620d554536843aeffd44c5beac1a, type: 3} + - target: {fileID: 7553149160173740277, guid: 9247620d554536843aeffd44c5beac1a, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 7553149160173740277, guid: 9247620d554536843aeffd44c5beac1a, type: 3} + - target: {fileID: 7553149160173740277, guid: 9247620d554536843aeffd44c5beac1a, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 7553149160173740277, guid: 9247620d554536843aeffd44c5beac1a, type: 3} + - target: {fileID: 7553149160173740277, guid: 9247620d554536843aeffd44c5beac1a, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 7553149160173740277, guid: 9247620d554536843aeffd44c5beac1a, type: 3} + - target: {fileID: 7553149160173740277, guid: 9247620d554536843aeffd44c5beac1a, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 7553149160173740278, guid: 9247620d554536843aeffd44c5beac1a, type: 3} + - target: {fileID: 7553149160173740278, guid: 9247620d554536843aeffd44c5beac1a, + type: 3} propertyPath: m_Name value: Empty_Gear_LH_Slot_Mage_Boy objectReference: {fileID: 0} - - target: {fileID: 7553149160173740278, guid: 9247620d554536843aeffd44c5beac1a, type: 3} + - target: {fileID: 7553149160173740278, guid: 9247620d554536843aeffd44c5beac1a, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -9980,12 +11407,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 9247620d554536843aeffd44c5beac1a, type: 3} --- !u!1 &296972317324195528 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 7553149160173740278, guid: 9247620d554536843aeffd44c5beac1a, type: 3} + m_CorrespondingSourceObject: {fileID: 7553149160173740278, guid: 9247620d554536843aeffd44c5beac1a, + type: 3} m_PrefabInstance: {fileID: 7839961676450993726} m_PrefabAsset: {fileID: 0} --- !u!4 &296972317324195531 stripped Transform: - m_CorrespondingSourceObject: {fileID: 7553149160173740277, guid: 9247620d554536843aeffd44c5beac1a, type: 3} + m_CorrespondingSourceObject: {fileID: 7553149160173740277, guid: 9247620d554536843aeffd44c5beac1a, + type: 3} m_PrefabInstance: {fileID: 7839961676450993726} m_PrefabAsset: {fileID: 0} --- !u!1001 &7914045656838607417 @@ -9995,55 +11424,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 6681451058136744116} m_Modifications: - - target: {fileID: 4419099245736702643, guid: f8a516c1167e4f04caea2c241683246a, type: 3} + - target: {fileID: 4419099245736702643, guid: f8a516c1167e4f04caea2c241683246a, + type: 3} propertyPath: m_Name value: Rogue_Hair_Boy objectReference: {fileID: 0} - - target: {fileID: 4419099245736702643, guid: f8a516c1167e4f04caea2c241683246a, type: 3} + - target: {fileID: 4419099245736702643, guid: f8a516c1167e4f04caea2c241683246a, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - - target: {fileID: 6531986874709196849, guid: f8a516c1167e4f04caea2c241683246a, type: 3} + - target: {fileID: 6531986874709196849, guid: f8a516c1167e4f04caea2c241683246a, + type: 3} propertyPath: m_RootOrder value: 2 objectReference: {fileID: 0} - - target: {fileID: 6531986874709196849, guid: f8a516c1167e4f04caea2c241683246a, type: 3} + - target: {fileID: 6531986874709196849, guid: f8a516c1167e4f04caea2c241683246a, + type: 3} propertyPath: m_LocalPosition.x value: 0.00000023841858 objectReference: {fileID: 0} - - target: {fileID: 6531986874709196849, guid: f8a516c1167e4f04caea2c241683246a, type: 3} + - target: {fileID: 6531986874709196849, guid: f8a516c1167e4f04caea2c241683246a, + type: 3} propertyPath: m_LocalPosition.y value: -0.00000023841858 objectReference: {fileID: 0} - - target: {fileID: 6531986874709196849, guid: f8a516c1167e4f04caea2c241683246a, type: 3} + - target: {fileID: 6531986874709196849, guid: f8a516c1167e4f04caea2c241683246a, + type: 3} propertyPath: m_LocalPosition.z value: -0.00003415346 objectReference: {fileID: 0} - - target: {fileID: 6531986874709196849, guid: f8a516c1167e4f04caea2c241683246a, type: 3} + - target: {fileID: 6531986874709196849, guid: f8a516c1167e4f04caea2c241683246a, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 6531986874709196849, guid: f8a516c1167e4f04caea2c241683246a, type: 3} + - target: {fileID: 6531986874709196849, guid: f8a516c1167e4f04caea2c241683246a, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 6531986874709196849, guid: f8a516c1167e4f04caea2c241683246a, type: 3} + - target: {fileID: 6531986874709196849, guid: f8a516c1167e4f04caea2c241683246a, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 6531986874709196849, guid: f8a516c1167e4f04caea2c241683246a, type: 3} + - target: {fileID: 6531986874709196849, guid: f8a516c1167e4f04caea2c241683246a, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 6531986874709196849, guid: f8a516c1167e4f04caea2c241683246a, type: 3} + - target: {fileID: 6531986874709196849, guid: f8a516c1167e4f04caea2c241683246a, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 6531986874709196849, guid: f8a516c1167e4f04caea2c241683246a, type: 3} + - target: {fileID: 6531986874709196849, guid: f8a516c1167e4f04caea2c241683246a, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 6531986874709196849, guid: f8a516c1167e4f04caea2c241683246a, type: 3} + - target: {fileID: 6531986874709196849, guid: f8a516c1167e4f04caea2c241683246a, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} @@ -10051,12 +11493,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: f8a516c1167e4f04caea2c241683246a, type: 3} --- !u!4 &3995275526093197832 stripped Transform: - m_CorrespondingSourceObject: {fileID: 6531986874709196849, guid: f8a516c1167e4f04caea2c241683246a, type: 3} + m_CorrespondingSourceObject: {fileID: 6531986874709196849, guid: f8a516c1167e4f04caea2c241683246a, + type: 3} m_PrefabInstance: {fileID: 7914045656838607417} m_PrefabAsset: {fileID: 0} --- !u!1 &5802780101192163466 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 4419099245736702643, guid: f8a516c1167e4f04caea2c241683246a, type: 3} + m_CorrespondingSourceObject: {fileID: 4419099245736702643, guid: f8a516c1167e4f04caea2c241683246a, + type: 3} m_PrefabInstance: {fileID: 7914045656838607417} m_PrefabAsset: {fileID: 0} --- !u!1001 &8098981425645452563 @@ -10066,55 +11510,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 3241768821857961484} m_Modifications: - - target: {fileID: 137326728054772544, guid: 758d6740ae542f14d90cccb5c2568094, type: 3} + - target: {fileID: 137326728054772544, guid: 758d6740ae542f14d90cccb5c2568094, + type: 3} propertyPath: m_RootOrder value: 2 objectReference: {fileID: 0} - - target: {fileID: 137326728054772544, guid: 758d6740ae542f14d90cccb5c2568094, type: 3} + - target: {fileID: 137326728054772544, guid: 758d6740ae542f14d90cccb5c2568094, + type: 3} propertyPath: m_LocalPosition.x value: -0.00000023841858 objectReference: {fileID: 0} - - target: {fileID: 137326728054772544, guid: 758d6740ae542f14d90cccb5c2568094, type: 3} + - target: {fileID: 137326728054772544, guid: 758d6740ae542f14d90cccb5c2568094, + type: 3} propertyPath: m_LocalPosition.y value: 169.33167 objectReference: {fileID: 0} - - target: {fileID: 137326728054772544, guid: 758d6740ae542f14d90cccb5c2568094, type: 3} + - target: {fileID: 137326728054772544, guid: 758d6740ae542f14d90cccb5c2568094, + type: 3} propertyPath: m_LocalPosition.z value: -25.155983 objectReference: {fileID: 0} - - target: {fileID: 137326728054772544, guid: 758d6740ae542f14d90cccb5c2568094, type: 3} + - target: {fileID: 137326728054772544, guid: 758d6740ae542f14d90cccb5c2568094, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 137326728054772544, guid: 758d6740ae542f14d90cccb5c2568094, type: 3} + - target: {fileID: 137326728054772544, guid: 758d6740ae542f14d90cccb5c2568094, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 137326728054772544, guid: 758d6740ae542f14d90cccb5c2568094, type: 3} + - target: {fileID: 137326728054772544, guid: 758d6740ae542f14d90cccb5c2568094, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 137326728054772544, guid: 758d6740ae542f14d90cccb5c2568094, type: 3} + - target: {fileID: 137326728054772544, guid: 758d6740ae542f14d90cccb5c2568094, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 137326728054772544, guid: 758d6740ae542f14d90cccb5c2568094, type: 3} + - target: {fileID: 137326728054772544, guid: 758d6740ae542f14d90cccb5c2568094, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 137326728054772544, guid: 758d6740ae542f14d90cccb5c2568094, type: 3} + - target: {fileID: 137326728054772544, guid: 758d6740ae542f14d90cccb5c2568094, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 137326728054772544, guid: 758d6740ae542f14d90cccb5c2568094, type: 3} + - target: {fileID: 137326728054772544, guid: 758d6740ae542f14d90cccb5c2568094, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 9139685453574556226, guid: 758d6740ae542f14d90cccb5c2568094, type: 3} + - target: {fileID: 9139685453574556226, guid: 758d6740ae542f14d90cccb5c2568094, + type: 3} propertyPath: m_Name value: Rogue_Hair_Girl objectReference: {fileID: 0} - - target: {fileID: 9139685453574556226, guid: 758d6740ae542f14d90cccb5c2568094, type: 3} + - target: {fileID: 9139685453574556226, guid: 758d6740ae542f14d90cccb5c2568094, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -10122,12 +11579,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 758d6740ae542f14d90cccb5c2568094, type: 3} --- !u!1 &1059458397898323793 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 9139685453574556226, guid: 758d6740ae542f14d90cccb5c2568094, type: 3} + m_CorrespondingSourceObject: {fileID: 9139685453574556226, guid: 758d6740ae542f14d90cccb5c2568094, + type: 3} m_PrefabInstance: {fileID: 8098981425645452563} m_PrefabAsset: {fileID: 0} --- !u!4 &8179308077129559635 stripped Transform: - m_CorrespondingSourceObject: {fileID: 137326728054772544, guid: 758d6740ae542f14d90cccb5c2568094, type: 3} + m_CorrespondingSourceObject: {fileID: 137326728054772544, guid: 758d6740ae542f14d90cccb5c2568094, + type: 3} m_PrefabInstance: {fileID: 8098981425645452563} m_PrefabAsset: {fileID: 0} --- !u!1001 &8244162897608143800 @@ -10137,55 +11596,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4591219086638572107} m_Modifications: - - target: {fileID: 255960785935816299, guid: 0d03bbe9b29c640479d1723784681069, type: 3} + - target: {fileID: 255960785935816299, guid: 0d03bbe9b29c640479d1723784681069, + type: 3} propertyPath: m_Name value: Tank_Hair_Boy objectReference: {fileID: 0} - - target: {fileID: 255960785935816299, guid: 0d03bbe9b29c640479d1723784681069, type: 3} + - target: {fileID: 255960785935816299, guid: 0d03bbe9b29c640479d1723784681069, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - - target: {fileID: 3696473607405731937, guid: 0d03bbe9b29c640479d1723784681069, type: 3} + - target: {fileID: 3696473607405731937, guid: 0d03bbe9b29c640479d1723784681069, + type: 3} propertyPath: m_RootOrder value: 2 objectReference: {fileID: 0} - - target: {fileID: 3696473607405731937, guid: 0d03bbe9b29c640479d1723784681069, type: 3} + - target: {fileID: 3696473607405731937, guid: 0d03bbe9b29c640479d1723784681069, + type: 3} propertyPath: m_LocalPosition.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 3696473607405731937, guid: 0d03bbe9b29c640479d1723784681069, type: 3} + - target: {fileID: 3696473607405731937, guid: 0d03bbe9b29c640479d1723784681069, + type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3696473607405731937, guid: 0d03bbe9b29c640479d1723784681069, type: 3} + - target: {fileID: 3696473607405731937, guid: 0d03bbe9b29c640479d1723784681069, + type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 3696473607405731937, guid: 0d03bbe9b29c640479d1723784681069, type: 3} + - target: {fileID: 3696473607405731937, guid: 0d03bbe9b29c640479d1723784681069, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 3696473607405731937, guid: 0d03bbe9b29c640479d1723784681069, type: 3} + - target: {fileID: 3696473607405731937, guid: 0d03bbe9b29c640479d1723784681069, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3696473607405731937, guid: 0d03bbe9b29c640479d1723784681069, type: 3} + - target: {fileID: 3696473607405731937, guid: 0d03bbe9b29c640479d1723784681069, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 3696473607405731937, guid: 0d03bbe9b29c640479d1723784681069, type: 3} + - target: {fileID: 3696473607405731937, guid: 0d03bbe9b29c640479d1723784681069, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 3696473607405731937, guid: 0d03bbe9b29c640479d1723784681069, type: 3} + - target: {fileID: 3696473607405731937, guid: 0d03bbe9b29c640479d1723784681069, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3696473607405731937, guid: 0d03bbe9b29c640479d1723784681069, type: 3} + - target: {fileID: 3696473607405731937, guid: 0d03bbe9b29c640479d1723784681069, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3696473607405731937, guid: 0d03bbe9b29c640479d1723784681069, type: 3} + - target: {fileID: 3696473607405731937, guid: 0d03bbe9b29c640479d1723784681069, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} @@ -10193,12 +11665,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 0d03bbe9b29c640479d1723784681069, type: 3} --- !u!1 &8206821324606219731 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 255960785935816299, guid: 0d03bbe9b29c640479d1723784681069, type: 3} + m_CorrespondingSourceObject: {fileID: 255960785935816299, guid: 0d03bbe9b29c640479d1723784681069, + type: 3} m_PrefabInstance: {fileID: 8244162897608143800} m_PrefabAsset: {fileID: 0} --- !u!4 &4694339952126063577 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3696473607405731937, guid: 0d03bbe9b29c640479d1723784681069, type: 3} + m_CorrespondingSourceObject: {fileID: 3696473607405731937, guid: 0d03bbe9b29c640479d1723784681069, + type: 3} m_PrefabInstance: {fileID: 8244162897608143800} m_PrefabAsset: {fileID: 0} --- !u!1001 &8302099709642406450 @@ -10208,55 +11682,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 1206277181869945479} m_Modifications: - - target: {fileID: 171920830932993699, guid: e56d3c078f0da694eaf640f6dd9825ea, type: 3} + - target: {fileID: 171920830932993699, guid: e56d3c078f0da694eaf640f6dd9825ea, + type: 3} propertyPath: m_RootOrder value: 0 objectReference: {fileID: 0} - - target: {fileID: 171920830932993699, guid: e56d3c078f0da694eaf640f6dd9825ea, type: 3} + - target: {fileID: 171920830932993699, guid: e56d3c078f0da694eaf640f6dd9825ea, + type: 3} propertyPath: m_LocalPosition.x value: -1.6433237 objectReference: {fileID: 0} - - target: {fileID: 171920830932993699, guid: e56d3c078f0da694eaf640f6dd9825ea, type: 3} + - target: {fileID: 171920830932993699, guid: e56d3c078f0da694eaf640f6dd9825ea, + type: 3} propertyPath: m_LocalPosition.y value: -8.682834 objectReference: {fileID: 0} - - target: {fileID: 171920830932993699, guid: e56d3c078f0da694eaf640f6dd9825ea, type: 3} + - target: {fileID: 171920830932993699, guid: e56d3c078f0da694eaf640f6dd9825ea, + type: 3} propertyPath: m_LocalPosition.z value: -7.2283363 objectReference: {fileID: 0} - - target: {fileID: 171920830932993699, guid: e56d3c078f0da694eaf640f6dd9825ea, type: 3} + - target: {fileID: 171920830932993699, guid: e56d3c078f0da694eaf640f6dd9825ea, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 171920830932993699, guid: e56d3c078f0da694eaf640f6dd9825ea, type: 3} + - target: {fileID: 171920830932993699, guid: e56d3c078f0da694eaf640f6dd9825ea, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 171920830932993699, guid: e56d3c078f0da694eaf640f6dd9825ea, type: 3} + - target: {fileID: 171920830932993699, guid: e56d3c078f0da694eaf640f6dd9825ea, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 171920830932993699, guid: e56d3c078f0da694eaf640f6dd9825ea, type: 3} + - target: {fileID: 171920830932993699, guid: e56d3c078f0da694eaf640f6dd9825ea, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 171920830932993699, guid: e56d3c078f0da694eaf640f6dd9825ea, type: 3} + - target: {fileID: 171920830932993699, guid: e56d3c078f0da694eaf640f6dd9825ea, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 171920830932993699, guid: e56d3c078f0da694eaf640f6dd9825ea, type: 3} + - target: {fileID: 171920830932993699, guid: e56d3c078f0da694eaf640f6dd9825ea, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 171920830932993699, guid: e56d3c078f0da694eaf640f6dd9825ea, type: 3} + - target: {fileID: 171920830932993699, guid: e56d3c078f0da694eaf640f6dd9825ea, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 3136673781293985266, guid: e56d3c078f0da694eaf640f6dd9825ea, type: 3} + - target: {fileID: 3136673781293985266, guid: e56d3c078f0da694eaf640f6dd9825ea, + type: 3} propertyPath: m_Name value: Archer_Ears_Boy objectReference: {fileID: 0} - - target: {fileID: 3136673781293985266, guid: e56d3c078f0da694eaf640f6dd9825ea, type: 3} + - target: {fileID: 3136673781293985266, guid: e56d3c078f0da694eaf640f6dd9825ea, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -10264,12 +11751,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: e56d3c078f0da694eaf640f6dd9825ea, type: 3} --- !u!1 &6390976879751649216 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 3136673781293985266, guid: e56d3c078f0da694eaf640f6dd9825ea, type: 3} + m_CorrespondingSourceObject: {fileID: 3136673781293985266, guid: e56d3c078f0da694eaf640f6dd9825ea, + type: 3} m_PrefabInstance: {fileID: 8302099709642406450} m_PrefabAsset: {fileID: 0} --- !u!4 &8166207715733650577 stripped Transform: - m_CorrespondingSourceObject: {fileID: 171920830932993699, guid: e56d3c078f0da694eaf640f6dd9825ea, type: 3} + m_CorrespondingSourceObject: {fileID: 171920830932993699, guid: e56d3c078f0da694eaf640f6dd9825ea, + type: 3} m_PrefabInstance: {fileID: 8302099709642406450} m_PrefabAsset: {fileID: 0} --- !u!1001 &8347723644698594825 @@ -10279,55 +11768,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 600274334256031679} m_Modifications: - - target: {fileID: 1891405313910436612, guid: 771cc7c8c90170547bb06f9c5e7f6949, type: 3} + - target: {fileID: 1891405313910436612, guid: 771cc7c8c90170547bb06f9c5e7f6949, + type: 3} propertyPath: m_Name value: Empty_Gear_RS_Slot_Mage_Boy objectReference: {fileID: 0} - - target: {fileID: 1891405313910436612, guid: 771cc7c8c90170547bb06f9c5e7f6949, type: 3} + - target: {fileID: 1891405313910436612, guid: 771cc7c8c90170547bb06f9c5e7f6949, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - - target: {fileID: 1891405313910436615, guid: 771cc7c8c90170547bb06f9c5e7f6949, type: 3} + - target: {fileID: 1891405313910436615, guid: 771cc7c8c90170547bb06f9c5e7f6949, + type: 3} propertyPath: m_RootOrder value: 4 objectReference: {fileID: 0} - - target: {fileID: 1891405313910436615, guid: 771cc7c8c90170547bb06f9c5e7f6949, type: 3} + - target: {fileID: 1891405313910436615, guid: 771cc7c8c90170547bb06f9c5e7f6949, + type: 3} propertyPath: m_LocalPosition.x value: 163.42566 objectReference: {fileID: 0} - - target: {fileID: 1891405313910436615, guid: 771cc7c8c90170547bb06f9c5e7f6949, type: 3} + - target: {fileID: 1891405313910436615, guid: 771cc7c8c90170547bb06f9c5e7f6949, + type: 3} propertyPath: m_LocalPosition.y value: 103.55921 objectReference: {fileID: 0} - - target: {fileID: 1891405313910436615, guid: 771cc7c8c90170547bb06f9c5e7f6949, type: 3} + - target: {fileID: 1891405313910436615, guid: 771cc7c8c90170547bb06f9c5e7f6949, + type: 3} propertyPath: m_LocalPosition.z value: -120.06873 objectReference: {fileID: 0} - - target: {fileID: 1891405313910436615, guid: 771cc7c8c90170547bb06f9c5e7f6949, type: 3} + - target: {fileID: 1891405313910436615, guid: 771cc7c8c90170547bb06f9c5e7f6949, + type: 3} propertyPath: m_LocalRotation.w value: -6.123234e-17 objectReference: {fileID: 0} - - target: {fileID: 1891405313910436615, guid: 771cc7c8c90170547bb06f9c5e7f6949, type: 3} + - target: {fileID: 1891405313910436615, guid: 771cc7c8c90170547bb06f9c5e7f6949, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 1891405313910436615, guid: 771cc7c8c90170547bb06f9c5e7f6949, type: 3} + - target: {fileID: 1891405313910436615, guid: 771cc7c8c90170547bb06f9c5e7f6949, + type: 3} propertyPath: m_LocalRotation.y value: -1 objectReference: {fileID: 0} - - target: {fileID: 1891405313910436615, guid: 771cc7c8c90170547bb06f9c5e7f6949, type: 3} + - target: {fileID: 1891405313910436615, guid: 771cc7c8c90170547bb06f9c5e7f6949, + type: 3} propertyPath: m_LocalRotation.z value: 6.123234e-17 objectReference: {fileID: 0} - - target: {fileID: 1891405313910436615, guid: 771cc7c8c90170547bb06f9c5e7f6949, type: 3} + - target: {fileID: 1891405313910436615, guid: 771cc7c8c90170547bb06f9c5e7f6949, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 1891405313910436615, guid: 771cc7c8c90170547bb06f9c5e7f6949, type: 3} + - target: {fileID: 1891405313910436615, guid: 771cc7c8c90170547bb06f9c5e7f6949, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 1891405313910436615, guid: 771cc7c8c90170547bb06f9c5e7f6949, type: 3} + - target: {fileID: 1891405313910436615, guid: 771cc7c8c90170547bb06f9c5e7f6949, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} @@ -10335,12 +11837,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 771cc7c8c90170547bb06f9c5e7f6949, type: 3} --- !u!1 &7630942137655852301 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 1891405313910436612, guid: 771cc7c8c90170547bb06f9c5e7f6949, type: 3} + m_CorrespondingSourceObject: {fileID: 1891405313910436612, guid: 771cc7c8c90170547bb06f9c5e7f6949, + type: 3} m_PrefabInstance: {fileID: 8347723644698594825} m_PrefabAsset: {fileID: 0} --- !u!4 &7630942137655852302 stripped Transform: - m_CorrespondingSourceObject: {fileID: 1891405313910436615, guid: 771cc7c8c90170547bb06f9c5e7f6949, type: 3} + m_CorrespondingSourceObject: {fileID: 1891405313910436615, guid: 771cc7c8c90170547bb06f9c5e7f6949, + type: 3} m_PrefabInstance: {fileID: 8347723644698594825} m_PrefabAsset: {fileID: 0} --- !u!1001 &8362755281742832406 @@ -10350,55 +11854,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 1206277181869945479} m_Modifications: - - target: {fileID: 2048691677645863828, guid: 2e85821bdeaf00a44940c61bee5eb202, type: 3} + - target: {fileID: 2048691677645863828, guid: 2e85821bdeaf00a44940c61bee5eb202, + type: 3} propertyPath: m_RootOrder value: 3 objectReference: {fileID: 0} - - target: {fileID: 2048691677645863828, guid: 2e85821bdeaf00a44940c61bee5eb202, type: 3} + - target: {fileID: 2048691677645863828, guid: 2e85821bdeaf00a44940c61bee5eb202, + type: 3} propertyPath: m_LocalPosition.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 2048691677645863828, guid: 2e85821bdeaf00a44940c61bee5eb202, type: 3} + - target: {fileID: 2048691677645863828, guid: 2e85821bdeaf00a44940c61bee5eb202, + type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 2048691677645863828, guid: 2e85821bdeaf00a44940c61bee5eb202, type: 3} + - target: {fileID: 2048691677645863828, guid: 2e85821bdeaf00a44940c61bee5eb202, + type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 2048691677645863828, guid: 2e85821bdeaf00a44940c61bee5eb202, type: 3} + - target: {fileID: 2048691677645863828, guid: 2e85821bdeaf00a44940c61bee5eb202, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 2048691677645863828, guid: 2e85821bdeaf00a44940c61bee5eb202, type: 3} + - target: {fileID: 2048691677645863828, guid: 2e85821bdeaf00a44940c61bee5eb202, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2048691677645863828, guid: 2e85821bdeaf00a44940c61bee5eb202, type: 3} + - target: {fileID: 2048691677645863828, guid: 2e85821bdeaf00a44940c61bee5eb202, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 2048691677645863828, guid: 2e85821bdeaf00a44940c61bee5eb202, type: 3} + - target: {fileID: 2048691677645863828, guid: 2e85821bdeaf00a44940c61bee5eb202, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 2048691677645863828, guid: 2e85821bdeaf00a44940c61bee5eb202, type: 3} + - target: {fileID: 2048691677645863828, guid: 2e85821bdeaf00a44940c61bee5eb202, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2048691677645863828, guid: 2e85821bdeaf00a44940c61bee5eb202, type: 3} + - target: {fileID: 2048691677645863828, guid: 2e85821bdeaf00a44940c61bee5eb202, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 2048691677645863828, guid: 2e85821bdeaf00a44940c61bee5eb202, type: 3} + - target: {fileID: 2048691677645863828, guid: 2e85821bdeaf00a44940c61bee5eb202, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 3533900168489198985, guid: 2e85821bdeaf00a44940c61bee5eb202, type: 3} + - target: {fileID: 3533900168489198985, guid: 2e85821bdeaf00a44940c61bee5eb202, + type: 3} propertyPath: m_Name value: Archer_Head_Boy objectReference: {fileID: 0} - - target: {fileID: 3533900168489198985, guid: 2e85821bdeaf00a44940c61bee5eb202, type: 3} + - target: {fileID: 3533900168489198985, guid: 2e85821bdeaf00a44940c61bee5eb202, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -10406,12 +11923,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 2e85821bdeaf00a44940c61bee5eb202, type: 3} --- !u!1 &4973265795085780639 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 3533900168489198985, guid: 2e85821bdeaf00a44940c61bee5eb202, type: 3} + m_CorrespondingSourceObject: {fileID: 3533900168489198985, guid: 2e85821bdeaf00a44940c61bee5eb202, + type: 3} m_PrefabInstance: {fileID: 8362755281742832406} m_PrefabAsset: {fileID: 0} --- !u!4 &7521032985750853762 stripped Transform: - m_CorrespondingSourceObject: {fileID: 2048691677645863828, guid: 2e85821bdeaf00a44940c61bee5eb202, type: 3} + m_CorrespondingSourceObject: {fileID: 2048691677645863828, guid: 2e85821bdeaf00a44940c61bee5eb202, + type: 3} m_PrefabInstance: {fileID: 8362755281742832406} m_PrefabAsset: {fileID: 0} --- !u!1001 &8441804533237136610 @@ -10421,55 +11940,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 1459343620667739469} m_Modifications: - - target: {fileID: 2943503567649835537, guid: 1c7e96cf5583c2c409ecf639ae35864a, type: 3} + - target: {fileID: 2943503567649835537, guid: 1c7e96cf5583c2c409ecf639ae35864a, + type: 3} propertyPath: m_Name value: Mage_Hair_Boy objectReference: {fileID: 0} - - target: {fileID: 2943503567649835537, guid: 1c7e96cf5583c2c409ecf639ae35864a, type: 3} + - target: {fileID: 2943503567649835537, guid: 1c7e96cf5583c2c409ecf639ae35864a, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - - target: {fileID: 4368696078031193429, guid: 1c7e96cf5583c2c409ecf639ae35864a, type: 3} + - target: {fileID: 4368696078031193429, guid: 1c7e96cf5583c2c409ecf639ae35864a, + type: 3} propertyPath: m_RootOrder value: 2 objectReference: {fileID: 0} - - target: {fileID: 4368696078031193429, guid: 1c7e96cf5583c2c409ecf639ae35864a, type: 3} + - target: {fileID: 4368696078031193429, guid: 1c7e96cf5583c2c409ecf639ae35864a, + type: 3} propertyPath: m_LocalPosition.x value: 0.000042438507 objectReference: {fileID: 0} - - target: {fileID: 4368696078031193429, guid: 1c7e96cf5583c2c409ecf639ae35864a, type: 3} + - target: {fileID: 4368696078031193429, guid: 1c7e96cf5583c2c409ecf639ae35864a, + type: 3} propertyPath: m_LocalPosition.y value: 148.51094 objectReference: {fileID: 0} - - target: {fileID: 4368696078031193429, guid: 1c7e96cf5583c2c409ecf639ae35864a, type: 3} + - target: {fileID: 4368696078031193429, guid: 1c7e96cf5583c2c409ecf639ae35864a, + type: 3} propertyPath: m_LocalPosition.z value: 3.1389377 objectReference: {fileID: 0} - - target: {fileID: 4368696078031193429, guid: 1c7e96cf5583c2c409ecf639ae35864a, type: 3} + - target: {fileID: 4368696078031193429, guid: 1c7e96cf5583c2c409ecf639ae35864a, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 4368696078031193429, guid: 1c7e96cf5583c2c409ecf639ae35864a, type: 3} + - target: {fileID: 4368696078031193429, guid: 1c7e96cf5583c2c409ecf639ae35864a, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4368696078031193429, guid: 1c7e96cf5583c2c409ecf639ae35864a, type: 3} + - target: {fileID: 4368696078031193429, guid: 1c7e96cf5583c2c409ecf639ae35864a, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 4368696078031193429, guid: 1c7e96cf5583c2c409ecf639ae35864a, type: 3} + - target: {fileID: 4368696078031193429, guid: 1c7e96cf5583c2c409ecf639ae35864a, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 4368696078031193429, guid: 1c7e96cf5583c2c409ecf639ae35864a, type: 3} + - target: {fileID: 4368696078031193429, guid: 1c7e96cf5583c2c409ecf639ae35864a, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4368696078031193429, guid: 1c7e96cf5583c2c409ecf639ae35864a, type: 3} + - target: {fileID: 4368696078031193429, guid: 1c7e96cf5583c2c409ecf639ae35864a, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4368696078031193429, guid: 1c7e96cf5583c2c409ecf639ae35864a, type: 3} + - target: {fileID: 4368696078031193429, guid: 1c7e96cf5583c2c409ecf639ae35864a, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} @@ -10477,12 +12009,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 1c7e96cf5583c2c409ecf639ae35864a, type: 3} --- !u!4 &5298460294871300535 stripped Transform: - m_CorrespondingSourceObject: {fileID: 4368696078031193429, guid: 1c7e96cf5583c2c409ecf639ae35864a, type: 3} + m_CorrespondingSourceObject: {fileID: 4368696078031193429, guid: 1c7e96cf5583c2c409ecf639ae35864a, + type: 3} m_PrefabInstance: {fileID: 8441804533237136610} m_PrefabAsset: {fileID: 0} --- !u!1 &6772917518819178227 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 2943503567649835537, guid: 1c7e96cf5583c2c409ecf639ae35864a, type: 3} + m_CorrespondingSourceObject: {fileID: 2943503567649835537, guid: 1c7e96cf5583c2c409ecf639ae35864a, + type: 3} m_PrefabInstance: {fileID: 8441804533237136610} m_PrefabAsset: {fileID: 0} --- !u!1001 &8680434239732569381 @@ -10492,59 +12026,73 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 7079448961355668684} m_Modifications: - - target: {fileID: 3176612804033008685, guid: b3591f11ae6a1d240bdfd715fe8473f9, type: 3} + - target: {fileID: 3176612804033008685, guid: b3591f11ae6a1d240bdfd715fe8473f9, + type: 3} propertyPath: m_RootOrder value: 4 objectReference: {fileID: 0} - - target: {fileID: 3176612804033008685, guid: b3591f11ae6a1d240bdfd715fe8473f9, type: 3} + - target: {fileID: 3176612804033008685, guid: b3591f11ae6a1d240bdfd715fe8473f9, + type: 3} propertyPath: m_LocalScale.y value: 99.99997 objectReference: {fileID: 0} - - target: {fileID: 3176612804033008685, guid: b3591f11ae6a1d240bdfd715fe8473f9, type: 3} + - target: {fileID: 3176612804033008685, guid: b3591f11ae6a1d240bdfd715fe8473f9, + type: 3} propertyPath: m_LocalPosition.x value: -174.81204 objectReference: {fileID: 0} - - target: {fileID: 3176612804033008685, guid: b3591f11ae6a1d240bdfd715fe8473f9, type: 3} + - target: {fileID: 3176612804033008685, guid: b3591f11ae6a1d240bdfd715fe8473f9, + type: 3} propertyPath: m_LocalPosition.y value: 112.23023 objectReference: {fileID: 0} - - target: {fileID: 3176612804033008685, guid: b3591f11ae6a1d240bdfd715fe8473f9, type: 3} + - target: {fileID: 3176612804033008685, guid: b3591f11ae6a1d240bdfd715fe8473f9, + type: 3} propertyPath: m_LocalPosition.z value: 143.44847 objectReference: {fileID: 0} - - target: {fileID: 3176612804033008685, guid: b3591f11ae6a1d240bdfd715fe8473f9, type: 3} + - target: {fileID: 3176612804033008685, guid: b3591f11ae6a1d240bdfd715fe8473f9, + type: 3} propertyPath: m_LocalRotation.w value: 0.5698161 objectReference: {fileID: 0} - - target: {fileID: 3176612804033008685, guid: b3591f11ae6a1d240bdfd715fe8473f9, type: 3} + - target: {fileID: 3176612804033008685, guid: b3591f11ae6a1d240bdfd715fe8473f9, + type: 3} propertyPath: m_LocalRotation.x value: -0.45872247 objectReference: {fileID: 0} - - target: {fileID: 3176612804033008685, guid: b3591f11ae6a1d240bdfd715fe8473f9, type: 3} + - target: {fileID: 3176612804033008685, guid: b3591f11ae6a1d240bdfd715fe8473f9, + type: 3} propertyPath: m_LocalRotation.y value: 0.4735928 objectReference: {fileID: 0} - - target: {fileID: 3176612804033008685, guid: b3591f11ae6a1d240bdfd715fe8473f9, type: 3} + - target: {fileID: 3176612804033008685, guid: b3591f11ae6a1d240bdfd715fe8473f9, + type: 3} propertyPath: m_LocalRotation.z value: 0.49050307 objectReference: {fileID: 0} - - target: {fileID: 3176612804033008685, guid: b3591f11ae6a1d240bdfd715fe8473f9, type: 3} + - target: {fileID: 3176612804033008685, guid: b3591f11ae6a1d240bdfd715fe8473f9, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3176612804033008685, guid: b3591f11ae6a1d240bdfd715fe8473f9, type: 3} + - target: {fileID: 3176612804033008685, guid: b3591f11ae6a1d240bdfd715fe8473f9, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3176612804033008685, guid: b3591f11ae6a1d240bdfd715fe8473f9, type: 3} + - target: {fileID: 3176612804033008685, guid: b3591f11ae6a1d240bdfd715fe8473f9, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 3176612804033008686, guid: b3591f11ae6a1d240bdfd715fe8473f9, type: 3} + - target: {fileID: 3176612804033008686, guid: b3591f11ae6a1d240bdfd715fe8473f9, + type: 3} propertyPath: m_Name value: Empty_Gear_LS_Slot_Mage_Girl objectReference: {fileID: 0} - - target: {fileID: 3176612804033008686, guid: b3591f11ae6a1d240bdfd715fe8473f9, type: 3} + - target: {fileID: 3176612804033008686, guid: b3591f11ae6a1d240bdfd715fe8473f9, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -10552,12 +12100,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: b3591f11ae6a1d240bdfd715fe8473f9, type: 3} --- !u!1 &6080563669559509259 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 3176612804033008686, guid: b3591f11ae6a1d240bdfd715fe8473f9, type: 3} + m_CorrespondingSourceObject: {fileID: 3176612804033008686, guid: b3591f11ae6a1d240bdfd715fe8473f9, + type: 3} m_PrefabInstance: {fileID: 8680434239732569381} m_PrefabAsset: {fileID: 0} --- !u!4 &6080563669559509256 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3176612804033008685, guid: b3591f11ae6a1d240bdfd715fe8473f9, type: 3} + m_CorrespondingSourceObject: {fileID: 3176612804033008685, guid: b3591f11ae6a1d240bdfd715fe8473f9, + type: 3} m_PrefabInstance: {fileID: 8680434239732569381} m_PrefabAsset: {fileID: 0} --- !u!1001 &8744267756381900919 @@ -10567,55 +12117,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 1313590801738418481} m_Modifications: - - target: {fileID: 3420764219461191857, guid: 421356a12b65d104fbb6f9b2b34ef317, type: 3} + - target: {fileID: 3420764219461191857, guid: 421356a12b65d104fbb6f9b2b34ef317, + type: 3} propertyPath: m_Name value: Archer_weapon_Girl objectReference: {fileID: 0} - - target: {fileID: 3420764219461191857, guid: 421356a12b65d104fbb6f9b2b34ef317, type: 3} + - target: {fileID: 3420764219461191857, guid: 421356a12b65d104fbb6f9b2b34ef317, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - - target: {fileID: 5309466846704251737, guid: 421356a12b65d104fbb6f9b2b34ef317, type: 3} + - target: {fileID: 5309466846704251737, guid: 421356a12b65d104fbb6f9b2b34ef317, + type: 3} propertyPath: m_RootOrder value: 3 objectReference: {fileID: 0} - - target: {fileID: 5309466846704251737, guid: 421356a12b65d104fbb6f9b2b34ef317, type: 3} + - target: {fileID: 5309466846704251737, guid: 421356a12b65d104fbb6f9b2b34ef317, + type: 3} propertyPath: m_LocalPosition.x value: -0.067899704 objectReference: {fileID: 0} - - target: {fileID: 5309466846704251737, guid: 421356a12b65d104fbb6f9b2b34ef317, type: 3} + - target: {fileID: 5309466846704251737, guid: 421356a12b65d104fbb6f9b2b34ef317, + type: 3} propertyPath: m_LocalPosition.y value: -6.548729 objectReference: {fileID: 0} - - target: {fileID: 5309466846704251737, guid: 421356a12b65d104fbb6f9b2b34ef317, type: 3} + - target: {fileID: 5309466846704251737, guid: 421356a12b65d104fbb6f9b2b34ef317, + type: 3} propertyPath: m_LocalPosition.z value: -0.04371643 objectReference: {fileID: 0} - - target: {fileID: 5309466846704251737, guid: 421356a12b65d104fbb6f9b2b34ef317, type: 3} + - target: {fileID: 5309466846704251737, guid: 421356a12b65d104fbb6f9b2b34ef317, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 5309466846704251737, guid: 421356a12b65d104fbb6f9b2b34ef317, type: 3} + - target: {fileID: 5309466846704251737, guid: 421356a12b65d104fbb6f9b2b34ef317, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 5309466846704251737, guid: 421356a12b65d104fbb6f9b2b34ef317, type: 3} + - target: {fileID: 5309466846704251737, guid: 421356a12b65d104fbb6f9b2b34ef317, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 5309466846704251737, guid: 421356a12b65d104fbb6f9b2b34ef317, type: 3} + - target: {fileID: 5309466846704251737, guid: 421356a12b65d104fbb6f9b2b34ef317, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 5309466846704251737, guid: 421356a12b65d104fbb6f9b2b34ef317, type: 3} + - target: {fileID: 5309466846704251737, guid: 421356a12b65d104fbb6f9b2b34ef317, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 5309466846704251737, guid: 421356a12b65d104fbb6f9b2b34ef317, type: 3} + - target: {fileID: 5309466846704251737, guid: 421356a12b65d104fbb6f9b2b34ef317, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 5309466846704251737, guid: 421356a12b65d104fbb6f9b2b34ef317, type: 3} + - target: {fileID: 5309466846704251737, guid: 421356a12b65d104fbb6f9b2b34ef317, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} @@ -10623,12 +12186,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 421356a12b65d104fbb6f9b2b34ef317, type: 3} --- !u!1 &6206276795563661510 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 3420764219461191857, guid: 421356a12b65d104fbb6f9b2b34ef317, type: 3} + m_CorrespondingSourceObject: {fileID: 3420764219461191857, guid: 421356a12b65d104fbb6f9b2b34ef317, + type: 3} m_PrefabInstance: {fileID: 8744267756381900919} m_PrefabAsset: {fileID: 0} --- !u!4 &3528256695447757614 stripped Transform: - m_CorrespondingSourceObject: {fileID: 5309466846704251737, guid: 421356a12b65d104fbb6f9b2b34ef317, type: 3} + m_CorrespondingSourceObject: {fileID: 5309466846704251737, guid: 421356a12b65d104fbb6f9b2b34ef317, + type: 3} m_PrefabInstance: {fileID: 8744267756381900919} m_PrefabAsset: {fileID: 0} --- !u!1001 &8780040313512960368 @@ -10638,55 +12203,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 1206277181869945479} m_Modifications: - - target: {fileID: 1057086429681071948, guid: d92662a92637c5e40a9c2a24c8fcde82, type: 3} + - target: {fileID: 1057086429681071948, guid: d92662a92637c5e40a9c2a24c8fcde82, + type: 3} propertyPath: m_Name value: Archer_Eyes_Boy objectReference: {fileID: 0} - - target: {fileID: 1057086429681071948, guid: d92662a92637c5e40a9c2a24c8fcde82, type: 3} + - target: {fileID: 1057086429681071948, guid: d92662a92637c5e40a9c2a24c8fcde82, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - - target: {fileID: 5038039660629983625, guid: d92662a92637c5e40a9c2a24c8fcde82, type: 3} + - target: {fileID: 5038039660629983625, guid: d92662a92637c5e40a9c2a24c8fcde82, + type: 3} propertyPath: m_RootOrder value: 1 objectReference: {fileID: 0} - - target: {fileID: 5038039660629983625, guid: d92662a92637c5e40a9c2a24c8fcde82, type: 3} + - target: {fileID: 5038039660629983625, guid: d92662a92637c5e40a9c2a24c8fcde82, + type: 3} propertyPath: m_LocalPosition.x value: -0.0000011920929 objectReference: {fileID: 0} - - target: {fileID: 5038039660629983625, guid: d92662a92637c5e40a9c2a24c8fcde82, type: 3} + - target: {fileID: 5038039660629983625, guid: d92662a92637c5e40a9c2a24c8fcde82, + type: 3} propertyPath: m_LocalPosition.y value: 148.35704 objectReference: {fileID: 0} - - target: {fileID: 5038039660629983625, guid: d92662a92637c5e40a9c2a24c8fcde82, type: 3} + - target: {fileID: 5038039660629983625, guid: d92662a92637c5e40a9c2a24c8fcde82, + type: 3} propertyPath: m_LocalPosition.z value: 9.308052 objectReference: {fileID: 0} - - target: {fileID: 5038039660629983625, guid: d92662a92637c5e40a9c2a24c8fcde82, type: 3} + - target: {fileID: 5038039660629983625, guid: d92662a92637c5e40a9c2a24c8fcde82, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 5038039660629983625, guid: d92662a92637c5e40a9c2a24c8fcde82, type: 3} + - target: {fileID: 5038039660629983625, guid: d92662a92637c5e40a9c2a24c8fcde82, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 5038039660629983625, guid: d92662a92637c5e40a9c2a24c8fcde82, type: 3} + - target: {fileID: 5038039660629983625, guid: d92662a92637c5e40a9c2a24c8fcde82, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 5038039660629983625, guid: d92662a92637c5e40a9c2a24c8fcde82, type: 3} + - target: {fileID: 5038039660629983625, guid: d92662a92637c5e40a9c2a24c8fcde82, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 5038039660629983625, guid: d92662a92637c5e40a9c2a24c8fcde82, type: 3} + - target: {fileID: 5038039660629983625, guid: d92662a92637c5e40a9c2a24c8fcde82, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 5038039660629983625, guid: d92662a92637c5e40a9c2a24c8fcde82, type: 3} + - target: {fileID: 5038039660629983625, guid: d92662a92637c5e40a9c2a24c8fcde82, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 5038039660629983625, guid: d92662a92637c5e40a9c2a24c8fcde82, type: 3} + - target: {fileID: 5038039660629983625, guid: d92662a92637c5e40a9c2a24c8fcde82, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} @@ -10694,12 +12272,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: d92662a92637c5e40a9c2a24c8fcde82, type: 3} --- !u!1 &8607362557059667516 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 1057086429681071948, guid: d92662a92637c5e40a9c2a24c8fcde82, type: 3} + m_CorrespondingSourceObject: {fileID: 1057086429681071948, guid: d92662a92637c5e40a9c2a24c8fcde82, + type: 3} m_PrefabInstance: {fileID: 8780040313512960368} m_PrefabAsset: {fileID: 0} --- !u!4 &4337615451260625145 stripped Transform: - m_CorrespondingSourceObject: {fileID: 5038039660629983625, guid: d92662a92637c5e40a9c2a24c8fcde82, type: 3} + m_CorrespondingSourceObject: {fileID: 5038039660629983625, guid: d92662a92637c5e40a9c2a24c8fcde82, + type: 3} m_PrefabInstance: {fileID: 8780040313512960368} m_PrefabAsset: {fileID: 0} --- !u!1001 &8825744406782225229 @@ -10709,55 +12289,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 1313590801738418481} m_Modifications: - - target: {fileID: 2163527793870184350, guid: c32de98468e36ee4d993335dfd04f47e, type: 3} + - target: {fileID: 2163527793870184350, guid: c32de98468e36ee4d993335dfd04f47e, + type: 3} propertyPath: m_Name value: Tank_Weapon_Girl objectReference: {fileID: 0} - - target: {fileID: 2163527793870184350, guid: c32de98468e36ee4d993335dfd04f47e, type: 3} + - target: {fileID: 2163527793870184350, guid: c32de98468e36ee4d993335dfd04f47e, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - - target: {fileID: 2616823585951357240, guid: c32de98468e36ee4d993335dfd04f47e, type: 3} + - target: {fileID: 2616823585951357240, guid: c32de98468e36ee4d993335dfd04f47e, + type: 3} propertyPath: m_RootOrder value: 19 objectReference: {fileID: 0} - - target: {fileID: 2616823585951357240, guid: c32de98468e36ee4d993335dfd04f47e, type: 3} + - target: {fileID: 2616823585951357240, guid: c32de98468e36ee4d993335dfd04f47e, + type: 3} propertyPath: m_LocalPosition.x value: 22.374321 objectReference: {fileID: 0} - - target: {fileID: 2616823585951357240, guid: c32de98468e36ee4d993335dfd04f47e, type: 3} + - target: {fileID: 2616823585951357240, guid: c32de98468e36ee4d993335dfd04f47e, + type: 3} propertyPath: m_LocalPosition.y value: -3.6189651 objectReference: {fileID: 0} - - target: {fileID: 2616823585951357240, guid: c32de98468e36ee4d993335dfd04f47e, type: 3} + - target: {fileID: 2616823585951357240, guid: c32de98468e36ee4d993335dfd04f47e, + type: 3} propertyPath: m_LocalPosition.z value: 30.211304 objectReference: {fileID: 0} - - target: {fileID: 2616823585951357240, guid: c32de98468e36ee4d993335dfd04f47e, type: 3} + - target: {fileID: 2616823585951357240, guid: c32de98468e36ee4d993335dfd04f47e, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 2616823585951357240, guid: c32de98468e36ee4d993335dfd04f47e, type: 3} + - target: {fileID: 2616823585951357240, guid: c32de98468e36ee4d993335dfd04f47e, + type: 3} propertyPath: m_LocalRotation.x value: 0.00000022165477 objectReference: {fileID: 0} - - target: {fileID: 2616823585951357240, guid: c32de98468e36ee4d993335dfd04f47e, type: 3} + - target: {fileID: 2616823585951357240, guid: c32de98468e36ee4d993335dfd04f47e, + type: 3} propertyPath: m_LocalRotation.y value: -3.3029135e-15 objectReference: {fileID: 0} - - target: {fileID: 2616823585951357240, guid: c32de98468e36ee4d993335dfd04f47e, type: 3} + - target: {fileID: 2616823585951357240, guid: c32de98468e36ee4d993335dfd04f47e, + type: 3} propertyPath: m_LocalRotation.z value: -0.000000014901161 objectReference: {fileID: 0} - - target: {fileID: 2616823585951357240, guid: c32de98468e36ee4d993335dfd04f47e, type: 3} + - target: {fileID: 2616823585951357240, guid: c32de98468e36ee4d993335dfd04f47e, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2616823585951357240, guid: c32de98468e36ee4d993335dfd04f47e, type: 3} + - target: {fileID: 2616823585951357240, guid: c32de98468e36ee4d993335dfd04f47e, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 2616823585951357240, guid: c32de98468e36ee4d993335dfd04f47e, type: 3} + - target: {fileID: 2616823585951357240, guid: c32de98468e36ee4d993335dfd04f47e, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} @@ -10765,12 +12358,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: c32de98468e36ee4d993335dfd04f47e, type: 3} --- !u!1 &7240999671591875795 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 2163527793870184350, guid: c32de98468e36ee4d993335dfd04f47e, type: 3} + m_CorrespondingSourceObject: {fileID: 2163527793870184350, guid: c32de98468e36ee4d993335dfd04f47e, + type: 3} m_PrefabInstance: {fileID: 8825744406782225229} m_PrefabAsset: {fileID: 0} --- !u!4 &6785663400578626165 stripped Transform: - m_CorrespondingSourceObject: {fileID: 2616823585951357240, guid: c32de98468e36ee4d993335dfd04f47e, type: 3} + m_CorrespondingSourceObject: {fileID: 2616823585951357240, guid: c32de98468e36ee4d993335dfd04f47e, + type: 3} m_PrefabInstance: {fileID: 8825744406782225229} m_PrefabAsset: {fileID: 0} --- !u!1001 &8852027617279573477 @@ -10780,55 +12375,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 867326443869147655} m_Modifications: - - target: {fileID: 1802305048318986469, guid: 3cd0fdcb04de77a44af950494f162d35, type: 3} + - target: {fileID: 1802305048318986469, guid: 3cd0fdcb04de77a44af950494f162d35, + type: 3} propertyPath: m_Name value: Tank_Shield_Girl objectReference: {fileID: 0} - - target: {fileID: 1802305048318986469, guid: 3cd0fdcb04de77a44af950494f162d35, type: 3} + - target: {fileID: 1802305048318986469, guid: 3cd0fdcb04de77a44af950494f162d35, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - - target: {fileID: 9215233113457043406, guid: 3cd0fdcb04de77a44af950494f162d35, type: 3} + - target: {fileID: 9215233113457043406, guid: 3cd0fdcb04de77a44af950494f162d35, + type: 3} propertyPath: m_RootOrder value: 12 objectReference: {fileID: 0} - - target: {fileID: 9215233113457043406, guid: 3cd0fdcb04de77a44af950494f162d35, type: 3} + - target: {fileID: 9215233113457043406, guid: 3cd0fdcb04de77a44af950494f162d35, + type: 3} propertyPath: m_LocalPosition.x value: -18 objectReference: {fileID: 0} - - target: {fileID: 9215233113457043406, guid: 3cd0fdcb04de77a44af950494f162d35, type: 3} + - target: {fileID: 9215233113457043406, guid: 3cd0fdcb04de77a44af950494f162d35, + type: 3} propertyPath: m_LocalPosition.y value: -4.9 objectReference: {fileID: 0} - - target: {fileID: 9215233113457043406, guid: 3cd0fdcb04de77a44af950494f162d35, type: 3} + - target: {fileID: 9215233113457043406, guid: 3cd0fdcb04de77a44af950494f162d35, + type: 3} propertyPath: m_LocalPosition.z value: -5.4 objectReference: {fileID: 0} - - target: {fileID: 9215233113457043406, guid: 3cd0fdcb04de77a44af950494f162d35, type: 3} + - target: {fileID: 9215233113457043406, guid: 3cd0fdcb04de77a44af950494f162d35, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 9215233113457043406, guid: 3cd0fdcb04de77a44af950494f162d35, type: 3} + - target: {fileID: 9215233113457043406, guid: 3cd0fdcb04de77a44af950494f162d35, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 9215233113457043406, guid: 3cd0fdcb04de77a44af950494f162d35, type: 3} + - target: {fileID: 9215233113457043406, guid: 3cd0fdcb04de77a44af950494f162d35, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 9215233113457043406, guid: 3cd0fdcb04de77a44af950494f162d35, type: 3} + - target: {fileID: 9215233113457043406, guid: 3cd0fdcb04de77a44af950494f162d35, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 9215233113457043406, guid: 3cd0fdcb04de77a44af950494f162d35, type: 3} + - target: {fileID: 9215233113457043406, guid: 3cd0fdcb04de77a44af950494f162d35, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 9215233113457043406, guid: 3cd0fdcb04de77a44af950494f162d35, type: 3} + - target: {fileID: 9215233113457043406, guid: 3cd0fdcb04de77a44af950494f162d35, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 9215233113457043406, guid: 3cd0fdcb04de77a44af950494f162d35, type: 3} + - target: {fileID: 9215233113457043406, guid: 3cd0fdcb04de77a44af950494f162d35, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} @@ -10836,12 +12444,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 3cd0fdcb04de77a44af950494f162d35, type: 3} --- !u!4 &377085789145881131 stripped Transform: - m_CorrespondingSourceObject: {fileID: 9215233113457043406, guid: 3cd0fdcb04de77a44af950494f162d35, type: 3} + m_CorrespondingSourceObject: {fileID: 9215233113457043406, guid: 3cd0fdcb04de77a44af950494f162d35, + type: 3} m_PrefabInstance: {fileID: 8852027617279573477} m_PrefabAsset: {fileID: 0} --- !u!1 &7195532655823631616 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 1802305048318986469, guid: 3cd0fdcb04de77a44af950494f162d35, type: 3} + m_CorrespondingSourceObject: {fileID: 1802305048318986469, guid: 3cd0fdcb04de77a44af950494f162d35, + type: 3} m_PrefabInstance: {fileID: 8852027617279573477} m_PrefabAsset: {fileID: 0} --- !u!1001 &8908365793751412007 @@ -10851,59 +12461,73 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 7079448961355668684} m_Modifications: - - target: {fileID: 2253431811545332594, guid: d953efb8e63e08a4e9a8569fd8b5897a, type: 3} + - target: {fileID: 2253431811545332594, guid: d953efb8e63e08a4e9a8569fd8b5897a, + type: 3} propertyPath: m_Name value: Empty_Gear_LS_Slot_Rogue_Boy objectReference: {fileID: 0} - - target: {fileID: 2253431811545332594, guid: d953efb8e63e08a4e9a8569fd8b5897a, type: 3} + - target: {fileID: 2253431811545332594, guid: d953efb8e63e08a4e9a8569fd8b5897a, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - - target: {fileID: 2253431811545332595, guid: d953efb8e63e08a4e9a8569fd8b5897a, type: 3} + - target: {fileID: 2253431811545332595, guid: d953efb8e63e08a4e9a8569fd8b5897a, + type: 3} propertyPath: m_RootOrder value: 5 objectReference: {fileID: 0} - - target: {fileID: 2253431811545332595, guid: d953efb8e63e08a4e9a8569fd8b5897a, type: 3} + - target: {fileID: 2253431811545332595, guid: d953efb8e63e08a4e9a8569fd8b5897a, + type: 3} propertyPath: m_LocalScale.y value: 99.99997 objectReference: {fileID: 0} - - target: {fileID: 2253431811545332595, guid: d953efb8e63e08a4e9a8569fd8b5897a, type: 3} + - target: {fileID: 2253431811545332595, guid: d953efb8e63e08a4e9a8569fd8b5897a, + type: 3} propertyPath: m_LocalPosition.x value: -174.81204 objectReference: {fileID: 0} - - target: {fileID: 2253431811545332595, guid: d953efb8e63e08a4e9a8569fd8b5897a, type: 3} + - target: {fileID: 2253431811545332595, guid: d953efb8e63e08a4e9a8569fd8b5897a, + type: 3} propertyPath: m_LocalPosition.y value: 112.23023 objectReference: {fileID: 0} - - target: {fileID: 2253431811545332595, guid: d953efb8e63e08a4e9a8569fd8b5897a, type: 3} + - target: {fileID: 2253431811545332595, guid: d953efb8e63e08a4e9a8569fd8b5897a, + type: 3} propertyPath: m_LocalPosition.z value: 143.44847 objectReference: {fileID: 0} - - target: {fileID: 2253431811545332595, guid: d953efb8e63e08a4e9a8569fd8b5897a, type: 3} + - target: {fileID: 2253431811545332595, guid: d953efb8e63e08a4e9a8569fd8b5897a, + type: 3} propertyPath: m_LocalRotation.w value: 0.5698161 objectReference: {fileID: 0} - - target: {fileID: 2253431811545332595, guid: d953efb8e63e08a4e9a8569fd8b5897a, type: 3} + - target: {fileID: 2253431811545332595, guid: d953efb8e63e08a4e9a8569fd8b5897a, + type: 3} propertyPath: m_LocalRotation.x value: -0.45872247 objectReference: {fileID: 0} - - target: {fileID: 2253431811545332595, guid: d953efb8e63e08a4e9a8569fd8b5897a, type: 3} + - target: {fileID: 2253431811545332595, guid: d953efb8e63e08a4e9a8569fd8b5897a, + type: 3} propertyPath: m_LocalRotation.y value: 0.4735928 objectReference: {fileID: 0} - - target: {fileID: 2253431811545332595, guid: d953efb8e63e08a4e9a8569fd8b5897a, type: 3} + - target: {fileID: 2253431811545332595, guid: d953efb8e63e08a4e9a8569fd8b5897a, + type: 3} propertyPath: m_LocalRotation.z value: 0.49050307 objectReference: {fileID: 0} - - target: {fileID: 2253431811545332595, guid: d953efb8e63e08a4e9a8569fd8b5897a, type: 3} + - target: {fileID: 2253431811545332595, guid: d953efb8e63e08a4e9a8569fd8b5897a, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2253431811545332595, guid: d953efb8e63e08a4e9a8569fd8b5897a, type: 3} + - target: {fileID: 2253431811545332595, guid: d953efb8e63e08a4e9a8569fd8b5897a, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 2253431811545332595, guid: d953efb8e63e08a4e9a8569fd8b5897a, type: 3} + - target: {fileID: 2253431811545332595, guid: d953efb8e63e08a4e9a8569fd8b5897a, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} @@ -10911,12 +12535,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: d953efb8e63e08a4e9a8569fd8b5897a, type: 3} --- !u!4 &7270238299152864852 stripped Transform: - m_CorrespondingSourceObject: {fileID: 2253431811545332595, guid: d953efb8e63e08a4e9a8569fd8b5897a, type: 3} + m_CorrespondingSourceObject: {fileID: 2253431811545332595, guid: d953efb8e63e08a4e9a8569fd8b5897a, + type: 3} m_PrefabInstance: {fileID: 8908365793751412007} m_PrefabAsset: {fileID: 0} --- !u!1 &7270238299152864853 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 2253431811545332594, guid: d953efb8e63e08a4e9a8569fd8b5897a, type: 3} + m_CorrespondingSourceObject: {fileID: 2253431811545332594, guid: d953efb8e63e08a4e9a8569fd8b5897a, + type: 3} m_PrefabInstance: {fileID: 8908365793751412007} m_PrefabAsset: {fileID: 0} --- !u!1001 &9017050921791114721 @@ -10926,55 +12552,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 1313590801738418481} m_Modifications: - - target: {fileID: 5240757299259599540, guid: dcb10eac2079bb347b40d7d056fb0184, type: 3} + - target: {fileID: 5240757299259599540, guid: dcb10eac2079bb347b40d7d056fb0184, + type: 3} propertyPath: m_RootOrder value: 17 objectReference: {fileID: 0} - - target: {fileID: 5240757299259599540, guid: dcb10eac2079bb347b40d7d056fb0184, type: 3} + - target: {fileID: 5240757299259599540, guid: dcb10eac2079bb347b40d7d056fb0184, + type: 3} propertyPath: m_LocalPosition.x value: 11.502487 objectReference: {fileID: 0} - - target: {fileID: 5240757299259599540, guid: dcb10eac2079bb347b40d7d056fb0184, type: 3} + - target: {fileID: 5240757299259599540, guid: dcb10eac2079bb347b40d7d056fb0184, + type: 3} propertyPath: m_LocalPosition.y value: -0.9710541 objectReference: {fileID: 0} - - target: {fileID: 5240757299259599540, guid: dcb10eac2079bb347b40d7d056fb0184, type: 3} + - target: {fileID: 5240757299259599540, guid: dcb10eac2079bb347b40d7d056fb0184, + type: 3} propertyPath: m_LocalPosition.z value: -0.18229675 objectReference: {fileID: 0} - - target: {fileID: 5240757299259599540, guid: dcb10eac2079bb347b40d7d056fb0184, type: 3} + - target: {fileID: 5240757299259599540, guid: dcb10eac2079bb347b40d7d056fb0184, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 5240757299259599540, guid: dcb10eac2079bb347b40d7d056fb0184, type: 3} + - target: {fileID: 5240757299259599540, guid: dcb10eac2079bb347b40d7d056fb0184, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 5240757299259599540, guid: dcb10eac2079bb347b40d7d056fb0184, type: 3} + - target: {fileID: 5240757299259599540, guid: dcb10eac2079bb347b40d7d056fb0184, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 5240757299259599540, guid: dcb10eac2079bb347b40d7d056fb0184, type: 3} + - target: {fileID: 5240757299259599540, guid: dcb10eac2079bb347b40d7d056fb0184, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 5240757299259599540, guid: dcb10eac2079bb347b40d7d056fb0184, type: 3} + - target: {fileID: 5240757299259599540, guid: dcb10eac2079bb347b40d7d056fb0184, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 5240757299259599540, guid: dcb10eac2079bb347b40d7d056fb0184, type: 3} + - target: {fileID: 5240757299259599540, guid: dcb10eac2079bb347b40d7d056fb0184, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 5240757299259599540, guid: dcb10eac2079bb347b40d7d056fb0184, type: 3} + - target: {fileID: 5240757299259599540, guid: dcb10eac2079bb347b40d7d056fb0184, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 7635491982274312555, guid: dcb10eac2079bb347b40d7d056fb0184, type: 3} + - target: {fileID: 7635491982274312555, guid: dcb10eac2079bb347b40d7d056fb0184, + type: 3} propertyPath: m_Name value: Tank_Glove_Rt_Girl objectReference: {fileID: 0} - - target: {fileID: 7635491982274312555, guid: dcb10eac2079bb347b40d7d056fb0184, type: 3} + - target: {fileID: 7635491982274312555, guid: dcb10eac2079bb347b40d7d056fb0184, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -10982,12 +12621,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: dcb10eac2079bb347b40d7d056fb0184, type: 3} --- !u!4 &3862374301970769749 stripped Transform: - m_CorrespondingSourceObject: {fileID: 5240757299259599540, guid: dcb10eac2079bb347b40d7d056fb0184, type: 3} + m_CorrespondingSourceObject: {fileID: 5240757299259599540, guid: dcb10eac2079bb347b40d7d056fb0184, + type: 3} m_PrefabInstance: {fileID: 9017050921791114721} m_PrefabAsset: {fileID: 0} --- !u!1 &1501307850410587274 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 7635491982274312555, guid: dcb10eac2079bb347b40d7d056fb0184, type: 3} + m_CorrespondingSourceObject: {fileID: 7635491982274312555, guid: dcb10eac2079bb347b40d7d056fb0184, + type: 3} m_PrefabInstance: {fileID: 9017050921791114721} m_PrefabAsset: {fileID: 0} --- !u!1001 &9053511930670826627 @@ -10997,55 +12638,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 1313590801738418481} m_Modifications: - - target: {fileID: 676442742324302359, guid: 9140e7063bb6736458fac7906a5ae718, type: 3} + - target: {fileID: 676442742324302359, guid: 9140e7063bb6736458fac7906a5ae718, + type: 3} propertyPath: m_Name value: Mage_Weapon_Boy objectReference: {fileID: 0} - - target: {fileID: 676442742324302359, guid: 9140e7063bb6736458fac7906a5ae718, type: 3} + - target: {fileID: 676442742324302359, guid: 9140e7063bb6736458fac7906a5ae718, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} - - target: {fileID: 2372225921003676736, guid: 9140e7063bb6736458fac7906a5ae718, type: 3} + - target: {fileID: 2372225921003676736, guid: 9140e7063bb6736458fac7906a5ae718, + type: 3} propertyPath: m_RootOrder value: 10 objectReference: {fileID: 0} - - target: {fileID: 2372225921003676736, guid: 9140e7063bb6736458fac7906a5ae718, type: 3} + - target: {fileID: 2372225921003676736, guid: 9140e7063bb6736458fac7906a5ae718, + type: 3} propertyPath: m_LocalPosition.x value: 12.885166 objectReference: {fileID: 0} - - target: {fileID: 2372225921003676736, guid: 9140e7063bb6736458fac7906a5ae718, type: 3} + - target: {fileID: 2372225921003676736, guid: 9140e7063bb6736458fac7906a5ae718, + type: 3} propertyPath: m_LocalPosition.y value: -4.0088196 objectReference: {fileID: 0} - - target: {fileID: 2372225921003676736, guid: 9140e7063bb6736458fac7906a5ae718, type: 3} + - target: {fileID: 2372225921003676736, guid: 9140e7063bb6736458fac7906a5ae718, + type: 3} propertyPath: m_LocalPosition.z value: 22.168991 objectReference: {fileID: 0} - - target: {fileID: 2372225921003676736, guid: 9140e7063bb6736458fac7906a5ae718, type: 3} + - target: {fileID: 2372225921003676736, guid: 9140e7063bb6736458fac7906a5ae718, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 2372225921003676736, guid: 9140e7063bb6736458fac7906a5ae718, type: 3} + - target: {fileID: 2372225921003676736, guid: 9140e7063bb6736458fac7906a5ae718, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2372225921003676736, guid: 9140e7063bb6736458fac7906a5ae718, type: 3} + - target: {fileID: 2372225921003676736, guid: 9140e7063bb6736458fac7906a5ae718, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 2372225921003676736, guid: 9140e7063bb6736458fac7906a5ae718, type: 3} + - target: {fileID: 2372225921003676736, guid: 9140e7063bb6736458fac7906a5ae718, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 2372225921003676736, guid: 9140e7063bb6736458fac7906a5ae718, type: 3} + - target: {fileID: 2372225921003676736, guid: 9140e7063bb6736458fac7906a5ae718, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2372225921003676736, guid: 9140e7063bb6736458fac7906a5ae718, type: 3} + - target: {fileID: 2372225921003676736, guid: 9140e7063bb6736458fac7906a5ae718, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 2372225921003676736, guid: 9140e7063bb6736458fac7906a5ae718, type: 3} + - target: {fileID: 2372225921003676736, guid: 9140e7063bb6736458fac7906a5ae718, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} @@ -11053,12 +12707,14 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 9140e7063bb6736458fac7906a5ae718, type: 3} --- !u!1 &8414901365427721876 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 676442742324302359, guid: 9140e7063bb6736458fac7906a5ae718, type: 3} + m_CorrespondingSourceObject: {fileID: 676442742324302359, guid: 9140e7063bb6736458fac7906a5ae718, + type: 3} m_PrefabInstance: {fileID: 9053511930670826627} m_PrefabAsset: {fileID: 0} --- !u!4 &6723698090697597123 stripped Transform: - m_CorrespondingSourceObject: {fileID: 2372225921003676736, guid: 9140e7063bb6736458fac7906a5ae718, type: 3} + m_CorrespondingSourceObject: {fileID: 2372225921003676736, guid: 9140e7063bb6736458fac7906a5ae718, + type: 3} m_PrefabInstance: {fileID: 9053511930670826627} m_PrefabAsset: {fileID: 0} --- !u!1001 &9108547170090261121 @@ -11068,55 +12724,68 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 1459343620667739469} m_Modifications: - - target: {fileID: 152654255506947772, guid: 4935ff0daf9cd1c4b9b165a008607067, type: 3} + - target: {fileID: 152654255506947772, guid: 4935ff0daf9cd1c4b9b165a008607067, + type: 3} propertyPath: m_RootOrder value: 3 objectReference: {fileID: 0} - - target: {fileID: 152654255506947772, guid: 4935ff0daf9cd1c4b9b165a008607067, type: 3} + - target: {fileID: 152654255506947772, guid: 4935ff0daf9cd1c4b9b165a008607067, + type: 3} propertyPath: m_LocalPosition.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 152654255506947772, guid: 4935ff0daf9cd1c4b9b165a008607067, type: 3} + - target: {fileID: 152654255506947772, guid: 4935ff0daf9cd1c4b9b165a008607067, + type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 152654255506947772, guid: 4935ff0daf9cd1c4b9b165a008607067, type: 3} + - target: {fileID: 152654255506947772, guid: 4935ff0daf9cd1c4b9b165a008607067, + type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 152654255506947772, guid: 4935ff0daf9cd1c4b9b165a008607067, type: 3} + - target: {fileID: 152654255506947772, guid: 4935ff0daf9cd1c4b9b165a008607067, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 152654255506947772, guid: 4935ff0daf9cd1c4b9b165a008607067, type: 3} + - target: {fileID: 152654255506947772, guid: 4935ff0daf9cd1c4b9b165a008607067, + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 152654255506947772, guid: 4935ff0daf9cd1c4b9b165a008607067, type: 3} + - target: {fileID: 152654255506947772, guid: 4935ff0daf9cd1c4b9b165a008607067, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 152654255506947772, guid: 4935ff0daf9cd1c4b9b165a008607067, type: 3} + - target: {fileID: 152654255506947772, guid: 4935ff0daf9cd1c4b9b165a008607067, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 152654255506947772, guid: 4935ff0daf9cd1c4b9b165a008607067, type: 3} + - target: {fileID: 152654255506947772, guid: 4935ff0daf9cd1c4b9b165a008607067, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 152654255506947772, guid: 4935ff0daf9cd1c4b9b165a008607067, type: 3} + - target: {fileID: 152654255506947772, guid: 4935ff0daf9cd1c4b9b165a008607067, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 152654255506947772, guid: 4935ff0daf9cd1c4b9b165a008607067, type: 3} + - target: {fileID: 152654255506947772, guid: 4935ff0daf9cd1c4b9b165a008607067, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 1742086309014040303, guid: 4935ff0daf9cd1c4b9b165a008607067, type: 3} + - target: {fileID: 1742086309014040303, guid: 4935ff0daf9cd1c4b9b165a008607067, + type: 3} propertyPath: m_Name value: Mage_Head_Boy objectReference: {fileID: 0} - - target: {fileID: 1742086309014040303, guid: 4935ff0daf9cd1c4b9b165a008607067, type: 3} + - target: {fileID: 1742086309014040303, guid: 4935ff0daf9cd1c4b9b165a008607067, + type: 3} propertyPath: m_IsActive value: 1 objectReference: {fileID: 0} @@ -11124,11 +12793,13 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 4935ff0daf9cd1c4b9b165a008607067, type: 3} --- !u!1 &7369345984981431406 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 1742086309014040303, guid: 4935ff0daf9cd1c4b9b165a008607067, type: 3} + m_CorrespondingSourceObject: {fileID: 1742086309014040303, guid: 4935ff0daf9cd1c4b9b165a008607067, + type: 3} m_PrefabInstance: {fileID: 9108547170090261121} m_PrefabAsset: {fileID: 0} --- !u!4 &8968453945901966397 stripped Transform: - m_CorrespondingSourceObject: {fileID: 152654255506947772, guid: 4935ff0daf9cd1c4b9b165a008607067, type: 3} + m_CorrespondingSourceObject: {fileID: 152654255506947772, guid: 4935ff0daf9cd1c4b9b165a008607067, + type: 3} m_PrefabInstance: {fileID: 9108547170090261121} m_PrefabAsset: {fileID: 0} diff --git a/Assets/BossRoom/Prefabs/NetworkingManager.prefab b/Assets/BossRoom/Prefabs/NetworkingManager.prefab index 12dc9ae84..7fe237148 100644 --- a/Assets/BossRoom/Prefabs/NetworkingManager.prefab +++ b/Assets/BossRoom/Prefabs/NetworkingManager.prefab @@ -67,7 +67,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 0 + m_IsActive: 1 --- !u!4 &5355783542964773244 Transform: m_ObjectHideFlags: 0 @@ -114,8 +114,8 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 5436007408952557925} - - component: {fileID: 5436007408952557924} - component: {fileID: 1359040526} + - component: {fileID: 5436007408952557924} m_Layer: 0 m_Name: NetworkingManager m_TagString: Untagged @@ -166,37 +166,53 @@ MonoBehaviour: - Startup AllowRuntimeSceneChanges: 1 NetworkPrefabs: - - Prefab: {fileID: 6009713983291384756, guid: 8237adf32a9b6de4892e6febe6b4bdef, type: 3} + - Prefab: {fileID: 6009713983291384756, guid: 8237adf32a9b6de4892e6febe6b4bdef, + type: 3} PlayerPrefab: 1 - - Prefab: {fileID: 3565665953789623672, guid: 1a58a2c4657fe6d4890d9ad39f43894e, type: 3} + - Prefab: {fileID: 3565665953789623672, guid: 1a58a2c4657fe6d4890d9ad39f43894e, + type: 3} PlayerPrefab: 0 - - Prefab: {fileID: 297185343939699586, guid: 8b9c63e7d70c5ff48a03aad51e17103c, type: 3} + - Prefab: {fileID: 297185343939699586, guid: 8b9c63e7d70c5ff48a03aad51e17103c, + type: 3} PlayerPrefab: 0 - - Prefab: {fileID: 3713729372785093424, guid: 6cdd52f1fa2ed34469a487ae6477eded, type: 3} + - Prefab: {fileID: 3713729372785093424, guid: 6cdd52f1fa2ed34469a487ae6477eded, + type: 3} PlayerPrefab: 0 - - Prefab: {fileID: 3688950541947916333, guid: 365e94337fd10fe4ebde1906df413ac7, type: 3} + - Prefab: {fileID: 3688950541947916333, guid: 365e94337fd10fe4ebde1906df413ac7, + type: 3} PlayerPrefab: 0 - - Prefab: {fileID: 2842198241268549130, guid: 30c420f004b8f6445ad2bdb2addb234a, type: 3} + - Prefab: {fileID: 2842198241268549130, guid: 30c420f004b8f6445ad2bdb2addb234a, + type: 3} PlayerPrefab: 0 - - Prefab: {fileID: 7788790407431586438, guid: 7c9c0bade0c78da4b9825e198685ac1e, type: 3} + - Prefab: {fileID: 7788790407431586438, guid: 7c9c0bade0c78da4b9825e198685ac1e, + type: 3} PlayerPrefab: 0 - - Prefab: {fileID: 7898142965061138134, guid: 10897010648fc204783f651034c504d9, type: 3} + - Prefab: {fileID: 7898142965061138134, guid: 10897010648fc204783f651034c504d9, + type: 3} PlayerPrefab: 0 - - Prefab: {fileID: 2842198241268549130, guid: 7e3b8103f5622f64fa677352730f295c, type: 3} + - Prefab: {fileID: 2842198241268549130, guid: 7e3b8103f5622f64fa677352730f295c, + type: 3} PlayerPrefab: 0 - - Prefab: {fileID: 2842198241268549130, guid: 411974b75a8b43d4e9b3c9069a5067fb, type: 3} + - Prefab: {fileID: 2842198241268549130, guid: 411974b75a8b43d4e9b3c9069a5067fb, + type: 3} PlayerPrefab: 0 - - Prefab: {fileID: 2842198241268549130, guid: 0251e08eeed89e844a8527b3a7874cc2, type: 3} + - Prefab: {fileID: 2842198241268549130, guid: 0251e08eeed89e844a8527b3a7874cc2, + type: 3} PlayerPrefab: 0 - - Prefab: {fileID: 7475764267130300177, guid: 462e020e721ce4543b97867020621b15, type: 3} + - Prefab: {fileID: 7475764267130300177, guid: 462e020e721ce4543b97867020621b15, + type: 3} PlayerPrefab: 0 - - Prefab: {fileID: 884761565141663561, guid: 00dca56744e297e41870a7aff65cca80, type: 3} + - Prefab: {fileID: 884761565141663561, guid: 00dca56744e297e41870a7aff65cca80, + type: 3} PlayerPrefab: 0 - - Prefab: {fileID: 884761565141663561, guid: 5640f51641faec24ca0d332b154499bf, type: 3} + - Prefab: {fileID: 884761565141663561, guid: 5640f51641faec24ca0d332b154499bf, + type: 3} PlayerPrefab: 0 - - Prefab: {fileID: 884761565141663561, guid: 054386ac446cf834c9d7f603a57ab70b, type: 3} + - Prefab: {fileID: 884761565141663561, guid: 054386ac446cf834c9d7f603a57ab70b, + type: 3} PlayerPrefab: 0 - - Prefab: {fileID: 6205854018081152875, guid: a6647793a8bc7c846abba94be1d257e5, type: 3} + - Prefab: {fileID: 6205854018081152875, guid: a6647793a8bc7c846abba94be1d257e5, + type: 3} PlayerPrefab: 0 PlayerPrefabHash: id: 0 @@ -208,7 +224,6 @@ MonoBehaviour: ClientConnectionBufferTimeout: 10 ConnectionApproval: 1 ConnectionData: - SecondsHistory: 0 EnableTimeResync: 0 TimeResyncInterval: 30 EnableNetworkVariable: 1 diff --git a/Assets/BossRoom/Prefabs/State/PostGameState.prefab b/Assets/BossRoom/Prefabs/State/PostGameState.prefab index f815f1632..a0e1b1068 100644 --- a/Assets/BossRoom/Prefabs/State/PostGameState.prefab +++ b/Assets/BossRoom/Prefabs/State/PostGameState.prefab @@ -12,6 +12,7 @@ GameObject: - component: {fileID: 7475764267130300204} - component: {fileID: 7475764267130300178} - component: {fileID: -1007214952234040975} + - component: {fileID: 4223400095609434710} m_Layer: 0 m_Name: PostGameState m_TagString: Untagged @@ -69,8 +70,20 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3} m_Name: m_EditorClassIdentifier: - NetworkedInstanceId: 0 + NetworkInstanceId: 0 PrefabHash: 2423925341006169844 PrefabHashGenerator: PostGameState AlwaysReplicateAsRoot: 0 DontDestroyWithOwner: 0 +--- !u!114 &4223400095609434710 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7475764267130300177} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1cb58d1788f410740b05cace1af646d7, type: 3} + m_Name: + m_EditorClassIdentifier: diff --git a/Assets/BossRoom/Prefabs/UI/CharSel_Background.prefab b/Assets/BossRoom/Prefabs/UI/CharSel_Background.prefab index e19a1448e..02d679176 100644 --- a/Assets/BossRoom/Prefabs/UI/CharSel_Background.prefab +++ b/Assets/BossRoom/Prefabs/UI/CharSel_Background.prefab @@ -795,51 +795,63 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, type: 3} + - target: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, + type: 3} propertyPath: m_RootOrder value: 81 objectReference: {fileID: 0} - - target: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, type: 3} + - target: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, + type: 3} propertyPath: m_LocalPosition.x value: -8.03 objectReference: {fileID: 0} - - target: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, type: 3} + - target: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, + type: 3} propertyPath: m_LocalPosition.y value: -26.91 objectReference: {fileID: 0} - - target: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, type: 3} + - target: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, + type: 3} propertyPath: m_LocalPosition.z value: 4.18 objectReference: {fileID: 0} - - target: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, type: 3} + - target: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, type: 3} + - target: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, type: 3} + - target: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, type: 3} + - target: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, type: 3} + - target: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, type: 3} + - target: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, type: 3} + - target: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4624227725711097875, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, type: 3} + - target: {fileID: 4624227725711097875, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, + type: 3} propertyPath: m_Name value: FX_Torch_Fire (1) objectReference: {fileID: 0} @@ -847,7 +859,8 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, type: 3} --- !u!4 &4706495449646070121 stripped Transform: - m_CorrespondingSourceObject: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, type: 3} + m_CorrespondingSourceObject: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, + type: 3} m_PrefabInstance: {fileID: 107059658230905211} m_PrefabAsset: {fileID: 0} --- !u!1001 &200406246443260961 @@ -857,68 +870,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_RootOrder value: 30 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalPosition.x value: -13.689999 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalPosition.z value: -6.231662 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.y value: 0.00000011920929 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.z value: -2.6054018e-15 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_Name value: env_floor2 (6) objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + m_RemovedComponents: [{fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} --- !u!4 &3234345934838456955 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} m_PrefabInstance: {fileID: 200406246443260961} m_PrefabAsset: {fileID: 0} --- !u!1001 &247618298524831164 @@ -928,68 +956,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_RootOrder value: 48 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalPosition.x value: 10.310001 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalPosition.z value: 1.768338 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.y value: 0.00000011920929 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.z value: -2.6054018e-15 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_Name value: env_floor2 (10) objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + m_RemovedComponents: [{fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} --- !u!4 &3263701879421858790 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} m_PrefabInstance: {fileID: 247618298524831164} m_PrefabAsset: {fileID: 0} --- !u!1001 &426843157331984070 @@ -999,68 +1042,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_RootOrder value: 47 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalPosition.x value: 14.310001 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalPosition.z value: -2.231662 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.y value: -1.9106855e-15 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.z value: -0.00000008742278 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_Name value: env_floor1 (10) objectReference: {fileID: 0} - - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + m_RemovedComponents: [{fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} --- !u!4 &5183051475224248315 stripped Transform: - m_CorrespondingSourceObject: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + m_CorrespondingSourceObject: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} m_PrefabInstance: {fileID: 426843157331984070} m_PrefabAsset: {fileID: 0} --- !u!1001 &532286404447433637 @@ -1070,68 +1128,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_RootOrder value: 65 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalPosition.x value: -17.689999 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalPosition.z value: -10.231662 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.y value: -1.9106855e-15 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.z value: -0.00000008742278 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_Name value: env_floor1 (14) objectReference: {fileID: 0} - - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + m_RemovedComponents: [{fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} --- !u!4 &4999727750412628632 stripped Transform: - m_CorrespondingSourceObject: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + m_CorrespondingSourceObject: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} m_PrefabInstance: {fileID: 532286404447433637} m_PrefabAsset: {fileID: 0} --- !u!1001 &565920128731415452 @@ -1141,68 +1214,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_RootOrder value: 62 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalPosition.x value: -21.689999 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalPosition.z value: 1.768338 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.y value: 0.00000011920929 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.z value: -2.6054018e-15 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_Name value: env_floor2 (13) objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + m_RemovedComponents: [{fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} --- !u!4 &3026354410201873862 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} m_PrefabInstance: {fileID: 565920128731415452} m_PrefabAsset: {fileID: 0} --- !u!1001 &585480820881964488 @@ -1212,68 +1300,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_RootOrder value: 22 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.x value: -1.6899986 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.z value: 1.768338 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.y value: 0.00000011920929 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.z value: -2.6054018e-15 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Name value: env_floor3 (4) objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + m_RemovedComponents: [{fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} --- !u!4 &2739670314806559634 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} m_PrefabInstance: {fileID: 585480820881964488} m_PrefabAsset: {fileID: 0} --- !u!1001 &768393098799127406 @@ -1283,68 +1386,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_RootOrder value: 59 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalPosition.x value: -17.689999 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalPosition.z value: 5.7683344 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.y value: 0.00000011920929 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.z value: -2.6054018e-15 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_Name value: env_floor2 (12) objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + m_RemovedComponents: [{fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} --- !u!4 &2633666134721422644 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} m_PrefabInstance: {fileID: 768393098799127406} m_PrefabAsset: {fileID: 0} --- !u!1001 &874699328412408932 @@ -1354,68 +1472,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_Name value: wall1_top_straight_2 (7) objectReference: {fileID: 0} - - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_RootOrder value: 71 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalPosition.x value: -9.689999 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalPosition.y value: -28 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalPosition.z value: 5.7683344 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.w value: 0.7071068 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.y value: 0.7071068 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 90 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + m_RemovedComponents: [{fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} --- !u!4 &2976957566934501913 stripped Transform: - m_CorrespondingSourceObject: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + m_CorrespondingSourceObject: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} m_PrefabInstance: {fileID: 874699328412408932} m_PrefabAsset: {fileID: 0} --- !u!1001 &953262717779246288 @@ -1425,76 +1558,93 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, type: 3} + - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, + type: 3} propertyPath: m_RootOrder value: 91 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, type: 3} + - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, + type: 3} propertyPath: m_LocalScale.x value: 1 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, type: 3} + - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, + type: 3} propertyPath: m_LocalScale.y value: 1 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, type: 3} + - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, + type: 3} propertyPath: m_LocalScale.z value: 1 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, type: 3} + - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, + type: 3} propertyPath: m_LocalPosition.x value: 4.34 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, type: 3} + - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, + type: 3} propertyPath: m_LocalPosition.y value: -31.82 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, type: 3} + - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, + type: 3} propertyPath: m_LocalPosition.z value: 3.9 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, type: 3} + - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, + type: 3} propertyPath: m_LocalRotation.w value: 0.992877 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, type: 3} + - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, + type: 3} propertyPath: m_LocalRotation.x value: 0.11914404 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, type: 3} + - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, + type: 3} propertyPath: m_LocalRotation.y value: 0.00000011836016 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, type: 3} + - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, + type: 3} propertyPath: m_LocalRotation.z value: 0.000000014203071 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, type: 3} + - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, type: 3} + - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, type: 3} + - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: 4adee64436cbf334b8ab837a5ab13a1a, type: 3} + - target: {fileID: 4371491365999748502, guid: 4adee64436cbf334b8ab837a5ab13a1a, + type: 3} propertyPath: m_Name value: env_rock objectReference: {fileID: 0} - - target: {fileID: 6664442740537142151, guid: 4adee64436cbf334b8ab837a5ab13a1a, type: 3} + - target: {fileID: 6664442740537142151, guid: 4adee64436cbf334b8ab837a5ab13a1a, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 6664442740537142151, guid: 4adee64436cbf334b8ab837a5ab13a1a, type: 3} + m_RemovedComponents: [{fileID: 6664442740537142151, guid: 4adee64436cbf334b8ab837a5ab13a1a, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 4adee64436cbf334b8ab837a5ab13a1a, type: 3} --- !u!4 &2530991597359301258 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, type: 3} + m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, + type: 3} m_PrefabInstance: {fileID: 953262717779246288} m_PrefabAsset: {fileID: 0} --- !u!1001 &1233882698887240474 @@ -1504,68 +1654,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_RootOrder value: 64 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.x value: -17.689999 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.z value: -6.231662 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.y value: 0.00000011920929 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.z value: -2.6054018e-15 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Name value: env_floor3 (18) objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + m_RemovedComponents: [{fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} --- !u!4 &4556211054437197120 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} m_PrefabInstance: {fileID: 1233882698887240474} m_PrefabAsset: {fileID: 0} --- !u!1001 &1488664950940114403 @@ -1575,68 +1740,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_RootOrder value: 56 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_LocalPosition.x value: -21.689999 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_LocalPosition.z value: 5.7683344 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_LocalRotation.w value: 0.7071077 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000015454328 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_LocalRotation.y value: 0.7071059 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_LocalRotation.z value: -0.00000001545429 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 90 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 7708204222138769870, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 7708204222138769870, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_Name value: wall1_base_straight_2 (3) objectReference: {fileID: 0} - - target: {fileID: 7708204222138769870, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 7708204222138769870, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 8619486518123324128, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 8619486518123324128, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 8619486518123324128, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + m_RemovedComponents: [{fileID: 8619486518123324128, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} --- !u!4 &744763515804582010 stripped Transform: - m_CorrespondingSourceObject: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + m_CorrespondingSourceObject: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} m_PrefabInstance: {fileID: 1488664950940114403} m_PrefabAsset: {fileID: 0} --- !u!1001 &1617041200390408732 @@ -1646,68 +1826,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_RootOrder value: 24 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalPosition.x value: -5.6899986 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalPosition.z value: 5.7683344 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.y value: -1.9106855e-15 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.z value: -0.00000008742278 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_Name value: env_floor1 (4) objectReference: {fileID: 0} - - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + m_RemovedComponents: [{fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} --- !u!4 &6084772302248676129 stripped Transform: - m_CorrespondingSourceObject: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + m_CorrespondingSourceObject: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} m_PrefabInstance: {fileID: 1617041200390408732} m_PrefabAsset: {fileID: 0} --- !u!1001 &1707909633726341404 @@ -1717,68 +1912,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_Name value: wall1_top_straight_2 (5) objectReference: {fileID: 0} - - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_RootOrder value: 69 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalPosition.x value: -17.689999 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalPosition.y value: -28 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalPosition.z value: 5.7683344 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.w value: 0.7071068 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.y value: 0.7071068 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 90 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + m_RemovedComponents: [{fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} --- !u!4 &3657063113099343713 stripped Transform: - m_CorrespondingSourceObject: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + m_CorrespondingSourceObject: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} m_PrefabInstance: {fileID: 1707909633726341404} m_PrefabAsset: {fileID: 0} --- !u!1001 &1983838506543166949 @@ -1788,68 +1998,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_RootOrder value: 34 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalPosition.x value: 2.3100014 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalPosition.z value: -6.231662 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.y value: 0.00000011920929 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.z value: -2.6054018e-15 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_Name value: env_floor2 (7) objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + m_RemovedComponents: [{fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} --- !u!4 &3867829615690795967 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} m_PrefabInstance: {fileID: 1983838506543166949} m_PrefabAsset: {fileID: 0} --- !u!1001 &2056564106984205452 @@ -1859,68 +2084,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_Name value: wall1_top_straight_2 (9) objectReference: {fileID: 0} - - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_RootOrder value: 73 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalPosition.x value: 6.3100014 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalPosition.y value: -28 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalPosition.z value: 5.7683344 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.w value: 0.7071068 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.y value: 0.7071068 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 90 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + m_RemovedComponents: [{fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} --- !u!4 &4177558615837457137 stripped Transform: - m_CorrespondingSourceObject: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + m_CorrespondingSourceObject: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} m_PrefabInstance: {fileID: 2056564106984205452} m_PrefabAsset: {fileID: 0} --- !u!1001 &2108320564955123333 @@ -1930,68 +2170,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_RootOrder value: 25 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalPosition.x value: -1.6899986 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalPosition.z value: -2.231662 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.y value: -1.9106855e-15 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.z value: -0.00000008742278 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_Name value: env_floor1 (5) objectReference: {fileID: 0} - - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + m_RemovedComponents: [{fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} --- !u!4 &6864563551950278584 stripped Transform: - m_CorrespondingSourceObject: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + m_CorrespondingSourceObject: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} m_PrefabInstance: {fileID: 2108320564955123333} m_PrefabAsset: {fileID: 0} --- !u!1001 &2186797822005279263 @@ -2001,63 +2256,78 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 1899106884463111546, guid: 0694fadc66450d74c815c822643aae02, type: 3} + - target: {fileID: 1899106884463111546, guid: 0694fadc66450d74c815c822643aae02, + type: 3} propertyPath: m_Name value: env_spiderweb_1 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 0694fadc66450d74c815c822643aae02, type: 3} + - target: {fileID: 7980115660496427320, guid: 0694fadc66450d74c815c822643aae02, + type: 3} propertyPath: m_RootOrder value: 95 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 0694fadc66450d74c815c822643aae02, type: 3} + - target: {fileID: 7980115660496427320, guid: 0694fadc66450d74c815c822643aae02, + type: 3} propertyPath: m_LocalScale.x value: 1 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 0694fadc66450d74c815c822643aae02, type: 3} + - target: {fileID: 7980115660496427320, guid: 0694fadc66450d74c815c822643aae02, + type: 3} propertyPath: m_LocalScale.y value: 1 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 0694fadc66450d74c815c822643aae02, type: 3} + - target: {fileID: 7980115660496427320, guid: 0694fadc66450d74c815c822643aae02, + type: 3} propertyPath: m_LocalScale.z value: 1 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 0694fadc66450d74c815c822643aae02, type: 3} + - target: {fileID: 7980115660496427320, guid: 0694fadc66450d74c815c822643aae02, + type: 3} propertyPath: m_LocalPosition.x value: 12.280076 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 0694fadc66450d74c815c822643aae02, type: 3} + - target: {fileID: 7980115660496427320, guid: 0694fadc66450d74c815c822643aae02, + type: 3} propertyPath: m_LocalPosition.y value: -24.796923 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 0694fadc66450d74c815c822643aae02, type: 3} + - target: {fileID: 7980115660496427320, guid: 0694fadc66450d74c815c822643aae02, + type: 3} propertyPath: m_LocalPosition.z value: 5.6537476 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 0694fadc66450d74c815c822643aae02, type: 3} + - target: {fileID: 7980115660496427320, guid: 0694fadc66450d74c815c822643aae02, + type: 3} propertyPath: m_LocalRotation.w value: 0.8023239 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 0694fadc66450d74c815c822643aae02, type: 3} + - target: {fileID: 7980115660496427320, guid: 0694fadc66450d74c815c822643aae02, + type: 3} propertyPath: m_LocalRotation.x value: 0.09627791 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 0694fadc66450d74c815c822643aae02, type: 3} + - target: {fileID: 7980115660496427320, guid: 0694fadc66450d74c815c822643aae02, + type: 3} propertyPath: m_LocalRotation.y value: -0.58487713 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 0694fadc66450d74c815c822643aae02, type: 3} + - target: {fileID: 7980115660496427320, guid: 0694fadc66450d74c815c822643aae02, + type: 3} propertyPath: m_LocalRotation.z value: -0.07018446 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 0694fadc66450d74c815c822643aae02, type: 3} + - target: {fileID: 7980115660496427320, guid: 0694fadc66450d74c815c822643aae02, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 4.151 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 0694fadc66450d74c815c822643aae02, type: 3} + - target: {fileID: 7980115660496427320, guid: 0694fadc66450d74c815c822643aae02, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: -72.658 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 0694fadc66450d74c815c822643aae02, type: 3} + - target: {fileID: 7980115660496427320, guid: 0694fadc66450d74c815c822643aae02, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: -13.052 objectReference: {fileID: 0} @@ -2065,7 +2335,8 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 0694fadc66450d74c815c822643aae02, type: 3} --- !u!4 &8135191846433530663 stripped Transform: - m_CorrespondingSourceObject: {fileID: 7980115660496427320, guid: 0694fadc66450d74c815c822643aae02, type: 3} + m_CorrespondingSourceObject: {fileID: 7980115660496427320, guid: 0694fadc66450d74c815c822643aae02, + type: 3} m_PrefabInstance: {fileID: 2186797822005279263} m_PrefabAsset: {fileID: 0} --- !u!1001 &2257028117270133520 @@ -2075,68 +2346,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_RootOrder value: 44 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.x value: 14.310001 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.z value: 1.768338 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.y value: 0.00000011920929 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.z value: -2.6054018e-15 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Name value: env_floor3 (12) objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + m_RemovedComponents: [{fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} --- !u!4 &3564558474089530698 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} m_PrefabInstance: {fileID: 2257028117270133520} m_PrefabAsset: {fileID: 0} --- !u!1001 &2489440616499340154 @@ -2146,68 +2432,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_RootOrder value: 52 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalPosition.x value: 10.310001 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalPosition.z value: -6.231662 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.y value: 0.00000011920929 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.z value: -2.6054018e-15 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_Name value: env_floor2 (11) objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + m_RemovedComponents: [{fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} --- !u!4 &912274811401280800 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} m_PrefabInstance: {fileID: 2489440616499340154} m_PrefabAsset: {fileID: 0} --- !u!1001 &2772743722054855949 @@ -2217,68 +2518,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_RootOrder value: 57 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_LocalPosition.x value: -13.689999 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_LocalPosition.z value: 5.7683344 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_LocalRotation.w value: 0.7071079 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000015454336 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_LocalRotation.y value: -0.70710576 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_LocalRotation.z value: 0.000000015454287 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: -90 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 7708204222138769870, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 7708204222138769870, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_Name value: wall1_base_straight_1 (3) objectReference: {fileID: 0} - - target: {fileID: 7708204222138769870, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 7708204222138769870, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 8619486518123324128, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 8619486518123324128, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 8619486518123324128, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + m_RemovedComponents: [{fileID: 8619486518123324128, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} --- !u!4 &4073471928574029972 stripped Transform: - m_CorrespondingSourceObject: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + m_CorrespondingSourceObject: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} m_PrefabInstance: {fileID: 2772743722054855949} m_PrefabAsset: {fileID: 0} --- !u!1001 &2840342776707687342 @@ -2288,68 +2604,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_RootOrder value: 29 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalPosition.x value: -9.689999 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalPosition.z value: -10.231662 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.y value: -1.9106855e-15 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.z value: -0.00000008742278 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_Name value: env_floor1 (6) objectReference: {fileID: 0} - - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + m_RemovedComponents: [{fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} --- !u!4 &7308070030084154003 stripped Transform: - m_CorrespondingSourceObject: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + m_CorrespondingSourceObject: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} m_PrefabInstance: {fileID: 2840342776707687342} m_PrefabAsset: {fileID: 0} --- !u!1001 &3042088942480579439 @@ -2359,76 +2690,93 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, type: 3} + - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, + type: 3} propertyPath: m_RootOrder value: 92 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, type: 3} + - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, + type: 3} propertyPath: m_LocalScale.x value: 1 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, type: 3} + - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, + type: 3} propertyPath: m_LocalScale.y value: 1 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, type: 3} + - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, + type: 3} propertyPath: m_LocalScale.z value: 1 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, type: 3} + - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, + type: 3} propertyPath: m_LocalPosition.x value: -9.1 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, type: 3} + - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, + type: 3} propertyPath: m_LocalPosition.y value: -31.79 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, type: 3} + - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, + type: 3} propertyPath: m_LocalPosition.z value: 3.77 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, type: 3} + - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, + type: 3} propertyPath: m_LocalRotation.w value: 0.7589441 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, type: 3} + - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, + type: 3} propertyPath: m_LocalRotation.x value: 0.09107237 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, type: 3} + - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, + type: 3} propertyPath: m_LocalRotation.y value: 0.640163 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, type: 3} + - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, + type: 3} propertyPath: m_LocalRotation.z value: 0.07681878 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, type: 3} + - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 2.286 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, type: 3} + - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 80.565 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, type: 3} + - target: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 13.497 objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: 4adee64436cbf334b8ab837a5ab13a1a, type: 3} + - target: {fileID: 4371491365999748502, guid: 4adee64436cbf334b8ab837a5ab13a1a, + type: 3} propertyPath: m_Name value: env_rock (1) objectReference: {fileID: 0} - - target: {fileID: 6664442740537142151, guid: 4adee64436cbf334b8ab837a5ab13a1a, type: 3} + - target: {fileID: 6664442740537142151, guid: 4adee64436cbf334b8ab837a5ab13a1a, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 6664442740537142151, guid: 4adee64436cbf334b8ab837a5ab13a1a, type: 3} + m_RemovedComponents: [{fileID: 6664442740537142151, guid: 4adee64436cbf334b8ab837a5ab13a1a, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 4adee64436cbf334b8ab837a5ab13a1a, type: 3} --- !u!4 &293547408551421237 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, type: 3} + m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 4adee64436cbf334b8ab837a5ab13a1a, + type: 3} m_PrefabInstance: {fileID: 3042088942480579439} m_PrefabAsset: {fileID: 0} --- !u!1001 &3060851916575743275 @@ -2438,68 +2786,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_RootOrder value: 31 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.x value: -13.689999 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.z value: -10.231662 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.y value: 0.00000011920929 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.z value: -2.6054018e-15 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Name value: env_floor3 (7) objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + m_RemovedComponents: [{fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} --- !u!4 &315001900675195761 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} m_PrefabInstance: {fileID: 3060851916575743275} m_PrefabAsset: {fileID: 0} --- !u!1001 &3196203318862844566 @@ -2509,68 +2872,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_RootOrder value: 58 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.x value: -17.689999 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.z value: 1.768338 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.y value: 0.00000011920929 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.z value: -2.6054018e-15 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Name value: env_floor3 (16) objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + m_RemovedComponents: [{fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} --- !u!4 &179715095809354956 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} m_PrefabInstance: {fileID: 3196203318862844566} m_PrefabAsset: {fileID: 0} --- !u!1001 &3464601859754156467 @@ -2580,68 +2958,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_RootOrder value: 2 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_LocalPosition.x value: -13.689999 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_LocalPosition.z value: 5.7683344 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_LocalRotation.w value: 0.7071077 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000015454328 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_LocalRotation.y value: 0.7071059 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_LocalRotation.z value: -0.00000001545429 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 90 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 7708204222138769870, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 7708204222138769870, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_Name value: wall1_base_straight_2 objectReference: {fileID: 0} - - target: {fileID: 7708204222138769870, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 7708204222138769870, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 8619486518123324128, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 8619486518123324128, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 8619486518123324128, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + m_RemovedComponents: [{fileID: 8619486518123324128, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} --- !u!4 &3380408451001089066 stripped Transform: - m_CorrespondingSourceObject: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + m_CorrespondingSourceObject: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} m_PrefabInstance: {fileID: 3464601859754156467} m_PrefabAsset: {fileID: 0} --- !u!1001 &3464601859825011971 @@ -2651,68 +3044,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 759726440798291530, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 759726440798291530, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_Name value: wall1_top_straight_1 (1) objectReference: {fileID: 0} - - target: {fileID: 759726440798291530, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 759726440798291530, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 2616948069966954651, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2616948069966954651, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_RootOrder value: 11 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalPosition.x value: 2.3100014 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalPosition.y value: -24 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalPosition.z value: 5.7683344 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalRotation.w value: 0.7071068 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalRotation.y value: 0.7071068 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 90 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 2616948069966954651, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + m_RemovedComponents: [{fileID: 2616948069966954651, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} --- !u!4 &1542329270733806462 stripped Transform: - m_CorrespondingSourceObject: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + m_CorrespondingSourceObject: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} m_PrefabInstance: {fileID: 3464601859825011971} m_PrefabAsset: {fileID: 0} --- !u!1001 &3464601859849563963 @@ -2722,72 +3130,88 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 1899106884463111546, guid: 702ab0d292bbb1a4cb6821e2ffcad426, type: 3} + - target: {fileID: 1899106884463111546, guid: 702ab0d292bbb1a4cb6821e2ffcad426, + type: 3} propertyPath: m_Name value: env_barrier objectReference: {fileID: 0} - - target: {fileID: 4897062626467851486, guid: 702ab0d292bbb1a4cb6821e2ffcad426, type: 3} + - target: {fileID: 4897062626467851486, guid: 702ab0d292bbb1a4cb6821e2ffcad426, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 702ab0d292bbb1a4cb6821e2ffcad426, type: 3} + - target: {fileID: 7980115660496427320, guid: 702ab0d292bbb1a4cb6821e2ffcad426, + type: 3} propertyPath: m_RootOrder value: 20 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 702ab0d292bbb1a4cb6821e2ffcad426, type: 3} + - target: {fileID: 7980115660496427320, guid: 702ab0d292bbb1a4cb6821e2ffcad426, + type: 3} propertyPath: m_LocalScale.x value: 0.9934572 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 702ab0d292bbb1a4cb6821e2ffcad426, type: 3} + - target: {fileID: 7980115660496427320, guid: 702ab0d292bbb1a4cb6821e2ffcad426, + type: 3} propertyPath: m_LocalScale.y value: 0.88959813 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 702ab0d292bbb1a4cb6821e2ffcad426, type: 3} + - target: {fileID: 7980115660496427320, guid: 702ab0d292bbb1a4cb6821e2ffcad426, + type: 3} propertyPath: m_LocalPosition.x value: -5.68 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 702ab0d292bbb1a4cb6821e2ffcad426, type: 3} + - target: {fileID: 7980115660496427320, guid: 702ab0d292bbb1a4cb6821e2ffcad426, + type: 3} propertyPath: m_LocalPosition.y value: -31.57 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 702ab0d292bbb1a4cb6821e2ffcad426, type: 3} + - target: {fileID: 7980115660496427320, guid: 702ab0d292bbb1a4cb6821e2ffcad426, + type: 3} propertyPath: m_LocalPosition.z value: 3.98 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 702ab0d292bbb1a4cb6821e2ffcad426, type: 3} + - target: {fileID: 7980115660496427320, guid: 702ab0d292bbb1a4cb6821e2ffcad426, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 702ab0d292bbb1a4cb6821e2ffcad426, type: 3} + - target: {fileID: 7980115660496427320, guid: 702ab0d292bbb1a4cb6821e2ffcad426, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 702ab0d292bbb1a4cb6821e2ffcad426, type: 3} + - target: {fileID: 7980115660496427320, guid: 702ab0d292bbb1a4cb6821e2ffcad426, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 702ab0d292bbb1a4cb6821e2ffcad426, type: 3} + - target: {fileID: 7980115660496427320, guid: 702ab0d292bbb1a4cb6821e2ffcad426, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 702ab0d292bbb1a4cb6821e2ffcad426, type: 3} + - target: {fileID: 7980115660496427320, guid: 702ab0d292bbb1a4cb6821e2ffcad426, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 702ab0d292bbb1a4cb6821e2ffcad426, type: 3} + - target: {fileID: 7980115660496427320, guid: 702ab0d292bbb1a4cb6821e2ffcad426, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 702ab0d292bbb1a4cb6821e2ffcad426, type: 3} + - target: {fileID: 7980115660496427320, guid: 702ab0d292bbb1a4cb6821e2ffcad426, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 4897062626467851486, guid: 702ab0d292bbb1a4cb6821e2ffcad426, type: 3} + m_RemovedComponents: [{fileID: 4897062626467851486, guid: 702ab0d292bbb1a4cb6821e2ffcad426, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 702ab0d292bbb1a4cb6821e2ffcad426, type: 3} --- !u!4 &6821737240886408707 stripped Transform: - m_CorrespondingSourceObject: {fileID: 7980115660496427320, guid: 702ab0d292bbb1a4cb6821e2ffcad426, type: 3} + m_CorrespondingSourceObject: {fileID: 7980115660496427320, guid: 702ab0d292bbb1a4cb6821e2ffcad426, + type: 3} m_PrefabInstance: {fileID: 3464601859849563963} m_PrefabAsset: {fileID: 0} --- !u!1001 &3464601859857568799 @@ -2797,68 +3221,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_RootOrder value: 5 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalPosition.x value: -9.689999 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalPosition.z value: 5.7683344 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.y value: 0.00000011920929 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.z value: -2.6054018e-15 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_Name value: env_floor2 objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + m_RemovedComponents: [{fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} --- !u!4 &2175789611110148677 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} m_PrefabInstance: {fileID: 3464601859857568799} m_PrefabAsset: {fileID: 0} --- !u!1001 &3464601860091766067 @@ -2868,65 +3307,79 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 1899106884463111546, guid: 028c030816ef0094b81d3239f296e369, type: 3} + - target: {fileID: 1899106884463111546, guid: 028c030816ef0094b81d3239f296e369, + type: 3} propertyPath: m_Name value: env_Door objectReference: {fileID: 0} - - target: {fileID: 4897062626467851486, guid: 028c030816ef0094b81d3239f296e369, type: 3} + - target: {fileID: 4897062626467851486, guid: 028c030816ef0094b81d3239f296e369, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 028c030816ef0094b81d3239f296e369, type: 3} + - target: {fileID: 7980115660496427320, guid: 028c030816ef0094b81d3239f296e369, + type: 3} propertyPath: m_RootOrder value: 21 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 028c030816ef0094b81d3239f296e369, type: 3} + - target: {fileID: 7980115660496427320, guid: 028c030816ef0094b81d3239f296e369, + type: 3} propertyPath: m_LocalPosition.x value: -5.6899986 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 028c030816ef0094b81d3239f296e369, type: 3} + - target: {fileID: 7980115660496427320, guid: 028c030816ef0094b81d3239f296e369, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 028c030816ef0094b81d3239f296e369, type: 3} + - target: {fileID: 7980115660496427320, guid: 028c030816ef0094b81d3239f296e369, + type: 3} propertyPath: m_LocalPosition.z value: 4.49 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 028c030816ef0094b81d3239f296e369, type: 3} + - target: {fileID: 7980115660496427320, guid: 028c030816ef0094b81d3239f296e369, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 028c030816ef0094b81d3239f296e369, type: 3} + - target: {fileID: 7980115660496427320, guid: 028c030816ef0094b81d3239f296e369, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 028c030816ef0094b81d3239f296e369, type: 3} + - target: {fileID: 7980115660496427320, guid: 028c030816ef0094b81d3239f296e369, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 028c030816ef0094b81d3239f296e369, type: 3} + - target: {fileID: 7980115660496427320, guid: 028c030816ef0094b81d3239f296e369, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 028c030816ef0094b81d3239f296e369, type: 3} + - target: {fileID: 7980115660496427320, guid: 028c030816ef0094b81d3239f296e369, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 028c030816ef0094b81d3239f296e369, type: 3} + - target: {fileID: 7980115660496427320, guid: 028c030816ef0094b81d3239f296e369, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 028c030816ef0094b81d3239f296e369, type: 3} + - target: {fileID: 7980115660496427320, guid: 028c030816ef0094b81d3239f296e369, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 4897062626467851486, guid: 028c030816ef0094b81d3239f296e369, type: 3} - - {fileID: 8778471712971589033, guid: 028c030816ef0094b81d3239f296e369, type: 3} + m_RemovedComponents: [{fileID: 4897062626467851486, guid: 028c030816ef0094b81d3239f296e369, + type: 3}, {fileID: 8778471712971589033, guid: 028c030816ef0094b81d3239f296e369, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 028c030816ef0094b81d3239f296e369, type: 3} --- !u!4 &6821737241329974283 stripped Transform: - m_CorrespondingSourceObject: {fileID: 7980115660496427320, guid: 028c030816ef0094b81d3239f296e369, type: 3} + m_CorrespondingSourceObject: {fileID: 7980115660496427320, guid: 028c030816ef0094b81d3239f296e369, + type: 3} m_PrefabInstance: {fileID: 3464601860091766067} m_PrefabAsset: {fileID: 0} --- !u!1001 &3464601860215192819 @@ -2936,68 +3389,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_RootOrder value: 9 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.x value: -13.689999 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.z value: -2.231662 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.y value: 0.00000011920929 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.z value: -2.6054018e-15 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Name value: env_floor3 (1) objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + m_RemovedComponents: [{fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} --- !u!4 &2175789610813866665 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} m_PrefabInstance: {fileID: 3464601860215192819} m_PrefabAsset: {fileID: 0} --- !u!1001 &3464601860382823629 @@ -3007,68 +3475,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_RootOrder value: 15 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalPosition.x value: 6.3100014 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalPosition.z value: 5.7683344 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.y value: 0.00000011920929 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.z value: -2.6054018e-15 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_Name value: env_floor2 (2) objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + m_RemovedComponents: [{fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} --- !u!4 &2175789611652344471 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} m_PrefabInstance: {fileID: 3464601860382823629} m_PrefabAsset: {fileID: 0} --- !u!1001 &3464601860391582044 @@ -3078,68 +3561,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_RootOrder value: 16 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalPosition.x value: 2.3100014 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalPosition.z value: 5.7683344 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.y value: -1.9106855e-15 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.z value: -0.00000008742278 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_Name value: env_floor1 (2) objectReference: {fileID: 0} - - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + m_RemovedComponents: [{fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} --- !u!4 &8220524271094872161 stripped Transform: - m_CorrespondingSourceObject: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + m_CorrespondingSourceObject: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} m_PrefabInstance: {fileID: 3464601860391582044} m_PrefabAsset: {fileID: 0} --- !u!1001 &3464601860509709319 @@ -3149,68 +3647,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_RootOrder value: 17 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalPosition.x value: 6.3100014 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalPosition.z value: -2.231662 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.y value: -1.9106855e-15 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.z value: -0.00000008742278 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_Name value: env_floor1 (3) objectReference: {fileID: 0} - - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + m_RemovedComponents: [{fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} --- !u!4 &8220524271010362682 stripped Transform: - m_CorrespondingSourceObject: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + m_CorrespondingSourceObject: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} m_PrefabInstance: {fileID: 3464601860509709319} m_PrefabAsset: {fileID: 0} --- !u!1001 &3464601860604600120 @@ -3220,68 +3733,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_RootOrder value: 12 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_LocalPosition.x value: 2.3100014 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_LocalPosition.z value: 5.7683344 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_LocalRotation.w value: 0.7071077 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000015454328 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_LocalRotation.y value: 0.7071059 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_LocalRotation.z value: -0.00000001545429 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 90 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 7708204222138769870, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 7708204222138769870, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_Name value: wall1_base_straight_2 (1) objectReference: {fileID: 0} - - target: {fileID: 7708204222138769870, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 7708204222138769870, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 8619486518123324128, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 8619486518123324128, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 8619486518123324128, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + m_RemovedComponents: [{fileID: 8619486518123324128, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} --- !u!4 &3380408450136048289 stripped Transform: - m_CorrespondingSourceObject: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + m_CorrespondingSourceObject: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} m_PrefabInstance: {fileID: 3464601860604600120} m_PrefabAsset: {fileID: 0} --- !u!1001 &3464601860640226133 @@ -3291,68 +3819,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 759726440798291530, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 759726440798291530, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_Name value: wall1_top_straight_1 objectReference: {fileID: 0} - - target: {fileID: 759726440798291530, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 759726440798291530, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 2616948069966954651, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2616948069966954651, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_RootOrder value: 1 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalPosition.x value: -13.689999 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalPosition.y value: -24 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalPosition.z value: 5.7683344 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalRotation.w value: 0.7071068 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalRotation.y value: 0.7071068 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 90 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 2616948069966954651, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + m_RemovedComponents: [{fileID: 2616948069966954651, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} --- !u!4 &1542329270995496232 stripped Transform: - m_CorrespondingSourceObject: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + m_CorrespondingSourceObject: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} m_PrefabInstance: {fileID: 3464601860640226133} m_PrefabAsset: {fileID: 0} --- !u!1001 &3464601860905635123 @@ -3362,63 +3905,78 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 1899106884463111546, guid: 3043be3dd5e679141871f4297e5847f2, type: 3} + - target: {fileID: 1899106884463111546, guid: 3043be3dd5e679141871f4297e5847f2, + type: 3} propertyPath: m_Name value: env_door_boss_head objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 3043be3dd5e679141871f4297e5847f2, type: 3} + - target: {fileID: 7980115660496427320, guid: 3043be3dd5e679141871f4297e5847f2, + type: 3} propertyPath: m_RootOrder value: 97 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 3043be3dd5e679141871f4297e5847f2, type: 3} + - target: {fileID: 7980115660496427320, guid: 3043be3dd5e679141871f4297e5847f2, + type: 3} propertyPath: m_LocalScale.x value: 1 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 3043be3dd5e679141871f4297e5847f2, type: 3} + - target: {fileID: 7980115660496427320, guid: 3043be3dd5e679141871f4297e5847f2, + type: 3} propertyPath: m_LocalScale.y value: 1 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 3043be3dd5e679141871f4297e5847f2, type: 3} + - target: {fileID: 7980115660496427320, guid: 3043be3dd5e679141871f4297e5847f2, + type: 3} propertyPath: m_LocalScale.z value: 1 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 3043be3dd5e679141871f4297e5847f2, type: 3} + - target: {fileID: 7980115660496427320, guid: 3043be3dd5e679141871f4297e5847f2, + type: 3} propertyPath: m_LocalPosition.x value: -5.6899986 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 3043be3dd5e679141871f4297e5847f2, type: 3} + - target: {fileID: 7980115660496427320, guid: 3043be3dd5e679141871f4297e5847f2, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 3043be3dd5e679141871f4297e5847f2, type: 3} + - target: {fileID: 7980115660496427320, guid: 3043be3dd5e679141871f4297e5847f2, + type: 3} propertyPath: m_LocalPosition.z value: 4.49 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 3043be3dd5e679141871f4297e5847f2, type: 3} + - target: {fileID: 7980115660496427320, guid: 3043be3dd5e679141871f4297e5847f2, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 3043be3dd5e679141871f4297e5847f2, type: 3} + - target: {fileID: 7980115660496427320, guid: 3043be3dd5e679141871f4297e5847f2, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 3043be3dd5e679141871f4297e5847f2, type: 3} + - target: {fileID: 7980115660496427320, guid: 3043be3dd5e679141871f4297e5847f2, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 3043be3dd5e679141871f4297e5847f2, type: 3} + - target: {fileID: 7980115660496427320, guid: 3043be3dd5e679141871f4297e5847f2, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 3043be3dd5e679141871f4297e5847f2, type: 3} + - target: {fileID: 7980115660496427320, guid: 3043be3dd5e679141871f4297e5847f2, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 3043be3dd5e679141871f4297e5847f2, type: 3} + - target: {fileID: 7980115660496427320, guid: 3043be3dd5e679141871f4297e5847f2, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 7980115660496427320, guid: 3043be3dd5e679141871f4297e5847f2, type: 3} + - target: {fileID: 7980115660496427320, guid: 3043be3dd5e679141871f4297e5847f2, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} @@ -3428,7 +3986,8 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 3043be3dd5e679141871f4297e5847f2, type: 3} --- !u!4 &6821737242145051659 stripped Transform: - m_CorrespondingSourceObject: {fileID: 7980115660496427320, guid: 3043be3dd5e679141871f4297e5847f2, type: 3} + m_CorrespondingSourceObject: {fileID: 7980115660496427320, guid: 3043be3dd5e679141871f4297e5847f2, + type: 3} m_PrefabInstance: {fileID: 3464601860905635123} m_PrefabAsset: {fileID: 0} --- !u!1001 &3464601860990837294 @@ -3438,68 +3997,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_RootOrder value: 13 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_LocalPosition.x value: 10.310001 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_LocalPosition.z value: 5.7683344 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_LocalRotation.w value: 0.7071079 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000015454336 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_LocalRotation.y value: -0.70710576 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_LocalRotation.z value: 0.000000015454287 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: -90 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 7708204222138769870, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 7708204222138769870, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_Name value: wall1_base_straight_1 (1) objectReference: {fileID: 0} - - target: {fileID: 7708204222138769870, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 7708204222138769870, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 8619486518123324128, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 8619486518123324128, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 8619486518123324128, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + m_RemovedComponents: [{fileID: 8619486518123324128, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} --- !u!4 &3380408450032615351 stripped Transform: - m_CorrespondingSourceObject: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + m_CorrespondingSourceObject: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} m_PrefabInstance: {fileID: 3464601860990837294} m_PrefabAsset: {fileID: 0} --- !u!1001 &3464601861324338898 @@ -3509,68 +4083,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_RootOrder value: 6 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalPosition.x value: -13.689999 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalPosition.z value: 5.768342 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.y value: -1.9106855e-15 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.z value: -0.00000008742278 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_Name value: env_floor1 objectReference: {fileID: 0} - - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + m_RemovedComponents: [{fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} --- !u!4 &8220524272313890799 stripped Transform: - m_CorrespondingSourceObject: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + m_CorrespondingSourceObject: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} m_PrefabInstance: {fileID: 3464601861324338898} m_PrefabAsset: {fileID: 0} --- !u!1001 &3464601861347511739 @@ -3580,68 +4169,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_Name value: wall1_top_straight_2 objectReference: {fileID: 0} - - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_RootOrder value: 0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalPosition.x value: -9.689999 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalPosition.y value: -24 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalPosition.z value: 5.7683344 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.w value: 0.7071068 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.y value: 0.7071068 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 90 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + m_RemovedComponents: [{fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} --- !u!4 &1542329270150831046 stripped Transform: - m_CorrespondingSourceObject: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + m_CorrespondingSourceObject: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} m_PrefabInstance: {fileID: 3464601861347511739} m_PrefabAsset: {fileID: 0} --- !u!1001 &3464601861373985035 @@ -3651,68 +4255,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_RootOrder value: 3 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_LocalPosition.x value: -5.6899986 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_LocalPosition.z value: 5.7683344 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_LocalRotation.w value: 0.7071079 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000015454336 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_LocalRotation.y value: -0.70710576 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_LocalRotation.z value: 0.000000015454287 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: -90 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 7708204222138769870, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 7708204222138769870, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_Name value: wall1_base_straight_1 objectReference: {fileID: 0} - - target: {fileID: 7708204222138769870, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 7708204222138769870, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 8619486518123324128, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 8619486518123324128, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 8619486518123324128, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + m_RemovedComponents: [{fileID: 8619486518123324128, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} --- !u!4 &3380408449366138002 stripped Transform: - m_CorrespondingSourceObject: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + m_CorrespondingSourceObject: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} m_PrefabInstance: {fileID: 3464601861373985035} m_PrefabAsset: {fileID: 0} --- !u!1001 &3464601861424927975 @@ -3722,68 +4341,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_RootOrder value: 18 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalPosition.x value: 2.3100014 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalPosition.z value: 1.768338 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.y value: 0.00000011920929 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.z value: -2.6054018e-15 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_Name value: env_floor2 (3) objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + m_RemovedComponents: [{fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} --- !u!4 &2175789612560067261 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} m_PrefabInstance: {fileID: 3464601861424927975} m_PrefabAsset: {fileID: 0} --- !u!1001 &3464601861497778158 @@ -3793,68 +4427,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_Name value: wall1_top_straight_2 (1) objectReference: {fileID: 0} - - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_RootOrder value: 10 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalPosition.x value: 6.3100014 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalPosition.y value: -24 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalPosition.z value: 5.7683344 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.w value: 0.7071068 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.y value: 0.7071068 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 90 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + m_RemovedComponents: [{fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} --- !u!4 &1542329270275864979 stripped Transform: - m_CorrespondingSourceObject: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + m_CorrespondingSourceObject: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} m_PrefabInstance: {fileID: 3464601861497778158} m_PrefabAsset: {fileID: 0} --- !u!1001 &3464601861631897940 @@ -3864,68 +4513,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_RootOrder value: 19 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.x value: 2.3100014 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.z value: -2.231662 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.y value: 0.00000011920929 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.z value: -2.6054018e-15 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Name value: env_floor3 (3) objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + m_RemovedComponents: [{fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} --- !u!4 &2175789612356243214 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} m_PrefabInstance: {fileID: 3464601861631897940} m_PrefabAsset: {fileID: 0} --- !u!1001 &3464601861653130759 @@ -3935,68 +4599,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_RootOrder value: 4 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.x value: -9.689999 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.z value: 1.768338 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.y value: 0.00000011920929 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.z value: -2.6054018e-15 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Name value: env_floor3 objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + m_RemovedComponents: [{fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} --- !u!4 &2175789612369088605 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} m_PrefabInstance: {fileID: 3464601861653130759} m_PrefabAsset: {fileID: 0} --- !u!1001 &3464601861710354146 @@ -4006,68 +4685,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_RootOrder value: 7 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalPosition.x value: -9.689999 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalPosition.z value: -2.231662 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.y value: -1.9106855e-15 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.z value: -0.00000008742278 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_Name value: env_floor1 (1) objectReference: {fileID: 0} - - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + m_RemovedComponents: [{fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} --- !u!4 &8220524271961446367 stripped Transform: - m_CorrespondingSourceObject: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + m_CorrespondingSourceObject: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} m_PrefabInstance: {fileID: 3464601861710354146} m_PrefabAsset: {fileID: 0} --- !u!1001 &3464601861841715991 @@ -4077,68 +4771,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_RootOrder value: 14 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.x value: 6.3100014 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.z value: 1.768338 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.y value: 0.00000011920929 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.z value: -2.6054018e-15 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Name value: env_floor3 (2) objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + m_RemovedComponents: [{fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} --- !u!4 &2175789612448415053 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} m_PrefabInstance: {fileID: 3464601861841715991} m_PrefabAsset: {fileID: 0} --- !u!1001 &3464601861848429340 @@ -4148,68 +4857,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_RootOrder value: 8 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalPosition.x value: -13.689999 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalPosition.z value: 1.768338 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.y value: 0.00000011920929 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.z value: -2.6054018e-15 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_Name value: env_floor2 (1) objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + m_RemovedComponents: [{fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} --- !u!4 &2175789612438555974 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} m_PrefabInstance: {fileID: 3464601861848429340} m_PrefabAsset: {fileID: 0} --- !u!1001 &3488529142885752956 @@ -4219,68 +4943,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_RootOrder value: 60 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalPosition.x value: -21.689999 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalPosition.z value: 5.7683344 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.y value: -1.9106855e-15 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.z value: -0.00000008742278 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_Name value: env_floor1 (12) objectReference: {fileID: 0} - - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + m_RemovedComponents: [{fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} --- !u!4 &8243883689471615297 stripped Transform: - m_CorrespondingSourceObject: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + m_CorrespondingSourceObject: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} m_PrefabInstance: {fileID: 3488529142885752956} m_PrefabAsset: {fileID: 0} --- !u!1001 &3732814538181430654 @@ -4290,68 +5029,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_Name value: wall1_top_straight_2 (14) objectReference: {fileID: 0} - - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_RootOrder value: 88 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalPosition.x value: -1.8 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalPosition.y value: -25.33 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalPosition.z value: 6.22 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.w value: 0.7071068 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.y value: 0.7071068 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 90 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + m_RemovedComponents: [{fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} --- !u!4 &1638842208548707075 stripped Transform: - m_CorrespondingSourceObject: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + m_CorrespondingSourceObject: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} m_PrefabInstance: {fileID: 3732814538181430654} m_PrefabAsset: {fileID: 0} --- !u!1001 &3745993455135346419 @@ -4361,68 +5115,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_Name value: wall1_top_straight_2 (8) objectReference: {fileID: 0} - - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_RootOrder value: 72 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalPosition.x value: 2.3100014 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalPosition.y value: -28 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalPosition.z value: 5.7683344 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.w value: 0.7071068 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.y value: 0.7071068 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 90 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + m_RemovedComponents: [{fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} --- !u!4 &1625720810058963086 stripped Transform: - m_CorrespondingSourceObject: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + m_CorrespondingSourceObject: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} m_PrefabInstance: {fileID: 3745993455135346419} m_PrefabAsset: {fileID: 0} --- !u!1001 &3882996294724044538 @@ -4432,68 +5201,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_RootOrder value: 49 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.x value: 10.310001 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.z value: -2.231662 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.y value: 0.00000011920929 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.z value: -2.6054018e-15 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Name value: env_floor3 (13) objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + m_RemovedComponents: [{fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} --- !u!4 &2001397688677709984 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} m_PrefabInstance: {fileID: 3882996294724044538} m_PrefabAsset: {fileID: 0} --- !u!1001 &3913250361052704989 @@ -4503,68 +5287,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_RootOrder value: 51 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalPosition.x value: 14.310001 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalPosition.z value: -10.231662 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.y value: -1.9106855e-15 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.z value: -0.00000008742278 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_Name value: env_floor1 (11) objectReference: {fileID: 0} - - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + m_RemovedComponents: [{fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} --- !u!4 &8380985825850896864 stripped Transform: - m_CorrespondingSourceObject: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + m_CorrespondingSourceObject: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} m_PrefabInstance: {fileID: 3913250361052704989} m_PrefabAsset: {fileID: 0} --- !u!1001 &3938525769440566657 @@ -4574,68 +5373,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_Name value: wall1_top_straight_2 (3) objectReference: {fileID: 0} - - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_RootOrder value: 54 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalPosition.x value: -17.689999 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalPosition.y value: -24 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalPosition.z value: 5.7683344 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.w value: 0.7071068 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.y value: 0.7071068 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 90 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + m_RemovedComponents: [{fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} --- !u!4 &1430945200787393532 stripped Transform: - m_CorrespondingSourceObject: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + m_CorrespondingSourceObject: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} m_PrefabInstance: {fileID: 3938525769440566657} m_PrefabAsset: {fileID: 0} --- !u!1001 &4173011404355720629 @@ -4645,68 +5459,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_RootOrder value: 37 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalPosition.x value: -1.6899986 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalPosition.z value: -10.231662 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.y value: -1.9106855e-15 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.z value: -0.00000008742278 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_Name value: env_floor1 (8) objectReference: {fileID: 0} - - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + m_RemovedComponents: [{fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} --- !u!4 &8928409966773851272 stripped Transform: - m_CorrespondingSourceObject: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + m_CorrespondingSourceObject: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} m_PrefabInstance: {fileID: 4173011404355720629} m_PrefabAsset: {fileID: 0} --- !u!1001 &4269327104456683248 @@ -4716,68 +5545,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_RootOrder value: 26 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalPosition.x value: -5.6899986 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalPosition.z value: 1.768338 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.y value: 0.00000011920929 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.z value: -2.6054018e-15 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_Name value: env_floor2 (5) objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + m_RemovedComponents: [{fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} --- !u!4 &1520803213867290794 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} m_PrefabInstance: {fileID: 4269327104456683248} m_PrefabAsset: {fileID: 0} --- !u!1001 &4278213368950912545 @@ -4787,63 +5631,78 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, type: 3} + - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, + type: 3} propertyPath: m_RootOrder value: 90 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, type: 3} + - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, + type: 3} propertyPath: m_LocalScale.x value: 1.8178 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, type: 3} + - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, + type: 3} propertyPath: m_LocalScale.y value: 1.8178 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, type: 3} + - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, + type: 3} propertyPath: m_LocalScale.z value: 1.8178 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, type: 3} + - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, + type: 3} propertyPath: m_LocalPosition.x value: -7.65 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, type: 3} + - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, + type: 3} propertyPath: m_LocalPosition.y value: -31.64 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, type: 3} + - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, + type: 3} propertyPath: m_LocalPosition.z value: 1.69 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, type: 3} + - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, + type: 3} propertyPath: m_LocalRotation.w value: 0.9998185 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, type: 3} + - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, + type: 3} propertyPath: m_LocalRotation.x value: -0.0174968 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, type: 3} + - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, + type: 3} propertyPath: m_LocalRotation.y value: 0.0012541165 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, type: 3} + - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, + type: 3} propertyPath: m_LocalRotation.z value: 0.0074311066 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, type: 3} + - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: -2.006 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, type: 3} + - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0.129 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, type: 3} + - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0.849 objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: de75bb4ddac2e2f4097798b91c0d4c1e, type: 3} + - target: {fileID: 4371491365999748502, guid: de75bb4ddac2e2f4097798b91c0d4c1e, + type: 3} propertyPath: m_Name value: env_pebbles (1) objectReference: {fileID: 0} @@ -4851,7 +5710,8 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: de75bb4ddac2e2f4097798b91c0d4c1e, type: 3} --- !u!4 &1547563109838096507 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, type: 3} + m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, + type: 3} m_PrefabInstance: {fileID: 4278213368950912545} m_PrefabAsset: {fileID: 0} --- !u!1001 &4325010830091826789 @@ -4861,68 +5721,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 759726440798291530, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 759726440798291530, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_Name value: wall1_top_straight_1 (3) objectReference: {fileID: 0} - - target: {fileID: 759726440798291530, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 759726440798291530, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 2616948069966954651, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2616948069966954651, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_RootOrder value: 55 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalPosition.x value: -21.689999 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalPosition.y value: -24 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalPosition.z value: 5.7683344 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalRotation.w value: 0.7071068 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalRotation.y value: 0.7071068 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 90 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 2616948069966954651, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + m_RemovedComponents: [{fileID: 2616948069966954651, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} --- !u!4 &1834740943003492376 stripped Transform: - m_CorrespondingSourceObject: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + m_CorrespondingSourceObject: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} m_PrefabInstance: {fileID: 4325010830091826789} m_PrefabAsset: {fileID: 0} --- !u!1001 &4343857780586967944 @@ -4932,68 +5807,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_RootOrder value: 27 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.x value: -5.6899986 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.z value: -2.231662 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.y value: 0.00000011920929 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.z value: -2.6054018e-15 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Name value: env_floor3 (5) objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + m_RemovedComponents: [{fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} --- !u!4 &1327774315117055442 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} m_PrefabInstance: {fileID: 4343857780586967944} m_PrefabAsset: {fileID: 0} --- !u!1001 &4361914706338745476 @@ -5003,68 +5893,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_Name value: wall1_top_straight_2 (2) objectReference: {fileID: 0} - - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_RootOrder value: 40 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalPosition.x value: 14.310001 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalPosition.y value: -24 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalPosition.z value: 5.7683344 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.w value: 0.7071068 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.y value: 0.7071068 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 90 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + m_RemovedComponents: [{fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} --- !u!4 &1872207809922079481 stripped Transform: - m_CorrespondingSourceObject: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + m_CorrespondingSourceObject: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} m_PrefabInstance: {fileID: 4361914706338745476} m_PrefabAsset: {fileID: 0} --- !u!1001 &4468075867780076645 @@ -5074,63 +5979,78 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, type: 3} + - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, + type: 3} propertyPath: m_RootOrder value: 89 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, type: 3} + - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, + type: 3} propertyPath: m_LocalScale.x value: 1.8178 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, type: 3} + - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, + type: 3} propertyPath: m_LocalScale.y value: 1.8178 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, type: 3} + - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, + type: 3} propertyPath: m_LocalScale.z value: 1.8178 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, type: 3} + - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, + type: 3} propertyPath: m_LocalPosition.x value: 5.76 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, type: 3} + - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, + type: 3} propertyPath: m_LocalPosition.y value: -31.44 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, type: 3} + - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, + type: 3} propertyPath: m_LocalPosition.z value: 1.71 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, type: 3} + - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, + type: 3} propertyPath: m_LocalRotation.w value: 0.9998185 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, type: 3} + - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, + type: 3} propertyPath: m_LocalRotation.x value: -0.0174968 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, type: 3} + - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, + type: 3} propertyPath: m_LocalRotation.y value: 0.0012541165 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, type: 3} + - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, + type: 3} propertyPath: m_LocalRotation.z value: 0.0074311066 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, type: 3} + - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: -2.006 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, type: 3} + - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0.129 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, type: 3} + - target: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0.849 objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: de75bb4ddac2e2f4097798b91c0d4c1e, type: 3} + - target: {fileID: 4371491365999748502, guid: de75bb4ddac2e2f4097798b91c0d4c1e, + type: 3} propertyPath: m_Name value: env_pebbles objectReference: {fileID: 0} @@ -5138,7 +6058,8 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: de75bb4ddac2e2f4097798b91c0d4c1e, type: 3} --- !u!4 &1163198926015539775 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, type: 3} + m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: de75bb4ddac2e2f4097798b91c0d4c1e, + type: 3} m_PrefabInstance: {fileID: 4468075867780076645} m_PrefabAsset: {fileID: 0} --- !u!1001 &4742983972079295386 @@ -5148,68 +6069,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 759726440798291530, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 759726440798291530, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_Name value: wall1_top_straight_1 (2) objectReference: {fileID: 0} - - target: {fileID: 759726440798291530, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 759726440798291530, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 2616948069966954651, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2616948069966954651, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_RootOrder value: 41 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalPosition.x value: 10.310001 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalPosition.y value: -24 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalPosition.z value: 5.7683344 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalRotation.w value: 0.7071068 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalRotation.y value: 0.7071068 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 90 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 2616948069966954651, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + m_RemovedComponents: [{fileID: 2616948069966954651, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} --- !u!4 &7251287495355780583 stripped Transform: - m_CorrespondingSourceObject: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + m_CorrespondingSourceObject: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} m_PrefabInstance: {fileID: 4742983972079295386} m_PrefabAsset: {fileID: 0} --- !u!1001 &4902484633336135846 @@ -5219,68 +6155,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_RootOrder value: 46 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalPosition.x value: 10.310001 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalPosition.z value: 5.7683344 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.y value: -1.9106855e-15 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.z value: -0.00000008742278 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_Name value: env_floor1 (9) objectReference: {fileID: 0} - - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + m_RemovedComponents: [{fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} --- !u!4 &434748549844287899 stripped Transform: - m_CorrespondingSourceObject: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + m_CorrespondingSourceObject: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} m_PrefabInstance: {fileID: 4902484633336135846} m_PrefabAsset: {fileID: 0} --- !u!1001 &4959420763243244167 @@ -5290,68 +6241,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_Name value: wall1_top_straight_2 (6) objectReference: {fileID: 0} - - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_RootOrder value: 70 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalPosition.x value: -13.689999 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalPosition.y value: -28 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalPosition.z value: 5.7683344 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.w value: 0.7071068 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.y value: 0.7071068 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 90 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + m_RemovedComponents: [{fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} --- !u!4 &7034815778319695098 stripped Transform: - m_CorrespondingSourceObject: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + m_CorrespondingSourceObject: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} m_PrefabInstance: {fileID: 4959420763243244167} m_PrefabAsset: {fileID: 0} --- !u!1001 &5001768642708077240 @@ -5361,51 +6327,63 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, type: 3} + - target: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, + type: 3} propertyPath: m_RootOrder value: 80 objectReference: {fileID: 0} - - target: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, type: 3} + - target: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, + type: 3} propertyPath: m_LocalPosition.x value: 5.16 objectReference: {fileID: 0} - - target: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, type: 3} + - target: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, + type: 3} propertyPath: m_LocalPosition.y value: -26.91 objectReference: {fileID: 0} - - target: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, type: 3} + - target: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, + type: 3} propertyPath: m_LocalPosition.z value: 4.18 objectReference: {fileID: 0} - - target: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, type: 3} + - target: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, type: 3} + - target: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, type: 3} + - target: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, type: 3} + - target: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, type: 3} + - target: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, type: 3} + - target: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, type: 3} + - target: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4624227725711097875, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, type: 3} + - target: {fileID: 4624227725711097875, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, + type: 3} propertyPath: m_Name value: FX_Torch_Fire objectReference: {fileID: 0} @@ -5413,7 +6391,8 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, type: 3} --- !u!4 &379802694103644842 stripped Transform: - m_CorrespondingSourceObject: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, type: 3} + m_CorrespondingSourceObject: {fileID: 4624227725711097874, guid: 4e2ccdc22ce4a0f4f84280f1d3025a46, + type: 3} m_PrefabInstance: {fileID: 5001768642708077240} m_PrefabAsset: {fileID: 0} --- !u!1001 &5020276633376923570 @@ -5423,68 +6402,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_RootOrder value: 36 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.x value: -1.6899986 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.z value: -6.231662 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.y value: 0.00000011920929 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.z value: -2.6054018e-15 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Name value: env_floor3 (10) objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + m_RemovedComponents: [{fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} --- !u!4 &7750363908168442344 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} m_PrefabInstance: {fileID: 5020276633376923570} m_PrefabAsset: {fileID: 0} --- !u!1001 &5318216868969877079 @@ -5494,68 +6488,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_RootOrder value: 67 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.x value: -21.689999 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.z value: -10.231662 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.y value: 0.00000011920929 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.z value: -2.6054018e-15 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Name value: env_floor3 (19) objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + m_RemovedComponents: [{fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} --- !u!4 &7488168991789412365 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} m_PrefabInstance: {fileID: 5318216868969877079} m_PrefabAsset: {fileID: 0} --- !u!1001 &5415146483954438460 @@ -5565,68 +6574,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_RootOrder value: 66 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalPosition.x value: -21.689999 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalPosition.z value: -6.231662 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.y value: 0.00000011920929 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.z value: -2.6054018e-15 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_Name value: env_floor2 (14) objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + m_RemovedComponents: [{fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} --- !u!4 &7278730828392968038 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} m_PrefabInstance: {fileID: 5415146483954438460} m_PrefabAsset: {fileID: 0} --- !u!1001 &5447884978589611960 @@ -5636,68 +6660,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_RootOrder value: 23 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalPosition.x value: -1.6899986 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalPosition.z value: 5.7683344 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.y value: 0.00000011920929 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.z value: -2.6054018e-15 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_Name value: env_floor2 (4) objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + m_RemovedComponents: [{fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} --- !u!4 &7331735469837142498 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} m_PrefabInstance: {fileID: 5447884978589611960} m_PrefabAsset: {fileID: 0} --- !u!1001 &5484408667942072440 @@ -5707,51 +6746,63 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, type: 3} + - target: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, + type: 3} propertyPath: m_RootOrder value: 79 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, type: 3} + - target: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, + type: 3} propertyPath: m_LocalPosition.x value: -8.17 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, type: 3} + - target: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, + type: 3} propertyPath: m_LocalPosition.y value: -29.64 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, type: 3} + - target: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, + type: 3} propertyPath: m_LocalPosition.z value: 4.57 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, type: 3} + - target: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, + type: 3} propertyPath: m_LocalRotation.w value: 0.9769094 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, type: 3} + - target: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, + type: 3} propertyPath: m_LocalRotation.x value: -0.15049288 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, type: 3} + - target: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, + type: 3} propertyPath: m_LocalRotation.y value: 0.11723026 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, type: 3} + - target: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, + type: 3} propertyPath: m_LocalRotation.z value: -0.09621317 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, type: 3} + - target: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: -15.752 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, type: 3} + - target: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 15.55 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, type: 3} + - target: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: -13.414 objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, type: 3} + - target: {fileID: 4371491365999748502, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, + type: 3} propertyPath: m_Name value: env_torch (1) objectReference: {fileID: 0} @@ -5759,7 +6810,8 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, type: 3} --- !u!4 &7077900180040830498 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, type: 3} + m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, + type: 3} m_PrefabInstance: {fileID: 5484408667942072440} m_PrefabAsset: {fileID: 0} --- !u!1001 &5625157141542215098 @@ -5769,68 +6821,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_Name value: wall1_top_straight_2 (13) objectReference: {fileID: 0} - - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_RootOrder value: 87 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalPosition.x value: -5.69 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalPosition.y value: -25.33 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalPosition.z value: 6.22 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.w value: 0.7071068 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.y value: 0.7071068 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 90 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + m_RemovedComponents: [{fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} --- !u!4 &7738129568973818823 stripped Transform: - m_CorrespondingSourceObject: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + m_CorrespondingSourceObject: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} m_PrefabInstance: {fileID: 5625157141542215098} m_PrefabAsset: {fileID: 0} --- !u!1001 &5769397069753022230 @@ -5840,68 +6907,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_RootOrder value: 53 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.x value: 10.310001 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.z value: -10.231662 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.y value: 0.00000011920929 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.z value: -2.6054018e-15 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Name value: env_floor3 (15) objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + m_RemovedComponents: [{fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} --- !u!4 &9093977143369369932 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} m_PrefabInstance: {fileID: 5769397069753022230} m_PrefabAsset: {fileID: 0} --- !u!1001 &5820178298195076923 @@ -5911,68 +6993,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_Name value: wall1_top_straight_2 (4) objectReference: {fileID: 0} - - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_RootOrder value: 68 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalPosition.x value: -21.689999 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalPosition.y value: -28 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalPosition.z value: 5.7683344 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.w value: 0.7071068 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.y value: 0.7071068 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 90 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + m_RemovedComponents: [{fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} --- !u!4 &8482147364920586566 stripped Transform: - m_CorrespondingSourceObject: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + m_CorrespondingSourceObject: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} m_PrefabInstance: {fileID: 5820178298195076923} m_PrefabAsset: {fileID: 0} --- !u!1001 &5865596620739770204 @@ -5982,68 +7079,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_RootOrder value: 35 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.x value: 2.3100014 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.z value: -10.231662 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.y value: 0.00000011920929 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.z value: -2.6054018e-15 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Name value: env_floor3 (9) objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + m_RemovedComponents: [{fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} --- !u!4 &9170315215096482054 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} m_PrefabInstance: {fileID: 5865596620739770204} m_PrefabAsset: {fileID: 0} --- !u!1001 &5892447098199391503 @@ -6053,63 +7165,78 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, type: 3} + - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, + type: 3} propertyPath: m_RootOrder value: 94 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, type: 3} + - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, + type: 3} propertyPath: m_LocalScale.x value: 1.3294 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, type: 3} + - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, + type: 3} propertyPath: m_LocalScale.y value: 1.3294 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, type: 3} + - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, + type: 3} propertyPath: m_LocalScale.z value: 1.3294 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, type: 3} + - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, + type: 3} propertyPath: m_LocalPosition.x value: -12.421633 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, type: 3} + - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, + type: 3} propertyPath: m_LocalPosition.y value: -31.6457 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, type: 3} + - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, + type: 3} propertyPath: m_LocalPosition.z value: 2.9661877 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, type: 3} + - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, + type: 3} propertyPath: m_LocalRotation.w value: 0.60293627 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, type: 3} + - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, + type: 3} propertyPath: m_LocalRotation.x value: 0.18204373 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, type: 3} + - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, + type: 3} propertyPath: m_LocalRotation.y value: 0.762953 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, type: 3} + - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, + type: 3} propertyPath: m_LocalRotation.z value: 0.14570752 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, type: 3} + - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: -0.161 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, type: 3} + - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 103.325 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, type: 3} + - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 26.968 objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: 607206da21792af45a04c3da88fb0edf, type: 3} + - target: {fileID: 4371491365999748502, guid: 607206da21792af45a04c3da88fb0edf, + type: 3} propertyPath: m_Name value: env_roots (1) objectReference: {fileID: 0} @@ -6117,7 +7244,8 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 607206da21792af45a04c3da88fb0edf, type: 3} --- !u!4 &9215320845868057429 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, type: 3} + m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, + type: 3} m_PrefabInstance: {fileID: 5892447098199391503} m_PrefabAsset: {fileID: 0} --- !u!1001 &6281385558179108935 @@ -6127,68 +7255,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_Name value: wall1_top_straight_2 (11) objectReference: {fileID: 0} - - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_RootOrder value: 75 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalPosition.x value: 14.310001 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalPosition.y value: -28 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalPosition.z value: 5.7683344 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.w value: 0.7071068 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.y value: 0.7071068 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 90 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + m_RemovedComponents: [{fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} --- !u!4 &8239405506365050426 stripped Transform: - m_CorrespondingSourceObject: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + m_CorrespondingSourceObject: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} m_PrefabInstance: {fileID: 6281385558179108935} m_PrefabAsset: {fileID: 0} --- !u!1001 &6345271643153943719 @@ -6198,63 +7341,78 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, type: 3} + - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, + type: 3} propertyPath: m_RootOrder value: 93 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, type: 3} + - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, + type: 3} propertyPath: m_LocalScale.x value: 1.3294 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, type: 3} + - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, + type: 3} propertyPath: m_LocalScale.y value: 1.3294 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, type: 3} + - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, + type: 3} propertyPath: m_LocalScale.z value: 1.3294 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, type: 3} + - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, + type: 3} propertyPath: m_LocalPosition.x value: 9.802827 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, type: 3} + - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, + type: 3} propertyPath: m_LocalPosition.y value: -31 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, type: 3} + - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, + type: 3} propertyPath: m_LocalPosition.z value: 4.46 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, type: 3} + - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, + type: 3} propertyPath: m_LocalRotation.w value: 0.97018707 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, type: 3} + - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, + type: 3} propertyPath: m_LocalRotation.x value: 0.12174067 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, type: 3} + - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, + type: 3} propertyPath: m_LocalRotation.y value: -0.18409613 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, type: 3} + - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, + type: 3} propertyPath: m_LocalRotation.z value: 0.100124456 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, type: 3} + - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 15.848 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, type: 3} + - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: -20.242 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, type: 3} + - target: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 8.938 objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: 607206da21792af45a04c3da88fb0edf, type: 3} + - target: {fileID: 4371491365999748502, guid: 607206da21792af45a04c3da88fb0edf, + type: 3} propertyPath: m_Name value: env_roots objectReference: {fileID: 0} @@ -6262,7 +7420,8 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 607206da21792af45a04c3da88fb0edf, type: 3} --- !u!4 &8515083028342485757 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, type: 3} + m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 607206da21792af45a04c3da88fb0edf, + type: 3} m_PrefabInstance: {fileID: 6345271643153943719} m_PrefabAsset: {fileID: 0} --- !u!1001 &6423192038042245689 @@ -6272,68 +7431,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_RootOrder value: 38 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalPosition.x value: -5.6899986 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalPosition.z value: -6.231662 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.y value: 0.00000011920929 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.z value: -2.6054018e-15 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_Name value: env_floor2 (8) objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + m_RemovedComponents: [{fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} --- !u!4 &8576695604743464035 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} m_PrefabInstance: {fileID: 6423192038042245689} m_PrefabAsset: {fileID: 0} --- !u!1001 &6920772956622518882 @@ -6343,68 +7517,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_RootOrder value: 32 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.x value: 6.3100014 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.z value: -6.231662 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.y value: 0.00000011920929 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.z value: -2.6054018e-15 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Name value: env_floor3 (8) objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + m_RemovedComponents: [{fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} --- !u!4 &5633666960414606392 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} m_PrefabInstance: {fileID: 6920772956622518882} m_PrefabAsset: {fileID: 0} --- !u!1001 &7314419291546542326 @@ -6414,68 +7603,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_RootOrder value: 50 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.x value: 14.310001 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.z value: -6.231662 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.y value: 0.00000011920929 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.z value: -2.6054018e-15 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Name value: env_floor3 (14) objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + m_RemovedComponents: [{fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} --- !u!4 &5451397896499240620 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} m_PrefabInstance: {fileID: 7314419291546542326} m_PrefabAsset: {fileID: 0} --- !u!1001 &7690804786489006349 @@ -6485,68 +7689,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_RootOrder value: 33 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalPosition.x value: 6.3100014 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalPosition.z value: -10.231662 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.y value: -1.9106855e-15 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.z value: -0.00000008742278 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_Name value: env_floor1 (7) objectReference: {fileID: 0} - - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + m_RemovedComponents: [{fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} --- !u!4 &2934847741690845232 stripped Transform: - m_CorrespondingSourceObject: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + m_CorrespondingSourceObject: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} m_PrefabInstance: {fileID: 7690804786489006349} m_PrefabAsset: {fileID: 0} --- !u!1001 &7978451669614550263 @@ -6556,68 +7775,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_Name value: wall1_top_straight_2 (10) objectReference: {fileID: 0} - - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_RootOrder value: 74 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalPosition.x value: 10.310001 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalPosition.y value: -28 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalPosition.z value: 5.7683344 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.w value: 0.7071068 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.y value: 0.7071068 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 90 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + m_RemovedComponents: [{fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} --- !u!4 &5461440007803685514 stripped Transform: - m_CorrespondingSourceObject: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + m_CorrespondingSourceObject: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} m_PrefabInstance: {fileID: 7978451669614550263} m_PrefabAsset: {fileID: 0} --- !u!1001 &8260277456758373897 @@ -6627,68 +7861,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_RootOrder value: 39 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.x value: -5.6899986 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.z value: -10.231662 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.y value: 0.00000011920929 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.z value: -2.6054018e-15 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Name value: env_floor3 (11) objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + m_RemovedComponents: [{fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} --- !u!4 &6667348915953369171 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} m_PrefabInstance: {fileID: 8260277456758373897} m_PrefabAsset: {fileID: 0} --- !u!1001 &8391560410282153065 @@ -6698,68 +7947,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_Name value: wall1_top_straight_2 (12) objectReference: {fileID: 0} - - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 759726440798291530, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_RootOrder value: 76 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalPosition.x value: -1.6899986 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalPosition.y value: -24 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalPosition.z value: 5.7683344 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.w value: 0.7071068 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.y value: 0.7071068 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 90 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + - target: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + m_RemovedComponents: [{fileID: 2616948069966954651, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} --- !u!4 &5838643131072430612 stripped Transform: - m_CorrespondingSourceObject: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, type: 3} + m_CorrespondingSourceObject: {fileID: 2698721903467665021, guid: 9ea4099dde2e45f4f80b1f58171a6b9b, + type: 3} m_PrefabInstance: {fileID: 8391560410282153065} m_PrefabAsset: {fileID: 0} --- !u!1001 &8515826331867687763 @@ -6769,68 +8033,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 759726440798291530, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 759726440798291530, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_Name value: wall1_top_straight_1 (4) objectReference: {fileID: 0} - - target: {fileID: 759726440798291530, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 759726440798291530, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 2616948069966954651, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2616948069966954651, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_RootOrder value: 77 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalPosition.x value: -5.6899986 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalPosition.y value: -24 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalPosition.z value: 5.7683344 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalRotation.w value: 0.7071068 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalRotation.y value: 0.7071068 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 90 objectReference: {fileID: 0} - - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + - target: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 2616948069966954651, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + m_RemovedComponents: [{fileID: 2616948069966954651, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} --- !u!4 &6007102251735563566 stripped Transform: - m_CorrespondingSourceObject: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, type: 3} + m_CorrespondingSourceObject: {fileID: 2698721903467665021, guid: 6f45b98cfe724004e84597dc148d6a3f, + type: 3} m_PrefabInstance: {fileID: 8515826331867687763} m_PrefabAsset: {fileID: 0} --- !u!1001 &8534983645223267064 @@ -6840,68 +8119,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_RootOrder value: 28 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.x value: -9.689999 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.z value: -6.231662 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.y value: 0.00000011920929 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.z value: -2.6054018e-15 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Name value: env_floor3 (6) objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + m_RemovedComponents: [{fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} --- !u!4 &6365576875482174626 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} m_PrefabInstance: {fileID: 8534983645223267064} m_PrefabAsset: {fileID: 0} --- !u!1001 &8560184062901222396 @@ -6911,68 +8205,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_RootOrder value: 42 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_LocalPosition.x value: 10.310001 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_LocalPosition.z value: 5.7683344 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_LocalRotation.w value: 0.7071077 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000015454328 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_LocalRotation.y value: 0.7071059 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_LocalRotation.z value: -0.00000001545429 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 90 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 7708204222138769870, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 7708204222138769870, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_Name value: wall1_base_straight_2 (2) objectReference: {fileID: 0} - - target: {fileID: 7708204222138769870, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 7708204222138769870, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 8619486518123324128, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + - target: {fileID: 8619486518123324128, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 8619486518123324128, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + m_RemovedComponents: [{fileID: 8619486518123324128, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} --- !u!4 &7509401185041245797 stripped Transform: - m_CorrespondingSourceObject: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, type: 3} + m_CorrespondingSourceObject: {fileID: 2232979037069254041, guid: 16cfec2fee031384ab80c080e2927dac, + type: 3} m_PrefabInstance: {fileID: 8560184062901222396} m_PrefabAsset: {fileID: 0} --- !u!1001 &8870319111790445646 @@ -6982,68 +8291,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_RootOrder value: 43 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_LocalPosition.x value: 18.310001 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_LocalPosition.z value: 5.7683344 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_LocalRotation.w value: 0.7071079 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000015454336 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_LocalRotation.y value: -0.70710576 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_LocalRotation.z value: 0.000000015454287 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: -90 objectReference: {fileID: 0} - - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 7708204222138769870, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 7708204222138769870, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_Name value: wall1_base_straight_1 (2) objectReference: {fileID: 0} - - target: {fileID: 7708204222138769870, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 7708204222138769870, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 8619486518123324128, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + - target: {fileID: 8619486518123324128, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 8619486518123324128, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + m_RemovedComponents: [{fileID: 8619486518123324128, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} --- !u!4 &7342158933333170647 stripped Transform: - m_CorrespondingSourceObject: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, type: 3} + m_CorrespondingSourceObject: {fileID: 2232979037069254041, guid: 18746b4a20a009b4cae4eed4fc4c6ce7, + type: 3} m_PrefabInstance: {fileID: 8870319111790445646} m_PrefabAsset: {fileID: 0} --- !u!1001 &8875025587487939423 @@ -7053,68 +8377,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_RootOrder value: 61 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalPosition.x value: -17.689999 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalPosition.z value: -2.231662 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.y value: -1.9106855e-15 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalRotation.z value: -0.00000008742278 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_Name value: env_floor1 (13) objectReference: {fileID: 0} - - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + - target: {fileID: 6858229082375244730, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + m_RemovedComponents: [{fileID: 3946375560253007557, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} --- !u!4 &4119662209576114786 stripped Transform: - m_CorrespondingSourceObject: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, type: 3} + m_CorrespondingSourceObject: {fileID: 4756247935159238973, guid: 4e8bd4962790c8142ac06150a37418de, + type: 3} m_PrefabInstance: {fileID: 8875025587487939423} m_PrefabAsset: {fileID: 0} --- !u!1001 &8944221701571107975 @@ -7124,68 +8463,83 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_RootOrder value: 63 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.x value: -21.689999 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalPosition.z value: -2.231662 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.y value: 0.00000011920929 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalRotation.z value: -2.6054018e-15 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Name value: env_floor3 (17) objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 4371491365999748502, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + - target: {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + m_RemovedComponents: [{fileID: 6399737381871187658, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} --- !u!4 &5910141258658947805 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, type: 3} + m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 2aa4510a758056646b97aa382d0d4583, + type: 3} m_PrefabInstance: {fileID: 8944221701571107975} m_PrefabAsset: {fileID: 0} --- !u!1001 &9094481683532198118 @@ -7195,51 +8549,63 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, type: 3} + - target: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, + type: 3} propertyPath: m_RootOrder value: 78 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, type: 3} + - target: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, + type: 3} propertyPath: m_LocalPosition.x value: 4.3900003 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, type: 3} + - target: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, + type: 3} propertyPath: m_LocalPosition.y value: -29.64 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, type: 3} + - target: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, + type: 3} propertyPath: m_LocalPosition.z value: 4.57 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, type: 3} + - target: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, + type: 3} propertyPath: m_LocalRotation.w value: 0.9769094 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, type: 3} + - target: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, + type: 3} propertyPath: m_LocalRotation.x value: -0.15049288 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, type: 3} + - target: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, + type: 3} propertyPath: m_LocalRotation.y value: 0.11723026 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, type: 3} + - target: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, + type: 3} propertyPath: m_LocalRotation.z value: -0.09621317 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, type: 3} + - target: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: -15.752 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, type: 3} + - target: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 15.55 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, type: 3} + - target: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: -13.414 objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, type: 3} + - target: {fileID: 4371491365999748502, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, + type: 3} propertyPath: m_Name value: env_torch objectReference: {fileID: 0} @@ -7247,7 +8613,8 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, type: 3} --- !u!4 &5770059994887671484 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, type: 3} + m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: 6e5deea61a7dedb48b2e17997b9ce8ae, + type: 3} m_PrefabInstance: {fileID: 9094481683532198118} m_PrefabAsset: {fileID: 0} --- !u!1001 &9221857213957060419 @@ -7257,67 +8624,82 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4920663751426647139} m_Modifications: - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_RootOrder value: 45 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalPosition.x value: 14.310001 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalPosition.y value: -32 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalPosition.z value: 5.7683344 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.x value: 0.000000021855694 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.y value: 0.00000011920929 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalRotation.z value: -2.6054018e-15 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_Name value: env_floor2 (9) objectReference: {fileID: 0} - - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 4371491365999748502, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_Layer value: 0 objectReference: {fileID: 0} - - target: {fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + - target: {fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} - m_RemovedComponents: - - {fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + m_RemovedComponents: [{fileID: 6399737381871187658, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3}] m_SourcePrefab: {fileID: 100100000, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} --- !u!4 &5899669677500254489 stripped Transform: - m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, type: 3} + m_CorrespondingSourceObject: {fileID: 3325143161705299546, guid: e0c0ac1f8d6b7aa46a1b2c7dc8e67866, + type: 3} m_PrefabInstance: {fileID: 9221857213957060419} m_PrefabAsset: {fileID: 0} diff --git a/Assets/BossRoom/Prefabs/UI/PopupPanel.prefab b/Assets/BossRoom/Prefabs/UI/PopupPanel.prefab index 88c936071..c16a5e7aa 100644 --- a/Assets/BossRoom/Prefabs/UI/PopupPanel.prefab +++ b/Assets/BossRoom/Prefabs/UI/PopupPanel.prefab @@ -418,8 +418,8 @@ RectTransform: 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: 5.4901123} - m_SizeDelta: {x: -131.89911, y: -10.980476} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -20, y: -20.000002} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &458666890132928493 CanvasRenderer: @@ -501,7 +501,7 @@ RectTransform: 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: -209.3999, y: -21.8} + m_AnchoredPosition: {x: -331, y: -21.8} m_SizeDelta: {x: 260, y: 95.1} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &2236248490323379053 @@ -533,7 +533,7 @@ MonoBehaviour: m_PersistentCalls: m_Calls: [] m_Sprite: {fileID: 21300000, guid: 41948b4cc6087644b983dce55b466d50, type: 3} - m_Type: 0 + m_Type: 1 m_PreserveAspect: 0 m_FillCenter: 1 m_FillMethod: 4 @@ -599,6 +599,149 @@ MonoBehaviour: m_PersistentCalls: m_Calls: [] m_AlphaFadeSpeed: 0.15 +--- !u!1 &1801715322484230032 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2706160503418871213} + - component: {fileID: 5274622682025789011} + - component: {fileID: 4806063275483277531} + - component: {fileID: 1086460939974644440} + m_Layer: 5 + m_Name: Port + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2706160503418871213 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1801715322484230032} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 3819431325707803815} + - {fileID: 3995368619530485341} + m_Father: {fileID: 6702871171647363811} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -136.8, y: -255.52797} + m_SizeDelta: {x: 200, y: 95.1} + m_Pivot: {x: 0.5, y: 1} +--- !u!222 &5274622682025789011 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1801715322484230032} + m_CullTransparentMesh: 1 +--- !u!114 &4806063275483277531 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1801715322484230032} + 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: 298518cc35452404bbec1592572f23eb, type: 3} + 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 &1086460939974644440 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1801715322484230032} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d199490a83bb2b844b9695cbf13b01ef, 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: 4806063275483277531} + m_TextComponent: {fileID: 5030219918351354159} + m_Placeholder: {fileID: 1243391925784967669} + m_ContentType: 0 + m_InputType: 0 + m_AsteriskChar: 42 + m_KeyboardType: 0 + m_LineType: 0 + m_HideMobileInput: 0 + m_CharacterValidation: 0 + m_CharacterLimit: 0 + m_OnEndEdit: + m_PersistentCalls: + m_Calls: [] + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_CaretColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_CustomCaretColor: 0 + m_SelectionColor: {r: 0.65882355, g: 0.80784315, b: 1, a: 0.7529412} + m_Text: + m_CaretBlinkRate: 0.85 + m_CaretWidth: 1 + m_ReadOnly: 0 + m_ShouldActivateOnSelect: 1 --- !u!1 &1822183939918148420 GameObject: m_ObjectHideFlags: 0 @@ -667,7 +810,8 @@ MonoBehaviour: m_text: Main Text m_isRightToLeft: 0 m_fontAsset: {fileID: 11400000, guid: 9641ce046d2227445b9684161a165f68, type: 2} - m_sharedMaterial: {fileID: -4106257185398102161, guid: 9641ce046d2227445b9684161a165f68, type: 2} + m_sharedMaterial: {fileID: -4106257185398102161, guid: 9641ce046d2227445b9684161a165f68, + type: 2} m_fontSharedMaterials: [] m_fontMaterial: {fileID: 0} m_fontMaterials: [] @@ -801,7 +945,8 @@ MonoBehaviour: m_text: Title Text m_isRightToLeft: 0 m_fontAsset: {fileID: 11400000, guid: 1a8c97d4cbe5134499b26527f8609c7e, type: 2} - m_sharedMaterial: {fileID: -466885322316925189, guid: 1a8c97d4cbe5134499b26527f8609c7e, type: 2} + m_sharedMaterial: {fileID: -466885322316925189, guid: 1a8c97d4cbe5134499b26527f8609c7e, + type: 2} m_fontSharedMaterials: [] m_fontMaterial: {fileID: 0} m_fontMaterials: [] @@ -942,6 +1087,85 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!1 &2588038460876068370 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3819431325707803815} + - component: {fileID: 267750692968176180} + - component: {fileID: 1243391925784967669} + m_Layer: 5 + m_Name: InputBox + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3819431325707803815 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2588038460876068370} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2706160503418871213} + 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: -20, y: -20.000002} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &267750692968176180 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2588038460876068370} + m_CullTransparentMesh: 1 +--- !u!114 &1243391925784967669 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2588038460876068370} + 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.9215687, g: 0.8196079, b: 0.24705884, a: 0.5} + 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: 50 + m_FontStyle: 3 + m_BestFit: 1 + m_MinSize: 0 + m_MaxSize: 50 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Port# --- !u!1 &3724444898306361848 GameObject: m_ObjectHideFlags: 0 @@ -1082,7 +1306,8 @@ MonoBehaviour: m_text: Sub Text m_isRightToLeft: 0 m_fontAsset: {fileID: 11400000, guid: 9641ce046d2227445b9684161a165f68, type: 2} - m_sharedMaterial: {fileID: -4106257185398102161, guid: 9641ce046d2227445b9684161a165f68, type: 2} + m_sharedMaterial: {fileID: -4106257185398102161, guid: 9641ce046d2227445b9684161a165f68, + type: 2} m_fontSharedMaterials: [] m_fontMaterial: {fileID: 0} m_fontMaterials: [] @@ -1179,7 +1404,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 6702871171647363811} - m_RootOrder: 8 + m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 1} m_AnchorMax: {x: 1, y: 1} @@ -1560,6 +1785,7 @@ RectTransform: - {fileID: 4397277975712710587} - {fileID: 6659754052889446194} - {fileID: 2254836287538418807} + - {fileID: 2706160503418871213} - {fileID: 3521129445966426109} - {fileID: 4392523060882783041} - {fileID: 4279823075853654326} @@ -1625,13 +1851,93 @@ MonoBehaviour: m_MainText: {fileID: 5444935306198590166} m_SubText: {fileID: 4538059425027875203} m_ReconnectingImage: {fileID: 8861405945138489867} - m_InputFieldParent: {fileID: 6953157192866993146} - m_InputBox: {fileID: 1315234412834876569} + m_InputField: {fileID: 3390070430270844082} + m_InputFieldPlaceholderText: {fileID: 7725811636295053124} + m_PortInputField: {fileID: 1086460939974644440} m_ConfirmationButton: {fileID: 6793055150678174106} m_ConfirmationText: {fileID: 6249884913440892935} m_CancelButton: {fileID: 562483524736970639} - m_NameDisplayGO: {fileID: 6487815535561920378} + m_NameDisplay: {fileID: 5969994396107504951} m_OnlineModeDropdown: {fileID: 203319813466524823} +--- !u!1 &6909543335581182716 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3995368619530485341} + - component: {fileID: 1437297789190830641} + - component: {fileID: 5030219918351354159} + m_Layer: 5 + m_Name: InputText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3995368619530485341 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6909543335581182716} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2706160503418871213} + m_RootOrder: 1 + 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: -20, y: -20.000002} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1437297789190830641 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6909543335581182716} + m_CullTransparentMesh: 1 +--- !u!114 &5030219918351354159 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6909543335581182716} + 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.9215687, g: 0.8196079, b: 0.24705884, 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: 50 + m_FontStyle: 1 + m_BestFit: 1 + m_MinSize: 0 + m_MaxSize: 50 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 0 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: --- !u!1 &6953157192866993146 GameObject: m_ObjectHideFlags: 0 @@ -1667,10 +1973,10 @@ RectTransform: m_Father: {fileID: 6702871171647363811} m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.29333335, y: 0.37500003} - m_AnchorMax: {x: 0.7133335, y: 0.55600005} - m_AnchoredPosition: {x: 149.1, y: -6} - m_SizeDelta: {x: 9, y: -3.75} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 31.2, y: 25.47203} + m_SizeDelta: {x: 440.6335, y: 95.1} m_Pivot: {x: 0.5, y: 1} --- !u!222 &4401179467636351219 CanvasRenderer: @@ -1701,8 +2007,8 @@ MonoBehaviour: m_PersistentCalls: m_Calls: [] m_Sprite: {fileID: 21300000, guid: 298518cc35452404bbec1592572f23eb, type: 3} - m_Type: 0 - m_PreserveAspect: 1 + m_Type: 1 + m_PreserveAspect: 0 m_FillCenter: 1 m_FillMethod: 4 m_FillAmount: 1 @@ -1809,8 +2115,8 @@ RectTransform: 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: 5.4901123} - m_SizeDelta: {x: -131.89911, y: -10.980476} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -20, y: -20.000002} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &3499041363254022569 CanvasRenderer: @@ -1965,7 +2271,7 @@ RectTransform: m_Children: - {fileID: 9147241733097271869} m_Father: {fileID: 6702871171647363811} - m_RootOrder: 7 + m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.404, y: 0} m_AnchorMax: {x: 0.6007507, y: 0.10055374} @@ -2001,7 +2307,7 @@ MonoBehaviour: m_PersistentCalls: m_Calls: [] m_Sprite: {fileID: 21300000, guid: 41948b4cc6087644b983dce55b466d50, type: 3} - m_Type: 0 + m_Type: 1 m_PreserveAspect: 0 m_FillCenter: 1 m_FillMethod: 4 @@ -2310,7 +2616,8 @@ MonoBehaviour: m_text: OK m_isRightToLeft: 0 m_fontAsset: {fileID: 11400000, guid: 1a8c97d4cbe5134499b26527f8609c7e, type: 2} - m_sharedMaterial: {fileID: -466885322316925189, guid: 1a8c97d4cbe5134499b26527f8609c7e, type: 2} + m_sharedMaterial: {fileID: -466885322316925189, guid: 1a8c97d4cbe5134499b26527f8609c7e, + type: 2} m_fontSharedMaterials: [] m_fontMaterial: {fileID: 0} m_fontMaterials: [] @@ -2383,192 +2690,232 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 6702871171647363811} m_Modifications: - - target: {fileID: 442359802337233140, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} + - target: {fileID: 442359802337233140, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} propertyPath: m_AnchorMax.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 442359802337233140, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} + - target: {fileID: 442359802337233140, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} propertyPath: m_AnchorMin.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 442359802337233140, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} + - target: {fileID: 442359802337233140, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} propertyPath: m_AnchoredPosition.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 442359802337233140, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} + - target: {fileID: 442359802337233140, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} propertyPath: m_AnchoredPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 1438005041722192374, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} + - target: {fileID: 1438005041722192374, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} propertyPath: m_Pivot.x value: 0.5 objectReference: {fileID: 0} - - target: {fileID: 1438005041722192374, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} + - target: {fileID: 1438005041722192374, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} propertyPath: m_Pivot.y value: 0.5 objectReference: {fileID: 0} - - target: {fileID: 1438005041722192374, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} + - target: {fileID: 1438005041722192374, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} propertyPath: m_RootOrder - value: 6 + value: 7 objectReference: {fileID: 0} - - target: {fileID: 1438005041722192374, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} + - target: {fileID: 1438005041722192374, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} propertyPath: m_AnchorMax.x value: 0.92985773 objectReference: {fileID: 0} - - target: {fileID: 1438005041722192374, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} + - target: {fileID: 1438005041722192374, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} propertyPath: m_AnchorMax.y value: 0.3086479 objectReference: {fileID: 0} - - target: {fileID: 1438005041722192374, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} + - target: {fileID: 1438005041722192374, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} propertyPath: m_AnchorMin.x value: 0.06835955 objectReference: {fileID: 0} - - target: {fileID: 1438005041722192374, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} + - target: {fileID: 1438005041722192374, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} propertyPath: m_AnchorMin.y value: 0.13082394 objectReference: {fileID: 0} - - target: {fileID: 1438005041722192374, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} + - target: {fileID: 1438005041722192374, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} propertyPath: m_SizeDelta.x value: -98.7999 objectReference: {fileID: 0} - - target: {fileID: 1438005041722192374, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} + - target: {fileID: 1438005041722192374, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} propertyPath: m_SizeDelta.y value: -50 objectReference: {fileID: 0} - - target: {fileID: 1438005041722192374, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} + - target: {fileID: 1438005041722192374, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 1438005041722192374, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} + - target: {fileID: 1438005041722192374, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 1438005041722192374, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} + - target: {fileID: 1438005041722192374, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 1438005041722192374, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} + - target: {fileID: 1438005041722192374, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 1438005041722192374, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} + - target: {fileID: 1438005041722192374, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 1438005041722192374, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} + - target: {fileID: 1438005041722192374, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 1438005041722192374, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} + - target: {fileID: 1438005041722192374, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 1438005041722192374, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} + - target: {fileID: 1438005041722192374, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} propertyPath: m_AnchoredPosition.x value: 22.850464 objectReference: {fileID: 0} - - target: {fileID: 1438005041722192374, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} + - target: {fileID: 1438005041722192374, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} propertyPath: m_AnchoredPosition.y - value: 75 + value: 68.2 objectReference: {fileID: 0} - - target: {fileID: 1438005041722192374, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} + - target: {fileID: 1438005041722192374, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 1438005041722192374, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} + - target: {fileID: 1438005041722192374, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 1438005041722192374, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} + - target: {fileID: 1438005041722192374, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 1531301342784867179, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} + - target: {fileID: 1531301342784867179, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} propertyPath: m_AnchorMax.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 1531301342784867179, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} + - target: {fileID: 1531301342784867179, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} propertyPath: m_AnchorMin.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 1531301342784867179, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} + - target: {fileID: 1531301342784867179, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} propertyPath: m_AnchoredPosition.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 1531301342784867179, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} + - target: {fileID: 1531301342784867179, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} propertyPath: m_AnchoredPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 2174966933596881657, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} + - target: {fileID: 2174966933596881657, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} propertyPath: m_FontData.m_MaxSize value: 40 objectReference: {fileID: 0} - - target: {fileID: 7636978241429846730, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} + - target: {fileID: 7636978241429846730, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} propertyPath: m_AnchorMax.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 7636978241429846730, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} + - target: {fileID: 7636978241429846730, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} propertyPath: m_AnchorMin.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 7636978241429846730, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} + - target: {fileID: 7636978241429846730, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} propertyPath: m_AnchoredPosition.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 7636978241429846730, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} + - target: {fileID: 7636978241429846730, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} propertyPath: m_AnchoredPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 7912206577138345114, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} + - target: {fileID: 7912206577138345114, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} propertyPath: m_AnchorMax.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 7912206577138345114, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} + - target: {fileID: 7912206577138345114, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} propertyPath: m_AnchorMin.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 7912206577138345114, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} + - target: {fileID: 7912206577138345114, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} propertyPath: m_AnchoredPosition.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 7912206577138345114, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} + - target: {fileID: 7912206577138345114, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} propertyPath: m_AnchoredPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 8210325049482289980, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} + - target: {fileID: 8210325049482289980, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} propertyPath: m_CurrentName value: objectReference: {fileID: 8470479361425810124} - - target: {fileID: 8403980163329380773, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} + - target: {fileID: 8403980163329380773, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} propertyPath: m_AnchorMax.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 8403980163329380773, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} + - target: {fileID: 8403980163329380773, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} propertyPath: m_AnchorMin.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 8403980163329380773, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} + - target: {fileID: 8403980163329380773, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} propertyPath: m_AnchoredPosition.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 8403980163329380773, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} + - target: {fileID: 8403980163329380773, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} propertyPath: m_AnchoredPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 8728003287376236913, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} + - target: {fileID: 8728003287376236913, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} propertyPath: m_Name value: NameDisplay objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} ---- !u!1 &6487815535561920378 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 8728003287376236913, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} - m_PrefabInstance: {fileID: 2533628164130561547} - m_PrefabAsset: {fileID: 0} --- !u!114 &8470479361425810124 stripped MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 6243239769371671751, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} + m_CorrespondingSourceObject: {fileID: 6243239769371671751, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} m_PrefabInstance: {fileID: 2533628164130561547} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 0} @@ -2579,6 +2926,19 @@ MonoBehaviour: m_EditorClassIdentifier: --- !u!224 &3521129445966426109 stripped RectTransform: - m_CorrespondingSourceObject: {fileID: 1438005041722192374, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, type: 3} + m_CorrespondingSourceObject: {fileID: 1438005041722192374, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} m_PrefabInstance: {fileID: 2533628164130561547} m_PrefabAsset: {fileID: 0} +--- !u!114 &5969994396107504951 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8210325049482289980, guid: c3f6a30a7d785ef41a47b0cfd0c8b26d, + type: 3} + m_PrefabInstance: {fileID: 2533628164130561547} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 55aeec10c1bda27448c176abb6615c0f, type: 3} + m_Name: + m_EditorClassIdentifier: diff --git a/Assets/BossRoom/Prefabs/UI/SettingsPanelCanvas.prefab b/Assets/BossRoom/Prefabs/UI/SettingsPanelCanvas.prefab new file mode 100644 index 000000000..9dcaa13bb --- /dev/null +++ b/Assets/BossRoom/Prefabs/UI/SettingsPanelCanvas.prefab @@ -0,0 +1,1490 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &294265329686786383 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 294265329686786380} + - component: {fileID: 294265329686786379} + - component: {fileID: 294265329686786381} + - component: {fileID: 1727683541821915747} + m_Layer: 5 + m_Name: Settings Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &294265329686786380 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 294265329686786383} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -3} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 294265330276786217} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -50, y: -50} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 1, y: 1} +--- !u!222 &294265329686786379 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 294265329686786383} + m_CullTransparentMesh: 1 +--- !u!114 &294265329686786381 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 294265329686786383} + 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: 1727683541821915747} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 294265330276786214} + m_TargetAssemblyTypeName: BossRoom.Visual.UISettingsCanvas, BossRoom.Client + m_MethodName: OnClickSettingsButton + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 +--- !u!114 &1727683541821915747 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 294265329686786383} + 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: 66a470aa734e32040b424353a0f0de39, type: 3} + m_Type: 0 + m_PreserveAspect: 1 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &294265330276786221 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 294265330276786217} + - component: {fileID: 294265330276786216} + - component: {fileID: 294265330276786219} + - component: {fileID: 294265330276786218} + - component: {fileID: 294265330276786214} + m_Layer: 5 + m_Name: SettingsPanelCanvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &294265330276786217 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 294265330276786221} + 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_Children: + - {fileID: 294265329686786380} + - {fileID: 6417648243838381818} + m_Father: {fileID: 0} + m_RootOrder: 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!223 &294265330276786216 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 294265330276786221} + 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_AdditionalShaderChannelsFlag: -1 + m_SortingLayerID: 0 + m_SortingOrder: 1 + m_TargetDisplay: 0 +--- !u!114 &294265330276786219 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 294265330276786221} + 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: 1920, y: 1080} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0.506 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!114 &294265330276786218 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 294265330276786221} + 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 &294265330276786214 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 294265330276786221} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 190bc18b6f6f06340acb887d88806593, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SettingsPanelRoot: {fileID: 6417648243838381817} +--- !u!1 &1506346423198533188 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2227472444765891633} + - component: {fileID: 2414734412583563701} + - component: {fileID: 6547266572445463372} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2227472444765891633 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1506346423198533188} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 7297531496490972690} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 0, y: 30} + m_SizeDelta: {x: 300, y: 30} + m_Pivot: {x: 0, y: 1} +--- !u!222 &2414734412583563701 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1506346423198533188} + m_CullTransparentMesh: 1 +--- !u!114 &6547266572445463372 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1506346423198533188} + 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.8705883, g: 0.77647066, b: 0.23529413, a: 1} + m_RaycastTarget: 0 + 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: 24 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Music Volume +--- !u!1 &1591034540787035143 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1591034540787035142} + m_Layer: 5 + m_Name: Fill Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1591034540787035142 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1591034540787035143} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1591034541050051854} + m_Father: {fileID: 6217156373103072016} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.25} + m_AnchorMax: {x: 1, y: 0.75} + m_AnchoredPosition: {x: -5, y: 0} + m_SizeDelta: {x: -20, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1591034540966426622 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1591034540966426621} + - component: {fileID: 1591034540966426595} + - component: {fileID: 1591034540966426620} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1591034540966426621 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1591034540966426622} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 6217156373103072016} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 0, y: 30} + m_SizeDelta: {x: 300, y: 30} + m_Pivot: {x: 0, y: 1} +--- !u!222 &1591034540966426595 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1591034540966426622} + m_CullTransparentMesh: 1 +--- !u!114 &1591034540966426620 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1591034540966426622} + 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.8705883, g: 0.77647066, b: 0.23529413, a: 1} + m_RaycastTarget: 0 + 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: 24 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Overall Volume +--- !u!1 &1591034541050051855 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1591034541050051854} + - component: {fileID: 1591034541050051852} + - component: {fileID: 1591034541050051853} + m_Layer: 5 + m_Name: Fill + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1591034541050051854 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1591034541050051855} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1591034540787035142} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 10, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1591034541050051852 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1591034541050051855} + m_CullTransparentMesh: 1 +--- !u!114 &1591034541050051853 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1591034541050051855} + 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.8705883, g: 0.7725491, b: 0.23529413, 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!1 &1591034541194713451 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1591034541194713450} + m_Layer: 5 + m_Name: Handle Slide Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1591034541194713450 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1591034541194713451} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1591034541991487326} + m_Father: {fileID: 6217156373103072016} + m_RootOrder: 2 + 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: -20, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1591034541830594921 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1591034541830594920} + - component: {fileID: 1591034541830594926} + - component: {fileID: 1591034541830594927} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1591034541830594920 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1591034541830594921} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 6217156373103072016} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.25} + m_AnchorMax: {x: 1, y: 0.75} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1591034541830594926 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1591034541830594921} + m_CullTransparentMesh: 1 +--- !u!114 &1591034541830594927 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1591034541830594921} + 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.5411765, g: 0.4784314, b: 0.13725491, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: -30, y: -20, z: -30, w: -20} + 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!1 &1591034541991487327 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1591034541991487326} + - component: {fileID: 1591034541991487324} + - component: {fileID: 1591034541991487325} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1591034541991487326 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1591034541991487327} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1591034541194713450} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1591034541991487324 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1591034541991487327} + m_CullTransparentMesh: 1 +--- !u!114 &1591034541991487325 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1591034541991487327} + 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.8941177, g: 0.7960785, b: 0.24313727, 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: 10913, guid: 0000000000000000f000000000000000, type: 0} + 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!1 &2761684784459841459 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6107605981620209842} + m_Layer: 5 + m_Name: Fill Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6107605981620209842 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2761684784459841459} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 6005602306300149307} + m_Father: {fileID: 7297531496490972690} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.25} + m_AnchorMax: {x: 1, y: 0.75} + m_AnchoredPosition: {x: -5, y: 0} + m_SizeDelta: {x: -20, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &3469506610704103633 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4002968350005051780} + - component: {fileID: 8414562357340933144} + - component: {fileID: 7299152758545453838} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4002968350005051780 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3469506610704103633} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 7297531496490972690} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.25} + m_AnchorMax: {x: 1, y: 0.75} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &8414562357340933144 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3469506610704103633} + m_CullTransparentMesh: 1 +--- !u!114 &7299152758545453838 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3469506610704103633} + 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.5411765, g: 0.4784314, b: 0.13725491, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: -30, y: -20, z: -30, w: -20} + 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!1 &4064014833027966017 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2274705493899115683} + - component: {fileID: 530431915584875006} + - component: {fileID: 902388754323165985} + m_Layer: 5 + m_Name: SettingsLabel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2274705493899115683 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4064014833027966017} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 6417648243838381818} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -15} + m_SizeDelta: {x: 0, y: 100} + m_Pivot: {x: 0.5, y: 1} +--- !u!222 &530431915584875006 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4064014833027966017} + m_CullTransparentMesh: 1 +--- !u!114 &902388754323165985 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4064014833027966017} + 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.9215687, g: 0.8196079, b: 0.24705884, a: 1} + m_RaycastTarget: 0 + 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: 50 + m_FontStyle: 3 + m_BestFit: 1 + m_MinSize: 0 + m_MaxSize: 50 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Settings + +' +--- !u!1 &5089378847094864942 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4571589763288329519} + - component: {fileID: 2042654756682179128} + - component: {fileID: 4078503332578518073} + - component: {fileID: 277858732253043606} + m_Layer: 5 + m_Name: Close Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4571589763288329519 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5089378847094864942} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -3} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 6417648243838381818} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 10, y: 10} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 1, y: 1} +--- !u!222 &2042654756682179128 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5089378847094864942} + m_CullTransparentMesh: 1 +--- !u!114 &4078503332578518073 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5089378847094864942} + 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: 60ca69669387e034393c7f486bf3ae19, 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!114 &277858732253043606 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5089378847094864942} + 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: 4078503332578518073} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 6417648243838381817} + m_TargetAssemblyTypeName: UnityEngine.GameObject, UnityEngine + m_MethodName: SetActive + m_Mode: 6 + 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 &5562462901573508095 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7817392311645474671} + - component: {fileID: 6825636071716942812} + - component: {fileID: 7428645028772329009} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7817392311645474671 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5562462901573508095} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8847124775178513431} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6825636071716942812 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5562462901573508095} + m_CullTransparentMesh: 1 +--- !u!114 &7428645028772329009 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5562462901573508095} + 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.8941177, g: 0.7960785, b: 0.24313727, 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: 10913, guid: 0000000000000000f000000000000000, type: 0} + 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!1 &6154749339973089473 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7297531496490972690} + - component: {fileID: 7818796052053811380} + m_Layer: 5 + m_Name: MusicVolume + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7297531496490972690 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6154749339973089473} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4002968350005051780} + - {fileID: 6107605981620209842} + - {fileID: 8847124775178513431} + - {fileID: 2227472444765891633} + m_Father: {fileID: 6417648243838381818} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: 0, y: -99.1} + m_SizeDelta: {x: -100, y: 40} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &7818796052053811380 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6154749339973089473} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 67db9e8f0e2ae9c40bc1e2b64352a6b4, 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: 7428645028772329009} + m_FillRect: {fileID: 6005602306300149307} + m_HandleRect: {fileID: 7817392311645474671} + m_Direction: 0 + m_MinValue: 0.0001 + m_MaxValue: 1 + m_WholeNumbers: 0 + m_Value: 0.0001 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &6217156373103072017 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6217156373103072016} + - component: {fileID: 6217156373103072047} + m_Layer: 5 + m_Name: MasterVolume + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6217156373103072016 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6217156373103072017} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1591034541830594920} + - {fileID: 1591034540787035142} + - {fileID: 1591034541194713450} + - {fileID: 1591034540966426621} + m_Father: {fileID: 6417648243838381818} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -100, y: 40} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &6217156373103072047 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6217156373103072017} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 67db9e8f0e2ae9c40bc1e2b64352a6b4, 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: 1591034541991487325} + m_FillRect: {fileID: 1591034541050051854} + m_HandleRect: {fileID: 1591034541991487326} + m_Direction: 0 + m_MinValue: 0.0001 + m_MaxValue: 1 + m_WholeNumbers: 0 + m_Value: 0.0001 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &6417648243838381817 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6417648243838381818} + - component: {fileID: 6417648243838381820} + - component: {fileID: 6417648243838381819} + - component: {fileID: 6417648243838381814} + m_Layer: 5 + m_Name: SettingsPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &6417648243838381818 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6417648243838381817} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 2274705493899115683} + - {fileID: 6217156373103072016} + - {fileID: 4571589763288329519} + - {fileID: 7297531496490972690} + m_Father: {fileID: 294265330276786217} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -164, y: -160} + m_SizeDelta: {x: 500, y: 300} + m_Pivot: {x: 1, y: 1} +--- !u!222 &6417648243838381820 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6417648243838381817} + m_CullTransparentMesh: 1 +--- !u!114 &6417648243838381819 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6417648243838381817} + 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: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 222f76e9081efb6428be38c0e10f7bde, 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!114 &6417648243838381814 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6417648243838381817} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d3fad71d1b21b8545815ca408165e739, type: 3} + m_Name: + m_EditorClassIdentifier: + m_MasterVolumeSlider: {fileID: 6217156373103072047} + m_MusicVolumeSlider: {fileID: 7818796052053811380} +--- !u!1 &6892085633112661758 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6005602306300149307} + - component: {fileID: 8234121805529873855} + - component: {fileID: 8455013274254323185} + m_Layer: 5 + m_Name: Fill + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6005602306300149307 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6892085633112661758} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 6107605981620209842} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 10, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &8234121805529873855 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6892085633112661758} + m_CullTransparentMesh: 1 +--- !u!114 &8455013274254323185 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6892085633112661758} + 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.8705883, g: 0.7725491, b: 0.23529413, 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!1 &7379689433403748103 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8847124775178513431} + m_Layer: 5 + m_Name: Handle Slide Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8847124775178513431 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7379689433403748103} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 7817392311645474671} + m_Father: {fileID: 7297531496490972690} + m_RootOrder: 2 + 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: -20, y: 0} + m_Pivot: {x: 0.5, y: 0.5} diff --git a/Assets/BossRoom/Shaders/readme.txt.meta b/Assets/BossRoom/Prefabs/UI/SettingsPanelCanvas.prefab.meta similarity index 62% rename from Assets/BossRoom/Shaders/readme.txt.meta rename to Assets/BossRoom/Prefabs/UI/SettingsPanelCanvas.prefab.meta index f3bfeeaff..5af86c66b 100644 --- a/Assets/BossRoom/Shaders/readme.txt.meta +++ b/Assets/BossRoom/Prefabs/UI/SettingsPanelCanvas.prefab.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 -guid: 03ef1f3cc87802042a7f730b5f48833c -TextScriptImporter: +guid: 92e4be25f4f9a694a85129911fdc765b +PrefabImporter: externalObjects: {} userData: assetBundleName: diff --git a/Assets/BossRoom/Prefabs/UnityLogo.prefab b/Assets/BossRoom/Prefabs/UnityLogo.prefab index f6bd16feb..c34335ac2 100644 --- a/Assets/BossRoom/Prefabs/UnityLogo.prefab +++ b/Assets/BossRoom/Prefabs/UnityLogo.prefab @@ -232,7 +232,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 0} m_AnchorMax: {x: 1, y: 0} - m_AnchoredPosition: {x: 120.960236, y: 38.277084} + m_AnchoredPosition: {x: 146.67712, y: 37.3} m_SizeDelta: {x: 240, y: 240} m_Pivot: {x: 1, y: 0} --- !u!222 &1354513213091276539 diff --git a/Assets/BossRoom/Scenes/BossRoom.unity b/Assets/BossRoom/Scenes/BossRoom.unity index 2a0da252c..13c9ef3a8 100644 --- a/Assets/BossRoom/Scenes/BossRoom.unity +++ b/Assets/BossRoom/Scenes/BossRoom.unity @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6fee71faab250f587a5e66321bdcd8df434aed0cf5da10b0e10c3b2c1ba89f9d +oid sha256:c124dd06d084ec3631cd7bde6137ff5c8a75f63a7ebb424941be33a8c84d493a size 193670 diff --git a/Assets/BossRoom/Scenes/CharSelect.unity b/Assets/BossRoom/Scenes/CharSelect.unity index 4f42a0f60..52838dbf5 100644 --- a/Assets/BossRoom/Scenes/CharSelect.unity +++ b/Assets/BossRoom/Scenes/CharSelect.unity @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:db072e4c11f8ff97277a0c10dccaf15e016f089e83ec4401118af7ad5d6668d5 -size 200901 +oid sha256:7bd8ffc7869c132b1cf9c63350490688824a503f19c6cdb09b6cb7819f45df8d +size 205246 diff --git a/Assets/BossRoom/Scenes/MainMenu.unity b/Assets/BossRoom/Scenes/MainMenu.unity index 9699762e8..6f51c75a5 100644 --- a/Assets/BossRoom/Scenes/MainMenu.unity +++ b/Assets/BossRoom/Scenes/MainMenu.unity @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ed9a2dc8149291993b1d63a9ec928df49cf948635275c6ee0e62226df09b370b -size 47367 +oid sha256:fb3cb49cb437750c9aac36521dcb84ded801db7c4300a21ff90ab4542951d95b +size 53379 diff --git a/Assets/BossRoom/Scenes/PostGame.unity b/Assets/BossRoom/Scenes/PostGame.unity index b9127ab69..438adf95e 100644 --- a/Assets/BossRoom/Scenes/PostGame.unity +++ b/Assets/BossRoom/Scenes/PostGame.unity @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d650cb9ebddd6db354737950b7ed7bbd09f460023bd9149b67d57637b7130680 -size 60601 +oid sha256:5f00e44ffbc5b0be481e496e1719ba31981cecf1df5fff05b1503413d55a2f18 +size 61922 diff --git a/Assets/BossRoom/Scenes/Startup.unity b/Assets/BossRoom/Scenes/Startup.unity index f046b32e2..82a73b11d 100644 --- a/Assets/BossRoom/Scenes/Startup.unity +++ b/Assets/BossRoom/Scenes/Startup.unity @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d9cc8bb46d086cc1a1f1671211de0a8f6ce38ce96a9accc5f03ca41b2f836f84 -size 20090 +oid sha256:fdf648e5a3c2730a1fc06b2122f60e7d29beb0b5dc6e9314de97f1d518874437 +size 26803 diff --git a/Assets/BossRoom/Scripts/Client/Audio/AudioMixerConfigurator.cs b/Assets/BossRoom/Scripts/Client/Audio/AudioMixerConfigurator.cs new file mode 100644 index 000000000..1192895df --- /dev/null +++ b/Assets/BossRoom/Scripts/Client/Audio/AudioMixerConfigurator.cs @@ -0,0 +1,57 @@ +using UnityEngine; +using UnityEngine.Audio; + +namespace BossRoom.Client +{ + /// + /// Initializes the game's AudioMixer to use volumes stored in preferences. Provides + /// a public function that can be called when these values change. + /// + public class AudioMixerConfigurator : MonoBehaviour + { + [SerializeField] + private AudioMixer m_Mixer; + + [SerializeField] + private string m_MixerVarMainVolume = "OverallVolume"; + + [SerializeField] + private string m_MixerVarMusicVolume = "MusicVolume"; + + public static AudioMixerConfigurator Instance { get; private set; } + + /// + /// The audio sliders use a value between 0.0001 and 1, but the mixer works in decibels -- by default, -80 to 0. + /// To convert, we use log10(slider) multiplied by 20. Why 20? because log10(.0001)*20=-80, which is the + /// bottom range for our mixer, meaning it's disabled. + /// + private const float k_VolumeLog10Multiplier = 20; + + private void Awake() + { + Instance = this; + DontDestroyOnLoad(gameObject); + } + + private void Start() + { + // note that trying to configure the AudioMixer during Awake does not work, must be initialized in Start + Configure(); + } + + public void Configure() + { + m_Mixer.SetFloat(m_MixerVarMainVolume, GetVolumeInDecibels(ClientPrefs.GetMasterVolume())); + m_Mixer.SetFloat(m_MixerVarMusicVolume, GetVolumeInDecibels(ClientPrefs.GetMusicVolume())); + } + + private float GetVolumeInDecibels(float volume) + { + if (volume <= 0) // sanity-check in case we have bad prefs data + { + volume = 0.0001f; + } + return Mathf.Log10(volume) * k_VolumeLog10Multiplier; + } + } +} diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/BaseChannel.cs.meta b/Assets/BossRoom/Scripts/Client/Audio/AudioMixerConfigurator.cs.meta similarity index 83% rename from Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/BaseChannel.cs.meta rename to Assets/BossRoom/Scripts/Client/Audio/AudioMixerConfigurator.cs.meta index 6cb0a692f..3d4c27866 100644 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/BaseChannel.cs.meta +++ b/Assets/BossRoom/Scripts/Client/Audio/AudioMixerConfigurator.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: a74c865f121743d479838192cd3b2e06 +guid: e49a0047dd875594a8b6209502628f62 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/BossRoom/Scripts/Client/Audio/ClientMusicPlayer.cs b/Assets/BossRoom/Scripts/Client/Audio/ClientMusicPlayer.cs index f8a68a97e..557f26444 100644 --- a/Assets/BossRoom/Scripts/Client/Audio/ClientMusicPlayer.cs +++ b/Assets/BossRoom/Scripts/Client/Audio/ClientMusicPlayer.cs @@ -71,7 +71,6 @@ private void Awake() { throw new System.Exception("Multiple ClientMuscPlayers!"); } - m_source = GetComponent(); DontDestroyOnLoad(gameObject); Instance = this; } diff --git a/Assets/BossRoom/Scripts/Client/BossRoom.Client.asmdef b/Assets/BossRoom/Scripts/Client/BossRoom.Client.asmdef index 925865b87..65d97a8e7 100644 --- a/Assets/BossRoom/Scripts/Client/BossRoom.Client.asmdef +++ b/Assets/BossRoom/Scripts/Client/BossRoom.Client.asmdef @@ -5,8 +5,8 @@ "Unity.Multiplayer.MLAPI.Runtime", "BossRoom.Shared", "Cinemachine", - "LiteNEt MLAPI Transport", "Photon Realtime MLAPI Transport", + "LiteNetLib MLAPI Transport", "Unity.TextMeshPro" ], "includePlatforms": [], diff --git a/Assets/BossRoom/Scripts/Client/ClientDoorVisualization.cs b/Assets/BossRoom/Scripts/Client/ClientDoorVisualization.cs index a378d358f..68e7aaf3b 100644 --- a/Assets/BossRoom/Scripts/Client/ClientDoorVisualization.cs +++ b/Assets/BossRoom/Scripts/Client/ClientDoorVisualization.cs @@ -37,8 +37,8 @@ public override void NetworkStart() { m_DoorState.IsOpen.OnValueChanged += OnDoorStateChanged; - // sanity-check that the physics object is active in the scene (because we default to "closed") - m_PhysicsObject.SetActive(true); + // initialize visuals based on current server state (or else we default to "closed") + OnDoorStateChanged(false, m_DoorState.IsOpen.Value); } } diff --git a/Assets/BossRoom/Scripts/Client/ClientPrefs.cs b/Assets/BossRoom/Scripts/Client/ClientPrefs.cs new file mode 100644 index 000000000..4609901a9 --- /dev/null +++ b/Assets/BossRoom/Scripts/Client/ClientPrefs.cs @@ -0,0 +1,54 @@ +using UnityEngine; + +namespace BossRoom.Client +{ + /// + /// Singleton class which saves/loads local-client settings. + /// (This is just a wrapper around the PlayerPrefs system, + /// so that all the calls are in the same place.) + /// + public class ClientPrefs + { + private const float k_DefaultMasterVolume = 1; + private const float k_DefaultMusicVolume = 0.8f; + + public static float GetMasterVolume() + { + return PlayerPrefs.GetFloat("MasterVolume", k_DefaultMasterVolume); + } + + public static void SetMasterVolume(float volume) + { + PlayerPrefs.SetFloat("MasterVolume", volume); + } + + public static float GetMusicVolume() + { + return PlayerPrefs.GetFloat("MusicVolume", k_DefaultMusicVolume); + } + + public static void SetMusicVolume(float volume) + { + PlayerPrefs.SetFloat("MusicVolume", volume); + } + + /// + /// Either loads a Guid string from Unity preferences, or creates one and checkpoints it, then returns it. + /// + /// The Guid that uniquely identifies this client install, in string form. + public static string GetGuid() + { + if (PlayerPrefs.HasKey("client_guid")) + { + return PlayerPrefs.GetString("client_guid"); + } + + var guid = System.Guid.NewGuid(); + var guidString = guid.ToString(); + + PlayerPrefs.SetString("client_guid", guidString); + return guidString; + } + + } +} diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/ConnectionRequest.cs.meta b/Assets/BossRoom/Scripts/Client/ClientPrefs.cs.meta similarity index 83% rename from Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/ConnectionRequest.cs.meta rename to Assets/BossRoom/Scripts/Client/ClientPrefs.cs.meta index f6d7b65a1..ab7eed452 100644 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/ConnectionRequest.cs.meta +++ b/Assets/BossRoom/Scripts/Client/ClientPrefs.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ab9cb220487967e4ba764971b6eb9fac +guid: 7c9efd627253a5b4c8c5ab1ae629aa8e MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/BossRoom/Scripts/Client/Game/Action/TargetActionFX.cs b/Assets/BossRoom/Scripts/Client/Game/Action/TargetActionFX.cs index 312559cd3..e3a081ec5 100644 --- a/Assets/BossRoom/Scripts/Client/Game/Action/TargetActionFX.cs +++ b/Assets/BossRoom/Scripts/Client/Game/Action/TargetActionFX.cs @@ -55,8 +55,12 @@ public override bool Update() } else { - m_TargetReticule.transform.parent = null; - m_TargetReticule.SetActive(false); + // null check here in case the target was destroyed along with the target reticule + if (m_TargetReticule != null) + { + m_TargetReticule.transform.parent = null; + m_TargetReticule.SetActive(false); + } } } diff --git a/Assets/BossRoom/Scripts/Client/Game/State/ClientCharSelectState.cs b/Assets/BossRoom/Scripts/Client/Game/State/ClientCharSelectState.cs index f6d97eddc..5c7d9759b 100644 --- a/Assets/BossRoom/Scripts/Client/Game/State/ClientCharSelectState.cs +++ b/Assets/BossRoom/Scripts/Client/Game/State/ClientCharSelectState.cs @@ -132,7 +132,7 @@ protected override void OnDestroy() CharSelectData.IsLobbyClosed.OnValueChanged -= OnLobbyClosedChanged; CharSelectData.OnFatalLobbyError -= OnFatalLobbyError; CharSelectData.OnAssignedPlayerNumber -= OnAssignedPlayerNumber; - CharSelectData.LobbyPlayers.ArrayChangedEvent -= OnLobbyPlayerStateChanged; + CharSelectData.LobbyPlayers.OnListChanged -= OnLobbyPlayerStateChanged; } if (Instance == this) Instance = null; @@ -150,7 +150,7 @@ public override void NetworkStart() CharSelectData.IsLobbyClosed.OnValueChanged += OnLobbyClosedChanged; CharSelectData.OnFatalLobbyError += OnFatalLobbyError; CharSelectData.OnAssignedPlayerNumber += OnAssignedPlayerNumber; - CharSelectData.LobbyPlayers.ArrayChangedEvent += OnLobbyPlayerStateChanged; + CharSelectData.LobbyPlayers.OnListChanged += OnLobbyPlayerStateChanged; } } @@ -166,7 +166,7 @@ private void OnAssignedPlayerNumber(int playerNum) /// /// Called by the server when any of the seats in the lobby have changed. (Including ours!) /// - private void OnLobbyPlayerStateChanged(CharSelectData.LobbyPlayerArray lobbyArray ) + private void OnLobbyPlayerStateChanged(NetworkListEvent lobbyArray ) { UpdateSeats(); diff --git a/Assets/BossRoom/Scripts/Client/Game/State/ClientPostGameState.cs b/Assets/BossRoom/Scripts/Client/Game/State/ClientPostGameState.cs new file mode 100644 index 000000000..5fcd9fedf --- /dev/null +++ b/Assets/BossRoom/Scripts/Client/Game/State/ClientPostGameState.cs @@ -0,0 +1,21 @@ +namespace BossRoom.Client +{ + /// + /// Client state-logic for post-game screen. (We don't actually need to do anything here + /// right now, but we inherit our base-class's OnApplicationQuit() handler.) + /// + public class ClientPostGameState : GameStateBehaviour + { + public override GameState ActiveState { get { return GameState.PostGame; } } + + public override void NetworkStart() + { + base.NetworkStart(); + if (!IsClient) + { + enabled = false; + } + } + + } +} diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/INetEventListener.cs.meta b/Assets/BossRoom/Scripts/Client/Game/State/ClientPostGameState.cs.meta similarity index 83% rename from Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/INetEventListener.cs.meta rename to Assets/BossRoom/Scripts/Client/Game/State/ClientPostGameState.cs.meta index 45385770c..ba9fa9b13 100644 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/INetEventListener.cs.meta +++ b/Assets/BossRoom/Scripts/Client/Game/State/ClientPostGameState.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 28881074a6c781a439d38403a3182c2b +guid: 1cb58d1788f410740b05cace1af646d7 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/BossRoom/Scripts/Client/Net/ClientGameNetPortal.cs b/Assets/BossRoom/Scripts/Client/Net/ClientGameNetPortal.cs index 5f45d6a65..64bdccc4d 100644 --- a/Assets/BossRoom/Scripts/Client/Net/ClientGameNetPortal.cs +++ b/Assets/BossRoom/Scripts/Client/Net/ClientGameNetPortal.cs @@ -3,7 +3,10 @@ using UnityEngine.SceneManagement; using MLAPI; using MLAPI.Transports; +using MLAPI.Transports.LiteNetLib; +using MLAPI.Transports.PhotonRealtime; using MLAPI.Transports.UNET; +using Photon.Realtime; namespace BossRoom.Client { @@ -62,37 +65,24 @@ private void OnConnectFinished(ConnectStatus status) private void OnDisconnectOrTimeout(ulong clientID) { - //On a client disconnect we want to take them back to the main menu. - //We have to check here in SceneManager if our active scene is the main menu, as if it is, it means we timed out rather than a raw disconnect; - if (UnityEngine.SceneManagement.SceneManager.GetActiveScene().name != "MainMenu") + if(clientID == MLAPI.NetworkManager.Singleton.LocalClientId ) { - //FIXME: Currently it is not possible to safely load back to the Main Menu scene due to Persisting objects getting recreated - //We still don't want to invoke the network timeout event, however. - } - else - { - NetworkTimedOut?.Invoke(); + //On a client disconnect we want to take them back to the main menu. + //We have to check here in SceneManager if our active scene is the main menu, as if it is, it means we timed out rather than a raw disconnect; + if (UnityEngine.SceneManagement.SceneManager.GetActiveScene().name != "MainMenu") + { + // we're not at the main menu, so we obviously had a connection before... thus, we aren't in a timeout scenario. + // Just shut down networking and switch back to main menu. + MLAPI.NetworkManager.Singleton.Shutdown(); + SceneManager.LoadScene("MainMenu"); + } + else + { + NetworkTimedOut?.Invoke(); + } } } - /// - /// Either loads a Guid string from Unity preferences, or creates one and checkpoints it, then returns it. - /// - /// The Guid that uniquely identifies this client install, in string form. - private static string GetOrCreateGuid() - { - if (PlayerPrefs.HasKey("client_guid")) - { - return PlayerPrefs.GetString("client_guid"); - } - - var guid = System.Guid.NewGuid(); - var guidString = guid.ToString(); - - PlayerPrefs.SetString("client_guid", guidString); - return guidString; - } - /// /// Wraps the invocation of NetworkManager.StartClient, including our GUID as the payload. /// @@ -107,9 +97,11 @@ public static void StartClient(GameNetPortal portal, string ipaddress, int port) { //DMW_NOTE: non-portable. We need to be updated when moving to UTP transport. var chosenTransport = NetworkManager.Singleton.gameObject.GetComponent().IpHostTransport; + NetworkManager.Singleton.NetworkConfig.NetworkTransport = chosenTransport; + switch (chosenTransport) { - case LiteNetLibTransport.LiteNetLibTransport liteNetLibTransport: + case LiteNetLibTransport liteNetLibTransport: liteNetLibTransport.Address = ipaddress; liteNetLibTransport.Port = (ushort)port; break; @@ -131,9 +123,21 @@ public static void StartClient(GameNetPortal portal, string ipaddress, int port) /// Relay version of , see start client remarks for more information. /// /// - /// The room name of the host to connect to. - public static void StartClientRelayMode(GameNetPortal portal, string roomName) + /// The room name of the host to connect to. + public static bool StartClientRelayMode(GameNetPortal portal, string roomKey, out string failMessage) { + var splits = roomKey.Split('_'); + + if (splits.Length != 2) + { + failMessage = "Malformatted Room Key!"; + return false; + } + + var region = splits[0]; + var roomName = splits[1]; + + var chosenTransport = NetworkManager.Singleton.gameObject.GetComponent().RelayTransport; NetworkManager.Singleton.NetworkConfig.NetworkTransport = chosenTransport; @@ -141,17 +145,21 @@ public static void StartClientRelayMode(GameNetPortal portal, string roomName) { case PhotonRealtimeTransport photonRealtimeTransport: photonRealtimeTransport.RoomName = roomName; + PhotonAppSettings.Instance.AppSettings.FixedRegion = region; break; default: throw new Exception($"unhandled relay transport {chosenTransport.GetType()}"); } ConnectClient(portal); + + failMessage = String.Empty; + return true; } private static void ConnectClient(GameNetPortal portal) { - var clientGuid = GetOrCreateGuid(); + var clientGuid = ClientPrefs.GetGuid(); //var payload = $"client_guid={clientGuid}\n"; //minimal format where key=value pairs are separated by newlines. //payload += $"client_scene={UnityEngine.SceneManagement.SceneManager.GetActiveScene().buildIndex}\n"; //payload += $"player_name={portal.PlayerName}\n"; diff --git a/Assets/BossRoom/Scripts/Client/UI/HeroActionBar.cs b/Assets/BossRoom/Scripts/Client/UI/HeroActionBar.cs index 51b5fc4d3..a828e546b 100644 --- a/Assets/BossRoom/Scripts/Client/UI/HeroActionBar.cs +++ b/Assets/BossRoom/Scripts/Client/UI/HeroActionBar.cs @@ -20,24 +20,9 @@ public class HeroActionBar : MonoBehaviour private BossRoom.Client.ClientInputSender m_InputSender; - // Currently we manually configure icons from the Material arrays stored on this class, and we select which array to use - //from the CharacterClass inferred from the registered player GameObject. Eventually this can change so it is driven by - //the data for each skill instead. Current logic will be better for demos until skills are fully implemented with icon data. + // We find the Sprites to use by checking the Skill1, Skill2, and Skill3 members of our chosen CharacterClass private CharacterClass m_CharacterData; - // allow icons for each class to be configured - [SerializeField] - private Sprite[] m_TankIcons; - - [SerializeField] - private Sprite[] m_ArcherIcons; - - [SerializeField] - private Sprite[] m_RogueIcons; - - [SerializeField] - private Sprite[] m_MageIcons; - public void RegisterInputSender(Client.ClientInputSender inputSender) { if (m_InputSender != null) @@ -47,27 +32,31 @@ public void RegisterInputSender(Client.ClientInputSender inputSender) m_InputSender = inputSender; m_CharacterData = m_InputSender.GetComponent().CharacterData; - SetPlayerType(m_CharacterData.CharacterType); + SetPlayerType(m_CharacterData); } - private void SetPlayerType(CharacterTypeEnum playerType) + private void SetPlayerType(CharacterClass characterData) { - if (playerType == CharacterTypeEnum.Tank) - { - SetButtonIcons(m_TankIcons); - } - else if (playerType == CharacterTypeEnum.Archer) - { - SetButtonIcons(m_ArcherIcons); - } - else if (playerType == CharacterTypeEnum.Mage) - { - SetButtonIcons(m_MageIcons); - } - else if (playerType == CharacterTypeEnum.Rogue) + var sprites = new Sprite[] { - SetButtonIcons(m_RogueIcons); - } + GetSpriteForAction(characterData.Skill1), + GetSpriteForAction(characterData.Skill2), + GetSpriteForAction(characterData.Skill3), + }; + SetButtonIcons(sprites); + } + + /// + /// Returns the Sprite for an Action, or null if no sprite is available + /// + private Sprite GetSpriteForAction(ActionType actionType) + { + if (actionType == ActionType.None) + return null; + var desc = GameDataSource.Instance.ActionDataByType[actionType]; + if (desc != null) + return desc.Icon; + return null; } void SetButtonIcons(Sprite[] icons) @@ -77,6 +66,7 @@ void SetButtonIcons(Sprite[] icons) if (i < icons.Length) { m_Buttons[i].image.sprite = icons[i]; + m_Buttons[i].gameObject.SetActive(icons[i] != null); } } } diff --git a/Assets/BossRoom/Scripts/Client/UI/MainMenuUI.cs b/Assets/BossRoom/Scripts/Client/UI/MainMenuUI.cs index 363cc7fe7..fd05216c8 100644 --- a/Assets/BossRoom/Scripts/Client/UI/MainMenuUI.cs +++ b/Assets/BossRoom/Scripts/Client/UI/MainMenuUI.cs @@ -37,8 +37,8 @@ void Start() public void OnHostClicked() { - m_ResponsePopup.SetupEnterGameDisplay(true, "Host Game", "Input the IP to host on", "Input the room name to host on", "iphost", "Confirm", - (string connectInput, string playerName, OnlineMode onlineMode) => + m_ResponsePopup.SetupEnterGameDisplay(true, "Host Game", "Input the IP to host on", "", "iphost", "Confirm", + (string connectInput, int connectPort, string playerName, OnlineMode onlineMode) => { m_GameNetPortal.PlayerName = playerName; switch (onlineMode) @@ -48,31 +48,35 @@ public void OnHostClicked() break; case OnlineMode.IpHost: - m_GameNetPortal.StartHost(PostProcessIpInput(connectInput), k_ConnectPort); + m_GameNetPortal.StartHost(PostProcessIpInput(connectInput), connectPort); break; } - }, k_DefaultIP); + }, k_DefaultIP, k_ConnectPort); } public void OnConnectClicked() { m_ResponsePopup.SetupEnterGameDisplay(false, "Join Game", "Input the host IP below", "Input the room name below", "iphost", "Join", - (string connectInput, string playerName, OnlineMode onlineMode) => + (string connectInput, int connectPort, string playerName, OnlineMode onlineMode) => { m_GameNetPortal.PlayerName = playerName; switch (onlineMode) { case OnlineMode.Relay: - ClientGameNetPortal.StartClientRelayMode(m_GameNetPortal, connectInput); + if (ClientGameNetPortal.StartClientRelayMode(m_GameNetPortal, connectInput, out string failMessage) == false) + { + m_ResponsePopup.SetupNotifierDisplay("Connection Failed", failMessage, false, true); + return; + } break; case OnlineMode.IpHost: - ClientGameNetPortal.StartClient(m_GameNetPortal, connectInput, k_ConnectPort); + ClientGameNetPortal.StartClient(m_GameNetPortal, connectInput, connectPort); break; } m_ResponsePopup.SetupNotifierDisplay("Connecting", "Attempting to Join...", true, false); - }, k_DefaultIP); + }, k_DefaultIP, k_ConnectPort); } private string PostProcessIpInput(string ipInput) diff --git a/Assets/BossRoom/Scripts/Client/UI/PopupPanel.cs b/Assets/BossRoom/Scripts/Client/UI/PopupPanel.cs index cfb559000..d3da238c6 100644 --- a/Assets/BossRoom/Scripts/Client/UI/PopupPanel.cs +++ b/Assets/BossRoom/Scripts/Client/UI/PopupPanel.cs @@ -23,10 +23,14 @@ public class PopupPanel : MonoBehaviour [Tooltip("The Animating \"Connecting\" Image you want to animate to show the client is doing something")] private GameObject m_ReconnectingImage; [SerializeField] - [Tooltip("The GameObject holding the Input field for the panel")] - private GameObject m_InputFieldParent; + [Tooltip("The GameObject holding the \"Generic\" Input field (for IP address or other address forms)")] + private InputField m_InputField; [SerializeField] - private GameObject m_InputBox; + [Tooltip("The nested Text component of m_InputField, where we stick the placeholder text")] + private Text m_InputFieldPlaceholderText; + [SerializeField] + [Tooltip("The Port-number input field for the panel")] + private InputField m_PortInputField; [SerializeField] private Button m_ConfirmationButton; [SerializeField] @@ -35,7 +39,7 @@ public class PopupPanel : MonoBehaviour [Tooltip("This Button appears for popups that ask for player inputs")] private Button m_CancelButton; [SerializeField] - private GameObject m_NameDisplayGO; + private NameDisplay m_NameDisplay; [SerializeField] private Dropdown m_OnlineModeDropdown; @@ -45,12 +49,13 @@ public class PopupPanel : MonoBehaviour string m_RelayMainText; string m_DefaultIpInput; + int m_DefaultPort; /// /// Confirm function invoked when confirm is hit on popup. The meaning of the arguments may vary by popup panel, but - /// in the initial case of the login popup, they represent the IP Address input, and the Player Name. + /// in the initial case of the login popup, they represent the IP Address, port, the Player Name, and the connection mode /// - private System.Action m_ConfirmFunction; + private System.Action m_ConfirmFunction; private const string k_DefaultConfirmText = "OK"; @@ -67,8 +72,9 @@ public class PopupPanel : MonoBehaviour /// Text to display on the confirmation button /// The delegate to invoke when the player confirms. It sends what the player input. /// The default Ip value to show in the input field. + /// The default Port# to show in the port-input field. public void SetupEnterGameDisplay(bool enterAsHost, string titleText, string ipHostMainText, string relayMainText, string inputFieldText, - string confirmationText, System.Action confirmCallback, string defaultIpInput = "") + string confirmationText, System.Action confirmCallback, string defaultIpInput = "", int defaultPortInput = 0) { //Clear any previous settings of the Panel first ResetState(); @@ -76,13 +82,15 @@ public void SetupEnterGameDisplay(bool enterAsHost, string titleText, string ipH m_EnterAsHost = enterAsHost; m_DefaultIpInput = defaultIpInput; + m_DefaultPort = defaultPortInput; m_IpHostMainText = ipHostMainText; m_RelayMainText = relayMainText; m_TitleText.text = titleText; m_SubText.text = string.Empty; - m_InputBox.GetComponent().text = inputFieldText; + m_InputFieldPlaceholderText.text = inputFieldText; + m_PortInputField.text = defaultPortInput.ToString(); m_ConfirmFunction = confirmCallback; m_ConfirmationText.text = confirmationText; @@ -97,18 +105,21 @@ public void SetupEnterGameDisplay(bool enterAsHost, string titleText, string ipH m_CancelButton.onClick.AddListener(OnCancelClick); m_CancelButton.gameObject.SetActive(true); - m_InputFieldParent.SetActive(true); + m_InputField.gameObject.SetActive(true); + m_PortInputField.gameObject.SetActive(true); - m_NameDisplayGO.SetActive(true); + m_NameDisplay.gameObject.SetActive(true); gameObject.SetActive(true); } private void OnConfirmClick() { - var inputField = m_InputFieldParent.GetComponent(); - var nameDisplay = m_NameDisplayGO.GetComponent(); - m_ConfirmFunction.Invoke(inputField.text, nameDisplay.GetCurrentName(), (OnlineMode)m_OnlineModeDropdown.value); + int portNum = 0; + int.TryParse(m_PortInputField.text, out portNum); + if (portNum <= 0) + portNum = m_DefaultPort; + m_ConfirmFunction.Invoke(m_InputField.text, portNum, m_NameDisplay.GetCurrentName(), (OnlineMode)m_OnlineModeDropdown.value); } /// @@ -125,20 +136,35 @@ private void OnCancelClick() /// private void OnOnlineModeDropdownChanged(int value) { - var inputField = m_InputFieldParent.GetComponent(); + // activate this so that it is always activated unless entering as relay host + m_InputField.gameObject.SetActive(true); if (value == 0) { // Ip host m_MainText.text = m_IpHostMainText; - inputField.text = m_DefaultIpInput; + m_InputField.text = m_DefaultIpInput; + m_PortInputField.gameObject.SetActive(true); + m_PortInputField.text = m_DefaultPort.ToString(); } else { if (string.IsNullOrEmpty(PhotonAppSettings.Instance.AppSettings.AppIdRealtime)) { - // If there is no photon app id set tell the user they need to install - SetupNotifierDisplay("Photon Realtime not Setup!", "Follow the instructions in the readme to setup Photon Realtime and use relay mode.", false, true); + if (Application.isEditor) + { + // If there is no photon app id set tell the user they need to install + SetupNotifierDisplay( + "Photon Realtime not Setup!", "Follow the instructions in the readme (/Documents/Photon-Realtime/Readme.md) " + + "to setup Photon Realtime and use relay mode.", false, true); + } + else + { + // If there is no photon app id set tell the user they need to install + SetupNotifierDisplay( + "Photon Realtime not Setup!", "It needs to be setup in the Unity Editor for this project " + + "by following the Photon-Realtime guide, then rebuild the project and distribute it.", false, true); + } return; } @@ -147,12 +173,16 @@ private void OnOnlineModeDropdownChanged(int value) if (m_EnterAsHost) { - inputField.text = GenerateRandomRoomKey(); + m_InputField.text = GenerateRandomRoomKey(); + m_InputField.gameObject.SetActive(false); } else { - inputField.text = ""; + m_InputField.text = ""; } + + m_PortInputField.gameObject.SetActive(false); + m_PortInputField.text = ""; } } @@ -181,12 +211,12 @@ private void ResetState() m_TitleText.text = string.Empty; m_MainText.text = string.Empty; m_SubText.text = string.Empty; - var inputField = m_InputFieldParent.GetComponent(); - inputField.text = string.Empty; + m_InputField.text = string.Empty; + m_PortInputField.text = string.Empty; m_ReconnectingImage.SetActive(false); m_ConfirmationButton.gameObject.SetActive(false); m_CancelButton.gameObject.SetActive(false); - m_NameDisplayGO.gameObject.SetActive(false); + m_NameDisplay.gameObject.SetActive(false); m_OnlineModeDropdown.gameObject.SetActive(false); m_OnlineModeDropdown.onValueChanged.RemoveListener(OnOnlineModeDropdownChanged); @@ -215,7 +245,8 @@ public void SetupNotifierDisplay(string titleText, string mainText, bool display m_ReconnectingImage.SetActive(displayImage); m_ConfirmationButton.gameObject.SetActive(displayConfirmation); - m_InputFieldParent.gameObject.SetActive(false); + m_InputField.gameObject.SetActive(false); + m_PortInputField.gameObject.SetActive(false); gameObject.SetActive(true); } } diff --git a/Assets/BossRoom/Scripts/Client/UI/PostGameUI.cs b/Assets/BossRoom/Scripts/Client/UI/PostGameUI.cs index 379cd390c..fea1f166a 100644 --- a/Assets/BossRoom/Scripts/Client/UI/PostGameUI.cs +++ b/Assets/BossRoom/Scripts/Client/UI/PostGameUI.cs @@ -12,8 +12,11 @@ namespace BossRoom.Visual public class PostGameUI : MonoBehaviour { [SerializeField] - private RawImage m_Background; + private Image m_EndMessage; + [SerializeField] + private Light m_SceneLight; + [SerializeField] private TextMeshProUGUI m_WinEndMessage; @@ -29,6 +32,12 @@ public class PostGameUI : MonoBehaviour [SerializeField] private PostGameData m_PostGameData; + [SerializeField] + private Color m_WinLightColor; + + [SerializeField] + private Color m_LoseLightColor; + void Start() { GameObject GamePortalGO = GameObject.FindGameObjectWithTag("GameNetPortal"); @@ -57,13 +66,13 @@ private void OnGameWonChanged(byte prevVal, byte currentVal) // Set end message and background color based last game outcome if (m_PostGameData.GameBannerState.Value == (byte)PostGameData.BannerState.Won ) { - m_Background.color = Color.white; + m_SceneLight.color = m_WinLightColor; m_WinEndMessage.gameObject.SetActive(true); m_LoseGameMessage.gameObject.SetActive(false); } else if( m_PostGameData.GameBannerState.Value == (byte)PostGameData.BannerState.Lost ) { - m_Background.color = new Color(1.0f, 0.5f, 0.5f); + m_SceneLight.color = m_LoseLightColor; m_WinEndMessage.gameObject.SetActive(false); m_LoseGameMessage.gameObject.SetActive(true); } diff --git a/Assets/BossRoom/Scripts/Client/UI/RoomNameBox.cs b/Assets/BossRoom/Scripts/Client/UI/RoomNameBox.cs index f0aadd5d2..a8ae2f1ae 100644 --- a/Assets/BossRoom/Scripts/Client/UI/RoomNameBox.cs +++ b/Assets/BossRoom/Scripts/Client/UI/RoomNameBox.cs @@ -1,5 +1,7 @@ using MLAPI; using MLAPI.Transports; +using MLAPI.Transports.PhotonRealtime; +using Photon.Realtime; using UnityEngine; using UnityEngine.Assertions; using TMPro; @@ -10,6 +12,8 @@ public class RoomNameBox : MonoBehaviour [SerializeField] TextMeshProUGUI m_RoomNameText; + bool m_ConnectionFinished = false; + void Awake() { Assert.IsNotNull(m_RoomNameText, $"{nameof(m_RoomNameText)} not assigned!"); @@ -19,7 +23,7 @@ void Awake() switch (transport) { case PhotonRealtimeTransport realtimeTransport: - m_RoomNameText.text = $"Room Name: {realtimeTransport.RoomName}"; + m_RoomNameText.text = $"Loading room key..."; break; default: // RoomName should only be displayed when using relay. @@ -27,4 +31,24 @@ void Awake() break; } } + + // This update loop exists because there is currently a bug in MLAPI which runs client connected callbacks before the transport has + // fully finished the asynchronous connection. That's why are loading the character select screen too early and need this update loop to + // update the room key once we are fully connected to the Photon cloud. + void Update() + { + if (m_ConnectionFinished == false) + { + var transport = NetworkManager.Singleton.NetworkConfig.NetworkTransport; + + if (transport is PhotonRealtimeTransport realtimeTransport && string.IsNullOrEmpty(realtimeTransport.Client.CloudRegion) == false) + { + string roomName = $"{realtimeTransport.Client.CloudRegion.ToUpper()}_{realtimeTransport.RoomName}"; + m_RoomNameText.text = $"Room Name: {roomName}"; + m_ConnectionFinished = true; + } + } + + + } } diff --git a/Assets/BossRoom/Scripts/Client/UI/StartupUI.cs b/Assets/BossRoom/Scripts/Client/UI/StartupUI.cs index 3daa10b28..4f66aa543 100644 --- a/Assets/BossRoom/Scripts/Client/UI/StartupUI.cs +++ b/Assets/BossRoom/Scripts/Client/UI/StartupUI.cs @@ -1,7 +1,7 @@ using UnityEngine; using UnityEngine.SceneManagement; -namespace BossRoom.Visual +namespace BossRoom.Client { /// /// Provides backing logic for any UI before MainMenu stage. Mostly we just load main menu @@ -10,6 +10,7 @@ public class StartupUI : MonoBehaviour { void Start() { + AudioListener.volume = ClientPrefs.GetMasterVolume(); SceneManager.LoadScene("MainMenu"); } } diff --git a/Assets/BossRoom/Scripts/Client/UI/UISettingsCanvas.cs b/Assets/BossRoom/Scripts/Client/UI/UISettingsCanvas.cs new file mode 100644 index 000000000..05216ab4b --- /dev/null +++ b/Assets/BossRoom/Scripts/Client/UI/UISettingsCanvas.cs @@ -0,0 +1,32 @@ +using UnityEngine; + +namespace BossRoom.Visual +{ + /// + /// Controls the special Canvas that has the settings icon and the settings window. + /// The window itself is controlled by UISettingsPanel; the button is controlled here. + /// + public class UISettingsCanvas : MonoBehaviour + { + [SerializeField] + private GameObject m_SettingsPanelRoot; + + void Awake() + { + // the settings canvas should exist in all scenes! + DontDestroyOnLoad(gameObject); + + // hide the settings window at startup (this is just to handle the common case where an artist forgets to disable the window in the prefab) + m_SettingsPanelRoot.SetActive(false); + } + + /// + /// Called directly by the settings button in the UI prefab + /// + public void OnClickSettingsButton() + { + m_SettingsPanelRoot.SetActive(!m_SettingsPanelRoot.activeSelf); + } + + } +} diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Layers/Crc32cLayer.cs.meta b/Assets/BossRoom/Scripts/Client/UI/UISettingsCanvas.cs.meta similarity index 83% rename from Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Layers/Crc32cLayer.cs.meta rename to Assets/BossRoom/Scripts/Client/UI/UISettingsCanvas.cs.meta index e05c84959..5e56f7f53 100644 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Layers/Crc32cLayer.cs.meta +++ b/Assets/BossRoom/Scripts/Client/UI/UISettingsCanvas.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d658f1c6b66f5684780b95233d5fe00b +guid: 190bc18b6f6f06340acb887d88806593 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/BossRoom/Scripts/Client/UI/UISettingsPanel.cs b/Assets/BossRoom/Scripts/Client/UI/UISettingsPanel.cs new file mode 100644 index 000000000..d92fae224 --- /dev/null +++ b/Assets/BossRoom/Scripts/Client/UI/UISettingsPanel.cs @@ -0,0 +1,45 @@ +using UnityEngine; +using UnityEngine.UI; + +namespace BossRoom.Client +{ + + public class UISettingsPanel : MonoBehaviour + { + [SerializeField] + private Slider m_MasterVolumeSlider; + + [SerializeField] + private Slider m_MusicVolumeSlider; + + private void OnEnable() + { + // Note that we initialize the slider BEFORE we listen for changes (so we don't get notified of our own change!) + m_MasterVolumeSlider.value = ClientPrefs.GetMasterVolume(); + m_MasterVolumeSlider.onValueChanged.AddListener(OnMasterVolumeSliderChanged); + + // initialize music slider similarly. + m_MusicVolumeSlider.value = ClientPrefs.GetMusicVolume(); + m_MusicVolumeSlider.onValueChanged.AddListener(OnMusicVolumeSliderChanged); + } + + private void OnDisable() + { + m_MasterVolumeSlider.onValueChanged.RemoveListener(OnMasterVolumeSliderChanged); + m_MusicVolumeSlider.onValueChanged.RemoveListener(OnMusicVolumeSliderChanged); + } + + private void OnMasterVolumeSliderChanged(float newValue) + { + ClientPrefs.SetMasterVolume(newValue); + AudioMixerConfigurator.Instance.Configure(); + } + + private void OnMusicVolumeSliderChanged(float newValue) + { + ClientPrefs.SetMusicVolume(newValue); + AudioMixerConfigurator.Instance.Configure(); + } + } + +} diff --git a/Assets/BossRoom/Scripts/Client/UI/UISettingsPanel.cs.meta b/Assets/BossRoom/Scripts/Client/UI/UISettingsPanel.cs.meta new file mode 100644 index 000000000..b736153c4 --- /dev/null +++ b/Assets/BossRoom/Scripts/Client/UI/UISettingsPanel.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d3fad71d1b21b8545815ca408165e739 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/BossRoom/Scripts/Editor/SceneBootstrapper.cs b/Assets/BossRoom/Scripts/Editor/SceneBootstrapper.cs new file mode 100644 index 000000000..41ae1b59a --- /dev/null +++ b/Assets/BossRoom/Scripts/Editor/SceneBootstrapper.cs @@ -0,0 +1,122 @@ +using UnityEditor; +using UnityEditor.SceneManagement; +using UnityEngine; + +namespace BossRoom.Scripts.Editor +{ + /// + /// Class that permits auto-loading a bootstrap scene when the editor switches play state. This class is + /// initialized when Unity loads and when scripts are recompiled. This is to be able to subscribe to + /// EditorApplication's playModeStateChanged event, which is when we wish to open a new scene. + /// + [InitializeOnLoad] + public class SceneBootstrapper + { + const string k_BootstrapSceneKey = "BootstrapScene"; + const string k_PreviousSceneKey = "PreviousScene"; + const string k_LoadBootstrapSceneKey = "LoadBootstrapScene"; + + const string k_LoadBootstrapSceneOnPlay = "Boss Room/Load Bootstrap Scene On Play"; + const string k_DoNotLoadBootstrapSceneOnPlay = "Boss Room/Don't Load Bootstrap Scene On Play"; + + static string BootstrapScene + { + get + { + if (!EditorPrefs.HasKey(k_BootstrapSceneKey)) + { + EditorPrefs.SetString(k_BootstrapSceneKey, EditorBuildSettings.scenes[0].path); + } + return EditorPrefs.GetString(k_BootstrapSceneKey, EditorBuildSettings.scenes[0].path); + } + set => EditorPrefs.SetString(k_BootstrapSceneKey, value); + } + + static string PreviousScene + { + get => EditorPrefs.GetString(k_PreviousSceneKey); + set => EditorPrefs.SetString(k_PreviousSceneKey, value); + } + + static bool LoadBootstrapScene + { + get + { + if (!EditorPrefs.HasKey(k_LoadBootstrapSceneKey)) + { + EditorPrefs.SetBool(k_LoadBootstrapSceneKey, true); + } + return EditorPrefs.GetBool(k_LoadBootstrapSceneKey, true); + } + set => EditorPrefs.SetBool(k_LoadBootstrapSceneKey, value); + } + + static SceneBootstrapper() + { + EditorApplication.playModeStateChanged += EditorApplicationOnplayModeStateChanged; + } + + [MenuItem(k_LoadBootstrapSceneOnPlay, true)] + static bool ShowLoadBootstrapSceneOnPlay() + { + return !LoadBootstrapScene; + } + + [MenuItem(k_LoadBootstrapSceneOnPlay)] + static void EnableLoadBootstrapSceneOnPlay() + { + LoadBootstrapScene = true; + } + + [MenuItem(k_DoNotLoadBootstrapSceneOnPlay, true)] + static bool ShowDoNotLoadBootstrapSceneOnPlay() + { + return LoadBootstrapScene; + } + + [MenuItem(k_DoNotLoadBootstrapSceneOnPlay)] + static void DisableDoNotLoadBootstrapSceneOnPlay() + { + LoadBootstrapScene = false; + } + + static void EditorApplicationOnplayModeStateChanged(PlayModeStateChange obj) + { + if (!LoadBootstrapScene) + { + return; + } + + if (obj == PlayModeStateChange.ExitingEditMode) + { + // cache previous scene so we return to this scene after play session, if possible + PreviousScene = EditorSceneManager.GetActiveScene().path; + + if (EditorSceneManager.SaveCurrentModifiedScenesIfUserWantsTo()) + { + // user either hit "Save" or "Don't Save"; open bootstrap scene + + if (!string.IsNullOrEmpty(BootstrapScene) && + System.Array.Exists(EditorBuildSettings.scenes, scene => scene.path == BootstrapScene)) + { + // scene is included in build settings; open it + EditorSceneManager.OpenScene(BootstrapScene); + } + } + else + { + // user either hit "Cancel" or exited window; don't open bootstrap scene & return to editor + + EditorApplication.isPlaying = false; + } + } + else if (obj == PlayModeStateChange.EnteredEditMode) + { + if (!string.IsNullOrEmpty(PreviousScene)) + { + EditorSceneManager.OpenScene(PreviousScene); + } + } + } + } +} diff --git a/Assets/BossRoom/Scripts/Editor/SceneBootstrapper.cs.meta b/Assets/BossRoom/Scripts/Editor/SceneBootstrapper.cs.meta new file mode 100644 index 000000000..5ab2f6a82 --- /dev/null +++ b/Assets/BossRoom/Scripts/Editor/SceneBootstrapper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a745989579294a7409885f8dc7300e45 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/BossRoom/Scripts/Server/Game/Action/AOEAction.cs b/Assets/BossRoom/Scripts/Server/Game/Action/AOEAction.cs index 8fe60a619..27d2a62ff 100644 --- a/Assets/BossRoom/Scripts/Server/Game/Action/AOEAction.cs +++ b/Assets/BossRoom/Scripts/Server/Game/Action/AOEAction.cs @@ -27,7 +27,7 @@ public override bool Start() float distanceAway = Vector3.Distance(m_Parent.transform.position, Data.Position); if (distanceAway > Description.Range+k_MaxDistanceDivergence) { - Debug.LogError($"Hacking detected?! (Object ID {m_Parent.NetworkObjectId}) {Description.ActionTypeEnum}'s AoE range is {Description.Range} but we were given a point that's {distanceAway} away from us. Canceling AoE"); + // Due to latency, it's possible for the client side click check to be out of date with the server driven position. Doing a final check server side to make sure. return ActionConclusion.Stop; } diff --git a/Assets/BossRoom/Scripts/Server/Game/Action/ChaseAction.cs b/Assets/BossRoom/Scripts/Server/Game/Action/ChaseAction.cs index 724fe8375..0a492fb93 100644 --- a/Assets/BossRoom/Scripts/Server/Game/Action/ChaseAction.cs +++ b/Assets/BossRoom/Scripts/Server/Game/Action/ChaseAction.cs @@ -60,6 +60,13 @@ private bool HasValidTarget() /// private bool StopIfDone() { + if(m_Target == null ) + { + //if the target disappeared on us, then just stop. + Cancel(); + return true; + } + float distToTarget2 = (m_Parent.transform.position - m_Target.transform.position).sqrMagnitude; if ((m_Data.Amount * m_Data.Amount) > distToTarget2) { diff --git a/Assets/BossRoom/Scripts/Server/Game/Character/AIBrain.cs b/Assets/BossRoom/Scripts/Server/Game/Character/AIBrain.cs index b5edacfbd..c8b51220b 100644 --- a/Assets/BossRoom/Scripts/Server/Game/Character/AIBrain.cs +++ b/Assets/BossRoom/Scripts/Server/Game/Character/AIBrain.cs @@ -17,6 +17,8 @@ private enum AIStateType IDLE, } + static readonly AIStateType[] k_AIStates = (AIStateType[])Enum.GetValues(typeof(AIStateType)); + private ServerCharacter m_ServerCharacter; private ActionPlayer m_ActionPlayer; private AIStateType m_CurrentState; @@ -53,7 +55,7 @@ public void Update() } /// - /// Called when we received some HP. Positive HP is healing, negative is damage. + /// Called when we received some HP. Positive HP is healing, negative is damage. /// /// The person who hurt or healed us. May be null. /// The amount of HP received. Negative is damage. @@ -69,13 +71,14 @@ private AIStateType FindBestEligibleAIState() { // for now we assume the AI states are in order of appropriateness, // which may be nonsensical when there are more states - foreach (AIStateType type in Enum.GetValues(typeof(AIStateType))) + foreach (AIStateType aiStateType in k_AIStates) { - if (m_Logics[type].IsEligible()) + if (m_Logics[aiStateType].IsEligible()) { - return type; + return aiStateType; } } + Debug.LogError("No AI states are valid!?!"); return AIStateType.IDLE; } @@ -115,7 +118,13 @@ public void Hate(ServerCharacter character) public List GetHatedEnemies() { // first we clean the list -- remove any enemies that have disappeared (became null), are dead, etc. - m_HatedEnemies.RemoveAll(enemy => !IsAppropriateFoe(enemy)); + for (int i = m_HatedEnemies.Count - 1; i >= 0; i--) + { + if (!IsAppropriateFoe(m_HatedEnemies[i])) + { + m_HatedEnemies.RemoveAt(i); + } + } return m_HatedEnemies; } diff --git a/Assets/BossRoom/Scripts/Server/Game/Character/ServerCharacter.cs b/Assets/BossRoom/Scripts/Server/Game/Character/ServerCharacter.cs index a139caf77..83f9b80ff 100644 --- a/Assets/BossRoom/Scripts/Server/Game/Character/ServerCharacter.cs +++ b/Assets/BossRoom/Scripts/Server/Game/Character/ServerCharacter.cs @@ -130,6 +130,7 @@ private void OnClientMoveRequest(Vector3 targetPosition) if (NetState.NetworkLifeState.Value == LifeState.Alive && !m_Movement.IsPerformingForcedMovement()) { ClearActions(false); + m_ActionPlayer.CancelRunningActionsByLogic(ActionLogic.Target, true); //clear target on move. m_Movement.SetMovementTarget(targetPosition); } } diff --git a/Assets/BossRoom/Scripts/Server/Game/State/ServerBossRoomState.cs b/Assets/BossRoom/Scripts/Server/Game/State/ServerBossRoomState.cs index c2ba204a8..de5c14be1 100644 --- a/Assets/BossRoom/Scripts/Server/Game/State/ServerBossRoomState.cs +++ b/Assets/BossRoom/Scripts/Server/Game/State/ServerBossRoomState.cs @@ -44,7 +44,7 @@ public class ServerBossRoomState : GameStateBehaviour private ServerGameNetPortal m_ServerNetPortal; // Wait time constants for switching to post game after the game is won or lost - private const float k_WinDelay = 5.0f; + private const float k_WinDelay = 7.0f; private const float k_LoseDelay = 2.5f; /// diff --git a/Assets/BossRoom/Scripts/Server/Navigation/DynamicNavPath.cs b/Assets/BossRoom/Scripts/Server/Navigation/DynamicNavPath.cs index 314923334..ca893aeec 100644 --- a/Assets/BossRoom/Scripts/Server/Navigation/DynamicNavPath.cs +++ b/Assets/BossRoom/Scripts/Server/Navigation/DynamicNavPath.cs @@ -38,15 +38,10 @@ public sealed class DynamicNavPath : IDisposable private Vector3 m_PositionTarget; /// - /// A moving transform target, the path will readjust when the target moves. + /// A moving transform target, the path will readjust when the target moves. If this is non-null, it takes precedence over m_PositionTarget. /// private Transform m_TransformTarget; - /// - /// If true the path tracks a moving transform target (). If false it points to a static position target (. - /// - private bool m_HasTransformTarget; - /// /// Creates a new instance of the /// @@ -62,7 +57,7 @@ public DynamicNavPath(NavMeshAgent agent, NavigationSystem navigationSystem) navigationSystem.OnNavigationMeshChanged += OnNavMeshChanged; } - private Vector3 TargetPosition => m_HasTransformTarget ? m_TransformTarget.position : m_PositionTarget; + private Vector3 TargetPosition => m_TransformTarget != null ? m_TransformTarget.position : m_PositionTarget; /// /// Set the target of this path to follow a moving transform. @@ -71,7 +66,6 @@ public DynamicNavPath(NavMeshAgent agent, NavigationSystem navigationSystem) public void FollowTransform(Transform target) { m_TransformTarget = target; - m_HasTransformTarget = true; } /// @@ -87,7 +81,7 @@ public void SetTargetPosition(Vector3 target) } m_PositionTarget = target; - m_HasTransformTarget = false; + m_TransformTarget = null; RecalculatePath(); } @@ -114,7 +108,7 @@ public void Clear() /// Returns the movement vector. public Vector3 MoveAlongPath(float distance) { - if (m_HasTransformTarget) + if (m_TransformTarget != null) { OnTargetPositionChanged(TargetPosition); } @@ -192,4 +186,4 @@ public void Dispose() m_NavigationSystem.OnNavigationMeshChanged -= OnNavMeshChanged; } } -} \ No newline at end of file +} diff --git a/Assets/BossRoom/Scripts/Shared/BossRoom.Shared.asmdef b/Assets/BossRoom/Scripts/Shared/BossRoom.Shared.asmdef index 2c237ca35..c39f07090 100644 --- a/Assets/BossRoom/Scripts/Shared/BossRoom.Shared.asmdef +++ b/Assets/BossRoom/Scripts/Shared/BossRoom.Shared.asmdef @@ -3,8 +3,8 @@ "rootNamespace": "", "references": [ "Unity.Multiplayer.MLAPI.Runtime", - "LiteNEt MLAPI Transport", "Photon Realtime MLAPI Transport", + "LiteNetLib MLAPI Transport", "Unity.TextMeshPro" ], "includePlatforms": [], diff --git a/Assets/BossRoom/Scripts/Shared/Game/State/CharSelectData.cs b/Assets/BossRoom/Scripts/Shared/Game/State/CharSelectData.cs index 35dc86d69..e74bf378d 100644 --- a/Assets/BossRoom/Scripts/Shared/Game/State/CharSelectData.cs +++ b/Assets/BossRoom/Scripts/Shared/Game/State/CharSelectData.cs @@ -7,6 +7,7 @@ using System.Collections; using System.Collections.Generic; using System.IO; +using MLAPI.NetworkVariable.Collections; using UnityEngine; namespace BossRoom @@ -91,146 +92,17 @@ public void NetworkSerialize(NetworkSerializer serializer) } } - void OnDestroy() - { - m_LobbyPlayers.Cleanup(); - } - - /// - /// TEMP! This is substitute for NetworkVariableList<>. It will be replaced by a NetworkVariableList when those are once again - /// supported. - /// - public class LobbyPlayerArray - { - private List m_LobbyPlayers; - private CharSelectData m_CharSelectData; - - /// - /// Event that gets raised when the array has changed somehow. - /// - public event Action ArrayChangedEvent; - - public LobbyPlayerArray(CharSelectData data, int count ) - { - m_LobbyPlayers = new List(); - m_CharSelectData = data; - - if (NetworkManager.Singleton.IsServer) - { - NetworkManager.Singleton.OnClientConnectedCallback += ClientConnected; - } - } - - void ClientConnected(ulong clientId) - { - m_CharSelectData.StartCoroutine(CoroClientConnected(clientId)); - } - - private IEnumerator CoroClientConnected(ulong clientId) - { - yield return new WaitForSeconds(2); - - //send the new guy our initial state. - m_CharSelectData.LobbyPlayerUpdateArrayClientRpc(m_LobbyPlayers.ToArray()); - } - - public int Count { get { return m_LobbyPlayers.Count; } } - - public void Add(LobbyPlayerState state, bool fromSync=false) - { - m_LobbyPlayers.Add(state); - ArrayChangedEvent?.Invoke(this); - - if (NetworkManager.Singleton.IsServer ) - { - m_CharSelectData.LobbyPlayerUpdateArrayClientRpc(m_LobbyPlayers.ToArray()); - } - } - - public void RemoveAt(int index) - { - m_LobbyPlayers.RemoveAt(index); - ArrayChangedEvent?.Invoke(this); - - if (NetworkManager.Singleton.IsServer ) - { - m_CharSelectData.LobbyPlayerUpdateArrayClientRpc(m_LobbyPlayers.ToArray()); - } - } - - public System.Collections.IEnumerator GetEnumerator() - { - return m_LobbyPlayers.GetEnumerator(); - } - - public LobbyPlayerState this[int i] - { - get - { - return m_LobbyPlayers[i]; - } - set - { - if(!NetworkManager.Singleton.IsServer ) - { - throw new MLAPI.Exceptions.NotServerException("CharSelectData.LobbyPlayerArray can only be written to on the server!"); - } - else - { - m_LobbyPlayers[i] = value; - m_CharSelectData.LobbyPlayerUpdateArrayClientRpc(m_LobbyPlayers.ToArray()); - ArrayChangedEvent?.Invoke(this); - } - } - } - - /// - /// Updates a single element. For use only be the CharSelectData class. - /// - public void ClientSyncUpdate(LobbyPlayerState[] playerArray ) - { - if( !NetworkManager.Singleton.IsServer ) - { - m_LobbyPlayers.Clear(); - m_LobbyPlayers.AddRange(playerArray); - - ArrayChangedEvent?.Invoke(this); - } - } - - public void Cleanup() - { - if (NetworkManager.Singleton.IsServer) - { - NetworkManager.Singleton.OnClientConnectedCallback -= ClientConnected; - } - } - } - - /// - /// Receives a new array of LobbyPlayerStates and replaces the existing contents of our m_LobbyPlayerArray with them. This "maximalist approach" - /// is because it's tricky to send incremental array updates right now. You can't just send an initial state on client connection, and then - /// subsequent incremental updates, because you don't know exactly when the client's connection is going to be open for transmission. If you send - /// a client an incremental update while it still has its inital state message pending, it will get confused. - /// In any case, this system is meant to be temporary, and will be replaced when NetworkVariableList is supported again. - /// - [ClientRpc] - private void LobbyPlayerUpdateArrayClientRpc(LobbyPlayerState[] playerArray ) - { - m_LobbyPlayers.ClientSyncUpdate(playerArray); - } - - private LobbyPlayerArray m_LobbyPlayers; + private NetworkList m_LobbyPlayers; private void Awake() { - m_LobbyPlayers = new LobbyPlayerArray(this, 8); + m_LobbyPlayers = new NetworkList(); } /// /// Current state of all players in the lobby. /// - public LobbyPlayerArray LobbyPlayers { get { return m_LobbyPlayers; } } + public NetworkList LobbyPlayers { get { return m_LobbyPlayers; } } /// /// When this becomes true, the lobby is closed and in process of terminating (switching to gameplay). diff --git a/Assets/BossRoom/Scripts/Shared/Game/State/GameStateBehaviour.cs b/Assets/BossRoom/Scripts/Shared/Game/State/GameStateBehaviour.cs index 799bc582a..dfcab3cc3 100644 --- a/Assets/BossRoom/Scripts/Shared/Game/State/GameStateBehaviour.cs +++ b/Assets/BossRoom/Scripts/Shared/Game/State/GameStateBehaviour.cs @@ -91,6 +91,26 @@ protected virtual void OnDestroy() s_ActiveStateGO = null; } } + + protected virtual void OnApplicationQuit() + { + if (!isActiveAndEnabled) + return; + + if (IsHost) + { + NetworkManager.Singleton.StopHost(); + } + else if (IsClient) + { + NetworkManager.Singleton.StopClient(); + } + else if (IsServer) + { + NetworkManager.Singleton.StopServer(); + } + } + } } diff --git a/Assets/BossRoom/Scripts/Shared/Game/UI/Editor/NetworkLatencyWarning.cs b/Assets/BossRoom/Scripts/Shared/Game/UI/Editor/NetworkLatencyWarning.cs index 231c3786d..ecf09ddc7 100644 --- a/Assets/BossRoom/Scripts/Shared/Game/UI/Editor/NetworkLatencyWarning.cs +++ b/Assets/BossRoom/Scripts/Shared/Game/UI/Editor/NetworkLatencyWarning.cs @@ -3,6 +3,8 @@ using UnityEngine.UI; using MLAPI; using MLAPI.Transports; +using MLAPI.Transports.LiteNetLib; +using MLAPI.Transports.PhotonRealtime; using UnityEngine.Assertions; namespace BossRoom.Scripts.Editor @@ -26,7 +28,7 @@ void Update() { // adding this preprocessor directive check since LiteNetLib only injects latency in #DEBUG #if DEBUG - case LiteNetLibTransport.LiteNetLibTransport liteNetLibTransport: + case LiteNetLibTransport liteNetLibTransport: m_ArtificialLatencyEnabled = liteNetLibTransport.SimulatePacketLossChance > 0 || liteNetLibTransport.SimulateMinLatency > 0 || liteNetLibTransport.SimulateMaxLatency > 0; diff --git a/Assets/BossRoom/Scripts/Shared/Net/GameNetPortal.cs b/Assets/BossRoom/Scripts/Shared/Net/GameNetPortal.cs index edb432b3c..ebcaa93a8 100644 --- a/Assets/BossRoom/Scripts/Shared/Net/GameNetPortal.cs +++ b/Assets/BossRoom/Scripts/Shared/Net/GameNetPortal.cs @@ -1,8 +1,9 @@ using System; -using System.Net.Sockets; using MLAPI.Serialization.Pooled; using MLAPI.Transports; using MLAPI; +using MLAPI.Transports.LiteNetLib; +using MLAPI.Transports.PhotonRealtime; using UnityEngine; namespace BossRoom @@ -14,7 +15,7 @@ public enum ConnectStatus MatchStarted, //can't join, match is already in progress. Unknown, //can't join, reason unknown. } - + public enum OnlineMode { IpHost = 0, // The server is hosted directly and clients can join by ip address. @@ -166,7 +167,7 @@ public void StartHost(string ipaddress, int port) //DMW_NOTE: non-portable. We need to be updated when moving to UTP transport. switch (chosenTransport) { - case LiteNetLibTransport.LiteNetLibTransport liteNetLibTransport: + case LiteNetLibTransport liteNetLibTransport: liteNetLibTransport.Address = ipaddress; liteNetLibTransport.Port = (ushort)port; break; diff --git a/Assets/BossRoom/Scripts/Shared/TransportPicker.cs b/Assets/BossRoom/Scripts/Shared/TransportPicker.cs index bd10ad153..1c5d57284 100644 --- a/Assets/BossRoom/Scripts/Shared/TransportPicker.cs +++ b/Assets/BossRoom/Scripts/Shared/TransportPicker.cs @@ -1,9 +1,7 @@ using System; -using System.Collections; -using System.Collections.Generic; -using BossRoom; -using MLAPI; using MLAPI.Transports; +using MLAPI.Transports.LiteNetLib; +using MLAPI.Transports.PhotonRealtime; using MLAPI.Transports.UNET; using UnityEngine; using UnityEngine.Assertions; @@ -31,7 +29,7 @@ public class TransportPicker : MonoBehaviour void OnValidate() { - Assert.IsTrue(m_IpHostTransport == null || (m_IpHostTransport as UNetTransport || m_IpHostTransport as LiteNetLibTransport.LiteNetLibTransport), + Assert.IsTrue(m_IpHostTransport == null || (m_IpHostTransport as UNetTransport || m_IpHostTransport as LiteNetLibTransport), "IpHost transport must be either Unet or LiteNetLib transport."); Assert.IsTrue(m_RelayTransport == null || (m_RelayTransport as PhotonRealtimeTransport), "" + diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime.meta b/Assets/BossRoom/Shaders/UnityToonShader.meta similarity index 77% rename from Packages/com.unity.multiplayer.transport.litenet/Runtime.meta rename to Assets/BossRoom/Shaders/UnityToonShader.meta index 200b9073a..24310ee82 100644 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime.meta +++ b/Assets/BossRoom/Shaders/UnityToonShader.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 76d634f7c88c1da4cb3ea69d7bae43bb +guid: 2b6c56784e8f32146a75339aca226292 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/BossRoom/Shaders/ShadowReceiver.shader b/Assets/BossRoom/Shaders/UnityToonShader/ShadowReceiver.shader similarity index 100% rename from Assets/BossRoom/Shaders/ShadowReceiver.shader rename to Assets/BossRoom/Shaders/UnityToonShader/ShadowReceiver.shader diff --git a/Assets/BossRoom/Shaders/ShadowReceiver.shader.meta b/Assets/BossRoom/Shaders/UnityToonShader/ShadowReceiver.shader.meta similarity index 100% rename from Assets/BossRoom/Shaders/ShadowReceiver.shader.meta rename to Assets/BossRoom/Shaders/UnityToonShader/ShadowReceiver.shader.meta diff --git a/Assets/BossRoom/Shaders/Toon.shader b/Assets/BossRoom/Shaders/UnityToonShader/Toon.shader similarity index 100% rename from Assets/BossRoom/Shaders/Toon.shader rename to Assets/BossRoom/Shaders/UnityToonShader/Toon.shader diff --git a/Assets/BossRoom/Shaders/Toon.shader.meta b/Assets/BossRoom/Shaders/UnityToonShader/Toon.shader.meta similarity index 100% rename from Assets/BossRoom/Shaders/Toon.shader.meta rename to Assets/BossRoom/Shaders/UnityToonShader/Toon.shader.meta diff --git a/Assets/BossRoom/Shaders/ToonComplete.shader b/Assets/BossRoom/Shaders/UnityToonShader/ToonComplete.shader similarity index 100% rename from Assets/BossRoom/Shaders/ToonComplete.shader rename to Assets/BossRoom/Shaders/UnityToonShader/ToonComplete.shader diff --git a/Assets/BossRoom/Shaders/ToonComplete.shader.meta b/Assets/BossRoom/Shaders/UnityToonShader/ToonComplete.shader.meta similarity index 100% rename from Assets/BossRoom/Shaders/ToonComplete.shader.meta rename to Assets/BossRoom/Shaders/UnityToonShader/ToonComplete.shader.meta diff --git a/Assets/BossRoom/Shaders/UnityToonShader/license.txt b/Assets/BossRoom/Shaders/UnityToonShader/license.txt new file mode 100644 index 000000000..9bde37f62 --- /dev/null +++ b/Assets/BossRoom/Shaders/UnityToonShader/license.txt @@ -0,0 +1,28 @@ +The shaders in this directory are sourced from https://github.com/IronWarrior/UnityToonShader, +and are released under the following license: + + +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to \ No newline at end of file diff --git a/Packages/com.unity.multiplayer.transport.litenet/CHANGELOG.md.meta b/Assets/BossRoom/Shaders/UnityToonShader/license.txt.meta similarity index 75% rename from Packages/com.unity.multiplayer.transport.litenet/CHANGELOG.md.meta rename to Assets/BossRoom/Shaders/UnityToonShader/license.txt.meta index 575aeafa9..efada9562 100644 --- a/Packages/com.unity.multiplayer.transport.litenet/CHANGELOG.md.meta +++ b/Assets/BossRoom/Shaders/UnityToonShader/license.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 28f71d7dc1ed3bc4ba12892aa139f9e6 +guid: b53ca5171d6da91499b3ce2774ec8a98 TextScriptImporter: externalObjects: {} userData: diff --git a/Assets/BossRoom/Shaders/readme.txt b/Assets/BossRoom/Shaders/readme.txt deleted file mode 100644 index 2e99362e7..000000000 --- a/Assets/BossRoom/Shaders/readme.txt +++ /dev/null @@ -1,3 +0,0 @@ -Toon Shader courtesy of Roy Stan (https://roystan.net/). Believed to be open source, as it was found in -the "free and open-source tutorials" section of his website (the actual download was missing a license file). - diff --git a/Assets/BossRoom/Sounds/BossRoomMixer.mixer b/Assets/BossRoom/Sounds/BossRoomMixer.mixer new file mode 100644 index 000000000..bbb810f86 --- /dev/null +++ b/Assets/BossRoom/Sounds/BossRoomMixer.mixer @@ -0,0 +1,211 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!243 &-6199682581367681880 +AudioMixerGroupController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: SFX + m_AudioMixer: {fileID: 24100000} + m_GroupID: fd76fc8381079ed44bd44808594595b7 + m_Children: [] + m_Volume: ed443103acfbf6845862cb22de603bfb + m_Pitch: 6ebb1509e7d4bc7498404613b335adce + m_Send: 00000000000000000000000000000000 + m_Effects: + - {fileID: 4515882175651799323} + m_UserColorIndex: 0 + m_Mute: 0 + m_Solo: 0 + m_BypassEffects: 0 +--- !u!243 &-4341177700643628062 +AudioMixerGroupController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Footsteps + m_AudioMixer: {fileID: 24100000} + m_GroupID: e42e31bb7e2a73e48a226bb7c974601b + m_Children: [] + m_Volume: 99f2d6a311387654f9284dcf4ea3fd66 + m_Pitch: ad5ad9758bb20844cb010a46546cc6b3 + m_Send: 00000000000000000000000000000000 + m_Effects: + - {fileID: 56952139443996888} + m_UserColorIndex: 0 + m_Mute: 0 + m_Solo: 0 + m_BypassEffects: 0 +--- !u!241 &24100000 +AudioMixerController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: BossRoomMixer + m_OutputGroup: {fileID: 0} + m_MasterGroup: {fileID: 24300002} + m_Snapshots: + - {fileID: 24500006} + m_StartSnapshot: {fileID: 24500006} + m_SuspendThreshold: -80 + m_EnableSuspend: 1 + m_UpdateMode: 0 + m_ExposedParameters: + - guid: 99f2d6a311387654f9284dcf4ea3fd66 + name: FootstepsVolume + - guid: d2b6ffd92000b4249a4b1383c4614b7a + name: OverallVolume + - guid: ea84b695fbafdda4cbed1526f2ff26cd + name: MusicVolume + - guid: ed443103acfbf6845862cb22de603bfb + name: SfxVolume + m_AudioMixerGroupViews: + - guids: + - 6a717046ed04a914abfa6be91cc0ef18 + - 21ca9eac40434f9419ba4c2fa9d33cc1 + - fd76fc8381079ed44bd44808594595b7 + - e42e31bb7e2a73e48a226bb7c974601b + name: View + m_CurrentViewIndex: 0 + m_TargetSnapshot: {fileID: 24500006} +--- !u!243 &24300002 +AudioMixerGroupController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Master + m_AudioMixer: {fileID: 24100000} + m_GroupID: 6a717046ed04a914abfa6be91cc0ef18 + m_Children: + - {fileID: 4503646073280770931} + - {fileID: -6199682581367681880} + - {fileID: -4341177700643628062} + m_Volume: d2b6ffd92000b4249a4b1383c4614b7a + m_Pitch: acdb5f1c71d1ac642b0bdd7efe15e440 + m_Send: 00000000000000000000000000000000 + m_Effects: + - {fileID: 24400004} + m_UserColorIndex: 0 + m_Mute: 0 + m_Solo: 0 + m_BypassEffects: 0 +--- !u!244 &24400004 +AudioMixerEffectController: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_EffectID: 070ad148f06c1da47add7458e71e0f34 + m_EffectName: Attenuation + m_MixLevel: b430fbc925c396f498d0ae25117e7e67 + m_Parameters: [] + m_SendTarget: {fileID: 0} + m_EnableWetMix: 0 + m_Bypass: 0 +--- !u!245 &24500006 +AudioMixerSnapshotController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Snapshot + m_AudioMixer: {fileID: 24100000} + m_SnapshotID: 5ffad3dcc7c4bea48b6cfca683c5b836 + m_FloatValues: + 99f2d6a311387654f9284dcf4ea3fd66: 0 + d2b6ffd92000b4249a4b1383c4614b7a: 0 + m_TransitionOverrides: {} +--- !u!244 &56952139443996888 +AudioMixerEffectController: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_EffectID: ae288c8e5ea4b304eaf420a01d032d54 + m_EffectName: Attenuation + m_MixLevel: b764ae32ad1e8964b88bc88e80b02c9b + m_Parameters: [] + m_SendTarget: {fileID: 0} + m_EnableWetMix: 0 + m_Bypass: 0 +--- !u!244 &154589635068778099 +AudioMixerEffectController: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_EffectID: 51e14d34b5bd8d546b7d362cbe3ee1be + m_EffectName: Duck Volume + m_MixLevel: 630473b0a1b024b4bb6f824a532bf25a + m_Parameters: + - m_ParameterName: Threshold + m_GUID: 5f73c939cdfcfcd40a4072f78c6e13f4 + - m_ParameterName: Ratio + m_GUID: 85ea6cbfbc7c91e4cbbcb18f4580e992 + - m_ParameterName: Attack Time + m_GUID: 89006b9e405c5e04e9ab9ad1232a8431 + - m_ParameterName: Release Time + m_GUID: 39d1cfcc683ba444bb6ab6b0e32e44bc + - m_ParameterName: Make-up Gain + m_GUID: 2f0137d6559b3bb4eb415f6b6ae85394 + - m_ParameterName: Knee + m_GUID: c26962dfac019f041b3800caccbcb115 + - m_ParameterName: Sidechain Mix + m_GUID: 47db96495a82c684cbeb58e4303720c9 + m_SendTarget: {fileID: 0} + m_EnableWetMix: 0 + m_Bypass: 0 +--- !u!243 &4503646073280770931 +AudioMixerGroupController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Music + m_AudioMixer: {fileID: 24100000} + m_GroupID: 21ca9eac40434f9419ba4c2fa9d33cc1 + m_Children: [] + m_Volume: ea84b695fbafdda4cbed1526f2ff26cd + m_Pitch: 14eac7f58a50d8542b2f3e0677f84279 + m_Send: 00000000000000000000000000000000 + m_Effects: + - {fileID: 5717233539500400283} + m_UserColorIndex: 0 + m_Mute: 0 + m_Solo: 0 + m_BypassEffects: 0 +--- !u!244 &4515882175651799323 +AudioMixerEffectController: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_EffectID: 7f9e483ddb698c8448020815f067cb24 + m_EffectName: Attenuation + m_MixLevel: 82de9ca462cad1d4d972df4c302d9958 + m_Parameters: [] + m_SendTarget: {fileID: 0} + m_EnableWetMix: 0 + m_Bypass: 0 +--- !u!244 &5717233539500400283 +AudioMixerEffectController: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_EffectID: 6580f6fc3f0eb2d4cb75502be57653dc + m_EffectName: Attenuation + m_MixLevel: 53c8cf9eb8ed85d41ae34c6dfc17b411 + m_Parameters: [] + m_SendTarget: {fileID: 0} + m_EnableWetMix: 0 + m_Bypass: 0 diff --git a/Packages/com.unity.multiplayer.transport.litenet/LICENSE.md.meta b/Assets/BossRoom/Sounds/BossRoomMixer.mixer.meta similarity index 52% rename from Packages/com.unity.multiplayer.transport.litenet/LICENSE.md.meta rename to Assets/BossRoom/Sounds/BossRoomMixer.mixer.meta index 9ed597b46..201c5146c 100644 --- a/Packages/com.unity.multiplayer.transport.litenet/LICENSE.md.meta +++ b/Assets/BossRoom/Sounds/BossRoomMixer.mixer.meta @@ -1,7 +1,8 @@ fileFormatVersion: 2 -guid: 0112cf41b55769347836bdb4bfc2f66e -TextScriptImporter: +guid: e39f39bfdfb22b541bbc115192fc2809 +NativeFormatImporter: externalObjects: {} + mainObjectFileID: 24100000 userData: assetBundleName: assetBundleVariant: diff --git a/Assets/BossRoom/Textures/UI/StormFlag_logo.png b/Assets/BossRoom/Textures/UI/StormFlag_logo.png index 3d4355ff5..17af1f940 100644 --- a/Assets/BossRoom/Textures/UI/StormFlag_logo.png +++ b/Assets/BossRoom/Textures/UI/StormFlag_logo.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7c05401a322e63fb0aa0b332e3bebb008ab04a6d3d8b424ba4764db526130b98 -size 4501946 +oid sha256:732728f291a0a7322c16d7c3e5f1281c8e79f6ad3e96f355d8f9eafdb53f7170 +size 23972 diff --git a/Assets/BossRoom/Textures/UI/Title_BG.png b/Assets/BossRoom/Textures/UI/Title_BG.png deleted file mode 100644 index 9b5b5f009..000000000 --- a/Assets/BossRoom/Textures/UI/Title_BG.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9453cbb527e58e31cd109d26486448cfd1cf427cecfc95bb54faedc5f1a26c83 -size 2188800 diff --git a/Assets/BossRoom/Textures/UI/button_Disabled.png.meta b/Assets/BossRoom/Textures/UI/button_Disabled.png.meta index e0c9ac4f4..3be36ce55 100644 --- a/Assets/BossRoom/Textures/UI/button_Disabled.png.meta +++ b/Assets/BossRoom/Textures/UI/button_Disabled.png.meta @@ -1,5 +1,9 @@ fileFormatVersion: 2 +<<<<<<< HEAD:Assets/BossRoom/Textures/UI/button_Disabled.png.meta guid: 830c96afe1b19f9408d5ead518a09fe9 +======= +guid: 62d7fb22c0ec4164f9c6ef1c5846ca8c +>>>>>>> origin/release/v0.1.0-experimental:Assets/BossRoom/Textures/Environment/env_deco_boss_arena_mtl.tga.meta TextureImporter: internalIDToNameTable: [] externalObjects: {} diff --git a/Assets/BossRoom/Textures/UI/inputfield_Blank.png.meta b/Assets/BossRoom/Textures/UI/inputfield_Blank.png.meta index d09000dc7..a2b3d0d3e 100644 --- a/Assets/BossRoom/Textures/UI/inputfield_Blank.png.meta +++ b/Assets/BossRoom/Textures/UI/inputfield_Blank.png.meta @@ -47,7 +47,7 @@ TextureImporter: alignment: 0 spritePivot: {x: 0.5, y: 0.5} spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteBorder: {x: 7, y: 7, z: 7, w: 7} spriteGenerateFallbackPhysicsShape: 1 alphaUsage: 1 alphaIsTransparency: 1 diff --git a/Assets/BossRoom/Textures/UI/ui_btn_blank.png.meta b/Assets/BossRoom/Textures/UI/ui_btn_blank.png.meta index cf437f8f3..4ab60afd3 100644 --- a/Assets/BossRoom/Textures/UI/ui_btn_blank.png.meta +++ b/Assets/BossRoom/Textures/UI/ui_btn_blank.png.meta @@ -47,7 +47,7 @@ TextureImporter: alignment: 0 spritePivot: {x: 0.5, y: 0.5} spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteBorder: {x: 7, y: 7, z: 7, w: 7} spriteGenerateFallbackPhysicsShape: 1 alphaUsage: 1 alphaIsTransparency: 1 diff --git a/Assets/BossRoom/Textures/UI/ui_sound_settings.png b/Assets/BossRoom/Textures/UI/ui_sound_settings.png new file mode 100644 index 000000000..84f8e0b7a --- /dev/null +++ b/Assets/BossRoom/Textures/UI/ui_sound_settings.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7dd2003dbf213c01004bc3255a5602f7d3e45b5c08a3d7fa3cbd310b62012d52 +size 21288 diff --git a/Assets/BossRoom/Textures/UI/Title_BG.png.meta b/Assets/BossRoom/Textures/UI/ui_sound_settings.png.meta similarity index 98% rename from Assets/BossRoom/Textures/UI/Title_BG.png.meta rename to Assets/BossRoom/Textures/UI/ui_sound_settings.png.meta index 71498ebb2..6748e79fc 100644 --- a/Assets/BossRoom/Textures/UI/Title_BG.png.meta +++ b/Assets/BossRoom/Textures/UI/ui_sound_settings.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: aa1a90221e6adf542887197de3c3852d +guid: 66a470aa734e32040b424353a0f0de39 TextureImporter: internalIDToNameTable: [] externalObjects: {} diff --git a/Assets/BossRoom/VFX/Materials/FX_M_GroundCrack.mat b/Assets/BossRoom/VFX/Materials/FX_M_GroundCrack.mat index 2b2fb5a47..bcfd78fd0 100644 --- a/Assets/BossRoom/VFX/Materials/FX_M_GroundCrack.mat +++ b/Assets/BossRoom/VFX/Materials/FX_M_GroundCrack.mat @@ -47,6 +47,10 @@ Material: m_Texture: {fileID: 2800000, guid: 79ffdab583577334cb184c42218dce5f, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _MainTexture: + m_Texture: {fileID: 2800000, guid: 79ffdab583577334cb184c42218dce5f, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} - _MetallicGlossMap: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} @@ -95,6 +99,7 @@ Material: - _SpecularHighlights: 1 - _SrcBlend: 1 - _StepSubtract: 1 + - _Switch_Alpha: 0 - _UVSec: 0 - _UseAlphaChannel: 0 - _VertexAOpacity: 1 diff --git a/Assets/BossRoom/VFX/Materials/FX_M_GroundCrack_2.mat b/Assets/BossRoom/VFX/Materials/FX_M_GroundCrack_2.mat index 2bd6c9fe6..0ae3c929b 100644 --- a/Assets/BossRoom/VFX/Materials/FX_M_GroundCrack_2.mat +++ b/Assets/BossRoom/VFX/Materials/FX_M_GroundCrack_2.mat @@ -47,6 +47,10 @@ Material: m_Texture: {fileID: 2800000, guid: 34a4d61e192b21a4bb3ab13482c439d7, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _MainTexture: + m_Texture: {fileID: 2800000, guid: 34a4d61e192b21a4bb3ab13482c439d7, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} - _MetallicGlossMap: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} @@ -95,6 +99,7 @@ Material: - _SpecularHighlights: 1 - _SrcBlend: 1 - _StepSubtract: 1 + - _Switch_Alpha: 0 - _UVSec: 0 - _UseAlphaChannel: 0 - _VertexAOpacity: 1 diff --git a/Assets/BossRoom/VFX/Materials/FX_M_StylizeSmoke.mat b/Assets/BossRoom/VFX/Materials/FX_M_StylizeSmoke.mat index f765180a2..ef1789ec5 100644 --- a/Assets/BossRoom/VFX/Materials/FX_M_StylizeSmoke.mat +++ b/Assets/BossRoom/VFX/Materials/FX_M_StylizeSmoke.mat @@ -9,7 +9,8 @@ Material: m_PrefabAsset: {fileID: 0} m_Name: FX_M_StylizeSmoke m_Shader: {fileID: 4800000, guid: 19584968e8d53424c9ce71b2c72d64f4, type: 3} - m_ShaderKeywords: _HASDYNAMICDISSOLVE_ON _STEPSUBTRACT_ON _VERTEXAOPACITY_ON + m_ShaderKeywords: _HASDYNAMICDISSOLVE_ON _HASTEXTUREDISSOLVE_ON _STEPSUBTRACT_ON + _SWITCH_ALPHA_ON _VERTEXAOPACITY_ON m_LightmapFlags: 0 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 @@ -47,6 +48,10 @@ Material: m_Texture: {fileID: 2800000, guid: 1ee97322756ea2c489f9311bd5c9f72d, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _MainTexture: + m_Texture: {fileID: 2800000, guid: fa9d4375ce230e1488b5a2680fd71074, type: 3} + m_Scale: {x: 1, y: 2} + m_Offset: {x: -0.25, y: -0.25} - _MetallicGlossMap: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} @@ -96,6 +101,7 @@ Material: - _SpecularHighlights: 1 - _SrcBlend: 1 - _StepSubtract: 1 + - _Switch_Alpha: 1 - _UVSec: 0 - _UseAlphaChannel: 0 - _VertexAOpacity: 1 diff --git a/Assets/BossRoom/VFX/Materials/FX_M_Stylize_Smoke_falldown.mat b/Assets/BossRoom/VFX/Materials/FX_M_Stylize_Smoke_falldown.mat index ac730d8ca..e415ecbe0 100644 --- a/Assets/BossRoom/VFX/Materials/FX_M_Stylize_Smoke_falldown.mat +++ b/Assets/BossRoom/VFX/Materials/FX_M_Stylize_Smoke_falldown.mat @@ -9,7 +9,7 @@ Material: m_PrefabAsset: {fileID: 0} m_Name: FX_M_Stylize_Smoke_falldown m_Shader: {fileID: 4800000, guid: 19584968e8d53424c9ce71b2c72d64f4, type: 3} - m_ShaderKeywords: _HASTEXTUREDISSOLVE_ON _STEPSUBTRACT_ON _VERTEXAOPACITY_ON + m_ShaderKeywords: _HASTEXTUREDISSOLVE_ON _STEPSUBTRACT_ON _SWITCH_ALPHA_ON _VERTEXAOPACITY_ON m_LightmapFlags: 0 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 @@ -47,6 +47,10 @@ Material: m_Texture: {fileID: 2800000, guid: 1ee97322756ea2c489f9311bd5c9f72d, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _MainTexture: + m_Texture: {fileID: 2800000, guid: cc5ee705b0abdca40b904a2b89a38d8b, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} - _MetallicGlossMap: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} @@ -87,6 +91,7 @@ Material: - _SpecularHighlights: 1 - _SrcBlend: 1 - _StepSubtract: 1 + - _Switch_Alpha: 1 - _UVSec: 0 - _UseAlphaChannel: 0 - _VertexAOpacity: 1 diff --git a/Assets/BossRoom/VFX/Materials/FX_MaskedPanner.mat b/Assets/BossRoom/VFX/Materials/FX_MaskedPanner.mat index 91dc7c12c..90ca91bfd 100644 --- a/Assets/BossRoom/VFX/Materials/FX_MaskedPanner.mat +++ b/Assets/BossRoom/VFX/Materials/FX_MaskedPanner.mat @@ -10,7 +10,7 @@ Material: m_Name: FX_MaskedPanner m_Shader: {fileID: 4800000, guid: 19584968e8d53424c9ce71b2c72d64f4, type: 3} m_ShaderKeywords: _HASFLOWEFFECT_ON _HASMASK_ON _HASTEXTUREDISSOLVE_ON _STEPSUBTRACT_ON - _VERTEXAOPACITY_ON + _SWITCH_ALPHA_ON _VERTEXAOPACITY_ON m_LightmapFlags: 0 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 @@ -48,6 +48,10 @@ Material: m_Texture: {fileID: 2800000, guid: 037eea83bb383c34ebc2ee292c903057, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _MainTexture: + m_Texture: {fileID: 2800000, guid: 6eb539aefcd5a7846af91c0a77161b92, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} - _MetallicGlossMap: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} @@ -104,6 +108,7 @@ Material: - _SpecularHighlights: 1 - _SrcBlend: 1 - _StepSubtract: 1 + - _Switch_Alpha: 1 - _UVSec: 0 - _UseAlphaChannel: 0 - _Use_alpha: 0 diff --git a/Assets/BossRoom/VFX/Materials/M_MotionFlash.mat b/Assets/BossRoom/VFX/Materials/M_MotionFlash.mat index 0c8cf6ded..7d9384c02 100644 --- a/Assets/BossRoom/VFX/Materials/M_MotionFlash.mat +++ b/Assets/BossRoom/VFX/Materials/M_MotionFlash.mat @@ -10,7 +10,7 @@ Material: m_Name: M_MotionFlash m_Shader: {fileID: 4800000, guid: 19584968e8d53424c9ce71b2c72d64f4, type: 3} m_ShaderKeywords: _HASFLOWEFFECT_ON _HASMASK_ON _HASTEXTUREDISSOLVE_ON _STEPSUBTRACT_ON - _VERTEXAOPACITY_ON + _SWITCH_ALPHA_ON _VERTEXAOPACITY_ON m_LightmapFlags: 0 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 @@ -48,6 +48,10 @@ Material: m_Texture: {fileID: 2800000, guid: 037eea83bb383c34ebc2ee292c903057, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _MainTexture: + m_Texture: {fileID: 2800000, guid: fa9d4375ce230e1488b5a2680fd71074, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} - _MetallicGlossMap: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} @@ -104,6 +108,7 @@ Material: - _SpecularHighlights: 1 - _SrcBlend: 1 - _StepSubtract: 1 + - _Switch_Alpha: 1 - _UVSec: 0 - _UseAlphaChannel: 0 - _Use_alpha: 0 diff --git a/Assets/BossRoom/VFX/Prefabs/Boss/FX_Boss_Charge_Motion.prefab b/Assets/BossRoom/VFX/Prefabs/Boss/FX_Boss_Charge_Motion.prefab index d556aef9c..d7cc29e2c 100644 --- a/Assets/BossRoom/VFX/Prefabs/Boss/FX_Boss_Charge_Motion.prefab +++ b/Assets/BossRoom/VFX/Prefabs/Boss/FX_Boss_Charge_Motion.prefab @@ -5723,7 +5723,7 @@ ParticleSystem: m_PostInfinity: 2 m_RotationOrder: 4 EmissionModule: - enabled: 1 + enabled: 0 serializedVersion: 4 rateOverTime: serializedVersion: 2 @@ -14551,7 +14551,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!4 &2036539137060380902 Transform: m_ObjectHideFlags: 0 @@ -24187,7 +24187,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!4 &2036539137724310654 Transform: m_ObjectHideFlags: 0 @@ -34724,7 +34724,7 @@ ParticleSystem: m_PostInfinity: 2 m_RotationOrder: 4 EmissionModule: - enabled: 1 + enabled: 0 serializedVersion: 4 rateOverTime: serializedVersion: 2 diff --git a/Assets/BossRoom/VFX/Prefabs/Environment/FX_Torch_Fire.prefab b/Assets/BossRoom/VFX/Prefabs/Environment/FX_Torch_Fire.prefab index 0e2fef18c..90dfb989d 100644 --- a/Assets/BossRoom/VFX/Prefabs/Environment/FX_Torch_Fire.prefab +++ b/Assets/BossRoom/VFX/Prefabs/Environment/FX_Torch_Fire.prefab @@ -14577,7 +14577,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!4 &4624227725626333199 Transform: m_ObjectHideFlags: 0 diff --git a/Assets/BossRoom/VFX/Shaders/Prewarming.shadervariants b/Assets/BossRoom/VFX/Shaders/Prewarming.shadervariants new file mode 100644 index 000000000..fc16d341c --- /dev/null +++ b/Assets/BossRoom/VFX/Shaders/Prewarming.shadervariants @@ -0,0 +1,835 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!200 &20000000 +ShaderVariantCollection: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Prewarming + m_Shaders: + - first: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0} + second: + variants: + - keywords: + passType: 0 + - keywords: DIRECTIONAL + passType: 0 + - keywords: POINT + passType: 0 + - keywords: DIRECTIONAL UNITY_HDR_ON + passType: 0 + - keywords: POINT UNITY_HDR_ON + passType: 0 + - keywords: DIRECTIONAL SHADOWS_SCREEN UNITY_HDR_ON + passType: 0 + - keywords: POINT SHADOWS_CUBE SHADOWS_SOFT UNITY_HDR_ON + passType: 0 + - keywords: BILLBOARD_FACE_CAMERA_POS DIRECTIONAL LIGHTPROBE_SH SOFTPARTICLES_ON + UNITY_HDR_ON + passType: 0 + - keywords: BILLBOARD_FACE_CAMERA_POS LIGHTPROBE_SH POINT SOFTPARTICLES_ON + UNITY_HDR_ON + passType: 0 + - keywords: BILLBOARD_FACE_CAMERA_POS LIGHTPROBE_SH POINT SHADOWS_CUBE SHADOWS_SOFT + SOFTPARTICLES_ON UNITY_HDR_ON + passType: 0 + - keywords: BILLBOARD_FACE_CAMERA_POS DIRECTIONAL LIGHTPROBE_SH SHADOWS_SCREEN + SHADOWS_SOFT SHADOWS_SPLIT_SPHERES SOFTPARTICLES_ON UNITY_HDR_ON + passType: 0 + - first: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0} + second: + variants: + - keywords: + passType: 0 + - keywords: UNITY_HDR_ON + passType: 0 + - keywords: BILLBOARD_FACE_CAMERA_POS LIGHTPROBE_SH SOFTPARTICLES_ON UNITY_HDR_ON + passType: 0 + - first: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0} + second: + variants: + - keywords: SHADOWS_SPLIT_SPHERES + passType: 0 + - keywords: SHADOWS_SINGLE_CASCADE SHADOWS_SPLIT_SPHERES + passType: 0 + - keywords: BILLBOARD_FACE_CAMERA_POS DIRECTIONAL LIGHTPROBE_SH SHADOWS_DEPTH + SHADOWS_SPLIT_SPHERES SOFTPARTICLES_ON UNITY_HDR_ON + passType: 0 + - first: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0} + second: + variants: + - keywords: + passType: 0 + - keywords: BILLBOARD_FACE_CAMERA_POS SOFTPARTICLES_ON UNITY_HDR_ON _ALPHATEST_ON + passType: 0 + - first: {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} + second: + variants: + - keywords: DIRECTIONAL + passType: 4 + - keywords: POINT + passType: 5 + - first: {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} + second: + variants: + - keywords: + passType: 0 + - keywords: BILLBOARD_FACE_CAMERA_POS SOFTPARTICLES_ON + passType: 0 + - keywords: BILLBOARD_FACE_CAMERA_POS SOFTPARTICLES_ON UNITY_HDR_ON + passType: 0 + - keywords: BILLBOARD_FACE_CAMERA_POS SOFTPARTICLES_ON UNITY_HDR_ON VERTEXLIGHT_ON + passType: 0 + - keywords: UNITY_UI_ALPHACLIP + passType: 0 + - first: {fileID: 19, guid: 0000000000000000f000000000000000, type: 0} + second: + variants: + - keywords: + passType: 0 + - keywords: BILLBOARD_FACE_CAMERA_POS LIGHTPROBE_SH POINT SOFTPARTICLES_ON + UNITY_HDR_ON + passType: 0 + - keywords: BILLBOARD_FACE_CAMERA_POS LIGHTPROBE_SH POINT SHADOWS_CUBE SHADOWS_SOFT + SOFTPARTICLES_ON UNITY_HDR_ON + passType: 0 + - first: {fileID: 65, guid: 0000000000000000f000000000000000, type: 0} + second: + variants: + - keywords: + passType: 0 + - keywords: BILLBOARD_FACE_CAMERA_POS DIRECTIONAL LIGHTPROBE_SH SOFTPARTICLES_ON + UNITY_HDR_ON + passType: 0 + - first: {fileID: 66, guid: 0000000000000000f000000000000000, type: 0} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + second: + variants: + - keywords: DIRECTIONAL LIGHTPROBE_SH + passType: 4 + - keywords: DIRECTIONAL LIGHTPROBE_SH SHADOWS_SCREEN + passType: 4 + - keywords: DIRECTIONAL LIGHTPROBE_SH _EMISSION + passType: 4 + - keywords: DIRECTIONAL LIGHTPROBE_SH _NORMALMAP + passType: 4 + - keywords: DIRECTIONAL LIGHTPROBE_SH _EMISSION _NORMALMAP + passType: 4 + - keywords: DIRECTIONAL LIGHTPROBE_SH _ALPHATEST_ON + passType: 4 + - keywords: DIRECTIONAL LIGHTPROBE_SH _ALPHATEST_ON _EMISSION + passType: 4 + - keywords: DIRECTIONAL LIGHTPROBE_SH SHADOWS_SCREEN _ALPHATEST_ON _EMISSION + passType: 4 + - keywords: DIRECTIONAL LIGHTPROBE_SH _ALPHABLEND_ON + passType: 4 + - keywords: DIRECTIONAL LIGHTPROBE_SH _ALPHAPREMULTIPLY_ON + passType: 4 + - keywords: DIRECTIONAL LIGHTPROBE_SH _METALLICGLOSSMAP _NORMALMAP + passType: 4 + - keywords: DIRECTIONAL LIGHTPROBE_SH SHADOWS_SCREEN _METALLICGLOSSMAP _NORMALMAP + passType: 4 + - keywords: DIRECTIONAL + passType: 5 + - keywords: POINT + passType: 5 + - keywords: POINT SHADOWS_CUBE + passType: 5 + - keywords: POINT SHADOWS_CUBE SHADOWS_SOFT + passType: 5 + - keywords: DIRECTIONAL _NORMALMAP + passType: 5 + - keywords: POINT _NORMALMAP + passType: 5 + - keywords: POINT SHADOWS_CUBE _NORMALMAP + passType: 5 + - keywords: POINT SHADOWS_CUBE SHADOWS_SOFT _NORMALMAP + passType: 5 + - keywords: DIRECTIONAL _ALPHATEST_ON + passType: 5 + - keywords: POINT _ALPHATEST_ON + passType: 5 + - keywords: POINT SHADOWS_CUBE _ALPHATEST_ON + passType: 5 + - keywords: POINT SHADOWS_CUBE SHADOWS_SOFT _ALPHATEST_ON + passType: 5 + - keywords: DIRECTIONAL _ALPHABLEND_ON + passType: 5 + - keywords: POINT _ALPHABLEND_ON + passType: 5 + - keywords: DIRECTIONAL _ALPHAPREMULTIPLY_ON + passType: 5 + - keywords: POINT _ALPHAPREMULTIPLY_ON + passType: 5 + - keywords: DIRECTIONAL _METALLICGLOSSMAP _NORMALMAP + passType: 5 + - keywords: POINT _METALLICGLOSSMAP _NORMALMAP + passType: 5 + - keywords: POINT SHADOWS_CUBE _METALLICGLOSSMAP _NORMALMAP + passType: 5 + - keywords: POINT SHADOWS_CUBE SHADOWS_SOFT _METALLICGLOSSMAP _NORMALMAP + passType: 5 + - keywords: + passType: 8 + - keywords: SHADOWS_DEPTH + passType: 8 + - keywords: SHADOWS_CUBE + passType: 8 + - keywords: _EMISSION + passType: 8 + - keywords: BILLBOARD_FACE_CAMERA_POS LIGHTPROBE_SH POINT SHADOWS_CUBE SHADOWS_SOFT + SOFTPARTICLES_ON UNITY_HDR_ON + passType: 8 + - keywords: SHADOWS_DEPTH _ALPHATEST_ON + passType: 8 + - keywords: SHADOWS_CUBE _ALPHATEST_ON + passType: 8 + - keywords: _ALPHATEST_ON _EMISSION + passType: 8 + - keywords: DIRECTIONAL LIGHTPROBE_SH SHADOWS_DEPTH SHADOWS_SOFT SHADOWS_SPLIT_SPHERES + SOFTPARTICLES_ON UNITY_HDR_ON _ALPHATEST_ON _EMISSION + passType: 8 + - keywords: BILLBOARD_FACE_CAMERA_POS LIGHTPROBE_SH POINT SHADOWS_CUBE SHADOWS_SOFT + SOFTPARTICLES_ON UNITY_HDR_ON _ALPHATEST_ON _EMISSION + passType: 8 + - keywords: SHADOWS_DEPTH _ALPHABLEND_ON + passType: 8 + - keywords: SHADOWS_CUBE _ALPHABLEND_ON + passType: 8 + - keywords: SHADOWS_DEPTH _ALPHAPREMULTIPLY_ON + passType: 8 + - keywords: SHADOWS_CUBE _ALPHAPREMULTIPLY_ON + passType: 8 + - keywords: SHADOWS_DEPTH _METALLICGLOSSMAP + passType: 8 + - keywords: SHADOWS_CUBE _METALLICGLOSSMAP + passType: 8 + - keywords: _METALLICGLOSSMAP _NORMALMAP + passType: 8 + - keywords: DIRECTIONAL LIGHTPROBE_SH SHADOWS_DEPTH SHADOWS_SOFT SHADOWS_SPLIT_SPHERES + SOFTPARTICLES_ON UNITY_HDR_ON _METALLICGLOSSMAP _NORMALMAP + passType: 8 + - keywords: BILLBOARD_FACE_CAMERA_POS LIGHTPROBE_SH POINT SHADOWS_CUBE SHADOWS_SOFT + SOFTPARTICLES_ON UNITY_HDR_ON _METALLICGLOSSMAP _NORMALMAP + passType: 8 + - keywords: LIGHTPROBE_SH UNITY_HDR_ON + passType: 10 + - keywords: LIGHTPROBE_SH UNITY_HDR_ON _EMISSION + passType: 10 + - keywords: BILLBOARD_FACE_CAMERA_POS LIGHTPROBE_SH SOFTPARTICLES_ON UNITY_HDR_ON + passType: 10 + - keywords: BILLBOARD_FACE_CAMERA_POS LIGHTPROBE_SH SOFTPARTICLES_ON UNITY_HDR_ON + _EMISSION + passType: 10 + - keywords: LIGHTPROBE_SH UNITY_HDR_ON _NORMALMAP + passType: 10 + - keywords: LIGHTPROBE_SH UNITY_HDR_ON _EMISSION _NORMALMAP + passType: 10 + - keywords: LIGHTPROBE_SH _ALPHATEST_ON + passType: 10 + - keywords: LIGHTPROBE_SH _ALPHATEST_ON _EMISSION + passType: 10 + - keywords: LIGHTPROBE_SH UNITY_HDR_ON _ALPHATEST_ON + passType: 10 + - keywords: LIGHTPROBE_SH UNITY_HDR_ON _ALPHATEST_ON _EMISSION + passType: 10 + - keywords: BILLBOARD_FACE_CAMERA_POS LIGHTPROBE_SH SOFTPARTICLES_ON UNITY_HDR_ON + _ALPHATEST_ON _EMISSION + passType: 10 + - keywords: LIGHTPROBE_SH _METALLICGLOSSMAP _NORMALMAP + passType: 10 + - keywords: LIGHTPROBE_SH UNITY_HDR_ON _METALLICGLOSSMAP _NORMALMAP + passType: 10 + - keywords: BILLBOARD_FACE_CAMERA_POS LIGHTPROBE_SH SOFTPARTICLES_ON UNITY_HDR_ON + _METALLICGLOSSMAP _NORMALMAP + passType: 10 + - first: {fileID: 6, guid: 0000000000000000f000000000000000, type: 0} + second: + variants: + - keywords: SHADOWS_DEPTH + passType: 8 + - keywords: SHADOWS_CUBE + passType: 8 + - keywords: INSTANCING_ON SHADOWS_DEPTH + passType: 8 + - first: {fileID: 106, guid: 0000000000000000f000000000000000, type: 0} + second: + variants: + - keywords: BILLBOARD_FACE_CAMERA_POS SOFTPARTICLES_ON UNITY_HDR_ON + passType: 0 + - keywords: _SUNDISK_NONE + passType: 0 + - keywords: _SUNDISK_SIMPLE + passType: 0 + - keywords: BILLBOARD_FACE_CAMERA_POS SOFTPARTICLES_ON UNITY_HDR_ON _SUNDISK_SIMPLE + passType: 0 + - first: {fileID: 200, guid: 0000000000000000f000000000000000, type: 0} + second: + variants: + - keywords: SOFTPARTICLES_ON + passType: 0 + - first: {fileID: 207, guid: 0000000000000000f000000000000000, type: 0} + second: + variants: + - keywords: SOFTPARTICLES_ON + passType: 0 + - first: {fileID: 211, guid: 0000000000000000f000000000000000, type: 0} + second: + variants: + - keywords: + passType: 4 + - keywords: SOFTPARTICLES_ON + passType: 4 + - keywords: PROCEDURAL_INSTANCING_ON + passType: 4 + - keywords: PROCEDURAL_INSTANCING_ON SOFTPARTICLES_ON + passType: 4 + - keywords: BILLBOARD_FACE_CAMERA_POS LIGHTPROBE_SH PROCEDURAL_INSTANCING_ON + SOFTPARTICLES_ON UNITY_HDR_ON VERTEXLIGHT_ON _ALPHABLEND_ON _COLOROVERLAY_ON + passType: 4 + - keywords: _FADING_ON + passType: 4 + - keywords: SOFTPARTICLES_ON _FADING_ON + passType: 4 + - keywords: PROCEDURAL_INSTANCING_ON SOFTPARTICLES_ON _FADING_ON + passType: 4 + - keywords: BILLBOARD_FACE_CAMERA_POS LIGHTPROBE_SH PROCEDURAL_INSTANCING_ON + SOFTPARTICLES_ON UNITY_HDR_ON VERTEXLIGHT_ON _ALPHABLEND_ON _EMISSION _FADING_ON + passType: 4 + - keywords: INSTANCING_ON SHADOWS_DEPTH _ALPHABLEND_ON + passType: 8 + - keywords: PROCEDURAL_INSTANCING_ON SHADOWS_DEPTH _ALPHABLEND_ON + passType: 8 + - keywords: SHADOWS_CUBE _ALPHABLEND_ON _COLOROVERLAY_ON + passType: 8 + - keywords: PROCEDURAL_INSTANCING_ON _ALPHABLEND_ON _COLOROVERLAY_ON + passType: 8 + - keywords: PROCEDURAL_INSTANCING_ON SHADOWS_DEPTH _ALPHABLEND_ON _COLOROVERLAY_ON + passType: 8 + - keywords: PROCEDURAL_INSTANCING_ON _ALPHABLEND_ON _EMISSION _FADING_ON + passType: 8 + - keywords: + passType: 13 + - keywords: PROCEDURAL_INSTANCING_ON + passType: 13 + - first: {fileID: 9000, guid: 0000000000000000f000000000000000, type: 0} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 9001, guid: 0000000000000000f000000000000000, type: 0} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 9002, guid: 0000000000000000f000000000000000, type: 0} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 9003, guid: 0000000000000000f000000000000000, type: 0} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 9004, guid: 0000000000000000f000000000000000, type: 0} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 9007, guid: 0000000000000000f000000000000000, type: 0} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 9101, guid: 0000000000000000f000000000000000, type: 0} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 9103, guid: 0000000000000000f000000000000000, type: 0} + second: + variants: + - keywords: + passType: 0 + - keywords: BILLBOARD_FACE_CAMERA_POS SOFTPARTICLES_ON + passType: 0 + - first: {fileID: 10720, guid: 0000000000000000f000000000000000, type: 0} + second: + variants: + - keywords: + passType: 0 + - keywords: BILLBOARD_FACE_CAMERA_POS SOFTPARTICLES_ON UNITY_HDR_ON _METALLICGLOSSMAP + _NORMALMAP + passType: 0 + - keywords: BILLBOARD_FACE_CAMERA_POS SOFTPARTICLES_ON UNITY_HDR_ON VERTEXLIGHT_ON + _METALLICGLOSSMAP _NORMALMAP + passType: 0 + - first: {fileID: 10750, guid: 0000000000000000f000000000000000, type: 0} + second: + variants: + - keywords: + passType: 0 + - keywords: BILLBOARD_FACE_CAMERA_POS SOFTPARTICLES_ON + passType: 0 + - first: {fileID: 10751, guid: 0000000000000000f000000000000000, type: 0} + second: + variants: + - keywords: + passType: 0 + - keywords: BILLBOARD_FACE_CAMERA_POS SOFTPARTICLES_ON UNITY_HDR_ON _ALPHATEST_ON + passType: 0 + - keywords: BILLBOARD_FACE_CAMERA_POS SHADOWS_SCREEN SHADOWS_SOFT SHADOWS_SPLIT_SPHERES + SOFTPARTICLES_ON UNITY_HDR_ON _ALPHATEST_ON + passType: 0 + - first: {fileID: 10755, guid: 0000000000000000f000000000000000, type: 0} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 10760, guid: 0000000000000000f000000000000000, type: 0} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 10764, guid: 0000000000000000f000000000000000, type: 0} + second: + variants: + - keywords: DIRECTIONAL + passType: 4 + - keywords: DIRECTIONAL LIGHTPROBE_SH + passType: 4 + - keywords: DIRECTIONAL + passType: 5 + - keywords: POINT + passType: 5 + - first: {fileID: 10765, guid: 0000000000000000f000000000000000, type: 0} + second: + variants: + - keywords: DIRECTIONAL + passType: 4 + - keywords: DIRECTIONAL LIGHTPROBE_SH + passType: 4 + - keywords: BILLBOARD_FACE_CAMERA_POS SOFTPARTICLES_ON _EMISSION + passType: 4 + - keywords: DIRECTIONAL + passType: 5 + - keywords: POINT + passType: 5 + - keywords: BILLBOARD_FACE_CAMERA_POS SOFTPARTICLES_ON _EMISSION + passType: 5 + - first: {fileID: 4800000, guid: 3020ac7ece79a7f4eb789a236f8bd6c5, type: 3} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 4800000, guid: 41c49b64d906a384cab2d953a43231e3, type: 3} + second: + variants: + - keywords: DIRECTIONAL + passType: 4 + - keywords: DIRECTIONAL LIGHTPROBE_SH + passType: 4 + - keywords: DIRECTIONAL LIGHTPROBE_SH SHADOWS_SCREEN + passType: 4 + - keywords: BILLBOARD_FACE_CAMERA_POS DIRECTIONAL LIGHTPROBE_SH SOFTPARTICLES_ON + UNITY_HDR_ON _NORMALMAP + passType: 4 + - keywords: BILLBOARD_FACE_CAMERA_POS DIRECTIONAL LIGHTPROBE_SH SHADOWS_SCREEN + SHADOWS_SOFT SHADOWS_SPLIT_SPHERES SOFTPARTICLES_ON UNITY_HDR_ON _NORMALMAP + passType: 4 + - keywords: BILLBOARD_FACE_CAMERA_POS DIRECTIONAL LIGHTPROBE_SH SHADOWS_SCREEN + SHADOWS_SOFT SHADOWS_SPLIT_SPHERES SOFTPARTICLES_ON UNITY_HDR_ON _EMISSION + _NORMALMAP + passType: 4 + - keywords: _NORMALMAP + passType: 8 + - keywords: _EMISSION _NORMALMAP + passType: 8 + - keywords: DIRECTIONAL LIGHTPROBE_SH SHADOWS_DEPTH SHADOWS_SOFT SHADOWS_SPLIT_SPHERES + SOFTPARTICLES_ON UNITY_HDR_ON _NORMALMAP + passType: 8 + - keywords: DIRECTIONAL LIGHTPROBE_SH SHADOWS_DEPTH SHADOWS_SOFT SHADOWS_SPLIT_SPHERES + SOFTPARTICLES_ON UNITY_HDR_ON _EMISSION _NORMALMAP + passType: 8 + - keywords: BILLBOARD_FACE_CAMERA_POS SHADOWS_DEPTH SHADOWS_SPLIT_SPHERES SOFTPARTICLES_ON + UNITY_HDR_ON _NORMALMAP + passType: 8 + - keywords: BILLBOARD_FACE_CAMERA_POS LIGHTPROBE_SH POINT SHADOWS_CUBE SHADOWS_SOFT + SOFTPARTICLES_ON UNITY_HDR_ON _NORMALMAP + passType: 8 + - keywords: BILLBOARD_FACE_CAMERA_POS SHADOWS_DEPTH SHADOWS_SPLIT_SPHERES SOFTPARTICLES_ON + UNITY_HDR_ON _EMISSION _NORMALMAP + passType: 8 + - keywords: BILLBOARD_FACE_CAMERA_POS LIGHTPROBE_SH POINT SHADOWS_CUBE SHADOWS_SOFT + SOFTPARTICLES_ON UNITY_HDR_ON _EMISSION _NORMALMAP + passType: 8 + - first: {fileID: 4800000, guid: 4117fce9491711c4094d33a048e36e73, type: 3} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 4800000, guid: 51bcf79c50dc92e47ba87821b61100c3, type: 3} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 4800000, guid: 81af42a93ade3dd46a9b583d4eec76d6, type: 3} + second: + variants: + - keywords: + passType: 0 + - keywords: BILLBOARD_FACE_CAMERA_POS SOFTPARTICLES_ON UNITY_HDR_ON + passType: 0 + - first: {fileID: 4800000, guid: c1e1d3119c6fd4646aea0b4b74cacc1a, type: 3} + second: + variants: + - keywords: + passType: 0 + - keywords: BILLBOARD_FACE_CAMERA_POS SOFTPARTICLES_ON UNITY_HDR_ON + passType: 0 + - first: {fileID: 4800000, guid: 02d2da9bc88d25c4d878c1ed4e0b3854, type: 3} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 4800000, guid: b34a29e523cb9d545881e193a079f2df, type: 3} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 4800000, guid: 34a819c9e33402547a81619693adc8d5, type: 3} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 4800000, guid: e4e5d566a8aa9914c906555a6857fcb9, type: 3} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 4800000, guid: 67f9497810829eb4791ec19e95781e51, type: 3} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 4800000, guid: a71093f2a4fe26a40805c22739e10e4a, type: 3} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 4800000, guid: d7640629310e79646af0f46eb55ae466, type: 3} + second: + variants: + - keywords: + passType: 0 + - keywords: BILLBOARD_FACE_CAMERA_POS LIGHTPROBE_SH SOFTPARTICLES_ON UNITY_HDR_ON + passType: 0 + - first: {fileID: 4800000, guid: f75014305794b3948a3c6d5ccd550e05, type: 3} + second: + variants: + - keywords: + passType: 0 + - keywords: BILLBOARD_FACE_CAMERA_POS SOFTPARTICLES_ON UNITY_HDR_ON + passType: 0 + - keywords: FXAA_LOW + passType: 0 + - first: {fileID: 4800000, guid: f7ea35cfb33fcad4ab8f2429ec103bef, type: 3} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 4800000, guid: 382151503e2a43a4ebb7366d1632731d, type: 3} + second: + variants: + - keywords: + passType: 0 + - keywords: BLOOM_LOW COLOR_GRADING_LDR_2D + passType: 0 + - keywords: BILLBOARD_FACE_CAMERA_POS BLOOM_LOW COLOR_GRADING_LDR_2D SOFTPARTICLES_ON + UNITY_HDR_ON + passType: 0 + - keywords: BLOOM_LOW COLOR_GRADING_LDR_2D FINALPASS + passType: 0 + - first: {fileID: 4800000, guid: e8ce9961912f3214586fe8709b9012c1, type: 3} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 4800000, guid: 4968826cd1690d448bd993e9859e8d20, type: 3} + second: + variants: + - keywords: DIRECTIONAL + passType: 4 + - keywords: SHADOWS_DEPTH + passType: 8 + - keywords: SHADOWS_CUBE + passType: 8 + - first: {fileID: 4800000, guid: b958ad1c92bd3d64c9e61318b8681dab, type: 3} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 4800000, guid: f997a3dc9254c44459323cced085150c, type: 3} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 4800000, guid: 5ab0816423f0dfe45841cab3b05ec9ef, type: 3} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 4800000, guid: 7ad194cbe7d006f4bace915156972026, type: 3} + second: + variants: + - keywords: + passType: 0 + - keywords: BILLBOARD_FACE_CAMERA_POS SOFTPARTICLES_ON UNITY_HDR_ON + passType: 0 + - first: {fileID: 4800000, guid: aaf2953d6756e4a4fa7ec242bdba48bb, type: 3} + second: + variants: + - keywords: DIRECTIONAL + passType: 0 + - first: {fileID: 4800000, guid: 4bf4cff0d0bac3d43894e2e8839feb40, type: 3} + second: + variants: + - keywords: + passType: 0 + - keywords: BILLBOARD_FACE_CAMERA_POS SOFTPARTICLES_ON UNITY_HDR_ON + passType: 0 + - first: {fileID: 4800000, guid: 5bb6ef6f3e1b20348b4fdb01e4c404e2, type: 3} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 4800000, guid: 2c459b89a7c8b1a4fbefe0d81341651c, type: 3} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 4800000, guid: 9c442dc870b456e48b615cd8add0e9ef, type: 3} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 4800000, guid: 0d8afcb51cc9f0349a6d190da929b838, type: 3} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 4800000, guid: cdbdb71de5f9c454b980f6d0e87f0afb, type: 3} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 4800000, guid: 0ef78d24e85a44f4da9d5b5eaa00e50b, type: 3} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 4800000, guid: de7f3ac52268a194383c7d62c2a343c1, type: 3} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 4800000, guid: fe144c7e314047f4bb779d555c5405ac, type: 3} + second: + variants: + - keywords: + passType: 0 + - first: {fileID: 4800000, guid: 1ceafe4dae085734190c6d13802572bf, type: 3} + second: + variants: + - keywords: DIRECTIONAL + passType: 4 + - keywords: DIRECTIONAL LIGHTPROBE_SH + passType: 4 + - keywords: DIRECTIONAL LIGHTPROBE_SH _USE_ALPHA_ON + passType: 4 + - keywords: BILLBOARD_FACE_CAMERA_POS DIRECTIONAL LIGHTPROBE_SH SOFTPARTICLES_ON + UNITY_HDR_ON _SWITCH_ALPHA_ON _USE_ALPHA_ON + passType: 4 + - keywords: BILLBOARD_FACE_CAMERA_POS LIGHTPROBE_SH POINT SOFTPARTICLES_ON + UNITY_HDR_ON _SWITCH_ALPHA_ON _USE_ALPHA_ON + passType: 4 + - keywords: POINT + passType: 5 + - keywords: POINT _USE_ALPHA_ON + passType: 5 + - keywords: BILLBOARD_FACE_CAMERA_POS POINT SOFTPARTICLES_ON UNITY_HDR_ON _SWITCH_ALPHA_ON + _USE_ALPHA_ON + passType: 5 + - keywords: + passType: 11 + - first: {fileID: 4800000, guid: 537e4fafa9661eb4aa1223442d96ed08, type: 3} + second: + variants: + - keywords: DIRECTIONAL + passType: 4 + - keywords: DIRECTIONAL LIGHTPROBE_SH + passType: 4 + - keywords: BILLBOARD_FACE_CAMERA_POS DIRECTIONAL ETC1_EXTERNAL_ALPHA LIGHTPROBE_SH + SOFTPARTICLES_ON UNITY_HDR_ON + passType: 4 + - keywords: BILLBOARD_FACE_CAMERA_POS ETC1_EXTERNAL_ALPHA LIGHTPROBE_SH POINT + SOFTPARTICLES_ON UNITY_HDR_ON + passType: 4 + - keywords: BILLBOARD_FACE_CAMERA_POS DIRECTIONAL ETC1_EXTERNAL_ALPHA LIGHTPROBE_SH + SOFTPARTICLES_ON UNITY_HDR_ON VERTEXLIGHT_ON + passType: 4 + - keywords: BILLBOARD_FACE_CAMERA_POS ETC1_EXTERNAL_ALPHA LIGHTPROBE_SH POINT + SOFTPARTICLES_ON UNITY_HDR_ON VERTEXLIGHT_ON + passType: 4 + - keywords: POINT + passType: 5 + - keywords: BILLBOARD_FACE_CAMERA_POS ETC1_EXTERNAL_ALPHA POINT SOFTPARTICLES_ON + UNITY_HDR_ON + passType: 5 + - keywords: BILLBOARD_FACE_CAMERA_POS ETC1_EXTERNAL_ALPHA POINT SOFTPARTICLES_ON + UNITY_HDR_ON VERTEXLIGHT_ON + passType: 5 + - keywords: + passType: 11 + - first: {fileID: 4800000, guid: 19584968e8d53424c9ce71b2c72d64f4, type: 3} + second: + variants: + - keywords: DIRECTIONAL + passType: 4 + - keywords: DIRECTIONAL LIGHTPROBE_SH _HASTEXTUREDISSOLVE_ON _STEPSUBTRACT_ON + _VERTEXAOPACITY_ON + passType: 4 + - keywords: BILLBOARD_FACE_CAMERA_POS LIGHTPROBE_SH SOFTPARTICLES_ON UNITY_HDR_ON + _HASTEXTUREDISSOLVE_ON _STEPSUBTRACT_ON _VERTEXAOPACITY_ON + passType: 4 + - keywords: BILLBOARD_FACE_CAMERA_POS DIRECTIONAL LIGHTPROBE_SH SOFTPARTICLES_ON + UNITY_HDR_ON _HASTEXTUREDISSOLVE_ON _STEPSUBTRACT_ON _VERTEXAOPACITY_ON + passType: 4 + - keywords: BILLBOARD_FACE_CAMERA_POS LIGHTPROBE_SH SOFTPARTICLES_ON UNITY_HDR_ON + VERTEXLIGHT_ON _HASTEXTUREDISSOLVE_ON _STEPSUBTRACT_ON _VERTEXAOPACITY_ON + passType: 4 + - keywords: POINT + passType: 5 + - keywords: POINT _HASTEXTUREDISSOLVE_ON _STEPSUBTRACT_ON _VERTEXAOPACITY_ON + passType: 5 + - keywords: BILLBOARD_FACE_CAMERA_POS POINT SOFTPARTICLES_ON UNITY_HDR_ON _HASTEXTUREDISSOLVE_ON + _STEPSUBTRACT_ON _VERTEXAOPACITY_ON + passType: 5 + - keywords: BILLBOARD_FACE_CAMERA_POS POINT SOFTPARTICLES_ON UNITY_HDR_ON VERTEXLIGHT_ON + _HASTEXTUREDISSOLVE_ON _STEPSUBTRACT_ON _VERTEXAOPACITY_ON + passType: 5 + - keywords: + passType: 11 + - first: {fileID: 4800000, guid: 92acdc5c2ae81ee47b1ba8034940b7e2, type: 3} + second: + variants: + - keywords: DIRECTIONAL + passType: 4 + - keywords: DIRECTIONAL LIGHTPROBE_SH + passType: 4 + - keywords: BILLBOARD_FACE_CAMERA_POS DIRECTIONAL LIGHTPROBE_SH SOFTPARTICLES_ON + UNITY_HDR_ON _USE_ALPHA_ON + passType: 4 + - keywords: DIRECTIONAL LIGHTPROBE_SH _SWITCH_ALPHA_ON + passType: 4 + - keywords: POINT + passType: 5 + - keywords: POINT _SWITCH_ALPHA_ON + passType: 5 + - keywords: + passType: 11 + - first: {fileID: 4800000, guid: c0d06d04fbe0cec42ad660cbc1d06541, type: 3} + second: + variants: + - keywords: DIRECTIONAL + passType: 4 + - keywords: DIRECTIONAL LIGHTPROBE_SH + passType: 4 + - keywords: POINT + passType: 5 + - keywords: + passType: 11 + - first: {fileID: 4800000, guid: 84c2891a19be7af47acd2fc223096277, type: 3} + second: + variants: + - keywords: DIRECTIONAL + passType: 4 + - keywords: POINT + passType: 5 + - keywords: + passType: 11 + - first: {fileID: 4800000, guid: 76af2de2914fe504581efd439de00102, type: 3} + second: + variants: + - keywords: DIRECTIONAL + passType: 4 + - keywords: POINT + passType: 5 + - keywords: + passType: 8 + - keywords: SHADOWS_DEPTH UNITY_PASS_SHADOWCASTER + passType: 8 + - keywords: + passType: 11 + - first: {fileID: 4800000, guid: a6bfc36e57bbc80459d4fa05df336432, type: 3} + second: + variants: + - keywords: + passType: 4 + - keywords: DIRECTIONAL + passType: 4 + - keywords: + passType: 5 + - keywords: POINT + passType: 5 + - keywords: SHADOWS_DEPTH UNITY_PASS_SHADOWCASTER + passType: 8 + - keywords: + passType: 11 + - first: {fileID: 4800000, guid: 7886845fdd0f0a148b23f1e533e46533, type: 3} + second: + variants: + - keywords: DIRECTIONAL + passType: 4 + - keywords: POINT + passType: 5 + - keywords: + passType: 11 + - first: {fileID: 4800000, guid: 78fb75433c6f4b245b507d09dbdbabb6, type: 3} + second: + variants: + - keywords: + passType: 4 + - first: {fileID: 4800000, guid: e98b6ae7301185b48b6dee05ea1ff2d6, type: 3} + second: + variants: + - keywords: _DISSOLVETYPE_CUSTOM _DISTYPE_RED + passType: 4 + - keywords: _DISSOLVETYPE_CUSTOM _DISTYPE_DISSOLVETEXRED _INVERTDISSOLVE_ON + passType: 4 + - first: {fileID: 4800000, guid: 2f164a9060379bc45a8027b25f032300, type: 3} + second: + variants: + - keywords: DIRECTIONAL _DISSOLVETYPE_CUSTOM _DISTYPE_RED + passType: 4 + - keywords: POINT _DISSOLVETYPE_CUSTOM _DISTYPE_RED + passType: 5 + - keywords: _DISSOLVETYPE_CUSTOM _DISTYPE_RED + passType: 11 + - first: {fileID: 4800000, guid: 9fb3cd21d974e4a4e9f7c4a85213bf5b, type: 3} + second: + variants: + - keywords: DIRECTIONAL + passType: 4 + - keywords: DIRECTIONAL LIGHTPROBE_SH + passType: 4 + - keywords: POINT + passType: 5 + - keywords: + passType: 11 diff --git a/Packages/com.unity.multiplayer.transport.litenet/README.md.meta b/Assets/BossRoom/VFX/Shaders/Prewarming.shadervariants.meta similarity index 52% rename from Packages/com.unity.multiplayer.transport.litenet/README.md.meta rename to Assets/BossRoom/VFX/Shaders/Prewarming.shadervariants.meta index 1199bc356..cc7c8ae20 100644 --- a/Packages/com.unity.multiplayer.transport.litenet/README.md.meta +++ b/Assets/BossRoom/VFX/Shaders/Prewarming.shadervariants.meta @@ -1,7 +1,8 @@ fileFormatVersion: 2 -guid: 859976d97fd97dc48adc4bc7ff818f45 -TextScriptImporter: +guid: 89fadfec677a94a42b43ea4b0cd6a083 +NativeFormatImporter: externalObjects: {} + mainObjectFileID: 20000000 userData: assetBundleName: assetBundleVariant: diff --git a/Assets/BossRoom/VFX/Shaders/S_SimpleDissolve.shader b/Assets/BossRoom/VFX/Shaders/S_SimpleDissolve.shader index 3e5b10193..2e248e4b3 100644 --- a/Assets/BossRoom/VFX/Shaders/S_SimpleDissolve.shader +++ b/Assets/BossRoom/VFX/Shaders/S_SimpleDissolve.shader @@ -4,49 +4,20 @@ Shader "Custom/S_SimpleDissolve" { Properties { - _MainTex("Main Tex", 2D) = "white" {} - [HDR]_Color("Color", Color) = (1,1,1,0) - [Toggle(_VERTEXAOPACITY_ON)] _VertexAOpacity("Vertex[A]Opacity", Float) = 0 - [Toggle(_USEALPHACHANNEL_ON)] _UseAlphaChannel("UseAlphaChannel", Float) = 0 - [Toggle(_HASTEXTUREDISSOLVE_ON)] _HasTextureDissolve("Has Texture Dissolve", Float) = 0 - [Toggle(_STEPSUBTRACT_ON)] _StepSubtract("Step/Subtract", Float) = 0 - _DissolveTexture("Dissolve Texture", 2D) = "white" {} - _TileSpeedDissolveTexture("Tile/Speed Dissolve Texture", Vector) = (1,1,0,0) - _TileSpeedMainTexture("Tile/Speed Main Texture", Vector) = (1,1,0,0) - [Toggle(_HASDYNAMICDISSOLVE_ON)] _HasDynamicDissolve("Has Dynamic Dissolve", Float) = 0 - _Opacity("Opacity", Range( 0 , 1)) = 1 - [Toggle(_HASFLOWEFFECT_ON)] _HasFlowEffect("Has Flow Effect", Float) = 0 - _Flowintencity("Flow intencity", Range( 0 , 1)) = 0.15 - [Toggle(_HASMASK_ON)] _HasMask("Has Mask", Float) = 0 - _MaskIntenicty("Mask Intenicty", Float) = 1 - _MaskPower("Mask Power", Float) = 1 - [Toggle(_CHANGEMASKTOX_ON)] _ChangeMasktoX("Change Mask to X", Float) = 0 - [Toggle(_HASDOUBLEMASK_ON)] _HasDoubleMask("Has Double Mask", Float) = 0 - [Toggle(_INVERTMASK_ON)] _InvertMask("Invert Mask", Float) = 0 - [Enum(UnityEngine.Rendering.CullMode)]_CullMode("CullMode", Float) = 0 + _MainTexture("Main Texture", 2D) = "white" {} + [Toggle(_SWITCH_ALPHA_ON)] _Switch_Alpha("Switch_Alpha", Float) = 0 + [HDR]_Color("Color", Color) = (0,0,0,0) [HideInInspector] _texcoord( "", 2D ) = "white" {} - [HideInInspector] _tex4coord2( "", 2D ) = "white" {} [HideInInspector] __dirty( "", Int ) = 1 } SubShader { Tags{ "RenderType" = "Transparent" "Queue" = "Transparent+0" "IgnoreProjector" = "True" "IsEmissive" = "true" } - Cull [_CullMode] + Cull Back CGPROGRAM - #include "UnityShaderVariables.cginc" #pragma target 3.0 - #pragma shader_feature_local _USEALPHACHANNEL_ON - #pragma shader_feature_local _HASFLOWEFFECT_ON - #pragma shader_feature_local _HASMASK_ON - #pragma shader_feature_local _VERTEXAOPACITY_ON - #pragma shader_feature_local _HASTEXTUREDISSOLVE_ON - #pragma shader_feature_local _STEPSUBTRACT_ON - #pragma shader_feature_local _HASDYNAMICDISSOLVE_ON - #pragma shader_feature_local _HASDOUBLEMASK_ON - #pragma shader_feature_local _INVERTMASK_ON - #pragma shader_feature_local _CHANGEMASKTOX_ON - #define ASE_USING_SAMPLING_MACROS 1 + #pragma shader_feature_local _SWITCH_ALPHA_ON #if defined(SHADER_API_D3D11) || defined(SHADER_API_XBOXONE) || defined(UNITY_COMPILER_HLSLCC) || defined(SHADER_API_PSSL) || (defined(SHADER_TARGET_SURFACE_ANALYSIS) && !defined(SHADER_TARGET_SURFACE_ANALYSIS_MOJOSHADER))//ASE Sampler Macros #define SAMPLE_TEXTURE2D(tex,samplerTex,coord) tex.Sample(samplerTex,coord) #else//ASE Sampling Macros @@ -54,27 +25,16 @@ Shader "Custom/S_SimpleDissolve" #endif//ASE Sampling Macros #pragma surface surf Unlit alpha:fade keepalpha noshadow - #undef TRANSFORM_TEX - #define TRANSFORM_TEX(tex,name) float4(tex.xy * name##_ST.xy + name##_ST.zw, tex.z, tex.w) struct Input { float4 vertexColor : COLOR; float2 uv_texcoord; - float4 uv2_tex4coord2; }; - uniform float _CullMode; uniform float4 _Color; - UNITY_DECLARE_TEX2D_NOSAMPLER(_MainTex); - uniform float4 _TileSpeedMainTexture; - uniform float _Flowintencity; - UNITY_DECLARE_TEX2D_NOSAMPLER(_DissolveTexture); - uniform float4 _TileSpeedDissolveTexture; - SamplerState sampler_DissolveTexture; - SamplerState sampler_MainTex; - uniform float _MaskIntenicty; - uniform float _MaskPower; - uniform float _Opacity; + UNITY_DECLARE_TEX2D_NOSAMPLER(_MainTexture); + SamplerState sampler_MainTexture; + uniform float4 _MainTexture_ST; inline half4 LightingUnlit( SurfaceOutput s, half3 lightDir, half atten ) { @@ -83,72 +43,15 @@ Shader "Custom/S_SimpleDissolve" void surf( Input i , inout SurfaceOutput o ) { - float temp_output_16_0 = ( 1.0 - i.vertexColor.a ); - float2 appendResult69 = (float2(_TileSpeedMainTexture.z , _TileSpeedMainTexture.w)); - float2 appendResult67 = (float2(_TileSpeedMainTexture.x , _TileSpeedMainTexture.y)); - float2 appendResult54 = (float2(_TileSpeedDissolveTexture.z , _TileSpeedDissolveTexture.w)); - float2 appendResult50 = (float2(_TileSpeedDissolveTexture.x , _TileSpeedDissolveTexture.y)); - float2 panner51 = ( 1.0 * _Time.y * appendResult54 + ( i.uv_texcoord * appendResult50 )); - float4 tex2DNode48 = SAMPLE_TEXTURE2D( _DissolveTexture, sampler_DissolveTexture, panner51 ); - #ifdef _HASFLOWEFFECT_ON - float2 staticSwitch62 = ( i.uv_texcoord + ( _Flowintencity * tex2DNode48.r ) ); + o.Emission = ( i.vertexColor * _Color ).rgb; + float2 uv_MainTexture = i.uv_texcoord * _MainTexture_ST.xy + _MainTexture_ST.zw; + float4 tex2DNode7 = SAMPLE_TEXTURE2D( _MainTexture, sampler_MainTexture, uv_MainTexture ); + #ifdef _SWITCH_ALPHA_ON + float staticSwitch10 = tex2DNode7.a; #else - float2 staticSwitch62 = i.uv_texcoord; + float staticSwitch10 = tex2DNode7.r; #endif - float2 panner70 = ( 1.0 * _Time.y * appendResult69 + ( appendResult67 * staticSwitch62 )); - float4 tex2DNode6 = SAMPLE_TEXTURE2D( _MainTex, sampler_MainTex, panner70 ); - #ifdef _USEALPHACHANNEL_ON - float staticSwitch15 = tex2DNode6.a; - #else - float staticSwitch15 = tex2DNode6.r; - #endif - float smoothstepResult7 = smoothstep( temp_output_16_0 , 1.0 , staticSwitch15); - o.Emission = ( _Color * i.vertexColor * smoothstepResult7 ).rgb; - #ifdef _VERTEXAOPACITY_ON - float staticSwitch13 = i.vertexColor.a; - #else - float staticSwitch13 = 1.0; - #endif - #ifdef _HASDYNAMICDISSOLVE_ON - float staticSwitch61 = i.uv2_tex4coord2.w; - #else - float staticSwitch61 = temp_output_16_0; - #endif - float temp_output_55_0 = ( ( tex2DNode48.r + 1.0 ) * staticSwitch61 ); - #ifdef _STEPSUBTRACT_ON - float staticSwitch45 = step( temp_output_55_0 , staticSwitch15 ); - #else - float staticSwitch45 = ( staticSwitch15 - temp_output_55_0 ); - #endif - #ifdef _HASTEXTUREDISSOLVE_ON - float staticSwitch44 = staticSwitch45; - #else - float staticSwitch44 = smoothstepResult7; - #endif - float temp_output_41_0 = ( ( _Color.a * staticSwitch13 ) * staticSwitch44 ); - #ifdef _CHANGEMASKTOX_ON - float staticSwitch81 = i.uv_texcoord.x; - #else - float staticSwitch81 = i.uv_texcoord.y; - #endif - #ifdef _INVERTMASK_ON - float staticSwitch83 = ( 1.0 - staticSwitch81 ); - #else - float staticSwitch83 = staticSwitch81; - #endif - #ifdef _HASDOUBLEMASK_ON - float staticSwitch84 = ( staticSwitch83 * ( 1.0 - staticSwitch83 ) * _MaskIntenicty ); - #else - float staticSwitch84 = staticSwitch83; - #endif - float clampResult78 = clamp( pow( staticSwitch84 , _MaskPower ) , 0.0 , 1.0 ); - #ifdef _HASMASK_ON - float staticSwitch72 = ( temp_output_41_0 * clampResult78 ); - #else - float staticSwitch72 = temp_output_41_0; - #endif - float clampResult23 = clamp( ( staticSwitch72 * _Opacity ) , 0.0 , 1.0 ); - o.Alpha = clampResult23; + o.Alpha = ( i.vertexColor.a * staticSwitch10 ); } ENDCG @@ -156,135 +59,22 @@ Shader "Custom/S_SimpleDissolve" CustomEditor "ASEMaterialInspector" } /*ASEBEGIN -Version=18900 -1920;0;1920;1139;2434.12;209.7025;1.3;True;False -Node;AmplifyShaderEditor.Vector4Node;49;-3197.381,886.3096;Inherit;False;Property;_TileSpeedDissolveTexture;Tile/Speed Dissolve Texture;7;0;Create;True;0;0;0;False;0;False;1,1,0,0;2,0.5,0,1.5;0;5;FLOAT4;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 -Node;AmplifyShaderEditor.TextureCoordinatesNode;53;-3463.573,493.6802;Inherit;False;0;-1;2;3;2;SAMPLER2D;;False;0;FLOAT2;1,1;False;1;FLOAT2;0,0;False;5;FLOAT2;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 -Node;AmplifyShaderEditor.DynamicAppendNode;50;-2910.242,908.8526;Inherit;False;FLOAT2;4;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;1;FLOAT2;0 -Node;AmplifyShaderEditor.DynamicAppendNode;54;-2911.011,989.8579;Inherit;False;FLOAT2;4;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;1;FLOAT2;0 -Node;AmplifyShaderEditor.SimpleMultiplyOpNode;52;-2749.221,754.8551;Inherit;False;2;2;0;FLOAT2;0,0;False;1;FLOAT2;0,0;False;1;FLOAT2;0 -Node;AmplifyShaderEditor.PannerNode;51;-2481.221,812.8551;Inherit;False;3;0;FLOAT2;0,0;False;2;FLOAT2;0,0;False;1;FLOAT;1;False;1;FLOAT2;0 -Node;AmplifyShaderEditor.SamplerNode;48;-2279.447,783.3586;Inherit;True;Property;_DissolveTexture;Dissolve Texture;6;0;Create;True;0;0;0;False;0;False;-1;09ff3236ed6851c44b22b13107c206f5;8a5b3af15db0b3d4e9b5fd91fe2e7c30;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 -Node;AmplifyShaderEditor.RangedFloatNode;66;-3489.567,411.1879;Inherit;False;Property;_Flowintencity;Flow intencity;12;0;Create;True;0;0;0;False;0;False;0.15;0.172;0;1;0;1;FLOAT;0 -Node;AmplifyShaderEditor.SimpleMultiplyOpNode;65;-2925.644,439.758;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 -Node;AmplifyShaderEditor.Vector4Node;71;-2655.372,59.43367;Inherit;False;Property;_TileSpeedMainTexture;Tile/Speed Main Texture;8;0;Create;True;0;0;0;False;0;False;1,1,0,0;1,1,0,2.5;0;5;FLOAT4;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 -Node;AmplifyShaderEditor.SimpleAddOpNode;63;-2798.906,338.8696;Inherit;False;2;2;0;FLOAT2;0,0;False;1;FLOAT;0;False;1;FLOAT2;0 -Node;AmplifyShaderEditor.StaticSwitch;62;-2657.905,224.2697;Inherit;False;Property;_HasFlowEffect;Has Flow Effect;11;0;Create;True;0;0;0;False;0;False;0;0;0;True;;Toggle;2;Key0;Key1;Create;True;True;9;1;FLOAT2;0,0;False;0;FLOAT2;0,0;False;2;FLOAT2;0,0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT2;0,0;False;6;FLOAT2;0,0;False;7;FLOAT2;0,0;False;8;FLOAT2;0,0;False;1;FLOAT2;0 -Node;AmplifyShaderEditor.DynamicAppendNode;67;-2360.595,98.02464;Inherit;False;FLOAT2;4;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;1;FLOAT2;0 -Node;AmplifyShaderEditor.DynamicAppendNode;69;-2338.221,319.4569;Inherit;False;FLOAT2;4;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;1;FLOAT2;0 -Node;AmplifyShaderEditor.VertexColorNode;9;-1739.224,-70.92181;Inherit;False;0;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 -Node;AmplifyShaderEditor.StaticSwitch;81;-2932.657,1425.35;Inherit;False;Property;_ChangeMasktoX;Change Mask to X;16;0;Create;True;0;0;0;False;0;False;0;0;0;True;;Toggle;2;Key0;Key1;Create;True;True;9;1;FLOAT;0;False;0;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;4;FLOAT;0;False;5;FLOAT;0;False;6;FLOAT;0;False;7;FLOAT;0;False;8;FLOAT;0;False;1;FLOAT;0 -Node;AmplifyShaderEditor.SimpleMultiplyOpNode;68;-2203.87,211.6517;Inherit;False;2;2;0;FLOAT2;0,0;False;1;FLOAT2;0,0;False;1;FLOAT2;0 -Node;AmplifyShaderEditor.TextureCoordinatesNode;60;-2216.325,1015.935;Inherit;False;1;-1;4;3;2;SAMPLER2D;;False;0;FLOAT2;1,1;False;1;FLOAT2;0,0;False;5;FLOAT4;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 -Node;AmplifyShaderEditor.PannerNode;70;-2080.192,222.5399;Inherit;False;3;0;FLOAT2;0,0;False;2;FLOAT2;0,0;False;1;FLOAT;1;False;1;FLOAT2;0 -Node;AmplifyShaderEditor.OneMinusNode;16;-1248.935,133.905;Inherit;False;1;0;FLOAT;0;False;1;FLOAT;0 -Node;AmplifyShaderEditor.OneMinusNode;82;-2509.187,1583.448;Inherit;False;1;0;FLOAT;0;False;1;FLOAT;0 -Node;AmplifyShaderEditor.StaticSwitch;61;-1938.723,1084.035;Inherit;False;Property;_HasDynamicDissolve;Has Dynamic Dissolve;9;0;Create;True;0;0;0;False;0;False;0;0;0;True;;Toggle;2;Key0;Key1;Create;True;True;9;1;FLOAT;0;False;0;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;4;FLOAT;0;False;5;FLOAT;0;False;6;FLOAT;0;False;7;FLOAT;0;False;8;FLOAT;0;False;1;FLOAT;0 -Node;AmplifyShaderEditor.SamplerNode;6;-1879.672,195.6047;Inherit;True;Property;_MainTex;Main Tex;0;0;Create;True;0;0;0;False;0;False;-1;1ee97322756ea2c489f9311bd5c9f72d;037eea83bb383c34ebc2ee292c903057;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 -Node;AmplifyShaderEditor.SimpleAddOpNode;57;-1956.009,812.2713;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;1;False;1;FLOAT;0 -Node;AmplifyShaderEditor.StaticSwitch;83;-2407.79,1428.747;Inherit;False;Property;_InvertMask;Invert Mask;18;0;Create;True;0;0;0;False;0;False;0;0;0;True;;Toggle;2;Key0;Key1;Create;True;True;9;1;FLOAT;0;False;0;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;4;FLOAT;0;False;5;FLOAT;0;False;6;FLOAT;0;False;7;FLOAT;0;False;8;FLOAT;0;False;1;FLOAT;0 -Node;AmplifyShaderEditor.RangedFloatNode;75;-2141.676,1638.825;Inherit;False;Property;_MaskIntenicty;Mask Intenicty;14;0;Create;True;0;0;0;False;0;False;1;4;0;0;0;1;FLOAT;0 -Node;AmplifyShaderEditor.OneMinusNode;74;-2131.763,1547.401;Inherit;False;1;0;FLOAT;0;False;1;FLOAT;0 -Node;AmplifyShaderEditor.StaticSwitch;15;-1519.082,231.1438;Inherit;False;Property;_UseAlphaChannel;UseAlphaChannel;3;0;Create;True;0;0;0;False;0;False;0;0;0;True;;Toggle;2;Key0;Key1;Create;True;True;9;1;FLOAT;0;False;0;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;4;FLOAT;0;False;5;FLOAT;0;False;6;FLOAT;0;False;7;FLOAT;0;False;8;FLOAT;0;False;1;FLOAT;0 -Node;AmplifyShaderEditor.SimpleMultiplyOpNode;55;-1642.548,812.7305;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 -Node;AmplifyShaderEditor.SimpleSubtractOpNode;47;-635.1303,462.9658;Inherit;False;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 -Node;AmplifyShaderEditor.RangedFloatNode;14;-1414.711,-8.864521;Inherit;False;Constant;_Float1;Float 1;3;0;Create;True;0;0;0;False;0;False;1;0;0;0;0;1;FLOAT;0 -Node;AmplifyShaderEditor.RangedFloatNode;8;-1025.467,239.1417;Inherit;False;Constant;_Float0;Float 0;1;0;Create;True;0;0;0;False;0;False;1;0;0;0;0;1;FLOAT;0 -Node;AmplifyShaderEditor.SimpleMultiplyOpNode;73;-1887.859,1508.111;Inherit;False;3;3;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;1;FLOAT;0 -Node;AmplifyShaderEditor.StepOpNode;46;-644.105,280.2146;Inherit;False;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 -Node;AmplifyShaderEditor.ColorNode;10;-1287.108,-292.6477;Inherit;False;Property;_Color;Color;1;1;[HDR];Create;True;0;0;0;False;0;False;1,1,1,0;5.201142,5.201142,5.201142,1;True;0;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 -Node;AmplifyShaderEditor.SmoothstepOpNode;7;-937.261,130.8385;Inherit;False;3;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;1;False;1;FLOAT;0 -Node;AmplifyShaderEditor.StaticSwitch;45;-380.6433,406.6898;Inherit;False;Property;_StepSubtract;Step/Subtract;5;0;Create;True;0;0;0;False;0;False;0;0;0;True;;Toggle;2;Key0;Key1;Create;True;True;9;1;FLOAT;0;False;0;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;4;FLOAT;0;False;5;FLOAT;0;False;6;FLOAT;0;False;7;FLOAT;0;False;8;FLOAT;0;False;1;FLOAT;0 -Node;AmplifyShaderEditor.StaticSwitch;13;-1243.347,18.5;Inherit;False;Property;_VertexAOpacity;Vertex[A]Opacity;2;0;Create;True;0;0;0;False;0;False;0;0;0;True;;Toggle;2;Key0;Key1;Create;True;True;9;1;FLOAT;0;False;0;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;4;FLOAT;0;False;5;FLOAT;0;False;6;FLOAT;0;False;7;FLOAT;0;False;8;FLOAT;0;False;1;FLOAT;0 -Node;AmplifyShaderEditor.StaticSwitch;84;-1619.987,1436.547;Inherit;False;Property;_HasDoubleMask;Has Double Mask;17;0;Create;True;0;0;0;False;0;False;0;0;0;True;;Toggle;2;Key0;Key1;Create;True;True;9;1;FLOAT;0;False;0;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;4;FLOAT;0;False;5;FLOAT;0;False;6;FLOAT;0;False;7;FLOAT;0;False;8;FLOAT;0;False;1;FLOAT;0 -Node;AmplifyShaderEditor.RangedFloatNode;77;-1415.999,1597.256;Inherit;False;Property;_MaskPower;Mask Power;15;0;Create;True;0;0;0;False;0;False;1;2;0;0;0;1;FLOAT;0 -Node;AmplifyShaderEditor.StaticSwitch;44;-388.2643,126.8138;Inherit;False;Property;_HasTextureDissolve;Has Texture Dissolve;4;0;Create;True;0;0;0;False;0;False;0;0;0;True;;Toggle;2;Key0;Key1;Create;True;True;9;1;FLOAT;0;False;0;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;4;FLOAT;0;False;5;FLOAT;0;False;6;FLOAT;0;False;7;FLOAT;0;False;8;FLOAT;0;False;1;FLOAT;0 -Node;AmplifyShaderEditor.SimpleMultiplyOpNode;12;-688.976,-64.5;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 -Node;AmplifyShaderEditor.PowerNode;76;-1303.068,1441.734;Inherit;False;False;2;0;FLOAT;0;False;1;FLOAT;1;False;1;FLOAT;0 -Node;AmplifyShaderEditor.ClampOpNode;78;-1115.499,1431.756;Inherit;True;3;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;1;False;1;FLOAT;0 -Node;AmplifyShaderEditor.SimpleMultiplyOpNode;41;-114.311,107.0327;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 -Node;AmplifyShaderEditor.SimpleMultiplyOpNode;79;38.79973,199.1395;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 -Node;AmplifyShaderEditor.RangedFloatNode;59;214.767,325.2502;Inherit;False;Property;_Opacity;Opacity;10;0;Create;True;0;0;0;False;0;False;1;1;0;1;0;1;FLOAT;0 -Node;AmplifyShaderEditor.StaticSwitch;72;174.8944,104.5198;Inherit;False;Property;_HasMask;Has Mask;13;0;Create;True;0;0;0;False;0;False;0;0;0;True;;Toggle;2;Key0;Key1;Create;True;True;9;1;FLOAT;0;False;0;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;4;FLOAT;0;False;5;FLOAT;0;False;6;FLOAT;0;False;7;FLOAT;0;False;8;FLOAT;0;False;1;FLOAT;0 -Node;AmplifyShaderEditor.SimpleMultiplyOpNode;80;415.6019,107.6684;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 -Node;AmplifyShaderEditor.RangedFloatNode;85;815.8948,335.1748;Inherit;False;Property;_CullMode;CullMode;19;1;[Enum];Create;True;0;0;1;UnityEngine.Rendering.CullMode;True;0;False;0;0;0;0;0;1;FLOAT;0 -Node;AmplifyShaderEditor.ClampOpNode;23;546.8559,106.0625;Inherit;False;3;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;1;False;1;FLOAT;0 -Node;AmplifyShaderEditor.SimpleMultiplyOpNode;11;-751,-216.5;Inherit;False;3;3;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;2;FLOAT;0;False;1;COLOR;0 -Node;AmplifyShaderEditor.StandardSurfaceOutputNode;43;781.6785,-87.72757;Float;False;True;-1;2;ASEMaterialInspector;0;0;Unlit;Custom/S_SimpleDissolve;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;False;False;False;False;False;False;Back;0;False;-1;0;False;-1;False;0;False;-1;0;False;-1;False;0;Transparent;0.5;True;False;0;False;Transparent;;Transparent;All;14;all;True;True;True;True;0;False;-1;False;0;False;-1;255;False;-1;255;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;False;2;15;10;25;False;0.5;False;2;5;False;-1;10;False;-1;0;1;False;-1;1;False;-1;0;False;-1;0;False;-1;0;False;0;0,0,0,0;VertexOffset;True;False;Cylindrical;False;Relative;0;;-1;-1;-1;-1;0;False;0;0;True;85;-1;0;False;-1;0;0;0;False;0.1;False;-1;0;False;-1;True;15;0;FLOAT3;0,0,0;False;1;FLOAT3;0,0,0;False;2;FLOAT3;0,0,0;False;3;FLOAT;0;False;4;FLOAT;0;False;6;FLOAT3;0,0,0;False;7;FLOAT3;0,0,0;False;8;FLOAT;0;False;9;FLOAT;0;False;10;FLOAT;0;False;13;FLOAT3;0,0,0;False;11;FLOAT3;0,0,0;False;12;FLOAT3;0,0,0;False;14;FLOAT4;0,0,0,0;False;15;FLOAT3;0,0,0;False;0 -WireConnection;50;0;49;1 -WireConnection;50;1;49;2 -WireConnection;54;0;49;3 -WireConnection;54;1;49;4 -WireConnection;52;0;53;0 -WireConnection;52;1;50;0 -WireConnection;51;0;52;0 -WireConnection;51;2;54;0 -WireConnection;48;1;51;0 -WireConnection;65;0;66;0 -WireConnection;65;1;48;1 -WireConnection;63;0;53;0 -WireConnection;63;1;65;0 -WireConnection;62;1;53;0 -WireConnection;62;0;63;0 -WireConnection;67;0;71;1 -WireConnection;67;1;71;2 -WireConnection;69;0;71;3 -WireConnection;69;1;71;4 -WireConnection;81;1;53;2 -WireConnection;81;0;53;1 -WireConnection;68;0;67;0 -WireConnection;68;1;62;0 -WireConnection;70;0;68;0 -WireConnection;70;2;69;0 -WireConnection;16;0;9;4 -WireConnection;82;0;81;0 -WireConnection;61;1;16;0 -WireConnection;61;0;60;4 -WireConnection;6;1;70;0 -WireConnection;57;0;48;1 -WireConnection;83;1;81;0 -WireConnection;83;0;82;0 -WireConnection;74;0;83;0 -WireConnection;15;1;6;1 -WireConnection;15;0;6;4 -WireConnection;55;0;57;0 -WireConnection;55;1;61;0 -WireConnection;47;0;15;0 -WireConnection;47;1;55;0 -WireConnection;73;0;83;0 -WireConnection;73;1;74;0 -WireConnection;73;2;75;0 -WireConnection;46;0;55;0 -WireConnection;46;1;15;0 -WireConnection;7;0;15;0 -WireConnection;7;1;16;0 -WireConnection;7;2;8;0 -WireConnection;45;1;47;0 -WireConnection;45;0;46;0 -WireConnection;13;1;14;0 -WireConnection;13;0;9;4 -WireConnection;84;1;83;0 -WireConnection;84;0;73;0 -WireConnection;44;1;7;0 -WireConnection;44;0;45;0 -WireConnection;12;0;10;4 -WireConnection;12;1;13;0 -WireConnection;76;0;84;0 -WireConnection;76;1;77;0 -WireConnection;78;0;76;0 -WireConnection;41;0;12;0 -WireConnection;41;1;44;0 -WireConnection;79;0;41;0 -WireConnection;79;1;78;0 -WireConnection;72;1;41;0 -WireConnection;72;0;79;0 -WireConnection;80;0;72;0 -WireConnection;80;1;59;0 -WireConnection;23;0;80;0 -WireConnection;11;0;10;0 -WireConnection;11;1;9;0 -WireConnection;11;2;7;0 -WireConnection;43;2;11;0 -WireConnection;43;9;23;0 +Version=18400 +1920;6;1920;1133;964.9058;470.6407;1;True;False +Node;AmplifyShaderEditor.SamplerNode;7;-443.5,-206.5;Inherit;True;Property;_MainTexture;Main Texture;0;0;Create;True;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.VertexColorNode;9;-231.5,3.5;Inherit;False;0;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.StaticSwitch;10;-139.5,-137.5;Inherit;False;Property;_Switch_Alpha;Switch_Alpha;1;0;Create;True;0;0;False;0;False;0;0;0;True;;Toggle;2;Key0;Key1;Create;True;9;1;FLOAT;0;False;0;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;4;FLOAT;0;False;5;FLOAT;0;False;6;FLOAT;0;False;7;FLOAT;0;False;8;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.ColorNode;11;-258.1,181.5;Inherit;False;Property;_Color;Color;2;1;[HDR];Create;True;0;0;False;0;False;0,0,0,0;0,0,0,0;True;0;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;8;119.8001,-75.60001;Inherit;False;2;2;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;12;117.9902,52.93641;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.StandardSurfaceOutputNode;13;284,-135;Float;False;True;-1;2;ASEMaterialInspector;0;0;Unlit;Custom/S_SimpleDissolve;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;False;False;False;False;False;False;Back;0;False;-1;0;False;-1;False;0;False;-1;0;False;-1;False;0;Transparent;0.5;True;False;0;False;Transparent;;Transparent;All;14;all;True;True;True;True;0;False;-1;False;0;False;-1;255;False;-1;255;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;False;2;15;10;25;False;0.5;False;2;5;False;-1;10;False;-1;0;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;0;0,0,0,0;VertexOffset;True;False;Cylindrical;False;Relative;0;;-1;-1;-1;-1;0;False;0;0;False;-1;-1;0;False;-1;0;0;0;False;0.1;False;-1;0;False;-1;True;15;0;FLOAT3;0,0,0;False;1;FLOAT3;0,0,0;False;2;FLOAT3;0,0,0;False;3;FLOAT;0;False;4;FLOAT;0;False;6;FLOAT3;0,0,0;False;7;FLOAT3;0,0,0;False;8;FLOAT;0;False;9;FLOAT;0;False;10;FLOAT;0;False;13;FLOAT3;0,0,0;False;11;FLOAT3;0,0,0;False;12;FLOAT3;0,0,0;False;14;FLOAT4;0,0,0,0;False;15;FLOAT3;0,0,0;False;0 +WireConnection;10;1;7;1 +WireConnection;10;0;7;4 +WireConnection;8;0;9;0 +WireConnection;8;1;11;0 +WireConnection;12;0;9;4 +WireConnection;12;1;10;0 +WireConnection;13;2;8;0 +WireConnection;13;9;12;0 ASEEND*/ -//CHKSM=94959B4197BAD343EC380914005C49EAFF59A9BB \ No newline at end of file +//CHKSM=1381D03BF216C4D284EE8E574ED7358E7C0D8D7A \ No newline at end of file diff --git a/Documentation/Images/3Players.png b/Documentation/Images/3Players.png new file mode 100644 index 000000000..430a0ca59 --- /dev/null +++ b/Documentation/Images/3Players.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c9f8fcb1381c9101993689f35657359cc9c6a73bed24a5df079868e06537c7c4 +size 8581963 diff --git a/Documentation/Images/Boss.png b/Documentation/Images/Boss.png new file mode 100644 index 000000000..01c848d63 --- /dev/null +++ b/Documentation/Images/Boss.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1587e25a55d119c9e32d831eb6a8f4ff7ff453ae8c24c67bdeeaa7e212221a59 +size 7711961 diff --git a/Documentation/Photon-Realtime/Images/Boss-Room-Host-Confirm.png b/Documentation/Photon-Realtime/Images/Boss-Room-Host-Confirm.png new file mode 100644 index 000000000..4edb986c4 --- /dev/null +++ b/Documentation/Photon-Realtime/Images/Boss-Room-Host-Confirm.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:edae396114f77bf62295f83cf2a513fcfc9596f67b37fecf3ee0b79378ba50fb +size 204109 diff --git a/Documentation/Photon-Realtime/Images/Boss-Room-Host-Dropdown.png b/Documentation/Photon-Realtime/Images/Boss-Room-Host-Dropdown.png new file mode 100644 index 000000000..a7e97ea49 --- /dev/null +++ b/Documentation/Photon-Realtime/Images/Boss-Room-Host-Dropdown.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9c18f020e23d826b0316fae5ff3880873efdbfdcb47505f0a0762995bda6eab1 +size 762042 diff --git a/Documentation/Photon-Realtime/Images/Boss-Room-Join-Dropdown.png b/Documentation/Photon-Realtime/Images/Boss-Room-Join-Dropdown.png new file mode 100644 index 000000000..602033212 --- /dev/null +++ b/Documentation/Photon-Realtime/Images/Boss-Room-Join-Dropdown.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7bd55f6408858ca649d80f5bf79a2a106e4b0c1a53452a6e1cebaeb3a28dc120 +size 375009 diff --git a/Documentation/Photon-Realtime/Images/Boss-Room-Join.png b/Documentation/Photon-Realtime/Images/Boss-Room-Join.png new file mode 100644 index 000000000..e78f2715b --- /dev/null +++ b/Documentation/Photon-Realtime/Images/Boss-Room-Join.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ad821bab2e1e6d654774d5e75142f96169ce4b7a7e58129451d7c1546219b944 +size 371873 diff --git a/Documentation/Photon-Realtime/Images/Boss-Room-Lobby-Extra.png b/Documentation/Photon-Realtime/Images/Boss-Room-Lobby-Extra.png new file mode 100644 index 000000000..ee09d0538 --- /dev/null +++ b/Documentation/Photon-Realtime/Images/Boss-Room-Lobby-Extra.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7aab09621b8e591fd2ecf5305b8a71689821a7832aa2520c7944dd24e8770955 +size 4539880 diff --git a/Documentation/Photon-Realtime/Images/Boss-Room-Lobby.png b/Documentation/Photon-Realtime/Images/Boss-Room-Lobby.png new file mode 100644 index 000000000..481edff13 --- /dev/null +++ b/Documentation/Photon-Realtime/Images/Boss-Room-Lobby.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:be7821de85a202196a933682c0a06fec6bf55f99de145a0cbe7e1266921b9ea4 +size 4331599 diff --git a/Documentation/Photon-Realtime/Images/Photon-App.png b/Documentation/Photon-Realtime/Images/Photon-App.png new file mode 100644 index 000000000..8b22a7b89 --- /dev/null +++ b/Documentation/Photon-Realtime/Images/Photon-App.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec7cac4bb30e9970d2c1832766d1b9c3fc1cf69adb2c263af7ba579442fb33c4 +size 200878 diff --git a/Documentation/Photon-Realtime/Images/Photon-Dashboard.png b/Documentation/Photon-Realtime/Images/Photon-Dashboard.png new file mode 100644 index 000000000..470a783a5 --- /dev/null +++ b/Documentation/Photon-Realtime/Images/Photon-Dashboard.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c36d4422f98f537eb6330e1378631498258f02c748b120fc9212568a9425e8fa +size 181469 diff --git a/Documentation/Photon-Realtime/Readme.md b/Documentation/Photon-Realtime/Readme.md new file mode 100644 index 000000000..f12d2ff00 --- /dev/null +++ b/Documentation/Photon-Realtime/Readme.md @@ -0,0 +1,71 @@ +# Photon Setup Guide for Boss Room + +## Setup Photon + +1. Access the Wizard from Window → Photon Realtime → Wizard. +2. Click next through the wizard until you get to the Photon Cloud Setup. +3. If you do not already have an account or an App Id, click the Visit Dashboard button to create one. If you created a new account, create a New Application from Photon's Dashboard. + **Note:** The Photon Type for Boss Room is `Photon Realtime`. + + ![Images/Photon-App.png](Images/Photon-App.png) + +4. After the Application is setup, you can get its App ID from Photon's Dashboard. Copy the App ID to your clipboard. + + **Note:** This App Id **must** be shared with other people in order to be able to connect to your Photon Room. + + ![Images/Photon-App.png](Images/Photon-Dashboard.png) + +5. In the Photon Wizard Window of your Unity Project, paste the App Id. +6. Click on Setup. You should receive a completion message, for example "Your AppId is now applied to this Project **Done**". +7. Click Next then Done. Setup is complete and you can safely quit the Photon Wizard. + +## Playing Boss Room with friends + +Once the setup is done, there are two ways you can actually test out is working: + +* Launch the Boss Room project using a packaged build. +* Use the Unity Editor, but do that with caution! + +With that being said, both ways are almost the same in terms of how you host or join a session. + + +> **IMPORTANT!** There is a bug in MLAPI at the moment that could prevent users from connecting to each other through the editor. + +> **Note:** To reiterate, it is important that all Unity Editor users have the exact same version of the project with no changes locally and their PhotonAppSettings should match with the Host's settings. + + +### Hosting a Room + +--- +If you want to host a session then: + + +1. Click the Start button. +2. Select `Relay Host` from the dropdown on the left. + ![Images/Boss-Room-Host-Dropdown.png](Images/Boss-Room-Host-Dropdown.png) + +3. A random generated room name will be assigned. + ![Images/Boss-Room-Host-Confirm.png](Images/Boss-Room-Host-Confirm.png) + +4. Share the generated room name with your users, and click confirm! + +5. Done! You are now in the Lobby - also known as the Character Selection Screen. Your friends/users should be able to join now. + +> **Note:** You can see the Room Name in the top-left corner. + ![Images/Boss-Room-Lobby.png](Images/Boss-Room-Lobby.png) + +### Joining a Room + +--- + +If you want to Join a session then: +1. Click the Join Button and select `Relay Host` from the dropdown on the left. + ![Images/Boss-Room-Join-Dropdown.png](Images/Boss-Room-Join-Dropdown.png) +2. You should be asked to input the room name below. + ![Images/Boss-Room-Join.png](Images/Boss-Room-Join.png) + +3. In this example, the room name is: `YQWOWS` + +4. Click Join. Once successfully connected, you should be in the Lobby with the rest of your friends. + ![Images/Boss-Room-Lobby-Extra.png](Images/Boss-Room-Lobby-Extra.png) + diff --git a/LICENSE b/LICENSE.md similarity index 100% rename from LICENSE rename to LICENSE.md diff --git a/Packages/com.unity.multiplayer.transport.litenet/CHANGELOG.md b/Packages/com.unity.multiplayer.transport.litenet/CHANGELOG.md deleted file mode 100644 index 71d32c767..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/CHANGELOG.md +++ /dev/null @@ -1,5 +0,0 @@ -Changelog -All notable changes to this package will be documented in this file. The format is based on Keep a Changelog - -[0.0.1-preview.1] - 2020-10-05 -This is the first release of Enet MLAPI Package \ No newline at end of file diff --git a/Packages/com.unity.multiplayer.transport.litenet/LICENSE.md b/Packages/com.unity.multiplayer.transport.litenet/LICENSE.md deleted file mode 100644 index 31a3ffd35..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2018, 2019 Albin Corén - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file diff --git a/Packages/com.unity.multiplayer.transport.litenet/README.md b/Packages/com.unity.multiplayer.transport.litenet/README.md deleted file mode 100644 index 863ccafd1..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/README.md +++ /dev/null @@ -1 +0,0 @@ -Enet transport for MLAPI \ No newline at end of file diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib.meta b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib.meta deleted file mode 100644 index ee574ac63..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 22e683408a542064b9a7e0670cba52a2 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/BaseChannel.cs b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/BaseChannel.cs deleted file mode 100644 index c734413f7..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/BaseChannel.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System.Collections.Generic; - -namespace LiteNetLib -{ - internal abstract class BaseChannel - { - public BaseChannel Next; - protected readonly NetPeer Peer; - protected readonly Queue OutgoingQueue; - - protected BaseChannel(NetPeer peer) - { - Peer = peer; - OutgoingQueue = new Queue(64); - } - - public int PacketsInQueue - { - get { return OutgoingQueue.Count; } - } - - public void AddToQueue(NetPacket packet) - { - lock (OutgoingQueue) - OutgoingQueue.Enqueue(packet); - } - - public abstract void SendNextPackets(); - public abstract bool ProcessPacket(NetPacket packet); - } -} diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/ConnectionRequest.cs b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/ConnectionRequest.cs deleted file mode 100644 index f087f0ebf..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/ConnectionRequest.cs +++ /dev/null @@ -1,137 +0,0 @@ -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 readonly NetDataReader Data; - - internal ConnectionRequestResult Result { get; private set; } - internal long ConnectionTime; - internal byte ConnectionNumber; - public readonly IPEndPoint RemoteEndPoint; - - private bool TryActivate() - { - return Interlocked.CompareExchange(ref _used, 1, 0) == 0; - } - - internal void UpdateRequest(NetConnectRequestPacket connRequest) - { - if (connRequest.ConnectionTime >= ConnectionTime) - { - ConnectionTime = connRequest.ConnectionTime; - ConnectionNumber = connRequest.ConnectionNumber; - } - } - - internal ConnectionRequest( - long connectionId, - byte connectionNumber, - NetDataReader netDataReader, - IPEndPoint endPoint, - NetManager listener) - { - ConnectionTime = connectionId; - ConnectionNumber = connectionNumber; - RemoteEndPoint = endPoint; - Data = netDataReader; - _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; - } - - /// - /// 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/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/INetEventListener.cs b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/INetEventListener.cs deleted file mode 100644 index c4fec6cab..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/INetEventListener.cs +++ /dev/null @@ -1,224 +0,0 @@ -using System.Net; -using System.Net.Sockets; - -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 - } - - /// - /// 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 - /// Type of received packet - void OnNetworkReceive(NetPeer peer, NetPacketReader reader, 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 class EventBasedNetListener : INetEventListener, IDeliveryEventListener - { - 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, 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 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 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; - } - - 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, DeliveryMethod deliveryMethod) - { - if (NetworkReceiveEvent != null) - NetworkReceiveEvent(peer, reader, 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); - } - } -} diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Layers.meta b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Layers.meta deleted file mode 100644 index d1d31bed2..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Layers.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: aebc2d698872c56429dc96aa2ddcd270 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Layers/Crc32cLayer.cs b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Layers/Crc32cLayer.cs deleted file mode 100644 index 716c4b508..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Layers/Crc32cLayer.cs +++ /dev/null @@ -1,36 +0,0 @@ -using LiteNetLib.Utils; -using System; - -namespace LiteNetLib.Layers -{ - public sealed class Crc32cLayer : PacketLayerBase - { - public Crc32cLayer() : base(CRC32C.ChecksumSize) - { - - } - - public override void ProcessInboundPacket(ref byte[] data, ref int length) - { - if (length < NetConstants.HeaderSize + CRC32C.ChecksumSize) - { - NetDebug.WriteError("[NM] DataReceived size: bad!"); - return; - } - - int checksumPoint = length - CRC32C.ChecksumSize; - if (CRC32C.Compute(data, 0, checksumPoint) != BitConverter.ToUInt32(data, checksumPoint)) - { - NetDebug.Write("[NM] DataReceived checksum: bad!"); - return; - } - length -= CRC32C.ChecksumSize; - } - - public override void ProcessOutBoundPacket(ref byte[] data, ref int offset, ref int length) - { - FastBitConverter.GetBytes(data, length, CRC32C.Compute(data, offset, length)); - length += CRC32C.ChecksumSize; - } - } -} diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Layers/PacketLayerBase.cs b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Layers/PacketLayerBase.cs deleted file mode 100644 index 264a41858..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Layers/PacketLayerBase.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace LiteNetLib.Layers -{ - public abstract class PacketLayerBase - { - public readonly int ExtraPacketSizeForLayer; - - protected PacketLayerBase(int extraPacketSizeForLayer) - { - ExtraPacketSizeForLayer = extraPacketSizeForLayer; - } - - public abstract void ProcessInboundPacket(ref byte[] data, ref int length); - public abstract void ProcessOutBoundPacket(ref byte[] data, ref int offset, ref int length); - } -} diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Layers/PacketLayerBase.cs.meta b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Layers/PacketLayerBase.cs.meta deleted file mode 100644 index 47c98607d..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Layers/PacketLayerBase.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: aba74192fa2edf74cac4992b18f7bc84 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Layers/XorEncryptLayer.cs b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Layers/XorEncryptLayer.cs deleted file mode 100644 index 82ac9a4bd..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Layers/XorEncryptLayer.cs +++ /dev/null @@ -1,59 +0,0 @@ -using System; -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 byte[] data, ref int length) - { - if (_byteKey == null) - return; - for (var i = 0; i < length; i++) - { - var offset = i % _byteKey.Length; - data[i] = (byte)(data[i] ^ _byteKey[offset]); - } - } - - public override void ProcessOutBoundPacket(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/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Layers/XorEncryptLayer.cs.meta b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Layers/XorEncryptLayer.cs.meta deleted file mode 100644 index 5e7b15288..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Layers/XorEncryptLayer.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0aca7a11bf01a5146a4e435b448bf342 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NatPunchModule.cs b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NatPunchModule.cs deleted file mode 100644 index a15f8bc39..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NatPunchModule.cs +++ /dev/null @@ -1,245 +0,0 @@ -using System.Collections.Generic; -using System.Net; -using System.Net.Sockets; -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 NetSocket _socket; - private readonly Queue _requestEvents = new Queue(); - private readonly Queue _successEvents = new Queue(); - 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; - - internal NatPunchModule(NetSocket 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() - { - SocketError errorCode = 0; - _cacheWriter.Reset(); - _cacheWriter.Put((byte)PacketProperty.NatMessage); - _netPacketProcessor.Write(_cacheWriter, packet); - _socket.SendTo(_cacheWriter.Data, 0, _cacheWriter.Length, target, ref errorCode); - } - - 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 (_natPunchListener == null || (_successEvents.Count == 0 && _requestEvents.Count == 0)) - return; - lock (_successEvents) - { - while (_successEvents.Count > 0) - { - var evt = _successEvents.Dequeue(); - _natPunchListener.OnNatIntroductionSuccess( - evt.TargetEndPoint, - evt.Type, - evt.Token); - } - } - lock (_requestEvents) - { - while (_requestEvents.Count > 0) - { - var evt = _requestEvents.Dequeue(); - _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) - { - lock (_requestEvents) - { - _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 - SocketError errorCode = 0; - _socket.Ttl = 2; - _socket.SendTo(new[] { (byte)PacketProperty.Empty }, 0, 1, req.External, ref errorCode); - - // 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 {0} - additional info: {1}", - senderEndPoint, req.Token); - - //Release punch success to client; enabling him to Connect() to Sender if token is ok - lock (_successEvents) - { - _successEvents.Enqueue(new SuccessEventData - { - TargetEndPoint = senderEndPoint, - Type = req.IsExternal ? NatAddressType.External : NatAddressType.Internal, - Token = req.Token - }); - } - } - } -} diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NatPunchModule.cs.meta b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NatPunchModule.cs.meta deleted file mode 100644 index cacac3a09..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NatPunchModule.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a7d2dee632c79624ea2b1909415f2755 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetConstants.cs b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetConstants.cs deleted file mode 100644 index 5032c6cdb..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetConstants.cs +++ /dev/null @@ -1,72 +0,0 @@ -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. - /// - 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 = 11; - internal const int MaxUdpHeaderSize = 68; - - internal static readonly int[] PossibleMtu = - { - 576 - MaxUdpHeaderSize, //minimal - 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) - }; - - internal static readonly int MaxPacketSize = PossibleMtu[PossibleMtu.Length - 1]; - - //peer specific - public const byte MaxConnectionNumber = 4; - - public const int PacketPoolSize = 1000; - } -} diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetConstants.cs.meta b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetConstants.cs.meta deleted file mode 100644 index 3db395dee..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetConstants.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: fff3c8002deb1964b8adfb05e6d70f9f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetDebug.cs b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetDebug.cs deleted file mode 100644 index ab92dfbe4..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetDebug.cs +++ /dev/null @@ -1,92 +0,0 @@ -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_4 || UNITY_5 || 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, params object[] args) - { - WriteLogic(NetLogLevel.Trace, str, args); - } - - [Conditional("DEBUG_MESSAGES")] - internal static void Write(NetLogLevel level, string str, params object[] args) - { - WriteLogic(level, str, args); - } - - [Conditional("DEBUG_MESSAGES"), Conditional("DEBUG")] - internal static void WriteForce(string str, params object[] args) - { - WriteLogic(NetLogLevel.Trace, str, args); - } - - [Conditional("DEBUG_MESSAGES"), Conditional("DEBUG")] - internal static void WriteForce(NetLogLevel level, string str, params object[] args) - { - WriteLogic(level, str, args); - } - - internal static void WriteError(string str, params object[] args) - { - WriteLogic(NetLogLevel.Error, str, args); - } - } -} diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetDebug.cs.meta b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetDebug.cs.meta deleted file mode 100644 index 3a5bc40d3..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetDebug.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 164aa985149ec81468dbb9bed6d746f0 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetManager.cs b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetManager.cs deleted file mode 100644 index 07e8c3ded..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetManager.cs +++ /dev/null @@ -1,1641 +0,0 @@ -using System; -using System.Collections; -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 enum IPv6Mode - { - Disabled, - SeparateSocket, - DualMode - } - - 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.NetPacketPool.Recycle(_packet); - _packet = null; - _manager.RecycleEvent(_evt); - } - - public void Recycle() - { - if(_manager.AutoRecycle) - throw new Exception("Recycle called with AutoRecycle enabled"); - RecycleInternal(); - } - } - - internal sealed class NetEvent - { - public NetEvent Next; - - public enum EType - { - Connect, - Disconnect, - Receive, - ReceiveUnconnected, - Error, - ConnectionLatencyUpdated, - Broadcast, - ConnectionRequest, - MessageDelivered - } - 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 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 class NetManager : INetSocketListener, 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 - { - get { return _p; } - } - - object IEnumerator.Current - { - get { return _p; } - } - } - -#if DEBUG - private struct IncomingData - { - public byte[] 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 readonly NetSocket _socket; - private Thread _logicThread; - - private readonly Queue _netEventsQueue; - private NetEvent _netEventPoolHead; - private readonly INetEventListener _netEventListener; - private readonly IDeliveryEventListener _deliveryEventListener; - - private readonly Dictionary _peersDict; - private readonly Dictionary _requestsDict; - private readonly ReaderWriterLockSlim _peersLock; - private volatile NetPeer _headPeer; - private volatile int _connectedPeersCount; - private readonly List _connectedPeerListCache; - private NetPeer[] _peersArray; - private readonly PacketLayerBase _extraPacketLayer; - private int _lastPeerId; - private readonly Queue _peerIds; - private byte _channelsCount = 1; - - internal readonly NetPacketPool NetPacketPool; - - //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 - /// - public int UpdateTime = 15; - - /// - /// Interval for latency detection and checking connection - /// - public int PingInterval = 1000; - - /// - /// If NetManager doesn't receive any packet from remote peer during this time 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 - /// - public int SimulationMinLatency = 30; - - /// - /// Maximum simulated latency - /// - 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 - /// - 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; - - /// - /// 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 { return _socket.IsRunning; } } - - /// - /// Local EndPoint (host and port) - /// - public int LocalPort { get { return _socket.LocalPort; } } - - /// - /// Automatically recycle NetPacketReader after OnReceive event - /// - public bool AutoRecycle; - - /// - /// IPv6 support - /// - public IPv6Mode IPv6Enabled = IPv6Mode.SeparateSocket; - - /// - /// First peer. Useful for Client mode - /// - public NetPeer FirstPeer - { - get { return _headPeer; } - } - - /// - /// QoS channel count per message type (value must be between 1 and 64 channels) - /// - public byte ChannelsCount - { - get { return _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) - { - return _peersArray[id]; - } - - /// - /// Returns connected peers count - /// - public int ConnectedPeersCount { get { return _connectedPeersCount; } } - - public int ExtraPacketSizeForLayer - { - get { return _extraPacketLayer != null ? _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; - _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; - lock (_peerIds) - _peerIds.Enqueue(peer.Id); - } - - /// - /// 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) - { - _socket = new NetSocket(this); - _netEventListener = listener; - _deliveryEventListener = listener as IDeliveryEventListener; - _netEventsQueue = new Queue(); - NetPacketPool = new NetPacketPool(); - NatPunchModule = new NatPunchModule(_socket); - Statistics = new NetStatistics(); - _connectedPeerListCache = new List(); - _peersDict = new Dictionary(new IPEndPointComparer()); - _requestsDict = new Dictionary(new IPEndPointComparer()); - _peersLock = new ReaderWriterLockSlim(LockRecursionPolicy.NoRecursion); - _peerIds = new Queue(); - _peersArray = new NetPeer[32]; - _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 int SendRawAndRecycle(NetPacket packet, IPEndPoint remoteEndPoint) - { - var result = SendRaw(packet.RawData, 0, packet.Size, remoteEndPoint); - NetPacketPool.Recycle(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 (!_socket.IsRunning) - return 0; - - SocketError errorCode = 0; - int result; - if (_extraPacketLayer != null) - { - var expandedPacket = NetPacketPool.GetPacket(length + _extraPacketLayer.ExtraPacketSizeForLayer); - Buffer.BlockCopy(message, start, expandedPacket.RawData, 0, length); - int newStart = 0; - _extraPacketLayer.ProcessOutBoundPacket(ref expandedPacket.RawData, ref newStart, ref length); - result = _socket.SendTo(expandedPacket.RawData, newStart, length, remoteEndPoint, ref errorCode); - NetPacketPool.Recycle(expandedPacket); - } - else - { - result = _socket.SendTo(message, start, length, remoteEndPoint, ref errorCode); - } - - NetPeer fromPeer; - switch (errorCode) - { - case SocketError.MessageSize: - NetDebug.Write(NetLogLevel.Trace, "[SRD] 10040, datalen: {0}", length); - return -1; - case SocketError.HostUnreachable: - if (TryGetPeer(remoteEndPoint, out fromPeer)) - DisconnectPeerForce(fromPeer, DisconnectReason.HostUnreachable, errorCode, null); - CreateEvent(NetEvent.EType.Error, remoteEndPoint: remoteEndPoint, errorCode: errorCode); - return -1; - case SocketError.NetworkUnreachable: - if (TryGetPeer(remoteEndPoint, out fromPeer)) - DisconnectPeerForce(fromPeer, DisconnectReason.NetworkUnreachable, errorCode, null); - CreateEvent(NetEvent.EType.Error, remoteEndPoint: remoteEndPoint, errorCode: errorCode); - return -1; - } - if (result <= 0) - return 0; - - if (EnableStatistics) - { - Statistics.PacketsSent++; - Statistics.BytesSent += (uint)length; - } - - return result; - } - - 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, - 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; - - do - { - evt = _netEventPoolHead; - if (evt == null) - { - evt = new NetEvent(this); - break; - } - } while (evt != Interlocked.CompareExchange(ref _netEventPoolHead, evt.Next, evt)); - - evt.Type = type; - evt.DataReader.SetSource(readerSource, readerSource == null ? 0 : readerSource.GetHeaderSize()); - evt.Peer = peer; - evt.RemoteEndPoint = remoteEndPoint; - evt.Latency = latency; - evt.ErrorCode = errorCode; - evt.DisconnectReason = disconnectReason; - evt.ConnectionRequest = connectionRequest; - evt.DeliveryMethod = deliveryMethod; - evt.UserData = userData; - - if (unsyncEvent) - { - ProcessEvent(evt); - } - else - { - lock (_netEventsQueue) - _netEventsQueue.Enqueue(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.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; - } - //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; - do - { - evt.Next = _netEventPoolHead; - } while (evt.Next != Interlocked.CompareExchange(ref _netEventPoolHead, evt, evt.Next)); - } - - //Update function - private void UpdateLogic() - { - var peersToRemove = new List(); - var stopwatch = new Stopwatch(); - stopwatch.Start(); - - while (_socket.IsRunning) - { -#if DEBUG - if (SimulateLatency) - { - var time = DateTime.UtcNow; - lock (_pingSimulationList) - { - for (int i = 0; i < _pingSimulationList.Count; i++) - { - var incomingData = _pingSimulationList[i]; - if (incomingData.TimeWhenGet <= time) - { - DataReceived(incomingData.Data, incomingData.Data.Length, incomingData.EndPoint); - _pingSimulationList.RemoveAt(i); - i--; - } - } - } - } -#endif - - ulong totalPacketLoss = 0; - - int elapsed = (int)stopwatch.ElapsedMilliseconds; - elapsed = elapsed <= 0 ? 1 : elapsed; - stopwatch.Reset(); - stopwatch.Start(); - - 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 (EnableStatistics) - { - totalPacketLoss += netPeer.Statistics.PacketLoss; - } - } - } - if (peersToRemove.Count > 0) - { - _peersLock.EnterWriteLock(); - for (int i = 0; i < peersToRemove.Count; i++) - RemovePeerInternal(peersToRemove[i]); - _peersLock.ExitWriteLock(); - peersToRemove.Clear(); - } - - if (EnableStatistics) - { - Statistics.PacketLoss = totalPacketLoss; - } - - int sleepTime = UpdateTime - (int)stopwatch.ElapsedMilliseconds; - if (sleepTime > 0) - Thread.Sleep(sleepTime); - } - stopwatch.Stop(); - } - - void INetSocketListener.OnMessageReceived(byte[] data, int length, SocketError errorCode, IPEndPoint remoteEndPoint) - { - if (errorCode != 0) - { - CreateEvent(NetEvent.EType.Error, errorCode: errorCode); - NetDebug.WriteError("[NM] Receive error: {0}", errorCode); - return; - } -#if DEBUG - if (SimulatePacketLoss && _randomGenerator.NextDouble() * 100 < SimulationPacketLossChance) - { - //drop packet - return; - } - if (SimulateLatency) - { - int latency = _randomGenerator.Next(SimulationMinLatency, SimulationMaxLatency); - if (latency > MinLatencyThreshold) - { - byte[] holdedData = new byte[length]; - Buffer.BlockCopy(data, 0, holdedData, 0, length); - - lock (_pingSimulationList) - { - _pingSimulationList.Add(new IncomingData - { - Data = holdedData, - EndPoint = remoteEndPoint, - TimeWhenGet = DateTime.UtcNow.AddMilliseconds(latency) - }); - } - //hold packet - return; - } - } -#endif - try - { - //ProcessEvents - DataReceived(data, length, remoteEndPoint); - } - catch(Exception e) - { - //protects socket receive thread - NetDebug.WriteError("[NM] SocketReceiveThread error: " + e ); - } - } - - 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 = NetPacketPool.GetWithProperty(PacketProperty.Disconnect, length); - shutdownPacket.ConnectionNumber = request.ConnectionNumber; - FastBitConverter.GetBytes(shutdownPacket.RawData, 1, request.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.ConnectionTime, request.ConnectionNumber, rejectData, start, length); - AddPeer(netPeer); - _peersLock.ExitUpgradeableReadLock(); - NetDebug.Write(NetLogLevel.Trace, "[NM] Peer connect reject."); - } - else //Accept - { - netPeer = new NetPeer(this, request.RemoteEndPoint, GetNextPeerId(), request.ConnectionTime, request.ConnectionNumber); - AddPeer(netPeer); - _peersLock.ExitUpgradeableReadLock(); - CreateEvent(NetEvent.EType.Connect, netPeer); - NetDebug.Write(NetLogLevel.Trace, "[NM] Received peer connection Id: {0}, EP: {1}", - netPeer.ConnectTime, netPeer.EndPoint); - } - } - - lock(_requestsDict) - _requestsDict.Remove(request.RemoteEndPoint); - - return netPeer; - } - - private int GetNextPeerId() - { - lock (_peerIds) - return _peerIds.Count == 0 ? _lastPeerId++ : _peerIds.Dequeue(); - } - - private void ProcessConnectRequest( - IPEndPoint remoteEndPoint, - NetPeer netPeer, - NetConnectRequestPacket connRequest) - { - byte connectionNumber = connRequest.ConnectionNumber; - ConnectionRequest req; - - //if we have peer - if (netPeer != null) - { - var processResult = netPeer.ProcessConnectRequest(connRequest); - NetDebug.Write("ConnectRequest LastId: {0}, NewId: {1}, EP: {2}, Result: {3}", - netPeer.ConnectTime, - connRequest.ConnectionTime, - remoteEndPoint, - 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) - connectionNumber = (byte)((netPeer.ConnectionNum + 1) % NetConstants.MaxConnectionNumber); - //To reconnect peer - } - else - { - NetDebug.Write("ConnectRequest Id: {0}, EP: {1}", connRequest.ConnectionTime, remoteEndPoint); - } - - lock (_requestsDict) - { - if (_requestsDict.TryGetValue(remoteEndPoint, out req)) - { - req.UpdateRequest(connRequest); - return; - } - req = new ConnectionRequest( - connRequest.ConnectionTime, - connectionNumber, - connRequest.Data, - remoteEndPoint, - this); - _requestsDict.Add(remoteEndPoint, req); - } - NetDebug.Write("[NM] Creating request event: " + connRequest.ConnectionTime); - CreateEvent(NetEvent.EType.ConnectionRequest, connectionRequest: req); - } - - private void DataReceived(byte[] reusableBuffer, int count, IPEndPoint remoteEndPoint) - { - if (EnableStatistics) - { - Statistics.PacketsReceived++; - Statistics.BytesReceived += (uint)count; - } - - if (_extraPacketLayer != null) - { - _extraPacketLayer.ProcessInboundPacket(ref reusableBuffer, ref count); - if (count == 0) - return; - } - - //empty packet - if (reusableBuffer[0] == (byte) PacketProperty.Empty) - return; - - //Try read packet - NetPacket packet = NetPacketPool.GetPacket(count); - if (!packet.FromBytes(reusableBuffer, 0, count)) - { - NetPacketPool.Recycle(packet); - NetDebug.WriteError("[NM] DataReceived: bad!"); - return; - } - - switch (packet.Property) - { - //special case connect request - case PacketProperty.ConnectRequest: - if (NetConnectRequestPacket.GetProtocolId(packet) != NetConstants.ProtocolId) - { - SendRawAndRecycle(NetPacketPool.GetWithProperty(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 - NetPeer netPeer; - _peersLock.EnterReadLock(); - bool peerFound = _peersDict.TryGetValue(remoteEndPoint, out netPeer); - _peersLock.ExitReadLock(); - - switch (packet.Property) - { - case PacketProperty.ConnectRequest: - var connRequest = NetConnectRequestPacket.FromData(packet); - if (connRequest != null) - ProcessConnectRequest(remoteEndPoint, netPeer, connRequest); - break; - case PacketProperty.PeerNotFound: - if (peerFound) - { - if (netPeer.ConnectionState != ConnectionState.Connected) - return; - if (packet.Size == 1) - { - //first reply - var p = NetPacketPool.GetWithProperty(PacketProperty.PeerNotFound, 9); - p.RawData[1] = 0; - FastBitConverter.GetBytes(p.RawData, 2, netPeer.ConnectTime); - SendRawAndRecycle(p, remoteEndPoint); - NetDebug.Write("PeerNotFound sending connectTime: {0}", netPeer.ConnectTime); - } - else if (packet.Size == 10 && packet.RawData[1] == 1 && BitConverter.ToInt64(packet.RawData, 2) == netPeer.ConnectTime) - { - //second reply - NetDebug.Write("PeerNotFound received our connectTime: {0}", netPeer.ConnectTime); - DisconnectPeerForce(netPeer, DisconnectReason.RemoteConnectionClose, 0, null); - } - } - else if (packet.Size == 10 && packet.RawData[1] == 0) - { - //send reply back - packet.RawData[1] = 1; - SendRawAndRecycle(packet, 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) - { - NetPacketPool.Recycle(packet); - return; - } - DisconnectPeerForce( - netPeer, - disconnectResult == DisconnectResult.Disconnect - ? DisconnectReason.RemoteConnectionClose - : DisconnectReason.ConnectionRejected, - 0, packet); - } - else - { - NetPacketPool.Recycle(packet); - } - //Send shutdown - SendRawAndRecycle(NetPacketPool.GetWithProperty(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(NetPacketPool.GetWithProperty(PacketProperty.PeerNotFound), remoteEndPoint); - break; - } - } - - internal void CreateReceiveEvent(NetPacket packet, DeliveryMethod method, int headerSize, NetPeer fromPeer) - { - NetEvent evt; - do - { - evt = _netEventPoolHead; - if (evt == null) - { - evt = new NetEvent(this); - break; - } - } while (evt != Interlocked.CompareExchange(ref _netEventPoolHead, evt.Next, evt)); - evt.Type = NetEvent.EType.Receive; - evt.DataReader.SetSource(packet, headerSize); - evt.Peer = fromPeer; - evt.DeliveryMethod = method; - if (UnsyncedEvents || UnsyncedReceiveEvent) - { - ProcessEvent(evt); - } - else - { - lock (_netEventsQueue) - _netEventsQueue.Enqueue(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) - { - if (!_socket.Bind(addressIPv4, addressIPv6, port, ReuseAddress, IPv6Enabled)) - return false; - _logicThread = new Thread(UpdateLogic) { Name = "LogicThread", IsBackground = true }; - _logicThread.Start(); - return true; - } - - /// - /// 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); - } - - /// - /// 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 - /// - /// 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 = NetPacketPool.GetWithData(PacketProperty.UnconnectedMessage, message, start, length); - return SendRawAndRecycle(packet, remoteEndPoint) > 0; - } - - 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) - { - NetPacket packet; - if (_extraPacketLayer != null) - { - var headerSize = NetPacket.GetHeaderSize(PacketProperty.Broadcast); - packet = NetPacketPool.GetPacket(headerSize + length + _extraPacketLayer.ExtraPacketSizeForLayer); - packet.Property = PacketProperty.Broadcast; - Buffer.BlockCopy(data, start, packet.RawData, headerSize, length); - var checksumComputeStart = 0; - int preCrcLength = length + headerSize; - _extraPacketLayer.ProcessOutBoundPacket(ref packet.RawData, ref checksumComputeStart, ref preCrcLength); - } - else - { - packet = NetPacketPool.GetWithData(PacketProperty.Broadcast, data, start, length); - } - - bool result = _socket.SendBroadcast(packet.RawData, 0, packet.Size, port); - NetPacketPool.Recycle(packet); - return result; - } - - /// - /// Flush all queued packets of all peers - /// - public void Flush() - { - for (var netPeer = _headPeer; netPeer != null; netPeer = netPeer.NextPeer) - netPeer.Flush(); - } - - /// - /// Receive all pending events. Call this in game update code - /// - public void PollEvents() - { - if (UnsyncedEvents) - return; - int eventsCount = _netEventsQueue.Count; - for(int i = 0; i < eventsCount; i++) - { - NetEvent evt; - lock (_netEventsQueue) - evt = _netEventsQueue.Dequeue(); - ProcessEvent(evt); - } - } - - /// - /// 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 (!_socket.IsRunning) - throw new InvalidOperationException("Client is not running"); - - NetPeer peer; - byte connectionNumber = 0; - - if (_requestsDict.ContainsKey(target)) - return null; - - _peersLock.EnterUpgradeableReadLock(); - if (_peersDict.TryGetValue(target, out 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 (!_socket.IsRunning) - return; - NetDebug.Write("[NM] Stop"); - - //Send last disconnect - for(var netPeer = _headPeer; netPeer != null; netPeer = netPeer.NextPeer) - netPeer.Shutdown(null, 0, 0, !sendDisconnectMessages); - - //Stop - _socket.Close(false); - _logicThread.Join(); - _logicThread = null; - - //clear peers - _peersLock.EnterWriteLock(); - _headPeer = null; - _peersDict.Clear(); - _peersArray = new NetPeer[32]; - _peersLock.ExitWriteLock(); - lock(_peerIds) - _peerIds.Clear(); -#if DEBUG - lock (_pingSimulationList) - _pingSimulationList.Clear(); -#endif - _connectedPeersCount = 0; - lock(_netEventsQueue) - _netEventsQueue.Clear(); - } - - /// - /// 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); - } - - public NetPeerEnumerator GetEnumerator() - { - return new NetPeerEnumerator(_headPeer); - } - - IEnumerator IEnumerable.GetEnumerator() - { - return new NetPeerEnumerator(_headPeer); - } - - IEnumerator IEnumerable.GetEnumerator() - { - return new NetPeerEnumerator(_headPeer); - } - } -} diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetManager.cs.meta b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetManager.cs.meta deleted file mode 100644 index 00c9b262e..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetManager.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 68a7d55eeb581134cb7700df070236f7 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetPacket.cs b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetPacket.cs deleted file mode 100644 index 330a392a2..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetPacket.cs +++ /dev/null @@ -1,276 +0,0 @@ -using System; -using System.Net; -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 LastProperty = Enum.GetValues(typeof(PacketProperty)).Length; - private static readonly int[] HeaderSizes; - - static NetPacket() - { - HeaderSizes = new int[LastProperty+1]; - 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 { return (PacketProperty)(RawData[0] & 0x1F); } - set { RawData[0] = (byte)((RawData[0] & 0xE0) | (byte)value); } - } - - public byte ConnectionNumber - { - get { return (byte)((RawData[0] & 0x60) >> 5); } - set { RawData[0] = (byte) ((RawData[0] & 0x9F) | (value << 5)); } - } - - public ushort Sequence - { - get { return BitConverter.ToUInt16(RawData, 1); } - set { FastBitConverter.GetBytes(RawData, 1, value); } - } - - public bool IsFragmented - { - get { return (RawData[0] & 0x80) != 0; } - } - - public void MarkFragmented() - { - RawData[0] |= 0x80; //set first bit - } - - public byte ChannelId - { - get { return RawData[3]; } - set { RawData[3] = value; } - } - - public ushort FragmentId - { - get { return BitConverter.ToUInt16(RawData, 4); } - set { FastBitConverter.GetBytes(RawData, 4, value); } - } - - public ushort FragmentPart - { - get { return BitConverter.ToUInt16(RawData, 6); } - set { FastBitConverter.GetBytes(RawData, 6, value); } - } - - public ushort FragmentsTotal - { - get { return 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]; - } - - //Packet constructor from byte array - public bool FromBytes(byte[] data, int start, int packetSize) - { - //Reading property - byte property = (byte)(data[start] & 0x1F); - bool fragmented = (data[start] & 0x80) != 0; - int headerSize = HeaderSizes[property]; - - if (property > LastProperty || packetSize < headerSize || - (fragmented && packetSize < headerSize + NetConstants.FragmentHeaderSize) || - data.Length < start + packetSize) - { - return false; - } - - Buffer.BlockCopy(data, start, RawData, 0, packetSize); - Size = (ushort)packetSize; - return true; - } - } - - internal sealed class NetConnectRequestPacket - { - public const int HeaderSize = 14; - public readonly long ConnectionTime; - public readonly byte ConnectionNumber; - public readonly byte[] TargetAddress; - public readonly NetDataReader Data; - - private NetConnectRequestPacket(long connectionTime, byte connectionNumber, byte[] targetAddress, NetDataReader data) - { - ConnectionTime = connectionTime; - ConnectionNumber = connectionNumber; - TargetAddress = targetAddress; - Data = data; - } - - 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 new id for peer - long connectionId = BitConverter.ToInt64(packet.RawData, 5); - - //Get target address - int addrSize = packet.RawData[13]; - if (addrSize != 16 && addrSize != 28) - return null; - byte[] addressBytes = new byte[addrSize]; - Buffer.BlockCopy(packet.RawData, 14, 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(connectionId, packet.ConnectionNumber, addressBytes, reader); - } - - public static NetPacket Make(NetDataWriter connectData, SocketAddress addressBytes, long connectId) - { - //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, connectId); - packet.RawData[13] = (byte)addressBytes.Size; - for (int i = 0; i < addressBytes.Size; i++) - packet.RawData[14+i] = addressBytes[i]; - Buffer.BlockCopy(connectData.Data, 0, packet.RawData, 14+addressBytes.Size, connectData.Length); - return packet; - } - } - - internal sealed class NetConnectAcceptPacket - { - public const int Size = 11; - public readonly long ConnectionId; - public readonly byte ConnectionNumber; - public readonly bool IsReusedPeer; - - private NetConnectAcceptPacket(long connectionId, byte connectionNumber, bool isReusedPeer) - { - ConnectionId = connectionId; - ConnectionNumber = connectionNumber; - IsReusedPeer = isReusedPeer; - } - - 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; - - return new NetConnectAcceptPacket(connectionId, connectionNumber, isReused == 1); - } - - public static NetPacket Make(long connectId, byte connectNum, bool reusedPeer) - { - var packet = new NetPacket(PacketProperty.ConnectAccept, 0); - FastBitConverter.GetBytes(packet.RawData, 1, connectId); - packet.RawData[9] = connectNum; - packet.RawData[10] = (byte)(reusedPeer ? 1 : 0); - return packet; - } - } -} diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetPacket.cs.meta b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetPacket.cs.meta deleted file mode 100644 index 3ade5758d..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetPacket.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9bbfda42bbf0c64468c913e03e91b6f5 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetPacketPool.cs b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetPacketPool.cs deleted file mode 100644 index 1157380e0..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetPacketPool.cs +++ /dev/null @@ -1,74 +0,0 @@ -using System; -using System.Threading; - -namespace LiteNetLib -{ - internal sealed class NetPacketPool - { - private NetPacket _head; - private int _count; - - public NetPacket GetWithData(PacketProperty property, byte[] data, int start, int length) - { - int headerSize = NetPacket.GetHeaderSize(property); - NetPacket packet = GetPacket(length + headerSize); - packet.Property = property; - Buffer.BlockCopy(data, start, packet.RawData, headerSize, length); - return packet; - } - - //Get packet with size - public NetPacket GetWithProperty(PacketProperty property, int size) - { - NetPacket packet = GetPacket(size + NetPacket.GetHeaderSize(property)); - packet.Property = property; - return packet; - } - - public NetPacket GetWithProperty(PacketProperty property) - { - NetPacket packet = GetPacket(NetPacket.GetHeaderSize(property)); - packet.Property = property; - return packet; - } - - public NetPacket GetPacket(int size) - { - if (size > NetConstants.MaxPacketSize) - return new NetPacket(size); - - NetPacket packet; - do - { - packet = _head; - if (packet == null) - return new NetPacket(size); - } while (packet != Interlocked.CompareExchange(ref _head, packet.Next, packet)); - - _count--; - packet.Size = size; - if (packet.RawData.Length < size) - packet.RawData = new byte[size]; - return packet; - } - - public void Recycle(NetPacket packet) - { - if (packet.RawData.Length > NetConstants.MaxPacketSize || _count >= NetConstants.PacketPoolSize) - { - //Don't pool big packets. Save memory - return; - } - - _count++; - - //Clean fragmented flag - packet.RawData[0] = 0; - - do - { - packet.Next = _head; - } while (packet.Next != Interlocked.CompareExchange(ref _head, packet, packet.Next)); - } - } -} diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetPacketPool.cs.meta b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetPacketPool.cs.meta deleted file mode 100644 index 9971336a0..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetPacketPool.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c9de9278957067a47b6fb32e6edcf6a8 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetPeer.cs b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetPeer.cs deleted file mode 100644 index 43c5516ec..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetPeer.cs +++ /dev/null @@ -1,1173 +0,0 @@ -#if DEBUG -#define STATS_ENABLED -#endif -using System; -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, - Any = Outgoing | Connected | ShutdownRequested - } - - 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 NetPacketPool _packetPool; - private readonly object _flushLock = new object(); - private readonly object _sendLock = new object(); - private readonly object _shutdownLock = new object(); - - internal volatile NetPeer NextPeer; - internal NetPeer PrevPeer; - - internal byte ConnectionNum - { - get { return _connectNum; } - private set - { - _connectNum = value; - _mergeData.ConnectionNumber = value; - _pingPacket.ConnectionNumber = value; - _pongPacket.ConnectionNumber = value; - } - } - - //Channels - private readonly Queue _unreliableChannel; - private readonly BaseChannel[] _channels; - private BaseChannel _headChannel; - - //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 ushort _fragmentId; - private readonly Dictionary _holdedFragments; - private readonly Dictionary _deliveredFramgnets; - - //Merging - private readonly NetPacket _mergeData; - private int _mergePos; - private int _mergeCount; - - //Connection - 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 readonly IPEndPoint EndPoint; - - /// - /// Peer parent NetManager - /// - public readonly NetManager NetManager; - - /// - /// Current connection state - /// - public ConnectionState ConnectionState { get { return _connectionState; } } - - /// - /// Connection time for internal purposes - /// - internal long ConnectTime { get { return _connectTime; } } - - /// - /// Peer id can be used as key in your dictionary of peers - /// - public readonly int Id; - - /// - /// Current ping in milliseconds - /// - public int Ping { get { return _avgRtt/2; } } - - /// - /// Current MTU - Maximum Transfer Unit ( maximum udp packet size without fragmentation ) - /// - public int Mtu { get { return _mtu; } } - - /// - /// Delta with remote time in ticks (not accurate) - /// positive - remote time > our time - /// - public long RemoteTimeDelta - { - get { return _remoteDelta; } - } - - /// - /// Remote UTC time (not accurate) - /// - public DateTime RemoteUtcTime - { - get { return new DateTime(DateTime.UtcNow.Ticks + _remoteDelta); } - } - - /// - /// Time since last packet received (including internal library packets) - /// - public int TimeSinceLastPacket { get { return _timeSinceLastPacket; } } - - internal double ResendDelay { get { return _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(); - _packetPool = netManager.NetPacketPool; - NetManager = netManager; - SetMtu(0); - - EndPoint = 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(64); - _headChannel = null; - _holdedFragments = new Dictionary(); - _deliveredFramgnets = new Dictionary(); - - _channels = new BaseChannel[netManager.ChannelsCount * 4]; - } - - private void SetMtu(int mtuIdx) - { - _mtu = NetConstants.PossibleMtu[mtuIdx] - NetManager.ExtraPacketSizeForLayer; - } - - /// - /// 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 * 4 + - (byte) (ordered ? DeliveryMethod.ReliableOrdered : DeliveryMethod.ReliableUnordered); - var channel = _channels[idx]; - return channel != null ? ((ReliableChannel)channel).PacketsInQueue : 0; - } - - private BaseChannel CreateChannel(byte idx) - { - BaseChannel newChannel = _channels[idx]; - if (newChannel != null) - return newChannel; - switch ((DeliveryMethod)(idx % 4)) - { - 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; - } - _channels[idx] = newChannel; - newChannel.Next = _headChannel; - _headChannel = newChannel; - 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); - _connectRequestPacket.ConnectionNumber = connectNum; - - //Send request - NetManager.SendRaw(_connectRequestPacket, EndPoint); - - NetDebug.Write(NetLogLevel.Trace, "[CC] ConnectId: {0}, ConnectNum: {1}", _connectTime, connectNum); - } - - //"Accept" incoming constructor - internal NetPeer(NetManager netManager, IPEndPoint remoteEndPoint, int id, long connectId, byte connectNum) - : this(netManager, remoteEndPoint, id) - { - _connectTime = connectId; - _connectionState = ConnectionState.Connected; - ConnectionNum = connectNum; - - //Make initial packet - _connectAcceptPacket = NetConnectAcceptPacket.Make(_connectTime, connectNum, false); - //Send - NetManager.SendRaw(_connectAcceptPacket, EndPoint); - - NetDebug.Write(NetLogLevel.Trace, "[CC] ConnectId: {0}", _connectTime); - } - - //Reject - internal void Reject(long connectionId, byte connectionNumber, byte[] data, int start, int length) - { - _connectTime = connectionId; - _connectNum = connectionNumber; - Shutdown(data, start, length, false); - } - - internal bool ProcessConnectAccept(NetConnectAcceptPacket packet) - { - if (_connectionState != ConnectionState.Outgoing) - return false; - - //check connection id - if (packet.ConnectionId != _connectTime) - { - NetDebug.Write(NetLogLevel.Trace, "[NC] Invalid connectId: {0}", _connectTime); - return false; - } - //check connect num - ConnectionNum = packet.ConnectionNumber; - - 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*4 + (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 packet size exceeded maximum of " + (mtu - headerSize) + " bytes"); - - int packetFullSize = mtu - headerSize; - int packetDataSize = packetFullSize - NetConstants.FragmentHeaderSize; - int totalPackets = length / packetDataSize + (length % packetDataSize == 0 ? 0 : 1); - - NetDebug.Write("FragmentSend:\n" + - " MTU: {0}\n" + - " headerSize: {1}\n" + - " packetFullSize: {2}\n" + - " packetDataSize: {3}\n" + - " totalPackets: {4}", - mtu, headerSize, packetFullSize, packetDataSize, totalPackets); - - if (totalPackets > ushort.MaxValue) - throw new TooBigPacketException("Data was split in " + totalPackets + " fragments, which exceeds " + ushort.MaxValue); - - ushort currentFramentId; - lock (_sendLock) - { - currentFramentId = _fragmentId; - _fragmentId++; - } - - for(ushort partIdx = 0; partIdx < totalPackets; partIdx++) - { - int sendLength = length > packetDataSize ? packetDataSize : length; - - NetPacket p = _packetPool.GetPacket(headerSize + sendLength + NetConstants.FragmentHeaderSize); - p.Property = property; - p.UserData = userData; - p.FragmentId = currentFramentId; - p.FragmentPart = partIdx; - p.FragmentsTotal = (ushort)totalPackets; - p.MarkFragmented(); - - Buffer.BlockCopy(data, partIdx * packetDataSize, p.RawData, NetConstants.FragmentedHeaderTotalSize, sendLength); - channel.AddToQueue(p); - - length -= sendLength; - } - return; - } - - //Else just send - NetPacket packet = _packetPool.GetPacket(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); - } - } - - 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 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, EndPoint); - 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: {0}, Part: {1}, Total: {2}", p.FragmentId, p.FragmentPart, p.FragmentsTotal); - //Get needed array from dictionary - ushort packetFragId = p.FragmentId; - IncomingFragments incomingFragments; - if (!_holdedFragments.TryGetValue(packetFragId, out 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) - { - _packetPool.Recycle(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 = _packetPool.GetPacket(incomingFragments.TotalSize); - - int firstFragmentSize = fragments[0].Size - NetConstants.FragmentedHeaderTotalSize; - for (int i = 0; i < incomingFragments.ReceivedCount; i++) - { - var fragment = fragments[i]; - //Create resulting big packet - Buffer.BlockCopy( - fragment.RawData, - NetConstants.FragmentedHeaderTotalSize, - resultingPacket.RawData, - firstFragmentSize * i, - fragment.Size - NetConstants.FragmentedHeaderTotalSize); - - //Free memory - _packetPool.Recycle(fragment); - } - Array.Clear(fragments, 0, incomingFragments.ReceivedCount); - - //Send to process - NetManager.CreateReceiveEvent(resultingPacket, method, 0, this); - - //Clear memory - _holdedFragments.Remove(packetFragId); - } - else //Just simple packet - { - NetManager.CreateReceiveEvent(p, method, 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 {0}, EMTU {1}, PSIZE {2}", receivedMtu, endMtuCheck, packet.Size); - return; - } - - if (packet.Property == PacketProperty.MtuCheck) - { - _mtuCheckAttempts = 0; - NetDebug.Write("[MTU] check. send back: " + receivedMtu); - packet.Property = PacketProperty.MtuOk; - NetManager.SendRawAndRecycle(packet, EndPoint); - } - else if(receivedMtu > _mtu && !_finishMtu) //MtuOk - { - //invalid packet - if (receivedMtu != NetConstants.PossibleMtu[_mtuIdx + 1]) - return; - - lock (_mtuMutex) - { - _mtuIdx++; - SetMtu(_mtuIdx); - } - //if maxed - finish. - if (_mtuIdx == NetConstants.PossibleMtu.Length - 1) - _finishMtu = true; - - 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]; - var p = _packetPool.GetPacket(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, EndPoint) <= 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 - else if (connRequest.ConnectionTime == _connectTime) - { - var remoteBytes = EndPoint.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, EndPoint); - } - //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) - { - _packetPool.Recycle(packet); - return; - } - if (packet.ConnectionNumber != _connectNum && packet.Property != PacketProperty.ShutdownOk) //without connectionNum - { - NetDebug.Write(NetLogLevel.Trace, "[RR]Old packet"); - _packetPool.Recycle(packet); - return; - } - Interlocked.Exchange(ref _timeSinceLastPacket, 0); - - NetDebug.Write("[RR]PacketProperty: {0}", 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; - NetPacket mergedPacket = _packetPool.GetPacket(size); - if (!mergedPacket.FromBytes(packet.RawData, pos, size)) - { - _packetPool.Recycle(packet); - break; - } - pos += size; - ProcessPacket(mergedPacket); - } - 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, EndPoint); - } - _packetPool.Recycle(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: {0} - {1} - {2}", packet.Sequence, elapsedMs, _remoteDelta); - } - _packetPool.Recycle(packet); - break; - - case PacketProperty.Ack: - case PacketProperty.Channeled: - if (packet.ChannelId > _channels.Length) - { - _packetPool.Recycle(packet); - break; - } - var channel = _channels[packet.ChannelId] ?? (packet.Property == PacketProperty.Ack ? null : CreateChannel(packet.ChannelId)); - if (channel != null) - { - if (!channel.ProcessPacket(packet)) - _packetPool.Recycle(packet); - } - break; - - //Simple packet without acks - case PacketProperty.Unreliable: - NetManager.CreateReceiveEvent(packet, DeliveryMethod.Unreliable, NetConstants.HeaderSize, this); - return; - - case PacketProperty.MtuCheck: - case PacketProperty.MtuOk: - ProcessMtuPacket(packet); - break; - - case PacketProperty.ShutdownOk: - if(_connectionState == ConnectionState.ShutdownRequested) - _connectionState = ConnectionState.Disconnected; - _packetPool.Recycle(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, EndPoint); - } - else - { - //Send without length information and merging - bytesSent = NetManager.SendRaw(_mergeData.RawData, NetConstants.HeaderSize + 2, _mergePos - 2, EndPoint); - } - - if (NetManager.EnableStatistics) - { - Statistics.PacketsSent++; - Statistics.BytesSent += (ulong)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, EndPoint); - - if (NetManager.EnableStatistics) - { - Statistics.PacketsSent++; - Statistics.BytesSent += (ulong)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); - } - - /// - /// Flush all queued packets - /// - public void Flush() - { - if (_connectionState != ConnectionState.Connected) - return; - lock (_flushLock) - { - BaseChannel currentChannel = _headChannel; - while (currentChannel != null) - { - currentChannel.SendNextPackets(); - currentChannel = currentChannel.Next; - } - - lock (_unreliableChannel) - { - while (_unreliableChannel.Count > 0) - { - NetPacket packet = _unreliableChannel.Dequeue(); - SendUserData(packet); - NetManager.NetPacketPool.Recycle(packet); - } - } - - SendMerged(); - } - } - - 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: {0} > {1}", - _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, EndPoint); - } - } - 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, EndPoint); - } - 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.Reset(); - _pingTimer.Start(); - NetManager.SendRaw(_pingPacket, EndPoint); - } - - //RTT - round trip time - _rttResetTimer += deltaTime; - if (_rttResetTimer >= NetManager.PingInterval * 3) - { - _rttResetTimer = 0; - _rtt = _avgRtt; - _rttCount = 1; - } - - UpdateMtuLogic(deltaTime); - - //Pending send - Flush(); - } - - //For reliable channel - internal void RecycleAndDeliver(NetPacket packet) - { - if (packet.UserData != null) - { - if (packet.IsFragmented) - { - ushort fragCount; - _deliveredFramgnets.TryGetValue(packet.FragmentId, out fragCount); - fragCount++; - if (fragCount == packet.FragmentsTotal) - { - NetManager.MessageDelivered(this, packet.UserData); - _deliveredFramgnets.Remove(packet.FragmentId); - } - else - { - _deliveredFramgnets[packet.FragmentId] = fragCount; - } - } - else - { - NetManager.MessageDelivered(this, packet.UserData); - } - packet.UserData = null; - } - _packetPool.Recycle(packet); - } - } -} diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetPeer.cs.meta b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetPeer.cs.meta deleted file mode 100644 index 05221246b..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetPeer.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7d8b1e2f1951cd64fa5f3ddaf623f006 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetSocket.cs b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetSocket.cs deleted file mode 100644 index ca686a301..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetSocket.cs +++ /dev/null @@ -1,483 +0,0 @@ -#if UNITY_5_3_OR_NEWER -#define UNITY -#if UNITY_IOS && !UNITY_EDITOR -using UnityEngine; -#endif -#endif -#if NETSTANDARD || NETCOREAPP -using System.Runtime.InteropServices; -#endif - -using System; -using System.Net; -using System.Net.Sockets; -using System.Threading; - -namespace LiteNetLib -{ -#if UNITY_IOS && !UNITY_EDITOR - public class UnitySocketFix : MonoBehaviour - { - internal IPAddress BindAddrIPv4; - internal IPAddress BindAddrIPv6; - internal bool Reuse; - internal IPv6Mode IPv6; - internal int Port; - internal bool Paused; - internal NetSocket Socket; - - private void Update() - { - if (Socket == null) - Destroy(gameObject); - } - - private void OnApplicationPause(bool pause) - { - if (Socket == null) - return; - if (pause) - { - Paused = true; - Socket.Close(true); - } - else if (Paused) - { - if (!Socket.Bind(BindAddrIPv4, BindAddrIPv6, Port, Reuse, IPv6)) - { - NetDebug.WriteError("[S] Cannot restore connection \"{0}\",\"{1}\" port {2}", BindAddrIPv4, BindAddrIPv6, Port); - Socket.OnErrorRestore(); - } - } - } - } -#endif - - internal interface INetSocketListener - { - void OnMessageReceived(byte[] data, int length, SocketError errorCode, IPEndPoint remoteEndPoint); - } - - internal sealed class NetSocket - { - public const int ReceivePollingTime = 500000; //0.5 second - private Socket _udpSocketv4; - private Socket _udpSocketv6; - private Thread _threadv4; - private Thread _threadv6; - private readonly INetSocketListener _listener; - private const int SioUdpConnreset = -1744830452; //SIO_UDP_CONNRESET = IOC_IN | IOC_VENDOR | 12 - private static readonly IPAddress MulticastAddressV6 = IPAddress.Parse("ff02::1"); - internal static readonly bool IPv6Support; -#if UNITY_IOS && !UNITY_EDITOR - private UnitySocketFix _unitySocketFix; - - public void OnErrorRestore() - { - Close(false); - _listener.OnMessageReceived(null, 0, SocketError.NotConnected, new IPEndPoint(0,0)); - } -#endif - public int LocalPort { get; private set; } - public volatile bool IsRunning; - - public short Ttl - { - get - { -#if UNITY_SWITCH - return 0; -#else - if (_udpSocketv4.AddressFamily == AddressFamily.InterNetworkV6) - return (short)_udpSocketv4.GetSocketOption(SocketOptionLevel.IPv6, SocketOptionName.HopLimit); - return _udpSocketv4.Ttl; -#endif - } - set - { -#if !UNITY_SWITCH - if (_udpSocketv4.AddressFamily == AddressFamily.InterNetworkV6) - _udpSocketv4.SetSocketOption(SocketOptionLevel.IPv6, SocketOptionName.HopLimit, value); - else - _udpSocketv4.Ttl = value; -#endif - } - } - - static NetSocket() - { -#if DISABLE_IPV6 || (!UNITY_EDITOR && ENABLE_IL2CPP && !UNITY_2018_3_OR_NEWER) - IPv6Support = false; -#elif !UNITY_2019_1_OR_NEWER && !UNITY_2018_4_OR_NEWER && (!UNITY_EDITOR && ENABLE_IL2CPP && UNITY_2018_3_OR_NEWER) - string version = UnityEngine.Application.unityVersion; - IPv6Support = Socket.OSSupportsIPv6 && int.Parse(version.Remove(version.IndexOf('f')).Split('.')[2]) >= 6; -#elif UNITY_2018_2_OR_NEWER - IPv6Support = Socket.OSSupportsIPv6; -#elif UNITY -#pragma warning disable 618 - IPv6Support = Socket.SupportsIPv6; -#pragma warning restore 618 -#else - IPv6Support = Socket.OSSupportsIPv6; -#endif - } - - public NetSocket(INetSocketListener listener) - { - _listener = listener; - } - - private bool IsActive() - { -#if UNITY_IOS && !UNITY_EDITOR - var unitySocketFix = _unitySocketFix; //save for multithread - if (unitySocketFix != null && unitySocketFix.Paused) - return false; -#endif - return IsRunning; - } - - private void ReceiveLogic(object state) - { - Socket socket = (Socket)state; - EndPoint bufferEndPoint = new IPEndPoint(socket.AddressFamily == AddressFamily.InterNetwork ? IPAddress.Any : IPAddress.IPv6Any, 0); - byte[] receiveBuffer = new byte[NetConstants.MaxPacketSize]; - - while (IsActive()) - { - int result; - - //Reading data - try - { - if (socket.Available == 0 && !socket.Poll(ReceivePollingTime, SelectMode.SelectRead)) - continue; - result = socket.ReceiveFrom(receiveBuffer, 0, receiveBuffer.Length, SocketFlags.None, - ref bufferEndPoint); - } - catch (SocketException ex) - { - switch (ex.SocketErrorCode) - { -#if UNITY_IOS && !UNITY_EDITOR - case SocketError.NotConnected: -#endif - case SocketError.Interrupted: - case SocketError.NotSocket: - return; - case SocketError.ConnectionReset: - case SocketError.MessageSize: - case SocketError.TimedOut: - NetDebug.Write(NetLogLevel.Trace, "[R]Ignored error: {0} - {1}", - (int)ex.SocketErrorCode, ex.ToString()); - break; - default: - NetDebug.WriteError("[R]Error code: {0} - {1}", (int)ex.SocketErrorCode, - ex.ToString()); - _listener.OnMessageReceived(null, 0, ex.SocketErrorCode, (IPEndPoint)bufferEndPoint); - break; - } - continue; - } - catch (ObjectDisposedException) - { - return; - } - - //All ok! - NetDebug.Write(NetLogLevel.Trace, "[R]Received data from {0}, result: {1}", bufferEndPoint.ToString(), result); - _listener.OnMessageReceived(receiveBuffer, result, 0, (IPEndPoint)bufferEndPoint); - } - } - - public bool Bind(IPAddress addressIPv4, IPAddress addressIPv6, int port, bool reuseAddress, IPv6Mode ipv6Mode) - { - if (IsActive()) - return false; - bool dualMode = ipv6Mode == IPv6Mode.DualMode && IPv6Support; - - _udpSocketv4 = new Socket( - dualMode ? AddressFamily.InterNetworkV6 : AddressFamily.InterNetwork, - SocketType.Dgram, - ProtocolType.Udp); - - if (!BindSocket(_udpSocketv4, new IPEndPoint(dualMode ? addressIPv6 : addressIPv4, port), reuseAddress, ipv6Mode)) - return false; - - LocalPort = ((IPEndPoint) _udpSocketv4.LocalEndPoint).Port; - -#if UNITY_IOS && !UNITY_EDITOR - if (_unitySocketFix == null) - { - var unityFixObj = new GameObject("LiteNetLib_UnitySocketFix"); - GameObject.DontDestroyOnLoad(unityFixObj); - _unitySocketFix = unityFixObj.AddComponent(); - _unitySocketFix.Socket = this; - _unitySocketFix.BindAddrIPv4 = addressIPv4; - _unitySocketFix.BindAddrIPv6 = addressIPv6; - _unitySocketFix.Reuse = reuseAddress; - _unitySocketFix.Port = LocalPort; - _unitySocketFix.IPv6 = ipv6Mode; - } - else - { - _unitySocketFix.Paused = false; - } -#endif - if (dualMode) - _udpSocketv6 = _udpSocketv4; - - IsRunning = true; - _threadv4 = new Thread(ReceiveLogic) - { - Name = "SocketThreadv4(" + LocalPort + ")", - IsBackground = true - }; - _threadv4.Start(_udpSocketv4); - - //Check IPv6 support - if (!IPv6Support || ipv6Mode != IPv6Mode.SeparateSocket) - return true; - - _udpSocketv6 = new Socket(AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp); - //Use one port for two sockets - if (BindSocket(_udpSocketv6, new IPEndPoint(addressIPv6, LocalPort), reuseAddress, ipv6Mode)) - { - _threadv6 = new Thread(ReceiveLogic) - { - Name = "SocketThreadv6(" + LocalPort + ")", - IsBackground = true - }; - _threadv6.Start(_udpSocketv6); - } - - return true; - } - - private bool BindSocket(Socket socket, IPEndPoint ep, bool reuseAddress, IPv6Mode ipv6Mode) - { - //Setup socket - socket.ReceiveTimeout = 500; - socket.SendTimeout = 500; - socket.ReceiveBufferSize = NetConstants.SocketBufferSize; - socket.SendBufferSize = NetConstants.SocketBufferSize; -#if !UNITY || UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN -#if NETSTANDARD || NETCOREAPP - if(RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) -#endif - try - { - socket.IOControl(SioUdpConnreset, new byte[] { 0 }, null); - } - catch - { - //ignored - } -#endif - - 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 (socket.AddressFamily == AddressFamily.InterNetwork) - { - Ttl = NetConstants.SocketTTL; - -#if NETSTANDARD || NETCOREAPP - if(!RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) -#endif - try { socket.DontFragment = true; } - catch (SocketException e) - { - NetDebug.WriteError("[B]DontFragment error: {0}", e.SocketErrorCode); - } - - try { socket.EnableBroadcast = true; } - catch (SocketException e) - { - NetDebug.WriteError("[B]Broadcast error: {0}", e.SocketErrorCode); - } - } - else //IPv6 specific - { - if (ipv6Mode == IPv6Mode.DualMode) - { - try - { - //Disable IPv6 only mode - socket.SetSocketOption(SocketOptionLevel.IPv6, (SocketOptionName)27, false); - } - catch(Exception e) - { - NetDebug.WriteError("[B]Bind exception (dualmode setting): {0}", e.ToString()); - } - } - } - - //Bind - try - { - socket.Bind(ep); - NetDebug.Write(NetLogLevel.Trace, "[B]Successfully binded to port: {0}", ((IPEndPoint)socket.LocalEndPoint).Port); - - //join multicast - if (socket.AddressFamily == AddressFamily.InterNetworkV6) - { - try - { -#if !UNITY - 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 && ipv6Mode != IPv6Mode.DualMode) - { - try - { - //Set IPv6Only - socket.SetSocketOption(SocketOptionLevel.IPv6, (SocketOptionName)27, true); - socket.Bind(ep); - } -#if UNITY_2018_3_OR_NEWER - catch (SocketException ex) - { - - //because its fixed in 2018_3 - NetDebug.WriteError("[B]Bind exception: {0}, errorCode: {1}", ex.ToString(), ex.SocketErrorCode); -#else - catch(SocketException) - { -#endif - return false; - } - return true; - } - break; - //hack for iOS (Unity3D) - case SocketError.AddressFamilyNotSupported: - return true; - } - NetDebug.WriteError("[B]Bind exception: {0}, errorCode: {1}", bindException.ToString(), bindException.SocketErrorCode); - return false; - } - return true; - } - - public bool SendBroadcast(byte[] data, int offset, int size, int port) - { - if (!IsActive()) - return false; - bool broadcastSuccess = false; - bool multicastSuccess = false; - try - { - broadcastSuccess = _udpSocketv4.SendTo( - data, - offset, - size, - SocketFlags.None, - new IPEndPoint(IPAddress.Broadcast, port)) > 0; - - if (_udpSocketv6 != null) - { - multicastSuccess = _udpSocketv6.SendTo( - data, - offset, - size, - SocketFlags.None, - new IPEndPoint(MulticastAddressV6, port)) > 0; - } - } - catch (Exception ex) - { - NetDebug.WriteError("[S][MCAST]" + ex); - return broadcastSuccess; - } - return broadcastSuccess || multicastSuccess; - } - - public int SendTo(byte[] data, int offset, int size, IPEndPoint remoteEndPoint, ref SocketError errorCode) - { - if (!IsActive()) - return 0; - try - { - var socket = _udpSocketv4; - if (remoteEndPoint.AddressFamily == AddressFamily.InterNetworkV6 && IPv6Support) - socket = _udpSocketv6; - int result = socket.SendTo(data, offset, size, SocketFlags.None, remoteEndPoint); - NetDebug.Write(NetLogLevel.Trace, "[S]Send packet to {0}, result: {1}", remoteEndPoint, result); - return result; - } - catch (SocketException ex) - { - switch (ex.SocketErrorCode) - { - case SocketError.NoBufferSpaceAvailable: - case SocketError.Interrupted: - return 0; - case SocketError.MessageSize: //do nothing - break; - default: - NetDebug.WriteError("[S]" + ex); - break; - } - errorCode = ex.SocketErrorCode; - return -1; - } - catch (Exception ex) - { - NetDebug.WriteError("[S]" + ex); - return -1; - } - } - - public void Close(bool suspend) - { - if (!suspend) - { - IsRunning = false; -#if UNITY_IOS && !UNITY_EDITOR - _unitySocketFix.Socket = null; - _unitySocketFix = null; -#endif - } - //cleanup dual mode - if (_udpSocketv4 == _udpSocketv6) - _udpSocketv6 = null; - - if (_udpSocketv4 != null) - _udpSocketv4.Close(); - if (_udpSocketv6 != null) - _udpSocketv6.Close(); - _udpSocketv4 = null; - _udpSocketv6 = null; - - if (_threadv4 != null && _threadv4 != Thread.CurrentThread) - _threadv4.Join(); - if (_threadv6 != null && _threadv6 != Thread.CurrentThread) - _threadv6.Join(); - _threadv4 = null; - _threadv6 = null; - } - } -} diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetSocket.cs.meta b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetSocket.cs.meta deleted file mode 100644 index cd3f6f5c0..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetSocket.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 1dbea90b528ba0448a61b7222dab0657 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetStatistics.cs b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetStatistics.cs deleted file mode 100644 index e763e7add..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetStatistics.cs +++ /dev/null @@ -1,39 +0,0 @@ -namespace LiteNetLib -{ - public sealed class NetStatistics - { - public ulong PacketsSent; - public ulong PacketsReceived; - public ulong BytesSent; - public ulong BytesReceived; - public ulong PacketLoss; - public ulong PacketLossPercent - { - get { return PacketsSent == 0 ? 0 : PacketLoss * 100 / PacketsSent; } - } - - public ulong SequencedPacketLoss; - - public void Reset() - { - PacketsSent = 0; - PacketsReceived = 0; - BytesSent = 0; - BytesReceived = 0; - PacketLoss = 0; - } - - 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/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetStatistics.cs.meta b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetStatistics.cs.meta deleted file mode 100644 index 081e3479b..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetStatistics.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: bdf18575c3cbb17488b16fe4463e64c4 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetUtils.cs b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetUtils.cs deleted file mode 100644 index a74ab113e..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetUtils.cs +++ /dev/null @@ -1,197 +0,0 @@ -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; - - IPAddress ipAddress; - if (!IPAddress.TryParse(hostStr, out ipAddress)) - { - if (NetSocket.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; - } - - private static IPAddress ResolveAddress(string hostStr, AddressFamily addressFamily) - { - IPAddress[] addresses = ResolveAddresses(hostStr); - foreach (IPAddress ip in addresses) - { - if (ip.AddressFamily == addressFamily) - { - return ip; - } - } - return null; - } - - private static IPAddress[] ResolveAddresses(string hostStr) - { -#if NETSTANDARD || NETCOREAPP - var hostTask = Dns.GetHostEntryAsync(hostStr); - hostTask.GetAwaiter().GetResult(); - var host = hostTask.Result; -#else - var host = Dns.GetHostEntry(hostStr); -#endif - return host.AddressList; - } - - /// - /// 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()); - } - } - } - catch - { - //ignored - } - - //Fallback mode (unity android) - if (targetList.Count == 0) - { - IPAddress[] addresses = ResolveAddresses(Dns.GetHostName()); - foreach (IPAddress ip in addresses) - { - if((ipv4 && ip.AddressFamily == AddressFamily.InterNetwork) || - (ipv6 && ip.AddressFamily == AddressFamily.InterNetworkV6)) - targetList.Add(ip.ToString()); - } - } - 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: {0}", NetSocket.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: {0}, Type: {1}, Ip: {2}, OpStatus: {3}", - ni.Name, - ni.NetworkInterfaceType.ToString(), - ip.Address.ToString(), - ni.OperationalStatus.ToString()); - } - } - } - } - catch (Exception e) - { - NetDebug.WriteForce(NetLogLevel.Info, "Error while getting interface infos: {0}", e.ToString()); - } - } - - internal static int RelativeSequenceNumber(int number, int expected) - { - return (number - expected + NetConstants.MaxSequence + NetConstants.HalfMaxSequence) % NetConstants.MaxSequence - NetConstants.HalfMaxSequence; - } - } -} diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetUtils.cs.meta b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetUtils.cs.meta deleted file mode 100644 index ceef83804..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/NetUtils.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9ba71ed4d3dcdf747abc2f5fc7a2a6dd -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/ReliableChannel.cs b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/ReliableChannel.cs deleted file mode 100644 index 68e98ccef..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/ReliableChannel.cs +++ /dev/null @@ -1,323 +0,0 @@ -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; - } - - public void TrySend(long currentTime, NetPeer peer) - { - if (_packet == null) - return; - if (_isSent) //check send time - { - double resendDelay = peer.ResendDelay * TimeSpan.TicksPerMillisecond; - double packetHoldTime = currentTime - _timeStamp; - if (packetHoldTime < resendDelay) - return; - NetDebug.Write("[RC]Resend: {0} > {1}", (int)packetHoldTime, resendDelay); - } - _timeStamp = currentTime; - _isSent = true; - peer.SendUserData(_packet); - } - - 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 DEBUG - Peer.Statistics.PacketLoss++; -#else - if (Peer.NetManager.EnableStatistics) - { - Peer.Statistics.PacketLoss++; - } -#endif - - //Skip false ack - NetDebug.Write("[PA]False ack: {0}", 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: {0} - true", pendingSeq); - } - } - } - - public override void SendNextPackets() - { - if (_mustSendAcks) - { - _mustSendAcks = false; - NetDebug.Write("[RR]SendAcks"); - lock(_outgoingAcks) - Peer.SendUserData(_outgoingAcks); - } - - long currentTime = DateTime.UtcNow.Ticks; - 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) - _pendingPackets[pendingSeq % _windowSize].TrySend(currentTime, Peer); - } - } - - //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"); - return false; - } - - //save ack - _outgoingAcks.RawData[ackByte] |= (byte) (1 << ackBit); - } - - //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; - } - } -} \ No newline at end of file diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/ReliableChannel.cs.meta b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/ReliableChannel.cs.meta deleted file mode 100644 index 7d58afb32..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/ReliableChannel.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c27d3fcb06848ee46b913dc9029ce2cd -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/SequencedChannel.cs b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/SequencedChannel.cs deleted file mode 100644 index e2f01e608..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/SequencedChannel.cs +++ /dev/null @@ -1,99 +0,0 @@ -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}; - } - - public override void SendNextPackets() - { - if (_reliable && OutgoingQueue.Count == 0) - { - long currentTime = DateTime.UtcNow.Ticks; - long packetHoldTime = currentTime - _lastPacketSendTime; - if (packetHoldTime < Peer.ResendDelay * TimeSpan.TicksPerMillisecond) - return; - 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.NetPacketPool.Recycle(packet); - } - } - } - } - - if (_reliable && _mustSendAck) - { - _mustSendAck = false; - _ackPacket.Sequence = _remoteSequence; - Peer.SendUserData(_ackPacket); - } - } - - 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) - { - Peer.Statistics.PacketLoss += (ulong)(relative - 1); - _remoteSequence = packet.Sequence; - Peer.NetManager.CreateReceiveEvent( - packet, - _reliable ? DeliveryMethod.ReliableSequenced : DeliveryMethod.Sequenced, - NetConstants.ChanneledHeaderSize, - Peer); - packetProcessed = true; - } - _mustSendAck = true; - return packetProcessed; - } - } -} diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/SequencedChannel.cs.meta b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/SequencedChannel.cs.meta deleted file mode 100644 index 00efc7892..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/SequencedChannel.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 80bbd04014ae8cb48ab6513dc3b32646 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils.meta b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils.meta deleted file mode 100644 index e7c3377f2..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: b42820447c8a8454e9f0fa10fa865fa2 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/CRC32C.cs b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/CRC32C.cs deleted file mode 100644 index dd677e7e0..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/CRC32C.cs +++ /dev/null @@ -1,111 +0,0 @@ -#if NETCOREAPP3_0 -using System; -using System.Runtime.InteropServices; -using System.Runtime.Intrinsics.X86; -#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 - if(Sse42.IsSupported) - return; -#endif - Table = new uint[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 - 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 - 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/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/CRC32C.cs.meta b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/CRC32C.cs.meta deleted file mode 100644 index 3acf043c4..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/CRC32C.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b9bc296b45361e44fb4b61c5c7f8ca43 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/FastBitConverter.cs b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/FastBitConverter.cs deleted file mode 100644 index 3693a027f..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/FastBitConverter.cs +++ /dev/null @@ -1,118 +0,0 @@ -using System.Runtime.InteropServices; - -namespace LiteNetLib.Utils -{ - public static class FastBitConverter - { - [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; - } - - 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 - } - - 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 - } - - 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 - } - - public static void GetBytes(byte[] bytes, int startIndex, double value) - { - ConverterHelperDouble ch = new ConverterHelperDouble { Adouble = value }; - WriteLittleEndian(bytes, startIndex, ch.Along); - } - - public static void GetBytes(byte[] bytes, int startIndex, float value) - { - ConverterHelperFloat ch = new ConverterHelperFloat { Afloat = value }; - WriteLittleEndian(bytes, startIndex, ch.Aint); - } - - public static void GetBytes(byte[] bytes, int startIndex, short value) - { - WriteLittleEndian(bytes, startIndex, value); - } - - public static void GetBytes(byte[] bytes, int startIndex, ushort value) - { - WriteLittleEndian(bytes, startIndex, (short)value); - } - - public static void GetBytes(byte[] bytes, int startIndex, int value) - { - WriteLittleEndian(bytes, startIndex, value); - } - - public static void GetBytes(byte[] bytes, int startIndex, uint value) - { - WriteLittleEndian(bytes, startIndex, (int)value); - } - - public static void GetBytes(byte[] bytes, int startIndex, long value) - { - WriteLittleEndian(bytes, startIndex, (ulong)value); - } - - public static void GetBytes(byte[] bytes, int startIndex, ulong value) - { - WriteLittleEndian(bytes, startIndex, value); - } - } -} diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/FastBitConverter.cs.meta b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/FastBitConverter.cs.meta deleted file mode 100644 index cbb6cc918..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/FastBitConverter.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: db75e586fc1fe264e9bc12949520676c -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/INetSerializable.cs b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/INetSerializable.cs deleted file mode 100644 index 92f14beed..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/INetSerializable.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace LiteNetLib.Utils -{ - public interface INetSerializable - { - void Serialize(NetDataWriter writer); - void Deserialize(NetDataReader reader); - } -} diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/INetSerializable.cs.meta b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/INetSerializable.cs.meta deleted file mode 100644 index acb566db0..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/INetSerializable.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 067110f4d769ffe43959f64f7a32a178 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/NetDataReader.cs b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/NetDataReader.cs deleted file mode 100644 index 60c29f196..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/NetDataReader.cs +++ /dev/null @@ -1,694 +0,0 @@ -using System; -using System.Net; -using System.Text; - -namespace LiteNetLib.Utils -{ - public class NetDataReader - { - protected byte[] _data; - protected int _position; - protected int _dataSize; - private int _offset; - - public byte[] RawData - { - get { return _data; } - } - - public int RawDataSize - { - get { return _dataSize; } - } - - public int UserDataOffset - { - get { return _offset; } - } - - public int UserDataSize - { - get { return _dataSize - _offset; } - } - - public bool IsNull - { - get { return _data == null; } - } - - public int Position - { - get { return _position; } - } - - public bool EndOfData - { - get { return _position == _dataSize; } - } - - public int AvailableBytes - { - get { return _dataSize - _position; } - } - - public void SkipBytes(int count) - { - _position += count; - } - - 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) - { - _data = source; - _position = offset; - _offset = offset; - _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) - { - SetSource(source, offset); - } - - 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 += 1; - return res; - } - - public sbyte GetSByte() - { - var b = (sbyte)_data[_position]; - _position++; - return b; - } - - public bool[] GetBoolArray() - { - ushort size = BitConverter.ToUInt16(_data, _position); - _position += 2; - var arr = new bool[size]; - Buffer.BlockCopy(_data, _position, arr, 0, size); - _position += size; - return arr; - } - - public ushort[] GetUShortArray() - { - ushort size = BitConverter.ToUInt16(_data, _position); - _position += 2; - var arr = new ushort[size]; - Buffer.BlockCopy(_data, _position, arr, 0, size * 2); - _position += size * 2; - return arr; - } - - public short[] GetShortArray() - { - ushort size = BitConverter.ToUInt16(_data, _position); - _position += 2; - var arr = new short[size]; - Buffer.BlockCopy(_data, _position, arr, 0, size * 2); - _position += size * 2; - return arr; - } - - public long[] GetLongArray() - { - ushort size = BitConverter.ToUInt16(_data, _position); - _position += 2; - var arr = new long[size]; - Buffer.BlockCopy(_data, _position, arr, 0, size * 8); - _position += size * 8; - return arr; - } - - public ulong[] GetULongArray() - { - ushort size = BitConverter.ToUInt16(_data, _position); - _position += 2; - var arr = new ulong[size]; - Buffer.BlockCopy(_data, _position, arr, 0, size * 8); - _position += size * 8; - return arr; - } - - public int[] GetIntArray() - { - ushort size = BitConverter.ToUInt16(_data, _position); - _position += 2; - var arr = new int[size]; - Buffer.BlockCopy(_data, _position, arr, 0, size * 4); - _position += size * 4; - return arr; - } - - public uint[] GetUIntArray() - { - ushort size = BitConverter.ToUInt16(_data, _position); - _position += 2; - var arr = new uint[size]; - Buffer.BlockCopy(_data, _position, arr, 0, size * 4); - _position += size * 4; - return arr; - } - - public float[] GetFloatArray() - { - ushort size = BitConverter.ToUInt16(_data, _position); - _position += 2; - var arr = new float[size]; - Buffer.BlockCopy(_data, _position, arr, 0, size * 4); - _position += size * 4; - return arr; - } - - public double[] GetDoubleArray() - { - ushort size = BitConverter.ToUInt16(_data, _position); - _position += 2; - var arr = new double[size]; - Buffer.BlockCopy(_data, _position, arr, 0, size * 8); - _position += size * 8; - return arr; - } - - public string[] GetStringArray() - { - ushort size = BitConverter.ToUInt16(_data, _position); - _position += 2; - var arr = new string[size]; - for (int i = 0; i < size; i++) - { - arr[i] = GetString(); - } - return arr; - } - - public string[] GetStringArray(int maxStringLength) - { - ushort size = BitConverter.ToUInt16(_data, _position); - _position += 2; - var arr = new string[size]; - for (int i = 0; i < size; i++) - { - arr[i] = GetString(maxStringLength); - } - return arr; - } - - public bool GetBool() - { - bool res = _data[_position] > 0; - _position += 1; - return res; - } - - public char GetChar() - { - char result = BitConverter.ToChar(_data, _position); - _position += 2; - return result; - } - - 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; - } - - public string GetString(int maxLength) - { - int bytesCount = GetInt(); - if (bytesCount <= 0 || bytesCount > maxLength*2) - { - return string.Empty; - } - - int charCount = Encoding.UTF8.GetCharCount(_data, _position, bytesCount); - if (charCount > maxLength) - { - return string.Empty; - } - - string result = Encoding.UTF8.GetString(_data, _position, bytesCount); - _position += bytesCount; - return result; - } - - public string GetString() - { - int bytesCount = GetInt(); - if (bytesCount <= 0) - { - return string.Empty; - } - - string result = Encoding.UTF8.GetString(_data, _position, bytesCount); - _position += bytesCount; - return result; - } - - public ArraySegment GetRemainingBytesSegment() - { - ArraySegment segment = new ArraySegment(_data, _position, AvailableBytes); - _position = _data.Length; - return segment; - } - - public T Get() where T : INetSerializable, new() - { - var obj = new T(); - 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() - { - int length = GetInt(); - sbyte[] outgoingData = new sbyte[length]; - Buffer.BlockCopy(_data, _position, outgoingData, 0, length); - _position += length; - return outgoingData; - } - - public byte[] GetBytesWithLength() - { - int length = GetInt(); - byte[] outgoingData = new byte[length]; - Buffer.BlockCopy(_data, _position, outgoingData, 0, length); - _position += length; - return outgoingData; - } - #endregion - - #region PeekMethods - - public byte PeekByte() - { - return _data[_position]; - } - - public sbyte PeekSByte() - { - return (sbyte)_data[_position]; - } - - public bool PeekBool() - { - return _data[_position] > 0; - } - - public char PeekChar() - { - return BitConverter.ToChar(_data, _position); - } - - 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); - } - - public string PeekString(int maxLength) - { - int bytesCount = BitConverter.ToInt32(_data, _position); - if (bytesCount <= 0 || bytesCount > maxLength * 2) - { - return string.Empty; - } - - int charCount = Encoding.UTF8.GetCharCount(_data, _position + 4, bytesCount); - if (charCount > maxLength) - { - return string.Empty; - } - - string result = Encoding.UTF8.GetString(_data, _position + 4, bytesCount); - return result; - } - - public string PeekString() - { - int bytesCount = BitConverter.ToInt32(_data, _position); - if (bytesCount <= 0) - { - return string.Empty; - } - - string result = Encoding.UTF8.GetString(_data, _position + 4, bytesCount); - return result; - } - #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 (AvailableBytes >= 2) - { - result = GetChar(); - return true; - } - result = '\0'; - return false; - } - - 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 >= 4) - { - var bytesCount = PeekInt(); - if (AvailableBytes >= bytesCount + 4) - { - result = GetString(); - return true; - } - } - result = null; - return false; - } - - public bool TryGetStringArray(out string[] result) - { - ushort size; - if (!TryGetUShort(out size)) - { - result = null; - return false; - } - - result = new string[size]; - for (int i = 0; i < size; i++) - { - if (!TryGetString(out result[i])) - { - result = null; - return false; - } - } - - return true; - } - - public bool TryGetBytesWithLength(out byte[] result) - { - if (AvailableBytes >= 4) - { - var length = PeekInt(); - if (length >= 0 && AvailableBytes >= length + 4) - { - result = GetBytesWithLength(); - return true; - } - } - result = null; - return false; - } - #endregion - - public void Clear() - { - _position = 0; - _dataSize = 0; - _data = null; - } - } -} - diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/NetDataReader.cs.meta b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/NetDataReader.cs.meta deleted file mode 100644 index 66fbe56ad..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/NetDataReader.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d531661040bfd9942b93adcf122d67a2 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/NetDataWriter.cs b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/NetDataWriter.cs deleted file mode 100644 index 4f4f855f0..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/NetDataWriter.cs +++ /dev/null @@ -1,382 +0,0 @@ -using System; -using System.Net; -using System.Text; - -namespace LiteNetLib.Utils -{ - public class NetDataWriter - { - protected byte[] _data; - protected int _position; - private const int InitialSize = 64; - private readonly bool _autoResize; - - public int Capacity - { - get { return _data.Length; } - } - - 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}; - } - - /// - /// 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; - } - - public void ResizeIfNeed(int newSize) - { - int len = _data.Length; - if (len < newSize) - { - while (len < newSize) - len *= 2; - Array.Resize(ref _data, len); - } - } - - 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; - } - - public byte[] Data - { - get { return _data; } - } - - public int Length - { - get { return _position; } - } - - 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) - { - if (_autoResize) - ResizeIfNeed(_position + 2); - FastBitConverter.GetBytes(_data, _position, value); - _position += 2; - } - - 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, int length) - { - if (_autoResize) - ResizeIfNeed(_position + length + 4); - FastBitConverter.GetBytes(_data, _position, length); - Buffer.BlockCopy(data, offset, _data, _position + 4, length); - _position += length + 4; - } - - public void PutSBytesWithLength(sbyte[] data) - { - if (_autoResize) - ResizeIfNeed(_position + data.Length + 4); - FastBitConverter.GetBytes(_data, _position, data.Length); - Buffer.BlockCopy(data, 0, _data, _position + 4, data.Length); - _position += data.Length + 4; - } - - public void PutBytesWithLength(byte[] data, int offset, int length) - { - if (_autoResize) - ResizeIfNeed(_position + length + 4); - FastBitConverter.GetBytes(_data, _position, length); - Buffer.BlockCopy(data, offset, _data, _position + 4, length); - _position += length + 4; - } - - public void PutBytesWithLength(byte[] data) - { - if (_autoResize) - ResizeIfNeed(_position + data.Length + 4); - FastBitConverter.GetBytes(_data, _position, data.Length); - Buffer.BlockCopy(data, 0, _data, _position + 4, data.Length); - _position += data.Length + 4; - } - - public void Put(bool value) - { - if (_autoResize) - ResizeIfNeed(_position + 1); - _data[_position] = (byte)(value ? 1 : 0); - _position++; - } - - private 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 len = value == null ? (ushort)0 : (ushort)value.Length; - Put(len); - for (int i = 0; i < len; i++) - Put(value[i]); - } - - public void PutArray(string[] value, int maxLength) - { - ushort len = value == null ? (ushort)0 : (ushort)value.Length; - Put(len); - for (int i = 0; i < len; i++) - Put(value[i], maxLength); - } - - public void Put(IPEndPoint endPoint) - { - Put(endPoint.Address.ToString()); - Put(endPoint.Port); - } - - public void Put(string value) - { - if (string.IsNullOrEmpty(value)) - { - Put(0); - return; - } - - //put bytes count - int bytesCount = Encoding.UTF8.GetByteCount(value); - if (_autoResize) - ResizeIfNeed(_position + bytesCount + 4); - Put(bytesCount); - - //put string - Encoding.UTF8.GetBytes(value, 0, value.Length, _data, _position); - _position += bytesCount; - } - - public void Put(string value, int maxLength) - { - if (string.IsNullOrEmpty(value)) - { - Put(0); - return; - } - - int length = value.Length > maxLength ? maxLength : value.Length; - //calculate max count - int bytesCount = Encoding.UTF8.GetByteCount(value); - if (_autoResize) - ResizeIfNeed(_position + bytesCount + 4); - - //put bytes count - Put(bytesCount); - - //put string - Encoding.UTF8.GetBytes(value, 0, length, _data, _position); - - _position += bytesCount; - } - - public void Put(T obj) where T : INetSerializable - { - obj.Serialize(this); - } - } -} diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/NetDataWriter.cs.meta b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/NetDataWriter.cs.meta deleted file mode 100644 index b4b37ce3a..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/NetDataWriter.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 69c77411d55e98941802ca35835dd3da -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/NetPacketProcessor.cs b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/NetPacketProcessor.cs deleted file mode 100644 index f77015ed7..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/NetPacketProcessor.cs +++ /dev/null @@ -1,314 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace LiteNetLib.Utils -{ - public class NetPacketProcessor - { - private static class HashCache - { - public static bool Initialized; - public static ulong Id; - } - - protected delegate void SubscribeDelegate(NetDataReader reader, object userData); - private readonly NetSerializer _netSerializer; - private readonly Dictionary _callbacks = new Dictionary(); - private readonly NetDataWriter _netDataWriter = new NetDataWriter(); - - public NetPacketProcessor() - { - _netSerializer = new NetSerializer(); - } - - public NetPacketProcessor(int maxStringLength) - { - _netSerializer = new NetSerializer(maxStringLength); - } - - //FNV-1 64 bit hash - protected virtual ulong GetHash() - { - if(HashCache.Initialized) - return HashCache.Id; - - ulong hash = 14695981039346656037UL; //offset - string typeName = typeof(T).FullName; - for (var i = 0; i < typeName.Length; i++) - { - hash = hash ^ typeName[i]; - hash *= 1099511628211UL; //prime - } - HashCache.Initialized = true; - HashCache.Id = hash; - return hash; - } - - protected virtual SubscribeDelegate GetCallbackFromData(NetDataReader reader) - { - var hash = reader.GetULong(); - SubscribeDelegate action; - if (!_callbacks.TryGetValue(hash, out 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 Send(NetPeer peer, T packet, DeliveryMethod options) where T : class, new() - { - _netDataWriter.Reset(); - Write(_netDataWriter, packet); - peer.Send(_netDataWriter, options); - } - - public void SendNetSerializable(NetPeer peer, T packet, DeliveryMethod options) where T : INetSerializable - { - _netDataWriter.Reset(); - WriteNetSerializable(_netDataWriter, packet); - peer.Send(_netDataWriter, options); - } - - public void Send(NetManager manager, T packet, DeliveryMethod options) where T : class, new() - { - _netDataWriter.Reset(); - Write(_netDataWriter, packet); - manager.SendToAll(_netDataWriter, options); - } - - public void SendNetSerializable(NetManager manager, T packet, DeliveryMethod options) where T : INetSerializable - { - _netDataWriter.Reset(); - WriteNetSerializable(_netDataWriter, packet); - manager.SendToAll(_netDataWriter, options); - } - - public void Write(NetDataWriter writer, T packet) where T : class, new() - { - WriteHash(writer); - _netSerializer.Serialize(writer, packet); - } - - public void WriteNetSerializable(NetDataWriter writer, T packet) where T : INetSerializable - { - WriteHash(writer); - packet.Serialize(writer); - } - - public byte[] Write(T packet) where T : class, new() - { - _netDataWriter.Reset(); - WriteHash(_netDataWriter); - _netSerializer.Serialize(_netDataWriter, packet); - return _netDataWriter.CopyData(); - } - - public byte[] WriteNetSerializable(T packet) where T : INetSerializable - { - _netDataWriter.Reset(); - WriteHash(_netDataWriter); - packet.Serialize(_netDataWriter); - return _netDataWriter.CopyData(); - } - - /// - /// 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/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/NetPacketProcessor.cs.meta b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/NetPacketProcessor.cs.meta deleted file mode 100644 index 622176775..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/NetPacketProcessor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9b0c0e8aa2c23504fbc252cd239cddbc -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/NetSerializer.cs b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/NetSerializer.cs deleted file mode 100644 index 7609248c2..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/NetSerializer.cs +++ /dev/null @@ -1,752 +0,0 @@ -using System; -using System.Reflection; -using System.Collections.Generic; -using System.Net; - -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) - { - TProperty elem; - ElementRead(r, out 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) - { - int len; - var list = ReadListHelper(inf, r, out len); - int listCount = list.Count; - if (len > listCount) - { - for (int i = 0; i < listCount; i++) - list[i] = _reader(r); - for (int i = listCount; i < len; i++) - list.Add(_reader(r)); - return; - } - if (len < listCount) - list.RemoveRange(len, listCount - len); - for (int i = 0; i < len; i++) - list[i] = _reader(r); - } - - public override void WriteList(TClass inf, NetDataWriter w) - { - int len; - var list = WriteListHelper(inf, w, out 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) - { - int len; - var list = ReadListHelper(inf, r, out len); - int listCount = list.Count; - if (len > listCount) - { - for (int i = 0; i < listCount; i++) - list[i].Deserialize(r); - for (int i = listCount; i < len; i++) - { - var itm = default(TProperty); - itm.Deserialize(r); - list.Add(itm); - } - return; - } - if(len < listCount) - list.RemoveRange(len, listCount - len); - for (int i = 0; i < len; i++) - list[i].Deserialize(r); - } - - public override void WriteList(TClass inf, NetDataWriter w) - { - int len; - var list = WriteListHelper(inf, w, out 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); - if(p != null) - p.Serialize(w); - } - - public override void ReadList(TClass inf, NetDataReader r) - { - int len; - var list = ReadListHelper(inf, r, out len); - int listCount = list.Count; - if (len > listCount) - { - for (int i = 0; i < listCount; i++) - list[i].Deserialize(r); - for (int i = listCount; i < len; i++) - { - var itm = _constructor(); - itm.Deserialize(r); - list.Add(itm); - } - return; - } - if (len < listCount) - list.RemoveRange(len, listCount - len); - for (int i = 0; i < len; i++) - list[i].Deserialize(r); - } - - public override void WriteList(TClass inf, NetDataWriter w) - { - int len; - var list = WriteListHelper(inf, w, out 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; - } - - 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 - { - CustomType customType; - _registeredTypes.TryGetValue(elementType, out 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/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/NetSerializer.cs.meta b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/NetSerializer.cs.meta deleted file mode 100644 index ec0757be8..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/NetSerializer.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 15d07ef2204a4b04a9b6a94a1b7e61ae -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/NtpPacket.cs b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/NtpPacket.cs deleted file mode 100644 index 86db7685f..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/NtpPacket.cs +++ /dev/null @@ -1,426 +0,0 @@ -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; private set; } - - /// - /// 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 - { - get { return (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 { return (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 { return (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 { get { return 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 { get { return Bytes[2]; } } - - /// - /// Gets the precision of server clock. - /// - /// - /// Clock precision in log2 seconds, e.g. -20 for microsecond precision. - /// - public int Precision { get { return (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 { get { return 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 { get { return 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 { get { return 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 { get { return 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 { get { return 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 { get { return 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, - } -} \ No newline at end of file diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/NtpPacket.cs.meta b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/NtpPacket.cs.meta deleted file mode 100644 index 67da41973..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/NtpPacket.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 17522d9782736174d811ad894ecf20be -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/NtpRequest.cs b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/NtpRequest.cs deleted file mode 100644 index 591b8be8a..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/NtpRequest.cs +++ /dev/null @@ -1,175 +0,0 @@ -using System; -using System.Net; -using System.Net.Sockets; - -#if NETSTANDARD || NETCOREAPP -using System.Threading.Tasks; -#endif - -namespace LiteNetLib.Utils -{ - /// - /// Make NTP request. - /// - /// 1. Create the object by method. - /// - /// - /// 2. Use method to send requests. - /// - /// - /// 3. Call to release the socket AFTER you have received the response or some timeout. - /// If you close the socket too early, you may miss the response. - /// - /// - public sealed class NtpRequest : INetSocketListener - { - public const int DefaultPort = 123; - - private readonly NetSocket _socket; - private readonly Action _onRequestComplete; - private readonly IPEndPoint _ntpEndPoint; - - /// - /// Initialize object, open socket. - /// - /// NTP Server endpoint - /// callback (called from other thread!) - private NtpRequest(IPEndPoint endPoint, Action onRequestComplete) - { - _ntpEndPoint = endPoint; - _onRequestComplete = onRequestComplete; - - // Create and start socket - _socket = new NetSocket(this); - _socket.Bind( - IPAddress.Any, - IPAddress.IPv6Any, - 0, - false, - endPoint.AddressFamily == AddressFamily.InterNetworkV6 ? IPv6Mode.SeparateSocket : IPv6Mode.Disabled); - } - - /// - /// Create the requests for NTP server, open socket. - /// - /// NTP Server address. - /// callback (called from other thread!) - public static NtpRequest Create(IPEndPoint endPoint, Action onRequestComplete) - { - return new NtpRequest(endPoint, onRequestComplete); - } - - /// - /// Create the requests for NTP server (default port), open socket. - /// - /// NTP Server address. - /// callback (called from other thread!) - public static NtpRequest Create(IPAddress ipAddress, Action onRequestComplete) - { - IPEndPoint endPoint = new IPEndPoint(ipAddress, DefaultPort); - return Create(endPoint, onRequestComplete); - } - - /// - /// Create the requests for NTP server, open socket. - /// - /// NTP Server address. - /// port - /// callback (called from other thread!) - public static NtpRequest Create(string ntpServerAddress, int port, Action onRequestComplete) - { - IPEndPoint endPoint = NetUtils.MakeEndPoint(ntpServerAddress, port); - return Create(endPoint, onRequestComplete); - } - - /// - /// Create the requests for NTP server (default port), open socket. - /// - /// NTP Server address. - /// callback (called from other thread!) - public static NtpRequest Create(string ntpServerAddress, Action onRequestComplete) - { - IPEndPoint endPoint = NetUtils.MakeEndPoint(ntpServerAddress, DefaultPort); - return Create(endPoint, onRequestComplete); - } - -#if NETSTANDARD || NETCOREAPP - /// - /// Requests asynchronously NTP server for time offset - /// - /// NTP Server address. - /// Scheduled task - public static async Task RequestAsync(string ntpServerAddress) - { - var t = new TaskCompletionSource(); - - await Task.Run(() => - { - NtpRequest request = null; - request = Create(ntpServerAddress, (ntpPacket) => - { - request.Close(); - t.SetResult(ntpPacket); - }); - request.Send(); - }); - - return await t.Task; - } -#endif - - /// - /// Send request to the NTP server calls callback (if success). - /// In case of error the callback is called with null param. - /// - public void Send() - { - SocketError errorCode = 0; - var packet = new NtpPacket(); - packet.ValidateRequest(); // not necessary - byte[] sendData = packet.Bytes; - var sendCount = _socket.SendTo(sendData, 0, sendData.Length, _ntpEndPoint, ref errorCode); - if (errorCode != 0 || sendCount != sendData.Length) - { - _onRequestComplete(null); - } - } - - /// - /// Close socket. - /// - public void Close() - { - _socket.Close(false); - } - - /// - /// Handle received data: transform bytes to NtpPacket, close socket and call the callback. - /// - void INetSocketListener.OnMessageReceived(byte[] data, int length, SocketError errorCode, IPEndPoint remoteEndPoint) - { - DateTime destinationTimestamp = DateTime.UtcNow; - if (!remoteEndPoint.Equals(_ntpEndPoint)) - return; - - if (length < 48) - { - NetDebug.Write(NetLogLevel.Trace, "NTP response too short: {}", length); - _onRequestComplete(null); - return; - } - - NtpPacket packet = NtpPacket.FromServerResponse(data, destinationTimestamp); - try - { - packet.ValidateReply(); - } - catch (InvalidOperationException ex) - { - NetDebug.Write(NetLogLevel.Trace, "NTP response error: {}", ex.Message); - packet = null; - } - _onRequestComplete(packet); - } - } -} diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/NtpRequest.cs.meta b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/NtpRequest.cs.meta deleted file mode 100644 index 9d6fe524e..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLib/Utils/NtpRequest.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: ac0e7ca5f9a65c54b92bdfe59c6a5486 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLibTransport.cs b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLibTransport.cs deleted file mode 100644 index d2fba4afd..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLibTransport.cs +++ /dev/null @@ -1,386 +0,0 @@ -using LiteNetLib; -using MLAPI.Transports; -using MLAPI.Transports.Tasks; -using System; -using System.Collections.Generic; -using System.Net; -using System.Net.Sockets; -using System.Runtime.CompilerServices; -using MLAPI; -using MLAPI.Logging; -using UnityEngine; -using UnityEngine.Assertions; - -namespace LiteNetLibTransport -{ - public class LiteNetLibTransport : NetworkTransport, INetEventListener - { - enum HostType - { - None, - Server, - Client - } - - struct LiteChannel - { - public byte ChannelNumber; - public DeliveryMethod Method; - } - - [Tooltip("The port to listen on (if server) or connect to (if client)")] - public ushort Port = 7777; - [Tooltip("The address to connect to as client; ignored if server")] - public string Address = "127.0.0.1"; - [Tooltip("Interval between ping packets used for detecting latency and checking connection, in seconds")] - public float PingInterval = 1f; - [Tooltip("Maximum duration for a connection to survive without receiving packets, in seconds")] - public float DisconnectTimeout = 5f; - [Tooltip("Delay between connection attempts, in seconds")] - public float ReconnectDelay = 0.5f; - [Tooltip("Maximum connection attempts before client stops and reports a disconnection")] - public int MaxConnectAttempts = 10; - public TransportChannel[] channels = new TransportChannel[0]; - [Tooltip("Size of default buffer for decoding incoming packets, in bytes")] - public int MessageBufferSize = 1024 * 5; - [Tooltip("Simulated chance for a packet to be \"lost\", from 0 (no simulation) to 100 percent")] - public int SimulatePacketLossChance = 0; - [Tooltip("Simulated minimum additional latency for packets in milliseconds (0 for no simulation)")] - public int SimulateMinLatency = 0; - [Tooltip("Simulated maximum additional latency for packets in milliseconds (0 for no simulation")] - public int SimulateMaxLatency = 0; - - private readonly Dictionary m_LiteChannels = new Dictionary(); - readonly Dictionary m_Peers = new Dictionary(); - - NetManager m_NetManager; - - byte[] m_MessageBuffer; - - public override ulong ServerClientId => 0; - HostType m_HostType; - - SocketTask m_ConnectTask; - - void OnValidate() - { - PingInterval = Math.Max(0, PingInterval); - DisconnectTimeout = Math.Max(0, DisconnectTimeout); - ReconnectDelay = Math.Max(0, ReconnectDelay); - MaxConnectAttempts = Math.Max(0, MaxConnectAttempts); - MessageBufferSize = Math.Max(0, MessageBufferSize); - SimulatePacketLossChance = Math.Min(100, Math.Max(0, SimulatePacketLossChance)); - SimulateMinLatency = Math.Max(0, SimulateMinLatency); - SimulateMaxLatency = Math.Max(SimulateMinLatency, SimulateMaxLatency); - } - - void Update() - { - m_NetManager?.PollEvents(); - } - - public override bool IsSupported => Application.platform != RuntimePlatform.WebGLPlayer; - - public override void Send(ulong clientId, ArraySegment data, NetworkChannel channel) - { - if (m_Peers.ContainsKey(clientId)) - { - AppendChannel(ref data, channel); - if (m_LiteChannels.TryGetValue(channel, out LiteChannel liteChannel)) - { - m_Peers[clientId].Send(data.Array, data.Offset, data.Count, liteChannel.Method); - } - } - } - - private void AppendChannel(ref ArraySegment data, NetworkChannel channel) - { - Assert.IsNotNull(data.Array); - - var index = data.Offset + data.Count; - var size = index + 1; - var array = data.Array; - - if (data.Array.Length < size) - { - if (size > m_MessageBuffer.Length) - { - ResizeMessageBuffer(size); - } - - array = m_MessageBuffer; - } - - array[index] = (byte)channel; - - data = new ArraySegment(array, data.Offset, data.Count + 1); - } - - public override NetworkEvent PollEvent(out ulong clientId, out NetworkChannel channel, out ArraySegment payload, out float receiveTime) - { - // transport is event based ignore this. - clientId = 0; - channel = NetworkChannel.ChannelUnused; - receiveTime = Time.realtimeSinceStartup; - return NetworkEvent.Nothing; - } - - public override SocketTasks StartClient() - { - SocketTask task = SocketTask.Working; - - if (m_HostType != HostType.None) - { - throw new InvalidOperationException("Already started as " + m_HostType); - } - - m_HostType = HostType.Client; - - m_NetManager.Start(); - - NetPeer peer = m_NetManager.Connect(Address, Port, string.Empty); - - if (peer.Id != 0) - { - throw new InvalidPacketException("Server peer did not have id 0: " + peer.Id); - } - - m_Peers[(ulong)peer.Id] = peer; - - return task.AsTasks(); - } - - public override SocketTasks StartServer() - { - if (m_HostType != HostType.None) - { - throw new InvalidOperationException("Already started as " + m_HostType); - } - - m_HostType = HostType.Server; - - bool success = m_NetManager.Start(Port); - - return new SocketTask() - { - IsDone = true, - Message = null, - SocketError = SocketError.SocketError, - State = null, - Success = success, - TransportCode = -1, - TransportException = null - }.AsTasks(); - } - - public override void DisconnectRemoteClient(ulong clientId) - { - if (m_Peers.ContainsKey(clientId)) - { - m_Peers[clientId].Disconnect(); - } - } - - public override void DisconnectLocalClient() - { - m_NetManager.Flush(); - m_NetManager.DisconnectAll(); - m_Peers.Clear(); - } - - public override ulong GetCurrentRtt(ulong clientId) - { - if (!m_Peers.ContainsKey(clientId)) - { - return 0; - } - - return (ulong)m_Peers[clientId].Ping * 2; - } - - public override void Shutdown() - { - m_NetManager.Flush(); - m_NetManager.Stop(); - m_Peers.Clear(); - - m_HostType = HostType.None; - } - - public override void Init() - { - m_LiteChannels.Clear(); - MapChannels(MLAPI_CHANNELS); - MapChannels(channels); - if (m_LiteChannels.Count > 64) - { - throw new InvalidOperationException("LiteNetLib supports up to 64 channels, got: " + m_LiteChannels.Count); - } - m_MessageBuffer = new byte[MessageBufferSize]; - - m_NetManager = new NetManager(this) - { - PingInterval = SecondsToMilliseconds(PingInterval), - DisconnectTimeout = SecondsToMilliseconds(DisconnectTimeout), - ReconnectDelay = SecondsToMilliseconds(ReconnectDelay), - MaxConnectAttempts = MaxConnectAttempts, - SimulatePacketLoss = SimulatePacketLossChance > 0, - SimulationPacketLossChance = SimulatePacketLossChance, - SimulateLatency = SimulateMaxLatency > 0, - SimulationMinLatency = SimulateMinLatency, - SimulationMaxLatency = SimulateMaxLatency - }; - } - - void MapChannels(TransportChannel[] channels) - { - byte id = (byte)m_LiteChannels.Count; - - for (int i = 0; i < channels.Length; i++) - { - m_LiteChannels.Add(channels[i].Channel, new LiteChannel() - { - ChannelNumber = id++, - Method = ConvertChannelType(channels[i].Delivery) - }); - } - } - - - DeliveryMethod ConvertChannelType(NetworkDelivery type) - { - switch (type) - { - case NetworkDelivery.Unreliable: - { - return DeliveryMethod.Unreliable; - } - case NetworkDelivery.UnreliableSequenced: - { - return DeliveryMethod.Sequenced; - } - case NetworkDelivery.Reliable: - { - return DeliveryMethod.ReliableUnordered; - } - case NetworkDelivery.ReliableSequenced: - { - return DeliveryMethod.ReliableOrdered; - } - case NetworkDelivery.ReliableFragmentedSequenced: - { - return DeliveryMethod.ReliableOrdered; - } - default: - { - throw new ArgumentOutOfRangeException(nameof(type), type, null); - } - } - } - - void INetEventListener.OnPeerConnected(NetPeer peer) - { - if (m_ConnectTask != null) - { - m_ConnectTask.Success = true; - m_ConnectTask.IsDone = true; - m_ConnectTask = null; - } - - var peerId = GetMlapiClientId(peer); - InvokeOnTransportEvent(NetworkEvent.Connect, peerId, NetworkChannel.DefaultMessage, default, Time.time); - - m_Peers[peerId] = peer; - } - - void INetEventListener.OnPeerDisconnected(NetPeer peer, DisconnectInfo disconnectInfo) - { - if (m_ConnectTask != null) - { - m_ConnectTask.Success = false; - m_ConnectTask.IsDone = true; - m_ConnectTask = null; - } - - var peerId = GetMlapiClientId(peer); - InvokeOnTransportEvent(NetworkEvent.Disconnect, GetMlapiClientId(peer), NetworkChannel.DefaultMessage, default, Time.time); - - m_Peers.Remove(peerId); - } - - void INetEventListener.OnNetworkError(IPEndPoint endPoint, SocketError socketError) - { - // Ignore - if (m_ConnectTask != null) - { - m_ConnectTask.SocketError = socketError; - m_ConnectTask.IsDone = true; - m_ConnectTask = null; - } - } - - void INetEventListener.OnNetworkReceive(NetPeer peer, NetPacketReader reader, DeliveryMethod deliveryMethod) - { - int size = reader.UserDataSize; - byte[] data = m_MessageBuffer; - - if (size > m_MessageBuffer.Length) - { - ResizeMessageBuffer(size); - } - - Buffer.BlockCopy(reader.RawData, reader.UserDataOffset, data, 0, size); - - // The last byte sent is used to indicate the channel so don't include it in the payload. - var payload = new ArraySegment(data, 0, size - 1); - - NetworkChannel channel = (NetworkChannel)data[size - 1]; - - InvokeOnTransportEvent(NetworkEvent.Data, GetMlapiClientId(peer), channel, payload, Time.time); - - reader.Recycle(); - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - void ResizeMessageBuffer(int size) - { - m_MessageBuffer = new byte[size]; - if (NetworkManager.Singleton.LogLevel == LogLevel.Developer) - { - NetworkLog.LogWarningServer($"LiteNetLibTransport resizing messageBuffer to size of {size}."); - } - } - - void INetEventListener.OnNetworkReceiveUnconnected(IPEndPoint remoteEndPoint, NetPacketReader reader, UnconnectedMessageType messageType) - { - // Ignore - } - - void INetEventListener.OnNetworkLatencyUpdate(NetPeer peer, int latency) - { - // Ignore - } - - void INetEventListener.OnConnectionRequest(ConnectionRequest request) - { - request.Accept(); - } - - ulong GetMlapiClientId(NetPeer peer) - { - ulong clientId = (ulong)peer.Id; - - if (m_HostType == HostType.Server) - { - clientId += 1; - } - - return clientId; - } - - static int SecondsToMilliseconds(float seconds) - { - return (int)Mathf.Ceil(seconds * 1000); - } - } -} diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLibTransport.cs.meta b/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLibTransport.cs.meta deleted file mode 100644 index c92dab03d..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/LiteNetLibTransport.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: db28424c2ae12f64da25c9ecccded6b1 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/com.unity.multiplayer.transport.litenet.asmdef b/Packages/com.unity.multiplayer.transport.litenet/Runtime/com.unity.multiplayer.transport.litenet.asmdef deleted file mode 100644 index 279402a82..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/com.unity.multiplayer.transport.litenet.asmdef +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "LiteNEt MLAPI Transport", - "rootNamespace": "", - "references": [ - "Unity.Multiplayer.MLAPI.Runtime" - ], - "includePlatforms": [], - "excludePlatforms": [], - "allowUnsafeCode": false, - "overrideReferences": false, - "precompiledReferences": [], - "autoReferenced": false, - "defineConstraints": [], - "versionDefines": [], - "noEngineReferences": false -} \ No newline at end of file diff --git a/Packages/com.unity.multiplayer.transport.litenet/Runtime/com.unity.multiplayer.transport.litenet.asmdef.meta b/Packages/com.unity.multiplayer.transport.litenet/Runtime/com.unity.multiplayer.transport.litenet.asmdef.meta deleted file mode 100644 index cccc3fbda..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/Runtime/com.unity.multiplayer.transport.litenet.asmdef.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 255e067ad7348fc4682b169db21e7c05 -AssemblyDefinitionImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.litenet/package.json b/Packages/com.unity.multiplayer.transport.litenet/package.json deleted file mode 100644 index 9642b9432..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/package.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "com.unity.multiplayer.transport.litenet", - "displayName": "LiteNet Transport for MLAPI", - "version": "0.0.1-preview.1", - "unity": "2019.4", - "unityRelease": "8f1", - "description": "LiteNet Transport for MLAPI", - "keywords": [ - "unity" - ], - "dependencies": { - "com.unity.multiplayer.mlapi": "0.0.1-preview.1" - }, - "type": "library", - "hideInEditor": false -} diff --git a/Packages/com.unity.multiplayer.transport.litenet/package.json.meta b/Packages/com.unity.multiplayer.transport.litenet/package.json.meta deleted file mode 100644 index 0954589f3..000000000 --- a/Packages/com.unity.multiplayer.transport.litenet/package.json.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 1dab2b0d4030b264683f7d356ef17655 -PackageManifestImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime.meta b/Packages/com.unity.multiplayer.transport.photon-realtime.meta deleted file mode 100644 index 4daafb77b..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: ba585ae4640f4ae4983253d27cfb9149 -timeCreated: 1614814428 \ No newline at end of file diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/CHANGELOG.md b/Packages/com.unity.multiplayer.transport.photon-realtime/CHANGELOG.md deleted file mode 100644 index 71d32c767..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/CHANGELOG.md +++ /dev/null @@ -1,5 +0,0 @@ -Changelog -All notable changes to this package will be documented in this file. The format is based on Keep a Changelog - -[0.0.1-preview.1] - 2020-10-05 -This is the first release of Enet MLAPI Package \ No newline at end of file diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/CHANGELOG.md.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/CHANGELOG.md.meta deleted file mode 100644 index d21b10a38..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/CHANGELOG.md.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 9d6ccdb72b9b37548a841fcc1c4dee76 -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/README.md b/Packages/com.unity.multiplayer.transport.photon-realtime/README.md deleted file mode 100644 index ae8027288..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/README.md +++ /dev/null @@ -1,9 +0,0 @@ -Photon Realtime transport for MLAPI - - ---- -We do NOT have a license for the photon source so keep this internal. - -Original `license.txt` in the realtime sdk: -See the License Agreement at -https://www.photonengine.com/terms diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/README.md.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/README.md.meta deleted file mode 100644 index a46571082..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/README.md.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: ea5e2ac1b219ffb428dc8f61477267d2 -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime.meta deleted file mode 100644 index f21a0643a..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: caaee5b70b02eae44b04ad8149d1ba63 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon.meta deleted file mode 100644 index 9e7160791..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: ef193029478e7d84692c98b909eaaa00 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs.meta deleted file mode 100644 index 73ec73869..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 1bfec6f6ef56ba64097eca90791237af -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/Metro.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/Metro.meta deleted file mode 100644 index 42ef35f68..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/Metro.meta +++ /dev/null @@ -1,5 +0,0 @@ -fileFormatVersion: 2 -guid: 887ac71c799552346b6cf7654fb699cb -folderAsset: yes -DefaultImporter: - userData: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/Metro/Photon3Unity3D.dll b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/Metro/Photon3Unity3D.dll deleted file mode 100644 index 96665aa0d..000000000 Binary files a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/Metro/Photon3Unity3D.dll and /dev/null differ diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/Metro/Photon3Unity3D.dll.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/Metro/Photon3Unity3D.dll.meta deleted file mode 100644 index 236ab3105..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/Metro/Photon3Unity3D.dll.meta +++ /dev/null @@ -1,69 +0,0 @@ -fileFormatVersion: 2 -guid: 3b5a0a7dce46a13459199d174ad3db3f -PluginImporter: - serializedVersion: 1 - iconMap: {} - executionOrder: {} - isPreloaded: 0 - platformData: - Android: - enabled: 0 - settings: - CPU: AnyCPU - Any: - enabled: 0 - settings: {} - Editor: - enabled: 0 - settings: - CPU: AnyCPU - DefaultValueInitialized: true - OS: AnyOS - Linux: - enabled: 0 - settings: - CPU: x86 - Linux64: - enabled: 0 - settings: - CPU: x86_64 - OSXIntel: - enabled: 0 - settings: - CPU: AnyCPU - OSXIntel64: - enabled: 0 - settings: - CPU: AnyCPU - WP8: - enabled: 1 - settings: - CPU: AnyCPU - DontProcess: False - PlaceholderPath: Assets/Photon/PhotonLibs/Photon3Unity3D.dll - SDK: AnySDK - ScriptingBackend: DotNet - Win: - enabled: 0 - settings: - CPU: AnyCPU - Win64: - enabled: 0 - settings: - CPU: AnyCPU - WindowsStoreApps: - enabled: 1 - settings: - CPU: AnyCPU - DontProcess: False - PlaceholderPath: Assets/Photon/PhotonLibs/Photon3Unity3D.dll - SDK: AnySDK - ScriptingBackend: DotNet - iOS: - enabled: 0 - settings: - CompileFlags: - FrameworkDependencies: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/Metro/Photon3Unity3D.pri b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/Metro/Photon3Unity3D.pri deleted file mode 100644 index 889f87b80..000000000 Binary files a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/Metro/Photon3Unity3D.pri and /dev/null differ diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/Metro/Photon3Unity3D.pri.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/Metro/Photon3Unity3D.pri.meta deleted file mode 100644 index 1cc4fb5cb..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/Metro/Photon3Unity3D.pri.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 3439a9e4030efca45b6cc06240106c02 -timeCreated: 1460035811 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/Photon3Unity3D.dll b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/Photon3Unity3D.dll deleted file mode 100644 index 8f82fac1a..000000000 Binary files a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/Photon3Unity3D.dll and /dev/null differ diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/Photon3Unity3D.dll.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/Photon3Unity3D.dll.meta deleted file mode 100644 index a1d5384d0..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/Photon3Unity3D.dll.meta +++ /dev/null @@ -1,106 +0,0 @@ -fileFormatVersion: 2 -guid: aadb37a20a33632429047acaef43658a -labels: -- ExitGames -- PUN -- Photon -- Networking -PluginImporter: - serializedVersion: 1 - iconMap: {} - executionOrder: {} - isPreloaded: 0 - platformData: - Android: - enabled: 1 - settings: - CPU: AnyCPU - Any: - enabled: 0 - settings: {} - Editor: - enabled: 1 - settings: - CPU: AnyCPU - DefaultValueInitialized: true - OS: AnyOS - Linux: - enabled: 1 - settings: - CPU: x86 - Linux64: - enabled: 1 - settings: - CPU: x86_64 - LinuxUniversal: - enabled: 1 - settings: {} - OSXIntel: - enabled: 1 - settings: - CPU: AnyCPU - OSXIntel64: - enabled: 1 - settings: - CPU: AnyCPU - OSXUniversal: - enabled: 1 - settings: {} - WP8: - enabled: 1 - settings: - CPU: AnyCPU - DontProcess: False - PlaceholderPath: - SDK: AnySDK - ScriptingBackend: Il2Cpp - Web: - enabled: 1 - settings: {} - WebGL: - enabled: 1 - settings: {} - WebStreamed: - enabled: 1 - settings: {} - Win: - enabled: 1 - settings: - CPU: AnyCPU - Win64: - enabled: 1 - settings: - CPU: AnyCPU - WindowsStoreApps: - enabled: 1 - settings: - CPU: AnyCPU - DontProcess: False - PlaceholderPath: - SDK: AnySDK - ScriptingBackend: Il2Cpp - iOS: - enabled: 1 - settings: - CompileFlags: - FrameworkDependencies: - tvOS: - enabled: 1 - settings: - CompileFlags: - FrameworkDependencies: - PS4: - enabled: 1 - settings: {} - Switch: - enabled: 1 - settings: {} - XboxOne: - enabled: 1 - settings: {} - Lumin: - enabled: 1 - settings: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/Photon3Unity3D.xml b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/Photon3Unity3D.xml deleted file mode 100644 index b66400d7a..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/Photon3Unity3D.xml +++ /dev/null @@ -1,2803 +0,0 @@ - - - - Photon3Unity3D - - - - - Initializes a new instance of the class. - - - - - Gets the public key that can be used by another DiffieHellmanCryptoProvider object - to generate a shared secret agreement. - - - - - Derives the shared key is generated from the secret agreement between two parties, - given a byte array that contains the second party's public key. - - - The second party's public key. - - - - Interface for Photon's DiffieHellman/Payload Encryption. - - - - Provides classical Diffie-Hellman Modular Exponentiation Groups defined by the - OAKLEY Key Determination Protocol (RFC 2412). - - - - - Gets the genrator (N) used by the the well known groups 1,2 and 5. - - - - - Gets the 768 bit prime for the well known group 1. - - - - - Gets the 1024 bit prime for the well known group 2. - - - - - Gets the 1536 bit prime for the well known group 5. - - - - A slice of memory that should be pooled and reused. Wraps a byte-array. - - This is a serializable datatype for the .Net clients. It will serialize and transfer as byte[]. - If PhotonPeer.UseByteArraySlicePoolForEvents is enabled, byte-arrays in (incoming) events will be deserialized as - ByteArraySlice. - - Adjust your OnEvent code accordingly. - - - - The buffer for the slice. - - - The position where the content starts in Buffer. - - - The length of the data in the Buffer. - - - - Internal constructor - these instances will be part of the pooling system. - - The pool to return to. - The index to return to (in the related returnPool). - - - - Create a new ByteArraySlice. The buffer supplied will be used. Usage is similar to ArraySegment. - - Not part of pooling. - - - - Creates a ByteArraySlice, which is not pooled. It has no Buffer. - - Not part of pooling. - - - - If this item was fetched from a ByteArraySlicePool, this will return it. - - - True if this was a pooled item and it successfully was returned. - If it does not belong to a pool nothing will happen, and false will be returned. - - - - Resets Count and Offset to 0 each. - - - Tiered pool for ByteArraySlices. Reduces the allocations once enough slices are available. - - - - Requests for buffers smaller than 2^minStackIndex will use 2^minStackIndex. This value avoids allocations of smaller rarely used buffers. - Set this to a lower value if you will never need sizes larger than byte[2^minStackIndex] - - - - Count of allocations this pool did. - - - Creates a new pool. - - - - Get a ByteArraySlice from pool. This overload handles user supplied byte[] and byte count and can be used as a non-boxing alternative to ArraySegment<byte>. - - - - - Get byte[] wrapper from pool. This overload accepts a bytecount and will return a wrapper with a byte[] that size or greater. - - - - - Releasing a ByteArraySlice, will put it back into the pool, if it was acquired from one. - - The ByteArraySlice to return to the pool. - True if this slice was returned to some pool. False if not. - - - - Clears all pool items with byte array sizes between lower and upper inclusively. - - - Use this if you sent some unusually large RaiseEvents and believe the buffers of that size - will not be needed again, and you would like to free up the buffer memory. - - - - - Replacement for Dictionary<K,V> which does not allocate memory during usage. - - Key type. - Value type. - - - - This is a substitute for the Hashtable class, missing in: Win8RT and Windows Phone. It uses a Dictionary<object,object> as base. - - - Please be aware that this class might act differently than the Hashtable equivalent. - As far as Photon is concerned, the substitution is sufficiently precise. - - - - - Translates the byte key into the pre-boxed byte before doing the lookup. - - - - - - - Creates a shallow copy of the Hashtable. - - - A shallow copy of a collection copies only the elements of the collection, whether they are - reference types or value types, but it does not copy the objects that the references refer - to. The references in the new collection point to the same objects that the references in - the original collection point to. - - Shallow copy of the Hashtable. - - - Interface for DatagramEncryptor implementations. - - - Initialize the encryptor. - - - Encrypt data. - - - Decrypt data. - - - Calculates the HMAC for given data. - - - Checks if the HMAC of the provided data is correct. - - - - Defines block size for encryption/decryption algorithm - - - - - Defines reusedIvBytes size for encryption/decryption algorithm - - - - - Defines HMAC size for packet authentication algorithm - - - - - Encryption/decryption algorithm implementation - - - - - Packet authentication algorithm impelmenation - - - - - Implementation of encryption for "Datagram Encryption". - - - - - Defines block size for encryption/decryption algorithm - - - - - Defines IV size for encryption/decryption algorithm - - - - - Defines HMAC size for packet authentication algorithm - - - - - Initialize - - - - - - - - Encrypts data. puts them into output buffer and prepends with IV - - - - - - - - - - - Finishes current HMAC - - - - - - Decrypts buffer containing HMAC - - encrypted data prepened by IV - offset in the buffer - len of data to decrypt - /// len of decrypted data - - - - - - Checkes wheter data have corect HMAC or not - - buffer with data and HMAC - len of data including HMAC - true if check pass, false otherwise - - - Number for reliable unsequenced commands (separate from "standard" reliable sequenced). Used to avoid duplicates. - - - The highest number of reliable unsequenced commands that arrived (and all commands before). - - - Any reliable unsequenced number that's been received, which is higher than the current highest in complete sequence (reliableUnsequencedNumbersCompletelyReceived). - - - Checks and queues incoming reliable unsequenced commands ("send" or "fragment"), if they haven't been received yet. - The command to check and queue. - True if the command is new and got queued (or could be executed/dispatched). - - - One list for all channels keeps sent commands (for re-sending). - - - One pool of ACK byte arrays ( 20 bytes each) for all channels to keep acknowledgements. - - - Gets enabled by "request" from server (not by client). - - - Initial PeerId as used in Connect command. If EnableServerTracing is false. - - - Initial PeerId to enable Photon Tracing, as used in Connect command. See: EnableServerTracing. - - - - Checks the incoming queue and Dispatches received data if possible. - - If a Dispatch happened or not, which shows if more Dispatches might be needed. - - - Gets the target size for fragments. - - Caches the result for a specific MTU value. - Fragment length is different, when datagram encryption is used (so this caches two values in fact). - - - - - - gathers acks until udp-packet is full and sends it! - - - - Queue of commands that need resending. Used instead of a method local field as optimization. - - - Queue of received commands. ReceiveIncomingCommands will queue commands, except ACKs which Execute immediately. - - - - gathers commands from all (out)queues until udp-packet is full and sends it! - - - - - Checks if any channel has a outgoing reliable command. - - True if any channel has a outgoing reliable command. False otherwise. - - - - Checks connected state and channel before operation is serialized and enqueued for sending. - - if operation could be enqueued - - - reliable-udp-level function to send some byte[] to the server via un/reliable command - only called when a custom operation should be send - the invocation ID for this operation (the payload) - - - reads incoming udp-packages to create and queue incoming commands* - - - Queues incoming commands in the correct order as either unreliable, reliable or unsequenced. - If queued or not. - - - removes commands which are acknowledged* - - - - Enumeration of situations that change the peers internal status. - Used in calls to OnStatusChanged to inform your application of various situations that might happen. - - - Most of these codes are referenced somewhere else in the documentation when they are relevant to methods. - - - - the PhotonPeer is connected.
See {@link PhotonListener#OnStatusChanged}*
-
- - the PhotonPeer just disconnected.
See {@link PhotonListener#OnStatusChanged}*
-
- - the PhotonPeer encountered an exception and will disconnect, too.
See {@link PhotonListener#OnStatusChanged}*
-
- - Exception while opening the incoming connection to the server. Followed by Disconnect. - The server could be down / not running or the client has no network or a misconfigured DNS.
See {@link PhotonListener#OnStatusChanged}*
-
- - Used on platforms that throw a security exception on connect. Unity3d does this, e.g., if a webplayer build could not fetch a policy-file from a remote server. - - - Sending command failed. Either not connected, or the requested channel is bigger than the number of initialized channels. - - - Exception, if a server cannot be connected. Followed by Disconnect. - Most likely, the server is not responding. Ask user to try again later. - - - Disconnection due to a timeout (client did no longer receive ACKs from server). Followed by Disconnect. - - - Timeout disconnect by server. The server didn't receive necessary ACKs in time. Followed by Disconnect. - - - Disconnect by server due to concurrent user limit reached (received a disconnect command). - - - (1043) Disconnect by server due to server's logic. Followed by Disconnect. - - - Disconnect by server due to unspecified reason. Followed by Disconnect. - - - (1048) Value for OnStatusChanged()-call, when the encryption-setup for secure communication finished successfully. - - - (1049) Value for OnStatusChanged()-call, when the encryption-setup failed for some reason. Check debug logs. - - - - Callback interface for the Photon client side. Must be provided to a new PhotonPeer in its constructor. - - - These methods are used by your PhotonPeer instance to keep your app updated. Read each method's - description and check out the samples to see how to use them. - - - - - Provides textual descriptions for various error conditions and noteworthy situations. - In cases where the application needs to react, a call to OnStatusChanged is used. - OnStatusChanged gives "feedback" to the game, DebugReturn provies human readable messages - on the background. - - - All debug output of the library will be reported through this method. Print it or put it in a - buffer to use it on-screen. Use PhotonPeer.DebugOut to select how verbose the output is. - - DebugLevel (severity) of the message. - Debug text. Print to System.Console or screen. - - - - Callback method which gives you (async) responses for called operations. - - - Similar to method-calling, operations can have a result. - Because operation-calls are non-blocking and executed on the server, responses are provided - after a roundtrip as call to this method. - - Example: Trying to create a room usually succeeds but can fail if the room's name is already - in use (room names are their IDs). - - This method is used as general callback for all operations. Each response corresponds to a certain - "type" of operation by its OperationCode. - - - - When you join a room, the server will assign a consecutive number to each client: the - "actorNr" or "player number". This is sent back in the operation result. - - Fetch your actorNr of a Join response like this: - int actorNr = (int)operationResponse[(byte)OperationCode.ActorNr]; - - The response to an operation\-call. - - - - OnStatusChanged is called to let the game know when asynchronous actions finished or when errors happen. - - - Not all of the many StatusCode values will apply to your game. Example: If you don't use encryption, - the respective status changes are never made. - - The values are all part of the StatusCode enumeration and described value-by-value. - - A code to identify the situation. - - - - Called whenever an event from the Photon Server is dispatched. - - - Events are used for communication between clients and allow the server to update clients anytime. - The creation of an event is often triggered by an operation (called by this client or an other). - - Each event carries a Code plus optional content in its Parameters. - Your application should identify which content to expect by the event's Code. - - Events can be defined and modified server-side. - - If you use the LoadBalancing api as basis, several events like EvJoin and EvLeave are pre-defined. - The LoadBalancing api provides the EventCode and ParameterCode classes for pre-defined events. - - Photon also allows you to come up with custom events on the fly, purely client-side. - To do so, use OpRaiseEvent. - - Events are incoming messages and as such buffered in the peer. - Calling PhotonPeer.DispatchIncomingCommands will call IPhotonPeerListener.OnEvent, to hand over received events. - - PhotonPeer.ReuseEventInstance is an option to optimize memory usage by reusing one EventData instance. - - The event currently being dispatched. - - - The protocol for this socket, defined in constructor. - - - Address, as defined via a Connect() call. Including protocol, port and or path. - This is set in the constructor and in Connect() again. Typically the address does not change after the IPhotonSocket is instantiated. - - - Contains only the server's hostname (stripped protocol, port and or path). Set in IPhotonSocket.Connect(). - - - Contains the IP address of the previously resolved ServerAddress (or empty, if GetIpAddress wasn't used). - - - Contains only the server's port address (as string). Set in IphotonSocket.Connect(). - - - Where available, this exposes if the server's address was resolved into an IPv6 address or not. - - - - Provides the protocol string, of the current PhotonPeer.SerializationProtocolType to be used for WebSocket connections. - - - Any WebSocket wrapper could access this to get the desired binary protocol for the connection. - Some WebSocket implementations use a static value of the same name and need to be updated. - - The value is not cached and each call will create the needed string on the fly. - - - - - Separates the given address into address (host name or IP) and port. Port must be included after colon! - - - This method expects any address to include a port. The final ':' in addressAndPort has to separate it. - IPv6 addresses have multiple colons and must use brackets to separate address from port. - - Examples: - ns.exitgames.com:5058 - http://[2001:db8:1f70::999:de8:7648:6e8]:100/ - [2001:db8:1f70::999:de8:7648:6e8]:100 - See: - http://serverfault.com/questions/205793/how-can-one-distinguish-the-host-and-the-port-in-an-ipv6-url - - - - Wraps a DNS call to provide an array of addresses, sorted to have the IPv6 ones first. - - This skips a DNS lookup, if the hostname is an IPv4 address. Then only this address is used as is. - The DNS lookup may take a while, so it is recommended to do this in a thread. Also, it may fail entirely. - - - IPAddress array for hostname, sorted to put any IPv6 addresses first.
- If the DNS lookup fails, HandleException(StatusCode.ExceptionOnConnect) gets called and null returned. - Then the socket should not attempt to connect. -
-
- - - Returns null or the IPAddress representing the address, doing Dns resolution if needed. - - Only returns IPv4 or IPv6 adresses, no others. - The string address of a server (hostname or IP). - IPAddress for the string address or null, if the address is neither IPv4, IPv6 or some hostname that could be resolved. - - - Variants of the Photon specific serialization protocol used for operations, responses, events and data. - - - Version 1.6 (outdated). - - - Version 1.8. - - - - - - - Serialize creates a byte-array from the given object and returns it. - - The object to serialize - The serialized byte-array - - - - Deserialize returns an object reassembled from the given StreamBuffer. - - The buffer to be Deserialized - The Deserialized object - - - - Deserialize returns an object reassembled from the given byte-array. - - The byte-array to be Deserialized - The Deserialized object - - - - Interface for (UDP) traffic capturing. - - - - Indicates if the PhotonPeer should call Record or not. - - - Implement to record network traffic. Called by PhotonPeer for each UDP message sent and received. - - The buffer will not contain Ethernet Header, IP, UDP level data. Only the payload received by the client. - - It is advised to not use NetworkSimulation when recording traffic. - The recording is done on the timing of actual receive- and send-calls and internal simulation would offset the timing. - - Buffer to be sent or received. Check length value for actual content length. - Length of the network data. - Indicates incoming (true) or outgoing (false) traffic. - The local peerId for the connection. Defaults to 0xFFFF until assigned by the Server. - The currently used IPhotonSocket of this Peer. Enables you to track the connection endpoint. - - - Internal class for "commands" - the package in which operations are sent. - - - Size of the Payload, which may be null. - - - Checks commandFlags & FV_UNRELIABLE_UNSEQUENCED. - - - Checks commandFlags & FV_RELIABLE. - - - - ACKs should never be created as NCommand. use CreateACK to wrtie the serialized ACK right away... - - - - - - - - - this variant does only create outgoing commands and increments . incoming ones are created from a DataInputStream - - - this variant does only create outgoing commands and increments . incoming ones are created from a DataInputStream - - - reads the command values (commandHeader and command-values) from incoming bytestream and populates the incoming command* - - - - A simulation item is an action that can be queued to simulate network lag. - - - - With this, the actual delay can be measured, compared to the intended lag. - - - Timestamp after which this item must be executed. - - - Action to execute when the lag-time passed. - - - Starts a new Stopwatch - - - - A set of network simulation settings, enabled (and disabled) by PhotonPeer.IsSimulationEnabled. - - - For performance reasons, the lag and jitter settings can't be produced exactly. - In some cases, the resulting lag will be up to 20ms bigger than the lag settings. - Even if all settings are 0, simulation will be used. Set PhotonPeer.IsSimulationEnabled - to false to disable it if no longer needed. - - All lag, jitter and loss is additional to the current, real network conditions. - If the network is slow in reality, this will add even more lag. - The jitter values will affect the lag positive and negative, so the lag settings - describe the medium lag even with jitter. The jitter influence is: [-jitter..+jitter]. - Packets "lost" due to OutgoingLossPercentage count for BytesOut and LostPackagesOut. - Packets "lost" due to IncomingLossPercentage count for BytesIn and LostPackagesIn. - - - - internal - - - internal - - - internal - - - internal - - - internal - - - internal - - - internal - - - This setting overrides all other settings and turns simulation on/off. Default: false. - - - Outgoing packages delay in ms. Default: 100. - - - Randomizes OutgoingLag by [-OutgoingJitter..+OutgoingJitter]. Default: 0. - - - Percentage of outgoing packets that should be lost. Between 0..100. Default: 1. TCP ignores this setting. - - - Incoming packages delay in ms. Default: 100. - - - Randomizes IncomingLag by [-IncomingJitter..+IncomingJitter]. Default: 0. - - - Percentage of incoming packets that should be lost. Between 0..100. Default: 1. TCP ignores this setting. - - - Counts how many outgoing packages actually got lost. TCP connections ignore loss and this stays 0. - - - Counts how many incoming packages actually got lost. TCP connections ignore loss and this stays 0. - - - Provides an overview of the current values in form of a string. - String summary. - - - - The pool this wrapper should return to when released/disposed. - - - - - Gets value and if it belongs to the static pool, returns the wrapper to pool. - - - - - - Boxes the value and returns boxed object. Releaeses the wrapper. - - - - - - Removes this WrapperStruct from pooling. - - - - - staticPool is used for implicit casting. This is not threadsafe, so casting between T and StructWrapper should only be done on the Unity main thread. - - - - - Replacement for object.GetType() that first checks to see if object is a WrappedStruct. - If so returns the StructWrapper T type, otherwise just returns object.GetType(). - - - - - - - Wrap a struct in a pooled StructWrapper. - - - - - Wrap a struct in a pooled StructWrapper. Pulls wrapper from the static pool. Wrapper is returned to pool when Unwrapped. - Slighty faster version of Wrap() that is hard wired to pull from the static pool. Use the persistant bool argument to make a permanent unpooled wrapper. - - - - - Tests if object is either a cast T, or a wrapped T - - - - - Remove all wrappers in hashtable from pooling, so they can remain cached and used later. - - - - - - Unwraps any WrapperStructs, boxes their value, releases hashtable entry with the boxed value. Releases the wrappers. - - - - - If object is a StructWrapper, the value will be extracted. If not, the object will be cast to T. - Wrapper is returned to the wrapper pool if applicable, so it is not considered safe to Unwrap multiple times, as the wrapper may be recycled. - - - - - If object is a StructWrapper, the value will be extracted. If not, the object will be cast to T. - Wrapper is will not be returned to its pool until it is Unwrapped, or the pool is cleared. - - - - - If object is a StructWrapper, the value will be extracted. If not, the object will be cast to T. - Wrapper is returned to the wrapper pool if applicable, so it is not considered safe to Unwrap multiple times, as the wrapper may be recycled. - - - - - If object is a StructWrapper, the value will be extracted. If not, the object will be cast to T. - Wrapper is returned to the wrapper pool if applicable, so it is not considered safe to Unwrap multiple times, as the wrapper may be recycled. - - - - - If object is a StructWrapper, the value will be extracted. If not, the object will be cast to T. - - - - - If object is a StructWrapper, the value will be extracted. If not, the object will be cast to T. - - - - - If object is a StructWrapper, the value will be extracted. If not, the object will be cast to T. - Wrapper is returned to the wrapper pool if applicable, so it is not considered safe to Unwrap multiple times, as the wrapper may be recycled. - - - - - If object is a StructWrapper, the value will be extracted. If not, the object will be cast to T. - Wrapper is returned to the wrapper pool if applicable, so it is not considered safe to Unwrap multiple times, as the wrapper may be recycled. - - - - - If object is a StructWrapper, the value will be extracted. If not, the object will be cast to T. - Wrapper is will not be returned to its pool until it is Unwrapped, or the pool is cleared. - - - - - Will get the object using the key. If the key is invalid, will return null. - - - - - - Param code. Used in internal op: InitEncryption. - - - Encryption-Mode code. Used in internal op: InitEncryption. - - - Param code. Used in internal op: InitEncryption. - - - Code of internal op: InitEncryption. - - - TODO: Code of internal op: Ping (used in PUN binary websockets). - - - Result code for any (internal) operation. - - - - This is the replacement for the const values used in eNet like: PS_DISCONNECTED, PS_CONNECTED, etc. - - - - No connection is available. Use connect. - - - Establishing a connection already. The app should wait for a status callback. - - - - The low level connection with Photon is established. On connect, the library will automatically - send an Init package to select the application it connects to (see also PhotonPeer.Connect()). - When the Init is done, IPhotonPeerListener.OnStatusChanged() is called with connect. - - Please note that calling operations is only possible after the OnStatusChanged() with StatusCode.Connect. - - - Connection going to be ended. Wait for status callback. - - - Acknowledging a disconnect from Photon. Wait for status callback. - - - Connection not properly disconnected. - - - The server's address, as set by a Connect() call, including any protocol, ports and or path. - If rHTTP is used, this can be set directly. - - - - This is the (low level) connection state of the peer. It's internal and based on eNet's states. - - Applications can read the "high level" state as PhotonPeer.PeerState, which uses a different enum. - - - Byte count of last sent operation (set during serialization). - - - Byte count of last dispatched message (set during dispatch/deserialization). - - - The command that's currently being dispatched. - - - This ID is assigned by the Realtime Server upon connection. - The application does not have to care about this, but it is useful in debugging. - - - - The serverTimeOffset is serverTimestamp - localTime. Used to approximate the serverTimestamp with help of localTime - - - - - Count of all bytes going out (including headers) - - - - - Count of all bytes coming in (including headers) - - - - Set via Connect(..., customObject) and sent in Init-Request. - - - Temporary cache of AppId. Used in Connect() to keep the AppId until we send the Init-Request (after the network-level (and Enet) connect). - - - Set to timeInt, whenever SendOutgoingCommands actually checks outgoing queues to send them. Must be connected. - - - Maximum Transfer Unit to be used for UDP+TCP - - - If IPhotonSocket.Connected is true, this value shows if the server's address resolved as IPv6 address. - - You must check the socket's IsConnected state. Otherwise, this value is not initialized. - Sent to server in Init-Request. - - - - Called when the server's Init Response arrived. - - - Serializes an operation into our binary messages (magic number, msg-type byte and message). Optionally encrypts. - This method is mostly the same in EnetPeer, TPeer and HttpPeerBase. Also, for raw messages, we have another variant. - - - Serializes an operation into our binary messages (magic number, msg-type byte and message). Optionally encrypts. - This method is mostly the same in EnetPeer, TPeer and HttpPeerBase. Also, for raw messages, we have another variant. - - - Returns the UDP Payload starting with Magic Number for binary protocol - - - - Checks outgoing queues for commands to send and puts them on their way. - This creates one package per go in UDP. - - If commands are not sent, cause they didn't fit into the package that's sent. - - - - Checks the incoming queue and Dispatches received data if possible. - - If a Dispatch happened or not, which shows if more Dispatches might be needed. - - - - Internally uses an operation to exchange encryption keys with the server. - - If the op could be sent. - - - - Gets the currently used settings for the built-in network simulation. - Please check the description of NetworkSimulationSet for more details. - - - - - Core of the Network Simulation, which is available in Debug builds. - Called by a timer in intervals. - - - - EnetPeer will set this value, so trafficstats can use it. TCP has 0 bytes per package extra - - - See PhotonPeer value. - - - See PhotonPeer value. - - - See PhotonPeer value. - - - See PhotonPeer value. - - - - Value range for a Peer's connection and initialization state, as returned by the PeerState property. - - - While this is not the same as the StatusCode of IPhotonPeerListener.OnStatusChanged(), it directly relates to it. - In most cases, it makes more sense to build a game's state on top of the OnStatusChanged() as you get changes. - - - - The peer is disconnected and can't call Operations. Call Connect(). - - - The peer is establishing the connection: opening a socket, exchanging packages with Photon. - - - The connection is established and now sends the application name to Photon. - You set the "application name" by calling PhotonPeer.Connect(). - - - The peer is connected and initialized (selected an application). You can now use operations. - - - The peer is disconnecting. It sent a disconnect to the server, which will acknowledge closing the connection. - - - - These are the options that can be used as underlying transport protocol. - - - - Use UDP to connect to Photon, which allows you to send operations reliable or unreliable on demand. - - - Use TCP to connect to Photon. - - - A TCP-based protocol commonly supported by browsers.For WebGL games mostly. Note: No WebSocket IPhotonSocket implementation is in this Assembly. - This protocol is only available in Unity exports to WebGL. - - - A TCP-based, encrypted protocol commonly supported by browsers. For WebGL games mostly. Note: No WebSocket IPhotonSocket implementation is in this Assembly. - This protocol is only available in Unity exports to WebGL. - - - - Level / amount of DebugReturn callbacks. Each debug level includes output for lower ones: OFF, ERROR, WARNING, INFO, ALL. - - - - No debug out. - - - Only error descriptions. - - - Warnings and errors. - - - Information about internal workflows, warnings and errors. - - - Most complete workflow description (but lots of debug output), info, warnings and errors. - - - Build target framework supported by this dll. - - - - Instances of the PhotonPeer class are used to connect to a Photon server and communicate with it. - - - A PhotonPeer instance allows communication with the Photon Server, which in turn distributes messages - to other PhotonPeer clients. - An application can use more than one PhotonPeer instance, which are treated as separate users on the - server. Each should have its own listener instance, to separate the operations, callbacks and events. - - - - - No effect anymore. Removed without replacement. - - - This value was used to get/set the initial capacities of command-lists. - These grow on demand but knowing their capacity is of very limited use. - Also, various command-lists grow their capacity independent from one another. - - - - - No effect anymore. Removed without replacement. - - - This was used to skip some received (and buffered) unreliable commands, to avoid situations - where the peer has aggregated a lot of (old) messages. - - - - - The WarningSize was used test all message queues for congestion. - - - - - Gets a local timestamp in milliseconds by calling SupportClass.GetTickCount(). - See LocalMsTimestampDelegate. - - - - Where dynamic linking is available, this library will attempt to load a native Photon "Encryptor" plugin library for "Datagram Encryption". - Fallback to a managed implementation. This value is always true. - - - Obsolete and ignored. Size of CommandLog. Default is 0, no logging. - - - Obsolete and ignored. Converts the CommandLog into a readable table-like string with summary. - - - False if this library build contains C# Socket code. If true, you must set some type as SocketImplementation before connecting. - - - True if the library was compiled with DEBUG setting. - - - Version of the Native Encryptor API compiled into this assembly. Defines which PhotonEncryptorPlugin needs to be used. - - - Target framework this dll was built for. - - - Global toggle to avoid callbacks from native plugins. Defaults to false, meaning: "callbacks enabled". - Callbacks from native code will fail on some platforms, which is why you can disable them. - - - Can be used to remove/hide the AppId from websocket connect paths. - - - A simplified identifier for client SDKs. Photon's APIs might modify this (as a dll can be used in more than one product). Helps debugging. - - - For the Init-request, we shift the ClientId by one and the last bit signals a "debug" (0) or "release" build (1). - - - Version of this library as string. - - - Checks if a native library for network sockets (PhotonSocketPlugin.dll) is available. To use it, see remarks. - - When the native socket library is available, the SocketNative class may be used as socket implementation. - - If the SocketImplementationConfig is null, the SocketNative class is assigned for UDP, TCP and WebSocket. - - Alternatively the type SocketNative (or other) can be assigend in the SocketImplementationConfig. - - The SocketNative class in this assembly is compiled for dynamic linking. - A class "SocketNativeSource" can be made available for you to compile it along with your source for - platforms that use static linking (e.g. for iOS and some consoles). - - Note: Native libraries must match the execution platform. - Even if the native plugin is found it may fail to execute. - - - - Checks if native library for Payload Encryption (PhotonCryptoPlugin.dll) is available. Used automatically. - - While the encryptor Type for Datagram Encryption can be defined, Payload Encryption - will always use built-in types as encryptor. - - Note: Native libraries must match the execution platform. - Even if the native plugin is found it may fail to execute. - - - - Checks if a native library for Datagram Encryption is available. To use it, see remarks. - - If the PhotonPeer.EncryptorType is set, this type is used as implementation for Datagram Encryption. - If it's not set, a native plugin is used if available. As fallback, a managed implementation is being used. - - Note: The native plugin is performing much better than the managed alternatives. - This is why we make the plugin available for various platforms. - - Note: Native libraries must match the execution platform. - Even if the native plugin is found it may fail to execute. - - - - - Checks availability and completeness of native libs and sets respective "available" values. - - - - Enables selection of a (Photon-)serialization protocol. Used in Connect methods. - Defaults to SerializationProtocol.GpBinaryV16; - - - Optional definition of IPhotonSocket type per ConnectionProtocol. - - Several platforms have special Socket implementations and slightly different APIs. - To accomodate this, switching the socket implementation for a network protocol was made available. - By default, UDP and TCP have socket implementations assigned. - - If a native socket plugin is available (see: PhotonPeer.NativeSocketLibAvailable), the SocketNative - class is used by default (with dynamic linking). - - You only need to set the SocketImplementationConfig once, after creating a PhotonPeer - and before connecting. If you switch the TransportProtocol, the correct implementation is being used. - - - - - Can be used to read the IPhotonSocket implementation at runtime (before connecting). - - - Use the SocketImplementationConfig to define which IPhotonSocket is used per ConnectionProtocol. - - - - - Sets the level (and amount) of debug output provided by the library. - - - This affects the callbacks to IPhotonPeerListener.DebugReturn. - Default Level: Error. - - - - - Gets the IPhotonPeerListener of this instance (set in constructor). - Can be used in derived classes for Listener.DebugReturn(). - - - - - Called when the client received a Disconnect Message from the server. Signals an error and provides a message to debug the case. - - - - - Option to make the PhotonPeer reuse a single EventData instance for all incoming events. - - - This reduces memory garbage. - If enabled, the event provided via OnEvent(EventData photonEvent) is invalid once the callback finished. - That event's content will get modified. Typically this is not a problem as events are rarely cached. - - Changing this value acquires the same lock that DispatchIncomingCommands() uses. - - - - - Enables a deserialization optimization for incoming events. Defaults to false. - - - When enabled, byte-arrays in incoming Photon events are deserialized into pooled ByteArraySlice instances (wrappers for byte[]). - This improves the memory footprint for receiving byte-arrays in events. - - When used, you have to release the (pooled) ByteArraySlice instances. - - Adjust your handling of EventData accordingly: - - The ByteArraySlice.Buffer will usually be bigger than the send/received byte-array. - Check the ByteArraySlice.Count and read only the actually received bytes. - The Buffer is reused and not cleared. The Offset will be 0 for incoming events. - - Important: - While the peer will acquire the ByteArraySlice and passes it to OnEvent, the game code has to call ByteArraySlice.Release() - when the slice is no longer needed. - - Send either byte[], ArraySegment or use the ByteArraySlicePool to acquire ByteArraySlices to send. - - - - - Instance of a ByteArraySlicePool. UseByteArraySlicePoolForEvents defines if this PhotonPeer is using the pool for deserialization of byte[] in Photon events. - - ByteArraySlice is a serializable datatype of the Photon .Net client library. - It helps avoid allocations by being pooled and (optionally) used in incoming Photon events (see: UseByteArraySlicePoolForEvents). - - You can also use the pool to acquire ByteArraySlice instances for serialization. - RaiseEvent will auto-release all ByteArraySlice instances passed in. - - - - - This debug setting enables a new send-ordering for commands. Defaults to true and commands are sent in the order they are created. Set to false to use Enet ordering. - - - - - Gets count of all bytes coming in (including headers, excluding UDP/TCP overhead) - - - - - Gets count of all bytes going out (including headers, excluding UDP/TCP overhead) - - - - - Gets the size of the dispatched event or operation-result in bytes. - This value is set before OnEvent() or OnOperationResponse() is called (within DispatchIncomingCommands()). - - - Get this value directly in OnEvent() or OnOperationResponse(). Example: - void OnEvent(...) { - int eventSizeInBytes = this.peer.ByteCountCurrentDispatch; - //... - - void OnOperationResponse(...) { - int resultSizeInBytes = this.peer.ByteCountCurrentDispatch; - //... - - - - Returns the debug string of the event or operation-response currently being dispatched or string. Empty if none. - In a release build of the lib, this will always be empty. - - - - Gets the size of the last serialized operation call in bytes. - The value includes all headers for this single operation but excludes those of UDP, Enet Package Headers and TCP. - - - Get this value immediately after calling an operation. - Example: - - this.loadbalancingClient.OpJoinRoom("myroom"); - int opjoinByteCount = this.loadbalancingClient.ByteCountLastOperation; - - - - If set, the TrafficRecorder will be used to capture all traffic. - - If null or not Enabled, the recorder is not being used. - Release builds of this library will never record traffic for performance reasons. - - See ITrafficRecorder docs. - - - - - Debugging option to tell the Photon Server to log all datagrams. - - - - - Up to 4 resend attempts for a reliable command can be done in quick succession (after RTT+4*Variance). - - - By default 0. Any later resend attempt will then double the time before the next resend. - Max value = 4; - Make sure to adjust SentCountAllowance to a slightly higher value, as more repeats will get done. - - - - - This is the (low level) state of the connection to the server of a PhotonPeer. Managed internally and read-only. - - - Don't mix this up with the StatusCode provided in IPhotonListener.OnStatusChanged(). - Applications should use the StatusCode of OnStatusChanged() to track their state, as - it also covers the higher level initialization between a client and Photon. - - - - - This peer's ID as assigned by the server or 0 if not using UDP. Will be 0xFFFF before the client connects. - - Used for debugging only. This value is not useful in everyday Photon usage. - - - - Count of all currently received but not-yet-Dispatched reliable commands - (events and operation results) from all channels. - - - - - Count of all commands currently queued as outgoing, including all channels and reliable, unreliable. - - - - - Sets a new (temporary) size of the MessageBufferPool to reuse memory where possible. - - - The MessageBufferPool is a Queue<StreamBuffer> for performance reasons. - This methods dequeues from the MessageBufferPool to get the Count equal to countOfBuffers, - then it calls MessageBufferPool.TrimExcess(). - - New size of the pool. Clears the pool if <= 0. - - - - Gets / sets the number of channels available in UDP connections with Photon. - Photon Channels are only supported for UDP. - The default ChannelCount is 2. Channel IDs start with 0 and 255 is a internal channel. - - - - - Enables the client so send the "encrypted" flag on secure connections. Incompatible with Server SDK 4.x. - - - - - While not connected, this controls if the next connection(s) should use a per-package CRC checksum. - - - While turned on, the client and server will add a CRC checksum to every sent package. - The checksum enables both sides to detect and ignore packages that were corrupted during transfer. - Corrupted packages have the same impact as lost packages: They require a re-send, adding a delay - and could lead to timeouts. - - Building the checksum has a low processing overhead but increases integrity of sent and received data. - Packages discarded due to failed CRC cecks are counted in PhotonPeer.PacketLossByCrc. - - - - - Count of packages dropped due to failed CRC checks for this connection. - - - - - - Count of packages dropped due to wrong challenge for this connection. - - - - - Gets the count of sent but not yet acknowledged commands (for UDP connections). - - - - - Count of commands that got repeated (due to local repeat-timing before an ACK was received). - - - - - Number of send retries before a peer is considered lost/disconnected. Default: 7. - - - The initial timeout countdown of a command is calculated by the current roundTripTime + 4 * roundTripTimeVariance. - Please note that the timeout span until a command will be resent is not constant, but based on - the roundtrip time at the initial sending, which will be doubled with every failed retry. - - DisconnectTimeout and SentCountAllowance are competing settings: either might trigger a disconnect on the - client first, depending on the values and Roundtrip Time. - - - - - Caps the initial timing for repeats of reliable commands. In milliseconds. Default: 400ms. - - - Unless acknowledged, reliable commands are repeated initially after: current roundTripTime + 4 * roundTripTimeVariance. - - As this value can be very high when there was exceptional lag, InitialResendTimeMax makes sure that commands - get repeated several times before they may trigger a timeout. - - - - - Sets the time between pings being sent automatically. They measure the roundtrip time and keep connections from closing. Default: 1000. - - - For Photon's reliable UDP connections, pings are skipped if any reliable command was sent during the specified TimePingInterval. - Any reliable command is used to update the RoundTripTime and RoundTripTimeVariance. - - When using TCP and WebSockets, the ping is of interest to measure the roundtrip and to keep a connection open, should nothing else - With those two protocols, the ping is used to update the RoundTripTime and RoundTripTimeVariance. - - - - - Time in milliseconds before any sent reliable command triggers a timeout disconnect, unless acknowledged by the receiver. Default: 10000. - - - DisconnectTimeout is not an exact value for a timeout. The exact timing of the timeout depends on the frequency - of Service() calls and the roundtrip time. Commands sent with long roundtrip-times and variance are checked less - often for re-sending. - - DisconnectTimeout and SentCountAllowance are competing settings: either might trigger a disconnect on the - client first, depending on the values and Roundtrip Time. - - Default: 10000 ms. Maximum setting: 65535. - Setting a negative value will apply the default timeout. - - - - - Approximated Environment.TickCount value of server (while connected). - - - UDP: The server's timestamp is automatically fetched after connecting (once). This is done - internally by a command which is acknowledged immediately by the server. - TCP: The server's timestamp fetched with each ping but set only after connecting (once). - - The approximation will be off by +/- 10ms in most cases. Per peer/client and connection, the - offset will be constant (unless FetchServerTimestamp() is used). A constant offset should be - better to adjust for. Unfortunately there is no way to find out how much the local value - differs from the original. - - The approximation adds RoundtripTime / 2 and uses this.LocalTimeInMilliSeconds to calculate - in-between values (this property returns a new value per tick). - - The value sent by Photon equals Environment.TickCount in the logic layer. - - - 0 until connected. - While connected, the value is an approximation of the server's current timestamp. - - - - - This setter for the (local-) timestamp delegate replaces the default Environment.TickCount with any equal function. - - - About Environment.TickCount: - The value of this property is derived from the system timer and is stored as a 32-bit signed integer. - Consequently, if the system runs continuously, TickCount will increment from zero to Int32..::.MaxValue - for approximately 24.9 days, then jump to Int32..::.MinValue, which is a negative number, then increment - back to zero during the next 24.9 days. - - Exception is thrown peer.PeerState is not PS_DISCONNECTED. - - - The internally used "per connection" time value, which is updated infrequently, when the library executes some connectio-related tasks. - - This integer value is an infrequently updated value by design. - The lib internally sets the value when it sends outgoing commands or reads incoming packages. - This is based on SupportClass.GetTickCount() and an initial time value per (server) connection. - This value is also used in low level Enet commands as sent time and optional logging. - - - - The last ConnectionTime value, when some ACKs were sent out by this client. - Only applicable to UDP connections. - - - The last ConnectionTime value, when SendOutgoingCommands actually checked outgoing queues to send them. Must be connected. - Available for UDP and TCP connections. - - - Measures the maximum milliseconds spent in PhotonSocket.Send(). - - - Time until a reliable command is acknowledged by the server. - - The value measures network latency and for UDP it includes the server's ACK-delay (setting in config). - In TCP, there is no ACK-delay, so the value is slightly lower (if you use default settings for Photon). - - RoundTripTime is updated constantly. Every reliable command will contribute a fraction to this value. - - This is also the approximate time until a raised event reaches another client or until an operation - result is available. - - - - - Changes of the roundtriptime as variance value. Gives a hint about how much the time is changing. - - - - The last measured roundtrip time for this connection. - - - - Timestamp of the last time anything (!) was received from the server (including low level Ping, ACKs, events and operation-returns). - - - This is not the time when something was dispatched. If you enable NetworkSimulation, this value is affected as well. - - - - - The server address which was used in PhotonPeer.Connect() or null (before Connect() was called). - - - - Contains the IP address of the previously resolved ServerAddress (or empty, if address wasn't resolved with the internal methods). - - - The protocol this peer is currently connected/connecting with (or 0). - - - This is the transport protocol to be used for next connect (see remarks). - The TransportProtocol can be changed anytime but it will not change the - currently active connection. Instead, TransportProtocol will be applied on next Connect. - - - - - Gets or sets the network simulation "enabled" setting. - Changing this value also locks this peer's sending and when setting false, - the internally used queues are executed (so setting to false can take some cycles). - - - - - Gets the settings for built-in Network Simulation for this peer instance - while IsSimulationEnabled will enable or disable them. - Once obtained, the settings can be modified by changing the properties. - - - - - Defines the initial size of an internally used StreamBuffer for Tcp. - The StreamBuffer is used to aggregate operation into (less) send calls, - which uses less resoures. - - - The size is not restricing the buffer and does not affect when outgoing data is actually sent. - - - - - The Maximum Trasfer Unit (MTU) defines the (network-level) packet-content size that is - guaranteed to arrive at the server in one piece. The Photon Protocol uses this - size to split larger data into packets and for receive-buffers of packets. - - - This value affects the Packet-content. The resulting UDP packages will have additional - headers that also count against the package size (so it's bigger than this limit in the end) - Setting this value while being connected is not allowed and will throw an Exception. - Minimum is 576. Huge values won't speed up connections in most cases! - - - - - This property is set internally, when OpExchangeKeysForEncryption successfully finished. - While it's true, encryption can be used for operations. - - - - - While true, the peer will not send any other commands except ACKs (used in UDP connections). - - - - Defines if Key Exchange for Encryption is done asynchronously in another thread. - - - Indicates if sequence numbers should be randomized. - - - Initialization array, used to modify the sequence numbers of channels. - - - If GCM is used for DatagramEncryption. - If true, the randomization-value gets added to the current value, else (CBC/old style) the randomization-value replaces the current value. - - - - Gets the byte-count of incoming "low level" messages, which are either Enet Commands or Tcp Messages. - These include all headers, except those of the underlying internet protocol Udp or Tcp. - - - - - Gets the byte-count of outgoing "low level" messages, which are either Enet Commands or Tcp Messages. - These include all headers, except those of the underlying internet protocol Udp or Tcp. - - - - - Gets a statistic of incoming and outgoing traffic, split by operation, operation-result and event. - - - Operations are outgoing traffic, results and events are incoming. - Includes the per-command header sizes (Udp: Enet Command Header or Tcp: Message Header). - - - - - Returns the count of milliseconds the stats are enabled for tracking. - - - - - Enables or disables collection of statistics in TrafficStatsIncoming, TrafficStatsOutgoing and TrafficstatsGameLevel. - - - Setting this to true, also starts the stopwatch to measure the timespan the stats are collected. - Enables the traffic statistics of a peer: TrafficStatsIncoming, TrafficStatsOutgoing and TrafficstatsGameLevel (nothing else). - Default value: false (disabled). - - - - - Creates new instances of TrafficStats and starts a new timer for those. - - - - - Returns a string of the most interesting connection statistics. - When you have issues on the client side, these might contain hints about the issue's cause. - - If true, Incoming and Outgoing low-level stats are included in the string. - Stats as string. - - - Implements the message-protocol, based on the underlying network protocol (udp, tcp, http). - - - PayloadEncryption Secret. Message payloads get encrypted with it individually and on demand. - - - Setter for the Datagram Encryptor instance. Used at next connect. - - If null, the PhotonPeer will create a default encryptor instance, which may be native or managed. - See also: PhotonPeer.NativeDatagramEncryptionLibAvailable. - - - - The datagram encryptor used for the current connection. Applied internally in InitDatagramEncryption. - - - Count of unreliable commands being discarded in case this client already dispatched a command that was newer (higher sequence number). - - - Set per dispatch in DispatchIncomingCommands to: commandUnreliableSequenceNumber - channel.incomingUnreliableSequenceNumber. Indicates how big the (sequence)gap is, compared to the last dispatched unreliable command. - - - Creates a new PhotonPeer with specified transport protocol (without a IPhotonPeerListener). - Make sure to set the Listener, before using the peer. - - - - Creates a new PhotonPeer instance to communicate with Photon and selects the transport protocol. We recommend UDP. - - a IPhotonPeerListener implementation - Protocol to use to connect to Photon. - - - - Starts connecting to the given Photon server. Non-blocking. - - - Connecting to the Photon server is done asynchronous. - Unless an error happens right away (and this returns false), wait for the call of IPhotonPeerListener.OnStatusChanged. - - - Address of a Photon server as IP:port or hostname. WebSocket connections must contain a scheme (ws:// or wss://). - - - The ID of the app to use. Typically this is a guid (for the Photon Cloud). Max 32 characters. - - - Optional custom data to be used by server during peer creation. - If used for authentication, the server is able to reject a client without creating a peer. - Must be a serializable data type of Photon. - - - True if a connection attempt will be made. False if some error could be detected early-on. - - - - - Starts connecting to the given Photon server. Non-blocking. - - - Connecting to the Photon server is done asynchronous. - Unless an error happens right away (and this returns false), wait for the call of IPhotonPeerListener.OnStatusChanged. - - - Address of a Photon server as IP:port or hostname. WebSocket connections must contain a scheme (ws:// or wss://). - - - Optional address of a proxy server. Only used by WebSocket connections. Set null to use none. - - - The ID of the app to use. Typically this is a guid (for the Photon Cloud). Max 32 characters. - - - Optional custom data to be used by server during peer creation. - If used for authentication, the server is able to reject a client without creating a peer. - Must be a serializable data type of Photon. - - - True if a connection attempt will be made. False if some error could be detected early-on. - - - - - This method initiates a mutual disconnect between this client and the server. - - - Calling this method does not immediately close a connection. Disconnect lets the server - know that this client is no longer listening. For the server, this is a much faster way - to detect that the client is gone but it requires the client to send a few final messages. - - On completion, OnStatusChanged is called with the StatusCode.Disconnect. - - If the client is disconnected already or the connection thread is stopped, then there is no callback. - - The default server logic will leave any joined game and trigger the respective event. - - - - - This method immediately closes a connection (pure client side) and ends related listening Threads. - - - Unlike Disconnect, this method will simply stop to listen to the server. Udp connections will timeout. - If the connections was open, this will trigger a callback to OnStatusChanged with code StatusCode.Disconnect. - - - - - This will fetch the server's timestamp and update the approximation for property ServerTimeInMilliseconds. - - - The server time approximation will NOT become more accurate by repeated calls. Accuracy currently depends - on a single roundtrip which is done as fast as possible. - - The command used for this is immediately acknowledged by the server. This makes sure the roundtrip time is - low and the timestamp + rountriptime / 2 is close to the original value. - - - - - This method creates a public key for this client and exchanges it with the server. - - - Encryption is not instantly available but calls OnStatusChanged when it finishes. - Check for StatusCode EncryptionEstablished and EncryptionFailedToEstablish. - - Calling this method sets IsEncryptionAvailable to false. - This method must be called before the "encrypt" parameter of OpCustom can be used. - - If operation could be enqueued for sending - - - - Initializes Datagram Encryption. Optionally, the EncryptorType is being used, if set. - - secret used to cipher udp packets - secret used for authentication of udp packets - - - - Photon's Payload Encryption secret may be set by a response from the server. - - The secret in form of a byte[]. - - - - This method excutes DispatchIncomingCommands and SendOutgoingCommands in your application Thread-context. - - - The Photon client libraries are designed to fit easily into a game or application. The application - is in control of the context (thread) in which incoming events and responses are executed and has - full control of the creation of UDP/TCP packages. - - Sending packages and dispatching received messages are two separate tasks. Service combines them - into one method at the cost of control. It calls DispatchIncomingCommands and SendOutgoingCommands. - - Call this method regularly (2..20 times a second). - - This will Dispatch ANY remaining buffered responses and events AND will send queued outgoing commands. - Fewer calls might be more effective if a device cannot send many packets per second, as multiple - operations might be combined into one package. - - - You could replace Service by: - - while (DispatchIncomingCommands()); //Dispatch until everything is Dispatched... - SendOutgoingCommands(); //Send a UDP/TCP package with outgoing messages - - - - - - - Creates and sends a UDP/TCP package with outgoing commands (operations and acknowledgements). Also called by Service(). - - - As the Photon library does not create any UDP/TCP packages by itself. Instead, the application - fully controls how many packages are sent and when. A tradeoff, an application will - lose connection, if it is no longer calling SendOutgoingCommands or Service. - - If multiple operations and ACKs are waiting to be sent, they will be aggregated into one - package. The package fills in this order: - ACKs for received commands - A "Ping" - only if no reliable data was sent for a while - Starting with the lowest Channel-Nr: - Reliable Commands in channel - Unreliable Commands in channel - - This gives a higher priority to lower channels. - - A longer interval between sends will lower the overhead per sent operation but - increase the internal delay (which adds "lag"). - - Call this 2..20 times per second (depending on your target platform). - - The if commands are not yet sent. Udp limits it's package size, Tcp doesnt. - - - - Dispatching received messages (commands), causes callbacks for events, responses and state changes within a IPhotonPeerListener. - - - DispatchIncomingCommands only executes a single received - command per call. If a command was dispatched, the return value is true and the method - should be called again. - - This method is called by Service() until currently available commands are dispatched. - In general, this method should be called until it returns false. In a few cases, it might - make sense to pause dispatching (if a certain state is reached and the app needs to load - data, before it should handle new events). - - The callbacks to the peer's IPhotonPeerListener are executed in the same thread that is - calling DispatchIncomingCommands. This makes things easier in a game loop: Event execution - won't clash with painting objects or the game logic. - - - - - Prepares your operation (code and parameters) to be sent to the Photon Server with specified SendOptions. - - - This method serializes and enqueues the operation right away while the actual sending happens later. - To be able to aggregate operations/messages, the Photon client sends packages only when you call SendOutgoingCommands(). - - The sendOptions specify how the operation gets sent exactly. - Keep in mind that some transport protocols don't support unreliable or unsequenced transport. - In that case, the sendOptions might be ignored. - - The operationCode must be known by the server's logic or won't be processed. - In almost all cases, sending an operation will result in a OperationResponse (see: IPhotonPeerListener.OnOperationResponse). - - Operations are handled by their byte\-typed code. The codes are defined in the Realtime API (a.k.a. LoadBalancing API). - Containing parameters as key\-value pair. The key is byte\-typed, while the value is any serializable datatype. - Wraps up DeliveryMode (reliability), Encryption and Channel values for sending. - If operation could be enqueued for sending. - - - - Registers new types/classes for de/serialization and the fitting methods to call for this type. - - - SerializeMethod and DeserializeMethod are complementary: Feed the product of serializeMethod to - the constructor, to get a comparable instance of the object. - - After registering a Type, it can be used in events and operations and will be serialized like - built-in types. - - Type (class) to register. - A byte-code used as shortcut during transfer of this Type. - Method delegate to create a byte[] from a customType instance. - Method delegate to create instances of customType's from byte[]. - If the Type was registered successfully. - - - - Container for an Operation request, which is a code and parameters. - - - On the lowest level, Photon only allows byte-typed keys for operation parameters. - The values of each such parameter can be any serializable datatype: byte, int, hashtable and many more. - - - - Byte-typed code for an operation - the short identifier for the server's method to call. - - - The parameters of the operation - each identified by a byte-typed code in Photon. - - - - Contains the server's response for an operation called by this peer. - The indexer of this class actually provides access to the Parameters Dictionary. - - - The OperationCode defines the type of operation called on Photon and in turn also the Parameters that - are set in the request. Those are provided as Dictionary with byte-keys. - There are pre-defined constants for various codes defined in the LoadBalancing application. - Check: OperationCode, ParameterCode, etc. - - An operation's request is summarized by the ReturnCode: a short typed code for "Ok" or - some different result. The code's meaning is specific per operation. An optional DebugMessage can be - provided to simplify debugging. - - Each call of an operation gets an ID, called the "invocID". This can be matched to the IDs - returned with any operation calls. This way, an application could track if a certain OpRaiseEvent - call was successful. - - - - The code for the operation called initially (by this peer). - Use enums or constants to be able to handle those codes, like OperationCode does. - - - A code that "summarizes" the operation's success or failure. Specific per operation. 0 usually means "ok". - - - An optional string sent by the server to provide readable feedback in error-cases. Might be null. - - - A Dictionary of values returned by an operation, using byte-typed keys per value. - - - - Alternative access to the Parameters, which wraps up a TryGetValue() call on the Parameters Dictionary. - - The byte-code of a returned value. - The value returned by the server, or null if the key does not exist in Parameters. - - - ToString() override. - Relatively short output of OpCode and returnCode. - - - Extensive output of operation results. - To be used in debug situations only, as it returns a string for each value. - - - A Photon Event consists of a Code value and a Parameters Dictionary with the event's content (if any). - - The indexer of this class provides access to the values in Parameters. - It wraps the null check for Parameters and uses TryGetValue() for the provided key. - - Photon servers use events to send information which is not triggered by a client's operation requests (those get responses). - The Realtime API allows you to send custom events with any Code and content via OpRaiseEvent. - - - - The event code identifies the type of event. - - - The Parameters of an event is a Dictionary<byte, object>. - - - - Access to the Parameters of a Photon-defined event. Custom Events only use Code, Sender and CustomData. - - The key byte-code of a Photon event value. - The Parameters value, or null if the key does not exist in Parameters. - - - - Defines the event key containing the Sender of the event. - - - Defaults to Sender key of Realtime API events (RaiseEvent): 254. - Can be set to Chat API's ChatParameterCode.Sender: 5. - - - - - Accesses the Sender of the event via the indexer and SenderKey. The result is cached. - - - Accesses this event's Parameters[CustomDataKey], which may be null. - In that case, this returns 0 (identifying the server as sender). - - - - - Defines the event key containing the Custom Data of the event. - - - Defaults to Data key of Realtime API events (RaiseEvent): 245. - Can be set to any other value on demand. - - - - - Accesses the Custom Data of the event via the indexer and CustomDataKey. The result is cached. - - - Accesses this event's Parameters[CustomDataKey], which may be null. - - - - ToString() override. - Short output of "Event" and it's Code. - - - Extensive output of the event content. - To be used in debug situations only, as it returns a string for each value. - - - - Type of serialization methods to add custom type support. - Use PhotonPeer.ReisterType() to register new types with serialization and deserialization methods. - - The method will get objects passed that were registered with it in RegisterType(). - Return a byte[] that resembles the object passed in. The framework will surround it with length and type info, so don't include it. - - - Serialization method delegate. StreamBuffer based custom serialization methods must use this form. - - - - Type of deserialization methods to add custom type support. - Use PhotonPeer.RegisterType() to register new types with serialization and deserialization methods. - - The framwork passes in the data it got by the associated SerializeMethod. The type code and length are stripped and applied before a DeserializeMethod is called. - Return a object of the type that was associated with this method through RegisterType(). - - - Deserialization method delegate. StreamBuffer based custom deserialization methods must use this form. - - - - Provides tools for the Exit Games Protocol - - - - - Serialize creates a byte-array from the given object and returns it. - - The object to serialize - The serialized byte-array - - - - Deserialize returns an object reassembled from the given byte-array. - - The byte-array to be Deserialized - The Deserialized object - - - - Serializes a short typed value into a byte-array (target) starting at the also given targetOffset. - The altered offset is known to the caller, because it is given via a referenced parameter. - - The short value to be serialized - The byte-array to serialize the short to - The offset in the byte-array - - - - Serializes an int typed value into a byte-array (target) starting at the also given targetOffset. - The altered offset is known to the caller, because it is given via a referenced parameter. - - The int value to be serialized - The byte-array to serialize the short to - The offset in the byte-array - - - - Serializes an float typed value into a byte-array (target) starting at the also given targetOffset. - The altered offset is known to the caller, because it is given via a referenced parameter. - - The float value to be serialized - The byte-array to serialize the short to - The offset in the byte-array - - - - Deserialize fills the given int typed value with the given byte-array (source) starting at the also given offset. - The result is placed in a variable (value). There is no need to return a value because the parameter value is given by reference. - The altered offset is this way also known to the caller. - - The int value to deserialize into - The byte-array to deserialize from - The offset in the byte-array - - - - Deserialize fills the given short typed value with the given byte-array (source) starting at the also given offset. - The result is placed in a variable (value). There is no need to return a value because the parameter value is given by reference. - The altered offset is this way also known to the caller. - - The short value to deserialized into - The byte-array to deserialize from - The offset in the byte-array - - - - Deserialize fills the given float typed value with the given byte-array (source) starting at the also given offset. - The result is placed in a variable (value). There is no need to return a value because the parameter value is given by reference. - The altered offset is this way also known to the caller. - - The float value to deserialize - The byte-array to deserialize from - The offset in the byte-array - - - - Exit Games GpBinaryV16 protocol implementation - - - - - The gp type. - - - - - Unkown type. - - - - - An array of objects. - - - This type is new in version 1.5. - - - - - A boolean Value. - - - - - A byte value. - - - - - An array of bytes. - - - - - An array of objects. - - - - - A 16-bit integer value. - - - - - A 32-bit floating-point value. - - - This type is new in version 1.5. - - - - - A dictionary - - - This type is new in version 1.6. - - - - - A 64-bit floating-point value. - - - This type is new in version 1.5. - - - - - A Hashtable. - - - - - A 32-bit integer value. - - - - - An array of 32-bit integer values. - - - - - A 64-bit integer value. - - - - - A string value. - - - - - An array of string values. - - - - - A custom type. 0x63 - - - - - Null value don't have types. - - - - - Calls the correct serialization method for the passed object. - - - - - DeserializeInteger returns an Integer typed value from the given stream. - - - - Exception type for de/serialization issues. Used in Protocol 1.8. - - - Constructor for the exception. - - - Unkown. GpType: 0. - - - Boolean. GpType: 2. See: BooleanFalse, BooleanTrue. - - - Byte. GpType: 3. - - - Short. GpType: 4. - - - 32-bit floating-point value. GpType: 5. - - - 64-bit floating-point value. GpType: 6. - - - String. GpType: 7. - - - Null value don't have types. GpType: 8. - - - CompressedInt. GpType: 9. - - - CompressedLong. GpType: 10. - - - Int1. GpType: 11. - - - Int1_. GpType: 12. - - - Int2. GpType: 13. - - - Int2_. GpType: 14. - - - L1. GpType: 15. - - - L1_. GpType: 16. - - - L2. GpType: 17. - - - L2_. GpType: 18. - - - Custom Type. GpType: 19. - - - Custom Type Slim. GpType: 128 (0x80) and up. - - - Dictionary. GpType: 20. - - - Hashtable. GpType: 21. - - - ObjectArray. GpType: 23. - - - OperationRequest. GpType: 24. - - - OperationResponse. GpType: 25. - - - EventData. GpType: 26. - - - Boolean False. GpType: 27. - - - Boolean True. GpType: 28. - - - ShortZero. GpType: 29. - - - IntZero. GpType: 30. - - - LongZero. GpType: 3. - - - FloatZero. GpType: 32. - - - DoubleZero. GpType: 33. - - - ByteZero. GpType: 34. - - - Array for nested Arrays. GpType: 64 (0x40). Element count and type follows. - - - - Writes integers as compressed. Either directly as zigzag-encoded or (when a type is written for this value) it can use an optimized sub-type. - - - - Enum of the three options for reliability and sequencing in Photon's reliable-UDP. - - - The operation/message gets sent just once without acknowledgement or repeat. The sequence (order) of messages is guaranteed. - - - The operation/message asks for an acknowledgment. It's resent until an ACK arrived. The sequence (order) of messages is guaranteed. - - - The operation/message gets sent once (unreliable) and might arrive out of order. Best for your own sequencing (e.g. for streams). - - - The operation/message asks for an acknowledgment. It's resent until an ACK arrived and might arrive out of order. Best for your own sequencing (e.g. for streams). - - - Wraps up DeliveryMode, Encryption and Channel values for sending operations and messages. - - - Default SendOptions instance for reliable sending. - - - Default SendOptions instance for unreliable sending. - - - Chose the DeliveryMode for this operation/message. Defaults to Unreliable. - - - If true the operation/message gets encrypted before it's sent. Defaults to false. - Before encryption can be used, it must be established. Check PhotonPeer.IsEncryptionAvailable is true. - - - The Enet channel to send in. Defaults to 0. - Channels in Photon relate to "message channels". Each channel is a sequence of messages. - - - Sets the DeliveryMode either to true: Reliable or false: Unreliable, overriding any current value. - Use this to conveniently select reliable/unreliable delivery. - - - used by PhotonPeer* - - - Encapsulates the network i/o functionality for the realtime library. - - - used by PhotonPeer* - - - Endless loop, run in Receive Thread. - - - Internal class to encapsulate the network i/o functionality for the realtime libary. - - - used by PhotonPeer* - - - Encapsulates the network i/o functionality for the realtime library. - - - used by PhotonPeer* - - - Endless loop, run in Receive Thread. - - - Internal class to encapsulate the network i/o functionality for the realtime libary. - - - used by PhotonPeer* - - - - Allocates a new byte[] that is the exact used length. Use GetBuffer for nonalloc operations. - - - - - Allocates a new byte[] that is the exact used length. Use GetBuffer for nonalloc operations. - - - - - The bytes between Position and Length are copied to the beginning of the buffer. Length decreased by Position. Position set to 0. - - - - - Brings StreamBuffer to the state as after writing of 'length' bytes. Returned buffer and offset can be used to actually fill "written" segment with data. - - - - - Sets stream length. If current position is greater than specified value, it's set to the value. - - - SetLength(0) resets the stream to initial state but preserves underlying byte[] buffer. - - - - - Guarantees that the buffer is at least neededSize bytes. - - - - - Contains several (more or less) useful static methods, mostly used for debugging. - - - - - Gets the local machine's "milliseconds since start" value (precision is described in remarks). - - - This method uses Environment.TickCount (cheap but with only 16ms precision). - PhotonPeer.LocalMsTimestampDelegate is available to set the delegate (unless already connected). - - Fraction of the current time in Milliseconds (this is not a proper datetime timestamp). - - - - Creates a background thread that calls the passed function in intervals, as long as that returns true. - - - With StopBackgroundCalls, you can stop threads started with this method. - The resulting ThreadAbortException is caught and discarded. - - The function to call. Must return true, if it should be called again. Returning false ends the thread. - Milliseconds to sleep between calls of myThread. Default: 100ms. - An optional name for the task to help debugging. Null or empty won't set the thread.Name. - - - - Calls Abort on the thread with the given id (= index of the thread list) - - - The resulting ThreadAbortException is caught and discarded. - - The unique ID of the thread. - True if the thread is canceled and false otherwise, e.g. if the thread with the given ID does not exist. - - - - Calls Abort on all threads that were started via StartBackgroundCalls. - - - The resulting ThreadAbortException is caught and discarded. - - True if any thread got aborted. - - - - Writes the exception's stack trace to the received stream. - - Exception to obtain information from. - Output sream used to write to. - - - - Writes the exception's stack trace to the received stream. Writes to: System.Diagnostics.Debug. - - Exception to obtain information from. - - - - This method returns a string, representing the content of the given IDictionary. - Returns "null" if parameter is null. - - IDictionary to return as string. - - - - - Converts a byte-array to string (useful as debugging output). - Uses BitConverter.ToString(list) internally after a null-check of list. - - Byte-array to convert to string. - - List of bytes as string. - - - - - Class to wrap static access to the random.Next() call in a thread safe manner. - - - - - An Attribute named "Preserve" tells Unity to not strip the code. - - - - TCP "Package" header: 7 bytes - - - TCP "Message" header: 2 bytes - - - TCP header combined: 9 bytes - - - Defines if the (TCP) socket implementation needs to do "framing". - The WebSocket protocol (e.g.) includes framing, so when that is used, we set DoFraming to false. - - - - Checks the incoming queue and Dispatches received data if possible. Returns if a Dispatch happened or - not, which shows if more Dispatches might be needed. - - - - - gathers commands from all (out)queues until udp-packet is full and sends it! - - - - Sends a ping in intervals to keep connection alive (server will timeout connection if nothing is sent). - Always false in this case (local queues are ignored. true would be: "call again to send remaining data"). - - - enqueues serialized operations to be sent as tcp stream / package - - - Sends a ping and modifies this.lastPingResult to avoid another ping for a while. - - - reads incoming tcp-packages to create and queue incoming commands* - - - - Only in use as long as PhotonPeer.TrafficStatsEnabled = true; - - - - Gets sum of outgoing operations in bytes. - - - Gets count of outgoing operations. - - - Gets sum of byte-cost of incoming operation-results. - - - Gets count of incoming operation-results. - - - Gets sum of byte-cost of incoming events. - - - Gets count of incoming events. - - - - Gets longest time it took to complete a call to OnOperationResponse (in your code). - If such a callback takes long, it will lower the network performance and might lead to timeouts. - - - - Gets OperationCode that causes the LongestOpResponseCallback. See that description. - - - - Gets longest time a call to OnEvent (in your code) took. - If such a callback takes long, it will lower the network performance and might lead to timeouts. - - - - Gets EventCode that caused the LongestEventCallback. See that description. - - - - Gets longest time between subsequent calls to DispatchIncomgingCommands in milliseconds. - Note: This is not a crucial timing for the networking. Long gaps just add "local lag" to events that are available already. - - - - - Gets longest time between subsequent calls to SendOutgoingCommands in milliseconds. - Note: This is a crucial value for network stability. Without calling SendOutgoingCommands, - nothing will be sent to the server, who might time out this client. - - - - - Gets number of calls of DispatchIncomingCommands. - - - - - Gets number of calls of DispatchIncomingCommands. - - - - - Gets number of calls of SendOutgoingCommands. - - - - Gets sum of byte-cost of all "logic level" messages. - - - Gets sum of counted "logic level" messages. - - - Gets sum of byte-cost of all incoming "logic level" messages. - - - Gets sum of counted incoming "logic level" messages. - - - Gets sum of byte-cost of all outgoing "logic level" messages (= OperationByteCount). - - - Gets sum of counted outgoing "logic level" messages (= OperationCount). - - - - Resets the values that can be maxed out, like LongestDeltaBetweenDispatching. See remarks. - - - Set to 0: LongestDeltaBetweenDispatching, LongestDeltaBetweenSending, LongestEventCallback, LongestEventCallbackCode, LongestOpResponseCallback, LongestOpResponseCallbackOpCode. - Also resets internal values: timeOfLastDispatchCall and timeOfLastSendCall (so intervals are tracked correctly). - - - - Gets the byte-size of per-package headers. - - - - Counts commands created/received by this client, ignoring repeats (out command count can be higher due to repeats). - - - - Gets count of bytes as traffic, excluding UDP/TCP headers (42 bytes / x bytes). - - - Timestamp of the last incoming ACK that has been read (every PhotonPeer.TimePingInterval milliseconds this client sends a PING which must be ACKd). - - - Timestamp of last incoming reliable command (every second we expect a PING). - -
-
diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/Photon3Unity3D.xml.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/Photon3Unity3D.xml.meta deleted file mode 100644 index 671d82432..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/Photon3Unity3D.xml.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 8d4f08d435c4b6343969d8af249460ff -labels: -- ExitGames -- PUN -- Photon -- Networking -TextScriptImporter: - userData: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/WebSocket.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/WebSocket.meta deleted file mode 100644 index a02cf77c4..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/WebSocket.meta +++ /dev/null @@ -1,5 +0,0 @@ -fileFormatVersion: 2 -guid: 2f243ce0406bd1c40a9ff5fc2d78d905 -folderAsset: yes -DefaultImporter: - userData: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/WebSocket/SocketWebTcp.cs b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/WebSocket/SocketWebTcp.cs deleted file mode 100644 index 7c6ee0790..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/WebSocket/SocketWebTcp.cs +++ /dev/null @@ -1,369 +0,0 @@ -#if UNITY_WEBGL || WEBSOCKET || ((UNITY_XBOXONE || UNITY_GAMECORE) && UNITY_EDITOR) - -// -------------------------------------------------------------------------------------------------------------------- -// -// Copyright (c) Exit Games GmbH. All rights reserved. -// -// -// Internal class to encapsulate the network i/o functionality for the realtime library. -// -// developer@exitgames.com -// -------------------------------------------------------------------------------------------------------------------- - - -namespace ExitGames.Client.Photon -{ - using System; - using System.Collections; - using UnityEngine; - using SupportClassPun = ExitGames.Client.Photon.SupportClass; - - - #if !(UNITY_WEBGL || NETFX_CORE) - using System.Net; - using System.Net.Sockets; - using System.Threading; - #endif - - /// - /// Yield Instruction to Wait for real seconds. Very important to keep connection working if Time.TimeScale is altered, we still want accurate network events - /// - public sealed class WaitForRealSeconds : CustomYieldInstruction - { - private readonly float _endTime; - - public override bool keepWaiting - { - get { return this._endTime > Time.realtimeSinceStartup; } - } - - public WaitForRealSeconds(float seconds) - { - this._endTime = Time.realtimeSinceStartup + seconds; - } - } - - - /// - /// Internal class to encapsulate the network i/o functionality for the realtime libary. - /// - public class SocketWebTcp : IPhotonSocket, IDisposable - { - private WebSocket sock; - - private readonly object syncer = new object(); - - public SocketWebTcp(PeerBase npeer) : base(npeer) - { - this.ServerAddress = npeer.ServerAddress; - if (this.ReportDebugOfLevel(DebugLevel.INFO)) - { - this.Listener.DebugReturn(DebugLevel.INFO, "new SocketWebTcp() for Unity. Server: " + this.ServerAddress); - } - - //this.Protocol = ConnectionProtocol.WebSocket; - this.PollReceive = false; - } - - public void Dispose() - { - this.State = PhotonSocketState.Disconnecting; - - if (this.sock != null) - { - try - { - if (this.sock.Connected) this.sock.Close(); - } - catch (Exception ex) - { - this.EnqueueDebugReturn(DebugLevel.INFO, "Exception in Dispose(): " + ex); - } - } - - this.sock = null; - this.State = PhotonSocketState.Disconnected; - } - - GameObject websocketConnectionObject; - public override bool Connect() - { - //bool baseOk = base.Connect(); - //if (!baseOk) - //{ - // return false; - //} - - - this.State = PhotonSocketState.Connecting; - - if (this.websocketConnectionObject != null) - { - UnityEngine.Object.Destroy(this.websocketConnectionObject); - } - - this.websocketConnectionObject = new GameObject("websocketConnectionObject"); - MonoBehaviour mb = this.websocketConnectionObject.AddComponent(); - this.websocketConnectionObject.hideFlags = HideFlags.HideInHierarchy; - UnityEngine.Object.DontDestroyOnLoad(this.websocketConnectionObject); - - #if UNITY_WEBGL || NETFX_CORE - this.sock = new WebSocket(new Uri(this.ConnectAddress), this.SerializationProtocol); - this.sock.Connect(); - - mb.StartCoroutine(this.ReceiveLoop()); - #else - - mb.StartCoroutine(this.DetectIpVersionAndConnect(mb)); - - #endif - return true; - } - - - #if !(UNITY_WEBGL || NETFX_CORE) - private bool ipVersionDetectDone; - private IEnumerator DetectIpVersionAndConnect(MonoBehaviour mb) - { - Uri uri = null; - try - { - uri = new Uri(this.ConnectAddress); - } - catch (Exception ex) - { - if (this.ReportDebugOfLevel(DebugLevel.ERROR)) - { - this.Listener.DebugReturn(DebugLevel.ERROR, "Failed to create a URI from ConnectAddress (" + ConnectAddress + "). Exception: " + ex); - } - } - - if (uri != null && uri.HostNameType == UriHostNameType.Dns) - { - ipVersionDetectDone = false; - - ThreadPool.QueueUserWorkItem(this.DetectIpVersion, uri.Host); - - while (!this.ipVersionDetectDone) - { - yield return new WaitForRealSeconds(0.1f); - } - } - - if (this.AddressResolvedAsIpv6) - { - this.ConnectAddress += "&IPv6"; - } - - if (this.ReportDebugOfLevel(DebugLevel.INFO)) - { - this.Listener.DebugReturn(DebugLevel.INFO, "DetectIpVersionAndConnect() AddressResolvedAsIpv6: " + this.AddressResolvedAsIpv6 + " ConnectAddress: " + ConnectAddress); - } - - - this.sock = new WebSocket(new Uri(this.ConnectAddress), this.SerializationProtocol); - this.sock.Connect(); - - mb.StartCoroutine(this.ReceiveLoop()); - } - - // state has to be the hostname string - private void DetectIpVersion(object state) - { - string host = state as string; - IPAddress[] ipAddresses; - try - { - ipAddresses = Dns.GetHostAddresses(host); - foreach (IPAddress ipAddress in ipAddresses) - { - if (ipAddress.AddressFamily == AddressFamily.InterNetworkV6) - { - this.AddressResolvedAsIpv6 = true; - break; - } - } - } - catch (Exception ex) - { - this.Listener.DebugReturn(DebugLevel.INFO, "DetectIpVersionAndConnect (uri: " + host + "= thread failed: " + ex); - } - - this.ipVersionDetectDone = true; - } - #endif - - - public override bool Disconnect() - { - if (this.ReportDebugOfLevel(DebugLevel.INFO)) - { - this.Listener.DebugReturn(DebugLevel.INFO, "SocketWebTcp.Disconnect()"); - } - - this.State = PhotonSocketState.Disconnecting; - - lock (this.syncer) - { - if (this.sock != null) - { - try - { - this.sock.Close(); - } - catch (Exception ex) - { - this.Listener.DebugReturn(DebugLevel.ERROR, "Exception in Disconnect(): " + ex); - } - this.sock = null; - } - } - - if (this.websocketConnectionObject != null) - { - UnityEngine.Object.Destroy(this.websocketConnectionObject); - } - - this.State = PhotonSocketState.Disconnected; - return true; - } - - /// - /// used by TPeer* - /// - public override PhotonSocketError Send(byte[] data, int length) - { - if (this.State != PhotonSocketState.Connected) - { - return PhotonSocketError.Skipped; - } - - try - { - if (data.Length > length) - { - byte[] trimmedData = new byte[length]; - Buffer.BlockCopy(data, 0, trimmedData, 0, length); - data = trimmedData; - } - - if (this.ReportDebugOfLevel(DebugLevel.ALL)) - { - this.Listener.DebugReturn(DebugLevel.ALL, "Sending: " + SupportClassPun.ByteArrayToString(data)); - } - - if (this.sock != null) - { - this.sock.Send(data); - } - } - catch (Exception e) - { - this.Listener.DebugReturn(DebugLevel.ERROR, "Cannot send to: " + this.ServerAddress + ". " + e.Message); - - this.HandleException(StatusCode.Exception); - return PhotonSocketError.Exception; - } - - return PhotonSocketError.Success; - } - - public override PhotonSocketError Receive(out byte[] data) - { - data = null; - return PhotonSocketError.NoData; - } - - - internal const int ALL_HEADER_BYTES = 9; - internal const int TCP_HEADER_BYTES = 7; - internal const int MSG_HEADER_BYTES = 2; - - public IEnumerator ReceiveLoop() - { - //this.Listener.DebugReturn(DebugLevel.INFO, "ReceiveLoop()"); - if (this.sock != null) - { - while (this.sock != null && !this.sock.Connected && this.sock.Error == null) - { - yield return new WaitForRealSeconds(0.1f); - } - - - if (this.sock != null) - { - if (this.sock.Error != null) - { - this.Listener.DebugReturn(DebugLevel.ERROR, "Exiting receive thread. Server: " + this.ServerAddress + ":" + this.ServerPort + " Error: " + this.sock.Error); - this.HandleException(StatusCode.ExceptionOnConnect); - } - else - { - // connected - if (this.ReportDebugOfLevel(DebugLevel.ALL)) - { - this.Listener.DebugReturn(DebugLevel.ALL, "Receiving by websocket. this.State: " + this.State); - } - - this.State = PhotonSocketState.Connected; - this.peerBase.OnConnect(); - - while (this.State == PhotonSocketState.Connected) - { - if (this.sock != null) - { - if (this.sock.Error != null) - { - this.Listener.DebugReturn(DebugLevel.ERROR, "Exiting receive thread (inside loop). Server: " + this.ServerAddress + ":" + this.ServerPort + " Error: " + this.sock.Error); - this.HandleException(StatusCode.ExceptionOnReceive); - break; - } - else - { - byte[] inBuff = this.sock.Recv(); - if (inBuff == null || inBuff.Length == 0) - { - // nothing received. wait a bit, try again - yield return new WaitForRealSeconds(0.02f); - continue; - } - - if (this.ReportDebugOfLevel(DebugLevel.ALL)) - { - this.Listener.DebugReturn(DebugLevel.ALL, "TCP << " + inBuff.Length + " = " + SupportClassPun.ByteArrayToString(inBuff)); - } - - if (inBuff.Length > 0) - { - try - { - this.HandleReceivedDatagram(inBuff, inBuff.Length, false); - } - catch (Exception e) - { - if (this.State != PhotonSocketState.Disconnecting && this.State != PhotonSocketState.Disconnected) - { - if (this.ReportDebugOfLevel(DebugLevel.ERROR)) - { - this.EnqueueDebugReturn(DebugLevel.ERROR, "Receive issue. State: " + this.State + ". Server: '" + this.ServerAddress + "' Exception: " + e); - } - - this.HandleException(StatusCode.ExceptionOnReceive); - } - } - } - } - } - } - } - } - } - - this.Disconnect(); - } - - private class MonoBehaviourExt : MonoBehaviour { } - } -} - -#endif \ No newline at end of file diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/WebSocket/SocketWebTcp.cs.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/WebSocket/SocketWebTcp.cs.meta deleted file mode 100644 index 7f04d3c3f..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/WebSocket/SocketWebTcp.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: ac953d6a57a9ea94e96ec689598995d5 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/WebSocket/WebSocket.cs b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/WebSocket/WebSocket.cs deleted file mode 100644 index ff48baf37..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/WebSocket/WebSocket.cs +++ /dev/null @@ -1,185 +0,0 @@ -#if UNITY_WEBGL || WEBSOCKET || ((UNITY_XBOXONE || UNITY_GAMECORE) && UNITY_EDITOR) - -// -------------------------------------------------------------------------------------------------------------------- -// -// Provided originally by Unity to cover WebSocket support in WebGL and the Editor. Modified by Exit Games GmbH. -// -// developer@exitgames.com -// -------------------------------------------------------------------------------------------------------------------- - - -using System; -using System.Text; -#if UNITY_WEBGL && !UNITY_EDITOR -using System.Runtime.InteropServices; -#else -using WebSocketSharp; -using System.Collections.Generic; -using System.Security.Authentication; -#endif - - -public class WebSocket -{ - private Uri mUrl; - /// Photon uses this to agree on a serialization protocol. Either: GpBinaryV16 or GpBinaryV18. Based on enum SerializationProtocol. - private string protocols = "GpBinaryV16"; - - public WebSocket(Uri url, string serialization = null) - { - this.mUrl = url; - if (serialization != null) - { - this.protocols = serialization; - } - - string protocol = mUrl.Scheme; - if (!protocol.Equals("ws") && !protocol.Equals("wss")) - throw new ArgumentException("Unsupported protocol: " + protocol); - } - - public void SendString(string str) - { - Send(Encoding.UTF8.GetBytes (str)); - } - - public string RecvString() - { - byte[] retval = Recv(); - if (retval == null) - return null; - return Encoding.UTF8.GetString (retval); - } - -#if UNITY_WEBGL && !UNITY_EDITOR - [DllImport("__Internal")] - private static extern int SocketCreate (string url, string protocols); - - [DllImport("__Internal")] - private static extern int SocketState (int socketInstance); - - [DllImport("__Internal")] - private static extern void SocketSend (int socketInstance, byte[] ptr, int length); - - [DllImport("__Internal")] - private static extern void SocketRecv (int socketInstance, byte[] ptr, int length); - - [DllImport("__Internal")] - private static extern int SocketRecvLength (int socketInstance); - - [DllImport("__Internal")] - private static extern void SocketClose (int socketInstance); - - [DllImport("__Internal")] - private static extern int SocketError (int socketInstance, byte[] ptr, int length); - - int m_NativeRef = 0; - - public void Send(byte[] buffer) - { - SocketSend (m_NativeRef, buffer, buffer.Length); - } - - public byte[] Recv() - { - int length = SocketRecvLength (m_NativeRef); - if (length == 0) - return null; - byte[] buffer = new byte[length]; - SocketRecv (m_NativeRef, buffer, length); - return buffer; - } - - public void Connect() - { - m_NativeRef = SocketCreate (mUrl.ToString(), this.protocols); - - //while (SocketState(m_NativeRef) == 0) - // yield return 0; - } - - public void Close() - { - SocketClose(m_NativeRef); - } - - public bool Connected - { - get { return SocketState(m_NativeRef) != 0; } - } - - public string Error - { - get { - const int bufsize = 1024; - byte[] buffer = new byte[bufsize]; - int result = SocketError (m_NativeRef, buffer, bufsize); - - if (result == 0) - return null; - - return Encoding.UTF8.GetString (buffer); - } - } -#else - WebSocketSharp.WebSocket m_Socket; - Queue m_Messages = new Queue(); - bool m_IsConnected = false; - string m_Error = null; - - public void Connect() - { - m_Socket = new WebSocketSharp.WebSocket(mUrl.ToString(), new string[] { this.protocols }); - m_Socket.SslConfiguration.EnabledSslProtocols = m_Socket.SslConfiguration.EnabledSslProtocols | (SslProtocols)(3072| 768); - m_Socket.OnMessage += (sender, e) => m_Messages.Enqueue(e.RawData); - m_Socket.OnOpen += (sender, e) => m_IsConnected = true; - //this.m_Socket.Log.Level = LogLevel.Debug; - //this.m_Socket.Log.Output += Output; - this.m_Socket.OnClose += SocketOnClose; - m_Socket.OnError += (sender, e) => m_Error = e.Message + (e.Exception == null ? "" : " / " + e.Exception); - m_Socket.ConnectAsync(); - } - - private void SocketOnClose(object sender, CloseEventArgs e) - { - //UnityEngine.Debug.Log(e.Code.ToString()); - - // this code is used for cases when the socket failed to get created (specifically used to detect "blocked by Windows firewall") - // for some reason this situation is not calling OnError - if (e.Code == 1006) - { - this.m_Error = e.Reason; - this.m_IsConnected = false; - } - } - - public bool Connected { get { return m_IsConnected; } }// added by TS - - - public void Send(byte[] buffer) - { - m_Socket.Send(buffer); - } - - public byte[] Recv() - { - if (m_Messages.Count == 0) - return null; - return m_Messages.Dequeue(); - } - - public void Close() - { - m_Socket.Close(); - } - - public string Error - { - get - { - return m_Error; - } - } -#endif -} -#endif \ No newline at end of file diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/WebSocket/WebSocket.cs.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/WebSocket/WebSocket.cs.meta deleted file mode 100644 index 241c9218d..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/WebSocket/WebSocket.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: b1bad04f7805f764dba77f0d4518e0f0 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/WebSocket/WebSocket.jslib b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/WebSocket/WebSocket.jslib deleted file mode 100644 index 2ae6b2e1a..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/WebSocket/WebSocket.jslib +++ /dev/null @@ -1,117 +0,0 @@ -var LibraryWebSockets = { -$webSocketInstances: [], - -SocketCreate: function(url, protocols) -{ - var str = Pointer_stringify(url); - var prot = Pointer_stringify(protocols); - var socket = { - socket: new WebSocket(str, [prot]), - buffer: new Uint8Array(0), - error: null, - messages: [] - } - socket.socket.binaryType = 'arraybuffer'; - socket.socket.onmessage = function (e) { -// if (e.data instanceof Blob) -// { -// var reader = new FileReader(); -// reader.addEventListener("loadend", function() { -// var array = new Uint8Array(reader.result); -// socket.messages.push(array); -// }); -// reader.readAsArrayBuffer(e.data); -// } - if (e.data instanceof ArrayBuffer) - { - var array = new Uint8Array(e.data); - socket.messages.push(array); - } - }; - socket.socket.onclose = function (e) { - if (e.code != 1000) - { - if (e.reason != null && e.reason.length > 0) - socket.error = e.reason; - else - { - switch (e.code) - { - case 1001: - socket.error = "Endpoint going away."; - break; - case 1002: - socket.error = "Protocol error."; - break; - case 1003: - socket.error = "Unsupported message."; - break; - case 1005: - socket.error = "No status."; - break; - case 1006: - socket.error = "Abnormal disconnection."; - break; - case 1009: - socket.error = "Data frame too large."; - break; - default: - socket.error = "Error "+e.code; - } - } - } - } - var instance = webSocketInstances.push(socket) - 1; - return instance; -}, - -SocketState: function (socketInstance) -{ - var socket = webSocketInstances[socketInstance]; - return socket.socket.readyState; -}, - -SocketError: function (socketInstance, ptr, bufsize) -{ - var socket = webSocketInstances[socketInstance]; - if (socket.error == null) - return 0; - var str = socket.error.slice(0, Math.max(0, bufsize - 1)); - writeStringToMemory(str, ptr, false); - return 1; -}, - -SocketSend: function (socketInstance, ptr, length) -{ - var socket = webSocketInstances[socketInstance]; - socket.socket.send (HEAPU8.buffer.slice(ptr, ptr+length)); -}, - -SocketRecvLength: function(socketInstance) -{ - var socket = webSocketInstances[socketInstance]; - if (socket.messages.length == 0) - return 0; - return socket.messages[0].length; -}, - -SocketRecv: function (socketInstance, ptr, length) -{ - var socket = webSocketInstances[socketInstance]; - if (socket.messages.length == 0) - return 0; - if (socket.messages[0].length > length) - return 0; - HEAPU8.set(socket.messages[0], ptr); - socket.messages = socket.messages.slice(1); -}, - -SocketClose: function (socketInstance) -{ - var socket = webSocketInstances[socketInstance]; - socket.socket.close(); -} -}; - -autoAddDeps(LibraryWebSockets, '$webSocketInstances'); -mergeInto(LibraryManager.library, LibraryWebSockets); diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/WebSocket/WebSocket.jslib.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/WebSocket/WebSocket.jslib.meta deleted file mode 100644 index e5a1c7d01..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/WebSocket/WebSocket.jslib.meta +++ /dev/null @@ -1,21 +0,0 @@ -fileFormatVersion: 2 -guid: 04bb5f307f2e48b4fbaa6da865fd4091 -PluginImporter: - serializedVersion: 1 - iconMap: {} - executionOrder: {} - isPreloaded: 0 - platformData: - Any: - enabled: 0 - settings: {} - Editor: - enabled: 0 - settings: - DefaultValueInitialized: true - WebGL: - enabled: 1 - settings: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/WebSocket/websocket-sharp.README b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/WebSocket/websocket-sharp.README deleted file mode 100644 index 2f1499085..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/WebSocket/websocket-sharp.README +++ /dev/null @@ -1,3 +0,0 @@ -websocket-sharp.dll built from https://github.com/sta/websocket-sharp.git, commit 869dfb09778de51081b0ae64bd2c3217cffe0699 on Aug 24, 2016. - -websocket-sharp is provided under The MIT License as mentioned here: https://github.com/sta/websocket-sharp#license \ No newline at end of file diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/WebSocket/websocket-sharp.README.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/WebSocket/websocket-sharp.README.meta deleted file mode 100644 index 47cc15d3d..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/WebSocket/websocket-sharp.README.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 3e262c2b04eaa8440987b50a91e86674 -DefaultImporter: - userData: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/WebSocket/websocket-sharp.dll b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/WebSocket/websocket-sharp.dll deleted file mode 100644 index 6ec719f73..000000000 Binary files a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/WebSocket/websocket-sharp.dll and /dev/null differ diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/WebSocket/websocket-sharp.dll.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/WebSocket/websocket-sharp.dll.meta deleted file mode 100644 index a58678694..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/WebSocket/websocket-sharp.dll.meta +++ /dev/null @@ -1,69 +0,0 @@ -fileFormatVersion: 2 -guid: 748eb70bc0d7515498ef73fed155520a -PluginImporter: - serializedVersion: 1 - iconMap: {} - executionOrder: {} - isPreloaded: 0 - platformData: - Android: - enabled: 0 - settings: - CPU: AnyCPU - Any: - enabled: 0 - settings: {} - Editor: - enabled: 1 - settings: - CPU: AnyCPU - DefaultValueInitialized: true - OS: AnyOS - Linux: - enabled: 0 - settings: - CPU: x86 - Linux64: - enabled: 0 - settings: - CPU: x86_64 - OSXIntel: - enabled: 0 - settings: - CPU: AnyCPU - OSXIntel64: - enabled: 0 - settings: - CPU: AnyCPU - WP8: - enabled: 0 - settings: - CPU: AnyCPU - DontProcess: False - PlaceholderPath: - Win: - enabled: 0 - settings: - CPU: AnyCPU - Win64: - enabled: 0 - settings: - CPU: AnyCPU - WindowsStoreApps: - enabled: 0 - settings: - CPU: AnyCPU - DontProcess: False - PlaceholderPath: - SDK: AnySDK - XboxOne: - enabled: 1 - settings: {} - iOS: - enabled: 0 - settings: - CompileFlags: - FrameworkDependencies: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/changes-library.txt b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/changes-library.txt deleted file mode 100644 index beb1267ec..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/changes-library.txt +++ /dev/null @@ -1,1696 +0,0 @@ - -Photon C# Client Library - Changelog -Exit Games GmbH - www.photonengine.com - forum.photonengine.com - - - -Version 4.1.4.8 (03. December 2020 - rev5915) - Fixed: Issue with DisconnectTimeout, which could be set to int.MaxValue and force a timeout. - Note: The maximum value that is applied as DisconnectTimeout is now 65535 (ushort.MaxValue). Negative values set to default timeout. - Added: PhotonPeer.RemoveAppIdFromWebSocketPath option to skip the appid in websocket connects. Defaults to false. - Internal: PeerBase.PepareWebSocketUrl to skip the appid when RemoveAppIdFromWebSocketPath is true. Changed order of parameters. - Note: The AppId is not mandatory on the PhotonCloud but might be needed to connect to Photon OnPremise when the port does not define the app type. - -Version 4.1.4.7 (26. November 2020 - rev5893) - Fixed: PhotonClientWebSocket handling of messages > MTU. Incoming messages may be incomplete and are now reassembled. Before the fix, common result was that deserialization failed with incorrect / incomplete data. - Added: ExitGames.Client.Photon.Hashtable Add() and Remove() for byte keys. This makes sure ht.Add(0, obj) and ht.Remove(0) match how the access via ht[0] works. - -Version 4.1.4.6 (17. November 2020 - rev5865) - Changed: The EventData.Paramters dictionary is now readonly. It does not need to be settable and can no longer be null. So null-checks are removed. - Changed: If the ByteArrayPool is used for reading events, the sender's actorNumber will not longer be in the EventData parameter-table. Instead, only the Sender property is used. - Note: This makes receiving EventData events non-alloc by not adding the Sender key/value to the Parameters (which would box the int value). - Note: The EventData.Sender property was available for a while and was a better way to access the event-sender's actornumber. - Changed: PhotonPeer.SendOperation() and PhotonPeer.SendMessage() will now check a few conditions (is connected, etc) and call PeerBase.SerializeOperationToMessage(). - Internal: Changed the code path for operations and messages serialization. There are lots of internal changes for this but no externals. - Internal: Message header length is set in EnqueueMessageAsPayload along with other updates (was in TPeer.SerializeOperationToMessage()). - Removed: PhotonPeer.OpCustom(), which was already obsolete for a long time. - Added: PeerBase.IsTransportEncrypted() to help figure out if Payload Encryption should be skipped. - Changed: PeerBase.SerializeMessageToMessage no longer updates the header for TCP. Done in EnqueueMessageAsPayload, used by EnqueuePhotonMessage. - Changed: SerializeMessageToMessage to check existing value isRawMessage instead of re-checking the condition when applying message type. - Fixed: Detection of Generic-Dictionary-typed arrays. Was lacking a test if the element was of type Dictionary. - Changed: Connect(string serverAddress, string applicationName) to call variant with proxy-support directly. - Updated: Connect methods and their docs. - Removed: More of the RHTTP support. - Added: DisconnectMessage deserialization and an event for this case: PhotonPeer.OnDisconnectMessage. This does not break the dll's compatibility. - Changed: Connect() workflow. This simplified the TPeer and EnetPeer somewhat and unifies some actions that were scattered in the classes hierarchy. - Changed: PhotonPeer to create the SocketImplementationConfig in the constructor. Connect() will use this to create the actual IPhotonSocket. - Changed: TPeer.Connect and EnetPeer.Connect are a bit simpler now (don't have to create the actual IPhotonSocket). - Removed: PeerBase.SocketImplementation member. - Changed: Setter and handling for the Version.clientVersion (conditional for SERVERSDK). - Changed: Version.clientVersion is readonly, unless SERVERSDK is defined. - Changed: CreatePeerBase() will only create a new EnetPeer or TPeer on demand (if the protocol changed or there was no PeerBase implementation). - Added: Special treatment for byte-typed keys to the Photon Hashtable to avoid boxing. Pre-boxed items are stored in a static array. - Added: NonAllocDictionary support in SupportClass (DictionaryToString()). - Added: ParameterDictionary as type and support to de/serialize it. - Note: This is a WiP commit to get LoadBalancing non-allow (or less alloc). - Added: PhotonPeer.WrapIncomingStructs to control how to de-serialize responses and events. Setting this requires adjusted code. - Note: As long as WrapIncomingStructs is not set, code changes are not mandatory. - Fixed: Error message in SerializeDictionaryHeader to include the type of the value which failed (it was logging the key's type). - Changed: The PhotonClientWebSocket does a DNS request before connecting, to figure out if IPv6 should be requested by Photon servers. - Added: PhotonPeer.TargetFramework to identify the target framework that the dll was built-for. Might help identify the used variant. - Changed: Code order a little, to get obsolete fields up in the range for them. - Removed: RhttpMinConnections and RhttpMaxConnections, which were entirely obsolete. - Changed: OperationResponse indexer is not obsolete. This was used to detect where it's used. - Changed: ParameterDictionary now has a Get() method, so the API is analog to Unwrap() in this case. - Changed: EnetChannel to use NonAllocDictionary instead of Dictionary. Our replacement is internal and non-allocating for iteration. - Changed: the logging level of events possibly happening on each Service() call changed from INFO to ALL - Changed: EnqueueMessageAsPayload stats-keeping no longer throws an exception, when the delivery mode is "out of range". - Internal: Changed how the client writes acknowledgements. - Internal: TPeer.ReceiveIncomingCommands() will only log "Wrong MagicNumber", if the received length is more than 0. It also logs the length then. - Changed: PhotonClientWebSocket (in .Net Standard 2.0 dll) now checks if the clientWebSocket state is still "Open" before handling incoming data. - Changed: PhotonClientWebSocket logs INFO, when the received data has length 0 but the socket is still Open. - - -Version 4.1.4.5 (04. September 2020 - rev5733) - Fixed: Serialization of a ByteArraySlice will now release it, as described in the docs. So you can pass a ByteArraySlice to RaiseEvent and control of it is passed over to the Photon API. - Fixed: Potential issues with SupportLogger.StartBackgroundCalls() when there were 255 threads running (and or stopped). - Changed: When PhotonClientWebSocket fails to connect, this will now correctly result in a disconnect with code/reason ExceptionOnConnect. - Changed: The socket reading-thread not call it's disconnect method, if already disconnecting/disconnected. This avoids a surplus call (and callback). - Internal: The thread locking object in SocketNative is no longers static. - Note: The next release will change the native datagram encryptor api. Most likely this is the last one compatible with the old native plugin. - -Version 4.1.4.4 (29. June 2020 - rev5625) - Fixed: NonAllocDict. Capacity change was broken. This is a critical fix. - Added: Indexer to NonAllocDict to allow Dict[key] get and set. - Added: NonAllocDict.Clear() method. - -Version 4.1.4.3 (24. June 2020 - rev5622) - Added: PhotonPeer.UseByteArraySlicePoolForEvents and PhotonPeer.ByteArraySlicePool to avoid memory garbage when events consist only of a byte-array. See comments / doc. - Added: Class NonAllocDictionary as replacement for the suboptimal implementation in Mono. Some of our code relies on Dictionaries and can be optimized with this. Note: This is neither documented well yet and considered "beta" until we got feedback on some use cases. - Added: PhotonPeer.TrafficRecorder and ITrafficRecorder. This can be used to capture traffic on UDP connections. - Changed: IPhotonSocket.ConnectAddress is now a local field. Before, it accessed the peer which might already connect to another server. - Changed: Debug log for DNS resolution (INFO level). This includes a count of IPs that were returned. - Added: Static PhotonPeer.NoNativeCallbacks to disable callbacks from native code to C#. SocketNative is the first class to use NoNativeCallbacks in DnsAndConnect(). - Changed: SocketUdp and SocketTcp are now public, like other implementations. This means you can assign them to the SocketImplementationConfig and select these deliberately. - Internal: Datagram Encryption was updated and optimized. (rev5548+rev5550). Added PhotonPeer.NativeEncryptorApiVersion constant to be able to check which native encryptor API is being compiled into the assembly. - Changed: EnetPeer.ReceiveIncomingCommands(): bytesIn counter simplified: now it simply incremented by input data size. - Removed: "CommandLog" feature. It was replaced by Traffic Recording. Remaining setting values for this (in PhotonPeer) are now Obsolete and without function. - Changed: WebSocket init workflow to make it compatible with AuthOnce / AuthOnceWss. It can send an init request now. - Internal: WebSockets need to use the ConnectAddress, as the TPeer will setup the address and path as required. - Changed: The IPhotonSocket does not set the ConnectAddress again, so the Peer can set this address before connecting. This is used for WebSocket connects. - Fixed: NETFX_CORE variant of payload encryption initialization. - Added: PreserveAttribute and used it on IPhotonSocket constructors. This keeps Unity's code stripping from constructors which we need. - Fixed: A rare threading issue for UDP connections. - Internal: SupportClass.StartBackgroundCalls() and related methods are now locked. A proper cleanup of StartBackgroundCalls is pending. - Changed: SupportClass.StopBackgroundCalls(id) will now clear the reference to the used thread but not remove the entry in the list. - Changed: SupportClass.StopAllBackgroundCalls() will now clear all referenced threads. Could be used when disconnected / before another connect to reduce number of Threads. - Removed: SupportClass.CallInBackground, which was replaced by StartBackgroundCalls a while ago. - - -Version 4.1.4.2 (08. May 2020 - rev5519) - Updated: DotNet SDK (net35, UWP and .Net Standard 2.0) and Unity SDK. -Version 4.1.4.1 (30. April 2020 - rev5482) - Fixed: String serialization for characters with more bytes. UTF8.GetBytes was called with byte-count instead of character-count as parameter. -Version 4.1.4.0 (28. April 2020 - rev5474) - Internal: Changed serialization of strings to produce no memory garbage. Strings that exceed a UTF8-encoded byte-length of 32767 (short.MaxValue) are not supported in either protocol (now throwing an exception). - Internal: Improved the serialization of float, double, float-array and double-array to produce less memory garbage with better performance. - Fixed: Cross platform serialization of float and double values in protocol 1.8 (which is used by default by PUN 2). Undiscovered, the C# client was using a wrong byte-order for network. The server and native clients were receiving a wrong value. Between C# clients, everything was fine. - Added: WebSocket support built-in to the Metro / UWP assembly. The PhotonMessageWebSocket is automatically used, unless some override is defined externally. - Changed: The socket implementations now disconnect when an exception happens due to sending. This uses the StatusCode.SendError, reported via OnStatusChanged callback. The LoadBalancingClient will handle this and report a DisconnectCause.Exception. Careful when updating only the library: Handle this in LoadBalancingClient. - Changed: The internal exception logging is now in log level INFO. This means the handled exception is no longer logged as if it's not. - Internal: Reverted to using the datagram encryption API v1. The new one is not fully implemented and should not be used yet (but was in v4.1.3.0). - Fixed: If a timeout message arrives after the client disconnected locally, the timeout is neither reported (via OnStatusChanged) nor does it trigger (another) disconnect. This avoids rare issues where clients would get stuck in Disconnecting state. - Added: Initial changes to support proxies for WSS. The PhotonPeer got a Connect overload which sets the proxy address and the IPhotonSocket got ProxyServerAddress. Higher level changes are upcoming. - Fixed: When the StreamBuffer for a large message got fragmented, this goes back to the StreamBuffer pool. - Changed: ExecuteCommand() for fragments. We now use a StreamBuffer from the pool and only adjust the buffered size if needed. - Added: Static PhotonPeer.MessageBufferPoolSize() to have access to the current StreamBuffer pool size. - -Version 4.1.3.0 (23. March 2020 - rev5399) - Internal: Changed Visual Studio projects which build the C# Photon libraries. Added a .Net Standard 2.0 assembly, which has built-in WebSocket support. - Added: IPhotonSocket.SerializationProtocol property. This provides the protocol of the current PhotonPeer.SerializationProtocolType as string. - Note: Some WebSocket implementations use a static value of the same name and need to be updated! Some projects contain SocketWebTcp.cs, SocketWebTcpThread.cs or similar files. - Changed: It is now possible to signal "on demand encryption" (known as Payload Encryption within Photon terms) even on secure connections (WSS / Datagram Encryption). This is important (only) for mixed connection types. A server update is required. The Photon Cloud is updated. - Added: PhotonPeer.SendInCreationOrder. This defaults to true, enabling the new behaviour explained below. - Changed: The send order of reliable and unreliable commands (UDP). This improves throughput of unreliable commands, when there are multiple datagrams of data. Before, a datagram got filled with the reliable commands first. Only when those were gone, unreliable commands were sent. The server was discarding some messages are too late. - Updated: Pool to be used in higher level APIs. Pool.Count is now also locked. - Internal: EnetPeer ocal variable fragmentLength to currentFragmentSize. It no longer hides EnetPeer.fragmentLength, which was probably causing issues in the Native Toolchain (Master builds for HoloLens 2). - Internal: Datagram Encryption now has a new mode: GCM. It can be used seamlessly with the Photon Cloud. - Internal: Native Datagram Encryption plugins and APIs are now more efficient. - Removed: rHttp support. - -Version 4.1.2.20 (12. December 2019 - rev5296) - Changed: DiffieHellmanCryptoProviderNative is now always compiled into the assembly using dynamic linking. If the payload encryption native library is present, it will be used automatically. - Changed: Extern methods with the DllImport attribute are now public. This allows a PrelinkAll() check if the dll is available and can be loaded. - Internal: EncryptorNative will no longer use native extern methods in static fields. This causes execptions in unexpected context. - Added: PhotonPeer NativePayloadEncryptionLibAvailable, NativeDatagramEncryptionLibAvailable and NativeSocketLibAvailable values. - Changed: SocketNative is autmatically used if the native socket lib is available, based on the checks above. - Changed: The wrappers for the native libraries (sockets and datagram encryption) will now setup a debug logging callback with debug level. This requires new native libraries. - -Version 4.1.2.19 (13. November 2019 - rev5271) - Internal: Handling for DllNotFoundException in the SocketNative.DnsAndConnect(). - Internal: Added support for setting the serialization protocol when using native websocket. - Internal: Added logging to native plugins for sockets and encryptor. - Internal: Changed the access level of PeerBase.debugOut from 'internal' to 'public'. - Changed: UDP socket classes now trigger a disconnect in the send methods, should the lower-level socket be disconnected. This gives us a quicker "disconnected" state in some error cases. So far, only reading-errors triggered disconnects in UDP. - Changed: Logging in case of send errors. - Added: Exception handling to deserialization. This adds a safety layer for receiving messages, which can be skipped. Important: It will be unknown, what message got discarded and if it's important or if it was fake / surplus. - Fixed: Internal class EncryptorNet, which was not thread safe, so DatagramEncryption was failing sooner or later. This affected only v4.1.2.18, which was an internal release. - -Version 4.1.2.18 (1. October 2019 - rev5229) - Removed: Surplus logging "Deserializing OpResponse Ping." for TCP/WebSocket connections. - Changed: Datagram Encryption to use an interface for the encryptor. - Changed: PhotonPeer.Encryptor is now public and can be set before connect. Applications can switch to new Datagram Encryption implementations. InitDatagramEncryption will create an instance and use that or falls back to the managed encryptor. - Note: PhotonPeer.Encryptor replaces DgramEncryptor. Setting the class before connect is likely what the LoadBalancingClient will do anyways. - Changed: The EncryptorNative class is for dynamic linked libs. It can be present in all Unity projects. - Changed: PhotonPeer.NativeDatagramEncrypt is obsolete, as it's always true now. On demand, an alternative Encryptor can be set. - Internal: ClientSdkIdShifted is simplified (because it was causing an error in another compiler / in Unity). - Changed: Reading Hashtables and Dictionaries will now check if the read key is null. If so, the key-value pair will be dropped silently. This applies to Protocol 1.6 and 1.8 alike. - Changed: All built-in socket implementations which are now more alike to one another. - Changed: When DNS resolution provides more than one IP, the socket will use the IPv6 ones first. If there is no route to the remote IP, the next in list is used. It does not resolve strings with IPv4 (e.g. a local address). - -Version 4.1.2.17 (9. August 2019 - rev5187) - Removed: Obsolete StatusCode values: DisconnectByServer is now DisconnectByServerTimeout. Other values are simply removed. - Updated: Used StatusCode.DisconnectByServer to DisconnectByServerTimeout. A follow up to renaming and removing the code. Some implementations of IPhotonSocket can be in existing projects and may still use the old naming. Simply rename. - Changed: PeerBase.timeInt is now a property which calculates the current time: SupportClass.GetTickCount() - this.timeBase. - Fixed: The change for timeInt fixes a problem with TCP connections which go entirely silent and would no longer update the PhotonPeer.ConnectionTime. - -Version 4.1.2.16 (28. June 2019 - rev5168) - Changed: TrafficStats Stopwatch initialization. This keeps the Stopwatch but resets it. Also it's started on initialization, if trafficStatsEnabled. - Changed: VitalStatsToString() can now return a useful stats string, even if TrafficStatsGameLevel is null (which is never the case currently). - Added: VitalStatsToString() now logs the "Longest send" time. This is a new value to debug connections. - Changed: NETFX_CORE now also uses Activator.CreateInstance, if a SocketImplementation is set (as in other implementations). - -Version 4.1.2.16 (24. June 2019 - rev5154) - Fixed: DispatchIncomingCommands() for reliable UDP. In some cases, an unreliable command/message could dispatch before the related reliable command (which was written and sent earlier). This issue was introduced in v4.1.2.11, 15. April 2019. - Fixed: Each thread created via SupportClass.StartBackgroundCalls will now try-catch a ThreadAbortException. Apparently the handling of a ThreadAbortException changed with Unity 2019, which started to log the exceptions on Android, IL2CPP, 4.x runtime. - -Version 4.1.2.15 (07. June 2019 - rev5137) - Changed: Tcp messages with magic byte 0xF4 are no longer accepted (this was used on a deprecated platform). - Changed: An Internal Operation Response for OpPing is now executed right away, fixing timing problems when using Op Ping (in WSS, e.g. on Xbox). - Added: PhotonPeer.InitialResentTimeMax. It guarantees resends for commands, despite bad lag (which may be temporary). - Changed: NCommand.ToString() for slightly better organization and naming of values. This is mostly a debugging help for the Photonians. - -Version 4.1.2.14 (16. May 2019 - rev5128) - Changed: The single "release history" file is now split. There is one "changes" file per api/level. For example: changes-realtime.txt lists the LoadBalancing / Realtime API changes. Find them in the respective subfolders. - Changed: The structure of the Unity SDK. As in PUN 2, there is a "Photon" folder, which wraps up all apis and libraries within a Unity project. - Updated: The readme txt. -Version 4.1.2.14 (6. May 2019 - rev5097) - Changed: EventData now has Sender or CustomData properties as well as SenderKey and CustomDataKey. The keys can be defines according to API. The default are the Realtime API values. Sender and CustomData access is cached. If an EventData instance is reused (PhotonPeer.ReuseEventInstance), the values will reset. - -Version 4.1.2.13 (3. May 2019 - rev5086) - Changed: EventData to not contain the Sender or CustomData properties anymore. They have been specific for the Realtime API and confusing for APIs like Chat. - Added: PhotonPeer.ReuseEventInstance as option to use a single EventData instance for all incoming events. This reduces memory garbage. The drawback is: An event provided via OnEvent(EventData photonEvent) is invalidated right after the callback finished. That event's content will get modified. Typically this is not a problem as events are rarely cached. - Internal: Added caching for a EventData instance (on demand). - -Version 4.1.2.12 (26. April 2019 - rev5046) - Fixed: A problem with the new EventData code of v4.1.2.11. It optimistically assumed that events with codes below 200 were always just containing Sender and CustomData. Photon Chat uses different codes, however. - Added: Access the Sender and CustomData via the EventData.Parameters dictionary, even if that is null (due to the new rules). In that case, the Sender and CustomData is accessed via the properties instead. - -Version 4.1.2.11 (15. April 2019 - rev5043) - Note: This version has a few changes that optimize memory usage mostly. - Internal: Changed EventData class (custom and Photon-defined events). Custom events set the Sender and Code and the CustomData but not Parameters (dict) now. EventData indexer checks if the "Parameters" are non-null. If the indexer is used to access non-existing Parameters, the result is null. Custom events are NOT setting Parameters anymore, saving the Dictionary<> use. - Internal: StreamBuffer.ReadByte() to return a byte or throw an exception when the end of the stream was reached. The -1 value was never used though. - Changed: EnetPeer.DispatchIncomingCommands() as optimization. When dispatching unreliable commands, the code now checks if the next command is available. If so, this is dispatched, without going through the keys of the dictionary (which was creating garbage to clean up). - -Version 4.1.2.10 (11. March 2019 - rev5023) - Fixed: A timeout issue for WS / WSS transport protocols by sending a ping. - -Version 4.1.2.9 (20. February 2019 - rev5003) - Note: Release .Net and Unity SDK from our page. - -Version 4.1.2.9 (13. February 2019 - rev4985) - Removed: Setting of Thread.Name for internally used threads. This was used for debugging only (since a while) but caused issues on a console platform (due to an issue in Unity IL2CPP exports). - -Version 4.1.2.8 (31. January 2019 - rev4975) - Fixed: The cap for the lastRoundtripTime. When the current roundTripTime was very low this meant the rtt wasn't going up again. This was a problem with local servers. - Fixed: Setting the roundTripTime when the connect-command gets acknowledged. This sets a minimum of 15ms now. Before, a local server could get a 0ms roundTripTime (due to using Environment.TickCount). - -Version 4.1.2.7 (25. January 2019 - rev4954) - Removed: CommandBufferSize and LimitOfUnreliableCommands. Technically, those are "Obsolete" but no longer used anywhere. See comments. - Fixed: MessageBufferPoolTrim() was not using a lock(), so this wasn't thread safe. - - -Older Versions - -*** Version 4.1.2.6 (12. December 2018 - rev4935) - Changed: Unsequenced delivery is now available in all builds. Internally, this was wrapped in compile conditions. - -*** Version 4.1.2.5 (10. December 2018 - rev4911) - Added: PhotonPeer.SentReliableCommandsCount - reliable commands sent but not yet acknowledged. This can be used as indicator for the quality of service, aslong with ResentReliableCommands. - Note: This build include the "Best Region Ping" classes, to minimize changes when released with Quantum. - -*** Version 4.1.2.4 (23. October 2018 - rev4868) - Fixed: Fragment bug introduced in 4557 (12. March 2018). This kept one command per reassembled message in the incoming queue (without payload). - Added: An upper limit for the calculated lastRoundtripTime (per ack) to prevent uncontrolled rtt changes due to garbled incoming messages. Protecting the rtt timer improves resending commands if needed. INFO level logging starts with: "LastRoundtripTime is suspicious". - Added: SocketTcpAsync class, which is receiving with BeginReceive and EndReceive in callback. This should work for Unity's 4.x Runtime, which has a bug that blocks Socket.Receive() indefinitely. - Changed: TPeer.ReceiveIncomingCommands() will now use dataLength as indicator how much was received. - Internal: CalculateCrc() now uses a cached lookup table, which gives it much better performance (most obviously for longer datagrams). - -*** Version 4.1.2.3 (17. October 2018 - rev4847) - Fixed: Fragment handling. When a duplicate fragment arrived after the "original" was reassembled, this led to an exception and disconnect. - -*** Version 4.1.2.2 (16. October 2018 - rev4843) - Changed: Enum StatusCode values. DisconnectByServer is obsolete and replaced with DisconnectByServerTimeout. - Added: StatusCode.DisconnectByServerReasonUnknown, as a generic case (unknown reason). - Added: You can now send List, which gets de/serialized as object[]. - Internal: PeerBase.MessageBufferPool is now a Queue, which means the usage changed minimally. This is faster than before. - Internal: When a client detects a timeout disconnect, it will enqueue the status-change, to allow the Disconnect()-call to finish first. This provides a clearer order of actions happening internally for a timeout. - Internal: Simplified the ExecuteCommand for a received Disconnect command. The StatusCallback is now enqueued, as Disconnect() also enqueues changes. - Updated: SocketUdpAsync class is now sending in blocking mode but receiving with BeginReceive and EndReceive in callback. This should work for Unity's 4.x Runtime, which has issues with blocking socket receive. - -*** Version 4.1.2.1 (31. July 2018 - rev4787) - Fixed: OutOfMemory exception while building 'Master' version on UWP with .Net Native Toolchain. This is a workaround for an alleged bug in ilc.exe. - Added: EventData.Sender to simplify access to this info. If there is no sender or if the server sent the event, the actorNumber is 0. -LoadBalancing: - Changed: OnStateChangeAction is now named StateChanged and provides a "previous state" value. State changes only trigger the event-call when the value actually changes. - Renamed: OnEventAction to EventReceived and OnOpResponseAction to OpResponseReceived. - Added: LoadBalancingClient now has AddCallbackTarget and RemoveCallbackTarget to simplify registering for various callbacks. -Chat: - Changed: Namespace from "ExitGames.Client.Photon.Chat" to "Photon.Chat". - Added: ConnectAndSetStatus method. - -*** Version 4.1.2.0 (3. May 2018 - rev4660) - Added: Unsequenced delivery for messages (reliable and unreliable). This way, operations and resulting responses and events can be sent as unsequenced, which is good for use cases like streaming voice, input and such. - Internal: The Photon library now re-uses memory for messages and commands. This avoids garbage collection in Unity, which can be a performance problem. - Changed: There is a new method to send operations: PhotonPeer.SendOperation. It uses the SendOptions struct to define the delivery mode, encryption, etc. This replaces the obsolete OpCustom(). - Added: Optionally, the Serialization Protocol v1.8 can now be used. Consider it a pre-release/test version for which we could use feedback. Set PhotonPeer.SerializationProtocolType. - Internal: Replaced foreach with while in SerializeParameterTable, SerializeHashTable and SerializeDictionaryElements in SerializationProtocol v1.6. - Internal: Changed EnetPeer to have a CommandQueue. Instead of queueing ExecuteCommand(cmd) delegates, we now queue the commands. This is leaner. - Internal: The SendOptions.DeliveryMode enum's order changed. - Added: PeerBase.MessageBufferPool, MessageBufferPoolGet() and MessageBufferPoolPut(StreamBuffer buff) as a simple memory pool implementation. - Added: PhotonPeer.MessageBufferPoolTrim() to give an option to limit the amount of memory buffered. - Added: PhotonPeer.MessageBufferPoolGet() as a (brute force) way to externally debug the memory buffer. This is temporary. Don't rely on this. - Added: For TCP, a client-side timeout. This is based on checking timestampOfLastReceive in the DispatchIncomingCommands method (timeouts only get called when you dispatch). - Fixed: The TCP implementation only checks for a TimeoutDisconnect, while in ConnectionStateValue.Connected. Otherwise, no timeout can happen. - Internal: Renamed various values for more fitting names. - Internal: Added special handling of Arrays of int and byte to DeserializeArray() in Protocol 1.6, using DeserializeByteArray and DeserializeIntArray respectively. -LoadBalancing: - Changed: The namespace to the simpler "Photon.Realtime". - Added: Various callbacks to signal specific situations / events. To get those, a class must implement the interface and be added to a list of "Targets". See: ILoadBalancingCallbacks. - Added: RegionHandler, which provides methods to ping a list of regions and to find the one with best ping. This moves PUN's "Best Region" feature to the LoadBalancing API. - Moved: The PhotonPing was part of the dll but is now part of LoadBalancing. - Added: LoadBalancingClient.UseAlternativeUdpPorts. This way, UDP may use ports of the Steam Multiplayer port-range by simply replacing existing port strings in addresses. - Changed: RaiseEvent now has an overload, that uses RaiseEventOptions and SendOptions. The old variant is obsolete but will still work. - Changed: CheckUserOnJoin is now set by default. The RoomOptions.CheckUserOnJoin got removed. - Added: Client-side checks and limits for OpFindFriends. - Added: Optional parameter sendAuthCookie to OpLeaveRoom. The app can control what's passed from Photon to a server via WebHook. - Changes: The room list for lobbies is no longer part of the LoadBalancingClient. Instead, implement the callback for the changed room list. - Added: AppSettings, a base class to host AppId and some settings for a title. This will help make it available across products. Right now, the LoadBalancingClient is not using it yet. - Changed: Player.ID is now .ActorNumber, which mirrors the server's naming. - Fixed: Unity compile defines to support Unity 2018, - -*** Version 4.1.1.19 (9. April 2018 - rev4590) - Fixed: WSS now sends an operation "ping" in SendAcksOnly() (and SendOutgoingCommands()) to avoid getting timed out. This happens right away, while other commands/operations stay in queue. - -*** Version 4.1.1.18 (19. December 2017 - rev4540) - Fixed: Exception in QueueOutgoingAcknowledgement() with a lock(). This avoids threading issues between Send- and Receive-thread. This was an issue mostly seen in Photon Voice, which uses the library multi-threaded. - Changed: Network Simulation now only stores the actual data of messages, instead of storing an action/delegate. - Note: The delegate IL code for Network Simulation was instantiating a "display class" instance and caused GC garbage, even if no simulation was running. -LoadBalancing: - Changed: FriendInfo.Name is now "UserId", which is up to date with it's usage. - Changed: CheckUserOnJoin is now set by default. The RoomOptions.CheckUserOnJoin got removed. - -*** Version 4.1.1.17 (11. October 2017 - rev4465) - Fixed: Fetching the server timestamp now works for the "No C# Sockets"-library build for WebSockets. This affected libraries used for XB1 and as a result, the serve time was not synced. E.g. PhotonNetwork.time was locked at 0. - Changed: XML doc of PhotonPeer.DisconnectTimeout. This is no longer a UDP exclusive setting and clearly states that the unit is milliseconds. - Updated: Several documentation comments for the PhotonPeer. Using shorter summaries and remarks for the details. -LoadBalancing: - Changed: OperationCode const byte Join = 255 is now marked obsolete. We use "JoinGame" instead. - Added: DisconnectCause.AuthenticationTicketExpired. - Fixed: DebugReturn call in Unity WebGL. -Chat: - Fixed: Unity "6" compile define is now UNITY_2017. - -*** Version 4.1.1.16 (1. September 2017 - rev4349) - Fixed: The native implementations for "PhotonPing", which are used for PUN's "Best Region" selection in the "No Sockets" dlls (Android and iOS for Unity 4.x). Disposing the "dynamic" version was causing an exception (due to an attempted fix of a less-obvious memory leak). This caused the Best Region selection to stall. - -*** Version 4.1.1.15 (17. July 2017 - rev4232) -WebSocket: - Changed: WebSockets are now treated like "addons", as their implementations are complex and potentially not running on some platforms (be it UWP or some Unity export). The Readme-Photon-WebSocket.txt tells you how to add them to your project and set them up. - Added: Folder "PhotonWebSocket" with SocketWebTcpCoroutine and SocketWebTcpThread classes, to support platforms with and without Thread API. - Added: PingHttp.cs for Unity WebGL exports, to support "Best Region" selection in PUN. -LoadBalancing: - Added: LoadBalancingClient.TransportProtocol as shortcut to the use PhotonPeer's TransportProtocol value. This enables setting the protocol easily while not connected. - Added: LoadBalancingClient.SocketImplementationConfig as shortcut to modify PhotonPeer's SocketImplementationConfig. This enables you to setup which IPhotonSocket implementation to use for which network protocol. - Changed: LoadBalancingPeer.ConfigUnitySockets() to try to find our websocket implementations in the assembly, making the SocketWebTcpCoroutine and SocketWebTcpThread classes optional. - Removed: Class "SocketWebTcp" is no longer found by ConfigUnitySockets(). -Chat: - Added: ChatClient.TransportProtocol as shortcut to the use PhotonPeer's TransportProtocol value. This enables setting the protocol easily while not connected. - Added: ChatClient.SocketImplementationConfig as shortcut to modify PhotonPeer's SocketImplementationConfig. This enables you to setup which IPhotonSocket implementation to use for which network protocol. - Changed: ChatPeer.ConfigUnitySockets() to try to find our websocket implementations in the assembly, making the SocketWebTcpCoroutine and SocketWebTcpThread classes optional. - Removed: Class "SocketWebTcp" is no longer found by ConfigUnitySockets(). - -*** Version 4.1.1.14 (5. July 2017 - rev4191) - Changed: SupportClass StartBackgroundCalls method now assigns an ID to each thread/task and enables you to cancel it explicitly via StopBackgroundCalls. CallInBackground is now obsolete due to renaming. -LoadBalancing - Changed: The ClientState "Uninitialized" is now "PeerCreated". This is the initial state. ConnectedToMaster is now ConnectedToMasterserver (both use the same value). - Updated: ClientState values descriptions. - Internal: GameEnteredOnGameServer() first sets the local player's actorNumber, then updates the player lists. -Chat: - Added: ChatClient can optionally run a thread to call SendOutgoingCommands in intervals. This makes sure the connection doesn't fail easily (e.g. when Unity is loading scenes, etc.). You still have to call Service to dispatch received messages. - Added: ChatClient.UseBackgroundWorkerForSending. Set this to true, to use the new background thread. Note: Do not use this in WebGL exports from Unity cause Threads are unavailable in them. -WebSocket: - Changed: Updated enabled protocols for WebSocket.cs. Now it is posible to connect to a server which supports only either TLS 1.1 or TLS 1.2 or TLS 1.0 or any combination of them. - -*** Version 4.1.1.13 (2. June 2017 - rev4112) - Internal: Fixed StreamBuffer.Seek() which was throwing an exception when seeking position 0 in an empty stream. - Removed: The queue-length checks which were using OnStatusChanged to warn about the amount of data queued for sending. Several StatusCode values are now obsolete accordingly. - Removed: StatusCode InternalReceiveException = 1039 and TcpRouter* which were obsolete for a longer time. - -*** Version 4.1.1.12 (24. May 2017 - rev4086) - Fixed: Peer.timeLastSendOutgoing was set in SendAcksOnly and ReceiveIncomingCommands. This should not happen. In PUN, this led to an issue with the fallback thread, which could not keep the connection. - Fixed: DNS resolution in the UDP socket is no longer inside a lock. Even if it takes longer (without network), the socket can now be closed before it's even opened properly, avoiding a freeze. - Fixed: UWP clients can set a SocketImplementationConfig. This opens up the use of WebSockets or any IPhotonSocket implementation in UWP, too. - Internal: Acknowledgements are no longer created as "commands" and serialized on send. Instead, they are directly written to a byte[] buffer, which is using less memory. - Added: PhotonPeer.EnableServerTracing to enable UDP Datagram Tracing on server side. We might ask you to use this when debugging connection issues. Otherwise, don't use this, as you can't access the server's logs anyways. - -*** Version 4.1.1.11 (13. April 2017 - rev3922) - Fixed: Bug of v4.1.1.10, which caused disconnects after a short time. - -*** Version 4.1.1.10 (11. April 2017 - rev3916) - Internal: Memory Allocation for nCommand and EnetPeer within SendoutGoingCommand, and AreReliableCommandInTransit - Internal: Refactoring of SerializeToBuffer to prevent memory allocation and access udpBuffer directly instead of using BlockCopy. - Internal: EnetPeer.channels got removed and replaced by a simple array and a GetChannel() method to access all channels. - -*** Version 4.1.1.9 (15. March 2017 - rev3884) - Fixed: Size calculation for Datagram Encryption (used on one console only, so far), when the MTU was changed from default. In some cases, an Exception was thrown: ArgumentException: Offset and length were out of bounds [...] at System.Buffer.BlockCopy. Adjusted GetFragmentLength() and CalculateBufferLen() internally. - -*** Version 4.1.1.8 (24. February 2017 - rev3873) - Fixed: Handling of non-fatal "WouldBlock" SocketExceptions when receiving data via TCP. This led to disconnects before. This affects only TCP connections in libs other than Windows Store. - Changed: Memory usage for TCP socket usage. Less memory is being allocated per receive. As we have to queue incoming data, it still has to get copied once. - Changed: Memory usage for encrypting messages. - Changed: SupportClass.DictionaryToString() now logs the length of a byte-array (not the content). - Changed: Deserializing unknown "Custom Types" returns the sent byte[]. There is no warning/error log yet but deserialization won't fail entirely. - Changed: PeerBase.SerializeMessageToMessage() to use less memory for encryption. Also, Raw-Messages can now be de/encrypted successfully. - Internal: Added StreamBuffer.ToArrayFromPos(), enabling you to get a buffer copy, starting with some offset (position of the buffer). - Internal: Removed some NETFX special build cases (obsolete due to using our own SteamBuffer). -LoadBalancing: - Added: Player.UserId field and code to read published UserIds from the player properties in CacheProperties(). When publishing the UserId in a room (RoomOptions.PublishUserId = true), the UserId becomes available for all players in a room. Good to find/make friends or follow a team player into another room. - Added: New matchmaking operation: OpGetGameList(typedLobby, sqlFilter). This fetches a list of rooms that match the filter. You can show lists of rooms with specific properties, if needed (or still use OpJoinRandom). - Fixed: WebFlags properties setters. - -*** Version 4.1.1.7 (16. December 2016) - Note: No new lib version. Just updated demos for the SDK. -Demos: - Fixed: Demos with persistent (Turnbased) games. The Memory Demo was not setting up rooms correctly (which led to errors joining them) and used a "join" rather than a "rejoin" to get into saved games (getting added to the room once more). - -*** Version 4.1.1.6 (9. December 2016 - rev3801) - Changed: Default SentCountAllowance = 7. -Loadbalancing: - Added: OpJoinRandom will now "remember" to send ExpectedUsers to the Game Server (by caching the value). - Added: AuthEvent and it's handling. This (internally sent) event can now update the client's token anytime (before that expires). - Added: LoadBalancingClient.OpChangeGroups(). - Changed: LoadBalancingClient.Disconnect() no longer sets it's own State to Disconnected. It waits till the state-change callback gets called by the lib. - -*** Version 4.1.1.5 (18. November 2016 - rev3775) -Internal: - Fixed: Photon-init request is now created by the factory method CreateAndEnqueueCommand to make sure we fragment the init if needed (for small MTU and more init-data). - Fixed: Bug in TrafficStatsReset method, which caused the averaged stats to go up infinitely after a reset. - -*** Version 4.1.1.4 (21. October 2016 - rev3737) - Internal: Added ArraySegment support for byte[]. This way, we can internally reuse more memory. - Changed: Implementations of PeerBase Disconnect() are now using EnqueueStatusCallback(StatusCode.Disconnect) to delay the "callback". That enables any thread to call Disconnect() while the status change correctly gets called in the main thread via DispatchIncomingCommands(). - Changed: When a SocketImplementationConfig for UDP is set, this will be used via Activator.CreateInstance(socketImplementation, this). - -*** Version 4.1.1.3 (20. September 2016 - rev3673) - Changed: NETFX_CORE implementation for UDP. This no longer attempts to detach the stream after every single Send, which caused issues when connecting and getting a lot of messages. - -*** Version 4.1.1.2 (13. September 2016 - rev3652) - Changed: There are less variants of the Photon library now, which makes it easier to integrate, run and test. There is a general "DotNet" version and a Windows Store (universal) dll. These two also come as Unity build and in Debug and Release. UWP can use the Universal/WSA library. - Added: PhotonPeer.SocketImplementationConfig. This allows easier configuration of the IPhotonSocket type to use per protocol, so that switching protocols is easier (compared to having to set a SocketImplementation before connecting). - Changed: PhotonPeer.SocketImplementation can't be set public. Use the SocketImplementationConfig instead. - Internal: This release summarizes a lot of internal refactorings. It's easy now to switch protocols (internally), to set socket implementations (platform dependent) if needed, etc. -LoadBalancing: - Removed: LoadBalancingClient.PlayerName and Player.Name. Were obsolete for more than a year. There is a NickName and the UserId can be set in the AuthValues. - Removed: OpJoinRoom() overload with actorNumber. This was obsolete. To enable clients to return to a room, set AuthValues and a userID. - Changed: LoadBalancingClient no longer overrides the protocol for Unity WebGL. This is done in the LoadBalancingPeer.ConfigUnitySockets(). - Changed: GetNameServerAddress() is the same in Chat and LoadBalancing APIs now. - Added: DisconnectCause.DisconnectByServerLogic and handling for this case. You can check this DisconnectedCause when the LoadBalancingClient.State is ClientState.Disconnected. - Added: Hashtable definition to use Photon's own implementation for Windows Store builds (NETFX_CORE). This must be used but it means you to use the same Hashtable definition in all builds (no matter if 8.1 or 10). - Added: Support for WebGL export in Unity. - Changed: OnStateChangeAction, OnEventAction and OnOpResponseAction are now events. To register a method in one of those, use += and to deregister you need to use -=. This prevents assigning a new method and de-registering any previously registered ones. -Chat: - Changed: ChatPeer now has ConfigUnitySockets(), which defines the SocketImplementationConfig. It's only used in Unity (using UNITY define). - Changed: ChatClient is not setting socket implementations anymore. - Added: Hashtable definition to use Photon's own implementation for Windows Store builds (NETFX_CORE). This must be used but it means you to use the same Hashtable definition in all builds (no matter if 8.1 or 10). - Added: Support for WebGL export in Unity. - -*** Version 4.1.1.1 (22. August 2016 - rev3549) - Fixed: IPv6 support. The init-message was missing it in 4.1.1.0. - Fixed: UWP build for Unity now has (Photon-)Hashtable class once more. Unlike Windows RT, UWP does support Hashtable (again). But in Unity, we always use ours. - -*** Version 4.1.1.0 (15. August 2016 - rev3536) - Changed: Unity exports now need to set the API Compatibility to ".Net 2.0". The ".Net 2.0 Subset" won't work anymore, due to need of some features for a new encryption mode. - Fixed: Windows Store implementation of TCP Socket. This is now compatible with 8.1 and 10 and the locally configured timeout is also applied while connecting initially. - Fixed: OpWebRPC documentation. -LoadBalancing: - Fixed: Room.ClearExpectedUsers() is now sending it's current, local "expected users" to update the server with "CAS" (Check and Swap). This gives the client an update when the values become valid (which updates the local cache after the roundtrip). - Added: Support for the 'Server Side Master Client' feature. The Room will read master client updates from the server accordingly. Room.SetMasterClient() enables you to override the server's selection (provided it did not change before your operation gets executed). - Changed: Option for bool WebForward into the new "WebFlags". This allows fine control of which data is being sent to WebHooks. This affects all SetProperties, OpWebRPC and the RaiseEventOptions. - Added: WebRPC.cs to the LoadBalancing API folder (was available separately before). It contains WebFlags and WebRpcResponse. -Internal: - Changed: Instead of Windows Phone 8.0 support, we now have a Windows 8.1 Universal library ("Metro") and one for Windows 10 Universal ("UWP"). - Changed: Changed initialization of PhotonPeer and related classes. - Changed: Workflow to send Init command. - Added: Option for "Datagram Encryption" and a new Authentication Workflow ("AuthOnce" and "AuthOnceWss"). This is part of the LoadBalancing API. - Added: ClientSdkId, which is used internally for reference. - -*** Version 4.1.0.6 (30. June 2016 - rev3400) - Changed: ExchangeKeysForEncryption() and internally called DeriveSharedKey() can now be executed in their own Thread. - Added: static PhotonPeer.AsyncKeyExchange to define if encryption calculations are done in parallel. -Internal: - Changed: NetworkSimulationSet.IsSimulationEnabled only does any work, if the value gets changed (saving some surplus work). - -*** Version 4.1.0.6 (21. June 2016 - rev3376) -Internal: - Removed: The wrapper for the optional "native encryption library" from most assemblies. It didn't get certified for the Windows Store and caused problems in the Unity WebPlayer. This will be provided on demand instead. - Removed: Our upcoming protocol implementation until it's fully compatible with all supported platforms. Despite not being used, it also caused some issues on some Unity exports. - Changed: Usage of MemoryStream is being replaced with a StreamBuffer. This is our own implementation and always grants access to the underlying byte[] (which is not possible in Windows Phone / Store API in some cases). For your Custom Type serialization, replace MemoryStream with StreamBuffer. That's all. - Internal: Commands are now split into header and payload byte-arrays, instead of copying them into yet another buffer before sending them. - Added: Support for IPv6 adresses in Photon Ping classes. This supports "Best Region" usage in PUN. - Fixed: After DNS resolution, IPv6 adresses are preferred over IPv4 ones. -LoadBalancing: - Fixed: LoadBalancingPeer.OpRaiseEvent(...) to send operations (and events) unencrypted again. - -*** Version 4.1.0.4 (19. May 2016 - rev3322) -Internal: - Updated: For Unity, the usage of the optional "native sockets" library is now compatible with IPv6 addresses, as required by Apple. - -*** Version 4.1.0.3 (28. April 2016) -Internal: - Added: An optional native library for encryption. This speeds up the (rarely used) key-exchange and encryption of messages. The usual case is to use the C# variant, as before. - -*** Version 4.1.0.2 (21. April 2016 - rev3283) -Internal: - Changed: PeerBase: ipv6 flag set in INIT_BYTES[5] after dns lookup, when ip address type already known - Changed: PeerBase: INIT_BYTES[4] contains clientlibid and release flag (15) - Changed: PeerBase: client version packed in INIT_BYTES[5,7,6] bytes - Changed: pProtocol prefix and path parsed (and trimmed) in IPhotonSocket.TryParseAddress to support websocket urls - Changed: Client version moved to separate version.cs - Changed: Protocol static methods reworked to instance methods, IProtocol interface extracted - Changed: PeerBase.DeserializeMessageAndCallback() to use a variant of new MemoryStream that exists in Windows 10 Universal APIs, too. -LoadBalancing: - Added: Expected Users. This affects the Room, LoadBalancingClient, JoinRoom, JoinOrCreateRoom and CreateRoom. - Added: null check in Extensions.StripToStringKeys(). - Fixed: FriendInfo.IsInRoom, which returned the opposite of it's naming! Also changed FriendInfo ToString() according to PUN's. - Added: RoomInfo expectedUsersField, which is updated with room properties (well known ones). - Added: Room.ExpectedUsers and ClearExpectedUsers() to expose the list of expected players. - Added: RoomInfo.serverSideMasterClient and masterClientIdField (also updated with well known properties). - Changed: OpRaiseEvent now re-uses a Dictionary in the LoadBalancingPeer. It uses Clear(), rather than creating a new Dict each time. - Changed: AuthenticationValues to also use C# properties and and backup-fields. This is guaranteed to work in Unity. - Updated: EventCode ErrorInfo reference with a link to "WebHooks" doc online. - Changed: Disconnect handling in the LoadBalancingClient. The client should reset correctly and log info, if it's in a State where a disconnect is a proper error. Note: In some cases like "switching server", a disconnect is expected, so it's not an error then. - Fixed: PlayerProperties sent to game server will now include well-known properties again. This fixes the "NickName missing" bug. - Fixed: LoadBalancingClient.State value when the client fails to join or create a game on the Master Server. The state is correctly re-set to ClientState.JoinedLobby or ClientState.ConnectedToMaster. - Internal: Added private inLobby value, to store if the client was/is in a lobby on the Master Server. - Fixed: DemoClient (in demo-loadbalancing) now makes use of the Name Server by using: ConnectToRegionMaster("eu"). - Added: DemoClient now has debug output when the connection times out or can't be established. - - -*** Version 4.0.5.1 (18. January 2016 - rev3187) - Fixed: EnetPeer.ExecuteCommand(). Fixed: Receiving a Disconnect-command didn't clear the receive-buffers. However, it has to be the last command executed. - Note: The bug related to the Disconnect-command happened, when an app paused, queued incoming commands and executed the Disconnect while incoming commands were queued. - Fixed: Setting of DisconnectTimeout for TCP connections (ReceiveTimeout and SendTimeout). - Changed: Our protocol serializes Enums implicitly as their underlying Type. This means you can easily send them but will lose the Type info (they don't arrive as your Enum type). This is now also working in Windows Store libraries (NETFX_CORE). -LoadBalancing: - Added: OpSetCustomPropertiesOfActor() and OpSetCustomPropertiesOfRoom() now check locally, if the client is currently in a room. It must be, to be able to set these properties. An exception exists for setting properties for the local player's actorNumber, but those are better set via LoadBalancingClient.LocalPlayer. -Unity SDK: - Changed: The Unity condition which defines "using Hashtable = ExitGames.Client.Photon.Hashtable;". All versions of Unity 4 and up now define that Photon's Hashtable is needed. This is only in the LoadBalancing API, not in the demos. - Added: WebGL support - -*** Version 4.0.5.0 (3. December 2015 - rev3144) - Changed: Signature of SetCustomProperties methods. All overloads now include a final, optional "webForward" parameter. This enables you to update a WebHook when properties change. This is intended for turnbased games, not for high-frequency updates - use with care. - Internal: Added more debug output to error messages from the socket usage. This should now always include the ServerAddress to make things easier to debug server-side, if needed. - Added: Serveral new ErrorCode values, which will be used by v4RC5 and newer servers. See ErrorCode.JoinFailed***, HttpLimitReached and ExternalHttpCallFailed. - Fixed: LoadBalancing API now reads the correct "NickName" key from the server's authentication response. So far, it was reading a key that is never used. Note: This means you can set a user's NickName server-side to override the client's nickname. -Chat - Added: A MessageLimit field for ChatClient and ChatChannel to limit the number of messages the client keeps locally. It might be useful to limit memory usage in long running chats. Set ChatClient.MessageLimit to apply the limit to any channel subscribed afterwards or apply a limit individually. - -*** Version 4.0.0.12 (3. November 2015 - rev3112) - Added: Support for IPv6. Note: IPv6 does not work in Unity yet. It has issues with IPv6. (Case 740910) - Note: Host name resolution will prefer IPv4 over IPv6, if both IPs should be available. IPv6 Addresses must use brackets! Example: [::1]:5055. This separates the port from the address. - Added: Error logging when Addresses can not be resolved to IPs. - Changed: LoadBalancingClient OpJoinOrCreateRoom() no longer allows you to re-join a room. Simply remove the ActorNumber from the parameters. To re-join, use OpJoin with actorNumber (Player.ID that was assigned in the room). - Added: Support for PS4 in Unity LoadBalancing SDK. Note: The demos are not all updated with controller support, as we use the old UI, still. To test export, use the Particle Demo. - -*** Version 4.0.0.11 (28. October 2015 - rev3093) - Changed: Sending a generic Dictionary (with specific types) will now throw an Exception, if any key or value is null. This limitation does not include Dictionaries which use object as type. Those Exceptions are one of the few, which are not catched and turned into a debug message. Catch them by wrapping Operation calls, where needed (OpRaiseEvent()). - Changed: TrafficStatsGameLevel public properties are now settable. This enables you to reset individual values to (e.g.) show "LongestDeltaBetweenSending of the past second". - Added: CommandLog debugging option. This can be used to get a list of sent reliable commands and their ACKs (from the server). Default is 0 size ("off"). - Added: CommandLogSize and CommandLogToString() to PhotonPeer. This is part of a LoadBalancingClient.loadBalancingPeer. - Added: Several PhotonPeer values to analyze connections: ConnectionTime, LastSendAckTime and LastSendOutgoingTime. PacketLossByChallenge is probably a tempoary addition to check if we have to drop corrupted packages due to bad "challenge" value. - Added: Log for incoming reliable commands. The most recent 200 entries will be logged with the CommandLogToString(). This is probably temporary. - Changed: Timing for resending reliable commands in RUDP. The peer will check the sent-queue more frequently now, no matter at what time some random command would have to be repeated. Repeats should be more timely, based on their dynamic resend-timing. - Changed: PhotonPeer.MaximumTransferUnit minimum is now 576 (was 520, which was lower than on the server). - Internal: Channels in the EnetPeer are now stored in an array, so we can replace some foreach-loops with for-loops. -LoadBalancing (Realtime and Turnbased API) - Added: LeaveLobby handling in OnOperationResponse(), which sets the client's state correctly. - Changed: Order of execution for Ev Join. If user is known (inactive user rejoins), the player's props are read. The actor list is used, if available. - Changed: RoomOptions to use properties with backup-fields to avoid issues in Unity which has issues with Object Initializer (curly brackets). - Changed: JoinMode 2 is now "JoinOrRejoin". Was: "Rejoin". - Added: ErrorCode constant AuthenticationTicketExpired. - Internal: OpJoinRoom, OpCreateRoom and OpJoinRandomRoom no longer use a (growing) list of properties. Instead, classes were created to "sum up" their parameters. The api for games didn't change. - Internal: Related to the refactoring of Join/Create, the LoadBalancingClient now creates a Room instance when the client arrived on the GameServer (before, it got created in the initial "create" call). -Chat - Added: More sanity checks on operations (empty userId or secret, max friends). - Added: Special debug logging when the server returns an error for "Operation Unknown". In this case, it's highly likely that you don't use a Chat AppId. - Added: More helpful error logging. - -*** Version 4.0.0.10 (14. July 2015 - rev2988) - Removed: LitePeer class and complete "Lite" namespace. It's highly recommended to use the LoadBalancing API (LoadBalancingClient, etc). The (few) operations that were defined in Lite are no longer required really. - Refactored: Some "base" enumerations that were provided by the Lite peer. They are now in LoadBalancingPeer. - Added: support for RoomOptions.Plugins. Which we need now since we support multiple plugins per plugin dll - for testing purposes for instance. - Fixed: The wrapper classes for the native sockets now do a Sleep(15) when there's nothing to receive. This reduces CPU load considerably. - Fixed: Unity library SocketWebTcp class for websocket support. It requires a coroutine on a new GameObject which is now marked as DontDestroyOnLoad(go) and survives scene loading. - Fixed: The Windows 8 SDKs now include the release assemblies. This makes sure you can submit your app to the Windows Store. - Added: ConnectionProtocol WebSocket and WebSocketSecure. It's simply a different protocol, compared to UDP and TCP, so it should be separated. - Internal: DoFraming is now a part of TPeer (was in IPhotonSocket). It's set by the ConnectionProtocol which avoids misconfiguration. - Changed: SendPing can now send a ping binary message or enqueue the Ping Operation (when DoFraming is false). - Added: A null-check for TrafficStatsStopwatch to avoid NullReferenceExceptions. - Added: Compile condition for Ping result handling. It's only used when the client uses Sockets as well (for the time being). - Added: Unity WebGL export also sets a "using" Hashtable definition. - Fixed: An exception in Photon.Hashtable.ToString() if a value was null. The assumption was that there are no null-values. - Changed: SocketUdp and SocketTcp now implement IDisposable, which seems to help with infrequent freezes in the Unity Editor. - Added: PhotonPeer.QuickResendAttempts. Sets how many resend attempts for a reliable command will be done in quick succession (after RTT+4*Variance), before the time between repeats will be increased. Use with care and with low values. - Added: IP/Hostname to logged exceptions when Connect fails. This is easier to support (e.g. DNS lookup fails). - Fixed: Library for PUN+ export to WebGL. Originally, we forced UDP as protocol for PUN+ export, as the native sockets library doesn't support TCP. However, WebGL export introduced a new use case. - Added: LoadBalancingClient.EnableLobbyStatistics and .LobbyStatistics. They provide an overview which lobbies your game uses and how busy they are. - Fixed: The LB Demo should set CustomProperties instead of directly setting (any) properties. - Fixed: SocketWebTcp is completely empty, unless WEBSOCKET is defined. Before the file still contained the "using" part of the class. -LoadBalancing (Realtime and Turnbased API) - Updated: Description for IsConnectedAndReady. - Changed: NameServerAddress to return a fitting address depending on protocol (including WebSocket but not yet RHTTP). - Updated: The only name server host is now "ns.exitgames.com", which gets turned into a proper address by protocol. - Changed: LoadBalancingClient.CustomAuthenticationValues is now .AuthValues. You can use those values to identify a user, even if you don't setup an external, custom authentication service. - Changed: LoadBalancingClient.UserId no longer directly stores the id but puts it into AuthValues. This means, the UserId could also be set via setting AuthValues. - Changed: The API of AuthenticationValues. There is now the UserId and AddAuthParameter() replaces the less general SetAuthParameters() (which only set specific key/values). - Changed: PlayerName gets renamed to NickName, so PhotonPlayer.Name becomes .NickName and LoadBalancingClient.Name becomes .NickName, too. The old naming is marked as obsolete. - Changed: Particle Demo now connects to the Cloud by default (because it's easier to setup and try). You can define your own Master Server (Photon OnPremise) of course. - Added: GamePropertyKey.MasterClientId (248) and ParameterCode.MasterClientId (203) - Added: ParameterCode.ExpectedValues (231) - Added: ParameterCode.SuppressRoomEvents (237) -Chat API: - Added: A Unity 4.6 demo with uGUI. It's missing a few features but should give you a good start to making your own. - Added: Unity/WebGL support (merged from PUN). - Added: Breaking! IChatClientListener.DebugReturn(). Photon lib and chat client log via this method (no logging to console by default). - Changed: ChatClient.CustomAuthenticationValues is now .AuthValues. You can use those values to identify a user, even if you don't setup an external, custom authentication service. - Changed: ChatClient.UserId no longer directly stores the id but puts it into AuthValues. This means, the UserId could also be set via setting AuthValues. - Changed: The API of AuthenticationValues. There is now the UserId and AddAuthParameter() replaces the less general SetAuthParameters() (which only set specific key/values). - Note: All users should have a UserId. You can set chatClient.UserId before you connect, or you can set the AuthenticationValues in Connect(..., authValues) to set a UserId. - Added: ChatChannel.ToStringMessages(), which gets all messages in a single string, line by line. The format is "Sender:Message". - Added: ChatClient.TryGetChannel() to find a channel only by name, no matter if public or private. -Photon Unity SDK - Changed: Organization of APIs and Assemblies in SDK. Now you can copy the content of folder "PhotonAssets" into your project's Assets folder and you have all APIs. - Added: PhotonAssets-U5 folder which includes only the Windows Universal DLL. - -*** Version 4.0.0.8 (14. January 2015 - rev2765) - Fixed: Serialization of custom types with nested Serialize-calls. In this case, re-using a specific memory stream breaks it. - -*** Version 4.0.0.7 (12. January 2015 - rev2763) - Fixed: Serialization of arrays of custom-types. -Chat API - Internal: Changed code for UserID from 7 to 225. The latter is used in LoadBalancing, too, so we want to re-use the code here. - -*** Version 4.0.0.6 (05. December 2014 - rev2758) - Added: ChatApi and LoadBalancingApi folders to Unity SDK. They are needed in any Photon project with Unity. When updating, copy and paste the files over existing ones and make sure to replace the assembly-files, too. - Changed: Protocol to save more memory or re-use it. The idea is to have less Garbage Collection (primarily for Unity/PUN and custom types). - Added: New CustomType de/serialization methods which provide the MemoryStream, instead of a byte[] COPY from the stream. - Changed: Now using one method to identify a Type. This was duplicated code before. - Changed: De/Serialization of some types. - Note: The drawback is now, that there are more places with: lock(). This is far from optimal but the alternative would be to make Protocol instances per thread. As most is static at the moment, this would not be an easy task. - Added: position check for DeserializeStreamFunction() call. Stream position must be "previous + customtype length". It gets corrected but at the moment no error is thrown. - Changed: DispatchIncomingCommands() no longer instantiates the commandsToRemove each call. This is reused and thus saves memory. - Changed: net_fx build will now check IsConstructedGenericType to detect if something is a dictionary -LoadBalancing - Added: LoadBalancingClient.OpJoinOrCreateRoom overload which has lobby as parameter. If a room gets created, this defines in which lobby it belongs. - Changed: LoadBalancingPeer: Added new error code PluginMismatch, documentation for Plugins parameter code. - -*** Version 4.0.0.5 (23. September 2014 - rev2738) - Updated: AddFriends and RemoveFriends doc. - Changed: Logging level for two cases. Dropping a package due to failed CRC-check is now logged for INFO. It's expected and certainly not an error. Dropping a package when the incoming challenge does not match is also not an ERROR. It is expected when you switch servers and packages arrive late. This is now debug level ALL. - -*** Version 4.0.0.4 (19. September 2014 - rev2736) - Fixed: Fragmentation when CRC checks are enabled. This kept clients from sending fragmented commands when the additional 4 bytes CRC were included later on. - Fixed: An issue in the ChatClient which was referring to a class from Photon Unity networking. This caused compile issues in the Unity Chat Demo. - Updated: Reference doc generation. - -*** Version 4.0.0.3 (15. September 2014 - rev2731) - Updated: Doc generation settings and style. - Note: This version has no code changes to rev2728 described below. That version is already released in the Unity Asset Store in PUN. - -*** Version 4.0.0.3 (11. September 2014 - rev2728) - Fixed: A simple "order of things" issue when detecting a timeout (due to resends). We first have to set "Zombie" state so that any Disconnect() call created a disconnect-command with reserved byte = 2 = "due to timeout". - Fixed: Chat to be compatible with native sockets of PUN+ (iOS and Android exports from Unity). - Fixed: Access to native sockets (in classes SocketUdpNativeDynamic and SocketUdpNativeStatic) is now using a lock(). The native methods are not thread safe but we need more than one socket for PUN+ and Chat (with native sockets, too). - Changed: Logging for the case "Ignoring received package due to wrong challenge". This got logged on log-level ERROR but maybe is better as WARNING only. Now this should log less often. - Internal: Updated to a newer native-sockets interface. - Internal: Updated to a newer native-sockets interface (affects PUN+ only). Cleaned up precompile defines and #if usage. - -*** Version 4.0.0.2 (01. August 2014 - rev2715) - Added: PhotonPing class and subclasses per platform. Allows clients to use regular UDP messages to ping our servers and find the best region. - Added: Native and Win8 support for PhotonPing. - Known Issue: Native ping has to be done "one by one" and without any other connection in Unity. It's not yet thread safe (but that is ok as we don't want to ping most of the time but only rarely and out of game). - Added: PhotonPing class/file to Win8 platforms. - Changed: The extern static methods for the native libs are now internal (instead of private). Pings are using them, too. - Changed: WebRpcResponse.ReturnCode comment to include fail code. - Changed: OpWebRpc doc is now much more complete and helpful. - Updated: Unity SDK Particle Demo (more) and LoadBalancing Demo (just a bit). - -*** Version 4.0.0.1 (17. June 2014 - rev2663) - Fixed: DotNet assembly no longer contains classes that try to include our Unity native socket libs. This was causing issues in some cases. - Added: PhotonPeer.CommandInfoCurrentDispatch. This property gives you the debug string of the currently dispatched command (events or responses). Only useful for UDP. -LoadBalancing: - Added: LoadBalancingClient.OpRaiseEvent(). Now that LoadBalancingClient USES a loadBalancingPeer (and doesn't extend it), things are much easier by offering this method, too! - Added: LoadBalancingClient.IsConnected and .IsConnectedAndReady to LB API. Going to be part of the API from now on. - Removed: Unused fields clientId and clientCount. - Changed: Field for internal use "lastJoinActorNumber" is now private as intended. - Changed: LoadBalancingClient.Disconnect is now setting it's own state to Disconnected if the connection got closed (as expected). -Chat: - Changed: How the server responds to Subscribe and Unsubscribe. Events will now contain success/failure of those. This allows us to send the answer after calling a WebHook if needed and we can even send it to multiple clients (which authenticated with the same userID). - Changed: Handling of subscription responsed. This is done to allow web services to subscribe a client remotely and to be able to prevent joining some channel that a user should not join (the channel of some guild or another team, e.g.). - Changed: Debug loggging. In Unity we can't use Debug.Assert, etc. So we have to log more cleanly. This works in Editor and several platforms (but not all). - Changed: Folder for Chat API. It now begins with "Photon" which provides some context no matter where you copy the files. Easier to find in Unity projects. - Changed: Operation FriendList and method SendFriendList renamed to AddFriends - Added: Operation RemoveFriends and corresponding method in ChatClient.cs - Added: Console Demo has new command 'fr' to remove friends - -*** Version 4.0.0.0 (23. May 2014 - rev2614) - Changed: This version contains a few features that are not compatible with the Photon Server SDK v3.x. Notable features that are not in the Server SDK are: NameServer, WebHooks and Turnbased API features. - Changed: This SDK is the first that contains all current APIs for Realtime, Turnbased and Chat. - Fixed: Release build of the Unity assembly now also excludes native-socket using code, fixing a Unity Free export issue. We only use the debug assembly in our demos though and suggest you do the same. -LoadBalancing: - Changed: LoadBalancingClient.FriendList creation/update is delayed until the server's response is available. This avoids cases where the friends are offline for the moment between requesting the update and getting it. Initially, it is null as before. - Added: some methods to Player to find next player, etc. Useful for turnbased games to find an opponent. - Added: LoadBalancingClient.UserId, which is the ID of a user(account). This is used in FindFriends and when you fetch account-related data (like save-games for Turnbased games). Set it before Connect*(). As fallback when empty during connect, the PlayerName is used instead. - Removed: LoadBalancingPeer.OpSetCustomPropertiesOfActor and OpSetPropertyOfRoom which were too special to be so low level. Could be implemented to LBClient. -Turnbased: - Fixed: OpJoinRandomRoom and OpCreateRoom which didn't reset the ActorNr to claim when entering the room. Depending on previous actions, some calls of those methods did fail when the actorNumber wasn't available. - Changed: OperationCode.Rpc is now called OperationCode.WebRpc. It's simply much cleaner (considering PUN has RPCs as well but in a different context). - Changed: WebRpcResponse reading to be able to handle additional data. - Added: Parameter webForward to: OpSetCustomPropertiesOfRoom and OpSetPropertiesOfRoom. The "old" overloads of these methods are still there, too. If webForward is true, the properties are sent to the WebHooks. -Chat: - Added: SendPrivateMessage() overload that has option to encrypt private messages. Public messages don't need encryption. - Removed: lastId and LastMessageIndex from channels. Those were impractical and should be removed from the API. - Changed: UserStatus class to ChatUserStatus. - Changed: Most classes are defined in their own file now. - Removed: Folders "Shared" and their subfolders. This gives a much better overview. - Added: Handling for event SubscribeResponse. This is not actually a response but gives you info about channels that got subscribed (e.g. when you re-login quickly or when a user is logged in in multiple clients). - Added: HandleSubscriptionResults() method to handle the event and proper responses. - -*** Version 3.2.2.6 (13. May - rev2575) - Fixed: Windows Store and Windows Phone libraries now only send the bytes they should send. This means we have to copy the payload from the "complete package buffer" in order to send it. - Fixed: SocketTcp now handles all exceptions during reading. Still, abort-by-server is treated as ServerDisconnect. Everything else as client side disconnect. This fix is especially for iOS exports from Unity. The iOS Power-button will immediately cut any connection. The Home-button allows us to keep the connection if we return the app to focus within a few seconds. - Fixed: TPeer.StopConnection() now clears the incoming queue when it disconnects. This avoids getting any more (already received) commands. - Changed: TPeer.Disconnect() now uses StopConnection instead of implementing the same code again. - -*** Version 3.2.2.5 (30. April - rev2566) -LoadBalancing: - Added: TypedLobby class to replace lobby name/type pair. - Added: LoadbalancingClient.CurrentLobby property. CurrentLobbyName and CurrentLobbyType are obsolete. - Added: New overloads in LoadbalancingClient with TypedLobby parameter instead of separate lobby name and type: OpJoinLobby, OpJoinRandomRoom. Old methods marked obsolete. - Added: New overloads in LoadbalancingClient for OpJoinOrCreateRoom, OpCreateRoom, CreateRoom with parameters packed in RoomOptions class. Old methods marked obsolete. - Breaking: LoadbalancingClient.CreateRoom parameters changed to (string roomName, RoomOptions opt). - Internal: Removed obsolete LoadBalancingPeer overloads of OpCreateRoom and OpJoinRoom - Internal: Added 'onGameServer' parameter to LoadBalancingPeer OpCreateRoom, OpJoinRoom; used to avoid sending extra data to master (player- and room-props) - Internal: Loadbalancing Room constructor(string roomName, RoomOptions opt). - Internal: Added use of the "JoinMode" parameter which is used in context of Turnbased games. - Fixed: Bug in OpLeaveLobby which joined the default lobby instead of leaving any lobby. -General: - Fixed: Server ports were read as short, which was wrong. We now use the correct unsigned short to convert from the address string). - Fixed: A minor issue in the SupportClass ToString conversion which used a Hashtable's key type instead of the value's type in one place. - -*** Version 3.2.2.4 (21. March 2014 - rev2519) - Internal: For Unity, the classes that handle native sockets can now be compiled in a variant that does not actually reference the native-socket-libs. The dll for PUN+ uses native sockets and need the native libs. Any regular dll will have the (not used and empty) classes for build-compatibility reasons. - Added: Values to enum EventCaching: SliceIncreaseIndex, SliceSetIndex, SlicePurgeIndex and SlicePurgeUpToIndex. They are in Lite but used in LoadBalancing. This is likely to be cleaned up in the next major release. - Changed: EventCaching MergeCache, ReplaceCache and RemoveCache as they belong to an outdated form of caching. The "RoomCache" is the better option in any case. -LoadBalancing: - Added: RaiseEventOptions class. It's used for OpRaiseEvent to avoid further parameter- and overload-clutter for this operation. While it's still not optimal for all cases, the fields in the RaiseEventOptions class are hopefully more clear how to use. Maybe some constructors will be added soon. - Changed: All OpRaiseEvent variants, except the one with RaiseEventOptions is now obsolete. - Added: Event Cache Slicing. Cached events can now be organized into "slices" which allows you to handle them in chunks. You can purge events in specific slices (e.g. get rid of the previous game-rounds events). -Turnbased: - Added: RaiseEventOptions.ForwardToWebhook which allows you to forward an event to a webhook (to be defined in Dashboard). Use this rarely, as it has an impact on (server) performance! - -*** Version 3.2.2.3 (18. February 2013 - rev2493) - Added: const PhotonPeer.NoSocket, so programs using our assemblies can detect if they must provide an external SocketImplementation. Some builds avoid using the Socket class (cause Unity Free doesn't support it on all platforms). - Added: PhotonPeer.SendMessage method in order to send any serializable object to server. - Added: IPhotonPeerListener.OnMessage in order to be notified about getting message from server. - Added: new 'Connect' method, which accepts as third parameter any serializable object. You may use this object on server before creating peer. - Added: OnMessage callback to samples - Changed: TCP and UDP both set the socket to null explicitly in Disconnect(). Hopefully this fixes a misbehaviour in Unity Editor which locked up often. - Changed: SocketTCP now has a syncer object and locks in Disconnect(), so only one Disconnect call can be made anytime. - Fixed: Nullreference when calling DispatchIncomingCommands() before Connect(). This was due to a (new) use of the socket wrapper. Commented this out until needed. - Fixed: Nullreference when calling SendAcksOnly() before Connect() with a new non-null check. - Fixed: breaking issue in Hashtable replacement class. Enumerators used in 2 "foreach" loops were breaking with a nullreference. Fix: No caching of enumerator. - Changed: AutoJoinLobby now uses this.CurrentLobbyName and this.CurrentLobbyType to join a specified lobby. - Changed: EnetPeer.StopConnection will always reset the state to be able to re-connect. - Changed: Disconnect() in SocketTcp and SocketUdp sets this.socket = null, even if socket.Close() caused an exception. This is what was expected. - Added: SocketUdpNativeDynamic and SocketUdpNativeStatic to "regular" Unity Lib, to improve compatibility in Unity for different export platforms (with and without native sockets). - -*** Version 3.2.2.1 (17. October 2013 - rev2335) - Note: This lib contains a lot of breaking changes and socket handling has been refactored. By now, this is well tested and confirmed working. - Changed: The way sockets are handled and added native-socket-lib support. There is a new IPhotonSocket interface which even allows to use external classes as socket wrapper. - Added: SocketImplementation property to set a class as socket implementation (Unity. sets native implementation or c# socket at compile time) - Changed: Win 8 RT and Phone now use fewer separate classes and files. Instead, more files from the (regular) DotNet client are used. RT and Phone are now part of the trunk folder in our SVN. - Added: TrafficStats.TimestampOfLastAck and .TimestampOfLastReliableCommand - Changed: Handling of server-side shutdown (a form of TCP disconnect) is now handled specifically as server-side-disconnect (was: generic receive exception) - Added: If a UDP connection times out in a client, it sends a special flag in it's disconnect command (to the server). This enables us to detect which side is triggering timeouts more often (and we can improve things). -LoadBalancing API - Fixed: issue where we called a virtual member from a constructor (http://confluence.jetbrains.com/display/ReSharper/Virtual+method+call+in+constructor) - Changed: LocalPlayer is now a property which checks null and returns a new Player (via virtual CreatePlayer) on demand. - Added: OpJoinRoom now optionally creates a room if parameter "createIfNotExists" is set to true and the room didn't exist. Room properties can't be set "on create" this way. LocalPlayer.IsMasterClient will be true. - Added: When OpJoinRoom can create a room, it also won't define which properties go into the lobby. You can use the new Room.SetPropertiesListedInLobby(). - Added: You can pass a actorNumber to OpJoinRoom when you re-enter a room and want to reclaim a specific actorNumber in that room. In best case, the client can re-join after a disconnect/crash and seamlessly go on playing. - -*** Version 3.2.1.6 (15. August 2013 - rev2272) - Changed: The library for Unity now contains a ExitGames.Client.Photon.Hashtable to be compatible with Win 8 exports. This must be used from now on! - Note: In Unity, the compiler will complain about ambiguous Hashtable definitions. To solve this, add this to the "using" part of your code: using Hashtable = ExitGames.Client.Photon.Hashtable; - Removed: Builds for Silverlight and Windows Phone 7.1 (this is not affecting Windows 8 RT and Windows 8 Phone SDKs which are of course supported) - Fixed: A null-reference check for a TCP connection's SendAcksOnly(). - -*** Version 3.2.1.5 (06.08.2013 - rev2242) - Added: Steam and Facebook entries to CustomAuthenticationType enum. - Fixed: Potential nullreference exception in TCP SendAcksOnly() code. If called before Connect(), this always failed. - Updated: Replacement classes for datatypes not supported on some platforms (Hashtable mostly). - Added: Hashtable got a new GetEnumerator that returns a IDictionary just like the standard Hashtable does. - Changed: Constructor with int InitialSize now calls the matching base constructor. - Removed: Synchronized() method which didn't do much and is not used. - Changed: ToString is now an override instead a "new" method. - Changed: DataTypes.cs: the Stopwatch is only implemented for Silverlight (non Windows Phone 8) - Updated: Description. - Changed: Protocol to expect Hashtable always providing a DictionaryEntry. Related to change in DataTypes.cs. - Changed: Protocol now has conditional "Dictionary" detection. In WP8 the API is different for that. Uses #if WINDOWS_PHONE. same file now works in W8 and WP8. - Changed: Removed PRPCAttribute from SupportClass.cs. This is used only in PUN and needs conditional per-platform compilation anyways, so it gets implemented there. - Removed: surplus debug output in ReceiveIncomingCommands(). - Fixed: Debug output in FetchServerTimestamp() depended on the Thread calling the method. Correct: The output is enqueued and dispatched later on. - Fixed: FetchServerTimestamp no longer fails with a SendError when the state is not "Connected". - Internal: Metro-Alike project now uses DataTypes.cs of Silverlight (like everyone else). Removed surplus copy. - Internal: DataTypes.cs and Protocol.cs files can now be used in DotNet 3.5, Windows Store and Windows 8 Phone. - Internal: outdated compiler-definitions "Photon" and "METROALIKE". - -*** Version 3.2.1.4 (10.07.2013 - rev2209) - Added: "Typed Lobby" API. Photon Cloud and Loadbalancing now support multiple lobbies per app/title. Also, different types of lobbies are now possible, each can have different options and different rules for matchmaking. - Added: enum LobbyType with "Default" and "SqlLobby". The SqlLobby is a new type of lobby that uses up to 10 room properties with sql-like filters. The filter being written like the "where" part of a sql query. - Changed: FetchServerTimestamp now enqueues callbacks (can be called by socket-receive-thread). also no longer causes a disconnect callback if offline - Changed: RemoveSentReliableCommand now enqueues callbacks (can be called by socket-receive-thread) - Internal: SendAcksOnly override in TCP's TPeer class. This now sends pings but nothing else. That resets the server's timeout for this peer -LoadBalancing API - Updated: LoadBalancing API in the Unity demos (now gets copied over at build time, making sure it's identical to the DotNet "original") - Fixed: LoadBalancingClient now handles SecurityException and InternalReceiveExceptions and disconnects correctly. Before, especially Unity web clients would get stuck in "Disconnecting" state. - Fixed: LoadBalancingClient state on disconnect (no matter what caused the disconnect). - -*** Version 3.2.1.3 (19.06.2013 - rev2170) - Fixed: surplus conversion of incoming data to string, which was used in debugging. - -*** Version 3.2.1.2 (17.06.2013 - rev2160) - Fixed: custom auth will send custom auth parameters if any authentication params are set - -*** Version 3.2.1.1 (10.06.2013 - rev2148) - Added: new POST value for Custom Authentication. POST can carry more data than GET (usually used). AuthenticationValues has a setter for this. -LoadBalancing API - Changed: LoadBalancingClient.AuthValues is renamed to CustomAuthenticationValues property (sets the custom authentication values). - Changed: Player class now compares by ActorNumer (assigned by server) instead of comparing the instance. - Internal: SupportClass.GetMethods() now returns type.GetRuntimeMethods(), filtered by attribute (if at all needed). This is used by Photon Unity Networking (PUN) internally. It also returns inherited methods now, not only Declared. - -*** Version 3.2.1.0 (24.05.2013 - rev2112) - Added: Feature "Custom Authentication" which lets you authorize players/users in the Photon Cloud with an external account/user service. More on that online: http://doc.photonengine.com/photon-cloud/CustomAuthentication - Added: LoadBalancing API Feature "Friend Finding" which enables a client to find friends in rooms by userId. If an external service provides a userID per player and a friend list, this can be used to find a friend's room (game) and join it (unless closed or full). - Added: CustomAuthenticationType enum to enable differnt types of custom auth later on (only one actually useful value so far). - Added: Class AuthenticationValues as container for authentication values. - Added: LoadBalancingClient.Connect overload which takes a AuthenticationValues parameter. - Added: LoadBalancingPeer.AuthValues property to set the custom authentication values. - Added: Parameter authValues to OpAuthenticate. This is used to provide the authentication parameters and or the secret/ticket provided by Photon. - Added: ErrorCode.CustomAuthenticationFailed to be used in switches for OperationResponse.ErrorCode (for OpAuthenticate). - Changed: LoadBalancingClient.PlayerName can be set before connecting to get a UserId which is "findable" by OpFindFriends(). Find friends does NOT use any values set for custom authentication! - Added: Class FriendInfo to contain a friend's name, online state and room name (if available and after using OpFindFriends()). - Added: OpFindFriends() to actually find the friends. Use on the Master Server only, not on a room. - Added: LoadBalancingClient.FriendList, a List of FriendInfo entries. Filled by using OpFindFriends (don't modify this list directly!). - Added: LoadBalancingClient.FriendListAge, to let you know how old the FriendList is. Only get updates when the list gets "old". - Fixed: OpRaiseEvent will no longer send "group" if it's 0 (which is the default). - Added: OpRaiseEvent overload to send object instead of Hashtable. This overload uses another parameter order to not mix up with the older implementation. You can send any serializable datatype now but must be aware if the event is Hashtable or something else. - Changed: Several variants of OpAuthenticate(), Connect() and ConnectToMaster() are now obsolete or removed. Use the alternative implementations (which should be cleaner). - Internal: Added several (operation) parameters to enum ParameterCode: ClientAuthenticationType, ClientAuthenticationParams, FindFriendsRequestList, FindFriendsResponseOnlineList, FindFriendsResponseRoomIdList. - Added: PhotonPeer.ResentReliableCommands to get count of re-sent commands (might be higher than out command count (as that counts created commands only) - Internal: Address (string) handling now uses string.Split instead of IndexOf to separate port from address and short.TryParse instead of short.Parse - Added: TrafficStatsGameLevel.ResetMaximumCounters() to reset those values that could max-out easily. Allows to get "longest delta between SendOutgoingCommands()-calls since last query". - -*** Version 3.2.0.2 (21.02.2013 - rev2066) - Fixed: Potential lock-up during sending. This could cause infinite blocking and thus a crash in some apps. (Win8 / Win Store api only) - -*** Version 3.2.0.1 (15.02.2013 - rev2060) - Fixed: Issue with delayed sending of operations in udp. The data could become overwritten before being sent. The bug was leading to high disconnect rates for clients using Windows Phone 7 and 8 and Silverlight or any client that used Network Simulation. - -*** Version 3.2.0.0 (13.02.2013 - rev2053) - Note: This release only changed the version, matching the new Server SDK v3.2.0.0 - Updated: readme.txt - Fixed: Reference for Windows 8 RT and Windows Phone 8 SDKs. - Added: Particle Demo to Unity Client SDK. - -*** Version 3.0.1.18 (11.02.2013 - rev1998) - Added: Optional per package CRC checksums to filter out compromised packages (avoiding more issues, compared to reading bad values). - Added: PhotonPeer .CrcEnabled and .PacketLossByCrc to handle CRC and get the count of affected (incoming) packages. - Note: Checking packages with CRC will take some computation time. Consider this an option to detect if/why someone's connection is bad. It's likely not good to be enabled by default. -Windows 8 RT & Windows 8 Phone: - Fixed: Serialization of foat and double values. These caused exceptions when used in object-arrays. - -*** Version 3.0.1.17 (19.12.2012 - rev1946) - Added: New Platform: Mono 4 Android. Please check the Readme.txt for hints how to build the demo in Mono 4 Android. - Changed: The referenced DotNet assemblies used by our libraries, which makes ours compatible with Mono 4 Android and others. - Changed: The Particle Demo Logic to also handle events sent by JavaScript clients. In case these are used, the types used in event differ from what DotNet or other clients send. - Changed: PhotonPeer.LocalTimeInMilliSeconds property now uses SupportClass.GetTickCount(). That method is using Environment.TickCount (which can be replaced if needed). - Changed: Any place that directly used Environment.TickCount (as the way SupportClass.GetTickCount() gets the value can be replaced). - Renamed: GetLocalMsTimestampDelegate is now: SupportClass.IntegerMillisecondsDelegate (rarely used if at all). - -*** Version 3.0.1.16 (29.11.2012 - rev1923) - Internal: A client timeout now internally sets connectionState to Zombie and then calls Disconnect() instead of stopping the connection right away. - Changed: Disconnect() sends a disconnect-command in any case (except not connected or disconnecting). If the connection is not in state connected anymore, said command is unsequenced (unreliable) and the disconnect is locally executed immediately as call to StopThread(). As before, disconnecting and disconnected clients won't send this. - Changed: Ping creation is now more strict and checks also if any reliable commands are outgoing AreReliableCommandsInTransit(). this avoids a few pings. - Fixed: NullReference exception in StopConnection() if it's called before being connected for the first time (late object creation made this fail). - Changed: PhotonPeer.LocalTimeInMilliSeconds property now uses SupportClass.GetTickCount(). That method is using Environment.TickCount (which can be replaced if needed). - Changed: Any place that directly used Environment.TickCount (as the way SupportClass.GetTickCount() gets the value can be replaced). - Renamed: GetLocalMsTimestampDelegate is now: SupportClass.IntegerMillisecondsDelegate (rarely used if at all). - - -*** Version 3.0.1.15 (27.11.2012 - rev1917) - Note: Silverlight SDK release only! - Updated: Silverlight projects with proper references (hopefully). In case you wonder: Some projects are included even though only their (source) files are linked in Silverlight. We can't reference DotNet projects directly, so we use the (shared) files instead. - Updated: Silverlight Particle Demo now has a basic gui and hopefully helps with your first steps. - -*** Version 3.0.1.14 (16.11.2012 - rev1891) - Added: Interest Groups! In rooms, you might send events to an interest group, identified by a byte (255 groups are currently allowed). OpChangeGroups lets you add or remove groups you're interested in. - Added: New platform! Welcome Windows 8 RT and Windows Phone 8. Both are "preview" releases but based on the stable DotNet basis we have. - Note: The Windows Phone 8 SDK does not yet have a LoadBalancing demo but the API is available (Windows Phone 8 is separate from the still existing Windows Phone 7.1 SDK). - Added: Another new platform: Playstation Mobile! This is Sony's SDK for mobile platforms. Find out more about it: www.playstation.com/psm - Added: Silverlight 4 SDK is back. Now with LoadBalancing API (the demo implementation is not finished but the basic "logic" is running). - Fixed: Windows Phone 7 and Silverlight TCP error handling while connecting to the server. This should fix issues with failing connects due to missing policy settings. - Internal: Windows Phone 7 and Silverlight TCP connections now set their state a bit differently (this doesn't affect the workflow though). - Internal: Http implementation now checks if a Proxy was set deliberately. Check is: (WebRequest.DefaultWebProxy as WebProxy != null). - Internal: DispatchIncomingCommands() now avoids copying lists when checking for commands that need a repeat. - Internal: SendOutgoingCommands() now re-uses a buffer to create UDP packages in before sending. This should save a lot of memory allocation. -LoadBalancing API: - Added: New demo "Particle". You will notice it's similar to the "Realtime Demo" but LoadBalancing- and Cloud-compatible and it makes better use of the default features. Check out Particle "Logic". - Added: LoadBalancingClient.DisconnectedCause to track certain disconnect causes (no matter if the connection or an operation caused the disconnect). - Added: DisconnectCause enum to enumerate those disconnection causes. - Changed: LoadBalancing OnOperationResponse() and OnStatusChanged() to track most disconnect reasons (in DisconnectedCause). - Removed: LoadBalancing Connect() variants that essentially were duplicates of others. - Changed: LoadBalancingClient debug output now goes to: Debug.WriteLine (which is available in debugger, while Console is not always). - Changed: CacheProperties method is now virtual for Room and Player. This allows you to override it and use this as callback to update props. - Added: Player.Tag to store arbitrary (game) data with the Player. Put in (e.g.) a player's representation/avatar or similar. - Added: ErrorCode constants MaxCcuReached and InvalidRegion. These are important for the Photon Cloud. - Added: Handling for DisconnectedByUserLimit. This is a status of OnStatusChanged when a Photon Server License's CCU limit is reached. This no longer will try to connect to a Game Server (where it gets rejected, too). - Changed: Debug output of loadBalancingClient now goes to Debug.WriteLine (which is available in debugger). - Changed: API now uses a factory method to create Room instances (this makes it possible to extend the Room class and instantiate the new class instead). - Changed: The Player constructor now has an "actorProperties" parameter and will cache the provided properties. This makes sure actor-props are available locally. -Windows Phone 8: - Added: Demo for Cloud / LoadBalancing. The Particle Demo only has a special WP8 GUI and links it's logic from a separate project (read: folder). -Windows 8 RT: - Added: Demo "Phong", which is a simplified, basic multiplayer game. It's focus is to show how to sync data, not to make it super smooth and error free. Let us know any issues but bear with us as it isn't fully featured. - -*** Version 3.0.1.13 (26.09.2012 - rev1731) - Fixed: Internals of method DispatchIncomingCommands() for UDP. In some cases this removed commands from a dictionary inside a foreach loop (which causes an Exception due to changing the dictionary) - Added: Support for Dictionary<,>[]. This is not a very lean way to send data (especially when using ) but if needed, it now works - Changed: Replaced several foreach loops with for loops (it doesn't change usage but in Unity exports to iOS, foreach uses more memory than for) - Added: Doc for public methods in Protocol class (they are useful to quickly write values into an existing byte-array) - Fixed: Unity UDP send code: iOS 5 devices will kill a socket when the power button is pressed (screen locked). This case was not detectable by checking socket.Connected. - Added: Unity UDP send code: Now tries to open another socket to refresh/keep the connection. This is affected by timeouts still, of course (as are all connections). - Internal: locked usage of UDP / enet channels - -*** Version 3.0.1.12 (26.07.2012 - rev1683) - Changed: The DotNet client libraries are now Thread safe! You could start a background Thread to keep calling SendOutgoingCommands in intervals and still call it from a game loop, too - Changed: Due to the thread safety, the demos no longer use excessive locks. This is now solved by the lib, more streamlined and hidden. One Thread is used instead of Timers (which could fire concurrently if execution was longer then their interval) - Changed: Moved the enable/disable property fro NetworkSimulationSettings to PhotonPeer.IsSimulationEnabled (this should now be thread safe) - Changed: NetworkSimulation will create and keep one thread when you first enable it in a (debug) client. Disabling it, will execute any delayed action immediately (in IsSimulationEnabled!) and pause the simulation thread - Changed: All demos are updated. We assigned new event codes (starting at 0, like any developer's code should) and extended the comments. Check them out - Changed: All Loadbalancing demos are now using the same DemoBasisCode linked in, so it can be changed in one position. Where needed an extension is made - Updated: comments / documentation for LoadBalancing API, Lite API and basic Photon API (basically anything public) - Changed: SupportClass.NumberToByteArray is now obsolete. It can be replaced with Protocol.Serialize() easily and that is performing better - Fixed: Windows Phone UDP socket was sending a full package of zeros on connect. It didn't break anything but is not needed, of course. - Fixed: SupportClass.StripKeysWithNullValues method was prone to throw an exception -LoadBalancing API: - Changed: LoadBalancingClient.OpLeaveRoom() skips execution when the room is null or the server is not GameServer or the client is disconnecting from GS already - Note: LoadBalancingClient.OpLeaveRoom() returns false in those cases and won't change the state, so check return of this method - Fixed: workflow for authentication (which should be called only once per connection, instead of "any time we establish encryption) - -*** Version 3.0.1.11 (05.06.2012 - rev1569) - Fixed: Udp issue with channels and unreliable commands. Unreliable commands of one channel were discarded, when another channel had unreliable commands, too - -*** Version 3.0.1.10 (04.06.2012 - rev1561) - Fixed: TCP connection issues for DotNet and Unity (Silverlight and WindowsPhone are different) - Fixed: DotNet+Unity TCP send calls with 0 bytes to send (this was ignored by the socket but useless anyways) - Moved: DNS resolution and socket.Connect() are now handled in the connection thread (TCP in DotNet and Unity) - Fixed: Issue with (TCP) socket connections being closed directly while connecting. in this case, socket.Receive() might receive 0 bytes instead of blocking until more bytes are available. without sending anything, the socket never updates its .Connected state and never throws a Exception. now we send a ping and thus trigger a exception - Fixed: Some documentation errors (due to changed API, etc) -Loadbalancing API: - Changed: LoadBalancingClient.OnEvent() now uses a join-event's actornumber-list to create Player instances for anyone who wasn't created as Player before - Fixed: LoadBalancingClient.OnEvent() handling for join-event does not expect any actor/player properties anymore (which fixes a potential null-reference exception when not even a name is set) - -*** Version 3.0.1.9 (10.05.2012 - rev1512) - Fixed: Reference to project in Windows Phone SDK - -*** Version 3.0.1.8 (09.05.2012 - rev1508) - Fixed: The OpJoinRandom of the LoadBalancingAPI failed to filter rooms for their custom room properties. Instead, any room matched. This is fixed now. - Added: New Demo for Windows Phone: Cloud Basics - Changed: The loadbalancing / cloud-based demos are refactored to share a similar codebase - -*** Version 3.0.1.6 (07.05.2012 - rev1489) - Note: This is a "stable" release, containing only a few updates. The bulk of changes are in the "odd" numbered releases. Read those updates carefully. - -*** Version 3.0.1.5 - Changed: adopted the even/odd version numbering system. versions ending on a odd number = intermediate/in-development version, even number = released (that makes 3.0.1.5 a intermediate) - Fixed: When NetworkSimulation is disabled, all remaining packages are sent/received immediately (ignoring the former delays) - Note: NetworkSimulation should be working nicely now. Be aware that sudden, additional lag might (!) lead to a disconnect. Play with the settings to find out which ones work for you - Changed: Protocol class now has a few methods to (effectively) serialize some datatypes to arrays (and into existing arrays) - Removed: Surplus public methods from Protocol that were "type-named" like SerializeFloat. The functionality is in still with overloaded methods - Added: count of packages (requests) outgoing if TrafficStatsEnabled -Demo Realtime: - Changed: The commandline arguments are now server:port, protocol (udp,tcp,http), reliable sending, interval dispatch, interval send, interval move. Example: localhost:5055 Udp false 15 25 15 - Changed: Demo Realtime: If the commandline sets an unknown protocol, the client shows a message and closes gracefully - Changed: Demo Realtime: The demo now starts in the grid view (showing something). Local player and player list are created with the Game instance. Player startpoint is randomized. -Loadbalancing API: - Renamed: LoadBalancingClient.lbPeer to .loadBalancingPeer - Fixed: LocalPlayer.SetCustomProperties() usage - Added: Service() method, which calls the LoadBalancingClient's Service simply - Changed: LoadBalancingClient is no longer extending LoadBalancingPeer but instead using one - Changed: the many overloads of Operations are gone in LoadBalancingPeer to streamline the api - Changed: ActorProperties are no longer set via JoinRoom, JoinRandomRoom or CreateRoom. instead, set the properties in the LocalPlayer and let the LoadBalancingClient send and sync them where necessary - Fixed: MasterClientId is now 0 when there are no more players in the room (it was set to int.max before) -Internal: - Changed: all DispatchIncomingCommands now use a while loop to dispatch the ActionQueue (in the hope this is the fastest way to do it) - Changed: DispatchIncomingCommands now looks for the received unreliable command with lowest unreliable seqNr to dispatch this - Changed: DispatchIncomingCommands discards commands if the reliable OR unreliable sequence is beyond the command's sequences - Changed: DispatchIncomingCommands now truncates the incoming unreliable commands to limitOfUnreliableCommands (if that's > 0) - Changed: the next reliable command to dispatch is now fetched with Dictionary.TryGetValue() (for being faster) - Changed: no longer using BinaryReader streams anywhere (this should improve speed and reduce mem usage) - Changed: PeerBase accordingly - Changed: Unit test MyType de/serialization now supports null-references (as 1 byte being 0) - Changed: Protocol.SerializeOperationRequest is now used in the same way, no matter if request is "top level" or inside some other datatype - Changed: the peer bases accordingly to use only one SerializeMemStream and lock it - Changed: how encryption fits in to the new serialization (it is a special case, as only the operation bytes get encrypted) - Added: Protocol.SerializeParameterTable() as requests, events and responses all use the same way to write their parameters - Changed: SerializeOperationToMessage parameter order - Changed: Order of Protocol methods to make more sense (from byte to more complex types for serialization) - New: PhotonDotNet library prototype for windows 8 metro - -*** Version 3.0.1.3 (13.04.2012 - rev1430) - Known issues: The Network Simulation is currently not guaranteed to work properly. Please bear with us. - Note: the following change might be a breaking one: - Changed: When dispatching a server's disconnect-command, the state is changed to ConnectionStateValue.Disconnecting BEFORE any callback due to state change is called. This should disallow game-code from calling any operations immediately. - Changed: Many internals. This should result in better performance - Changed: Service() now calls SendOutgoingCommands() until send-queues are empty. This might take more time but gets important commands out. If you need more control, Service() can be replaced with DispatchIncomingCommands and SendOutgoingCommands! - Added: null check to GetEndpoint() to avoid issues when the host address is null - Fixed: queueIncomingCommand() debug out message when a command is being received AND in in-queue (the list it accesses is now a dict) - Added: new "vital" stats to TrafficStats - Added: LongestOpResponseCallback and LongestOpResponseCallbackOpCode (opcode and time of longest callback) - Added: LongestEventCallback and LongestEventCallbackCode (event code and time of longest callback) - Added: LongestDeltaBetweenDispatching and LongestDeltaBetweenSending to detect "gaps" between subsequent calls of those - Added: DispatchCalls and SendOutgoingCommandsCalls to measure average call-rate - Fixed: PeerBase.TrafficStatsEnabledTime now checks if a stopwatch is set, else it returns 0 - Fixed: TrafficStatsReset() now works as intended (starting a new stopwatch, too) -Internal: - Changed: name of variable timeLastReceive. is now: timeLastAckReceive (better fit with what it does) - Internal: queueOutgoingReliableCommand() to use a lock on the channel it accesses - Internal: SerializeOperationRequest() now locks the MemoryStream while using it (avoids threading-issues with calling OPs) - Internal: SendUdpPackage() now checks if socket is obsolete (and disconnected for a reason) or not. only if not, a error is logged - Internal: EnetChannel now uses Dictionary and Queue for commands (should be faster to access) - Internal: simplified access methods in EnetChannel according to changes - Internal: outgoingAcknowledgementsList is now a Queue - Internal: receiveIncomingCommands() no longer has a local variable sentTime. instead using this.serverSentTime directly - Internal: UDP sending is now done with a synchronous socket call (profiling told us: this is cheaper) - Internal: re-using the socket arguments for receiving packages (saves some buffer allocation) - Internal: socket to non-blocking (maybe not possible on all devices) - Removed: initial-HTTP-protocol support (HTTP support not public yet) - Added: support for encryption with HTTP protocol - -*** Version 3.0.1.2 -- Added: Rooms now have a "well known" property to list the custom properties that should be available in the lobby. This can be set per room (but most likely makes sense per title/application). -- Added: LoadBalancingClient.OpCreateRoom() has a new parameter "propsListedInLobby" and Room.PropsListedInLobby is available to check this list (if needed at all). -- Added: GameProperties.PropsListedInLobby as "well known property" key -- Changed: LoadBalancingPeer.OpCreateRoom now sets ParameterCode.CleanupCacheOnLeave to true by default. This makes the server clean a player's event cache on leave. -- Added: SupportClass.DictionaryToString() will now print values of string[] and optionally leaves out type information. -- Note: 3.0.1.1 didn't get it's own SDK, so read that version's changes, too - -*** Version 3.0.1.1 -- Added: PhotonPeer.TrafficStatsElapsedMs, which gives you the milliseconds that the traffic stats are enabled. This internally uses a stopwatch (for now) which might not be available on all platforms. Please report if this new SDK causes issues. -- Added: PhotonPeer.TrafficStatsReset() to reset the traffic stats and the timer. This could be useful to get stats of "in game" versus "out of game". Note: Loadbalancing includes frequent server-switching and each disconnect/reconnect causes a reset. -- Changed: In LoadBalancingPeer EventCode.SetProperties is obsolete and replaced with EventCode.PropertiesChanged. Please switch to new constant. -- Added: Support in LoadBalancingAPI for Player.IsMasterClient. For this, the Players now get a RoomReference set (when added). The active player with the lowest ID is the master (per room). -- Added: Room.MasterClientId, which is updated when new players are added or the current master is removed. -- Added: SupportClass.DictionaryToString() has an overload which doesn't "print" the Type per key/value. -- Added: Loadbalancing API overload for OpJoinRandomRoom(...) taking additional parameter 'playerProperties' -- Added: Loadbalancing API CacheProperties() and Room.GetPlayer() are public now -- Added: LoadBalancingClient will now handle ExceptionOnConnect and keep clients from re-connecting if establishing a connection fails -- Note: The following changes affect only HTTP, which is an upcoming option for connections. So far, the public server SDKs don't support this. Feel free to contact us about it. -- Added: setter for PhotonPeer.ServerAddress to allow setting a http url (even while connected) -- Added: PhotonPeer.HttpUrlParameters setting parameters to be added to end of url (must begin with '&') -- Added: HttpUrlParameters to PeerBase -- Added: HttpUrlParameters is now attached to the end of a URL in http usecase -- Added: "Http2" support to Unity library -- Internal: method HttpBase.ConnectAsync is no longer needed and Request() is now directly passed to thread - -*** Version 3.0.1.0 -- Added: Loadbalancing (Cloud) Features -- Added: Project with the Loadbalancing sourcecode for DotNet, WindowsPhone and Unity3d (usable without PUN) -- Added: Initial, simple Loadbalancing demos for each platform (will update and extend those) -- Note: The API of the client libraries didn't change. The new features were added on top of the known API -- Added: VS2010 solutions for DotNet and Windows Phone SDKs containing the demos and APIs in the package -- Added: readme.txt with initial help to setup the Cloud/Loadbalancing demos -- Added: default appId for Loadblanacing demos: "" - -*** Version 3.0.0.10 -- Added: When UDP StartConnection (internal method) fails, callbacks to OnStatusChanged(StatusCode.Disconnect) are now done additionally to the SecurityExceptionOnConnect and ExceptionOnConnect calls. This happens direcly inside PhotonPeer.Connect()! -- Changed: When Unity UDP implementation fails to connect due to missing DNS resolution, it now also calls OnStatusChanged(StatusCode.ExceptionOnConnect) -- Removed: StatusCode.Exception_Connect value (obsolete, replaced by ExceptionOnConnect, same value) -- Fixed: Http connections (DotNet & Unity) now skip results while in disconnected state -- Fixed: Http connections (DotNet & Unity) now ignore results after a disconnect and reconnect was done (this applies only to HttpBase, not HttpBase2) -- Fixed: misleading debug out (pointing to WindowsPhone while the class is now in general use) -- Changed: DotNet UDP connection now only logs socket errors if the connection isn't obsolete (disconnected) already - -*** Version 3.0.0.9 -- Fixed: issue with HTTP connections and EstablishEncryption() -- Changed: ActionQueue is now a Queue, allowing Dequeue in a while loop instead of foreach(i in list) and clear() -- Changed: Unity HttpBase DispatchIncomingCommands() to make use of the queue -- Fixed: init byte[] length (internal. did not have consequences) -- Fixed: LitePeer OpRaiseEvent() was sending encrypted -- Internal: ContainsUnreliableSequenceNumber() check if reliable list needed sorting -- Fixed: Unity/Silverlight bug with encryption. Their implementation of BigInteger.GetBytes() failed when the 2nd, 3rd or 4th of the first 4 bytes was 0 but the previous wasnt. This led to incompatible secrets. -- Changed: TCP socket sending debug output now checks debuglevel (when send is skipped, cause the sender is obsolete already) -- Added: caching option RemoveFromRoomCacheForActorsLeft = 7 -- Internal: Added another http-based communication protocol. Please note: The fitting server's are not yet publicly released. This does not affect UDP or TCP protocols. - -*** Version 3.0.0.8 -- Fixed: Udp fragment reassembly in case fragments are received out of order and incoming queue was not yet sorted -- Fixed: Handling of incoming reliable commands (udp) which were skipped in some cases, if not received in order -- Fixed: Network simulation issue which caused lost incoming commands -- Fixed: Demo Realtime. protocol is now again Udp, fitting the default server address "localhost:5055" (make sure to build the demo with your server's address if Photon is not on the same machine) - -*** Version 3.0.0.7 -- Changed: Udp socket usage for Unity 3d lib. Both threads (send (in game loop) and receive (separate)) now have minimal locks while using the socket -- Fixed: SendOutgoingCommands now returns true if anything didn't make it into the outgoing UDP package -- Internal: TCP connections also skip network simulation when it's turned off - -*** Version 3.0.0.6 -- Fixed: SendOutgoingCommands now returns true if commands are remaining in outgoing queues (UDP only sends one package per call, TCP will send anything outgoing). -- Added: New "RoomCache" for Events. The EventCaching enum allows you to use it. Events in this cache will keep the order in which they arrived in the server. A filter makes deleting them very flexible. -- Internal: Ability to make lib send only ACKs and nothing else. This is probably a temp solution as it might be better to make sending and calling ops completely thread safe. -- Internal: PhotonPeer.IsSendingOnlyAcks, which is locked with the sending (not changing while sending). This makes SendOutgoingCommands() thread safe, which is good if you need a separate thread to keep connection. You could call operations while sending. -- Internal: Unity3d's connection now also syncs socket usage - -*** Version 3.0.0.5 -- Fixed: ObjectDisposedException in DotNet UDP workflow. This was caused by disconnecting while incoming data was processed (and before the next datagram was accepted) -- Added: PhotonPeer.LimitOfUnreliableCommands property. This helps you skip potentially "outdated" unreliable commands (events), which helps if you couldn't dispatch for a while -- Internal: Minor performance improvements. Example: The check if network simulation is turned on is done earlier in the workflow, which avoids a bit of overhead - -*** Version 3.0.0.4 -- Fixed: Tcp connections have been throwing ArgumentNullException in DispatchIncomgingCommands() if they were not connected yet -- Internal: Adjusted Http client to server rev2360 - -*** Version 3.0.0.3 RC2 -- Internal: Communication with HTTP server is WIP (Work In Progress - not a publicly available feature) - -*** Version 3.0.0.2 -- Fixed: OpRaiseEvent overload with EventCaching and ReceiverGroup parameters was not sending the customEventContent as expected. This was always null. -- Fixed: Time fetching case where no time was accepted. Servertime is now accepted, if the fetch-time-command was less or equal as the current roundtrip time. Avoids issues if rtt is exceptionally low immediately. -- Internal: When using multiple channels, dispatching incoming commands now will continue with the next channel, if one doesn't yet have the next reliable command (reliable sequence of one channel does not affect others) -- Internal: Changed protocol for TCP and message headers. This will support bigger message sizes. Also changed debug out related to unknown headers. -- Internal: Changed handling of TCP receive-callbacks for unfinished messages in Silverlight and WP. This should fix handling of very big data that's received in multiple "chunks" -- Internal: Http messages are now deserialized the same way that content in tcp or udp is handled - -*** Version 3.0.0.1 RC1 -- Fixed: Packaging of SDK now includes all files in demo folders, except a list of ignored file-endings (xaml and jpg files were missing in previous Silverlight and WindowsPhone SDKs) - -*** Version 3.0.0.0 RC1 -- Changed: Filenames! Now include a '3' for Photon v3. Update your references! Also, Silverlight libraries now use "Silverlight" in the filename (was: SL) -- Changed: Versioning. A dll's version has now 4 digits. The first 2 match Major and Minor number of the Server SDK. The latter 2 are Release and Build respectively -- Changed: Silverlight DataTypes (like Hashtable) are now in namespace ExitGames.Client.Photon. This is easier to include (as that namespace is in "using" in most cases) - -*** Version 6.4.5 -- Changed: Parameters for OpCustom are now of type Dictionary, making sure that only byte-codes are used for parameters -- Changed: Most IPhotonPeer names (to match those in server code): EventAction -> OnEvent, OperationResult -> OnOperationResponse, PeerStatusCallback -> OnStatusChanged -- Added: SupportClass.DictionaryToString(), which converts the content to string (includes support for Hashtables) -- Moved: Definitions of Lite and Lite Lobby specific codes for Parameters, operations and events are now in LitePeer. Will be available as source and could be replaced -- Changed: Usage of codes in Lite and Lite Lobby. Now pre-defined codes are starting at 255 and go down. Your events, operations and operation-parameters can now start at 0 and go up without clashing with pre-defined ones -- Changed: Constants that are non-exclusive (like event codes and OpKeys, which can be extended) are no longer "defined" as enums but as class of const byte values. Less casting but also less convenient "name" representation in debug output -- Added: LiteEventKey.CustomContent as key to access the content you sent via OpRaiseEvent ("Data" seems a bit misleading but is also available) -- Changed: Namespace of LitePeer to ExitGames.Client.Photon.Lite (the Lite-specific class is still compiled into the library for convenience but can be ignored quite easily this way) -- Added: Property MaximumTransferUnit. The default is 1200 bytes. Usually this is ok. In few cases, it might make sense to lower this value to ~520, which is commonly assumed the minimum MTU. Don't change this, if you don't know why. -- Added: New classes to wrap up op-requests (OperationRequest), op-results (OperationResponse) and events (EventData). Those new classes are now used in callback methods OnEvent and OnOperationResponse -- Changed: by using the new classes (note above), the client is a bit more like the server in its naming. We didn't want to change every last bit though. -- Internal: Changed protocol (to 1.6) so that it does not require any parameter codes internally. Any application can now define any operation, parameter and event codes it wants to. -- Changed: Encryption is now triggered by you and resolved by the library. You don't have to look out for the result of EstablishEncryption and use it. Instead: wait for OnPeerStateChanged call with either EncryptionEstablished or EncryptionFailedToEstablish -- Removed: InvocationId. This concept was very rarely used but confusing. It's easy to implement, if needed. If you don't know what this means: Nevermind. -- Changed: Operation calls now return bool: if they could be enqueued or not. If enqueued (cause you are connected and the data was serializable), then SendOutgoingCommands will send those operations (as before). -- Added: Support to de/serialize Dictionary. If the types are more specific than object, the serialization writes the type-code only once (lean byte usage in protocol) -- Added: Support to de/serialize null. Enables you to send a null value, e.g. in a Hashtable -- Added: ReceiverGroup enum to select a range of players that get an event via Operation Raise Event -- Added: Event Caching. Any event sent via RaiseEvent can now be buffered on the server side and is "repeated" when a new player is joining a room. This is similar to Properties but lets you categorize your info better and works just like regular events, too. -- Added: EventCaching enum to select if an event is to be cached and how it's cached: either "not at all" (default), replacing anything cached so far (fast) or "merge" (which will add new and replace old keys with new values). Optionally, a event can be raise with option "remove". -- Added: new overload of OpRaiseEvent() with the two new parameters noted above -- Added: Support for custom de/serializer methods. By writing 2 methods to convert a object into a byte-array (and back from that), Photon now supports any custom object type (standard datatypes are still supported out of the box) -- Added: PhotonPeer.RegisterType() to register serializer and deserialize methods for a certain type. Per object, a length and one byte 'type code' are added to the serialized data -- Added: Support for non-strict object[]. Unlike strictly-typed array, here each element will carry its own type. -- Note: If you want to use the new Custom Types or the object[], you have to update your server! Older Servers don't support the new features. As long as you don't use these features, the library is compatible with previous servers. -- Added: ByteCountCurrentDispatch and ByteCountLastOperation properties to PhotonPeer (the ancestor of LiteGame, etc). A game can now access the size of operation-results and events as well as operation-call size. -- Added: Traffic statistic set: PhotonPeer.TrafficStatsGameLevel as "high level" game-related traffic statistic. Counts bytes used by operations, their results and events. This includes overhead for these types of messages, but excludes connection-related overhead -- Added: Traffic statistic set: PhotonPeer.TrafficStatsIncoming and PhotonPeer.TrafficStatsOutgoing as low level statistics of the traffic -- Added: PhotonPeer.TrafficStatsEnabled which enables two sets of traffic statistics. By default, statistics are turned off. -- Added: Classes TrafficStats and TrafficStatsGameLevel for the two statistic cases metioned above -- Changed: NetworkSimulation now starts a Thread when it becomes enabled and the thread ends on simulation disable. Disable the NetworkSimulation to stop the thread, as Disconnect does not change the simulation settings! -- Internal: Cleanup and renaming of several properties -- Internal: Each new peer increases the PeerCount but it is no longer reduced on disconnect (it is existing still, after all) -- Internal: Udp commands will be buffered when serialized. This saves some work when re-sending a reliable command -- Added: TCP Routing code (not in Silverlight). To be used when running Photon on Azure (can be ignored in regular use) -- Added: to StatusCode: TcpRouterResponseOk = 1044, TcpRouterResponseNodeIdUnknown = 1045, TcpRouterResponseEndpointUnknown = 1046 and TcpRouterResponseNodeNotReady = 1047, -- Added: override for PhotonPeer.Connect() with node -- Internal: DotNet now reads the 2 bytes routing response, if a routing request was made (also, not in Silverlight) -- Internal: If TConnect sent a routing request, nothing else will be sent until 2 bytes response are read. -- Internal: If the routing-response does not start with ProxyResponseMarkerByte = 0xF1, a debug message is enqueued and TCP will disconnect -- Internal: Init request for TCP is now always enqueued instead sent directly. This way, it can be delayed if a routing node is selected -- Internal: TPeer EnqueueInit() and SendProxyInit() now create init and routing request respectively -- Internal: TConnect.sendTcp() checks isRunning before it tries to send (the socket might close before the NetSim does). This won't be an issue anytime, still INFO-level callback to DebugReturn is done. -- Removed: debug out for "send package" situation (even on ALL-level, this is more or less spam) -- Internal: updated version numbers of init to 6.4.5 -- Changed: SupportClass HashtableToString() returns "null" if parameter is null -- Internal: Removed SortedCommandList and CommandList classes. Replaced by List and a Sort() where necessary -- Internal: EnetPeer.channels is now a Dictionary instead of a SortedList -- Internal: the channels are initialized with channel 0xff first - this makes 0xff high prio in all foreach usaged -- Internal: NCommand class is now IComparable for usage in Sort() - - -*** Version 6.4.4 -- Added: PhotonPeer.TimestampOfLastSocketReceive now provides the time when something was received. Can be used warn players of bad communication-timing even before the disconnect timeout will be happening -- Fixed: OpGetPropertiesOfActor did use the actorNrList correctly, which always got you all properties of all players - -*** Version 6.4.3 -- Changed: A udp connection timeout in Unity will now end the socket-handling thread correctly -- Changed: The thread for Network simulation is now stopped when the client disconnects and started on connection (instead of keeping it per peer) -- Fixed: Exceptions in network simulation, when Disconnect() was called soon after Connect() but before the connection was established. - -*** Version 6.4.2 -- Fixed: It was possible to send PhotonPeer.FetchServerTimestamp() before being connected properly. Now the method triggers debug output (INFO level) and the callback PeerStatusCallback(StatusCode.SendError) -- Internal: Added a lock in the UDP version of SendOutgoingCommands(). It's still illegal to access a peer from multiple threads but the follow-up issues this lock avoids are very difficult to track. -- Internal: to stay compatible with all exports of Unity, the use of System.Threading.Interlocked.Exchange was replaced by simply replacing the list's reference instead - -*** Version 6.4.1 -- Changed: The Unity library now uses the WWW class for Http based requests. Results are checked within DispatchIncomingCommands(). Important: Unity allows handling WWW requests only on the MainThread, so dispatch must be called from this context! -- Note: Photon does not support Http requests out of the box. Customers get access to a fitting server on demand -- Changed: outgoing list is now replaced on send, instead of calling remove(0) repeatedly (which takes longer). Internal: this uses System.Threading.Interlocked.Exchange to switch to a new outgoing list in one step - -*** Version 6.4.0 -- Fixed: TCP handling of incoming data. This avoids loss of data (operation-results or events) when a lot of data is incoming. -- Changed: PeerStatusCallback() is less often called for queue-length warnings (e.g.: StatusCode.QueueIncomingReliableWarning). Only if a queue has a multiple of PhotonPeer.WarningSize items. -- Changed: WarningSize is now 100 by default -- Changed: Description of PhotonPeer.WarningSize and PhotonPeer.CommandBufferSize, which really is just the initial size of any buffer. The warnings are there to avoid situations where all heap is used up. -- Changed: Naming: StatusCode.Exception_Connect is now Obsolete and replaced with StatusCode.ExceptionOnConnect -- Added: Missing summary for StatusCode.SecurityExceptionOnConnect -- Added: NetworkSimulationSet.ToString override to provide a better overview -- Added: Support for arrays of Hashtables - -*** Version 6.3.1 -- Fixed: Network simulation now delays incoming packages by IncomingLag and IncomingJitter as expected (it was using the outgoing values, too) - -*** Version 6.3.0 -- Added: Network simulation (lag, jitter and drop rate) to debug builds -- Added: class NetworkSimulationSet with properties to control network simulation -- Added: NetworkSimulationSettings.NetworkSimulationSettings property to get current simulation settings -- Changed: only the first peerId of a VerifyConnect is accepted in client (avoids surplus peerID changes) -- Internal: added PeerBase.SendNetworkSimulated() and PeerBase.ReceiveNetworkSimulated() and a Thread to run delay simulation -Siverlight: -- Updated: to Silverlight v4.0 -- Added: Encryption to Silverlight library -- Internal: updated internal BigInteger class for Silverlight -- Internal: DiffieHellmanCryptoProvider in Silverlight, so it uses AesManaged instead of Rijndael (which is not part of Silverlight 3) -- Added: Stopwatch class to DataTypes.cs (for Silverlight only) - -*** Version 6.2.0 -- Added: "Demo LiteLobby Chatroom" to Unity SDK -- Updated: Demo Realtime in Unity client SDK. It's still compatible with the demo on other platforms but cleaned up and much better commented -- Updated: Documentation is now clearer on where the Lite logic is used (it runs on Photon but is not the only application logic) -- Updated: Documentation for the enumerations in IPhotonListener. The Lite application based ones are better described and it's now clear which ones are essential to the Photon client (not only in Lite) -- Updated: Documentation in several other places -- Added: StatusCode.SecurityExceptionOnConnect which is thrown if a security exception keeps a socket from connecting (happens in Unity when it's missing a policy file) -- Added: PhotonEventKey and PhotonOpParameterKey which contain the fixed byte keys that cannot be re-assigned by applications at will (as these keys are used in the clients and server in their respective context) -- Change: PhotonPeer.PeerState is no longer a byte but of type PhotonPeer.PeerStateValue, which makes checking the state simpler. The PeerStateCallback() for state changes is still called as before. -- Changed: Property PhotonPeer.PeerState. It now converts the low level ConnectionStateValue to a PeerStateValue, which now includes a state InitializingApplication. See reference for PeerStateValue. -- Changed: PeerStateValue enum is now part of the ExitGames.Client.Photon namespace, making it more accessible -- Internal: NConnect in DotNet and Unity to catch security exceptions -- Internal: from using var to explicit type usage in DiffieHellmanCryptoProvider.cs (Mono Develop friendly) -- Internal: made const: ENET_PEER_PACKET_LOSS_SCALE, ENET_PEER_DEFAULT_ROUND_TRIP_TIME and ENET_PEER_PACKET_THROTTLE_INTERVAL -- Internal: PeerBase "PeerStateValue peerState" is now: "ConnectionStateValue peerConnectionState" (holding the low level connection state, nothing more) -- Internal: added PeerBase.ApplicationIsInitialized, which stores if the init command was answered by Photon (reset on connect/disconnect) -- Removed: PhotonDemoServerUrlPort and PhotonDemoServerIpPort of PhotonPeer. All demos now use "localhost:5055" and you should run your own server. -- Added: enum ConnectionProtocol to get rid of the "useTcp" parameter in the PhotonPeer constructor (which was less clear than the explicit enum now in use) -- Added: overload of PhotonPeer constructor, which is still compatible with the "useTcp" bool parameter (to avoid a breaking change for the time being) -- Added: PhotonPeer.UsedProtocol property to find out this peer's protcol -- Added: LitePeer.OpLeave() overload without the gameName parameter. That name is not checked in the Lite application (on the server), so it's not really needed - -*** Version 6.1.0 -- Added: Encryption for Unity and DotNet. Operations (and their responses) can be encrypted after exchanging the public keys with the server -- Added: OpExchangeKeysForEncryption(), DeriveSharedKey() and IsEncryptionAvailable to PhotonPeer (and LitePeer inherits these) -- Added: OpCustom() will throw an ArgumentException if the operation should be encrypted but keys are not yet exchanged (exchange keys first) -- Added: LiteOpCode.ExchangeKeysForEncryption = (byte)95 -- Added: Overloaded PhotonPeer.OpCustom() with new "encrypt" parameter -- Added: property PhotonPeer.IsEncryptionAvailable is true if public-keys are exchanged and the secret is compiled from them -- Added: Encryption demo to Realtime Demo. Press E to exchange keys and R to toggle encrypted sending for the move data (even though events are never encrypted) -- Changed: PeerBase methods: sendOperation()->EnqueueOperation(...,encrypt), updateRoundTripTimeAndVariance()->UpdateRoundTripTimeAndVariance() -- Updated: the Unity client is now a Unity v3.1 project. Make sure to change the server address before you build for iPhone (localhost:5055 won't work on the mobile) -- Removed: the outdated, separate iPhone demo (was: Unity v1.7 for iPhone) -- Updated: PhotonPeer documentation for Service(), DispatchIncomingCommands() and SendOutgoingCommands() -- Added: OpRaiseEvent() overload with parameter TargetActors. Sends optional list of actors that will receive the event (if null, all *other* actors will receive the event, as default) -- Internal: Added source BigInteger.cs, DiffieHellmanCryptoProvider.cs and OakleyGroups.cs -- Internal: PeerBase.CryptoProvider, PeerBase.ExchangeKeysForEncryption() and PeerBase.DeriveSharedKey() -- Internal: EnetPeer.initPhotonPeer() and TPeer.initPhotonPeer() are setting PeerBase.isEncryptionAvailable = false -- Internal: De/Serialization methods (and some variables for it) are moved from NConnect to PeerBase and renamed to: SerializeOperationToMessage() and DeserializeMessageAndCallback() -- Internal: switched project to allow "unsafe" functions (used by BigInteger) -- Internal: renamed PhotonPeer.sendOperation()->EnqueueOperation -- Internal: changed assembly version to 6.1.0 and "client version" in init-byte-block to 6,1,0 -- Internal: moved protocol handling to EnetPeer and TPeer classes (where encryption is added) -- Internal: moved InitBlock to (shared) PeerBase (same for UDP/TCP) -- Internal: serialization is now done by Protocol.SerializeOpParameters(), which excludes the message header. this makes encryption simpler - -*** Version 6.0.0 -- Changed: This library requires Photon v2.2.0 and up! (in other words: the libraries are not compatible with older Photon servers, due to servertime changes) -- Added: Support for arrays in arrays. Any serializable datatype can now be used in nested arrays. Even arrays of Hashtables are possible. -- Added: Realtime Demo optional command line arguments for game config. set all or none: serverAddress, useTcp (true/false), useReliable (true/false), int intervalDispatch, intervalSend (ms), intervalMove (ms) -- Note: Realtime Demo commandline might look like this: start demo-realtime.exe localhost:5055 false true 5 25 100 -- Changed: renamed GetLocalMsTimestamp property to LocalMsTimestampDelegate (it does not have a getter, despite the old name's implication) -- Added: PhotonPeer.LocalTimeInMilliSeconds property to use the timestamp delegate to get the current client milliseconds (by default this is Environment.TickCount) -- Changed: UDP: The default value for PhotonPeer.RoundTripTime (300ms, used before connecting) is now replaced with the turnaround time of connect. This should lead to accurate RTT values much sooner -- Changed: PhotonPeer.ServerTimeInMilliSeconds is no longer updated all the time. Instead it's fetched soon after connect (when initialization won't affect rountrips anymore) and extrapolated. It should be better to be off by a constant value than by a changing value -- Changed: PhotonPeer.ServerTimeInMilliSeconds now returns 0 until the server's timestamp is fetched. Updated the documentation with some internals for this. -- Added: PhotonPeer.FetchServerTimestamp() to send the time fetch command (this is done automatically as well. this method is here for completeness) -- Fixed: roundtrip time calculation is no longer affected by long intervals between Service() or DispatchIncomingCommands() calls (bug of v5.9.0, caused by internal action queues) -- Added: internally for UDP, we use a new command to fetch the timestamp which minimizes the latency for that roundtrip. this one is excluded in roundtrip time measuring -- Changed: internal: ACKs by the server are again directly executed (other commands which are put into the action queue and dispatched) -- Fixed: Peers with TCP as protocol will no longer try to disconnect while not being connected (does not do anything of disconnected or disconnecting) -- Changed: Peers with TCP as protocol will clear the outgoing queue when disconnect() is called (while connected. see fix above) -- Updated: Silverlight Realtime Demo slightly -- Added: PhotonPeer.Listener property to give subclasses access to the IPhotonPeerListener (set in constructor). Can be useful to call Listener.DebugReturn() -- Added: LitePeer-Source.cs to demo-realtime. This is the source of a LitePeer and could be used as sample to create custom operations on the client side - -*** Version 5.9.0 -- Release: of changes in 5.7.6 and 5.7.5 - -*** Version 5.7.6 -- Fixed: a debug output line for TCP connections which did not heed the debug-level. -- Changed: PhotonPeer uses less locking internally and will handle incoming data in the game thread (inside DispatchIncomingCommands() or Service()). -- Changed: Internally, all commands are put into a (locked) queue which is processed within DispatchIncomingCommands(). Your dispatch interval affects local lag but not the PhotonPeer.RoundTripTime value. -- Note: Don't use a peer from multiple threads! It's not thread safe. All callbacks to IPhotonPeerListener methods are happening in your game thread (again: inside DispatchIncomingCommands()). -- Changed: removed locks inside the callbacks (according to above change). -- Changed: DNS resolution is now done in Connect() unless you provide a valid IP address (if IPAddress.Parse(address) is successful, the IP is used directly). -- Fixed: PhotonPeer.Connect() should fail if the IP is unknown or unavailable. Exception: using a localhost might succeed but fail when we try to receive anything. -- Updated: Game.cs now initialized the timing intervals. This avoids issues if the client system is having a negative TickCount. -- Added: ServerAddress property to PhotonPeer, which might help while developing with several servers and peers. -- Changed: This version includes GetLocalMsTimestampDelegate and the PhotonPeer property GetLocalMsTimestamp to set the delegate for local timestamp. - -*** Version 5.7.5 -- Changed: All precompiled demos now connect to localhost! From now on, you need to run Photon before trying any of the demos (as we don't guarantee that udp.exitgames.com is online anyways) -- Changed: OpCustom() now accepts null as parameter Hashtable, which is a shortcut to "no parameters" for simple operations (an empty hashtable is sent though, it does not reduce bandwidth) -- Added: new feature: UDP timeout definition by setting PhotonPeer.DisconnectTimeout (individual per command, set in milliseconds, checked when a command is repeated) -- Renamed: enum ReturnCode to StatusCode. The StatusCode values are only used for status callbacks (not as operation results) -- Changed: parameter type of PeerStatusCallback() from int to StatusCode (to differentiate them from operation ReturnCodes, which are customizable) -- Removed: StatusCode.Ok (as it was actually an Operation ReturnCode) -- Added: new StatusCallback value: StatusCode.SendError. Used for sending error cases: "not connected" and "channel not available" -- Changed: sendOperation() (Udp and Tcp) does not throw an exception while disconnected or for wrong channel (using StatusCode.SendError instead) -- Changed: callback DebugReturn() now has the additional parameter (DebugLevel)level, analog to logging -- Changed: UDP connection is disconnected when a read exception happens (before we tried to read despite this until a timeout ended it) -- Changed: EnetPeer.Disconnect() now ignores calls when peer is disconnected or disconnecting already -- Fixed: TCP code tried to detect socket issues by checking for IOExceptions but now checks SocketException instead -- Changed: internal threading: Callbacks due to incoming packages and commands are now queued and triggered by dispatch (in game loop) -- Changed: dispatch of action-queue as added to DispatchIncomingCommands (in EnetPeer and TPeer) -- Changed: internally, there is no locking for outgoing reliable and unreliable command lists anymore -- Changed: Realtime Demo timer usage to avoid nullref on form-close -- Changed: Realtime Demo propety isReliable is now in the Player class -- Changed: Game.cs and Player.cs for all realtime demos. There is now something like a gameloop (Update()) which must be called regularly and makes (pretty) sure just one thread accesses the peer -- Changed: all realtime demos to use the new Update() method and use more similar Game and Player classes (cleanup for less differences) -- Fixed: RoundtripTimeVariance is now also reset on connect / init, so the resend-timing of reliable udp does not suffer when a peer connects after a disconnect -- Fixed: typo in ExitGames.Client.Photon.StatusCode.QueueIncomingUnreliableWarning (was QueueIncomingUneliableWarning) - -*** Version 5.7.4 RC3 -- Changed: Unity3D lib again has it's own UDP handling (the DotNet one causes browser crashes on web-player exit) - -*** Version 5.7.3 RC3 -- Changed: Unity3D lib is now identical to DotNet lib (Unity iPhone is compatible with DotNet 2.0 now and this got tested) -- Fixed: DNS resolution (did not work for "localhost", which gave two results (IPv4 and IPv6), mixing up things - -*** Version 5.7.2 RC3 -- Changed: Unity3D lib: the receive thread will now receive until no data is available, then sleep 5ms and check again -- Changed: serverTime is now a signed int (as on server) and adds averaged rountripTime/2 when it gets an update -- Changed: ServerTimeInMilliSeconds doc (more concrete, explains how server time works) -- Added: support for serverTime, RountripTime and RoundtripTimeVariance when using TCP (Silverlight does not allow UDP) -- Added: Silverlight supports either URL:Port and IP:Port as server url string - -*** Version 5.7.1 RC2 -- Added: DotNet "Lobby Demo" which uses the "LiteLobby" application of the server SDK to show running games and their player-count -- Changed: the realtime demos to use the more similar Game and Player classes - -*** Version 5.7.0 RC1 -- Added: documentation: project for Silverlight Hashtable and ArrayList substitutes. -- Changed: RealtimeDemo uses same classes Game and Player for Unity3 + Silverlight -- Changed: Silverlight: Hashtable and ArrayList are now a separate project / lib -- Internal: Silverlight: listener interfaces (Photon and Neutron) now conditionally use ExitGames.Client datatypes from lib -- Changed: Photon: connect callback is now deferred to on-init-response (instead of enet-connect) which ensures "no ops before init" -- Changed: Unity Realtime demo: using game and player classes merged over from silverlight and re-wrote sample code to display players -- Internal: photon projects now have a pre-compile setting "Photon" -- Changed: SupportClass Namespace is now compiling into either ExitGames.Client .Photon or .Neutron (to avoid ambiguation) -- Added: LitePeer as Lite Application specific peer (with OpJoin and the rest) -- Changed: demos accordingly -- Changed: case of PhotonPeer methods to first-letter-is-uppercase (as usual in C#) -- Removed: nNet-prefix (Connect and Disconnect are self-explanatory) -- Renamed: PropertyTypes are now LitePropertyTypes (as they belong to the Lite application) -- Changed: Peer state constants with PS_* converted into enum "PeerStateValue" -- Removed: URL_RT_SERVER, URL_RT_SERVER_DEV, IP_RT_SERVER and IP_RT_SERVER_DEV -- Added: PhotonDemoServerUrlPort and PhotonDemoServerIpPort -- Renamed: NPeer to PhotonPeer -- Renamed: PhotonPeerListener to IPhotonListener (class and file) -- Changed: namespace from Com.ExitGames to ExitGames and ExitGames.Client, ExitGames.Client.Photon and ExitGames.Client.Neutron -- Removed: QueueOutgoingUnreliableError, QueueOutgoingAcksError, QueueIncomingReliableError, QueueIncomingUneliableError, QueueSentError (no errors, only warnings) -- Removed: error "report" when TCP incoming queue getts fuller -- Internal: updates Neutron part to run with Protocol.cs de/serialization (added a serializeParametersNeutron() as there are multiple differences to UDP part) -- Changed: projects and scripts to build documentation xml in debug builds -- Renamed: demo-photon-SL to demo-realtime-SL (according to other demo realtime implementations) -- Changed: many classes and properties are now internal. e.g. Protocol, EnetChannel, EnetPeer (and inner classes), TPeer, SuppportClass.ReadInput() -- Updated: AssemblyInfo.cs for photon dotnet and silverlight -- Internal: projects to have precompile-flags also in release builds -- Updated: build scripts for SDK building -- Removed: Compact Framework support - -*** Version 5.6.1 -- Fixed: 0 element arrays caused bugs -- Fixed: double type was cast incorrectly after being read - -*** Version 5.6.0 -- Added: more supported datatypes: float, double and arrays of all basic datatypes (no arrays of hashtable or arrays) -- Internal: changed Photon protocol internally to 1.5. (needs a server update to Photon Server SDK 1.6.1+)! -- Changed: Channels for Photon UDP are now priorized (from low to high) getting the lower channels out first -- Internal: switched de/serialization at several places from manual shifting to a support function, which should provide endian-correctness (Photon Unity PPC compatibility) -- Added: Unity info about "Application.runInBackground = true;" to Unity Appendix in doc -- Changed: Photon return values are put into a NEW hashtable on receive. not just a cleared one which was not reference-safe (no more need to deep-copy the data of events) -- Added: Photon support for "disconnect-reason" which is sent by server in the enet "reserved" byte -- Added: Photon ReturnCode.DisconnectByServerUserLimit and .DisconnectByServerLogic -- Removed: NPeer.IncomingReliableCommands (was more or less useless) -- Added: QueuedIncomingCommands and QueuedOutgoingCommands as metric for how effective send and dispatch is done -- Changed: now throwing exceptions when trying to set init-values at runtime (to be fixed at development-time) -- Added: doc for sequencing and updated channel doc, (too) short chapter on custom operations, topic "opCodes: byte versus short", doc for property-related functions -- Added: overloaded functions for opGetProperties*() for byte-keys -- Fixed: Realtime Demo keypress in input-fields have been used as in-game actions, too -- Changed: Realtime Demo game-name is now that of the native samples ("play" with other platform SDKs) -- Changed: Silverlight SDK has a different port in the constants NPeer.URL_RT_SERVER* and .IP_RT_SERVER* (as Silverlight uses TCP port 4350) - -*** Version 5.4.1 -- Added: missing documentation in Unity3d SDK - -*** Version 5.4.0 -- Change: The timespan until a sent and unacknowledged reliable command is considered lost, is now calculated by - current roundTripTime + 4 * roundTripTimeVariance - The result of this calculation is doubled with every following resend. The maximum number of retries can still be defined by calling SetSentCountAllowance. -- Change: Removed TimeAllowanceInt -- Change: removed surplus debug out, adjusted levels for other, output of command sent-time from hex to decimal -- Added: fragmentation support: bigger data is now placed into multiple packages and reassembled -- Internal: command-buffers are replaced with CommandList and SortedCommandList (major change, but fully internal) -- Fixed: possibility of command buffer overflow. now everything is stored and warnings are used as hint for temporary problems -- Added: property NPeer.IncomingReliableCommands, which returns the count of reliable commands currently queued -- Added: callback on NCommand.CT_DISCONNECT to inform the NPeerListener about a disconnect from server (see above) -- Added: disconnect command will be sent by server in case of timeout, connection-limitations or other issues -- Added: NPeer ReturnCode.DisconnectByServer is called on server-side disconnect (see description) -- Added: call to StopConnection() on disconnect (by server) -- Added: NPeer.PeerID property to get ENet's peerID (useful while debugging) -- Internal: SupportClass.WriteIntToByteArray() to ease writing ints to byte[] -- Internal: added several values to NCommand to store fragments -- Added: support for channels. read more about this in the documentation -- Added: NPeer.ChannelCount which sets the number of channels while not connected (default: 2) -- Changed: opRaiseEvent() and opCustom() now optionally have a channel parameter -- Added: Photon properties functions to NPeer (available with Photon Server SDK v1.5.0) and doc -- Added: LiteEventKey.SetProperties = 92 for broadcasted property set -- Added: LiteOpKey.Broadcast = 13 and .Properties = 12 -- Added: LiteEventKey.TargetActorNr = 10 (actorNr the properties are attached to) and .Properties = 12 (changed properties) - - -*** Version 5.3.11 -- Change: all bytes sent to and from server are treated as unsigned bytes (standard for c#). same for byte-arrays -- Change: updated realtime demo to use int for posx,posy but still sending just a byte-value (the field is 16x16, after all) - -*** Version 5.3.10 -- Change: switched from sbyte-array to byte-array in de/serialization! important: bytes (ev-keys etc) are sbyte. arrays of bytes are unsigned (on client and server) -- Change: NeutronListener functions getShadowReturn() and HasbadwordsReturn() now have byte-array return values. please adjust, even if you don't use those -- Internal: changed SupportClass for Compact Framework -- Internal: getting ticks sitched from expensive "System.DateTime.Now.Ticks / 10000" to cheap "Environment.TickCount" -- Change: Unity lib will now give more debug out if serialisation fails - -*** Version 5.3.9 -- Fixed: result-queue, timeouts and customOps work also fine for Unity build again (were broken due to Neutron Unity webplayer compatibility changes in 5.3.8 for Unity) -- Fixed: if the browser is closed and the unity webplayer immediatly can't use http anymore, Neutron now informs the application via NetworkStatusReturn() - -*** Version 5.3.8 -- Fixed: Neutron Unity now also works fine in webplayer -> Neutron and Photon now both support all platforms of Unity und Unity iPhone -- Fixed: default value for parameter encrypt of NeutronGame::RaiseEvent() now is false like for all other RaiseEvent methods and like on all other platforms, instead of true, as it was before - -*** Version 5.3.7 -- Fixed: .Net UDP issue, where standard MTU settings caused dropped UDP packages -- Internal: refactored ACK queue to arraylist - -*** Version 5.3.6 -- Fixed: NPeer issue with ACKs for repeated commands. this enhances handling of lost packages -- Changed: NPeer.opJoin() no longer needs the SID - -*** Version 5.3.5 -- Known issues: to use Photon on iPhone device, you do need Unity iPhone 1.0.2b1 or higher (current official release is 1.0.1, so please ask for a prerelease or wait until next official release), but of course you can use Photon with Unity iPhone 1.0.1 IDE -- Merged: renamed .NET 1.1 NeutronUnity3DiPhone into NeutronUnity3D to replace the old .NET 2.0 lib of that name, which means, that you can use the same .NET 1.1 based lib for Unity and for Unity iPhone now, since 1.1 cpmpatibility fixes are all done now -- Fixed: photon is fully compatible to .NET 1.1 now -- Internal: optimized UDP package size in Unity3D library (was sending surplus bytes, which were ignored) -- Fixed: NPeer.opCustom() now sends the operation given by parameter -- Changed: IP_RT_SERVER points to new server IP of udp.exitgames.com -- Changed: a new NeutronSession now clears the NetworkLoss state and the sendQueue -- Changed: timeout of a HTTP request to 10 seconds. it triggers - -*** Version 5.3.4 -- Added: prealpha Unity3DiPhone version of Neutron .NET: core lib already functional, but realtime part not usable on device yet -- Internal: there are 4 different versions of Neutron.NET now: - - Full .NET: .NET 2.0 based, with asnyc realtime part - - Compact Framework: .NET 2.0 based, with threaded realtime part - - Unity3D: .NET 2.0 based, with Unity www-class based http part and threaded realtime part - - Unity3DiPhone: .NET 1.1 based, with Unity www-class based http part and threaded realtime part - -*** Version 5.3.3 -- New: ReturnCode.RC_RT_EXCEPTION_CONNECT, which covers the cases where a server is not running -- New: NPeer can now be created with UDP or TCP (by new bool parameter) -- Change: renamed most of the constants for NPeer (in INPeerListener structs) -- Note: TCP does not offer ServerTime or RoundTripTime jet - -*** Version 5.3.2 -- Internal: reverted to threaded model in NConnect (as async UDP is not supported by Unity3D) - -*** Version 5.3.1 -- New: login(), register(), customOperation() and raiseEvent() (all variants) can be encrypted with additional parameter "encrypt" (overloaded function) -- New: encryption uses HTTPs as transfer, by changing the "http:" url to a "https:" url -- New: returnCode for failure of encrypted HTTPs requests: RC_SSL_AUTHENTICATION_FAILED (if certificate is not found, valid or expired) -- Fixed: Realtime Demo using the older Realtime Server - -*** Version 5.3.0 -- New: separated libraries into "Compact Framework" (CF) and "Regular Framework" (no name postfix) -- Change: libraries are now in "libs" folder as debug/release and in libs/CompactFramework debug/release -- Change: libs default URL set to EU/Test. use setServerURL() with Neutron.URL_NEUTRON_* for other Neutron instances -- Internal: lib now uses async UDP communication now with "regular" framework -- Added: properties serverTimeInMilliSeconds, serverTimeAsTimeSpan and serverTimeAsDateTime for getting the current server time -- Removed: serverTimeOffset is now internal only and removed from the API (was only needed to calculate the servertime by yourself, before neutron could do this for you) -- Change: debug out for realtime classes is now layered -- Change: debug level NPeer.DebugOut is now a NPeer.DebugLevel enum and will include all lower levels in output, default: DebugLevel.ERROR -- Fixed: size of realtime demo board -- Change: NPeer constructor now always throws an exception if listener is null -- Change: EventAction() parameter eventCode is now of type sbyte (was int), which corresponds to type of RaiseEvent (and server-side used type) -- Internal: NPeer.opRaiseEvent() now treats eventCode as parameter of operation RaiseEvent (as changed in latest RT server) -- Change: NPeer has its own listener (INPeerListener) and several (better named) structs for the constants used with NPeer / realtime -- Added: LiteOpKey and LiteOpKey.ActorNumber to have a constant for the only OP key of interest -- Change: EventAction() always returns the complete event, which contains a code, the ActorNumber (if any given) and data from raiseEvent (see below) -- Change: in custom events, the data from opRaiseEvent() is in placed as value of key: LiteEventKey.EV_RT_KEY_DATA. to get the data use: Hashtable data = (Hashtable)neutronEvent[LiteEventKey.EV_RT_KEY_DATA]; - -*** Version 5.2.0 -- changed library filename to neutron-lib__.dll with server "test" and "run" (no debug out) and billing "dummy" and "none" -- removed US build of library. please use NeutronSession.SetServerUrl() and the constants: Neutron.URL_NEUTRON_SERVER_*. - -*** Version 5.1.0 -- added realtime classes to DotNet library: ported NPeer (and internal: NCommand and NConnect) classes -- added nPeerReturn() to NeutronListener interface -- added constants for realtime returnCodes (RC_RT_*): RC_RT_CONNECT, RC_RT_DISCONNECT and RC_RT_EXCEPTION -- added constants for realtime eventCodes (EV_RT_*) -- added constants for Neutron servers to Neutron class: URL_NEUTRON_* -- added Reamtime Demo -- updated samples -- added test for UDP to NUnit - -*** Version 5.0.1 -- New: operation Spectate (including new SpectateReturn) to get events from any game (as admin) -- New: SetServerUrl and SetCustomServerUrl now return the URL to debugReturn -- Internal: constant "DEBUG_- InternalS" to be used for intern debugging output - -*** Version 5.0.0 -- New: hasBadwords() as OP and return. Server side check of strings for badwords - -*** Version 5.0.0 RC3 -- Internal: changed constant values: EV_KEY_PROPERTIES = "Data", EV_KEY_REVISION = "Rev" -- New: EV_KEY_CHANNELTYPE for channel-type in property-change events -- New: constants for default channels, CHANNEL_APPLICATION_LONGLIFE, CHANNEL_ACTOR_SHORTLIFE, CHANNEL_ACTOR_LONGLIFE and CHANNEL_APPINSTANCE -- Change: operations that fail due to missing moderation-rights now return RC_MODERATION_DENIED instead of RC_COMMAND_ACCESS_DENIED -- Change: actor-properties can no longer be broadcasted in any way - removed "broadcast" parameter from setActorProperties() -- Change: properties now have a revision which is increased on each change. this way outdated updates might be skipped -- Change: parameters of GetPropertiesReturn(). property-type is replaced by channel. added revision -- Change: EV_PROPERTIES_CHANGE now has a key EV_KEY_OWNERNR if it's a "player property" (the key is missing if it's a game-property) -- Internal: changed setProperties and getProperties to new operation-codes using different parameters (with similar results) -- New: parameter "textMessage" for NeutronGame.invite() adds personal message to invited players (in EV_INV and gameListInvitations()) -- New: key EV_KEY_INFO will be added to EV_INV if "textMessage" was used in NeutronGame.invite() (it's not there otherwise) -- New: gameListInvitations() has new value parameter {t} to get "textMessage" from NeutronGame.invite() -- New: RC_APPINSTANCE_NOT_OPEN is now used for "singleton namebased pools" where a game is full (not able to join / instanciate) -- New: gameCreate() with invitations will fail if the chosen game-name is already taken in a "singleton namebased pool" -- New: RC_APPINSTANCE_ALREADY_EXISTS for the case above - -*** Version 5.0.0 RC2 -- Change: gameCreateReturn() now returns RC_APPINSTANCE_NOT_OPEN (instead of RC_AI_TOO_MANY_ACTORSESSIONS) for full games in "singleton" pools -- Change: obsolete events EV_TURN, EV_TXTMSG and EV_DATA which could be sent by raiseEvent*() and still handled -- Change: switched Neutron URLs to "[..].neutron5.[..]" for test/run libs -- Fix: Polling (getEvents operation) again calls sendGameDataReturn() for all errors (as intended for v4.9.2 already) -- New: constant NeutronListener.EV_KEY_TYPE as part of event EV_BUDDNOTICE - -*** Version 5.0.0 RC1 -- New: RaiseEvent (all functions of this name) now has a "filter" parameter. If filter is true, all String-typed values in an event are badword filtered -- Change: signature of NeutronGame.raiseEvent(), NeutronGame.raiseEventInChannel(), NeutronSession.raiseEventInChannel(), NeutronSession.raiseEventForActor() start with: byte eventCode, Hashtable event, boolean filter -- Change: signature of NeutronSession.raiseEventForActor() is changed to "byte eventCode, Hashtable eventData, boolean filter, String userID, int minutesValid, byte maxTypeCount, byte channel" -- Change: NeutronGame.doModerate() is now isModerator() -- Change: moved GpOperation.SerializeData() and GpOperation.DeserializeData() to Neutron.SerializeData() and Neutron.DeserializeData(). -- New: errorCode RC_INVALID_TARGET and RC_PARAMETER_NOT_SUPPLIED added as constant. - -*** Version 4.9.3 -- New: Errors constants in NeutronListener: RC_FATAL_LOGIC, RC_MATCHMAKING_NOT_COMPLETED, RC_CHANNEL_ACCESS_VIOLATION -- New: for game-creation you can now reserve "spots", which are not filled up by Neutron matchmaking. players can be invited to fill the spots, or they can be deblocked later on -- New: Parameter reservedSpots in NeutronSession.gameCreate() -- New: NeutronGame.setReservedSpots() to modify the number of reserved slots (to make them available to matchmaking again, or block/reserve them) -- New: event EV_RESERVED_SPOTS will update the NeutronGame.reservedSpots value after a call to NeutronGame.setReservedSpots() -- New: NeutronSession.listBannedPlayers() gives you the list of banned players for a known game - only usable by "admin" users -- New: NeutronSession.unbanPlayer() is a modified "kick" operation which allows the respective user to join a certain game again - only usable by "admin" users -- New: the event invitation includes now the game's name (in the new key EV_KEY_NAME) -- New: NeutronSession.gameListPerPool() has now three options to sort the results: by game-name, player-count or "persistent games first" -- Removed: NeutronGame: handoverTurn(), sendData(), sendTextMsg(), getEventHistory() and getEventHistoryReturn(). Obsolete events: EV_TURN, EV_TXTMSG, EV_DATA. Session: getScorePosition()+getScorePositionReturn() -- Update: release_history.txt was updated from v4.0. All changes up to v4.0.4 are added to v4.9.3 - -*** Version 4.9.2 -- New: Players can be admins (by list of logins on server) or moderator (by being the first active player of a game) -- New: Players may request and become moderator for game: NeutronSession.gameCanModerate(boolean), NeutronSession.canModerate, NeutronGame.doModerate() and NeutronGame.moderatorActorNr -- Change: the new value NeutronSession.canModerate will be sent with gameCreate() operations (if set to true) -- New: Event key NeutronListener.EV_KEY_MODERATOR to get moderator's actorNr from events -- Change: EV_QUIT and EV_KICKED now carry the new key EV_KEY_MODERATOR which tells all players who is the current moderator (by actorNr); this is stored into NeutronGame.moderatorActorNr -- New: Players in NeutronGame can have new state PLAYER_KICKED (player-data is updated with EV_KICKED) -- New: NeutronGame.kickPlayer() (for moderators) and NeutronSession.kickPlayer() (for admin's who are not active in the game to shutdown) -- New: NeutronSession.shutdownGame() can be used by admin-players (for others, this operation will fail) -- New: Namebased pools can now be defined as "singleton": only one instance per pool and name will be created; if such a game is full players get an error instead of a new game -- New: Errors constants in NeutronListener: RC_ACTORSESSION_KICKED, RC_ACTORSESSION_BANNED, RC_APPINSTANCE_CLOSED, RC_ACTORSESSION_ALREADY_JOINED -- Change: NeutronGame.raiseEvent() accepts a "targetActorNr" which defines a single player to get the raised event; leave 0 to target "all players in game" (as before) -- New: NeutronGame.quitLocally() to release a NeutronGame instance locally (without having to quit()); used after a player was kicked or game shutdown -- Update: NeutronGame.playerGetCount() is updated to simply count all active or inactive players (excluding quit and kicked ones) -- Internal: NeutronGame constructor reads new parameter: P_MODERATOR -- Change: Polling (getEvents operation) now calls sendGameDataReturn() for all errors (not just RC_ACTORSESSION_EXPIRED and RC_ACTORSESSION_NOT_FOUND); takes care of kicked/banned errors -- Fix: Fatal server errors cause a returnCode of NeutronListener.RC_OP_SERVER again; debug test-server libs print out debug text! (during development fatal errors could happen in case of not matching client/server setups) -- Change: removed (already deprecated) NeutronListener.gameListPerPoolReturn() -- Change / Internal: canModerate is sent as Byte (not bool) as in definition; Code: if ( canModerate ) op.addParameter(Neutron.P_MODERATOR , new Byte((byte)1)); -- Add: NeutronGame.PLAYER_KICKED is now listed in JavaDoc for NeutronGame.playerGetStatus() -- Update: JavaDoc package.html, gameCreateReturn(), gamesListReturn(), EV_DEACTIVATE, kickPlayer(), quitLocally(), RC_ACTORSESSION_KICKED, RC_ACTORSESSION_BANNED, RC_APPINSTANCE_CLOSED, RC_ACTORSESSION_ALREADY_JOINED -- Added: Event EV_STATUS (50) includes a key EV_KEY_ISADMIN if the current player has administrator rights; the value is (byte)1 in that case. The key does not exist in any other case (normal users) -- Update: JavaDoc gameCreateReturn; -- New: Added constant RC_APPINSTANCE_NOT_FOUND = 137 for shutdownGameReturn() -- Fix: serializable datatypes are now completely listed in NeutronSession JavaDoc -- New: Constant for property-change events: EV_PROPERTIES_CHANGE including new keys: EV_KEY_PROPERTY_TYPE, EV_KEY_PROPERTIES, EV_KEY_ISDIFF -- Update: JavaDoc for properties in NeutronSession - -*** Version 4.1.1 -- Fix: gameListPerPool() defaults to 10 games and no offset if the values are less than 1 -- Fix: gamesListReturn() JavaDoc description for "listType" is now: 0 = open games; 1 = invitations; 2 = pool's open games list -- Update: gameListPerPool() sends "{gn}" as values-parameter if it's null -- Update: getPropertiesReturn() gets new parameters: actorNr, userID. These are optional and are available in certain situations only. See JavaDoc -- Update: gameListPerPoolReturn() is now deprecated and merged into gamesListReturn() which in turn got a "type" to identify the list-type -- New: getListBuddyIgnore() got one more value: 't'. This requests the type of relation to users. useful when getting lists of type "both". this is buddies and ignores. -- Change: renamed returned parameters to: count and countOnline. These values are referring to the number in the returned list -- Internal: parameter P_USERID = 85; used in getProperties -- New: made methods nullpointer resistant: getListBuddyIgnore, buddySet, get/set PlayerProperties, get/set ActorProperties, get/set GameProperties; some methods throw exceptions in debug version - -*** Version 4.1.0 -- New: Properties. NeutronSession: setActorProperties(), getActorProperties(). NeutronGame: setLocalPlayerProperties(), getPlayerProperties(), getGameProperties(), setGameProperties() -- New: Buddylist and Ignorelist in NeutronSession: listBuddies(), listIgnored(), getListBuddyIgnore(), buddySet() -- New: Listing of games per pool in NeutronSession: NeutronSession gameListPerPool() -- New: Games with password (only usable for named games) -- Internal: Changed parameter in buddySet from P_STATUS to P_TYPE - -*** Version 4.0.4 -- Change: NeutronGame.handoverTurn() and NeutronGame.sendData() are now getting a Hashtable parameter instead of Object -- New: RC_ACTORSESSION_BUSY (121) constant to help identify common development error! check in gameCreateReturn() - -*** Version 4.0.3 -- New: RC_INVALID_CONNECTIONSTRING (74) constant to help identify a common error! check in loginReturn() -- Update: list of serializable datatypes in NeutronSession JavaDoc -- Fix: Fatal server errors cause a returnCode of NeutronListener.RC_OP_SERVER again; debug test-server libs print out debug text! (during development fatal errors could happen in case of not matching client/server setups) - -*** Version 4.0.2 -- Internal: Neutron.deserializeData() now returns either the P_DATA part of the deserialized data (if available / serialized by serializeData()) or the resulting hashtable itself - -*** Version 4.0.1 -- New: NConnectSE connects to server defined by parameter: ipPort (before: fixed host) -- New: SE version is now completely independent from Java ME classes (were not used, but had to be present) -- Fix: Changed versioning for "ClientLibVersion" in Login/CC -*** Version 4.0.0.0 - -- Removed methods: - - NeutronSession.BuggyGetList - replaced by new GetListBuddyIgnore method; - - NeutronSession.ReSubscribe; - - NeutrinSession.ConfirmBilling; - - NeutronListener.ResubscribeReturn; - -- Added methods: - - NeutronSession.GameCreateNamed with password parameter; - - NeutronSession.GameListPerPool; - - NeutronSession.GetActorProperties; - - NeutronSession.SetActorProperties; - - NeutronSession.GetListBuddyIgnore - replaces removed BuggyGetList; - - NeutronSession.ListBuddies; - - NeutronSession.ListIgnore; - - NeutronSession.BillingInitPayment; - - NeutronSession.BillingProcessPayment; - - NeutronGame.Invite; - - NeutronGame.GetGameProperties; - - NeutronGame.SetGameProperties; - - NeutronGame.GetPlayerProperties; - - NeutronGame.SetLocatPlayerProperties; - - NeutronListener.GameInviteReturn; - - NeutronListener.GetPropertiesReturn; - - NeutronListener.SetPropertiesReturn; - -- Changed argument list: - - NeutronSession.GameCreate - added password parameter; - - NeutronListener.GamesListReturn added listType parameter; - - NeutronListener.BuddyGetListReturn all buddy related info now in passing in one strings array parrameter; - - NeutronListener.BuddySetReturn added type parameter; - - NeutronListener.BillingInitPaymentReturn; - - -- added constants: - - OPC_INVITE - - OPC_TELLAFRIEND - - OPC_LISTGAMES - - OPC_SETPROPERTIES - - OPC_GETPROPERTIES - - P_USERID - - P_RESERVE - - P_RESULT - - P_PROPERTIES - - P_BROADCAST - - P_ISDIFF - - RCB_CHARGING_ERROR - - RCB_POST_CHARGING_ERROR - - RCB_TIMEOUT - - RCB_PRICE_- Changed - - RCB_PRICE_INVALID - - RCB_FATAL_SERVER_ERROR - - RCB_FATAL_LOGIC_ERROR - - RCB_NOT_INCLUDED - - RCB_WMA_UNAVAILABLE - -*** Version 3.0.2.2 -- CLS-specifications largely corrected - -*** Version 3.0.1.1 -- changes in neutron-java-lib integrated - -*** -- Removed: NeutronGame: playerNames, playerIDs, playerLobbies, playerStats -- Change: removed GpOperation.roundtripTime, now using public Neutron.roundtripTime - to be sent in operation headers (GpOperation.serializeParameters(), internal) -- Change: channelRaiseEvent() is now raiseEventInChannel() and gets the eventCode - as seperate parameter value - analog to raiseEventForActor() -- Fix: renamed EV_KEY_M_MIPLAYERS to EV_KEY_M_MINPLAYERS (number of min players of game, before start) -- Fix: values for EV_KEY_M_MINPLAYERS and EV_KEY_M_MAXPLAYERS corrected (wrong case so far) -- Changed: Neutron.millisecondsToWait (current value of polling-interval) is now - set in Neutron.receiveResponse() for login, register and alike diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/changes-library.txt.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/changes-library.txt.meta deleted file mode 100644 index a6c47ecfb..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/changes-library.txt.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: d8040d310df77714a90a561261bfb2cb -timeCreated: 1557919981 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/netstandard2.0.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/netstandard2.0.meta deleted file mode 100644 index c52d13319..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/netstandard2.0.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: beb9d2a25c882b54ab2fd9adaec2b53c -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/netstandard2.0/Photon3Unity3D.deps.json b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/netstandard2.0/Photon3Unity3D.deps.json deleted file mode 100644 index 1d5beb0b8..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/netstandard2.0/Photon3Unity3D.deps.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "runtimeTarget": { - "name": ".NETStandard,Version=v2.0/", - "signature": "" - }, - "compilationOptions": {}, - "targets": { - ".NETStandard,Version=v2.0": {}, - ".NETStandard,Version=v2.0/": { - "Photon3Unity3D/4.1.4.8": { - "dependencies": { - "NETStandard.Library": "2.0.3" - }, - "runtime": { - "Photon3Unity3D.dll": {} - } - }, - "Microsoft.NETCore.Platforms/1.1.0": {}, - "NETStandard.Library/2.0.3": { - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0" - } - } - } - }, - "libraries": { - "Photon3Unity3D/4.1.4.8": { - "type": "project", - "serviceable": false, - "sha512": "" - }, - "Microsoft.NETCore.Platforms/1.1.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==", - "path": "microsoft.netcore.platforms/1.1.0", - "hashPath": "microsoft.netcore.platforms.1.1.0.nupkg.sha512" - }, - "NETStandard.Library/2.0.3": { - "type": "package", - "serviceable": true, - "sha512": "sha512-st47PosZSHrjECdjeIzZQbzivYBJFv6P2nv4cj2ypdI204DO+vZ7l5raGMiX4eXMJ53RfOIg+/s4DHVZ54Nu2A==", - "path": "netstandard.library/2.0.3", - "hashPath": "netstandard.library.2.0.3.nupkg.sha512" - } - } -} \ No newline at end of file diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/netstandard2.0/Photon3Unity3D.deps.json.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/netstandard2.0/Photon3Unity3D.deps.json.meta deleted file mode 100644 index c26136a58..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/netstandard2.0/Photon3Unity3D.deps.json.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: a966b98b651e18748abf2829786b5899 -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/netstandard2.0/Photon3Unity3D.dll b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/netstandard2.0/Photon3Unity3D.dll deleted file mode 100644 index 23b42d993..000000000 Binary files a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/netstandard2.0/Photon3Unity3D.dll and /dev/null differ diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/netstandard2.0/Photon3Unity3D.dll.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/netstandard2.0/Photon3Unity3D.dll.meta deleted file mode 100644 index 394e4053e..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/netstandard2.0/Photon3Unity3D.dll.meta +++ /dev/null @@ -1,100 +0,0 @@ -fileFormatVersion: 2 -guid: 6a558ae793155af4b9b9ab945fc64a0f -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - isPreloaded: 0 - isOverridable: 0 - platformData: - - first: - '': Any - second: - enabled: 0 - settings: - Exclude Android: 1 - Exclude Editor: 1 - Exclude Linux: 1 - Exclude Linux64: 1 - Exclude LinuxUniversal: 1 - Exclude OSXUniversal: 1 - Exclude WebGL: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Android: Android - second: - enabled: 0 - settings: - CPU: ARMv7 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 0 - settings: - CPU: AnyCPU - DefaultValueInitialized: true - OS: AnyOS - - first: - Facebook: Win - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Facebook: Win64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Linux - second: - enabled: 0 - settings: - CPU: x86 - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: x86_64 - - first: - Standalone: LinuxUniversal - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: OSXUniversal - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Windows Store Apps: WindowsStoreApps - second: - enabled: 0 - settings: - CPU: AnyCPU - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/netstandard2.0/Photon3Unity3D.xml b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/netstandard2.0/Photon3Unity3D.xml deleted file mode 100644 index b66400d7a..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/netstandard2.0/Photon3Unity3D.xml +++ /dev/null @@ -1,2803 +0,0 @@ - - - - Photon3Unity3D - - - - - Initializes a new instance of the class. - - - - - Gets the public key that can be used by another DiffieHellmanCryptoProvider object - to generate a shared secret agreement. - - - - - Derives the shared key is generated from the secret agreement between two parties, - given a byte array that contains the second party's public key. - - - The second party's public key. - - - - Interface for Photon's DiffieHellman/Payload Encryption. - - - - Provides classical Diffie-Hellman Modular Exponentiation Groups defined by the - OAKLEY Key Determination Protocol (RFC 2412). - - - - - Gets the genrator (N) used by the the well known groups 1,2 and 5. - - - - - Gets the 768 bit prime for the well known group 1. - - - - - Gets the 1024 bit prime for the well known group 2. - - - - - Gets the 1536 bit prime for the well known group 5. - - - - A slice of memory that should be pooled and reused. Wraps a byte-array. - - This is a serializable datatype for the .Net clients. It will serialize and transfer as byte[]. - If PhotonPeer.UseByteArraySlicePoolForEvents is enabled, byte-arrays in (incoming) events will be deserialized as - ByteArraySlice. - - Adjust your OnEvent code accordingly. - - - - The buffer for the slice. - - - The position where the content starts in Buffer. - - - The length of the data in the Buffer. - - - - Internal constructor - these instances will be part of the pooling system. - - The pool to return to. - The index to return to (in the related returnPool). - - - - Create a new ByteArraySlice. The buffer supplied will be used. Usage is similar to ArraySegment. - - Not part of pooling. - - - - Creates a ByteArraySlice, which is not pooled. It has no Buffer. - - Not part of pooling. - - - - If this item was fetched from a ByteArraySlicePool, this will return it. - - - True if this was a pooled item and it successfully was returned. - If it does not belong to a pool nothing will happen, and false will be returned. - - - - Resets Count and Offset to 0 each. - - - Tiered pool for ByteArraySlices. Reduces the allocations once enough slices are available. - - - - Requests for buffers smaller than 2^minStackIndex will use 2^minStackIndex. This value avoids allocations of smaller rarely used buffers. - Set this to a lower value if you will never need sizes larger than byte[2^minStackIndex] - - - - Count of allocations this pool did. - - - Creates a new pool. - - - - Get a ByteArraySlice from pool. This overload handles user supplied byte[] and byte count and can be used as a non-boxing alternative to ArraySegment<byte>. - - - - - Get byte[] wrapper from pool. This overload accepts a bytecount and will return a wrapper with a byte[] that size or greater. - - - - - Releasing a ByteArraySlice, will put it back into the pool, if it was acquired from one. - - The ByteArraySlice to return to the pool. - True if this slice was returned to some pool. False if not. - - - - Clears all pool items with byte array sizes between lower and upper inclusively. - - - Use this if you sent some unusually large RaiseEvents and believe the buffers of that size - will not be needed again, and you would like to free up the buffer memory. - - - - - Replacement for Dictionary<K,V> which does not allocate memory during usage. - - Key type. - Value type. - - - - This is a substitute for the Hashtable class, missing in: Win8RT and Windows Phone. It uses a Dictionary<object,object> as base. - - - Please be aware that this class might act differently than the Hashtable equivalent. - As far as Photon is concerned, the substitution is sufficiently precise. - - - - - Translates the byte key into the pre-boxed byte before doing the lookup. - - - - - - - Creates a shallow copy of the Hashtable. - - - A shallow copy of a collection copies only the elements of the collection, whether they are - reference types or value types, but it does not copy the objects that the references refer - to. The references in the new collection point to the same objects that the references in - the original collection point to. - - Shallow copy of the Hashtable. - - - Interface for DatagramEncryptor implementations. - - - Initialize the encryptor. - - - Encrypt data. - - - Decrypt data. - - - Calculates the HMAC for given data. - - - Checks if the HMAC of the provided data is correct. - - - - Defines block size for encryption/decryption algorithm - - - - - Defines reusedIvBytes size for encryption/decryption algorithm - - - - - Defines HMAC size for packet authentication algorithm - - - - - Encryption/decryption algorithm implementation - - - - - Packet authentication algorithm impelmenation - - - - - Implementation of encryption for "Datagram Encryption". - - - - - Defines block size for encryption/decryption algorithm - - - - - Defines IV size for encryption/decryption algorithm - - - - - Defines HMAC size for packet authentication algorithm - - - - - Initialize - - - - - - - - Encrypts data. puts them into output buffer and prepends with IV - - - - - - - - - - - Finishes current HMAC - - - - - - Decrypts buffer containing HMAC - - encrypted data prepened by IV - offset in the buffer - len of data to decrypt - /// len of decrypted data - - - - - - Checkes wheter data have corect HMAC or not - - buffer with data and HMAC - len of data including HMAC - true if check pass, false otherwise - - - Number for reliable unsequenced commands (separate from "standard" reliable sequenced). Used to avoid duplicates. - - - The highest number of reliable unsequenced commands that arrived (and all commands before). - - - Any reliable unsequenced number that's been received, which is higher than the current highest in complete sequence (reliableUnsequencedNumbersCompletelyReceived). - - - Checks and queues incoming reliable unsequenced commands ("send" or "fragment"), if they haven't been received yet. - The command to check and queue. - True if the command is new and got queued (or could be executed/dispatched). - - - One list for all channels keeps sent commands (for re-sending). - - - One pool of ACK byte arrays ( 20 bytes each) for all channels to keep acknowledgements. - - - Gets enabled by "request" from server (not by client). - - - Initial PeerId as used in Connect command. If EnableServerTracing is false. - - - Initial PeerId to enable Photon Tracing, as used in Connect command. See: EnableServerTracing. - - - - Checks the incoming queue and Dispatches received data if possible. - - If a Dispatch happened or not, which shows if more Dispatches might be needed. - - - Gets the target size for fragments. - - Caches the result for a specific MTU value. - Fragment length is different, when datagram encryption is used (so this caches two values in fact). - - - - - - gathers acks until udp-packet is full and sends it! - - - - Queue of commands that need resending. Used instead of a method local field as optimization. - - - Queue of received commands. ReceiveIncomingCommands will queue commands, except ACKs which Execute immediately. - - - - gathers commands from all (out)queues until udp-packet is full and sends it! - - - - - Checks if any channel has a outgoing reliable command. - - True if any channel has a outgoing reliable command. False otherwise. - - - - Checks connected state and channel before operation is serialized and enqueued for sending. - - if operation could be enqueued - - - reliable-udp-level function to send some byte[] to the server via un/reliable command - only called when a custom operation should be send - the invocation ID for this operation (the payload) - - - reads incoming udp-packages to create and queue incoming commands* - - - Queues incoming commands in the correct order as either unreliable, reliable or unsequenced. - If queued or not. - - - removes commands which are acknowledged* - - - - Enumeration of situations that change the peers internal status. - Used in calls to OnStatusChanged to inform your application of various situations that might happen. - - - Most of these codes are referenced somewhere else in the documentation when they are relevant to methods. - - - - the PhotonPeer is connected.
See {@link PhotonListener#OnStatusChanged}*
-
- - the PhotonPeer just disconnected.
See {@link PhotonListener#OnStatusChanged}*
-
- - the PhotonPeer encountered an exception and will disconnect, too.
See {@link PhotonListener#OnStatusChanged}*
-
- - Exception while opening the incoming connection to the server. Followed by Disconnect. - The server could be down / not running or the client has no network or a misconfigured DNS.
See {@link PhotonListener#OnStatusChanged}*
-
- - Used on platforms that throw a security exception on connect. Unity3d does this, e.g., if a webplayer build could not fetch a policy-file from a remote server. - - - Sending command failed. Either not connected, or the requested channel is bigger than the number of initialized channels. - - - Exception, if a server cannot be connected. Followed by Disconnect. - Most likely, the server is not responding. Ask user to try again later. - - - Disconnection due to a timeout (client did no longer receive ACKs from server). Followed by Disconnect. - - - Timeout disconnect by server. The server didn't receive necessary ACKs in time. Followed by Disconnect. - - - Disconnect by server due to concurrent user limit reached (received a disconnect command). - - - (1043) Disconnect by server due to server's logic. Followed by Disconnect. - - - Disconnect by server due to unspecified reason. Followed by Disconnect. - - - (1048) Value for OnStatusChanged()-call, when the encryption-setup for secure communication finished successfully. - - - (1049) Value for OnStatusChanged()-call, when the encryption-setup failed for some reason. Check debug logs. - - - - Callback interface for the Photon client side. Must be provided to a new PhotonPeer in its constructor. - - - These methods are used by your PhotonPeer instance to keep your app updated. Read each method's - description and check out the samples to see how to use them. - - - - - Provides textual descriptions for various error conditions and noteworthy situations. - In cases where the application needs to react, a call to OnStatusChanged is used. - OnStatusChanged gives "feedback" to the game, DebugReturn provies human readable messages - on the background. - - - All debug output of the library will be reported through this method. Print it or put it in a - buffer to use it on-screen. Use PhotonPeer.DebugOut to select how verbose the output is. - - DebugLevel (severity) of the message. - Debug text. Print to System.Console or screen. - - - - Callback method which gives you (async) responses for called operations. - - - Similar to method-calling, operations can have a result. - Because operation-calls are non-blocking and executed on the server, responses are provided - after a roundtrip as call to this method. - - Example: Trying to create a room usually succeeds but can fail if the room's name is already - in use (room names are their IDs). - - This method is used as general callback for all operations. Each response corresponds to a certain - "type" of operation by its OperationCode. - - - - When you join a room, the server will assign a consecutive number to each client: the - "actorNr" or "player number". This is sent back in the operation result. - - Fetch your actorNr of a Join response like this: - int actorNr = (int)operationResponse[(byte)OperationCode.ActorNr]; - - The response to an operation\-call. - - - - OnStatusChanged is called to let the game know when asynchronous actions finished or when errors happen. - - - Not all of the many StatusCode values will apply to your game. Example: If you don't use encryption, - the respective status changes are never made. - - The values are all part of the StatusCode enumeration and described value-by-value. - - A code to identify the situation. - - - - Called whenever an event from the Photon Server is dispatched. - - - Events are used for communication between clients and allow the server to update clients anytime. - The creation of an event is often triggered by an operation (called by this client or an other). - - Each event carries a Code plus optional content in its Parameters. - Your application should identify which content to expect by the event's Code. - - Events can be defined and modified server-side. - - If you use the LoadBalancing api as basis, several events like EvJoin and EvLeave are pre-defined. - The LoadBalancing api provides the EventCode and ParameterCode classes for pre-defined events. - - Photon also allows you to come up with custom events on the fly, purely client-side. - To do so, use OpRaiseEvent. - - Events are incoming messages and as such buffered in the peer. - Calling PhotonPeer.DispatchIncomingCommands will call IPhotonPeerListener.OnEvent, to hand over received events. - - PhotonPeer.ReuseEventInstance is an option to optimize memory usage by reusing one EventData instance. - - The event currently being dispatched. - - - The protocol for this socket, defined in constructor. - - - Address, as defined via a Connect() call. Including protocol, port and or path. - This is set in the constructor and in Connect() again. Typically the address does not change after the IPhotonSocket is instantiated. - - - Contains only the server's hostname (stripped protocol, port and or path). Set in IPhotonSocket.Connect(). - - - Contains the IP address of the previously resolved ServerAddress (or empty, if GetIpAddress wasn't used). - - - Contains only the server's port address (as string). Set in IphotonSocket.Connect(). - - - Where available, this exposes if the server's address was resolved into an IPv6 address or not. - - - - Provides the protocol string, of the current PhotonPeer.SerializationProtocolType to be used for WebSocket connections. - - - Any WebSocket wrapper could access this to get the desired binary protocol for the connection. - Some WebSocket implementations use a static value of the same name and need to be updated. - - The value is not cached and each call will create the needed string on the fly. - - - - - Separates the given address into address (host name or IP) and port. Port must be included after colon! - - - This method expects any address to include a port. The final ':' in addressAndPort has to separate it. - IPv6 addresses have multiple colons and must use brackets to separate address from port. - - Examples: - ns.exitgames.com:5058 - http://[2001:db8:1f70::999:de8:7648:6e8]:100/ - [2001:db8:1f70::999:de8:7648:6e8]:100 - See: - http://serverfault.com/questions/205793/how-can-one-distinguish-the-host-and-the-port-in-an-ipv6-url - - - - Wraps a DNS call to provide an array of addresses, sorted to have the IPv6 ones first. - - This skips a DNS lookup, if the hostname is an IPv4 address. Then only this address is used as is. - The DNS lookup may take a while, so it is recommended to do this in a thread. Also, it may fail entirely. - - - IPAddress array for hostname, sorted to put any IPv6 addresses first.
- If the DNS lookup fails, HandleException(StatusCode.ExceptionOnConnect) gets called and null returned. - Then the socket should not attempt to connect. -
-
- - - Returns null or the IPAddress representing the address, doing Dns resolution if needed. - - Only returns IPv4 or IPv6 adresses, no others. - The string address of a server (hostname or IP). - IPAddress for the string address or null, if the address is neither IPv4, IPv6 or some hostname that could be resolved. - - - Variants of the Photon specific serialization protocol used for operations, responses, events and data. - - - Version 1.6 (outdated). - - - Version 1.8. - - - - - - - Serialize creates a byte-array from the given object and returns it. - - The object to serialize - The serialized byte-array - - - - Deserialize returns an object reassembled from the given StreamBuffer. - - The buffer to be Deserialized - The Deserialized object - - - - Deserialize returns an object reassembled from the given byte-array. - - The byte-array to be Deserialized - The Deserialized object - - - - Interface for (UDP) traffic capturing. - - - - Indicates if the PhotonPeer should call Record or not. - - - Implement to record network traffic. Called by PhotonPeer for each UDP message sent and received. - - The buffer will not contain Ethernet Header, IP, UDP level data. Only the payload received by the client. - - It is advised to not use NetworkSimulation when recording traffic. - The recording is done on the timing of actual receive- and send-calls and internal simulation would offset the timing. - - Buffer to be sent or received. Check length value for actual content length. - Length of the network data. - Indicates incoming (true) or outgoing (false) traffic. - The local peerId for the connection. Defaults to 0xFFFF until assigned by the Server. - The currently used IPhotonSocket of this Peer. Enables you to track the connection endpoint. - - - Internal class for "commands" - the package in which operations are sent. - - - Size of the Payload, which may be null. - - - Checks commandFlags & FV_UNRELIABLE_UNSEQUENCED. - - - Checks commandFlags & FV_RELIABLE. - - - - ACKs should never be created as NCommand. use CreateACK to wrtie the serialized ACK right away... - - - - - - - - - this variant does only create outgoing commands and increments . incoming ones are created from a DataInputStream - - - this variant does only create outgoing commands and increments . incoming ones are created from a DataInputStream - - - reads the command values (commandHeader and command-values) from incoming bytestream and populates the incoming command* - - - - A simulation item is an action that can be queued to simulate network lag. - - - - With this, the actual delay can be measured, compared to the intended lag. - - - Timestamp after which this item must be executed. - - - Action to execute when the lag-time passed. - - - Starts a new Stopwatch - - - - A set of network simulation settings, enabled (and disabled) by PhotonPeer.IsSimulationEnabled. - - - For performance reasons, the lag and jitter settings can't be produced exactly. - In some cases, the resulting lag will be up to 20ms bigger than the lag settings. - Even if all settings are 0, simulation will be used. Set PhotonPeer.IsSimulationEnabled - to false to disable it if no longer needed. - - All lag, jitter and loss is additional to the current, real network conditions. - If the network is slow in reality, this will add even more lag. - The jitter values will affect the lag positive and negative, so the lag settings - describe the medium lag even with jitter. The jitter influence is: [-jitter..+jitter]. - Packets "lost" due to OutgoingLossPercentage count for BytesOut and LostPackagesOut. - Packets "lost" due to IncomingLossPercentage count for BytesIn and LostPackagesIn. - - - - internal - - - internal - - - internal - - - internal - - - internal - - - internal - - - internal - - - This setting overrides all other settings and turns simulation on/off. Default: false. - - - Outgoing packages delay in ms. Default: 100. - - - Randomizes OutgoingLag by [-OutgoingJitter..+OutgoingJitter]. Default: 0. - - - Percentage of outgoing packets that should be lost. Between 0..100. Default: 1. TCP ignores this setting. - - - Incoming packages delay in ms. Default: 100. - - - Randomizes IncomingLag by [-IncomingJitter..+IncomingJitter]. Default: 0. - - - Percentage of incoming packets that should be lost. Between 0..100. Default: 1. TCP ignores this setting. - - - Counts how many outgoing packages actually got lost. TCP connections ignore loss and this stays 0. - - - Counts how many incoming packages actually got lost. TCP connections ignore loss and this stays 0. - - - Provides an overview of the current values in form of a string. - String summary. - - - - The pool this wrapper should return to when released/disposed. - - - - - Gets value and if it belongs to the static pool, returns the wrapper to pool. - - - - - - Boxes the value and returns boxed object. Releaeses the wrapper. - - - - - - Removes this WrapperStruct from pooling. - - - - - staticPool is used for implicit casting. This is not threadsafe, so casting between T and StructWrapper should only be done on the Unity main thread. - - - - - Replacement for object.GetType() that first checks to see if object is a WrappedStruct. - If so returns the StructWrapper T type, otherwise just returns object.GetType(). - - - - - - - Wrap a struct in a pooled StructWrapper. - - - - - Wrap a struct in a pooled StructWrapper. Pulls wrapper from the static pool. Wrapper is returned to pool when Unwrapped. - Slighty faster version of Wrap() that is hard wired to pull from the static pool. Use the persistant bool argument to make a permanent unpooled wrapper. - - - - - Tests if object is either a cast T, or a wrapped T - - - - - Remove all wrappers in hashtable from pooling, so they can remain cached and used later. - - - - - - Unwraps any WrapperStructs, boxes their value, releases hashtable entry with the boxed value. Releases the wrappers. - - - - - If object is a StructWrapper, the value will be extracted. If not, the object will be cast to T. - Wrapper is returned to the wrapper pool if applicable, so it is not considered safe to Unwrap multiple times, as the wrapper may be recycled. - - - - - If object is a StructWrapper, the value will be extracted. If not, the object will be cast to T. - Wrapper is will not be returned to its pool until it is Unwrapped, or the pool is cleared. - - - - - If object is a StructWrapper, the value will be extracted. If not, the object will be cast to T. - Wrapper is returned to the wrapper pool if applicable, so it is not considered safe to Unwrap multiple times, as the wrapper may be recycled. - - - - - If object is a StructWrapper, the value will be extracted. If not, the object will be cast to T. - Wrapper is returned to the wrapper pool if applicable, so it is not considered safe to Unwrap multiple times, as the wrapper may be recycled. - - - - - If object is a StructWrapper, the value will be extracted. If not, the object will be cast to T. - - - - - If object is a StructWrapper, the value will be extracted. If not, the object will be cast to T. - - - - - If object is a StructWrapper, the value will be extracted. If not, the object will be cast to T. - Wrapper is returned to the wrapper pool if applicable, so it is not considered safe to Unwrap multiple times, as the wrapper may be recycled. - - - - - If object is a StructWrapper, the value will be extracted. If not, the object will be cast to T. - Wrapper is returned to the wrapper pool if applicable, so it is not considered safe to Unwrap multiple times, as the wrapper may be recycled. - - - - - If object is a StructWrapper, the value will be extracted. If not, the object will be cast to T. - Wrapper is will not be returned to its pool until it is Unwrapped, or the pool is cleared. - - - - - Will get the object using the key. If the key is invalid, will return null. - - - - - - Param code. Used in internal op: InitEncryption. - - - Encryption-Mode code. Used in internal op: InitEncryption. - - - Param code. Used in internal op: InitEncryption. - - - Code of internal op: InitEncryption. - - - TODO: Code of internal op: Ping (used in PUN binary websockets). - - - Result code for any (internal) operation. - - - - This is the replacement for the const values used in eNet like: PS_DISCONNECTED, PS_CONNECTED, etc. - - - - No connection is available. Use connect. - - - Establishing a connection already. The app should wait for a status callback. - - - - The low level connection with Photon is established. On connect, the library will automatically - send an Init package to select the application it connects to (see also PhotonPeer.Connect()). - When the Init is done, IPhotonPeerListener.OnStatusChanged() is called with connect. - - Please note that calling operations is only possible after the OnStatusChanged() with StatusCode.Connect. - - - Connection going to be ended. Wait for status callback. - - - Acknowledging a disconnect from Photon. Wait for status callback. - - - Connection not properly disconnected. - - - The server's address, as set by a Connect() call, including any protocol, ports and or path. - If rHTTP is used, this can be set directly. - - - - This is the (low level) connection state of the peer. It's internal and based on eNet's states. - - Applications can read the "high level" state as PhotonPeer.PeerState, which uses a different enum. - - - Byte count of last sent operation (set during serialization). - - - Byte count of last dispatched message (set during dispatch/deserialization). - - - The command that's currently being dispatched. - - - This ID is assigned by the Realtime Server upon connection. - The application does not have to care about this, but it is useful in debugging. - - - - The serverTimeOffset is serverTimestamp - localTime. Used to approximate the serverTimestamp with help of localTime - - - - - Count of all bytes going out (including headers) - - - - - Count of all bytes coming in (including headers) - - - - Set via Connect(..., customObject) and sent in Init-Request. - - - Temporary cache of AppId. Used in Connect() to keep the AppId until we send the Init-Request (after the network-level (and Enet) connect). - - - Set to timeInt, whenever SendOutgoingCommands actually checks outgoing queues to send them. Must be connected. - - - Maximum Transfer Unit to be used for UDP+TCP - - - If IPhotonSocket.Connected is true, this value shows if the server's address resolved as IPv6 address. - - You must check the socket's IsConnected state. Otherwise, this value is not initialized. - Sent to server in Init-Request. - - - - Called when the server's Init Response arrived. - - - Serializes an operation into our binary messages (magic number, msg-type byte and message). Optionally encrypts. - This method is mostly the same in EnetPeer, TPeer and HttpPeerBase. Also, for raw messages, we have another variant. - - - Serializes an operation into our binary messages (magic number, msg-type byte and message). Optionally encrypts. - This method is mostly the same in EnetPeer, TPeer and HttpPeerBase. Also, for raw messages, we have another variant. - - - Returns the UDP Payload starting with Magic Number for binary protocol - - - - Checks outgoing queues for commands to send and puts them on their way. - This creates one package per go in UDP. - - If commands are not sent, cause they didn't fit into the package that's sent. - - - - Checks the incoming queue and Dispatches received data if possible. - - If a Dispatch happened or not, which shows if more Dispatches might be needed. - - - - Internally uses an operation to exchange encryption keys with the server. - - If the op could be sent. - - - - Gets the currently used settings for the built-in network simulation. - Please check the description of NetworkSimulationSet for more details. - - - - - Core of the Network Simulation, which is available in Debug builds. - Called by a timer in intervals. - - - - EnetPeer will set this value, so trafficstats can use it. TCP has 0 bytes per package extra - - - See PhotonPeer value. - - - See PhotonPeer value. - - - See PhotonPeer value. - - - See PhotonPeer value. - - - - Value range for a Peer's connection and initialization state, as returned by the PeerState property. - - - While this is not the same as the StatusCode of IPhotonPeerListener.OnStatusChanged(), it directly relates to it. - In most cases, it makes more sense to build a game's state on top of the OnStatusChanged() as you get changes. - - - - The peer is disconnected and can't call Operations. Call Connect(). - - - The peer is establishing the connection: opening a socket, exchanging packages with Photon. - - - The connection is established and now sends the application name to Photon. - You set the "application name" by calling PhotonPeer.Connect(). - - - The peer is connected and initialized (selected an application). You can now use operations. - - - The peer is disconnecting. It sent a disconnect to the server, which will acknowledge closing the connection. - - - - These are the options that can be used as underlying transport protocol. - - - - Use UDP to connect to Photon, which allows you to send operations reliable or unreliable on demand. - - - Use TCP to connect to Photon. - - - A TCP-based protocol commonly supported by browsers.For WebGL games mostly. Note: No WebSocket IPhotonSocket implementation is in this Assembly. - This protocol is only available in Unity exports to WebGL. - - - A TCP-based, encrypted protocol commonly supported by browsers. For WebGL games mostly. Note: No WebSocket IPhotonSocket implementation is in this Assembly. - This protocol is only available in Unity exports to WebGL. - - - - Level / amount of DebugReturn callbacks. Each debug level includes output for lower ones: OFF, ERROR, WARNING, INFO, ALL. - - - - No debug out. - - - Only error descriptions. - - - Warnings and errors. - - - Information about internal workflows, warnings and errors. - - - Most complete workflow description (but lots of debug output), info, warnings and errors. - - - Build target framework supported by this dll. - - - - Instances of the PhotonPeer class are used to connect to a Photon server and communicate with it. - - - A PhotonPeer instance allows communication with the Photon Server, which in turn distributes messages - to other PhotonPeer clients. - An application can use more than one PhotonPeer instance, which are treated as separate users on the - server. Each should have its own listener instance, to separate the operations, callbacks and events. - - - - - No effect anymore. Removed without replacement. - - - This value was used to get/set the initial capacities of command-lists. - These grow on demand but knowing their capacity is of very limited use. - Also, various command-lists grow their capacity independent from one another. - - - - - No effect anymore. Removed without replacement. - - - This was used to skip some received (and buffered) unreliable commands, to avoid situations - where the peer has aggregated a lot of (old) messages. - - - - - The WarningSize was used test all message queues for congestion. - - - - - Gets a local timestamp in milliseconds by calling SupportClass.GetTickCount(). - See LocalMsTimestampDelegate. - - - - Where dynamic linking is available, this library will attempt to load a native Photon "Encryptor" plugin library for "Datagram Encryption". - Fallback to a managed implementation. This value is always true. - - - Obsolete and ignored. Size of CommandLog. Default is 0, no logging. - - - Obsolete and ignored. Converts the CommandLog into a readable table-like string with summary. - - - False if this library build contains C# Socket code. If true, you must set some type as SocketImplementation before connecting. - - - True if the library was compiled with DEBUG setting. - - - Version of the Native Encryptor API compiled into this assembly. Defines which PhotonEncryptorPlugin needs to be used. - - - Target framework this dll was built for. - - - Global toggle to avoid callbacks from native plugins. Defaults to false, meaning: "callbacks enabled". - Callbacks from native code will fail on some platforms, which is why you can disable them. - - - Can be used to remove/hide the AppId from websocket connect paths. - - - A simplified identifier for client SDKs. Photon's APIs might modify this (as a dll can be used in more than one product). Helps debugging. - - - For the Init-request, we shift the ClientId by one and the last bit signals a "debug" (0) or "release" build (1). - - - Version of this library as string. - - - Checks if a native library for network sockets (PhotonSocketPlugin.dll) is available. To use it, see remarks. - - When the native socket library is available, the SocketNative class may be used as socket implementation. - - If the SocketImplementationConfig is null, the SocketNative class is assigned for UDP, TCP and WebSocket. - - Alternatively the type SocketNative (or other) can be assigend in the SocketImplementationConfig. - - The SocketNative class in this assembly is compiled for dynamic linking. - A class "SocketNativeSource" can be made available for you to compile it along with your source for - platforms that use static linking (e.g. for iOS and some consoles). - - Note: Native libraries must match the execution platform. - Even if the native plugin is found it may fail to execute. - - - - Checks if native library for Payload Encryption (PhotonCryptoPlugin.dll) is available. Used automatically. - - While the encryptor Type for Datagram Encryption can be defined, Payload Encryption - will always use built-in types as encryptor. - - Note: Native libraries must match the execution platform. - Even if the native plugin is found it may fail to execute. - - - - Checks if a native library for Datagram Encryption is available. To use it, see remarks. - - If the PhotonPeer.EncryptorType is set, this type is used as implementation for Datagram Encryption. - If it's not set, a native plugin is used if available. As fallback, a managed implementation is being used. - - Note: The native plugin is performing much better than the managed alternatives. - This is why we make the plugin available for various platforms. - - Note: Native libraries must match the execution platform. - Even if the native plugin is found it may fail to execute. - - - - - Checks availability and completeness of native libs and sets respective "available" values. - - - - Enables selection of a (Photon-)serialization protocol. Used in Connect methods. - Defaults to SerializationProtocol.GpBinaryV16; - - - Optional definition of IPhotonSocket type per ConnectionProtocol. - - Several platforms have special Socket implementations and slightly different APIs. - To accomodate this, switching the socket implementation for a network protocol was made available. - By default, UDP and TCP have socket implementations assigned. - - If a native socket plugin is available (see: PhotonPeer.NativeSocketLibAvailable), the SocketNative - class is used by default (with dynamic linking). - - You only need to set the SocketImplementationConfig once, after creating a PhotonPeer - and before connecting. If you switch the TransportProtocol, the correct implementation is being used. - - - - - Can be used to read the IPhotonSocket implementation at runtime (before connecting). - - - Use the SocketImplementationConfig to define which IPhotonSocket is used per ConnectionProtocol. - - - - - Sets the level (and amount) of debug output provided by the library. - - - This affects the callbacks to IPhotonPeerListener.DebugReturn. - Default Level: Error. - - - - - Gets the IPhotonPeerListener of this instance (set in constructor). - Can be used in derived classes for Listener.DebugReturn(). - - - - - Called when the client received a Disconnect Message from the server. Signals an error and provides a message to debug the case. - - - - - Option to make the PhotonPeer reuse a single EventData instance for all incoming events. - - - This reduces memory garbage. - If enabled, the event provided via OnEvent(EventData photonEvent) is invalid once the callback finished. - That event's content will get modified. Typically this is not a problem as events are rarely cached. - - Changing this value acquires the same lock that DispatchIncomingCommands() uses. - - - - - Enables a deserialization optimization for incoming events. Defaults to false. - - - When enabled, byte-arrays in incoming Photon events are deserialized into pooled ByteArraySlice instances (wrappers for byte[]). - This improves the memory footprint for receiving byte-arrays in events. - - When used, you have to release the (pooled) ByteArraySlice instances. - - Adjust your handling of EventData accordingly: - - The ByteArraySlice.Buffer will usually be bigger than the send/received byte-array. - Check the ByteArraySlice.Count and read only the actually received bytes. - The Buffer is reused and not cleared. The Offset will be 0 for incoming events. - - Important: - While the peer will acquire the ByteArraySlice and passes it to OnEvent, the game code has to call ByteArraySlice.Release() - when the slice is no longer needed. - - Send either byte[], ArraySegment or use the ByteArraySlicePool to acquire ByteArraySlices to send. - - - - - Instance of a ByteArraySlicePool. UseByteArraySlicePoolForEvents defines if this PhotonPeer is using the pool for deserialization of byte[] in Photon events. - - ByteArraySlice is a serializable datatype of the Photon .Net client library. - It helps avoid allocations by being pooled and (optionally) used in incoming Photon events (see: UseByteArraySlicePoolForEvents). - - You can also use the pool to acquire ByteArraySlice instances for serialization. - RaiseEvent will auto-release all ByteArraySlice instances passed in. - - - - - This debug setting enables a new send-ordering for commands. Defaults to true and commands are sent in the order they are created. Set to false to use Enet ordering. - - - - - Gets count of all bytes coming in (including headers, excluding UDP/TCP overhead) - - - - - Gets count of all bytes going out (including headers, excluding UDP/TCP overhead) - - - - - Gets the size of the dispatched event or operation-result in bytes. - This value is set before OnEvent() or OnOperationResponse() is called (within DispatchIncomingCommands()). - - - Get this value directly in OnEvent() or OnOperationResponse(). Example: - void OnEvent(...) { - int eventSizeInBytes = this.peer.ByteCountCurrentDispatch; - //... - - void OnOperationResponse(...) { - int resultSizeInBytes = this.peer.ByteCountCurrentDispatch; - //... - - - - Returns the debug string of the event or operation-response currently being dispatched or string. Empty if none. - In a release build of the lib, this will always be empty. - - - - Gets the size of the last serialized operation call in bytes. - The value includes all headers for this single operation but excludes those of UDP, Enet Package Headers and TCP. - - - Get this value immediately after calling an operation. - Example: - - this.loadbalancingClient.OpJoinRoom("myroom"); - int opjoinByteCount = this.loadbalancingClient.ByteCountLastOperation; - - - - If set, the TrafficRecorder will be used to capture all traffic. - - If null or not Enabled, the recorder is not being used. - Release builds of this library will never record traffic for performance reasons. - - See ITrafficRecorder docs. - - - - - Debugging option to tell the Photon Server to log all datagrams. - - - - - Up to 4 resend attempts for a reliable command can be done in quick succession (after RTT+4*Variance). - - - By default 0. Any later resend attempt will then double the time before the next resend. - Max value = 4; - Make sure to adjust SentCountAllowance to a slightly higher value, as more repeats will get done. - - - - - This is the (low level) state of the connection to the server of a PhotonPeer. Managed internally and read-only. - - - Don't mix this up with the StatusCode provided in IPhotonListener.OnStatusChanged(). - Applications should use the StatusCode of OnStatusChanged() to track their state, as - it also covers the higher level initialization between a client and Photon. - - - - - This peer's ID as assigned by the server or 0 if not using UDP. Will be 0xFFFF before the client connects. - - Used for debugging only. This value is not useful in everyday Photon usage. - - - - Count of all currently received but not-yet-Dispatched reliable commands - (events and operation results) from all channels. - - - - - Count of all commands currently queued as outgoing, including all channels and reliable, unreliable. - - - - - Sets a new (temporary) size of the MessageBufferPool to reuse memory where possible. - - - The MessageBufferPool is a Queue<StreamBuffer> for performance reasons. - This methods dequeues from the MessageBufferPool to get the Count equal to countOfBuffers, - then it calls MessageBufferPool.TrimExcess(). - - New size of the pool. Clears the pool if <= 0. - - - - Gets / sets the number of channels available in UDP connections with Photon. - Photon Channels are only supported for UDP. - The default ChannelCount is 2. Channel IDs start with 0 and 255 is a internal channel. - - - - - Enables the client so send the "encrypted" flag on secure connections. Incompatible with Server SDK 4.x. - - - - - While not connected, this controls if the next connection(s) should use a per-package CRC checksum. - - - While turned on, the client and server will add a CRC checksum to every sent package. - The checksum enables both sides to detect and ignore packages that were corrupted during transfer. - Corrupted packages have the same impact as lost packages: They require a re-send, adding a delay - and could lead to timeouts. - - Building the checksum has a low processing overhead but increases integrity of sent and received data. - Packages discarded due to failed CRC cecks are counted in PhotonPeer.PacketLossByCrc. - - - - - Count of packages dropped due to failed CRC checks for this connection. - - - - - - Count of packages dropped due to wrong challenge for this connection. - - - - - Gets the count of sent but not yet acknowledged commands (for UDP connections). - - - - - Count of commands that got repeated (due to local repeat-timing before an ACK was received). - - - - - Number of send retries before a peer is considered lost/disconnected. Default: 7. - - - The initial timeout countdown of a command is calculated by the current roundTripTime + 4 * roundTripTimeVariance. - Please note that the timeout span until a command will be resent is not constant, but based on - the roundtrip time at the initial sending, which will be doubled with every failed retry. - - DisconnectTimeout and SentCountAllowance are competing settings: either might trigger a disconnect on the - client first, depending on the values and Roundtrip Time. - - - - - Caps the initial timing for repeats of reliable commands. In milliseconds. Default: 400ms. - - - Unless acknowledged, reliable commands are repeated initially after: current roundTripTime + 4 * roundTripTimeVariance. - - As this value can be very high when there was exceptional lag, InitialResendTimeMax makes sure that commands - get repeated several times before they may trigger a timeout. - - - - - Sets the time between pings being sent automatically. They measure the roundtrip time and keep connections from closing. Default: 1000. - - - For Photon's reliable UDP connections, pings are skipped if any reliable command was sent during the specified TimePingInterval. - Any reliable command is used to update the RoundTripTime and RoundTripTimeVariance. - - When using TCP and WebSockets, the ping is of interest to measure the roundtrip and to keep a connection open, should nothing else - With those two protocols, the ping is used to update the RoundTripTime and RoundTripTimeVariance. - - - - - Time in milliseconds before any sent reliable command triggers a timeout disconnect, unless acknowledged by the receiver. Default: 10000. - - - DisconnectTimeout is not an exact value for a timeout. The exact timing of the timeout depends on the frequency - of Service() calls and the roundtrip time. Commands sent with long roundtrip-times and variance are checked less - often for re-sending. - - DisconnectTimeout and SentCountAllowance are competing settings: either might trigger a disconnect on the - client first, depending on the values and Roundtrip Time. - - Default: 10000 ms. Maximum setting: 65535. - Setting a negative value will apply the default timeout. - - - - - Approximated Environment.TickCount value of server (while connected). - - - UDP: The server's timestamp is automatically fetched after connecting (once). This is done - internally by a command which is acknowledged immediately by the server. - TCP: The server's timestamp fetched with each ping but set only after connecting (once). - - The approximation will be off by +/- 10ms in most cases. Per peer/client and connection, the - offset will be constant (unless FetchServerTimestamp() is used). A constant offset should be - better to adjust for. Unfortunately there is no way to find out how much the local value - differs from the original. - - The approximation adds RoundtripTime / 2 and uses this.LocalTimeInMilliSeconds to calculate - in-between values (this property returns a new value per tick). - - The value sent by Photon equals Environment.TickCount in the logic layer. - - - 0 until connected. - While connected, the value is an approximation of the server's current timestamp. - - - - - This setter for the (local-) timestamp delegate replaces the default Environment.TickCount with any equal function. - - - About Environment.TickCount: - The value of this property is derived from the system timer and is stored as a 32-bit signed integer. - Consequently, if the system runs continuously, TickCount will increment from zero to Int32..::.MaxValue - for approximately 24.9 days, then jump to Int32..::.MinValue, which is a negative number, then increment - back to zero during the next 24.9 days. - - Exception is thrown peer.PeerState is not PS_DISCONNECTED. - - - The internally used "per connection" time value, which is updated infrequently, when the library executes some connectio-related tasks. - - This integer value is an infrequently updated value by design. - The lib internally sets the value when it sends outgoing commands or reads incoming packages. - This is based on SupportClass.GetTickCount() and an initial time value per (server) connection. - This value is also used in low level Enet commands as sent time and optional logging. - - - - The last ConnectionTime value, when some ACKs were sent out by this client. - Only applicable to UDP connections. - - - The last ConnectionTime value, when SendOutgoingCommands actually checked outgoing queues to send them. Must be connected. - Available for UDP and TCP connections. - - - Measures the maximum milliseconds spent in PhotonSocket.Send(). - - - Time until a reliable command is acknowledged by the server. - - The value measures network latency and for UDP it includes the server's ACK-delay (setting in config). - In TCP, there is no ACK-delay, so the value is slightly lower (if you use default settings for Photon). - - RoundTripTime is updated constantly. Every reliable command will contribute a fraction to this value. - - This is also the approximate time until a raised event reaches another client or until an operation - result is available. - - - - - Changes of the roundtriptime as variance value. Gives a hint about how much the time is changing. - - - - The last measured roundtrip time for this connection. - - - - Timestamp of the last time anything (!) was received from the server (including low level Ping, ACKs, events and operation-returns). - - - This is not the time when something was dispatched. If you enable NetworkSimulation, this value is affected as well. - - - - - The server address which was used in PhotonPeer.Connect() or null (before Connect() was called). - - - - Contains the IP address of the previously resolved ServerAddress (or empty, if address wasn't resolved with the internal methods). - - - The protocol this peer is currently connected/connecting with (or 0). - - - This is the transport protocol to be used for next connect (see remarks). - The TransportProtocol can be changed anytime but it will not change the - currently active connection. Instead, TransportProtocol will be applied on next Connect. - - - - - Gets or sets the network simulation "enabled" setting. - Changing this value also locks this peer's sending and when setting false, - the internally used queues are executed (so setting to false can take some cycles). - - - - - Gets the settings for built-in Network Simulation for this peer instance - while IsSimulationEnabled will enable or disable them. - Once obtained, the settings can be modified by changing the properties. - - - - - Defines the initial size of an internally used StreamBuffer for Tcp. - The StreamBuffer is used to aggregate operation into (less) send calls, - which uses less resoures. - - - The size is not restricing the buffer and does not affect when outgoing data is actually sent. - - - - - The Maximum Trasfer Unit (MTU) defines the (network-level) packet-content size that is - guaranteed to arrive at the server in one piece. The Photon Protocol uses this - size to split larger data into packets and for receive-buffers of packets. - - - This value affects the Packet-content. The resulting UDP packages will have additional - headers that also count against the package size (so it's bigger than this limit in the end) - Setting this value while being connected is not allowed and will throw an Exception. - Minimum is 576. Huge values won't speed up connections in most cases! - - - - - This property is set internally, when OpExchangeKeysForEncryption successfully finished. - While it's true, encryption can be used for operations. - - - - - While true, the peer will not send any other commands except ACKs (used in UDP connections). - - - - Defines if Key Exchange for Encryption is done asynchronously in another thread. - - - Indicates if sequence numbers should be randomized. - - - Initialization array, used to modify the sequence numbers of channels. - - - If GCM is used for DatagramEncryption. - If true, the randomization-value gets added to the current value, else (CBC/old style) the randomization-value replaces the current value. - - - - Gets the byte-count of incoming "low level" messages, which are either Enet Commands or Tcp Messages. - These include all headers, except those of the underlying internet protocol Udp or Tcp. - - - - - Gets the byte-count of outgoing "low level" messages, which are either Enet Commands or Tcp Messages. - These include all headers, except those of the underlying internet protocol Udp or Tcp. - - - - - Gets a statistic of incoming and outgoing traffic, split by operation, operation-result and event. - - - Operations are outgoing traffic, results and events are incoming. - Includes the per-command header sizes (Udp: Enet Command Header or Tcp: Message Header). - - - - - Returns the count of milliseconds the stats are enabled for tracking. - - - - - Enables or disables collection of statistics in TrafficStatsIncoming, TrafficStatsOutgoing and TrafficstatsGameLevel. - - - Setting this to true, also starts the stopwatch to measure the timespan the stats are collected. - Enables the traffic statistics of a peer: TrafficStatsIncoming, TrafficStatsOutgoing and TrafficstatsGameLevel (nothing else). - Default value: false (disabled). - - - - - Creates new instances of TrafficStats and starts a new timer for those. - - - - - Returns a string of the most interesting connection statistics. - When you have issues on the client side, these might contain hints about the issue's cause. - - If true, Incoming and Outgoing low-level stats are included in the string. - Stats as string. - - - Implements the message-protocol, based on the underlying network protocol (udp, tcp, http). - - - PayloadEncryption Secret. Message payloads get encrypted with it individually and on demand. - - - Setter for the Datagram Encryptor instance. Used at next connect. - - If null, the PhotonPeer will create a default encryptor instance, which may be native or managed. - See also: PhotonPeer.NativeDatagramEncryptionLibAvailable. - - - - The datagram encryptor used for the current connection. Applied internally in InitDatagramEncryption. - - - Count of unreliable commands being discarded in case this client already dispatched a command that was newer (higher sequence number). - - - Set per dispatch in DispatchIncomingCommands to: commandUnreliableSequenceNumber - channel.incomingUnreliableSequenceNumber. Indicates how big the (sequence)gap is, compared to the last dispatched unreliable command. - - - Creates a new PhotonPeer with specified transport protocol (without a IPhotonPeerListener). - Make sure to set the Listener, before using the peer. - - - - Creates a new PhotonPeer instance to communicate with Photon and selects the transport protocol. We recommend UDP. - - a IPhotonPeerListener implementation - Protocol to use to connect to Photon. - - - - Starts connecting to the given Photon server. Non-blocking. - - - Connecting to the Photon server is done asynchronous. - Unless an error happens right away (and this returns false), wait for the call of IPhotonPeerListener.OnStatusChanged. - - - Address of a Photon server as IP:port or hostname. WebSocket connections must contain a scheme (ws:// or wss://). - - - The ID of the app to use. Typically this is a guid (for the Photon Cloud). Max 32 characters. - - - Optional custom data to be used by server during peer creation. - If used for authentication, the server is able to reject a client without creating a peer. - Must be a serializable data type of Photon. - - - True if a connection attempt will be made. False if some error could be detected early-on. - - - - - Starts connecting to the given Photon server. Non-blocking. - - - Connecting to the Photon server is done asynchronous. - Unless an error happens right away (and this returns false), wait for the call of IPhotonPeerListener.OnStatusChanged. - - - Address of a Photon server as IP:port or hostname. WebSocket connections must contain a scheme (ws:// or wss://). - - - Optional address of a proxy server. Only used by WebSocket connections. Set null to use none. - - - The ID of the app to use. Typically this is a guid (for the Photon Cloud). Max 32 characters. - - - Optional custom data to be used by server during peer creation. - If used for authentication, the server is able to reject a client without creating a peer. - Must be a serializable data type of Photon. - - - True if a connection attempt will be made. False if some error could be detected early-on. - - - - - This method initiates a mutual disconnect between this client and the server. - - - Calling this method does not immediately close a connection. Disconnect lets the server - know that this client is no longer listening. For the server, this is a much faster way - to detect that the client is gone but it requires the client to send a few final messages. - - On completion, OnStatusChanged is called with the StatusCode.Disconnect. - - If the client is disconnected already or the connection thread is stopped, then there is no callback. - - The default server logic will leave any joined game and trigger the respective event. - - - - - This method immediately closes a connection (pure client side) and ends related listening Threads. - - - Unlike Disconnect, this method will simply stop to listen to the server. Udp connections will timeout. - If the connections was open, this will trigger a callback to OnStatusChanged with code StatusCode.Disconnect. - - - - - This will fetch the server's timestamp and update the approximation for property ServerTimeInMilliseconds. - - - The server time approximation will NOT become more accurate by repeated calls. Accuracy currently depends - on a single roundtrip which is done as fast as possible. - - The command used for this is immediately acknowledged by the server. This makes sure the roundtrip time is - low and the timestamp + rountriptime / 2 is close to the original value. - - - - - This method creates a public key for this client and exchanges it with the server. - - - Encryption is not instantly available but calls OnStatusChanged when it finishes. - Check for StatusCode EncryptionEstablished and EncryptionFailedToEstablish. - - Calling this method sets IsEncryptionAvailable to false. - This method must be called before the "encrypt" parameter of OpCustom can be used. - - If operation could be enqueued for sending - - - - Initializes Datagram Encryption. Optionally, the EncryptorType is being used, if set. - - secret used to cipher udp packets - secret used for authentication of udp packets - - - - Photon's Payload Encryption secret may be set by a response from the server. - - The secret in form of a byte[]. - - - - This method excutes DispatchIncomingCommands and SendOutgoingCommands in your application Thread-context. - - - The Photon client libraries are designed to fit easily into a game or application. The application - is in control of the context (thread) in which incoming events and responses are executed and has - full control of the creation of UDP/TCP packages. - - Sending packages and dispatching received messages are two separate tasks. Service combines them - into one method at the cost of control. It calls DispatchIncomingCommands and SendOutgoingCommands. - - Call this method regularly (2..20 times a second). - - This will Dispatch ANY remaining buffered responses and events AND will send queued outgoing commands. - Fewer calls might be more effective if a device cannot send many packets per second, as multiple - operations might be combined into one package. - - - You could replace Service by: - - while (DispatchIncomingCommands()); //Dispatch until everything is Dispatched... - SendOutgoingCommands(); //Send a UDP/TCP package with outgoing messages - - - - - - - Creates and sends a UDP/TCP package with outgoing commands (operations and acknowledgements). Also called by Service(). - - - As the Photon library does not create any UDP/TCP packages by itself. Instead, the application - fully controls how many packages are sent and when. A tradeoff, an application will - lose connection, if it is no longer calling SendOutgoingCommands or Service. - - If multiple operations and ACKs are waiting to be sent, they will be aggregated into one - package. The package fills in this order: - ACKs for received commands - A "Ping" - only if no reliable data was sent for a while - Starting with the lowest Channel-Nr: - Reliable Commands in channel - Unreliable Commands in channel - - This gives a higher priority to lower channels. - - A longer interval between sends will lower the overhead per sent operation but - increase the internal delay (which adds "lag"). - - Call this 2..20 times per second (depending on your target platform). - - The if commands are not yet sent. Udp limits it's package size, Tcp doesnt. - - - - Dispatching received messages (commands), causes callbacks for events, responses and state changes within a IPhotonPeerListener. - - - DispatchIncomingCommands only executes a single received - command per call. If a command was dispatched, the return value is true and the method - should be called again. - - This method is called by Service() until currently available commands are dispatched. - In general, this method should be called until it returns false. In a few cases, it might - make sense to pause dispatching (if a certain state is reached and the app needs to load - data, before it should handle new events). - - The callbacks to the peer's IPhotonPeerListener are executed in the same thread that is - calling DispatchIncomingCommands. This makes things easier in a game loop: Event execution - won't clash with painting objects or the game logic. - - - - - Prepares your operation (code and parameters) to be sent to the Photon Server with specified SendOptions. - - - This method serializes and enqueues the operation right away while the actual sending happens later. - To be able to aggregate operations/messages, the Photon client sends packages only when you call SendOutgoingCommands(). - - The sendOptions specify how the operation gets sent exactly. - Keep in mind that some transport protocols don't support unreliable or unsequenced transport. - In that case, the sendOptions might be ignored. - - The operationCode must be known by the server's logic or won't be processed. - In almost all cases, sending an operation will result in a OperationResponse (see: IPhotonPeerListener.OnOperationResponse). - - Operations are handled by their byte\-typed code. The codes are defined in the Realtime API (a.k.a. LoadBalancing API). - Containing parameters as key\-value pair. The key is byte\-typed, while the value is any serializable datatype. - Wraps up DeliveryMode (reliability), Encryption and Channel values for sending. - If operation could be enqueued for sending. - - - - Registers new types/classes for de/serialization and the fitting methods to call for this type. - - - SerializeMethod and DeserializeMethod are complementary: Feed the product of serializeMethod to - the constructor, to get a comparable instance of the object. - - After registering a Type, it can be used in events and operations and will be serialized like - built-in types. - - Type (class) to register. - A byte-code used as shortcut during transfer of this Type. - Method delegate to create a byte[] from a customType instance. - Method delegate to create instances of customType's from byte[]. - If the Type was registered successfully. - - - - Container for an Operation request, which is a code and parameters. - - - On the lowest level, Photon only allows byte-typed keys for operation parameters. - The values of each such parameter can be any serializable datatype: byte, int, hashtable and many more. - - - - Byte-typed code for an operation - the short identifier for the server's method to call. - - - The parameters of the operation - each identified by a byte-typed code in Photon. - - - - Contains the server's response for an operation called by this peer. - The indexer of this class actually provides access to the Parameters Dictionary. - - - The OperationCode defines the type of operation called on Photon and in turn also the Parameters that - are set in the request. Those are provided as Dictionary with byte-keys. - There are pre-defined constants for various codes defined in the LoadBalancing application. - Check: OperationCode, ParameterCode, etc. - - An operation's request is summarized by the ReturnCode: a short typed code for "Ok" or - some different result. The code's meaning is specific per operation. An optional DebugMessage can be - provided to simplify debugging. - - Each call of an operation gets an ID, called the "invocID". This can be matched to the IDs - returned with any operation calls. This way, an application could track if a certain OpRaiseEvent - call was successful. - - - - The code for the operation called initially (by this peer). - Use enums or constants to be able to handle those codes, like OperationCode does. - - - A code that "summarizes" the operation's success or failure. Specific per operation. 0 usually means "ok". - - - An optional string sent by the server to provide readable feedback in error-cases. Might be null. - - - A Dictionary of values returned by an operation, using byte-typed keys per value. - - - - Alternative access to the Parameters, which wraps up a TryGetValue() call on the Parameters Dictionary. - - The byte-code of a returned value. - The value returned by the server, or null if the key does not exist in Parameters. - - - ToString() override. - Relatively short output of OpCode and returnCode. - - - Extensive output of operation results. - To be used in debug situations only, as it returns a string for each value. - - - A Photon Event consists of a Code value and a Parameters Dictionary with the event's content (if any). - - The indexer of this class provides access to the values in Parameters. - It wraps the null check for Parameters and uses TryGetValue() for the provided key. - - Photon servers use events to send information which is not triggered by a client's operation requests (those get responses). - The Realtime API allows you to send custom events with any Code and content via OpRaiseEvent. - - - - The event code identifies the type of event. - - - The Parameters of an event is a Dictionary<byte, object>. - - - - Access to the Parameters of a Photon-defined event. Custom Events only use Code, Sender and CustomData. - - The key byte-code of a Photon event value. - The Parameters value, or null if the key does not exist in Parameters. - - - - Defines the event key containing the Sender of the event. - - - Defaults to Sender key of Realtime API events (RaiseEvent): 254. - Can be set to Chat API's ChatParameterCode.Sender: 5. - - - - - Accesses the Sender of the event via the indexer and SenderKey. The result is cached. - - - Accesses this event's Parameters[CustomDataKey], which may be null. - In that case, this returns 0 (identifying the server as sender). - - - - - Defines the event key containing the Custom Data of the event. - - - Defaults to Data key of Realtime API events (RaiseEvent): 245. - Can be set to any other value on demand. - - - - - Accesses the Custom Data of the event via the indexer and CustomDataKey. The result is cached. - - - Accesses this event's Parameters[CustomDataKey], which may be null. - - - - ToString() override. - Short output of "Event" and it's Code. - - - Extensive output of the event content. - To be used in debug situations only, as it returns a string for each value. - - - - Type of serialization methods to add custom type support. - Use PhotonPeer.ReisterType() to register new types with serialization and deserialization methods. - - The method will get objects passed that were registered with it in RegisterType(). - Return a byte[] that resembles the object passed in. The framework will surround it with length and type info, so don't include it. - - - Serialization method delegate. StreamBuffer based custom serialization methods must use this form. - - - - Type of deserialization methods to add custom type support. - Use PhotonPeer.RegisterType() to register new types with serialization and deserialization methods. - - The framwork passes in the data it got by the associated SerializeMethod. The type code and length are stripped and applied before a DeserializeMethod is called. - Return a object of the type that was associated with this method through RegisterType(). - - - Deserialization method delegate. StreamBuffer based custom deserialization methods must use this form. - - - - Provides tools for the Exit Games Protocol - - - - - Serialize creates a byte-array from the given object and returns it. - - The object to serialize - The serialized byte-array - - - - Deserialize returns an object reassembled from the given byte-array. - - The byte-array to be Deserialized - The Deserialized object - - - - Serializes a short typed value into a byte-array (target) starting at the also given targetOffset. - The altered offset is known to the caller, because it is given via a referenced parameter. - - The short value to be serialized - The byte-array to serialize the short to - The offset in the byte-array - - - - Serializes an int typed value into a byte-array (target) starting at the also given targetOffset. - The altered offset is known to the caller, because it is given via a referenced parameter. - - The int value to be serialized - The byte-array to serialize the short to - The offset in the byte-array - - - - Serializes an float typed value into a byte-array (target) starting at the also given targetOffset. - The altered offset is known to the caller, because it is given via a referenced parameter. - - The float value to be serialized - The byte-array to serialize the short to - The offset in the byte-array - - - - Deserialize fills the given int typed value with the given byte-array (source) starting at the also given offset. - The result is placed in a variable (value). There is no need to return a value because the parameter value is given by reference. - The altered offset is this way also known to the caller. - - The int value to deserialize into - The byte-array to deserialize from - The offset in the byte-array - - - - Deserialize fills the given short typed value with the given byte-array (source) starting at the also given offset. - The result is placed in a variable (value). There is no need to return a value because the parameter value is given by reference. - The altered offset is this way also known to the caller. - - The short value to deserialized into - The byte-array to deserialize from - The offset in the byte-array - - - - Deserialize fills the given float typed value with the given byte-array (source) starting at the also given offset. - The result is placed in a variable (value). There is no need to return a value because the parameter value is given by reference. - The altered offset is this way also known to the caller. - - The float value to deserialize - The byte-array to deserialize from - The offset in the byte-array - - - - Exit Games GpBinaryV16 protocol implementation - - - - - The gp type. - - - - - Unkown type. - - - - - An array of objects. - - - This type is new in version 1.5. - - - - - A boolean Value. - - - - - A byte value. - - - - - An array of bytes. - - - - - An array of objects. - - - - - A 16-bit integer value. - - - - - A 32-bit floating-point value. - - - This type is new in version 1.5. - - - - - A dictionary - - - This type is new in version 1.6. - - - - - A 64-bit floating-point value. - - - This type is new in version 1.5. - - - - - A Hashtable. - - - - - A 32-bit integer value. - - - - - An array of 32-bit integer values. - - - - - A 64-bit integer value. - - - - - A string value. - - - - - An array of string values. - - - - - A custom type. 0x63 - - - - - Null value don't have types. - - - - - Calls the correct serialization method for the passed object. - - - - - DeserializeInteger returns an Integer typed value from the given stream. - - - - Exception type for de/serialization issues. Used in Protocol 1.8. - - - Constructor for the exception. - - - Unkown. GpType: 0. - - - Boolean. GpType: 2. See: BooleanFalse, BooleanTrue. - - - Byte. GpType: 3. - - - Short. GpType: 4. - - - 32-bit floating-point value. GpType: 5. - - - 64-bit floating-point value. GpType: 6. - - - String. GpType: 7. - - - Null value don't have types. GpType: 8. - - - CompressedInt. GpType: 9. - - - CompressedLong. GpType: 10. - - - Int1. GpType: 11. - - - Int1_. GpType: 12. - - - Int2. GpType: 13. - - - Int2_. GpType: 14. - - - L1. GpType: 15. - - - L1_. GpType: 16. - - - L2. GpType: 17. - - - L2_. GpType: 18. - - - Custom Type. GpType: 19. - - - Custom Type Slim. GpType: 128 (0x80) and up. - - - Dictionary. GpType: 20. - - - Hashtable. GpType: 21. - - - ObjectArray. GpType: 23. - - - OperationRequest. GpType: 24. - - - OperationResponse. GpType: 25. - - - EventData. GpType: 26. - - - Boolean False. GpType: 27. - - - Boolean True. GpType: 28. - - - ShortZero. GpType: 29. - - - IntZero. GpType: 30. - - - LongZero. GpType: 3. - - - FloatZero. GpType: 32. - - - DoubleZero. GpType: 33. - - - ByteZero. GpType: 34. - - - Array for nested Arrays. GpType: 64 (0x40). Element count and type follows. - - - - Writes integers as compressed. Either directly as zigzag-encoded or (when a type is written for this value) it can use an optimized sub-type. - - - - Enum of the three options for reliability and sequencing in Photon's reliable-UDP. - - - The operation/message gets sent just once without acknowledgement or repeat. The sequence (order) of messages is guaranteed. - - - The operation/message asks for an acknowledgment. It's resent until an ACK arrived. The sequence (order) of messages is guaranteed. - - - The operation/message gets sent once (unreliable) and might arrive out of order. Best for your own sequencing (e.g. for streams). - - - The operation/message asks for an acknowledgment. It's resent until an ACK arrived and might arrive out of order. Best for your own sequencing (e.g. for streams). - - - Wraps up DeliveryMode, Encryption and Channel values for sending operations and messages. - - - Default SendOptions instance for reliable sending. - - - Default SendOptions instance for unreliable sending. - - - Chose the DeliveryMode for this operation/message. Defaults to Unreliable. - - - If true the operation/message gets encrypted before it's sent. Defaults to false. - Before encryption can be used, it must be established. Check PhotonPeer.IsEncryptionAvailable is true. - - - The Enet channel to send in. Defaults to 0. - Channels in Photon relate to "message channels". Each channel is a sequence of messages. - - - Sets the DeliveryMode either to true: Reliable or false: Unreliable, overriding any current value. - Use this to conveniently select reliable/unreliable delivery. - - - used by PhotonPeer* - - - Encapsulates the network i/o functionality for the realtime library. - - - used by PhotonPeer* - - - Endless loop, run in Receive Thread. - - - Internal class to encapsulate the network i/o functionality for the realtime libary. - - - used by PhotonPeer* - - - Encapsulates the network i/o functionality for the realtime library. - - - used by PhotonPeer* - - - Endless loop, run in Receive Thread. - - - Internal class to encapsulate the network i/o functionality for the realtime libary. - - - used by PhotonPeer* - - - - Allocates a new byte[] that is the exact used length. Use GetBuffer for nonalloc operations. - - - - - Allocates a new byte[] that is the exact used length. Use GetBuffer for nonalloc operations. - - - - - The bytes between Position and Length are copied to the beginning of the buffer. Length decreased by Position. Position set to 0. - - - - - Brings StreamBuffer to the state as after writing of 'length' bytes. Returned buffer and offset can be used to actually fill "written" segment with data. - - - - - Sets stream length. If current position is greater than specified value, it's set to the value. - - - SetLength(0) resets the stream to initial state but preserves underlying byte[] buffer. - - - - - Guarantees that the buffer is at least neededSize bytes. - - - - - Contains several (more or less) useful static methods, mostly used for debugging. - - - - - Gets the local machine's "milliseconds since start" value (precision is described in remarks). - - - This method uses Environment.TickCount (cheap but with only 16ms precision). - PhotonPeer.LocalMsTimestampDelegate is available to set the delegate (unless already connected). - - Fraction of the current time in Milliseconds (this is not a proper datetime timestamp). - - - - Creates a background thread that calls the passed function in intervals, as long as that returns true. - - - With StopBackgroundCalls, you can stop threads started with this method. - The resulting ThreadAbortException is caught and discarded. - - The function to call. Must return true, if it should be called again. Returning false ends the thread. - Milliseconds to sleep between calls of myThread. Default: 100ms. - An optional name for the task to help debugging. Null or empty won't set the thread.Name. - - - - Calls Abort on the thread with the given id (= index of the thread list) - - - The resulting ThreadAbortException is caught and discarded. - - The unique ID of the thread. - True if the thread is canceled and false otherwise, e.g. if the thread with the given ID does not exist. - - - - Calls Abort on all threads that were started via StartBackgroundCalls. - - - The resulting ThreadAbortException is caught and discarded. - - True if any thread got aborted. - - - - Writes the exception's stack trace to the received stream. - - Exception to obtain information from. - Output sream used to write to. - - - - Writes the exception's stack trace to the received stream. Writes to: System.Diagnostics.Debug. - - Exception to obtain information from. - - - - This method returns a string, representing the content of the given IDictionary. - Returns "null" if parameter is null. - - IDictionary to return as string. - - - - - Converts a byte-array to string (useful as debugging output). - Uses BitConverter.ToString(list) internally after a null-check of list. - - Byte-array to convert to string. - - List of bytes as string. - - - - - Class to wrap static access to the random.Next() call in a thread safe manner. - - - - - An Attribute named "Preserve" tells Unity to not strip the code. - - - - TCP "Package" header: 7 bytes - - - TCP "Message" header: 2 bytes - - - TCP header combined: 9 bytes - - - Defines if the (TCP) socket implementation needs to do "framing". - The WebSocket protocol (e.g.) includes framing, so when that is used, we set DoFraming to false. - - - - Checks the incoming queue and Dispatches received data if possible. Returns if a Dispatch happened or - not, which shows if more Dispatches might be needed. - - - - - gathers commands from all (out)queues until udp-packet is full and sends it! - - - - Sends a ping in intervals to keep connection alive (server will timeout connection if nothing is sent). - Always false in this case (local queues are ignored. true would be: "call again to send remaining data"). - - - enqueues serialized operations to be sent as tcp stream / package - - - Sends a ping and modifies this.lastPingResult to avoid another ping for a while. - - - reads incoming tcp-packages to create and queue incoming commands* - - - - Only in use as long as PhotonPeer.TrafficStatsEnabled = true; - - - - Gets sum of outgoing operations in bytes. - - - Gets count of outgoing operations. - - - Gets sum of byte-cost of incoming operation-results. - - - Gets count of incoming operation-results. - - - Gets sum of byte-cost of incoming events. - - - Gets count of incoming events. - - - - Gets longest time it took to complete a call to OnOperationResponse (in your code). - If such a callback takes long, it will lower the network performance and might lead to timeouts. - - - - Gets OperationCode that causes the LongestOpResponseCallback. See that description. - - - - Gets longest time a call to OnEvent (in your code) took. - If such a callback takes long, it will lower the network performance and might lead to timeouts. - - - - Gets EventCode that caused the LongestEventCallback. See that description. - - - - Gets longest time between subsequent calls to DispatchIncomgingCommands in milliseconds. - Note: This is not a crucial timing for the networking. Long gaps just add "local lag" to events that are available already. - - - - - Gets longest time between subsequent calls to SendOutgoingCommands in milliseconds. - Note: This is a crucial value for network stability. Without calling SendOutgoingCommands, - nothing will be sent to the server, who might time out this client. - - - - - Gets number of calls of DispatchIncomingCommands. - - - - - Gets number of calls of DispatchIncomingCommands. - - - - - Gets number of calls of SendOutgoingCommands. - - - - Gets sum of byte-cost of all "logic level" messages. - - - Gets sum of counted "logic level" messages. - - - Gets sum of byte-cost of all incoming "logic level" messages. - - - Gets sum of counted incoming "logic level" messages. - - - Gets sum of byte-cost of all outgoing "logic level" messages (= OperationByteCount). - - - Gets sum of counted outgoing "logic level" messages (= OperationCount). - - - - Resets the values that can be maxed out, like LongestDeltaBetweenDispatching. See remarks. - - - Set to 0: LongestDeltaBetweenDispatching, LongestDeltaBetweenSending, LongestEventCallback, LongestEventCallbackCode, LongestOpResponseCallback, LongestOpResponseCallbackOpCode. - Also resets internal values: timeOfLastDispatchCall and timeOfLastSendCall (so intervals are tracked correctly). - - - - Gets the byte-size of per-package headers. - - - - Counts commands created/received by this client, ignoring repeats (out command count can be higher due to repeats). - - - - Gets count of bytes as traffic, excluding UDP/TCP headers (42 bytes / x bytes). - - - Timestamp of the last incoming ACK that has been read (every PhotonPeer.TimePingInterval milliseconds this client sends a PING which must be ACKd). - - - Timestamp of last incoming reliable command (every second we expect a PING). - -
-
diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/netstandard2.0/Photon3Unity3D.xml.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/netstandard2.0/Photon3Unity3D.xml.meta deleted file mode 100644 index b58d8aa61..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonLibs/netstandard2.0/Photon3Unity3D.xml.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 7015e500cd5b71244af56448dfb59804 -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime.meta deleted file mode 100644 index 8c62168a2..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 414f6601a5d7a674895efad90f9d1f49 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code.meta deleted file mode 100644 index c0046738e..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 064a4c0213b08584d9aa4fe170bb3b66 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/AppSettings.cs b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/AppSettings.cs deleted file mode 100644 index e95bbab60..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/AppSettings.cs +++ /dev/null @@ -1,154 +0,0 @@ -// ----------------------------------------------------------------------- -// -// Loadbalancing Framework for Photon - Copyright (C) 2018 Exit Games GmbH -// -// Settings for Photon application(s) and the server to connect to. -// developer@photonengine.com -// ---------------------------------------------------------------------------- - -#if UNITY_4_7 || UNITY_5 || UNITY_5_3_OR_NEWER -#define SUPPORTED_UNITY -#endif - - -namespace Photon.Realtime -{ - using System; - using ExitGames.Client.Photon; - - #if SUPPORTED_UNITY || NETFX_CORE - using Hashtable = ExitGames.Client.Photon.Hashtable; - using SupportClass = ExitGames.Client.Photon.SupportClass; - #endif - - - /// - /// Settings for Photon application(s) and the server to connect to. - /// - /// - /// This is Serializable for Unity, so it can be included in ScriptableObject instances. - /// - #if !NETFX_CORE || SUPPORTED_UNITY - [Serializable] - #endif - public class AppSettings - { - /// AppId for Realtime or PUN. - public string AppIdRealtime; - /// AppId for the Chat Api. - public string AppIdChat; - /// AppId for use in the Voice Api. - public string AppIdVoice; - - /// The AppVersion can be used to identify builds and will split the AppId distinct "Virtual AppIds" (important for matchmaking). - public string AppVersion; - - - /// If false, the app will attempt to connect to a Master Server (which is obsolete but sometimes still necessary). - /// if true, Server points to a NameServer (or is null, using the default), else it points to a MasterServer. - public bool UseNameServer = true; - - /// Can be set to any of the Photon Cloud's region names to directly connect to that region. - /// if this IsNullOrEmpty() AND UseNameServer == true, use BestRegion. else, use a server - public string FixedRegion; - - /// Set to a previous BestRegionSummary value before connecting. - /// - /// This is a value used when the client connects to the "Best Region".
- /// If this is null or empty, all regions gets pinged. Providing a previous summary on connect, - /// speeds up best region selection and makes the previously selected region "sticky".
- /// - /// Unity clients should store the BestRegionSummary in the PlayerPrefs. - /// You can store the new result by implementing . - /// If is not null, store this string. - /// To avoid storing the value multiple times, you could set SummaryToCache to null. - ///
- #if SUPPORTED_UNITY - [NonSerialized] - #endif - public string BestRegionSummaryFromStorage; - - /// The address (hostname or IP) of the server to connect to. - public string Server; - /// If not null, this sets the port of the first Photon server to connect to (that will "forward" the client as needed). - public int Port; - /// The address (hostname or IP and port) of the proxy server. - public string ProxyServer; - /// The network level protocol to use. - public ConnectionProtocol Protocol = ConnectionProtocol.Udp; - - /// Enables a fallback to another protocol in case a connect to the Name Server fails. - /// See: LoadBalancingClient.EnableProtocolFallback. - public bool EnableProtocolFallback = true; - - /// Defines how authentication is done. On each system, once or once via a WSS connection (safe). - public AuthModeOption AuthMode = AuthModeOption.Auth; - - /// If true, the client will request the list of currently available lobbies. - public bool EnableLobbyStatistics; - /// Log level for the network lib. - public DebugLevel NetworkLogging = DebugLevel.ERROR; - - /// If true, the Server field contains a Master Server address (if any address at all). - public bool IsMasterServerAddress { get { return !this.UseNameServer; } } - /// If true, the client should fetch the region list from the Name Server and find the one with best ping. - /// See "Best Region" in the online docs. - public bool IsBestRegion { get { return this.UseNameServer && string.IsNullOrEmpty(this.FixedRegion); } } - /// If true, the default nameserver address for the Photon Cloud should be used. - public bool IsDefaultNameServer { get { return this.UseNameServer && string.IsNullOrEmpty(this.Server); } } - /// If true, the default ports for a protocol will be used. - public bool IsDefaultPort { get { return this.Port <= 0; } } - - /// ToString but with more details. - public string ToStringFull() - { - return string.Format( - "appId {0}{1}{2}{3}" + - "use ns: {4}, reg: {5}, {9}, " + - "{6}{7}{8}" + - "auth: {10}", - String.IsNullOrEmpty(this.AppIdRealtime) ? string.Empty : "rt: " + this.HideAppId(this.AppIdRealtime) + ", ", - String.IsNullOrEmpty(this.AppIdChat) ? string.Empty : "chat: " + this.HideAppId(this.AppIdChat) + ", ", - String.IsNullOrEmpty(this.AppIdVoice) ? string.Empty : "voice: " + this.HideAppId(this.AppIdVoice) + ", ", - String.IsNullOrEmpty(this.AppVersion) ? string.Empty : "appV: " + this.AppVersion + ", ", - this.UseNameServer, - this.IsBestRegion ? "/best/" : this.FixedRegion, - //this.BestRegionSummaryFromStorage, - String.IsNullOrEmpty(this.Server) ? string.Empty : "server: " + this.Server + ", ", - this.IsDefaultPort ? string.Empty : "port: " + this.Port + ", ", - String.IsNullOrEmpty(ProxyServer) ? string.Empty : "proxy: " + this.ProxyServer + ", ", - this.Protocol, - this.AuthMode - //this.EnableLobbyStatistics, - //this.NetworkLogging, - ); - } - - private string HideAppId(string appId) - { - return string.IsNullOrEmpty(appId) || appId.Length < 8 - ? appId - : string.Concat(appId.Substring(0, 8), "***"); - } - - public AppSettings CopyTo(AppSettings d) - { - d.AppIdRealtime = this.AppIdRealtime; - d.AppIdChat = this.AppIdChat; - d.AppIdVoice = this.AppIdVoice; - d.AppVersion = this.AppVersion; - d.UseNameServer = this.UseNameServer; - d.FixedRegion = this.FixedRegion; - d.BestRegionSummaryFromStorage = this.BestRegionSummaryFromStorage; - d.Server = this.Server; - d.Port = this.Port; - d.ProxyServer = this.ProxyServer; - d.Protocol = this.Protocol; - d.AuthMode = this.AuthMode; - d.EnableLobbyStatistics = this.EnableLobbyStatistics; - d.NetworkLogging = this.NetworkLogging; - d.EnableProtocolFallback = this.EnableProtocolFallback; - return d; - } - } -} \ No newline at end of file diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/AppSettings.cs.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/AppSettings.cs.meta deleted file mode 100644 index 8ab73cb81..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/AppSettings.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a53d5fb81b78605468c7b0ff013c849d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/ConnectionHandler.cs b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/ConnectionHandler.cs deleted file mode 100644 index 4ac39eeee..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/ConnectionHandler.cs +++ /dev/null @@ -1,186 +0,0 @@ -// ---------------------------------------------------------------------------- -// -// Loadbalancing Framework for Photon - Copyright (C) 2018 Exit Games GmbH -// -// -// If the game logic does not call Service() for whatever reason, this keeps the connection. -// -// developer@photonengine.com -// ---------------------------------------------------------------------------- - - -#if UNITY_4_7 || UNITY_5 || UNITY_5_3_OR_NEWER -#define SUPPORTED_UNITY -#endif - - -namespace Photon.Realtime -{ - using System; - using SupportClass = ExitGames.Client.Photon.SupportClass; - - #if SUPPORTED_UNITY - using UnityEngine; - #endif - - - #if SUPPORTED_UNITY - public class ConnectionHandler : MonoBehaviour - #else - public class ConnectionHandler - #endif - { - /// - /// Photon client to log information and statistics from. - /// - public LoadBalancingClient Client { get; set; } - - private byte fallbackThreadId = 255; - - private bool didSendAcks; - private int startedAckingTimestamp; - private int deltaSinceStartedToAck; - - /// Defines for how long the Fallback Thread should keep the connection, before it may time out as usual. - /// We want to the Client to keep it's connection when an app is in the background (and doesn't call Update / Service Clients should not keep their connection indefinitely in the background, so after some milliseconds, the Fallback Thread should stop keeping it up. - public int KeepAliveInBackground = 60000; - - /// Counts how often the Fallback Thread called SendAcksOnly, which is purely of interest to monitor if the game logic called SendOutgoingCommands as intended. - public int CountSendAcksOnly { get; private set; } - - public bool FallbackThreadRunning - { - get { return this.fallbackThreadId < 255; } - } - - - #if SUPPORTED_UNITY - - #if UNITY_2019_4_OR_NEWER - - /// - /// Resets statics for Domain Reload - /// - [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] - static void StaticReset() - { - AppQuits = false; - } - - #endif - - /// Keeps the ConnectionHandler, even if a new scene gets loaded. - public bool ApplyDontDestroyOnLoad = true; - - /// Indicates that the app is closing. Set in OnApplicationQuit(). - [NonSerialized] - public static bool AppQuits; - - /// Called by Unity when the application gets closed. The UnityEngine will also call OnDisable, which disconnects. - protected void OnApplicationQuit() - { - AppQuits = true; - } - - - /// - protected virtual void Awake() - { - if (this.ApplyDontDestroyOnLoad) - { - DontDestroyOnLoad(this.gameObject); - } - } - - /// Called by Unity when the application gets closed. Disconnects if OnApplicationQuit() was called before. - protected virtual void OnDisable() - { - this.StopFallbackSendAckThread(); - - if (AppQuits) - { - if (this.Client != null && this.Client.IsConnected) - { - this.Client.Disconnect(); - this.Client.LoadBalancingPeer.StopThread(); - } - - SupportClass.StopAllBackgroundCalls(); - } - } - - #endif - - - public void StartFallbackSendAckThread() - { - #if !UNITY_WEBGL - if (this.FallbackThreadRunning) - { - return; - } - - #if UNITY_SWITCH - this.fallbackThreadId = SupportClass.StartBackgroundCalls(this.RealtimeFallbackThread, 50); // as workaround, we don't name the Thread. - #else - this.fallbackThreadId = SupportClass.StartBackgroundCalls(this.RealtimeFallbackThread, 50, "RealtimeFallbackThread"); - #endif - #endif - } - - public void StopFallbackSendAckThread() - { - #if !UNITY_WEBGL - if (!this.FallbackThreadRunning) - { - return; - } - - SupportClass.StopBackgroundCalls(this.fallbackThreadId); - this.fallbackThreadId = 255; - #endif - } - - - /// A thread which runs independent from the Update() calls. Keeps connections online while loading or in background. See . - public bool RealtimeFallbackThread() - { - if (this.Client != null) - { - if (!this.Client.IsConnected) - { - this.didSendAcks = false; - return true; - } - - if (this.Client.LoadBalancingPeer.ConnectionTime - this.Client.LoadBalancingPeer.LastSendOutgoingTime > 100) - { - if (this.didSendAcks) - { - // check if the client should disconnect after some seconds in background - this.deltaSinceStartedToAck = Environment.TickCount - this.startedAckingTimestamp; - if (this.deltaSinceStartedToAck > this.KeepAliveInBackground) - { - return true; - } - } - else - { - this.startedAckingTimestamp = Environment.TickCount; - } - - - this.didSendAcks = true; - this.CountSendAcksOnly++; - this.Client.LoadBalancingPeer.SendAcksOnly(); - } - else - { - this.didSendAcks = false; - } - } - - return true; - } - } -} \ No newline at end of file diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/ConnectionHandler.cs.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/ConnectionHandler.cs.meta deleted file mode 100644 index 2ccd07743..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/ConnectionHandler.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: ca21514fadd666444803e4f1e29331c8 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/CustomTypesUnity.cs b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/CustomTypesUnity.cs deleted file mode 100644 index 5ec33aba3..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/CustomTypesUnity.cs +++ /dev/null @@ -1,148 +0,0 @@ -// ---------------------------------------------------------------------------- -// -// PhotonNetwork Framework for Unity - Copyright (C) 2018 Exit Games GmbH -// -// -// Sets up support for Unity-specific types. Can be a blueprint how to register your own Custom Types for sending. -// -// developer@exitgames.com -// ---------------------------------------------------------------------------- - -#if UNITY_4_7 || UNITY_5 || UNITY_5_3_OR_NEWER -#define SUPPORTED_UNITY -#endif - -#if SUPPORTED_UNITY -namespace Photon.Realtime -{ - using Photon.Realtime; - using ExitGames.Client.Photon; - using UnityEngine; - using Debug = UnityEngine.Debug; - - - /// - /// Internally used class, containing de/serialization methods for various Unity-specific classes. - /// Adding those to the Photon serialization protocol allows you to send them in events, etc. - /// - internal static class CustomTypesUnity - { - /// Register de/serializer methods for Unity specific types. Makes the types usable in RaiseEvent and PUN. - internal static void Register() - { - PhotonPeer.RegisterType(typeof(Vector2), (byte) 'W', SerializeVector2, DeserializeVector2); - PhotonPeer.RegisterType(typeof(Vector3), (byte) 'V', SerializeVector3, DeserializeVector3); - PhotonPeer.RegisterType(typeof(Quaternion), (byte) 'Q', SerializeQuaternion, DeserializeQuaternion); - } - - - #region Custom De/Serializer Methods - - public static readonly byte[] memVector3 = new byte[3 * 4]; - - private static short SerializeVector3(StreamBuffer outStream, object customobject) - { - Vector3 vo = (Vector3) customobject; - - int index = 0; - lock (memVector3) - { - byte[] bytes = memVector3; - Protocol.Serialize(vo.x, bytes, ref index); - Protocol.Serialize(vo.y, bytes, ref index); - Protocol.Serialize(vo.z, bytes, ref index); - outStream.Write(bytes, 0, 3 * 4); - } - - return 3 * 4; - } - - private static object DeserializeVector3(StreamBuffer inStream, short length) - { - Vector3 vo = new Vector3(); - lock (memVector3) - { - inStream.Read(memVector3, 0, 3 * 4); - int index = 0; - Protocol.Deserialize(out vo.x, memVector3, ref index); - Protocol.Deserialize(out vo.y, memVector3, ref index); - Protocol.Deserialize(out vo.z, memVector3, ref index); - } - - return vo; - } - - - public static readonly byte[] memVector2 = new byte[2 * 4]; - - private static short SerializeVector2(StreamBuffer outStream, object customobject) - { - Vector2 vo = (Vector2) customobject; - lock (memVector2) - { - byte[] bytes = memVector2; - int index = 0; - Protocol.Serialize(vo.x, bytes, ref index); - Protocol.Serialize(vo.y, bytes, ref index); - outStream.Write(bytes, 0, 2 * 4); - } - - return 2 * 4; - } - - private static object DeserializeVector2(StreamBuffer inStream, short length) - { - Vector2 vo = new Vector2(); - lock (memVector2) - { - inStream.Read(memVector2, 0, 2 * 4); - int index = 0; - Protocol.Deserialize(out vo.x, memVector2, ref index); - Protocol.Deserialize(out vo.y, memVector2, ref index); - } - - return vo; - } - - - public static readonly byte[] memQuarternion = new byte[4 * 4]; - - private static short SerializeQuaternion(StreamBuffer outStream, object customobject) - { - Quaternion o = (Quaternion) customobject; - - lock (memQuarternion) - { - byte[] bytes = memQuarternion; - int index = 0; - Protocol.Serialize(o.w, bytes, ref index); - Protocol.Serialize(o.x, bytes, ref index); - Protocol.Serialize(o.y, bytes, ref index); - Protocol.Serialize(o.z, bytes, ref index); - outStream.Write(bytes, 0, 4 * 4); - } - - return 4 * 4; - } - - private static object DeserializeQuaternion(StreamBuffer inStream, short length) - { - Quaternion o = new Quaternion(); - - lock (memQuarternion) - { - inStream.Read(memQuarternion, 0, 4 * 4); - int index = 0; - Protocol.Deserialize(out o.w, memQuarternion, ref index); - Protocol.Deserialize(out o.x, memQuarternion, ref index); - Protocol.Deserialize(out o.y, memQuarternion, ref index); - Protocol.Deserialize(out o.z, memQuarternion, ref index); - } - - return o; - } - - #endregion - } -} -#endif \ No newline at end of file diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/CustomTypesUnity.cs.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/CustomTypesUnity.cs.meta deleted file mode 100644 index 660c3f072..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/CustomTypesUnity.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c41ee868d8540674982e160cf16e0775 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Extensions.cs b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Extensions.cs deleted file mode 100644 index 40511c381..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Extensions.cs +++ /dev/null @@ -1,215 +0,0 @@ -// ---------------------------------------------------------------------------- -// -// Photon Extensions - Copyright (C) 2018 Exit Games GmbH -// -// -// Provides some helpful methods and extensions for Hashtables, etc. -// -// developer@photonengine.com -// ---------------------------------------------------------------------------- - -#if UNITY_4_7 || UNITY_5 || UNITY_5_3_OR_NEWER -#define SUPPORTED_UNITY -#endif - - -namespace Photon.Realtime -{ - using System.Collections; - using System.Collections.Generic; - using ExitGames.Client.Photon; - - #if SUPPORTED_UNITY - using UnityEngine; - using Debug = UnityEngine.Debug; - #endif - #if SUPPORTED_UNITY || NETFX_CORE - using Hashtable = ExitGames.Client.Photon.Hashtable; - using SupportClass = ExitGames.Client.Photon.SupportClass; - #endif - - - /// - /// This static class defines some useful extension methods for several existing classes (e.g. Vector3, float and others). - /// - public static class Extensions - { - /// - /// Merges all keys from addHash into the target. Adds new keys and updates the values of existing keys in target. - /// - /// The IDictionary to update. - /// The IDictionary containing data to merge into target. - public static void Merge(this IDictionary target, IDictionary addHash) - { - if (addHash == null || target.Equals(addHash)) - { - return; - } - - foreach (object key in addHash.Keys) - { - target[key] = addHash[key]; - } - } - - /// - /// Merges keys of type string to target Hashtable. - /// - /// - /// Does not remove keys from target (so non-string keys CAN be in target if they were before). - /// - /// The target IDicitionary passed in plus all string-typed keys from the addHash. - /// A IDictionary that should be merged partly into target to update it. - public static void MergeStringKeys(this IDictionary target, IDictionary addHash) - { - if (addHash == null || target.Equals(addHash)) - { - return; - } - - foreach (object key in addHash.Keys) - { - // only merge keys of type string - if (key is string) - { - target[key] = addHash[key]; - } - } - } - - /// Helper method for debugging of IDictionary content, inlcuding type-information. Using this is not performant. - /// Should only be used for debugging as necessary. - /// Some Dictionary or Hashtable. - /// String of the content of the IDictionary. - public static string ToStringFull(this IDictionary origin) - { - return SupportClass.DictionaryToString(origin, false); - } - - /// Helper method for debugging of List content. Using this is not performant. - /// Should only be used for debugging as necessary. - /// Any List where T implements .ToString(). - /// A comma-separated string containing each value's ToString(). - public static string ToStringFull(this List data) - { - if (data == null) return "null"; - - string[] sb = new string[data.Count]; - for (int i = 0; i < data.Count; i++) - { - object o = data[i]; - sb[i] = (o != null) ? o.ToString() : "null"; - } - - return string.Join(", ", sb); - } - - /// Helper method for debugging of object[] content. Using this is not performant. - /// Should only be used for debugging as necessary. - /// Any object[]. - /// A comma-separated string containing each value's ToString(). - public static string ToStringFull(this object[] data) - { - if (data == null) return "null"; - - string[] sb = new string[data.Length]; - for (int i = 0; i < data.Length; i++) - { - object o = data[i]; - sb[i] = (o != null) ? o.ToString() : "null"; - } - - return string.Join(", ", sb); - } - - - /// - /// This method copies all string-typed keys of the original into a new Hashtable. - /// - /// - /// Does not recurse (!) into hashes that might be values in the root-hash. - /// This does not modify the original. - /// - /// The original IDictonary to get string-typed keys from. - /// New Hashtable containing only string-typed keys of the original. - public static Hashtable StripToStringKeys(this IDictionary original) - { - Hashtable target = new Hashtable(); - if (original != null) - { - foreach (object key in original.Keys) - { - if (key is string) - { - target[key] = original[key]; - } - } - } - - return target; - } - - - /// Used by StripKeysWithNullValues. - /// - /// By making keysWithNullValue a static variable to clear before using, allocations only happen during the warm-up phase - /// as the list needs to grow. Once it hit the high water mark for keys you need to remove. - /// - private static readonly List keysWithNullValue = new List(); - - /// Removes all keys with null values. - /// - /// Photon properties are removed by setting their value to null. Changes the original IDictionary! - /// Uses lock(keysWithNullValue), which should be no problem in expected use cases. - /// - /// The IDictionary to strip of keys with null value. - public static void StripKeysWithNullValues(this IDictionary original) - { - lock (keysWithNullValue) - { - keysWithNullValue.Clear(); - - foreach (DictionaryEntry entry in original) - { - if (entry.Value == null) - { - keysWithNullValue.Add(entry.Key); - } - } - - for (int i = 0; i < keysWithNullValue.Count; i++) - { - var key = keysWithNullValue[i]; - original.Remove(key); - } - } - } - - - /// - /// Checks if a particular integer value is in an int-array. - /// - /// This might be useful to look up if a particular actorNumber is in the list of players of a room. - /// The array of ints to check. - /// The number to lookup in target. - /// True if nr was found in target. - public static bool Contains(this int[] target, int nr) - { - if (target == null) - { - return false; - } - - for (int index = 0; index < target.Length; index++) - { - if (target[index] == nr) - { - return true; - } - } - - return false; - } - } -} - diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Extensions.cs.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Extensions.cs.meta deleted file mode 100644 index 8057e3265..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Extensions.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7c44a529f6327f74192c77c930615b6e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/FriendInfo.cs b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/FriendInfo.cs deleted file mode 100644 index 378e92015..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/FriendInfo.cs +++ /dev/null @@ -1,48 +0,0 @@ -// ---------------------------------------------------------------------------- -// -// Loadbalancing Framework for Photon - Copyright (C) 2018 Exit Games GmbH -// -// -// Collection of values related to a user / friend. -// -// developer@photonengine.com -// ---------------------------------------------------------------------------- - -#if UNITY_4_7 || UNITY_5 || UNITY_5_3_OR_NEWER -#define SUPPORTED_UNITY -#endif - - -namespace Photon.Realtime -{ - using ExitGames.Client.Photon; - - #if SUPPORTED_UNITY || NETFX_CORE - using Hashtable = ExitGames.Client.Photon.Hashtable; - using SupportClass = ExitGames.Client.Photon.SupportClass; - #endif - - - /// - /// Used to store info about a friend's online state and in which room he/she is. - /// - public class FriendInfo - { - [System.Obsolete("Use UserId.")] - public string Name { get { return this.UserId; } } - public string UserId { get; internal protected set; } - - public bool IsOnline { get; internal protected set; } - public string Room { get; internal protected set; } - - public bool IsInRoom - { - get { return this.IsOnline && !string.IsNullOrEmpty(this.Room); } - } - - public override string ToString() - { - return string.Format("{0}\t is: {1}", this.UserId, (!this.IsOnline) ? "offline" : this.IsInRoom ? "playing" : "on master"); - } - } -} diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/FriendInfo.cs.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/FriendInfo.cs.meta deleted file mode 100644 index c963b7153..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/FriendInfo.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: db008a1bee8a5754ba96b896a503e212 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/LoadBalancingClient.cs b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/LoadBalancingClient.cs deleted file mode 100644 index 01921e076..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/LoadBalancingClient.cs +++ /dev/null @@ -1,4331 +0,0 @@ -// ----------------------------------------------------------------------- -// -// Loadbalancing Framework for Photon - Copyright (C) 2018 Exit Games GmbH -// -// -// Provides the operations and a state for games using the -// Photon LoadBalancing server. -// -// developer@photonengine.com -// ---------------------------------------------------------------------------- - -#if UNITY_4_7 || UNITY_5 || UNITY_5_3_OR_NEWER -#define SUPPORTED_UNITY -#endif - - -namespace Photon.Realtime -{ - using System; - using System.Collections; - using System.Collections.Generic; - using System.Diagnostics; - using ExitGames.Client.Photon; - - #if SUPPORTED_UNITY - using UnityEngine; - using Debug = UnityEngine.Debug; - #endif - #if SUPPORTED_UNITY || NETFX_CORE - using Hashtable = ExitGames.Client.Photon.Hashtable; - using SupportClass = ExitGames.Client.Photon.SupportClass; - #endif - - - #region Enums - - /// - /// State values for a client, which handles switching Photon server types, some operations, etc. - /// - /// \ingroup publicApi - public enum ClientState - { - /// Peer is created but not used yet. - PeerCreated, - - /// Transition state while connecting to a server. On the Photon Cloud this sends the AppId and AuthenticationValues (UserID). - Authenticating, - - /// Not Used. - Authenticated, - - /// The client sent an OpJoinLobby and if this was done on the Master Server, it will result in. Depending on the lobby, it gets room listings. - JoiningLobby, - - /// The client is in a lobby, connected to the MasterServer. Depending on the lobby, it gets room listings. - JoinedLobby, - - /// Transition from MasterServer to GameServer. - DisconnectingFromMasterServer, - [Obsolete("Renamed to DisconnectingFromMasterServer")] - DisconnectingFromMasterserver = DisconnectingFromMasterServer, - - /// Transition to GameServer (client authenticates and joins/creates a room). - ConnectingToGameServer, - [Obsolete("Renamed to ConnectingToGameServer")] - ConnectingToGameserver = ConnectingToGameServer, - - /// Connected to GameServer (going to auth and join game). - ConnectedToGameServer, - [Obsolete("Renamed to ConnectedToGameServer")] - ConnectedToGameserver = ConnectedToGameServer, - - /// Transition state while joining or creating a room on GameServer. - Joining, - - /// The client entered a room. The CurrentRoom and Players are known and you can now raise events. - Joined, - - /// Transition state when leaving a room. - Leaving, - - /// Transition from GameServer to MasterServer (after leaving a room/game). - DisconnectingFromGameServer, - [Obsolete("Renamed to DisconnectingFromGameServer")] - DisconnectingFromGameserver = DisconnectingFromGameServer, - - /// Connecting to MasterServer (includes sending authentication values). - ConnectingToMasterServer, - [Obsolete("Renamed to ConnectingToMasterServer.")] - ConnectingToMasterserver = ConnectingToMasterServer, - - /// The client disconnects (from any server). This leads to state Disconnected. - Disconnecting, - - /// The client is no longer connected (to any server). Connect to MasterServer to go on. - Disconnected, - - /// Connected to MasterServer. You might use matchmaking or join a lobby now. - ConnectedToMasterServer, - [Obsolete("Renamed to ConnectedToMasterServer.")] - ConnectedToMasterserver = ConnectedToMasterServer, - [Obsolete("Renamed to ConnectedToMasterServer.")] - ConnectedToMaster = ConnectedToMasterServer, - - /// Client connects to the NameServer. This process includes low level connecting and setting up encryption. When done, state becomes ConnectedToNameServer. - ConnectingToNameServer, - - /// Client is connected to the NameServer and established encryption already. You should call OpGetRegions or ConnectToRegionMaster. - ConnectedToNameServer, - - /// Clients disconnects (specifically) from the NameServer (usually to connect to the MasterServer). - DisconnectingFromNameServer, - - /// Client was unable to connect to Name Server and will attempt to connect with an alternative network protocol (TCP). - ConnectWithFallbackProtocol - } - - - /// - /// Internal state, how this peer gets into a particular room (joining it or creating it). - /// - internal enum JoinType - { - /// This client creates a room, gets into it (no need to join) and can set room properties. - CreateRoom, - /// The room existed already and we join into it (not setting room properties). - JoinRoom, - /// Done on Master Server and (if successful) followed by a Join on Game Server. - JoinRandomRoom, - /// Done on Master Server and (if successful) followed by a Join or Create on Game Server. - JoinRandomOrCreateRoom, - /// Client is either joining or creating a room. On Master- and Game-Server. - JoinOrCreateRoom - } - - /// Enumeration of causes for Disconnects (used in LoadBalancingClient.DisconnectedCause). - /// Read the individual descriptions to find out what to do about this type of disconnect. - public enum DisconnectCause - { - /// No error was tracked. - None, - /// OnStatusChanged: The server is not available or the address is wrong. Make sure the port is provided and the server is up. - ExceptionOnConnect, - /// OnStatusChanged: Some internal exception caused the socket code to fail. This may happen if you attempt to connect locally but the server is not available. In doubt: Contact Exit Games. - Exception, - - /// OnStatusChanged: The server disconnected this client due to timing out (missing acknowledgement from the client). - ServerTimeout, - - /// OnStatusChanged: This client detected that the server's responses are not received in due time. - ClientTimeout, - - /// OnStatusChanged: The server disconnected this client from within the room's logic (the C# code). - DisconnectByServerLogic, - /// OnStatusChanged: The server disconnected this client for unknown reasons. - DisconnectByServerReasonUnknown, - - /// OnOperationResponse: Authenticate in the Photon Cloud with invalid AppId. Update your subscription or contact Exit Games. - InvalidAuthentication, - /// OnOperationResponse: Authenticate in the Photon Cloud with invalid client values or custom authentication setup in Cloud Dashboard. - CustomAuthenticationFailed, - /// The authentication ticket should provide access to any Photon Cloud server without doing another authentication-service call. However, the ticket expired. - AuthenticationTicketExpired, - /// OnOperationResponse: Authenticate (temporarily) failed when using a Photon Cloud subscription without CCU Burst. Update your subscription. - MaxCcuReached, - - /// OnOperationResponse: Authenticate when the app's Photon Cloud subscription is locked to some (other) region(s). Update your subscription or master server address. - InvalidRegion, - - /// OnOperationResponse: Operation that's (currently) not available for this client (not authorized usually). Only tracked for op Authenticate. - OperationNotAllowedInCurrentState, - /// OnStatusChanged: The client disconnected from within the logic (the C# code). - DisconnectByClientLogic, - - /// The client called an operation too frequently and got disconnected due to hitting the OperationLimit. This triggers a client-side disconnect, too. - /// To protect the server, some operations have a limit. When an OperationResponse fails with ErrorCode.OperationLimitReached, the client disconnects. - DisconnectByOperationLimit, - - /// The client received a "Disconnect Message" from the server. Check the debug logs for details. - DisconnectByDisconnectMessage - } - - /// Available server (types) for internally used field: server. - /// Photon uses 3 different roles of servers: Name Server, Master Server and Game Server. - public enum ServerConnection - { - /// This server is where matchmaking gets done and where clients can get lists of rooms in lobbies. - MasterServer, - /// This server handles a number of rooms to execute and relay the messages between players (in a room). - GameServer, - /// This server is used initially to get the address (IP) of a Master Server for a specific region. Not used for Photon OnPremise (self hosted). - NameServer - } - - /// - /// Defines how the communication gets encrypted. - /// - public enum EncryptionMode - { - /// - /// This is the default encryption mode: Messages get encrypted only on demand (when you send operations with the "encrypt" parameter set to true). - /// - PayloadEncryption, - /// - /// With this encryption mode for UDP, the connection gets setup and all further datagrams get encrypted almost entirely. On-demand message encryption (like in PayloadEncryption) is unavailable. - /// - DatagramEncryption = 10, - /// - /// With this encryption mode for UDP, the connection gets setup with random sequence numbers and all further datagrams get encrypted almost entirely. On-demand message encryption (like in PayloadEncryption) is unavailable. - /// - DatagramEncryptionRandomSequence = 11, - ///// - ///// Same as above except that GCM mode is used to encrypt data. - ///// - //DatagramEncryptionGCMRandomSequence = 12, - /// - /// Datagram Encryption with GCM. - /// - DatagramEncryptionGCM = 13, - } - - - public static class EncryptionDataParameters - { - /// - /// Key for encryption mode - /// - public const byte Mode = 0; - /// - /// Key for first secret - /// - public const byte Secret1 = 1; - /// - /// Key for second secret - /// - public const byte Secret2 = 2; - } - - /// Container for port definitions. - public struct PhotonPortDefinition - { - public static readonly PhotonPortDefinition AlternativeUdpPorts = new PhotonPortDefinition() { NameServerPort = 27000, MasterServerPort = 27001, GameServerPort = 27002}; - - /// Typical ports: UDP: 5058 or 27000, TCP: 4533, WSS: 19093 or 443. - public ushort NameServerPort; - /// Typical ports: UDP: 5056 or 27002, TCP: 4530, WSS: 19090 or 443. - public ushort MasterServerPort; - /// Typical ports: UDP: 5055 or 27001, TCP: 4531, WSS: 19091 or 443. - public ushort GameServerPort; - } - - - #endregion - - - /// - /// This class implements the Photon LoadBalancing workflow by using a LoadBalancingPeer. - /// It keeps a state and will automatically execute transitions between the Master and Game Servers. - /// - /// - /// This class (and the Player class) should be extended to implement your own game logic. - /// You can override CreatePlayer as "factory" method for Players and return your own Player instances. - /// The State of this class is essential to know when a client is in a lobby (or just on the master) - /// and when in a game where the actual gameplay should take place. - /// Extension notes: - /// An extension of this class should override the methods of the IPhotonPeerListener, as they - /// are called when the state changes. Call base.method first, then pick the operation or state you - /// want to react to and put it in a switch-case. - /// We try to provide demo to each platform where this api can be used, so lookout for those. - /// - public class LoadBalancingClient : IPhotonPeerListener - { - /// - /// The client uses a LoadBalancingPeer as API to communicate with the server. - /// This is public for ease-of-use: Some methods like OpRaiseEvent are not relevant for the connection state and don't need a override. - /// - public LoadBalancingPeer LoadBalancingPeer { get; private set; } - - /// - /// Gets or sets the binary protocol version used by this client - /// - /// - /// Use this always instead of setting it via - /// () directly, especially when WSS protocol is used. - /// - public SerializationProtocol SerializationProtocol - { - get - { - return this.LoadBalancingPeer.SerializationProtocolType; - } - set - { - this.LoadBalancingPeer.SerializationProtocolType = value; - } - } - - /// The version of your client. A new version also creates a new "virtual app" to separate players from older client versions. - public string AppVersion { get; set; } - - /// The AppID as assigned from the Photon Cloud. If you host yourself, this is the "regular" Photon Server Application Name (most likely: "LoadBalancing"). - public string AppId { get; set; } - - - /// User authentication values to be sent to the Photon server right after connecting. - /// Set this property or pass AuthenticationValues by Connect(..., authValues). - public AuthenticationValues AuthValues { get; set; } - - /// Enables the new Authentication workflow. - public AuthModeOption AuthMode = AuthModeOption.Auth; - - /// Defines how the communication gets encrypted. - public EncryptionMode EncryptionMode = EncryptionMode.PayloadEncryption; - - /// Optionally contains a protocol which will be used on Master- and GameServer. - /// - /// When using AuthMode = AuthModeOption.AuthOnceWss, the client uses a wss-connection on the NameServer but another protocol on the other servers. - /// As the NameServer sends an address, which is different per protocol, it needs to know the expected protocol. - /// - /// This is nullable by design. In many cases, the protocol on the NameServer is not different from the other servers. - /// If set, the operation AuthOnce will contain this value and the OpAuth response on the NameServer will execute a protocol switch. - /// - public ConnectionProtocol? ExpectedProtocol { get; private set; } - - - ///Simplifies getting the token for connect/init requests, if this feature is enabled. - private object TokenForInit - { - get - { - if (this.AuthMode == AuthModeOption.Auth) - { - return null; - } - return (this.AuthValues != null) ? this.AuthValues.Token : null; - } - } - - /// Internally used cache for the server's token. Identifies a user/session and can be used to rejoin. - private object tokenCache; - - - /// True if this client uses a NameServer to get the Master Server address. - /// This value is public, despite being an internal value, which should only be set by this client. - public bool IsUsingNameServer { get; set; } - - /// Name Server Host Name for Photon Cloud. Without port and without any prefix. - public string NameServerHost = "ns.exitgames.com"; - - /// Name Server Address for Photon Cloud (based on current protocol). You can use the default values and usually won't have to set this value. - public string NameServerAddress { get { return this.GetNameServerAddress(); } } - - /// Name Server port per protocol (the UDP port is different than TCP, etc). - private static readonly Dictionary ProtocolToNameServerPort = new Dictionary() { { ConnectionProtocol.Udp, 5058 }, { ConnectionProtocol.Tcp, 4533 }, { ConnectionProtocol.WebSocket, 9093 }, { ConnectionProtocol.WebSocketSecure, 19093 } }; //, { ConnectionProtocol.RHttp, 6063 } }; - - - /// Replaced by ServerPortOverrides. - [Obsolete("Set port overrides in ServerPortOverrides. Not used anymore!")] - public bool UseAlternativeUdpPorts { get; set; } - - - /// Defines overrides for server ports. Used per server-type if > 0. Important: You must change these when the protocol changes! - /// - /// Typical ports are listed in PhotonPortDefinition. - /// - /// Instead of using the port provided from the servers, the specified port is used (independent of the protocol). - /// If a value is 0 (default), the port is not being replaced. - /// - /// Different protocols have different typical ports per server-type. - /// https://doc.photonengine.com/en-us/pun/current/reference/tcp-and-udp-port-numbers - /// - /// In case of using the AuthMode AutOnceWss, the name server's protocol is wss, while udp or tcp will be used on the master server and game server. - /// Set the ports accordingly per protocol and server. - /// - public PhotonPortDefinition ServerPortOverrides; - - - /// Enables a fallback to another protocol in case a connect to the Name Server fails. - /// - /// When connecting to the Name Server fails for a first time, the client will select an alternative - /// network protocol and re-try to connect. - /// - /// The fallback will use the default Name Server port as defined by ProtocolToNameServerPort. - /// - /// The fallback for TCP is UDP. All other protocols fallback to TCP. - /// - public bool EnableProtocolFallback { get; set; } - - /// The currently used server address (if any). The type of server is define by Server property. - public string CurrentServerAddress { get { return this.LoadBalancingPeer.ServerAddress; } } - - /// Your Master Server address. In PhotonCloud, call ConnectToRegionMaster() to find your Master Server. - /// - /// In the Photon Cloud, explicit definition of a Master Server Address is not best practice. - /// The Photon Cloud has a "Name Server" which redirects clients to a specific Master Server (per Region and AppId). - /// - public string MasterServerAddress { get; set; } - - /// The game server's address for a particular room. In use temporarily, as assigned by master. - public string GameServerAddress { get; protected internal set; } - - /// The server this client is currently connected or connecting to. - /// - /// Each server (NameServer, MasterServer, GameServer) allow some operations and reject others. - /// - public ServerConnection Server { get; private set; } - - /// - /// Defines a proxy URL for WebSocket connections. Can be the proxy or point to a .pac file. - /// - /// - /// This URL supports various definitions: - /// - /// "user:pass@proxyaddress:port"
- /// "proxyaddress:port"
- /// "system:"
- /// "pac:"
- /// "pac:http://host/path/pacfile.pac"
- /// - /// Important: Don't define a protocol, except to point to a pac file. the proxy address should not begin with http:// or https://. - ///
- public string ProxyServerAddress; - - /// Backing field for property. - private ClientState state = ClientState.PeerCreated; - - /// Current state this client is in. Careful: several states are "transitions" that lead to other states. - public ClientState State - { - get - { - return this.state; - } - - set - { - if (this.state == value) - { - return; - } - ClientState previousState = this.state; - this.state = value; - if (StateChanged != null) StateChanged(previousState, this.state); - } - } - - /// Returns if this client is currently connected or connecting to some type of server. - /// This is even true while switching servers. Use IsConnectedAndReady to check only for those states that enable you to send Operations. - public bool IsConnected { get { return this.LoadBalancingPeer != null && this.State != ClientState.PeerCreated && this.State != ClientState.Disconnected; } } - - - /// - /// A refined version of IsConnected which is true only if your connection is ready to send operations. - /// - /// - /// Not all operations can be called on all types of servers. If an operation is unavailable on the currently connected server, - /// this will result in a OperationResponse with ErrorCode != 0. - /// - /// Examples: The NameServer allows OpGetRegions which is not available anywhere else. - /// The MasterServer does not allow you to send events (OpRaiseEvent) and on the GameServer you are unable to join a lobby (OpJoinLobby). - /// - /// To check which server you are on, use: . - /// - public bool IsConnectedAndReady - { - get - { - if (this.LoadBalancingPeer == null) - { - return false; - } - - switch (this.State) - { - case ClientState.PeerCreated: - case ClientState.Disconnected: - case ClientState.Disconnecting: - case ClientState.DisconnectingFromGameServer: - case ClientState.DisconnectingFromMasterServer: - case ClientState.DisconnectingFromNameServer: - case ClientState.Authenticating: - case ClientState.ConnectingToGameServer: - case ClientState.ConnectingToMasterServer: - case ClientState.ConnectingToNameServer: - case ClientState.Joining: - case ClientState.Leaving: - return false; // we are not ready to execute any operations - } - - return true; - } - } - - - /// Register a method to be called when this client's ClientState gets set. - /// This can be useful to react to being connected, joined into a room, etc. - public event Action StateChanged; - - /// Register a method to be called when an event got dispatched. Gets called after the LoadBalancingClient handled the internal events first. - /// - /// This is an alternative to extending LoadBalancingClient to override OnEvent(). - /// - /// Note that OnEvent is calling EventReceived after it handled internal events first. - /// That means for example: Joining players will already be in the player list but leaving - /// players will already be removed from the room. - /// - public event Action EventReceived; - - /// Register a method to be called when an operation response is received. - /// - /// This is an alternative to extending LoadBalancingClient to override OnOperationResponse(). - /// - /// Note that OnOperationResponse gets executed before your Action is called. - /// That means for example: The OpJoinLobby response already set the state to "JoinedLobby" - /// and the response to OpLeave already triggered the Disconnect before this is called. - /// - public event Action OpResponseReceived; - - - /// Wraps up the target objects for a group of callbacks, so they can be called conveniently. - /// By using Add or Remove, objects can "subscribe" or "unsubscribe" for this group of callbacks. - public ConnectionCallbacksContainer ConnectionCallbackTargets; - - /// Wraps up the target objects for a group of callbacks, so they can be called conveniently. - /// By using Add or Remove, objects can "subscribe" or "unsubscribe" for this group of callbacks. - public MatchMakingCallbacksContainer MatchMakingCallbackTargets; - - /// Wraps up the target objects for a group of callbacks, so they can be called conveniently. - /// By using Add or Remove, objects can "subscribe" or "unsubscribe" for this group of callbacks. - internal InRoomCallbacksContainer InRoomCallbackTargets; - - /// Wraps up the target objects for a group of callbacks, so they can be called conveniently. - /// By using Add or Remove, objects can "subscribe" or "unsubscribe" for this group of callbacks. - internal LobbyCallbacksContainer LobbyCallbackTargets; - - /// Wraps up the target objects for a group of callbacks, so they can be called conveniently. - /// By using Add or Remove, objects can "subscribe" or "unsubscribe" for this group of callbacks. - internal WebRpcCallbacksContainer WebRpcCallbackTargets; - - - /// Wraps up the target objects for a group of callbacks, so they can be called conveniently. - /// By using Add or Remove, objects can "subscribe" or "unsubscribe" for this group of callbacks. - internal ErrorInfoCallbacksContainer ErrorInfoCallbackTargets; - - /// Summarizes (aggregates) the different causes for disconnects of a client. - /// - /// A disconnect can be caused by: errors in the network connection or some vital operation failing - /// (which is considered "high level"). While operations always trigger a call to OnOperationResponse, - /// connection related changes are treated in OnStatusChanged. - /// The DisconnectCause is set in either case and summarizes the causes for any disconnect in a single - /// state value which can be used to display (or debug) the cause for disconnection. - /// - public DisconnectCause DisconnectedCause { get; protected set; } - - - /// Internal value if the client is in a lobby. - /// This is used to re-set this.State, when joining/creating a room fails. - public bool InLobby - { - get { return this.State == ClientState.JoinedLobby; } - } - - /// The lobby this client currently uses. Defined when joining a lobby or creating rooms - public TypedLobby CurrentLobby { get; internal set; } - - /// - /// If enabled, the client will get a list of available lobbies from the Master Server. - /// - /// - /// Set this value before the client connects to the Master Server. While connected to the Master - /// Server, a change has no effect. - /// - /// Implement OptionalInfoCallbacks.OnLobbyStatisticsUpdate, to get the list of used lobbies. - /// - /// The lobby statistics can be useful if your title dynamically uses lobbies, depending (e.g.) - /// on current player activity or such. - /// In this case, getting a list of available lobbies, their room-count and player-count can - /// be useful info. - /// - /// ConnectUsingSettings sets this to the PhotonServerSettings value. - /// - public bool EnableLobbyStatistics; - - /// Internal lobby stats cache, used by LobbyStatistics. - private readonly List lobbyStatistics = new List(); - - - /// The local player is never null but not valid unless the client is in a room, too. The ID will be -1 outside of rooms. - public Player LocalPlayer { get; internal set; } - - /// - /// The nickname of the player (synced with others). Same as client.LocalPlayer.NickName. - /// - public string NickName - { - get - { - return this.LocalPlayer.NickName; - } - - set - { - if (this.LocalPlayer == null) - { - return; - } - - this.LocalPlayer.NickName = value; - } - } - - - /// An ID for this user. Sent in OpAuthenticate when you connect. If not set, the PlayerName is applied during connect. - /// - /// On connect, if the UserId is null or empty, the client will copy the PlayName to UserId. If PlayerName is not set either - /// (before connect), the server applies a temporary ID which stays unknown to this client and other clients. - /// - /// The UserId is what's used in FindFriends and for fetching data for your account (with WebHooks e.g.). - /// - /// By convention, set this ID before you connect, not while being connected. - /// There is no error but the ID won't change while being connected. - /// - public string UserId - { - get - { - if (this.AuthValues != null) - { - return this.AuthValues.UserId; - } - return null; - } - set - { - if (this.AuthValues == null) - { - this.AuthValues = new AuthenticationValues(); - } - this.AuthValues.UserId = value; - } - } - - /// The current room this client is connected to (null if none available). - public Room CurrentRoom { get; set; } - - - /// Is true while being in a room (this.state == ClientState.Joined). - /// - /// Aside from polling this value, game logic should implement IMatchmakingCallbacks in some class - /// and react when that gets called.
- /// OpRaiseEvent, OpLeave and some other operations can only be used (successfully) when the client is in a room.. - ///
- public bool InRoom - { - get - { - return this.state == ClientState.Joined && this.CurrentRoom != null; - } - } - - /// Statistic value available on master server: Players on master (looking for games). - public int PlayersOnMasterCount { get; internal set; } - - /// Statistic value available on master server: Players in rooms (playing). - public int PlayersInRoomsCount { get; internal set; } - - /// Statistic value available on master server: Rooms currently created. - public int RoomsCount { get; internal set; } - - - /// Internally used to decide if a room must be created or joined on game server. - private JoinType lastJoinType; - - /// Used when the client arrives on the GS, to join the room with the correct values. - private EnterRoomParams enterRoomParamsCache; - - /// Used to cache a failed "enter room" operation on the Game Server, to return to the Master Server before calling a fail-callback. - private OperationResponse failedRoomEntryOperation; - - - /// Maximum of userIDs that can be sent in one friend list request. - private const int FriendRequestListMax = 512; - - /// Contains the list of names of friends to look up their state on the server. - private string[] friendListRequested; - - /// Internal flag to know if the client currently fetches a friend list. - public bool IsFetchingFriendList { get { return this.friendListRequested != null; } } - - - /// The cloud region this client connects to. Set by ConnectToRegionMaster(). Not set if you don't use a NameServer! - public string CloudRegion { get; private set; } - - /// The cluster name provided by the Name Server. - /// - /// The value is provided by the OpResponse for OpAuthenticate/OpAuthenticateOnce. - /// Default: null. This value only ever updates from the Name Server authenticate response. - /// - public string CurrentCluster { get; private set; } - - /// Contains the list if enabled regions this client may use. Null, unless the client got a response to OpGetRegions. - public RegionHandler RegionHandler; - - /// Stores the best region summary of a previous session to speed up connecting. - private string bestRegionSummaryFromStorage; - - /// Set when the best region pinging is done. - public string SummaryToCache; - - /// Internal connection setting/flag. If the client should connect to the best region or not. - /// - /// It's set in the Connect...() methods. Only ConnectUsingSettings() sets it to true. - /// If true, client will ping available regions and select the best. - /// A bestRegionSummaryFromStorage can be used to cut the ping time short. - /// - private bool connectToBestRegion = true; - - - - private class CallbackTargetChange - { - public readonly object Target; - /// Add if true, remove if false. - public readonly bool AddTarget; - - public CallbackTargetChange(object target, bool addTarget) - { - this.Target = target; - this.AddTarget = addTarget; - } - } - - private readonly Queue callbackTargetChanges = new Queue(); - private readonly HashSet callbackTargets = new HashSet(); - - - /// Creates a LoadBalancingClient with UDP protocol or the one specified. - /// Specifies the network protocol to use for connections. - public LoadBalancingClient(ConnectionProtocol protocol = ConnectionProtocol.Udp) - { - this.ConnectionCallbackTargets = new ConnectionCallbacksContainer(this); - this.MatchMakingCallbackTargets = new MatchMakingCallbacksContainer(this); - this.InRoomCallbackTargets = new InRoomCallbacksContainer(this); - this.LobbyCallbackTargets = new LobbyCallbacksContainer(this); - this.WebRpcCallbackTargets = new WebRpcCallbacksContainer(this); - this.ErrorInfoCallbackTargets = new ErrorInfoCallbacksContainer(this); - - this.LoadBalancingPeer = new LoadBalancingPeer(this, protocol); - this.LoadBalancingPeer.OnDisconnectMessage += this.OnDisconnectMessageReceived; - this.SerializationProtocol = SerializationProtocol.GpBinaryV18; - this.LocalPlayer = this.CreatePlayer(string.Empty, -1, true, null); //TODO: Check if we can do this later - - - #if SUPPORTED_UNITY - CustomTypesUnity.Register(); - #endif - - #if UNITY_WEBGL - if (this.LoadBalancingPeer.TransportProtocol == ConnectionProtocol.Tcp || this.LoadBalancingPeer.TransportProtocol == ConnectionProtocol.Udp) - { - this.LoadBalancingPeer.Listener.DebugReturn(DebugLevel.WARNING, "WebGL requires WebSockets. Switching TransportProtocol to WebSocketSecure."); - this.LoadBalancingPeer.TransportProtocol = ConnectionProtocol.WebSocketSecure; - } - #endif - - this.State = ClientState.PeerCreated; - } - - - /// Creates a LoadBalancingClient, setting various values needed before connecting. - /// The Master Server's address to connect to. Used in Connect. - /// The AppId of this title. Needed for the Photon Cloud. Find it in the Dashboard. - /// A version for this client/build. In the Photon Cloud, players are separated by AppId, GameVersion and Region. - /// Specifies the network protocol to use for connections. - public LoadBalancingClient(string masterAddress, string appId, string gameVersion, ConnectionProtocol protocol = ConnectionProtocol.Udp) : this(protocol) - { - this.MasterServerAddress = masterAddress; - this.AppId = appId; - this.AppVersion = gameVersion; - } - - public int NameServerPortInAppSettings; - - /// - /// Gets the NameServer Address (with prefix and port), based on the set protocol (this.LoadBalancingPeer.UsedProtocol). - /// - /// NameServer Address (with prefix and port). - private string GetNameServerAddress() - { - var protocolPort = 0; - ProtocolToNameServerPort.TryGetValue(this.LoadBalancingPeer.TransportProtocol, out protocolPort); - - if (this.NameServerPortInAppSettings != 0) - { - this.DebugReturn(DebugLevel.INFO, string.Format("Using NameServerPortInAppSettings: {0}", this.NameServerPortInAppSettings)); - protocolPort = this.NameServerPortInAppSettings; - } - - if (this.ServerPortOverrides.NameServerPort > 0) - { - protocolPort = this.ServerPortOverrides.NameServerPort; - } - - switch (this.LoadBalancingPeer.TransportProtocol) - { - case ConnectionProtocol.Udp: - case ConnectionProtocol.Tcp: - return string.Format("{0}:{1}", NameServerHost, protocolPort); - case ConnectionProtocol.WebSocket: - return string.Format("ws://{0}:{1}", NameServerHost, protocolPort); - case ConnectionProtocol.WebSocketSecure: - return string.Format("wss://{0}:{1}", NameServerHost, protocolPort); - default: - throw new ArgumentOutOfRangeException(); - } - } - - - #region Operations and Commands - - - // needed connect variants: - // connect to Name Server only (could include getregions) -> end after getregions - // connect to Region Master via Name Server (specific region/cluster) -> no getregions! authenticates and ends after on connected to master - // connect to Best Region via Name Server - // connect to Master Server (no Name Server, no appid) - - public virtual bool ConnectUsingSettings(AppSettings appSettings) - { - if (appSettings == null) - { - this.DebugReturn(DebugLevel.ERROR, "ConnectUsingSettings failed. The appSettings can't be null.'"); - return false; - } - - this.AppId = appSettings.AppIdRealtime; - this.AppVersion = appSettings.AppVersion; - - this.IsUsingNameServer = appSettings.UseNameServer; - this.CloudRegion = appSettings.FixedRegion; - - this.EnableLobbyStatistics = appSettings.EnableLobbyStatistics; - this.LoadBalancingPeer.DebugOut = appSettings.NetworkLogging; - - this.AuthMode = appSettings.AuthMode; - this.LoadBalancingPeer.TransportProtocol = (this.AuthMode == AuthModeOption.AuthOnceWss) ? ConnectionProtocol.WebSocketSecure : appSettings.Protocol; - this.ExpectedProtocol = appSettings.Protocol; - this.EnableProtocolFallback = appSettings.EnableProtocolFallback; - - this.connectToBestRegion = true; - this.bestRegionSummaryFromStorage = appSettings.BestRegionSummaryFromStorage; - this.DisconnectedCause = DisconnectCause.None; - - - this.CheckConnectSetupWebGl(); - this.CheckConnectSetupXboxOne(); // may throw an exception if there are issues that can not be corrected - - - if (this.IsUsingNameServer) - { - this.Server = ServerConnection.NameServer; - if (!appSettings.IsDefaultNameServer) - { - this.NameServerHost = appSettings.Server; - } - - this.ProxyServerAddress = appSettings.ProxyServer; - this.NameServerPortInAppSettings = appSettings.Port; - if (!this.LoadBalancingPeer.Connect(this.NameServerAddress, this.ProxyServerAddress, this.AppId, this.TokenForInit)) - { - return false; - } - - this.State = ClientState.ConnectingToNameServer; - } - else - { - this.Server = ServerConnection.MasterServer; - int portToUse = appSettings.IsDefaultPort ? 5055 : appSettings.Port; // TODO: setup new (default) port config - this.MasterServerAddress = string.Format("{0}:{1}", appSettings.Server, portToUse); - this.SerializationProtocol = SerializationProtocol.GpBinaryV16; // this is a workaround to use On Premises Servers, which don't support GpBinaryV18 yet. - if (!this.LoadBalancingPeer.Connect(this.MasterServerAddress, this.ProxyServerAddress, this.AppId, this.TokenForInit)) - { - return false; - } - - this.State = ClientState.ConnectingToMasterServer; - } - - return true; - } - - - [Obsolete("Use ConnectToMasterServer() instead.")] - public bool Connect() - { - return this.ConnectToMasterServer(); - } - - /// - /// Starts the "process" to connect to a Master Server, using MasterServerAddress and AppId properties. - /// - /// - /// To connect to the Photon Cloud, use ConnectUsingSettings() or ConnectToRegionMaster(). - /// - /// The process to connect includes several steps: the actual connecting, establishing encryption, authentification - /// (of app and optionally the user) and connecting to the MasterServer - /// - /// Users can connect either anonymously or use "Custom Authentication" to verify each individual player's login. - /// Custom Authentication in Photon uses external services and communities to verify users. While the client provides a user's info, - /// the service setup is done in the Photon Cloud Dashboard. - /// The parameter authValues will set this.AuthValues and use them in the connect process. - /// - /// Connecting to the Photon Cloud might fail due to: - /// - Network issues (OnStatusChanged() StatusCode.ExceptionOnConnect) - /// - Region not available (OnOperationResponse() for OpAuthenticate with ReturnCode == ErrorCode.InvalidRegion) - /// - Subscription CCU limit reached (OnOperationResponse() for OpAuthenticate with ReturnCode == ErrorCode.MaxCcuReached) - /// - public virtual bool ConnectToMasterServer() - { - // we check if try to connect to a self-hosted Photon Server - if (string.IsNullOrEmpty(this.AppId) || !this.IsUsingNameServer) - { - // this is a workaround to use with version v4.0.29.11263 or lower, which doesn't support GpBinaryV18 yet. - this.SerializationProtocol = SerializationProtocol.GpBinaryV16; - } - - - this.CheckConnectSetupWebGl(); - this.CheckConnectSetupXboxOne(); // may throw an exception if there are issues that can not be corrected - - - this.connectToBestRegion = false; - this.DisconnectedCause = DisconnectCause.None; - if (this.LoadBalancingPeer.Connect(this.MasterServerAddress, this.ProxyServerAddress, this.AppId, this.TokenForInit)) - { - this.State = ClientState.ConnectingToMasterServer; - this.Server = ServerConnection.MasterServer; - return true; - } - - return false; - } - - - /// - /// Connects to the NameServer for Photon Cloud, where a region and server list can be obtained. - /// - /// - /// If the workflow was started or failed right away. - public bool ConnectToNameServer() - { - this.IsUsingNameServer = true; - this.CloudRegion = null; - - - this.CheckConnectSetupWebGl(); - this.CheckConnectSetupXboxOne(); // may throw an exception if there are issues that can not be corrected - - - if (this.AuthMode == AuthModeOption.AuthOnceWss) - { - if (this.ExpectedProtocol == null) - { - this.ExpectedProtocol = this.LoadBalancingPeer.TransportProtocol; - } - this.LoadBalancingPeer.TransportProtocol = ConnectionProtocol.WebSocketSecure; - } - - this.connectToBestRegion = false; - this.DisconnectedCause = DisconnectCause.None; - if (!this.LoadBalancingPeer.Connect(this.NameServerAddress, this.ProxyServerAddress, "NameServer", this.TokenForInit)) - { - return false; - } - - this.State = ClientState.ConnectingToNameServer; - this.Server = ServerConnection.NameServer; - return true; - } - - /// - /// Connects you to a specific region's Master Server, using the Name Server to find the IP. - /// - /// - /// If the region is null or empty, no connection will be made. - /// If the region (code) provided is not available, the connection process will fail on the Name Server. - /// This method connects only to the region defined. No "Best Region" pinging will be done. - /// - /// If the region string does not contain a "/", this means no specific cluster is requested. - /// To support "Sharding", the region gets a "/*" postfix in this case, to select a random cluster. - /// - /// If the operation could be sent. If false, no operation was sent. - public bool ConnectToRegionMaster(string region) - { - if (string.IsNullOrEmpty(region)) - { - this.DebugReturn(DebugLevel.ERROR, "ConnectToRegionMaster() failed. The region can not be null or empty."); - return false; - } - - this.IsUsingNameServer = true; - - if (this.State == ClientState.Authenticating) - { - if (this.LoadBalancingPeer.DebugOut >= DebugLevel.INFO) - { - this.DebugReturn(DebugLevel.INFO, "ConnectToRegionMaster() will skip calling authenticate, as the current state is 'Authenticating'. Just wait for the result."); - } - return true; - } - - if (this.State == ClientState.ConnectedToNameServer) - { - this.CloudRegion = region; - - bool authenticating = this.CallAuthenticate(); - if (authenticating) - { - this.State = ClientState.Authenticating; - } - - return authenticating; - } - - - this.LoadBalancingPeer.Disconnect(); - - if (!string.IsNullOrEmpty(region) && !region.Contains("/")) - { - region = region + "/*"; - } - this.CloudRegion = region; - - - this.CheckConnectSetupWebGl(); - this.CheckConnectSetupXboxOne(); // may throw an exception if there are issues that can not be corrected - - - if (this.AuthMode == AuthModeOption.AuthOnceWss) - { - if (this.ExpectedProtocol == null) - { - this.ExpectedProtocol = this.LoadBalancingPeer.TransportProtocol; - } - this.LoadBalancingPeer.TransportProtocol = ConnectionProtocol.WebSocketSecure; - } - - this.connectToBestRegion = false; - this.DisconnectedCause = DisconnectCause.None; - if (!this.LoadBalancingPeer.Connect(this.NameServerAddress, this.ProxyServerAddress, "NameServer", null)) - { - return false; - } - - this.State = ClientState.ConnectingToNameServer; - this.Server = ServerConnection.NameServer; - return true; - } - - [Conditional("UNITY_WEBGL")] - private void CheckConnectSetupWebGl() - { - #if UNITY_WEBGL - if (this.LoadBalancingPeer.TransportProtocol != ConnectionProtocol.WebSocket && this.LoadBalancingPeer.TransportProtocol != ConnectionProtocol.WebSocketSecure) - { - this.DebugReturn(DebugLevel.WARNING, "WebGL requires WebSockets. Switching TransportProtocol to WebSocketSecure."); - this.LoadBalancingPeer.TransportProtocol = ConnectionProtocol.WebSocketSecure; - } - - this.EnableProtocolFallback = false; // no fallback on WebGL - #endif - } - - [Conditional("UNITY_XBOXONE"), Conditional("UNITY_GAMECORE")] - private void CheckConnectSetupXboxOne() - { - #if UNITY_XBOXONE || UNITY_GAMECORE - this.AuthMode = AuthModeOption.Auth; - if (this.AuthValues == null) - { - this.DebugReturn(DebugLevel.ERROR, "UNITY_XBOXONE builds must set AuthValues. Set this before calling any Connect method. Refer to the online docs for guidance."); - throw new Exception("UNITY_XBOXONE builds must set AuthValues."); - } - if (this.AuthValues.AuthPostData == null) - { - this.DebugReturn(DebugLevel.ERROR,"UNITY_XBOXONE builds must use Photon's XBox Authentication and set the XSTS token by calling: PhotonNetwork.AuthValues.SetAuthPostData(xstsToken). Refer to the online docs for guidance."); - throw new Exception("UNITY_XBOXONE builds must use Photon's XBox Authentication."); - } - if (this.AuthValues.AuthType != CustomAuthenticationType.Xbox) - { - this.DebugReturn(DebugLevel.WARNING, "UNITY_XBOXONE builds must use AuthValues.AuthType \"CustomAuthenticationType.Xbox\". PUN sets this value now. Refer to the online docs to avoid this warning."); - this.AuthValues.AuthType = CustomAuthenticationType.Xbox; - } - if (this.LoadBalancingPeer.TransportProtocol != ConnectionProtocol.WebSocketSecure) - { - this.DebugReturn(DebugLevel.INFO, "UNITY_XBOXONE builds must use WSS (Secure WebSockets) as Transport Protocol. Changing the protocol now."); - this.LoadBalancingPeer.TransportProtocol = ConnectionProtocol.WebSocketSecure; - } - - this.EnableProtocolFallback = false; // no fallback on Xbox One - #endif - } - - /// - /// Privately used only for reconnecting. - /// - private bool Connect(string serverAddress, string proxyServerAddress, ServerConnection serverType) - { - // TODO: Make sure app doesn't quit right now - - if (this.State == ClientState.Disconnecting) - { - this.DebugReturn(DebugLevel.ERROR, "Connect() failed. Can't connect while disconnecting (still). Current state: " + this.State); - return false; - } - - - // connect might fail, if the DNS name can't be resolved or if no network connection is available - this.DisconnectedCause = DisconnectCause.None; - bool connecting = this.LoadBalancingPeer.Connect(serverAddress, proxyServerAddress, this.AppId, this.TokenForInit); - - if (connecting) - { - this.Server = serverType; - - switch (serverType) - { - case ServerConnection.NameServer: - State = ClientState.ConnectingToNameServer; - break; - case ServerConnection.MasterServer: - State = ClientState.ConnectingToMasterServer; - break; - case ServerConnection.GameServer: - State = ClientState.ConnectingToGameServer; - break; - } - } - - return connecting; - } - - - /// Can be used to reconnect to the master server after a disconnect. - /// Common use case: Press the Lock Button on a iOS device and you get disconnected immediately. - public bool ReconnectToMaster() - { - if (this.AuthValues == null) - { - this.DebugReturn(DebugLevel.WARNING, "ReconnectToMaster() with AuthValues == null is not correct!"); - this.AuthValues = new AuthenticationValues(); - } - this.AuthValues.Token = this.tokenCache; - - return this.Connect(this.MasterServerAddress, this.ProxyServerAddress, ServerConnection.MasterServer); - } - - /// - /// Can be used to return to a room quickly, by directly reconnecting to a game server to rejoin a room. - /// - /// - /// Rejoining room will not send any player properties. Instead client will receive up-to-date ones from server. - /// If you want to set new player properties, do it once rejoined. - /// - /// False, if the conditions are not met. Then, this client does not attempt the ReconnectAndRejoin. - public bool ReconnectAndRejoin() - { - if (string.IsNullOrEmpty(this.GameServerAddress)) - { - this.DebugReturn(DebugLevel.WARNING, "ReconnectAndRejoin() failed. It seems the client wasn't connected to a game server before (no address)."); - return false; - } - if (this.enterRoomParamsCache == null) - { - this.DebugReturn(DebugLevel.WARNING, "ReconnectAndRejoin() failed. It seems the client doesn't have any previous room to re-join."); - return false; - } - if (this.tokenCache == null) - { - this.DebugReturn(DebugLevel.WARNING, "ReconnectAndRejoin() failed. It seems the client doesn't have any previous authentication token to re-connect."); - return false; - } - - if (this.AuthValues == null) - { - this.AuthValues = new AuthenticationValues(); - } - this.AuthValues.Token = this.tokenCache; - - - if (!string.IsNullOrEmpty(this.GameServerAddress) && this.enterRoomParamsCache != null) - { - this.lastJoinType = JoinType.JoinRoom; - this.enterRoomParamsCache.JoinMode = JoinMode.RejoinOnly; - return this.Connect(this.GameServerAddress, this.ProxyServerAddress, ServerConnection.GameServer); - } - - return false; - } - - - /// Disconnects the peer from a server or stays disconnected. If the client / peer was connected, a callback will be triggered. - /// - /// This method will not change the current State, if this client State is PeerCreated, Disconnecting or Disconnected. - /// In those cases, there is also no callback for the disconnect. The DisconnectedCause will only change if the client was connected. - /// - public void Disconnect(DisconnectCause cause = DisconnectCause.DisconnectByClientLogic) - { - if (this.State == ClientState.Disconnecting || this.State == ClientState.PeerCreated) - { - this.DebugReturn(DebugLevel.INFO, "Disconnect() call gets skipped due to State " + this.State + ". DisconnectedCause: " + this.DisconnectedCause + " Parameter cause: " + cause); - return; - } - - if (this.State != ClientState.Disconnected) - { - this.State = ClientState.Disconnecting; - this.DisconnectedCause = cause; - this.LoadBalancingPeer.Disconnect(); - } - } - - - /// - /// Private Disconnect variant that sets the state, too. - /// - private void DisconnectToReconnect() - { - switch (this.Server) - { - case ServerConnection.NameServer: - this.State = ClientState.DisconnectingFromNameServer; - break; - case ServerConnection.MasterServer: - this.State = ClientState.DisconnectingFromMasterServer; - break; - case ServerConnection.GameServer: - this.State = ClientState.DisconnectingFromGameServer; - break; - } - - this.LoadBalancingPeer.Disconnect(); - } - - /// - /// Useful to test loss of connection which will end in a client timeout. This modifies LoadBalancingPeer.NetworkSimulationSettings. Read remarks. - /// - /// - /// Use with care as this sets LoadBalancingPeer.IsSimulationEnabled.
- /// Read LoadBalancingPeer.IsSimulationEnabled to check if this is on or off, if needed.
- /// - /// If simulateTimeout is true, LoadBalancingPeer.NetworkSimulationSettings.IncomingLossPercentage and - /// LoadBalancingPeer.NetworkSimulationSettings.OutgoingLossPercentage will be set to 100.
- /// Obviously, this overrides any network simulation settings done before.
- /// - /// If you want fine-grained network simulation control, use the NetworkSimulationSettings.
- /// - /// The timeout will lead to a call to , as usual in a client timeout. - /// - /// You could modify this method (or use NetworkSimulationSettings) to deliberately run into a server timeout by - /// just setting the OutgoingLossPercentage = 100 and the IncomingLossPercentage = 0. - ///
- /// If true, a connection loss is simulated. If false, the simulation ends. - public void SimulateConnectionLoss(bool simulateTimeout) - { - this.DebugReturn(DebugLevel.WARNING, "SimulateConnectionLoss() set to: "+simulateTimeout); - - if (simulateTimeout) - { - this.LoadBalancingPeer.NetworkSimulationSettings.IncomingLossPercentage = 100; - this.LoadBalancingPeer.NetworkSimulationSettings.OutgoingLossPercentage = 100; - } - - this.LoadBalancingPeer.IsSimulationEnabled = simulateTimeout; - } - - private bool CallAuthenticate() - { - if (this.IsUsingNameServer && this.Server != ServerConnection.NameServer && (this.AuthValues == null || this.AuthValues.Token == null)) - { - this.DebugReturn(DebugLevel.ERROR, "Authenticate without Token is only allowed on Name Server. Current server: " + this.Server + " on: " + this.CurrentServerAddress + ". State: " + this.State); - } - - if (this.AuthMode == AuthModeOption.Auth) - { - if (!this.CheckIfOpCanBeSent(OperationCode.Authenticate, this.Server, "Authenticate")) - { - return false; - } - return this.LoadBalancingPeer.OpAuthenticate(this.AppId, this.AppVersion, this.AuthValues, this.CloudRegion, (this.EnableLobbyStatistics && this.Server == ServerConnection.MasterServer)); - } - else - { - if (!this.CheckIfOpCanBeSent(OperationCode.AuthenticateOnce, this.Server, "AuthenticateOnce")) - { - return false; - } - - ConnectionProtocol targetProtocolPastNameServer = this.ExpectedProtocol != null ? (ConnectionProtocol) this.ExpectedProtocol : this.LoadBalancingPeer.TransportProtocol; - return this.LoadBalancingPeer.OpAuthenticateOnce(this.AppId, this.AppVersion, this.AuthValues, this.CloudRegion, this.EncryptionMode, targetProtocolPastNameServer); - } - } - - - /// - /// This method dispatches all available incoming commands and then sends this client's outgoing commands. - /// It uses DispatchIncomingCommands and SendOutgoingCommands to do that. - /// - /// - /// The Photon client libraries are designed to fit easily into a game or application. The application - /// is in control of the context (thread) in which incoming events and responses are executed and has - /// full control of the creation of UDP/TCP packages. - /// - /// Sending packages and dispatching received messages are two separate tasks. Service combines them - /// into one method at the cost of control. It calls DispatchIncomingCommands and SendOutgoingCommands. - /// - /// Call this method regularly (10..50 times a second). - /// - /// This will Dispatch ANY received commands (unless a reliable command in-order is still missing) and - /// events AND will send queued outgoing commands. Fewer calls might be more effective if a device - /// cannot send many packets per second, as multiple operations might be combined into one package. - /// - /// - /// You could replace Service by: - /// - /// while (DispatchIncomingCommands()); //Dispatch until everything is Dispatched... - /// SendOutgoingCommands(); //Send a UDP/TCP package with outgoing messages - /// - /// - /// - public void Service() - { - if (this.LoadBalancingPeer != null) - { - this.LoadBalancingPeer.Service(); - } - } - - - /// - /// While on the NameServer, this gets you the list of regional servers (short names and their IPs to ping them). - /// - /// If the operation could be sent. If false, no operation was sent (e.g. while not connected to the NameServer). - private bool OpGetRegions() - { - if (!this.CheckIfOpCanBeSent(OperationCode.GetRegions, this.Server, "GetRegions")) - { - return false; - } - - bool sent = this.LoadBalancingPeer.OpGetRegions(this.AppId); - return sent; - } - - - /// - /// Request the rooms and online status for a list of friends. All clients should set a unique UserId before connecting. The result is available in this.FriendList. - /// - /// - /// Used on Master Server to find the rooms played by a selected list of users. - /// The result will be stored in LoadBalancingClient.FriendList, which is null before the first server response. - /// - /// Users identify themselves by setting a UserId in the LoadBalancingClient instance. - /// This will send the ID in OpAuthenticate during connect (to master and game servers). - /// Note: Changing a player's name doesn't make sense when using a friend list. - /// - /// The list of usernames must be fetched from some other source (not provided by Photon). - /// - /// - /// Internal:
- /// The server response includes 2 arrays of info (each index matching a friend from the request):
- /// ParameterCode.FindFriendsResponseOnlineList = bool[] of online states
- /// ParameterCode.FindFriendsResponseRoomIdList = string[] of room names (empty string if not in a room)
- ///
- /// The options may be used to define which state a room must match to be returned. - ///
- /// Array of friend's names (make sure they are unique). - /// Options that affect the result of the FindFriends operation. - /// If the operation could be sent (requires connection). - public bool OpFindFriends(string[] friendsToFind, FindFriendsOptions options = null) - { - if (!this.CheckIfOpCanBeSent(OperationCode.FindFriends, this.Server, "FindFriends")) - { - return false; - } - - if (this.IsFetchingFriendList) - { - this.DebugReturn(DebugLevel.WARNING, "OpFindFriends skipped: already fetching friends list."); - return false; // fetching friends currently, so don't do it again (avoid changing the list while fetching friends) - } - - if (friendsToFind == null || friendsToFind.Length == 0) - { - this.DebugReturn(DebugLevel.ERROR, "OpFindFriends skipped: friendsToFind array is null or empty."); - return false; - } - - if (friendsToFind.Length > FriendRequestListMax) - { - this.DebugReturn(DebugLevel.ERROR, string.Format("OpFindFriends skipped: friendsToFind array exceeds allowed length of {0}.", FriendRequestListMax)); - return false; - } - - List friendsList = new List(friendsToFind.Length); - for (int i = 0; i < friendsToFind.Length; i++) - { - string friendUserId = friendsToFind[i]; - if (string.IsNullOrEmpty(friendUserId)) - { - this.DebugReturn(DebugLevel.WARNING, - string.Format( - "friendsToFind array contains a null or empty UserId, element at position {0} skipped.", - i)); - } - else if (friendUserId.Equals(UserId)) - { - this.DebugReturn(DebugLevel.WARNING, - string.Format( - "friendsToFind array contains local player's UserId \"{0}\", element at position {1} skipped.", - friendUserId, - i)); - } - else if (friendsList.Contains(friendUserId)) - { - this.DebugReturn(DebugLevel.WARNING, - string.Format( - "friendsToFind array contains duplicate UserId \"{0}\", element at position {1} skipped.", - friendUserId, - i)); - } - else - { - friendsList.Add(friendUserId); - } - } - - if (friendsList.Count == 0) - { - this.DebugReturn(DebugLevel.ERROR, "OpFindFriends skipped: friends list to find is empty."); - return false; - } - - string[] filteredArray = friendsList.ToArray(); - bool sent = this.LoadBalancingPeer.OpFindFriends(filteredArray, options); - this.friendListRequested = sent ? filteredArray : null; - - return sent; - } - - /// If already connected to a Master Server, this joins the specified lobby. This request triggers an OnOperationResponse() call and the callback OnJoinedLobby(). - /// The lobby to join. Use null for default lobby. - /// If the operation could be sent. False, if the client is not IsConnectedAndReady or when it's not connected to a Master Server. - public bool OpJoinLobby(TypedLobby lobby) - { - if (!this.CheckIfOpCanBeSent(OperationCode.JoinLobby, this.Server, "JoinLobby")) - { - return false; - } - - if (lobby == null) - { - lobby = TypedLobby.Default; - } - bool sent = this.LoadBalancingPeer.OpJoinLobby(lobby); - if (sent) - { - this.CurrentLobby = lobby; - this.State = ClientState.JoiningLobby; - } - - return sent; - } - - - /// Opposite of joining a lobby. You don't have to explicitly leave a lobby to join another (client can be in one max, at any time). - /// If the operation could be sent (has to be connected). - public bool OpLeaveLobby() - { - if (!this.CheckIfOpCanBeSent(OperationCode.LeaveLobby, this.Server, "LeaveLobby")) - { - return false; - } - return this.LoadBalancingPeer.OpLeaveLobby(); - } - - - /// - /// Joins a random room that matches the filter. Will callback: OnJoinedRoom or OnJoinRandomFailed. - /// - /// - /// Used for random matchmaking. You can join any room or one with specific properties defined in opJoinRandomRoomParams. - /// - /// You can use expectedCustomRoomProperties and expectedMaxPlayers as filters for accepting rooms. - /// If you set expectedCustomRoomProperties, a room must have the exact same key values set at Custom Properties. - /// You need to define which Custom Room Properties will be available for matchmaking when you create a room. - /// See: OpCreateRoom(string roomName, RoomOptions roomOptions, TypedLobby lobby) - /// - /// This operation fails if no rooms are fitting or available (all full, closed or not visible). - /// It may also fail when actually joining the room which was found. Rooms may close, become full or empty anytime. - /// - /// This method can only be called while the client is connected to a Master Server so you should - /// implement the callback OnConnectedToMaster. - /// Check the return value to make sure the operation will be called on the server. - /// Note: There will be no callbacks if this method returned false. - /// - /// - /// This client's State is set to ClientState.Joining immediately, when the operation could - /// be called. In the background, the client will switch servers and call various related operations. - /// - /// When you're in the room, this client's State will become ClientState.Joined. - /// - /// - /// When entering a room, this client's Player Custom Properties will be sent to the room. - /// Use LocalPlayer.SetCustomProperties to set them, even while not yet in the room. - /// Note that the player properties will be cached locally and are not wiped when leaving a room. - /// - /// More about matchmaking: - /// https://doc.photonengine.com/en-us/realtime/current/reference/matchmaking-and-lobby - /// - /// You can define an array of expectedUsers, to block player slots in the room for these users. - /// The corresponding feature in Photon is called "Slot Reservation" and can be found in the doc pages. - /// - /// Optional definition of properties to filter rooms in random matchmaking. - /// If the operation could be sent currently (requires connection to Master Server). - public bool OpJoinRandomRoom(OpJoinRandomRoomParams opJoinRandomRoomParams = null) - { - if (!this.CheckIfOpCanBeSent(OperationCode.JoinRandomGame, this.Server, "JoinRandomGame")) - { - return false; - } - - if (opJoinRandomRoomParams == null) - { - opJoinRandomRoomParams = new OpJoinRandomRoomParams(); - } - - this.enterRoomParamsCache = new EnterRoomParams(); - this.enterRoomParamsCache.Lobby = opJoinRandomRoomParams.TypedLobby; - this.enterRoomParamsCache.ExpectedUsers = opJoinRandomRoomParams.ExpectedUsers; - - - bool sending = this.LoadBalancingPeer.OpJoinRandomRoom(opJoinRandomRoomParams); - if (sending) - { - this.lastJoinType = JoinType.JoinRandomRoom; - this.State = ClientState.Joining; - } - return sending; - } - - - /// - /// Attempts to join a room that matches the specified filter and creates a room if none found. - /// - /// - /// This operation is a combination of filter-based random matchmaking with the option to create a new room, - /// if no fitting room exists. - /// The benefit of that is that the room creation is done by the same operation and the room can be found - /// by the very next client, looking for similar rooms. - /// - /// There are separate parameters for joining and creating a room. - /// - /// This method can only be called while connected to a Master Server. - /// This client's State is set to ClientState.Joining immediately. - /// - /// Either IMatchmakingCallbacks.OnJoinedRoom or IMatchmakingCallbacks.OnCreatedRoom get called. - /// - /// More about matchmaking: - /// https://doc.photonengine.com/en-us/realtime/current/reference/matchmaking-and-lobby - /// - /// Check the return value to make sure the operation will be called on the server. - /// Note: There will be no callbacks if this method returned false. - /// - /// If the operation will be sent (requires connection to Master Server). - public bool OpJoinRandomOrCreateRoom(OpJoinRandomRoomParams opJoinRandomRoomParams, EnterRoomParams createRoomParams) - { - if (!this.CheckIfOpCanBeSent(OperationCode.JoinRandomGame, this.Server, "OpJoinRandomOrCreateRoom")) - { - return false; - } - - if (opJoinRandomRoomParams == null) - { - opJoinRandomRoomParams = new OpJoinRandomRoomParams(); - } - if (createRoomParams == null) - { - createRoomParams = new EnterRoomParams(); - } - - createRoomParams.JoinMode = JoinMode.CreateIfNotExists; - this.enterRoomParamsCache = createRoomParams; - this.enterRoomParamsCache.Lobby = opJoinRandomRoomParams.TypedLobby; - this.enterRoomParamsCache.ExpectedUsers = opJoinRandomRoomParams.ExpectedUsers; - - - bool sending = this.LoadBalancingPeer.OpJoinRandomOrCreateRoom(opJoinRandomRoomParams, createRoomParams); - if (sending) - { - this.lastJoinType = JoinType.JoinRandomOrCreateRoom; - this.State = ClientState.Joining; - } - return sending; - } - - - - /// - /// Creates a new room. Will callback: OnCreatedRoom and OnJoinedRoom or OnCreateRoomFailed. - /// - /// - /// When successful, the client will enter the specified room and callback both OnCreatedRoom and OnJoinedRoom. - /// In all error cases, OnCreateRoomFailed gets called. - /// - /// Creating a room will fail if the room name is already in use or when the RoomOptions clashing - /// with one another. Check the EnterRoomParams reference for the various room creation options. - /// - /// - /// This method can only be called while the client is connected to a Master Server so you should - /// implement the callback OnConnectedToMaster. - /// Check the return value to make sure the operation will be called on the server. - /// Note: There will be no callbacks if this method returned false. - /// - /// - /// When you're in the room, this client's State will become ClientState.Joined. - /// - /// - /// When entering a room, this client's Player Custom Properties will be sent to the room. - /// Use LocalPlayer.SetCustomProperties to set them, even while not yet in the room. - /// Note that the player properties will be cached locally and are not wiped when leaving a room. - /// - /// You can define an array of expectedUsers, to block player slots in the room for these users. - /// The corresponding feature in Photon is called "Slot Reservation" and can be found in the doc pages. - /// - /// Definition of properties for the room to create. - /// If the operation could be sent currently (requires connection to Master Server). - public bool OpCreateRoom(EnterRoomParams enterRoomParams) - { - if (!this.CheckIfOpCanBeSent(OperationCode.CreateGame, this.Server, "CreateGame")) - { - return false; - } - bool onGameServer = this.Server == ServerConnection.GameServer; - enterRoomParams.OnGameServer = onGameServer; - if (!onGameServer) - { - this.enterRoomParamsCache = enterRoomParams; - } - - bool sending = this.LoadBalancingPeer.OpCreateRoom(enterRoomParams); - if (sending) - { - this.lastJoinType = JoinType.CreateRoom; - this.State = ClientState.Joining; - } - return sending; - } - - - /// - /// Joins a specific room by name and creates it on demand. Will callback: OnJoinedRoom or OnJoinRoomFailed. - /// - /// - /// Useful when players make up a room name to meet in: - /// All involved clients call the same method and whoever is first, also creates the room. - /// - /// When successful, the client will enter the specified room. - /// The client which creates the room, will callback both OnCreatedRoom and OnJoinedRoom. - /// Clients that join an existing room will only callback OnJoinedRoom. - /// In all error cases, OnJoinRoomFailed gets called. - /// - /// Joining a room will fail, if the room is full, closed or when the user - /// already is present in the room (checked by userId). - /// - /// To return to a room, use OpRejoinRoom. - /// - /// This method can only be called while the client is connected to a Master Server so you should - /// implement the callback OnConnectedToMaster. - /// Check the return value to make sure the operation will be called on the server. - /// Note: There will be no callbacks if this method returned false. - /// - /// This client's State is set to ClientState.Joining immediately, when the operation could - /// be called. In the background, the client will switch servers and call various related operations. - /// - /// When you're in the room, this client's State will become ClientState.Joined. - /// - /// - /// If you set room properties in roomOptions, they get ignored when the room is existing already. - /// This avoids changing the room properties by late joining players. - /// - /// When entering a room, this client's Player Custom Properties will be sent to the room. - /// Use LocalPlayer.SetCustomProperties to set them, even while not yet in the room. - /// Note that the player properties will be cached locally and are not wiped when leaving a room. - /// - /// You can define an array of expectedUsers, to block player slots in the room for these users. - /// The corresponding feature in Photon is called "Slot Reservation" and can be found in the doc pages. - /// - /// Definition of properties for the room to create or join. - /// If the operation could be sent currently (requires connection to Master Server). - public bool OpJoinOrCreateRoom(EnterRoomParams enterRoomParams) - { - bool onGameServer = this.Server == ServerConnection.GameServer; - enterRoomParams.JoinMode = JoinMode.CreateIfNotExists; - enterRoomParams.OnGameServer = onGameServer; - if (!onGameServer) - { - this.enterRoomParamsCache = enterRoomParams; - } - - bool sending = this.LoadBalancingPeer.OpJoinRoom(enterRoomParams); - if (sending) - { - this.lastJoinType = JoinType.JoinOrCreateRoom; - this.State = ClientState.Joining; - } - return sending; - } - - - /// - /// Joins a room by name. Will callback: OnJoinedRoom or OnJoinRoomFailed. - /// - /// - /// Useful when using lobbies or when players follow friends or invite each other. - /// - /// When successful, the client will enter the specified room and callback via OnJoinedRoom. - /// In all error cases, OnJoinRoomFailed gets called. - /// - /// Joining a room will fail if the room is full, closed, not existing or when the user - /// already is present in the room (checked by userId). - /// - /// To return to a room, use OpRejoinRoom. - /// When players invite each other and it's unclear who's first to respond, use OpJoinOrCreateRoom instead. - /// - /// This method can only be called while the client is connected to a Master Server so you should - /// implement the callback OnConnectedToMaster. - /// Check the return value to make sure the operation will be called on the server. - /// Note: There will be no callbacks if this method returned false. - /// - /// A room's name has to be unique (per region, appid and gameversion). - /// When your title uses a global matchmaking or invitations (e.g. an external solution), - /// keep regions and the game versions in mind to join a room. - /// - /// - /// This client's State is set to ClientState.Joining immediately, when the operation could - /// be called. In the background, the client will switch servers and call various related operations. - /// - /// When you're in the room, this client's State will become ClientState.Joined. - /// - /// - /// When entering a room, this client's Player Custom Properties will be sent to the room. - /// Use LocalPlayer.SetCustomProperties to set them, even while not yet in the room. - /// Note that the player properties will be cached locally and are not wiped when leaving a room. - /// - /// You can define an array of expectedUsers, to reserve player slots in the room for friends or party members. - /// The corresponding feature in Photon is called "Slot Reservation" and can be found in the doc pages. - /// - /// Definition of properties for the room to join. - /// If the operation could be sent currently (requires connection to Master Server). - public bool OpJoinRoom(EnterRoomParams enterRoomParams) - { - if (!this.CheckIfOpCanBeSent(OperationCode.JoinGame, this.Server, "JoinRoom")) - { - return false; - } - bool onGameServer = this.Server == ServerConnection.GameServer; - enterRoomParams.OnGameServer = onGameServer; - if (!onGameServer) - { - this.enterRoomParamsCache = enterRoomParams; - } - - bool sending = this.LoadBalancingPeer.OpJoinRoom(enterRoomParams); - if (sending) - { - this.lastJoinType = enterRoomParams.JoinMode == JoinMode.CreateIfNotExists ? JoinType.JoinOrCreateRoom : JoinType.JoinRoom; - this.State = ClientState.Joining; - } - return sending; - } - - - /// - /// Rejoins a room by roomName (using the userID internally to return). Will callback: OnJoinedRoom or OnJoinRoomFailed. - /// - /// - /// Used to return to a room, before this user was removed from the players list. - /// Internally, the userID will be checked by the server, to make sure this user is in the room (active or inactice). - /// - /// In contrast to join, this operation never adds a players to a room. It will attempt to retake an existing - /// spot in the playerlist or fail. This makes sure the client doean't accidentally join a room when the - /// game logic meant to re-activate an existing actor in an existing room. - /// - /// This method will fail on the server, when the room does not exist, can't be loaded (persistent rooms) or - /// when the userId is not in the player list of this room. This will lead to a callback OnJoinRoomFailed. - /// - /// Rejoining room will not send any player properties. Instead client will receive up-to-date ones from server. - /// If you want to set new player properties, do it once rejoined. - /// - public bool OpRejoinRoom(string roomName) - { - bool onGameServer = this.Server == ServerConnection.GameServer; - - EnterRoomParams opParams = new EnterRoomParams(); - this.enterRoomParamsCache = opParams; - opParams.RoomName = roomName; - opParams.OnGameServer = onGameServer; - opParams.JoinMode = JoinMode.RejoinOnly; - - bool sending = this.LoadBalancingPeer.OpJoinRoom(opParams); - if (sending) - { - this.lastJoinType = JoinType.JoinRoom; - this.State = ClientState.Joining; - } - return sending; - } - - - /// - /// Leaves the current room, optionally telling the server that the user is just becoming inactive. Will callback: OnLeftRoom. - /// - /// - /// - /// OpLeaveRoom skips execution when the room is null or the server is not GameServer or the client is disconnecting from GS already. - /// OpLeaveRoom returns false in those cases and won't change the state, so check return of this method. - /// - /// In some cases, this method will skip the OpLeave call and just call Disconnect(), - /// which not only leaves the room but also the server. Disconnect also triggers a leave and so that workflow is is quicker. - /// - /// If true, this player becomes inactive in the game and can return later (if PlayerTTL of the room is != 0). - /// WebFlag: Securely transmit the encrypted object AuthCookie to the web service in PathLeave webhook when available - /// If the current room could be left (impossible while not in a room). - public bool OpLeaveRoom(bool becomeInactive, bool sendAuthCookie = false) - { - if (!this.CheckIfOpCanBeSent(OperationCode.Leave, this.Server, "LeaveRoom")) - { - return false; - } - - this.State = ClientState.Leaving; - return this.LoadBalancingPeer.OpLeaveRoom(becomeInactive, sendAuthCookie); - } - - - /// Gets a list of rooms matching the (non empty) SQL filter for the given SQL-typed lobby. - /// - /// Operation is only available for lobbies of type SqlLobby and the filter can not be empty. - /// It will check those conditions and fail locally, returning false. - /// - /// This is an async request which triggers a OnOperationResponse() call. - /// - /// - /// The lobby to query. Has to be of type SqlLobby. - /// The sql query statement. - /// If the operation could be sent (has to be connected). - public bool OpGetGameList(TypedLobby typedLobby, string sqlLobbyFilter) - { - if (!this.CheckIfOpCanBeSent(OperationCode.GetGameList, this.Server, "GetGameList")) - { - return false; - } - if (string.IsNullOrEmpty(sqlLobbyFilter)) - { - this.DebugReturn(DebugLevel.ERROR, "Operation GetGameList requires a filter."); - return false; - } - if (typedLobby.Type != LobbyType.SqlLobby) - { - this.DebugReturn(DebugLevel.ERROR, "Operation GetGameList can only be used for lobbies of type SqlLobby."); - return false; - } - - return this.LoadBalancingPeer.OpGetGameList(typedLobby, sqlLobbyFilter); - } - - - /// - /// Updates and synchronizes a Player's Custom Properties. Optionally, expectedProperties can be provided as condition. - /// - /// - /// Custom Properties are a set of string keys and arbitrary values which is synchronized - /// for the players in a Room. They are available when the client enters the room, as - /// they are in the response of OpJoin and OpCreate. - /// - /// Custom Properties either relate to the (current) Room or a Player (in that Room). - /// - /// Both classes locally cache the current key/values and make them available as - /// property: CustomProperties. This is provided only to read them. - /// You must use the method SetCustomProperties to set/modify them. - /// - /// Any client can set any Custom Properties anytime (when in a room). - /// It's up to the game logic to organize how they are best used. - /// - /// You should call SetCustomProperties only with key/values that are new or changed. This reduces - /// traffic and performance. - /// - /// Unless you define some expectedProperties, setting key/values is always permitted. - /// In this case, the property-setting client will not receive the new values from the server but - /// instead update its local cache in SetCustomProperties. - /// - /// If you define expectedProperties, the server will skip updates if the server property-cache - /// does not contain all expectedProperties with the same values. - /// In this case, the property-setting client will get an update from the server and update it's - /// cached key/values at about the same time as everyone else. - /// - /// The benefit of using expectedProperties can be only one client successfully sets a key from - /// one known value to another. - /// As example: Store who owns an item in a Custom Property "ownedBy". It's 0 initally. - /// When multiple players reach the item, they all attempt to change "ownedBy" from 0 to their - /// actorNumber. If you use expectedProperties {"ownedBy", 0} as condition, the first player to - /// take the item will have it (and the others fail to set the ownership). - /// - /// Properties get saved with the game state for Turnbased games (which use IsPersistent = true). - /// - /// Defines which player the Custom Properties belong to. ActorID of a player. - /// Hashtable of Custom Properties that changes. - /// Provide some keys/values to use as condition for setting the new values. Client must be in room. - /// Defines if the set properties should be forwarded to a WebHook. Client must be in room. - /// - /// False if propertiesToSet is null or empty or have zero string keys. - /// If not in a room, returns true if local player and expectedProperties and webFlags are null. - /// False if actorNr is lower than or equal to zero. - /// Otherwise, returns if the operation could be sent to the server. - /// - public bool OpSetCustomPropertiesOfActor(int actorNr, Hashtable propertiesToSet, Hashtable expectedProperties = null, WebFlags webFlags = null) - { - if (propertiesToSet == null || propertiesToSet.Count == 0) - { - this.DebugReturn(DebugLevel.ERROR, "OpSetCustomPropertiesOfActor() failed. propertiesToSet must not be null nor empty."); - return false; - } - if (this.CurrentRoom == null) - { - // if you attempt to set this player's values without conditions, then fine: - if (expectedProperties == null && webFlags == null && this.LocalPlayer != null && this.LocalPlayer.ActorNumber == actorNr) - { - return this.LocalPlayer.SetCustomProperties(propertiesToSet); - } - - if (this.LoadBalancingPeer.DebugOut >= DebugLevel.ERROR) - { - this.DebugReturn(DebugLevel.ERROR, "OpSetCustomPropertiesOfActor() failed. To use expectedProperties or webForward, you have to be in a room. State: " + this.State); - } - return false; - } - - Hashtable customActorProperties = new Hashtable(); - customActorProperties.MergeStringKeys(propertiesToSet); - if (customActorProperties.Count == 0) - { - this.DebugReturn(DebugLevel.ERROR, "OpSetCustomPropertiesOfActor() failed. Only string keys allowed for custom properties."); - return false; - } - return this.OpSetPropertiesOfActor(actorNr, customActorProperties, expectedProperties, webFlags); - } - - - /// Internally used to cache and set properties (including well known properties). - /// Requires being in a room (because this attempts to send an operation which will fail otherwise). - protected internal bool OpSetPropertiesOfActor(int actorNr, Hashtable actorProperties, Hashtable expectedProperties = null, WebFlags webFlags = null) - { - if (!this.CheckIfOpCanBeSent(OperationCode.SetProperties, this.Server, "SetProperties")) - { - return false; - } - if (actorProperties == null || actorProperties.Count == 0) - { - this.DebugReturn(DebugLevel.ERROR, "OpSetPropertiesOfActor() failed. actorProperties must not be null nor empty."); - return false; - } - bool res = this.LoadBalancingPeer.OpSetPropertiesOfActor(actorNr, actorProperties, expectedProperties, webFlags); - if (res && !this.CurrentRoom.BroadcastPropertiesChangeToAll && (expectedProperties == null || expectedProperties.Count == 0)) - { - Player target = this.CurrentRoom.GetPlayer(actorNr); - if (target != null) - { - target.InternalCacheProperties(actorProperties); - this.InRoomCallbackTargets.OnPlayerPropertiesUpdate(target, actorProperties); - } - } - return res; - } - - - /// - /// Updates and synchronizes this Room's Custom Properties. Optionally, expectedProperties can be provided as condition. - /// - /// - /// Custom Properties are a set of string keys and arbitrary values which is synchronized - /// for the players in a Room. They are available when the client enters the room, as - /// they are in the response of OpJoin and OpCreate. - /// - /// Custom Properties either relate to the (current) Room or a Player (in that Room). - /// - /// Both classes locally cache the current key/values and make them available as - /// property: CustomProperties. This is provided only to read them. - /// You must use the method SetCustomProperties to set/modify them. - /// - /// Any client can set any Custom Properties anytime (when in a room). - /// It's up to the game logic to organize how they are best used. - /// - /// You should call SetCustomProperties only with key/values that are new or changed. This reduces - /// traffic and performance. - /// - /// Unless you define some expectedProperties, setting key/values is always permitted. - /// In this case, the property-setting client will not receive the new values from the server but - /// instead update its local cache in SetCustomProperties. - /// - /// If you define expectedProperties, the server will skip updates if the server property-cache - /// does not contain all expectedProperties with the same values. - /// In this case, the property-setting client will get an update from the server and update it's - /// cached key/values at about the same time as everyone else. - /// - /// The benefit of using expectedProperties can be only one client successfully sets a key from - /// one known value to another. - /// As example: Store who owns an item in a Custom Property "ownedBy". It's 0 initally. - /// When multiple players reach the item, they all attempt to change "ownedBy" from 0 to their - /// actorNumber. If you use expectedProperties {"ownedBy", 0} as condition, the first player to - /// take the item will have it (and the others fail to set the ownership). - /// - /// Properties get saved with the game state for Turnbased games (which use IsPersistent = true). - /// - /// Hashtable of Custom Properties that changes. - /// Provide some keys/values to use as condition for setting the new values. - /// Defines web flags for an optional PathProperties webhook. - /// - /// False if propertiesToSet is null or empty or have zero string keys. - /// Otherwise, returns if the operation could be sent to the server. - /// - public bool OpSetCustomPropertiesOfRoom(Hashtable propertiesToSet, Hashtable expectedProperties = null, WebFlags webFlags = null) - { - if (propertiesToSet == null || propertiesToSet.Count == 0) - { - this.DebugReturn(DebugLevel.ERROR, "OpSetCustomPropertiesOfRoom() failed. propertiesToSet must not be null nor empty."); - return false; - } - Hashtable customGameProps = new Hashtable(); - customGameProps.MergeStringKeys(propertiesToSet); - if (customGameProps.Count == 0) - { - this.DebugReturn(DebugLevel.ERROR, "OpSetCustomPropertiesOfRoom() failed. Only string keys are allowed for custom properties."); - return false; - } - return this.OpSetPropertiesOfRoom(customGameProps, expectedProperties, webFlags); - } - - - protected internal bool OpSetPropertyOfRoom(byte propCode, object value) - { - Hashtable properties = new Hashtable(); - properties[propCode] = value; - return this.OpSetPropertiesOfRoom(properties); - } - - /// Internally used to cache and set properties (including well known properties). - /// Requires being in a room (because this attempts to send an operation which will fail otherwise). - protected internal bool OpSetPropertiesOfRoom(Hashtable gameProperties, Hashtable expectedProperties = null, WebFlags webFlags = null) - { - if (!this.CheckIfOpCanBeSent(OperationCode.SetProperties, this.Server, "SetProperties")) - { - return false; - } - if (gameProperties == null || gameProperties.Count == 0) - { - this.DebugReturn(DebugLevel.ERROR, "OpSetPropertiesOfRoom() failed. gameProperties must not be null nor empty."); - return false; - } - bool res = this.LoadBalancingPeer.OpSetPropertiesOfRoom(gameProperties, expectedProperties, webFlags); - if (res && !this.CurrentRoom.BroadcastPropertiesChangeToAll && (expectedProperties == null || expectedProperties.Count == 0)) - { - this.CurrentRoom.InternalCacheProperties(gameProperties); - this.InRoomCallbackTargets.OnRoomPropertiesUpdate(gameProperties); - } - return res; - } - - - /// - /// Send an event with custom code/type and any content to the other players in the same room. - /// - /// Identifies this type of event (and the content). Your game's event codes can start with 0. - /// Any serializable datatype (including Hashtable like the other OpRaiseEvent overloads). - /// Contains used send options. If you pass null, the default options will be used. - /// Send options for reliable, encryption etc - /// If operation could be enqueued for sending. Sent when calling: Service or SendOutgoingCommands. - public virtual bool OpRaiseEvent(byte eventCode, object customEventContent, RaiseEventOptions raiseEventOptions, SendOptions sendOptions) - { - if (this.LoadBalancingPeer == null) - { - return false; - } - if (!this.CheckIfOpCanBeSent(OperationCode.RaiseEvent, this.Server, "RaiseEvent")) - { - return false; - } - return this.LoadBalancingPeer.OpRaiseEvent(eventCode, customEventContent, raiseEventOptions, sendOptions); - } - - - - /// - /// Operation to handle this client's interest groups (for events in room). - /// - /// - /// Note the difference between passing null and byte[0]: - /// null won't add/remove any groups. - /// byte[0] will add/remove all (existing) groups. - /// First, removing groups is executed. This way, you could leave all groups and join only the ones provided. - /// - /// Changes become active not immediately but when the server executes this operation (approximately RTT/2). - /// - /// Groups to remove from interest. Null will not remove any. A byte[0] will remove all. - /// Groups to add to interest. Null will not add any. A byte[0] will add all current. - /// If operation could be enqueued for sending. Sent when calling: Service or SendOutgoingCommands. - public virtual bool OpChangeGroups(byte[] groupsToRemove, byte[] groupsToAdd) - { - if (this.LoadBalancingPeer == null) - { - return false; - } - if (!this.CheckIfOpCanBeSent(OperationCode.ChangeGroups, this.Server, "ChangeGroups")) - { - return false; - } - return this.LoadBalancingPeer.OpChangeGroups(groupsToRemove, groupsToAdd); - } - - - #endregion - - #region Helpers - - /// - /// Privately used to read-out properties coming from the server in events and operation responses (which might be a bit tricky). - /// - private void ReadoutProperties(Hashtable gameProperties, Hashtable actorProperties, int targetActorNr) - { - // read game properties and cache them locally - if (this.CurrentRoom != null && gameProperties != null) - { - this.CurrentRoom.InternalCacheProperties(gameProperties); - if (this.InRoom) - { - this.InRoomCallbackTargets.OnRoomPropertiesUpdate(gameProperties); - } - } - - if (actorProperties != null && actorProperties.Count > 0) - { - if (targetActorNr > 0) - { - // we have a single entry in the actorProperties with one user's name - // targets MUST exist before you set properties - Player target = this.CurrentRoom.GetPlayer(targetActorNr); - if (target != null) - { - Hashtable props = this.ReadoutPropertiesForActorNr(actorProperties, targetActorNr); - target.InternalCacheProperties(props); - this.InRoomCallbackTargets.OnPlayerPropertiesUpdate(target, props); - } - } - else - { - // in this case, we've got a key-value pair per actor (each - // value is a hashtable with the actor's properties then) - int actorNr; - Hashtable props; - string newName; - Player target; - - foreach (object key in actorProperties.Keys) - { - actorNr = (int)key; - props = (Hashtable)actorProperties[key]; - newName = (string)props[ActorProperties.PlayerName]; - - target = this.CurrentRoom.GetPlayer(actorNr); - if (target == null) - { - target = this.CreatePlayer(newName, actorNr, false, props); - this.CurrentRoom.StorePlayer(target); - } - target.InternalCacheProperties(props); - } - } - } - } - - - /// - /// Privately used only to read properties for a distinct actor (which might be the hashtable OR a key-pair value IN the actorProperties). - /// - private Hashtable ReadoutPropertiesForActorNr(Hashtable actorProperties, int actorNr) - { - if (actorProperties.ContainsKey(actorNr)) - { - return (Hashtable)actorProperties[actorNr]; - } - - return actorProperties; - } - - /// - /// Internally used to set the LocalPlayer's ID (from -1 to the actual in-room ID). - /// - /// New actor ID (a.k.a actorNr) assigned when joining a room. - public void ChangeLocalID(int newID) - { - if (this.LocalPlayer == null) - { - this.DebugReturn(DebugLevel.WARNING, string.Format("Local actor is null or not in mActors! mLocalActor: {0} mActors==null: {1} newID: {2}", this.LocalPlayer, this.CurrentRoom.Players == null, newID)); - } - - if (this.CurrentRoom == null) - { - // change to new actor/player ID and make sure the player does not have a room reference left - this.LocalPlayer.ChangeLocalID(newID); - this.LocalPlayer.RoomReference = null; - } - else - { - // remove old actorId from actor list - this.CurrentRoom.RemovePlayer(this.LocalPlayer); - - // change to new actor/player ID - this.LocalPlayer.ChangeLocalID(newID); - - // update the room's list with the new reference - this.CurrentRoom.StorePlayer(this.LocalPlayer); - } - } - - - - /// - /// Called internally, when a game was joined or created on the game server successfully. - /// - /// - /// This reads the response, finds out the local player's actorNumber (a.k.a. Player.ID) and applies properties of the room and players. - /// Errors for these operations are to be handled before this method is called. - /// - /// Contains the server's response for an operation called by this peer. - private void GameEnteredOnGameServer(OperationResponse operationResponse) - { - this.CurrentRoom = this.CreateRoom(this.enterRoomParamsCache.RoomName, this.enterRoomParamsCache.RoomOptions); - this.CurrentRoom.LoadBalancingClient = this; - - // first change the local id, instead of first updating the actorList since actorList uses ID to update itself - - // the local player's actor-properties are not returned in join-result. add this player to the list - int localActorNr = (int)operationResponse[ParameterCode.ActorNr]; - this.ChangeLocalID(localActorNr); - - if (operationResponse.Parameters.ContainsKey(ParameterCode.ActorList)) - { - int[] actorsInRoom = (int[])operationResponse.Parameters[ParameterCode.ActorList]; - this.UpdatedActorList(actorsInRoom); - } - - - Hashtable actorProperties = (Hashtable)operationResponse[ParameterCode.PlayerProperties]; - Hashtable gameProperties = (Hashtable)operationResponse[ParameterCode.GameProperties]; - this.ReadoutProperties(gameProperties, actorProperties, 0); - - object temp; - if (operationResponse.Parameters.TryGetValue(ParameterCode.RoomOptionFlags, out temp)) - { - this.CurrentRoom.InternalCacheRoomFlags((int)temp); - } - - this.State = ClientState.Joined; - - - // the callbacks OnCreatedRoom and OnJoinedRoom are called in the event join. it contains important info about the room and players. - // unless there will be no room events (RoomOptions.SuppressRoomEvents = true) - if (this.CurrentRoom.SuppressRoomEvents) - { - if (this.lastJoinType == JoinType.CreateRoom || (this.lastJoinType == JoinType.JoinOrCreateRoom && this.LocalPlayer.ActorNumber == 1)) - { - this.MatchMakingCallbackTargets.OnCreatedRoom(); - } - - this.MatchMakingCallbackTargets.OnJoinedRoom(); - } - } - - - private void UpdatedActorList(int[] actorsInGame) - { - if (actorsInGame != null) - { - foreach (int userId in actorsInGame) - { - Player target = this.CurrentRoom.GetPlayer(userId); - if (target == null) - { - this.CurrentRoom.StorePlayer(this.CreatePlayer(string.Empty, userId, false, null)); - } - } - } - } - - /// - /// Factory method to create a player instance - override to get your own player-type with custom features. - /// - /// The name of the player to be created. - /// The player ID (a.k.a. actorNumber) of the player to be created. - /// Sets the distinction if the player to be created is your player or if its assigned to someone else. - /// The custom properties for this new player - /// The newly created player - protected internal virtual Player CreatePlayer(string actorName, int actorNumber, bool isLocal, Hashtable actorProperties) - { - Player newPlayer = new Player(actorName, actorNumber, isLocal, actorProperties); - return newPlayer; - } - - /// Internal "factory" method to create a room-instance. - protected internal virtual Room CreateRoom(string roomName, RoomOptions opt) - { - Room r = new Room(roomName, opt); - return r; - } - - private bool CheckIfOpAllowedOnServer(byte opCode, ServerConnection serverConnection) - { - switch (serverConnection) - { - case ServerConnection.MasterServer: - switch (opCode) - { - case OperationCode.CreateGame: - case OperationCode.Authenticate: - case OperationCode.AuthenticateOnce: - case OperationCode.FindFriends: - case OperationCode.GetGameList: - case OperationCode.GetLobbyStats: - case OperationCode.JoinGame: - case OperationCode.JoinLobby: - case OperationCode.LeaveLobby: - case OperationCode.WebRpc: - case OperationCode.ServerSettings: - case OperationCode.JoinRandomGame: - return true; - } - break; - case ServerConnection.GameServer: - switch (opCode) - { - case OperationCode.CreateGame: - case OperationCode.Authenticate: - case OperationCode.AuthenticateOnce: - case OperationCode.ChangeGroups: - case OperationCode.GetProperties: - case OperationCode.JoinGame: - case OperationCode.Leave: - case OperationCode.WebRpc: - case OperationCode.ServerSettings: - case OperationCode.SetProperties: - case OperationCode.RaiseEvent: - return true; - } - break; - case ServerConnection.NameServer: - switch (opCode) - { - case OperationCode.Authenticate: - case OperationCode.AuthenticateOnce: - case OperationCode.GetRegions: - case OperationCode.ServerSettings: - return true; - } - break; - default: - throw new ArgumentOutOfRangeException("serverConnection", serverConnection, null); - } - return false; - } - - private bool CheckIfOpCanBeSent(byte opCode, ServerConnection serverConnection, string opName) - { - if (this.LoadBalancingPeer == null) - { - this.DebugReturn(DebugLevel.ERROR, string.Format("Operation {0} ({1}) can't be sent because peer is null", opName, opCode)); - return false; - } - - if (!this.CheckIfOpAllowedOnServer(opCode, serverConnection)) - { - if (this.LoadBalancingPeer.DebugOut >= DebugLevel.ERROR) - { - this.DebugReturn(DebugLevel.ERROR, string.Format("Operation {0} ({1}) not allowed on current server ({2})", opName, opCode, serverConnection)); - } - return false; - } - - if (!this.CheckIfClientIsReadyToCallOperation(opCode)) - { - DebugLevel levelToReport = DebugLevel.ERROR; - if (opCode == OperationCode.RaiseEvent && (this.State == ClientState.Leaving || this.State == ClientState.Disconnecting || this.State == ClientState.DisconnectingFromGameServer)) - { - levelToReport = DebugLevel.INFO; - } - - if (this.LoadBalancingPeer.DebugOut >= levelToReport) - { - this.DebugReturn(levelToReport, string.Format("Operation {0} ({1}) not called because client is not connected or not ready yet, client state: {2}", opName, opCode, Enum.GetName(typeof(ClientState), this.State))); - } - - return false; - } - - if (this.LoadBalancingPeer.PeerState != PeerStateValue.Connected) - { - this.DebugReturn(DebugLevel.ERROR, string.Format("Operation {0} ({1}) can't be sent because peer is not connected, peer state: {2}", opName, opCode, this.LoadBalancingPeer.PeerState)); - return false; - } - return true; - } - - private bool CheckIfClientIsReadyToCallOperation(byte opCode) - { - switch (opCode) - { - //case OperationCode.ServerSettings: // ?? - //case OperationCode.WebRpc: // WebRPC works on MS and GS and I think it does not need the client to be ready - - case OperationCode.Authenticate: - case OperationCode.AuthenticateOnce: - return this.IsConnectedAndReady || - this.State == ClientState.ConnectingToNameServer || // this is required since we do not set state to ConnectedToNameServer before authentication - this.State == ClientState.ConnectingToMasterServer || // this is required since we do not set state to ConnectedToMasterServer before authentication - this.State == ClientState.ConnectingToGameServer; // this is required since we do not set state to ConnectedToGameServer before authentication - - case OperationCode.ChangeGroups: - case OperationCode.GetProperties: - case OperationCode.SetProperties: - case OperationCode.RaiseEvent: - case OperationCode.Leave: - return this.InRoom; - - case OperationCode.JoinGame: - case OperationCode.CreateGame: - return this.State == ClientState.ConnectedToMasterServer || this.InLobby || this.State == ClientState.ConnectedToGameServer; // CurrentRoom can be not null in case of quick rejoin - - case OperationCode.LeaveLobby: - return this.InLobby; - - case OperationCode.JoinRandomGame: - case OperationCode.FindFriends: - case OperationCode.GetGameList: - case OperationCode.GetLobbyStats: // do we need to be inside lobby to call this? - case OperationCode.JoinLobby: // You don't have to explicitly leave a lobby to join another (client can be in one max, at any time) - return this.State == ClientState.ConnectedToMasterServer || this.InLobby; - case OperationCode.GetRegions: - return this.State == ClientState.ConnectedToNameServer; - } - return this.IsConnected; - } - - #endregion - - #region Implementation of IPhotonPeerListener - - /// Debug output of low level api (and this client). - /// This method is not responsible to keep up the state of a LoadBalancingClient. Calling base.DebugReturn on overrides is optional. - public virtual void DebugReturn(DebugLevel level, string message) - { - if (this.LoadBalancingPeer.DebugOut != DebugLevel.ALL && level > this.LoadBalancingPeer.DebugOut) - { - return; - } - #if !SUPPORTED_UNITY - Debug.WriteLine(message); - #else - if (level == DebugLevel.ERROR) - { - Debug.LogError(message); - } - else if (level == DebugLevel.WARNING) - { - Debug.LogWarning(message); - } - else if (level == DebugLevel.INFO) - { - Debug.Log(message); - } - else if (level == DebugLevel.ALL) - { - Debug.Log(message); - } - #endif - } - - private void CallbackRoomEnterFailed(OperationResponse operationResponse) - { - if (operationResponse.ReturnCode != 0) - { - if (operationResponse.OperationCode == OperationCode.JoinGame) - { - this.MatchMakingCallbackTargets.OnJoinRoomFailed(operationResponse.ReturnCode, operationResponse.DebugMessage); - } - else if (operationResponse.OperationCode == OperationCode.CreateGame) - { - this.MatchMakingCallbackTargets.OnCreateRoomFailed(operationResponse.ReturnCode, operationResponse.DebugMessage); - } - else if (operationResponse.OperationCode == OperationCode.JoinRandomGame) - { - this.MatchMakingCallbackTargets.OnJoinRandomFailed(operationResponse.ReturnCode, operationResponse.DebugMessage); - } - } - } - - /// - /// Uses the OperationResponses provided by the server to advance the internal state and call ops as needed. - /// - /// - /// When this method finishes, it will call your OnOpResponseAction (if any). This way, you can get any - /// operation response without overriding this class. - /// - /// To implement a more complex game/app logic, you should implement your own class that inherits the - /// LoadBalancingClient. Override this method to use your own operation-responses easily. - /// - /// This method is essential to update the internal state of a LoadBalancingClient, so overriding methods - /// must call base.OnOperationResponse(). - /// - /// Contains the server's response for an operation called by this peer. - public virtual void OnOperationResponse(OperationResponse operationResponse) - { - // if (operationResponse.ReturnCode != 0) this.DebugReturn(DebugLevel.ERROR, operationResponse.ToStringFull()); - - // use the "secret" or "token" whenever we get it. doesn't really matter if it's in AuthResponse. - if (operationResponse.Parameters.ContainsKey(ParameterCode.Token)) - { - if (this.AuthValues == null) - { - this.AuthValues = new AuthenticationValues(); - //this.DebugReturn(DebugLevel.ERROR, "Server returned secret. Created AuthValues."); - } - - this.AuthValues.Token = operationResponse[ParameterCode.Token] as string; - this.tokenCache = this.AuthValues.Token; - } - - // if the operation limit was reached, disconnect (but still execute the operation response). - if (operationResponse.ReturnCode == ErrorCode.OperationLimitReached) - { - this.Disconnect(DisconnectCause.DisconnectByOperationLimit); - } - - switch (operationResponse.OperationCode) - { - case OperationCode.Authenticate: - case OperationCode.AuthenticateOnce: - { - if (operationResponse.ReturnCode != 0) - { - this.DebugReturn(DebugLevel.ERROR, operationResponse.ToStringFull() + " Server: " + this.Server + " Address: " + this.LoadBalancingPeer.ServerAddress); - - switch (operationResponse.ReturnCode) - { - case ErrorCode.InvalidAuthentication: - this.DisconnectedCause = DisconnectCause.InvalidAuthentication; - break; - case ErrorCode.CustomAuthenticationFailed: - this.DisconnectedCause = DisconnectCause.CustomAuthenticationFailed; - this.ConnectionCallbackTargets.OnCustomAuthenticationFailed(operationResponse.DebugMessage); - break; - case ErrorCode.InvalidRegion: - this.DisconnectedCause = DisconnectCause.InvalidRegion; - break; - case ErrorCode.MaxCcuReached: - this.DisconnectedCause = DisconnectCause.MaxCcuReached; - break; - case ErrorCode.OperationNotAllowedInCurrentState: - this.DisconnectedCause = DisconnectCause.OperationNotAllowedInCurrentState; - break; - case ErrorCode.AuthenticationTicketExpired: - this.DisconnectedCause = DisconnectCause.AuthenticationTicketExpired; - break; - } - - this.Disconnect(this.DisconnectedCause); - break; // if auth didn't succeed, we disconnect (above) and exit this operation's handling - } - - if (this.Server == ServerConnection.NameServer || this.Server == ServerConnection.MasterServer) - { - if (operationResponse.Parameters.ContainsKey(ParameterCode.UserId)) - { - string incomingId = (string)operationResponse.Parameters[ParameterCode.UserId]; - if (!string.IsNullOrEmpty(incomingId)) - { - this.UserId = incomingId; - this.LocalPlayer.UserId = incomingId; - this.DebugReturn(DebugLevel.INFO, string.Format("Received your UserID from server. Updating local value to: {0}", this.UserId)); - } - } - if (operationResponse.Parameters.ContainsKey(ParameterCode.NickName)) - { - this.NickName = (string)operationResponse.Parameters[ParameterCode.NickName]; - this.DebugReturn(DebugLevel.INFO, string.Format("Received your NickName from server. Updating local value to: {0}", this.NickName)); - } - - if (operationResponse.Parameters.ContainsKey(ParameterCode.EncryptionData)) - { - this.SetupEncryption((Dictionary)operationResponse.Parameters[ParameterCode.EncryptionData]); - } - } - - if (this.Server == ServerConnection.NameServer) - { - string receivedCluster = operationResponse[ParameterCode.Cluster] as string; - if (!string.IsNullOrEmpty(receivedCluster)) - { - this.CurrentCluster = receivedCluster; - } - - // on the NameServer, authenticate returns the MasterServer address for a region and we hop off to there - this.MasterServerAddress = operationResponse[ParameterCode.Address] as string; - if (this.ServerPortOverrides.MasterServerPort != 0) - { - //Debug.LogWarning("Incoming MasterServer Address: "+this.MasterServerAddress); - this.MasterServerAddress = this.ReplacePortWithAlternative(this.MasterServerAddress, this.ServerPortOverrides.MasterServerPort); - //Debug.LogWarning("New MasterServer Address: "+this.MasterServerAddress); - } - - if (this.AuthMode == AuthModeOption.AuthOnceWss && this.ExpectedProtocol != null) - { - this.DebugReturn(DebugLevel.INFO, string.Format("AuthOnceWss mode. Auth response switches TransportProtocol to ExpectedProtocol: {0}.", this.ExpectedProtocol)); - this.LoadBalancingPeer.TransportProtocol = (ConnectionProtocol)this.ExpectedProtocol; - this.ExpectedProtocol = null; - } - this.DisconnectToReconnect(); - } - else if (this.Server == ServerConnection.MasterServer) - { - this.State = ClientState.ConnectedToMasterServer; - if (this.failedRoomEntryOperation == null) - { - this.ConnectionCallbackTargets.OnConnectedToMaster(); - } - else - { - this.CallbackRoomEnterFailed(this.failedRoomEntryOperation); - this.failedRoomEntryOperation = null; - } - - if (this.AuthMode != AuthModeOption.Auth) - { - this.LoadBalancingPeer.OpSettings(this.EnableLobbyStatistics); - } - } - else if (this.Server == ServerConnection.GameServer) - { - this.State = ClientState.Joining; - - if (this.enterRoomParamsCache.JoinMode == JoinMode.RejoinOnly) - { - this.enterRoomParamsCache.PlayerProperties = null; - } - else - { - Hashtable allProps = new Hashtable(); - allProps.Merge(this.LocalPlayer.CustomProperties); - - if (!string.IsNullOrEmpty(this.LocalPlayer.NickName)) - { - allProps[ActorProperties.PlayerName] = this.LocalPlayer.NickName; - } - - this.enterRoomParamsCache.PlayerProperties = allProps; - } - - this.enterRoomParamsCache.OnGameServer = true; - - if (this.lastJoinType == JoinType.JoinRoom || this.lastJoinType == JoinType.JoinRandomRoom || this.lastJoinType == JoinType.JoinRandomOrCreateRoom || this.lastJoinType == JoinType.JoinOrCreateRoom) - { - this.LoadBalancingPeer.OpJoinRoom(this.enterRoomParamsCache); - } - else if (this.lastJoinType == JoinType.CreateRoom) - { - this.LoadBalancingPeer.OpCreateRoom(this.enterRoomParamsCache); - } - break; - } - - // optionally, OpAuth may return some data for the client to use. if it's available, call OnCustomAuthenticationResponse - Dictionary data = (Dictionary)operationResponse[ParameterCode.Data]; - if (data != null) - { - this.ConnectionCallbackTargets.OnCustomAuthenticationResponse(data); - } - break; - } - - case OperationCode.GetRegions: - // Debug.Log("GetRegions returned: " + operationResponse.ToStringFull()); - - if (operationResponse.ReturnCode == ErrorCode.InvalidAuthentication) - { - this.DebugReturn(DebugLevel.ERROR, string.Format("GetRegions failed. AppId is unknown on the (cloud) server. "+operationResponse.DebugMessage)); - this.Disconnect(DisconnectCause.InvalidAuthentication); - break; - } - if (operationResponse.ReturnCode != ErrorCode.Ok) - { - this.DebugReturn(DebugLevel.ERROR, "GetRegions failed. Can't provide regions list. ReturnCode: " + operationResponse.ReturnCode + ": " + operationResponse.DebugMessage); - this.Disconnect(DisconnectCause.InvalidAuthentication); - break; - } - if (this.RegionHandler == null) - { - this.RegionHandler = new RegionHandler(); - } - - if (this.RegionHandler.IsPinging) - { - this.DebugReturn(DebugLevel.WARNING, "Received an response for OpGetRegions while the RegionHandler is pinging regions already. Skipping this response in favor of completing the current region-pinging."); - return; // in this particular case, we suppress the duplicate GetRegion response. we don't want a callback for this, cause there is a warning already. - } - - this.RegionHandler.SetRegions(operationResponse); - this.ConnectionCallbackTargets.OnRegionListReceived(this.RegionHandler); - - if (this.connectToBestRegion) - { - // ping minimal regions (if one is known) and connect - this.RegionHandler.PingMinimumOfRegions(this.OnRegionPingCompleted, this.bestRegionSummaryFromStorage); - } - break; - - case OperationCode.JoinRandomGame: // this happens only on the master server. on gameserver this is a "regular" join - case OperationCode.CreateGame: - case OperationCode.JoinGame: - - if (operationResponse.ReturnCode != 0) - { - if (this.Server == ServerConnection.GameServer) - { - this.failedRoomEntryOperation = operationResponse; - this.DisconnectToReconnect(); - } - else - { - this.State = (this.InLobby) ? ClientState.JoinedLobby : ClientState.ConnectedToMasterServer; - this.CallbackRoomEnterFailed(operationResponse); - } - } - else - { - if (this.Server == ServerConnection.GameServer) - { - this.GameEnteredOnGameServer(operationResponse); - } - else - { - this.GameServerAddress = (string)operationResponse[ParameterCode.Address]; - if (this.ServerPortOverrides.GameServerPort != 0) - { - //Debug.LogWarning("Incoming GameServer Address: " + this.GameServerAddress); - this.GameServerAddress = this.ReplacePortWithAlternative(this.GameServerAddress, this.ServerPortOverrides.GameServerPort); - //Debug.LogWarning("New GameServer Address: " + this.GameServerAddress); - } - - string roomName = operationResponse[ParameterCode.RoomName] as string; - if (!string.IsNullOrEmpty(roomName)) - { - this.enterRoomParamsCache.RoomName = roomName; - } - - this.DisconnectToReconnect(); - } - } - break; - - case OperationCode.GetGameList: - if (operationResponse.ReturnCode != 0) - { - this.DebugReturn(DebugLevel.ERROR, "GetGameList failed: " + operationResponse.ToStringFull()); - break; - } - - List _RoomInfoList = new List(); - - Hashtable games = (Hashtable)operationResponse[ParameterCode.GameList]; - foreach (string gameName in games.Keys) - { - _RoomInfoList.Add(new RoomInfo(gameName, (Hashtable)games[gameName])); - } - - this.LobbyCallbackTargets.OnRoomListUpdate(_RoomInfoList); - break; - - case OperationCode.JoinLobby: - this.State = ClientState.JoinedLobby; - this.LobbyCallbackTargets.OnJoinedLobby(); - break; - - case OperationCode.LeaveLobby: - this.State = ClientState.ConnectedToMasterServer; - this.LobbyCallbackTargets.OnLeftLobby(); - break; - - case OperationCode.Leave: - this.DisconnectToReconnect(); - break; - - case OperationCode.FindFriends: - if (operationResponse.ReturnCode != 0) - { - this.DebugReturn(DebugLevel.ERROR, "OpFindFriends failed: " + operationResponse.ToStringFull()); - this.friendListRequested = null; - break; - } - - bool[] onlineList = operationResponse[ParameterCode.FindFriendsResponseOnlineList] as bool[]; - string[] roomList = operationResponse[ParameterCode.FindFriendsResponseRoomIdList] as string[]; - - //if (onlineList == null || roomList == null || this.friendListRequested == null || onlineList.Length != this.friendListRequested.Length) - //{ - // // TODO: Check if we should handle this case better / more extensively - // this.DebugReturn(DebugLevel.ERROR, "OpFindFriends failed. Some list is not set. OpResponse: " + operationResponse.ToStringFull()); - // this.friendListRequested = null; - // this.isFetchingFriendList = false; - // break; - //} - - List friendList = new List(this.friendListRequested.Length); - for (int index = 0; index < this.friendListRequested.Length; index++) - { - FriendInfo friend = new FriendInfo(); - friend.UserId = this.friendListRequested[index]; - friend.Room = roomList[index]; - friend.IsOnline = onlineList[index]; - friendList.Insert(index, friend); - } - - this.friendListRequested = null; - - this.MatchMakingCallbackTargets.OnFriendListUpdate(friendList); - break; - - case OperationCode.WebRpc: - this.WebRpcCallbackTargets.OnWebRpcResponse(operationResponse); - break; - } - - if (this.OpResponseReceived != null) this.OpResponseReceived(operationResponse); - } - - /// - /// Uses the connection's statusCodes to advance the internal state and call operations as needed. - /// - /// This method is essential to update the internal state of a LoadBalancingClient. Overriding methods must call base.OnStatusChanged. - public virtual void OnStatusChanged(StatusCode statusCode) - { - switch (statusCode) - { - case StatusCode.Connect: - if (this.State == ClientState.ConnectingToNameServer) - { - if (this.LoadBalancingPeer.DebugOut >= DebugLevel.ALL) - { - this.DebugReturn(DebugLevel.ALL, "Connected to nameserver."); - } - - this.Server = ServerConnection.NameServer; - if (this.AuthValues != null) - { - this.AuthValues.Token = null; // when connecting to NameServer, invalidate the secret (only) - } - } - - if (this.State == ClientState.ConnectingToGameServer) - { - if (this.LoadBalancingPeer.DebugOut >= DebugLevel.ALL) - { - this.DebugReturn(DebugLevel.ALL, "Connected to gameserver."); - } - - this.Server = ServerConnection.GameServer; - } - - if (this.State == ClientState.ConnectingToMasterServer) - { - if (this.LoadBalancingPeer.DebugOut >= DebugLevel.ALL) - { - this.DebugReturn(DebugLevel.ALL, "Connected to masterserver."); - } - - this.Server = ServerConnection.MasterServer; - this.ConnectionCallbackTargets.OnConnected(); // if initial connect - } - - - if (this.LoadBalancingPeer.TransportProtocol != ConnectionProtocol.WebSocketSecure) - { - if (this.Server == ServerConnection.NameServer || this.AuthMode == AuthModeOption.Auth) - { - this.LoadBalancingPeer.EstablishEncryption(); - } - } - else - { - goto case StatusCode.EncryptionEstablished; - } - - break; - - case StatusCode.EncryptionEstablished: - if (this.Server == ServerConnection.NameServer) - { - this.State = ClientState.ConnectedToNameServer; - - // if there is no specific region to connect to, get available regions from the Name Server. the result triggers next actions in workflow - if (string.IsNullOrEmpty(this.CloudRegion)) - { - this.OpGetRegions(); - break; - } - } - else - { - // auth AuthOnce, no explicit authentication is needed on Master Server and Game Server. this is done via token, so: break - if (this.AuthMode == AuthModeOption.AuthOnce || this.AuthMode == AuthModeOption.AuthOnceWss) - { - break; - } - } - - // authenticate in all other cases (using the CloudRegion, if available) - bool authenticating = this.CallAuthenticate(); - if (authenticating) - { - this.State = ClientState.Authenticating; - } - else - { - this.DebugReturn(DebugLevel.ERROR, "OpAuthenticate failed. Check log output and AuthValues. State: " + this.State); - } - break; - - case StatusCode.Disconnect: - // disconnect due to connection exception is handled below (don't connect to GS or master in that case) - this.friendListRequested = null; - - bool wasInRoom = this.CurrentRoom != null; - this.CurrentRoom = null; // players get cleaned up inside this, too, except LocalPlayer (which we keep) - this.ChangeLocalID(-1); // depends on this.CurrentRoom, so it must be called after updating that - - if (this.Server == ServerConnection.GameServer && wasInRoom) - { - this.MatchMakingCallbackTargets.OnLeftRoom(); - } - - if (this.ExpectedProtocol != null) - { - this.DebugReturn(DebugLevel.INFO, string.Format("AuthOnceWss mode. On disconnect switches TransportProtocol to ExpectedProtocol: {0}.", this.ExpectedProtocol)); - this.LoadBalancingPeer.TransportProtocol = (ConnectionProtocol)this.ExpectedProtocol; - this.ExpectedProtocol = null; - } - - switch (this.State) - { - case ClientState.ConnectWithFallbackProtocol: - this.EnableProtocolFallback = false; // the client does a fallback only one time - this.LoadBalancingPeer.TransportProtocol = (this.LoadBalancingPeer.TransportProtocol == ConnectionProtocol.Tcp) ? ConnectionProtocol.Udp : ConnectionProtocol.Tcp; - this.NameServerPortInAppSettings = 0; // this does not affect the ServerSettings file, just a variable at runtime - this.ServerPortOverrides = new PhotonPortDefinition(); // use default ports for the fallback - this.ConnectToNameServer(); - break; - case ClientState.PeerCreated: - case ClientState.Disconnecting: - if (this.AuthValues != null) - { - this.AuthValues.Token = null; // when leaving the server, invalidate the secret (but not the auth values) - } - this.State = ClientState.Disconnected; - this.ConnectionCallbackTargets.OnDisconnected(this.DisconnectedCause); - break; - - case ClientState.DisconnectingFromGameServer: - case ClientState.DisconnectingFromNameServer: - this.ConnectToMasterServer(); // this gets the client back to the Master Server - break; - - case ClientState.DisconnectingFromMasterServer: - this.Connect(this.GameServerAddress, this.ProxyServerAddress, ServerConnection.GameServer); // this connects the client with the Game Server (when joining/creating a room) - break; - - case ClientState.Disconnected: - // this client is already Disconnected, so no further action is needed. - // this.DebugReturn(DebugLevel.INFO, "LBC.OnStatusChanged(Disconnect) this.State: " + this.State + ". Server: " + this.Server); - break; - - default: - string stacktrace = ""; - #if DEBUG && !NETFX_CORE - stacktrace = new System.Diagnostics.StackTrace(true).ToString(); - #endif - this.DebugReturn(DebugLevel.WARNING, "Got a unexpected Disconnect in LoadBalancingClient State: " + this.State + ". Server: " + this.Server + " Trace: " + stacktrace); - - if (this.AuthValues != null) - { - this.AuthValues.Token = null; // when leaving the server, invalidate the secret (but not the auth values) - } - this.State = ClientState.Disconnected; - this.ConnectionCallbackTargets.OnDisconnected(this.DisconnectedCause); - break; - } - break; - - case StatusCode.DisconnectByServerUserLimit: - this.DebugReturn(DebugLevel.ERROR, "This connection was rejected due to the apps CCU limit."); - this.DisconnectedCause = DisconnectCause.MaxCcuReached; - this.State = ClientState.Disconnecting; - break; - case StatusCode.ExceptionOnConnect: - case StatusCode.SecurityExceptionOnConnect: - case StatusCode.EncryptionFailedToEstablish: - this.DisconnectedCause = DisconnectCause.ExceptionOnConnect; - - // if enabled, the client can attempt to connect with another networking-protocol to check if that connects - if (this.EnableProtocolFallback && this.State == ClientState.ConnectingToNameServer) - { - this.State = ClientState.ConnectWithFallbackProtocol; - } - else - { - this.State = ClientState.Disconnecting; - } - break; - case StatusCode.Exception: - case StatusCode.ExceptionOnReceive: - case StatusCode.SendError: - this.DisconnectedCause = DisconnectCause.Exception; - this.State = ClientState.Disconnecting; - break; - case StatusCode.DisconnectByServerTimeout: - this.DisconnectedCause = DisconnectCause.ServerTimeout; - this.State = ClientState.Disconnecting; - break; - case StatusCode.DisconnectByServerLogic: - this.DisconnectedCause = DisconnectCause.DisconnectByServerLogic; - this.State = ClientState.Disconnecting; - break; - case StatusCode.DisconnectByServerReasonUnknown: - this.DisconnectedCause = DisconnectCause.DisconnectByServerReasonUnknown; - this.State = ClientState.Disconnecting; - break; - case StatusCode.TimeoutDisconnect: - this.DisconnectedCause = DisconnectCause.ClientTimeout; - - // if enabled, the client can attempt to connect with another networking-protocol to check if that connects - if (this.EnableProtocolFallback && this.State == ClientState.ConnectingToNameServer) - { - this.State = ClientState.ConnectWithFallbackProtocol; - } - else - { - this.State = ClientState.Disconnecting; - } - break; - } - } - - - /// - /// Uses the photonEvent's provided by the server to advance the internal state and call ops as needed. - /// - /// This method is essential to update the internal state of a LoadBalancingClient. Overriding methods must call base.OnEvent. - public virtual void OnEvent(EventData photonEvent) - { - int actorNr = photonEvent.Sender; - Player originatingPlayer = (this.CurrentRoom != null) ? this.CurrentRoom.GetPlayer(actorNr) : null; - - switch (photonEvent.Code) - { - case EventCode.GameList: - case EventCode.GameListUpdate: - - List _RoomInfoList = new List(); - - Hashtable games = (Hashtable)photonEvent[ParameterCode.GameList]; - foreach (string gameName in games.Keys) - { - _RoomInfoList.Add(new RoomInfo(gameName, (Hashtable)games[gameName])); - } - - this.LobbyCallbackTargets.OnRoomListUpdate(_RoomInfoList); - - break; - - case EventCode.Join: - Hashtable actorProperties = (Hashtable)photonEvent[ParameterCode.PlayerProperties]; - - if (originatingPlayer == null) - { - originatingPlayer = this.CreatePlayer(string.Empty, actorNr, false, actorProperties); - this.CurrentRoom.StorePlayer(originatingPlayer); - } - else - { - originatingPlayer.InternalCacheProperties(actorProperties); - originatingPlayer.IsInactive = false; - originatingPlayer.HasRejoined = actorNr != this.LocalPlayer.ActorNumber; // event is for non-local player, who is known (by ActorNumber), so it's a returning player - } - - if (actorNr == this.LocalPlayer.ActorNumber) - { - // in this player's own join event, we get a complete list of players in the room, so check if we know each of the - int[] actorsInRoom = (int[])photonEvent[ParameterCode.ActorList]; - this.UpdatedActorList(actorsInRoom); - - // any operation that does a "rejoin" will set this value to true. this can indicate if the local player returns to a room. - originatingPlayer.HasRejoined = this.enterRoomParamsCache.JoinMode == JoinMode.RejoinOnly; - - // joinWithCreateOnDemand can turn an OpJoin into creating the room. Then actorNumber is 1 and callback: OnCreatedRoom() - if (this.lastJoinType == JoinType.CreateRoom || (this.lastJoinType == JoinType.JoinOrCreateRoom && this.LocalPlayer.ActorNumber == 1)) - { - this.MatchMakingCallbackTargets.OnCreatedRoom(); - } - - this.MatchMakingCallbackTargets.OnJoinedRoom(); - } - else - { - this.InRoomCallbackTargets.OnPlayerEnteredRoom(originatingPlayer); - } - break; - - case EventCode.Leave: - if (originatingPlayer != null) - { - bool isInactive = false; - if (photonEvent.Parameters.ContainsKey(ParameterCode.IsInactive)) - { - isInactive = (bool)photonEvent.Parameters[ParameterCode.IsInactive]; - } - - if (isInactive) - { - originatingPlayer.IsInactive = true; - } - else - { - originatingPlayer.IsInactive = false; - this.CurrentRoom.RemovePlayer(actorNr); - } - } - - if (photonEvent.Parameters.ContainsKey(ParameterCode.MasterClientId)) - { - int newMaster = (int)photonEvent[ParameterCode.MasterClientId]; - if (newMaster != 0) - { - this.CurrentRoom.masterClientId = newMaster; - this.InRoomCallbackTargets.OnMasterClientSwitched(this.CurrentRoom.GetPlayer(newMaster)); - } - } - // finally, send notification that a player left - this.InRoomCallbackTargets.OnPlayerLeftRoom(originatingPlayer); - break; - - case EventCode.PropertiesChanged: - // whenever properties are sent in-room, they can be broadcasted as event (which we handle here) - // we get PLAYERproperties if actorNr > 0 or ROOMproperties if actorNumber is not set or 0 - int targetActorNr = 0; - if (photonEvent.Parameters.ContainsKey(ParameterCode.TargetActorNr)) - { - targetActorNr = (int)photonEvent[ParameterCode.TargetActorNr]; - } - - Hashtable gameProperties = null; - Hashtable actorProps = null; - if (targetActorNr == 0) - { - gameProperties = (Hashtable)photonEvent[ParameterCode.Properties]; - } - else - { - actorProps = (Hashtable)photonEvent[ParameterCode.Properties]; - } - - this.ReadoutProperties(gameProperties, actorProps, targetActorNr); - break; - - case EventCode.AppStats: - // only the master server sends these in (1 minute) intervals - this.PlayersInRoomsCount = (int)photonEvent[ParameterCode.PeerCount]; - this.RoomsCount = (int)photonEvent[ParameterCode.GameCount]; - this.PlayersOnMasterCount = (int)photonEvent[ParameterCode.MasterPeerCount]; - break; - - case EventCode.LobbyStats: - string[] names = photonEvent[ParameterCode.LobbyName] as string[]; - int[] peers = photonEvent[ParameterCode.PeerCount] as int[]; - int[] rooms = photonEvent[ParameterCode.GameCount] as int[]; - - byte[] types; - ByteArraySlice slice = photonEvent[ParameterCode.LobbyType] as ByteArraySlice; - bool useByteArraySlice = slice != null; - - if (useByteArraySlice) - { - types = slice.Buffer; - } - else - { - types = photonEvent[ParameterCode.LobbyType] as byte[]; - } - - this.lobbyStatistics.Clear(); - for (int i = 0; i < names.Length; i++) - { - TypedLobbyInfo info = new TypedLobbyInfo(); - info.Name = names[i]; - info.Type = (LobbyType)types[i]; - info.PlayerCount = peers[i]; - info.RoomCount = rooms[i]; - - this.lobbyStatistics.Add(info); - } - - if (useByteArraySlice) - { - slice.Release(); - } - - this.LobbyCallbackTargets.OnLobbyStatisticsUpdate(this.lobbyStatistics); - break; - - case EventCode.ErrorInfo: - this.ErrorInfoCallbackTargets.OnErrorInfo(new ErrorInfo(photonEvent)); - break; - - case EventCode.AuthEvent: - if (this.AuthValues == null) - { - this.AuthValues = new AuthenticationValues(); - } - - this.AuthValues.Token = photonEvent[ParameterCode.Token] as string; - this.tokenCache = this.AuthValues.Token; - break; - - } - - this.UpdateCallbackTargets(); - if (this.EventReceived != null) this.EventReceived(photonEvent); - } - - /// In Photon 4, "raw messages" will get their own callback method in the interface. Not used yet. - public virtual void OnMessage(object message) - { - this.DebugReturn(DebugLevel.ALL, string.Format("got OnMessage {0}", message)); - } - - #endregion - - - private void OnDisconnectMessageReceived(DisconnectMessage obj) - { - this.DebugReturn(DebugLevel.ERROR, string.Format("Got DisconnectMessage. Code: {0} Msg: \"{1}\". Debug Info: {2}", obj.Code, obj.DebugMessage, obj.Parameters.ToStringFull())); - this.Disconnect(DisconnectCause.DisconnectByDisconnectMessage); - } - - - /// A callback of the RegionHandler, provided in OnRegionListReceived. - /// The regionHandler wraps up best region and other region relevant info. - private void OnRegionPingCompleted(RegionHandler regionHandler) - { - //Debug.Log("OnRegionPingCompleted " + regionHandler.BestRegion); - //Debug.Log("RegionPingSummary: " + regionHandler.SummaryToCache); - this.SummaryToCache = regionHandler.SummaryToCache; - this.ConnectToRegionMaster(regionHandler.BestRegion.Code); - } - - - private string ReplacePortWithAlternative(string address, ushort replacementPort) - { - bool webSocket = address.StartsWith("ws"); - if (webSocket) - { - UriBuilder urib = new UriBuilder(address); - urib.Port = replacementPort; - return urib.ToString(); - } - else - { - UriBuilder urib = new UriBuilder(string.Format("scheme://{0}", address)); - return string.Format("{0}:{1}", urib.Host, replacementPort); - } - } - - private void SetupEncryption(Dictionary encryptionData) - { - var mode = (EncryptionMode)(byte)encryptionData[EncryptionDataParameters.Mode]; - switch (mode) - { - case EncryptionMode.PayloadEncryption: - byte[] encryptionSecret = (byte[])encryptionData[EncryptionDataParameters.Secret1]; - this.LoadBalancingPeer.InitPayloadEncryption(encryptionSecret); - break; - case EncryptionMode.DatagramEncryption: - case EncryptionMode.DatagramEncryptionRandomSequence: - { - byte[] secret1 = (byte[])encryptionData[EncryptionDataParameters.Secret1]; - byte[] secret2 = (byte[])encryptionData[EncryptionDataParameters.Secret2]; - this.LoadBalancingPeer.InitDatagramEncryption(secret1, secret2, mode == EncryptionMode.DatagramEncryptionRandomSequence); - } - break; - case EncryptionMode.DatagramEncryptionGCM: - { - byte[] secret1 = (byte[])encryptionData[EncryptionDataParameters.Secret1]; - this.LoadBalancingPeer.InitDatagramEncryption(secret1, null, true, true); - } - break; - default: - throw new ArgumentOutOfRangeException(); - } - } - - - - /// - /// This operation makes Photon call your custom web-service by path/name with the given parameters (converted into Json). - /// Use as a callback. - /// - /// - /// A WebRPC calls a custom, http-based function on a server you provide. The uriPath is relative to a "base path" - /// which is configured server-side. The sent parameters get converted from C# types to Json. Vice versa, the response - /// of the web-service will be converted to C# types and sent back as normal operation response. - /// - /// To use this feature, you have to setup your server: - /// - /// For a Photon Cloud application, - /// visit the Dashboard and setup "WebHooks". The BaseUrl is used for WebRPCs as well. - /// - /// The class is a helper-class that extracts the most valuable content from the WebRPC - /// response. - /// - /// The url path to call, relative to the baseUrl configured on Photon's server-side. - /// The parameters to send to the web-service method. - /// Defines if the authentication cookie gets sent to a WebHook (if setup). - public bool OpWebRpc(string uriPath, object parameters, bool sendAuthCookie = false) - { - if (string.IsNullOrEmpty(uriPath)) - { - this.DebugReturn(DebugLevel.ERROR, "WebRPC method name must not be null nor empty."); - return false; - } - if (!this.CheckIfOpCanBeSent(OperationCode.WebRpc, this.Server, "WebRpc")) - { - return false; - } - Dictionary opParameters = new Dictionary(); - opParameters.Add(ParameterCode.UriPath, uriPath); - if (parameters != null) - { - opParameters.Add(ParameterCode.WebRpcParameters, parameters); - } - if (sendAuthCookie) - { - opParameters.Add(ParameterCode.EventForward, WebFlags.SendAuthCookieConst); - } - - //return this.LoadBalancingPeer.OpCustom(OperationCode.WebRpc, opParameters, true); - return this.LoadBalancingPeer.SendOperation(OperationCode.WebRpc, opParameters, SendOptions.SendReliable); - } - - - /// - /// Registers an object for callbacks for the implemented callback-interfaces. - /// - /// - /// Adding and removing callback targets is queued to not mess with callbacks in execution. - /// Internally, this means that the addition/removal is done before the LoadBalancingClient - /// calls the next callbacks. This detail should not affect a game's workflow. - /// - /// The covered callback interfaces are: IConnectionCallbacks, IMatchmakingCallbacks, - /// ILobbyCallbacks, IInRoomCallbacks, IOnEventCallback and IWebRpcCallback. - /// - /// See: - /// - /// The object that registers to get callbacks from this client. - public void AddCallbackTarget(object target) - { - this.callbackTargetChanges.Enqueue(new CallbackTargetChange(target, true)); - } - - /// - /// Unregisters an object from callbacks for the implemented callback-interfaces. - /// - /// - /// Adding and removing callback targets is queued to not mess with callbacks in execution. - /// Internally, this means that the addition/removal is done before the LoadBalancingClient - /// calls the next callbacks. This detail should not affect a game's workflow. - /// - /// The covered callback interfaces are: IConnectionCallbacks, IMatchmakingCallbacks, - /// ILobbyCallbacks, IInRoomCallbacks, IOnEventCallback and IWebRpcCallback. - /// - /// See: - /// - /// The object that unregisters from getting callbacks. - public void RemoveCallbackTarget(object target) - { - this.callbackTargetChanges.Enqueue(new CallbackTargetChange(target, false)); - } - - - /// - /// Applies queued callback cahnges from a queue to the actual containers. Will cause exceptions if used while callbacks execute. - /// - /// - /// There is no explicit check that this is not called during callbacks, however the implemented, private logic takes care of this. - /// - protected internal void UpdateCallbackTargets() - { - while (this.callbackTargetChanges.Count > 0) - { - CallbackTargetChange change = this.callbackTargetChanges.Dequeue(); - - if (change.AddTarget) - { - if (this.callbackTargets.Contains(change.Target)) - { - //Debug.Log("UpdateCallbackTargets skipped adding a target, as the object is already registered. Target: " + change.Target); - continue; - } - - this.callbackTargets.Add(change.Target); - } - else - { - if (!this.callbackTargets.Contains(change.Target)) - { - //Debug.Log("UpdateCallbackTargets skipped removing a target, as the object is not registered. Target: " + change.Target); - continue; - } - - this.callbackTargets.Remove(change.Target); - } - - this.UpdateCallbackTarget(change, this.InRoomCallbackTargets); - this.UpdateCallbackTarget(change, this.ConnectionCallbackTargets); - this.UpdateCallbackTarget(change, this.MatchMakingCallbackTargets); - this.UpdateCallbackTarget(change, this.LobbyCallbackTargets); - this.UpdateCallbackTarget(change, this.WebRpcCallbackTargets); - this.UpdateCallbackTarget(change, this.ErrorInfoCallbackTargets); - - IOnEventCallback onEventCallback = change.Target as IOnEventCallback; - if (onEventCallback != null) - { - if (change.AddTarget) - { - EventReceived += onEventCallback.OnEvent; - } - else - { - EventReceived -= onEventCallback.OnEvent; - } - } - } - } - - /// Helper method to cast and apply a target per (interface) type. - /// Either of the interfaces for callbacks. - /// The queued change to apply (add or remove) some target. - /// The container that calls callbacks on it's list of targets. - private void UpdateCallbackTarget(CallbackTargetChange change, List container) where T : class - { - T target = change.Target as T; - if (target != null) - { - if (change.AddTarget) - { - container.Add(target); - } - else - { - container.Remove(target); - } - } - } - } - - - /// - /// Collection of "organizational" callbacks for the Realtime Api to cover: Connection and Regions. - /// - /// - /// Classes that implement this interface must be registered to get callbacks for various situations. - /// - /// To register for callbacks, call and pass the class implementing this interface - /// To stop getting callbacks, call and pass the class implementing this interface - /// - /// - /// \ingroup callbacks - public interface IConnectionCallbacks - { - /// - /// Called to signal that the "low level connection" got established but before the client can call operation on the server. - /// - /// - /// After the (low level transport) connection is established, the client will automatically send - /// the Authentication operation, which needs to get a response before the client can call other operations. - /// - /// Your logic should wait for either: OnRegionListReceived or OnConnectedToMaster. - /// - /// This callback is useful to detect if the server can be reached at all (technically). - /// Most often, it's enough to implement OnDisconnected(DisconnectCause cause) and check for the cause. - /// - /// This is not called for transitions from the masterserver to game servers. - /// - void OnConnected(); - - /// - /// Called when the client is connected to the Master Server and ready for matchmaking and other tasks. - /// - /// - /// The list of available rooms won't become available unless you join a lobby via LoadBalancingClient.OpJoinLobby. - /// You can join rooms and create them even without being in a lobby. The default lobby is used in that case. - /// - void OnConnectedToMaster(); - - /// - /// Called after disconnecting from the Photon server. It could be a failure or an explicit disconnect call - /// - /// - /// The reason for this disconnect is provided as DisconnectCause. - /// - void OnDisconnected(DisconnectCause cause); - - /// - /// Called when the Name Server provided a list of regions for your title. - /// - /// Check the RegionHandler class description, to make use of the provided values. - /// The currently used RegionHandler. - void OnRegionListReceived(RegionHandler regionHandler); - - - /// - /// Called when your Custom Authentication service responds with additional data. - /// - /// - /// Custom Authentication services can include some custom data in their response. - /// When present, that data is made available in this callback as Dictionary. - /// While the keys of your data have to be strings, the values can be either string or a number (in Json). - /// You need to make extra sure, that the value type is the one you expect. Numbers become (currently) int64. - /// - /// Example: void OnCustomAuthenticationResponse(Dictionary<string, object> data) { ... } - /// - /// - void OnCustomAuthenticationResponse(Dictionary data); - - /// - /// Called when the custom authentication failed. Followed by disconnect! - /// - /// - /// Custom Authentication can fail due to user-input, bad tokens/secrets. - /// If authentication is successful, this method is not called. Implement OnJoinedLobby() or OnConnectedToMaster() (as usual). - /// - /// During development of a game, it might also fail due to wrong configuration on the server side. - /// In those cases, logging the debugMessage is very important. - /// - /// Unless you setup a custom authentication service for your app (in the [Dashboard](https://dashboard.photonengine.com)), - /// this won't be called! - /// - /// Contains a debug message why authentication failed. This has to be fixed during development. - void OnCustomAuthenticationFailed(string debugMessage); - - } - - - /// - /// Collection of "organizational" callbacks for the Realtime Api to cover the Lobby. - /// - /// - /// Classes that implement this interface must be registered to get callbacks for various situations. - /// - /// To register for callbacks, call and pass the class implementing this interface - /// To stop getting callbacks, call and pass the class implementing this interface - /// - /// - /// \ingroup callbacks - public interface ILobbyCallbacks - { - - /// - /// Called on entering a lobby on the Master Server. The actual room-list updates will call OnRoomListUpdate. - /// - /// - /// While in the lobby, the roomlist is automatically updated in fixed intervals (which you can't modify in the public cloud). - /// The room list gets available via OnRoomListUpdate. - /// - void OnJoinedLobby(); - - /// - /// Called after leaving a lobby. - /// - /// - /// When you leave a lobby, [OpCreateRoom](@ref OpCreateRoom) and [OpJoinRandomRoom](@ref OpJoinRandomRoom) - /// automatically refer to the default lobby. - /// - void OnLeftLobby(); - - /// - /// Called for any update of the room-listing while in a lobby (InLobby) on the Master Server. - /// - /// - /// Each item is a RoomInfo which might include custom properties (provided you defined those as lobby-listed when creating a room). - /// Not all types of lobbies provide a listing of rooms to the client. Some are silent and specialized for server-side matchmaking. - /// - void OnRoomListUpdate(List roomList); - - /// - /// Called when the Master Server sent an update for the Lobby Statistics. - /// - /// - /// This callback has two preconditions: - /// EnableLobbyStatistics must be set to true, before this client connects. - /// And the client has to be connected to the Master Server, which is providing the info about lobbies. - /// - void OnLobbyStatisticsUpdate(List lobbyStatistics); - } - - - /// - /// Collection of "organizational" callbacks for the Realtime Api to cover Matchmaking. - /// - /// - /// Classes that implement this interface must be registered to get callbacks for various situations. - /// - /// To register for callbacks, call and pass the class implementing this interface - /// To stop getting callbacks, call and pass the class implementing this interface - /// - /// - /// \ingroup callbacks - public interface IMatchmakingCallbacks - { - - /// - /// Called when the server sent the response to a FindFriends request. - /// - /// - /// After calling OpFindFriends, the Master Server will cache the friend list and send updates to the friend - /// list. The friends includes the name, userId, online state and the room (if any) for each requested user/friend. - /// - /// Use the friendList to update your UI and store it, if the UI should highlight changes. - /// - void OnFriendListUpdate(List friendList); - - /// - /// Called when this client created a room and entered it. OnJoinedRoom() will be called as well. - /// - /// - /// This callback is only called on the client which created a room (see OpCreateRoom). - /// - /// As any client might close (or drop connection) anytime, there is a chance that the - /// creator of a room does not execute OnCreatedRoom. - /// - /// If you need specific room properties or a "start signal", implement OnMasterClientSwitched() - /// and make each new MasterClient check the room's state. - /// - void OnCreatedRoom(); - - /// - /// Called when the server couldn't create a room (OpCreateRoom failed). - /// - /// - /// Creating a room may fail for various reasons. Most often, the room already exists (roomname in use) or - /// the RoomOptions clash and it's impossible to create the room. - /// - /// When creating a room fails on a Game Server: - /// The client will cache the failure internally and returns to the Master Server before it calls the fail-callback. - /// This way, the client is ready to find/create a room at the moment of the callback. - /// In this case, the client skips calling OnConnectedToMaster but returning to the Master Server will still call OnConnected. - /// Treat callbacks of OnConnected as pure information that the client could connect. - /// - /// Operation ReturnCode from the server. - /// Debug message for the error. - void OnCreateRoomFailed(short returnCode, string message); - - /// - /// Called when the LoadBalancingClient entered a room, no matter if this client created it or simply joined. - /// - /// - /// When this is called, you can access the existing players in Room.Players, their custom properties and Room.CustomProperties. - /// - /// In this callback, you could create player objects. For example in Unity, instantiate a prefab for the player. - /// - /// If you want a match to be started "actively", enable the user to signal "ready" (using OpRaiseEvent or a Custom Property). - /// - void OnJoinedRoom(); - - /// - /// Called when a previous OpJoinRoom call failed on the server. - /// - /// - /// Joining a room may fail for various reasons. Most often, the room is full or does not exist anymore - /// (due to someone else being faster or closing the room). - /// - /// When joining a room fails on a Game Server: - /// The client will cache the failure internally and returns to the Master Server before it calls the fail-callback. - /// This way, the client is ready to find/create a room at the moment of the callback. - /// In this case, the client skips calling OnConnectedToMaster but returning to the Master Server will still call OnConnected. - /// Treat callbacks of OnConnected as pure information that the client could connect. - /// - /// Operation ReturnCode from the server. - /// Debug message for the error. - void OnJoinRoomFailed(short returnCode, string message); - - /// - /// Called when a previous OpJoinRandom call failed on the server. - /// - /// - /// The most common causes are that a room is full or does not exist (due to someone else being faster or closing the room). - /// - /// This operation is only ever sent to the Master Server. Once a room is found by the Master Server, the client will - /// head off to the designated Game Server and use the operation Join on the Game Server. - /// - /// When using multiple lobbies (via OpJoinLobby or a TypedLobby parameter), another lobby might have more/fitting rooms.
- ///
- /// Operation ReturnCode from the server. - /// Debug message for the error. - void OnJoinRandomFailed(short returnCode, string message); - - /// - /// Called when the local user/client left a room, so the game's logic can clean up it's internal state. - /// - /// - /// When leaving a room, the LoadBalancingClient will disconnect the Game Server and connect to the Master Server. - /// This wraps up multiple internal actions. - /// - /// Wait for the callback OnConnectedToMaster, before you use lobbies and join or create rooms. - /// - void OnLeftRoom(); - } - - /// - /// Collection of "in room" callbacks for the Realtime Api to cover: Players entering or leaving, property updates and Master Client switching. - /// - /// - /// Classes that implement this interface must be registered to get callbacks for various situations. - /// - /// To register for callbacks, call and pass the class implementing this interface - /// To stop getting callbacks, call and pass the class implementing this interface - /// - /// - /// \ingroup callbacks - public interface IInRoomCallbacks - { - /// - /// Called when a remote player entered the room. This Player is already added to the playerlist. - /// - /// - /// If your game starts with a certain number of players, this callback can be useful to check the - /// Room.playerCount and find out if you can start. - /// - void OnPlayerEnteredRoom(Player newPlayer); - - /// - /// Called when a remote player left the room or became inactive. Check otherPlayer.IsInactive. - /// - /// - /// If another player leaves the room or if the server detects a lost connection, this callback will - /// be used to notify your game logic. - /// - /// Depending on the room's setup, players may become inactive, which means they may return and retake - /// their spot in the room. In such cases, the Player stays in the Room.Players dictionary. - /// - /// If the player is not just inactive, it gets removed from the Room.Players dictionary, before - /// the callback is called. - /// - void OnPlayerLeftRoom(Player otherPlayer); - - - /// - /// Called when a room's custom properties changed. The propertiesThatChanged contains all that was set via Room.SetCustomProperties. - /// - /// - /// Since v1.25 this method has one parameter: Hashtable propertiesThatChanged.
- /// Changing properties must be done by Room.SetCustomProperties, which causes this callback locally, too. - ///
- /// - void OnRoomPropertiesUpdate(Hashtable propertiesThatChanged); - - /// - /// Called when custom player-properties are changed. Player and the changed properties are passed as object[]. - /// - /// - /// Changing properties must be done by Player.SetCustomProperties, which causes this callback locally, too. - /// - /// Contains Player that changed. - /// Contains the properties that changed. - void OnPlayerPropertiesUpdate(Player targetPlayer, Hashtable changedProps); - - /// - /// Called after switching to a new MasterClient when the current one leaves. - /// - /// - /// This is not called when this client enters a room. - /// The former MasterClient is still in the player list when this method get called. - /// - void OnMasterClientSwitched(Player newMasterClient); - } - - - /// - /// Event callback for the Realtime Api. Covers events from the server and those sent by clients via OpRaiseEvent. - /// - /// - /// Classes that implement this interface must be registered to get callbacks for various situations. - /// - /// To register for callbacks, call and pass the class implementing this interface - /// To stop getting callbacks, call and pass the class implementing this interface - /// - /// - /// \ingroup callbacks - public interface IOnEventCallback - { - /// Called for any incoming events. - /// - /// To receive events, implement IOnEventCallback in any class and register it via AddCallbackTarget - /// (either in LoadBalancingClient or PhotonNetwork). - /// - /// With the EventData.Sender you can look up the Player who sent the event. - /// - /// It is best practice to assign an eventCode for each different type of content and action, so the Code - /// will be essential to read the incoming events. - /// - void OnEvent(EventData photonEvent); - } - - /// - /// Interface for "WebRpc" callbacks for the Realtime Api. Currently includes only responses for Web RPCs. - /// - /// - /// Classes that implement this interface must be registered to get callbacks for various situations. - /// - /// To register for callbacks, call and pass the class implementing this interface - /// To stop getting callbacks, call and pass the class implementing this interface - /// - /// - /// \ingroup callbacks - public interface IWebRpcCallback - { - /// - /// Called when the response to a WebRPC is available. See . - /// - /// - /// Important: The response.ReturnCode is 0 if Photon was able to reach your web-service.
- /// The content of the response is what your web-service sent. You can create a WebRpcResponse from it.
- /// Example: WebRpcResponse webResponse = new WebRpcResponse(operationResponse);
- /// - /// Please note: Class OperationResponse is in a namespace which needs to be "used":
- /// using ExitGames.Client.Photon; // includes OperationResponse (and other classes) - ///
- /// - /// public void OnWebRpcResponse(OperationResponse response) - /// { - /// Debug.LogFormat("WebRPC operation response {0}", response.ToStringFull()); - /// switch (response.ReturnCode) - /// { - /// case ErrorCode.Ok: - /// WebRpcResponse webRpcResponse = new WebRpcResponse(response); - /// Debug.LogFormat("Parsed WebRPC response {0}", response.ToStringFull()); - /// if (string.IsNullOrEmpty(webRpcResponse.Name)) - /// { - /// Debug.LogError("Unexpected: WebRPC response did not contain WebRPC method name"); - /// } - /// if (webRpcResponse.ResultCode == 0) // success - /// { - /// switch (webRpcResponse.Name) - /// { - /// // todo: add your code here - /// case GetGameListWebRpcMethodName: // example - /// // ... - /// break; - /// } - /// } - /// else if (webRpcResponse.ResultCode == -1) - /// { - /// Debug.LogErrorFormat("Web server did not return ResultCode for WebRPC method=\"{0}\", Message={1}", webRpcResponse.Name, webRpcResponse.Message); - /// } - /// else - /// { - /// Debug.LogErrorFormat("Web server returned ResultCode={0} for WebRPC method=\"{1}\", Message={2}", webRpcResponse.ResultCode, webRpcResponse.Name, webRpcResponse.Message); - /// } - /// break; - /// case ErrorCode.ExternalHttpCallFailed: // web service unreachable - /// Debug.LogErrorFormat("WebRPC call failed as request could not be sent to the server. {0}", response.DebugMessage); - /// break; - /// case ErrorCode.HttpLimitReached: // too many WebRPCs in a short period of time - /// // the debug message should contain the limit exceeded - /// Debug.LogErrorFormat("WebRPCs rate limit exceeded: {0}", response.DebugMessage); - /// break; - /// case ErrorCode.InvalidOperation: // WebRPC not configured at all OR not configured properly OR trying to send on name server - /// if (PhotonNetwork.Server == ServerConnection.NameServer) - /// { - /// Debug.LogErrorFormat("WebRPC not supported on NameServer. {0}", response.DebugMessage); - /// } - /// else - /// { - /// Debug.LogErrorFormat("WebRPC not properly configured or not configured at all. {0}", response.DebugMessage); - /// } - /// break; - /// default: - /// // other unknown error, unexpected - /// Debug.LogErrorFormat("Unexpected error, {0} {1}", response.ReturnCode, response.DebugMessage); - /// break; - /// } - /// } - /// - /// - void OnWebRpcResponse(OperationResponse response); - } - - /// - /// Interface for event callback for the Realtime Api. - /// - /// - /// Classes that implement this interface must be registered to get callbacks for various situations. - /// - /// To register for callbacks, call and pass the class implementing this interface - /// To stop getting callbacks, call and pass the class implementing this interface - /// - /// - /// \ingroup callbacks - public interface IErrorInfoCallback - { - /// - /// Called when the client receives an event from the server indicating that an error happened there. - /// - /// - /// In most cases this could be either: - /// 1. an error from webhooks plugin (if HasErrorInfo is enabled), read more here: - /// https://doc.photonengine.com/en-us/realtime/current/gameplay/web-extensions/webhooks#options - /// 2. an error sent from a custom server plugin via PluginHost.BroadcastErrorInfoEvent, see example here: - /// https://doc.photonengine.com/en-us/server/current/plugins/manual#handling_http_response - /// 3. an error sent from the server, for example, when the limit of cached events has been exceeded in the room - /// (all clients will be disconnected and the room will be closed in this case) - /// read more here: https://doc.photonengine.com/en-us/realtime/current/gameplay/cached-events#special_considerations - /// - /// If you implement or you will also get this event. - /// - /// Object containing information about the error - void OnErrorInfo(ErrorInfo errorInfo); - } - - /// - /// Container type for callbacks defined by IConnectionCallbacks. See LoadBalancingCallbackTargets. - /// - /// - /// While the interfaces of callbacks wrap up the methods that will be called, - /// the container classes implement a simple way to call a method on all registered objects. - /// - public class ConnectionCallbacksContainer : List, IConnectionCallbacks - { - private readonly LoadBalancingClient client; - - public ConnectionCallbacksContainer(LoadBalancingClient client) - { - this.client = client; - } - - public void OnConnected() - { - this.client.UpdateCallbackTargets(); - - foreach (IConnectionCallbacks target in this) - { - target.OnConnected(); - } - } - - public void OnConnectedToMaster() - { - this.client.UpdateCallbackTargets(); - - foreach (IConnectionCallbacks target in this) - { - target.OnConnectedToMaster(); - } - } - - public void OnRegionListReceived(RegionHandler regionHandler) - { - this.client.UpdateCallbackTargets(); - - foreach (IConnectionCallbacks target in this) - { - target.OnRegionListReceived(regionHandler); - } - } - - public void OnDisconnected(DisconnectCause cause) - { - this.client.UpdateCallbackTargets(); - - foreach (IConnectionCallbacks target in this) - { - target.OnDisconnected(cause); - } - } - - public void OnCustomAuthenticationResponse(Dictionary data) - { - this.client.UpdateCallbackTargets(); - - foreach (IConnectionCallbacks target in this) - { - target.OnCustomAuthenticationResponse(data); - } - } - - public void OnCustomAuthenticationFailed(string debugMessage) - { - this.client.UpdateCallbackTargets(); - - foreach (IConnectionCallbacks target in this) - { - target.OnCustomAuthenticationFailed(debugMessage); - } - } - } - - /// - /// Container type for callbacks defined by IMatchmakingCallbacks. See MatchMakingCallbackTargets. - /// - /// - /// While the interfaces of callbacks wrap up the methods that will be called, - /// the container classes implement a simple way to call a method on all registered objects. - /// - public class MatchMakingCallbacksContainer : List, IMatchmakingCallbacks - { - private readonly LoadBalancingClient client; - - public MatchMakingCallbacksContainer(LoadBalancingClient client) - { - this.client = client; - } - - public void OnCreatedRoom() - { - this.client.UpdateCallbackTargets(); - - foreach (IMatchmakingCallbacks target in this) - { - target.OnCreatedRoom(); - } - } - - public void OnJoinedRoom() - { - this.client.UpdateCallbackTargets(); - - foreach (IMatchmakingCallbacks target in this) - { - target.OnJoinedRoom(); - } - } - - public void OnCreateRoomFailed(short returnCode, string message) - { - this.client.UpdateCallbackTargets(); - - foreach (IMatchmakingCallbacks target in this) - { - target.OnCreateRoomFailed(returnCode, message); - } - } - - public void OnJoinRandomFailed(short returnCode, string message) - { - this.client.UpdateCallbackTargets(); - - foreach (IMatchmakingCallbacks target in this) - { - target.OnJoinRandomFailed(returnCode, message); - } - } - - public void OnJoinRoomFailed(short returnCode, string message) - { - this.client.UpdateCallbackTargets(); - - foreach (IMatchmakingCallbacks target in this) - { - target.OnJoinRoomFailed(returnCode, message); - } - } - - public void OnLeftRoom() - { - this.client.UpdateCallbackTargets(); - - foreach (IMatchmakingCallbacks target in this) - { - target.OnLeftRoom(); - } - } - - public void OnFriendListUpdate(List friendList) - { - this.client.UpdateCallbackTargets(); - - foreach (IMatchmakingCallbacks target in this) - { - target.OnFriendListUpdate(friendList); - } - } - } - - - /// - /// Container type for callbacks defined by IInRoomCallbacks. See InRoomCallbackTargets. - /// - /// - /// While the interfaces of callbacks wrap up the methods that will be called, - /// the container classes implement a simple way to call a method on all registered objects. - /// - internal class InRoomCallbacksContainer : List, IInRoomCallbacks - { - private readonly LoadBalancingClient client; - - public InRoomCallbacksContainer(LoadBalancingClient client) - { - this.client = client; - } - - public void OnPlayerEnteredRoom(Player newPlayer) - { - this.client.UpdateCallbackTargets(); - - foreach (IInRoomCallbacks target in this) - { - target.OnPlayerEnteredRoom(newPlayer); - } - } - - public void OnPlayerLeftRoom(Player otherPlayer) - { - this.client.UpdateCallbackTargets(); - - foreach (IInRoomCallbacks target in this) - { - target.OnPlayerLeftRoom(otherPlayer); - } - } - - public void OnRoomPropertiesUpdate(Hashtable propertiesThatChanged) - { - this.client.UpdateCallbackTargets(); - - foreach (IInRoomCallbacks target in this) - { - target.OnRoomPropertiesUpdate(propertiesThatChanged); - } - } - - public void OnPlayerPropertiesUpdate(Player targetPlayer, Hashtable changedProp) - { - this.client.UpdateCallbackTargets(); - - foreach (IInRoomCallbacks target in this) - { - target.OnPlayerPropertiesUpdate(targetPlayer, changedProp); - } - } - - public void OnMasterClientSwitched(Player newMasterClient) - { - this.client.UpdateCallbackTargets(); - - foreach (IInRoomCallbacks target in this) - { - target.OnMasterClientSwitched(newMasterClient); - } - } - } - - /// - /// Container type for callbacks defined by ILobbyCallbacks. See LobbyCallbackTargets. - /// - /// - /// While the interfaces of callbacks wrap up the methods that will be called, - /// the container classes implement a simple way to call a method on all registered objects. - /// - internal class LobbyCallbacksContainer : List, ILobbyCallbacks - { - private readonly LoadBalancingClient client; - - public LobbyCallbacksContainer(LoadBalancingClient client) - { - this.client = client; - } - - public void OnJoinedLobby() - { - this.client.UpdateCallbackTargets(); - - foreach (ILobbyCallbacks target in this) - { - target.OnJoinedLobby(); - } - } - - public void OnLeftLobby() - { - this.client.UpdateCallbackTargets(); - - foreach (ILobbyCallbacks target in this) - { - target.OnLeftLobby(); - } - } - - public void OnRoomListUpdate(List roomList) - { - this.client.UpdateCallbackTargets(); - - foreach (ILobbyCallbacks target in this) - { - target.OnRoomListUpdate(roomList); - } - } - - public void OnLobbyStatisticsUpdate(List lobbyStatistics) - { - this.client.UpdateCallbackTargets(); - - foreach (ILobbyCallbacks target in this) - { - target.OnLobbyStatisticsUpdate(lobbyStatistics); - } - } - } - - /// - /// Container type for callbacks defined by IWebRpcCallback. See WebRpcCallbackTargets. - /// - /// - /// While the interfaces of callbacks wrap up the methods that will be called, - /// the container classes implement a simple way to call a method on all registered objects. - /// - internal class WebRpcCallbacksContainer : List, IWebRpcCallback - { - private LoadBalancingClient client; - - public WebRpcCallbacksContainer(LoadBalancingClient client) - { - this.client = client; - } - - public void OnWebRpcResponse(OperationResponse response) - { - this.client.UpdateCallbackTargets(); - - foreach (IWebRpcCallback target in this) - { - target.OnWebRpcResponse(response); - } - } - } - - - /// - /// Container type for callbacks defined by . See . - /// - /// - /// While the interfaces of callbacks wrap up the methods that will be called, - /// the container classes implement a simple way to call a method on all registered objects. - /// - internal class ErrorInfoCallbacksContainer : List, IErrorInfoCallback - { - private LoadBalancingClient client; - - public ErrorInfoCallbacksContainer(LoadBalancingClient client) - { - this.client = client; - } - - public void OnErrorInfo(ErrorInfo errorInfo) - { - this.client.UpdateCallbackTargets(); - foreach (IErrorInfoCallback target in this) - { - target.OnErrorInfo(errorInfo); - } - } - } - - /// - /// Class wrapping the received event. - /// - /// - /// This is passed inside callback. - /// If you implement or you will also get but not parsed. - /// - /// In most cases this could be either: - /// 1. an error from webhooks plugin (if HasErrorInfo is enabled), read more here: - /// https://doc.photonengine.com/en-us/realtime/current/gameplay/web-extensions/webhooks#options - /// 2. an error sent from a custom server plugin via PluginHost.BroadcastErrorInfoEvent, see example here: - /// https://doc.photonengine.com/en-us/server/current/plugins/manual#handling_http_response - /// 3. an error sent from the server, for example, when the limit of cached events has been exceeded in the room - /// (all clients will be disconnected and the room will be closed in this case) - /// read more here: https://doc.photonengine.com/en-us/realtime/current/gameplay/cached-events#special_considerations - /// - public class ErrorInfo - { - /// - /// String containing information about the error. - /// - public readonly string Info; - - public ErrorInfo(EventData eventData) - { - this.Info = eventData[ParameterCode.Info] as string; - } - - public override string ToString() - { - return string.Format("ErrorInfo: {0}", this.Info); - } - } -} \ No newline at end of file diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/LoadBalancingClient.cs.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/LoadBalancingClient.cs.meta deleted file mode 100644 index fa8c5c5bf..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/LoadBalancingClient.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9fd0e102b1ad3f042afc3c02624b81d1 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/LoadBalancingPeer.cs b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/LoadBalancingPeer.cs deleted file mode 100644 index 66e1aeaf8..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/LoadBalancingPeer.cs +++ /dev/null @@ -1,2223 +0,0 @@ -// ---------------------------------------------------------------------------- -// -// Loadbalancing Framework for Photon - Copyright (C) 2018 Exit Games GmbH -// -// -// Provides operations to use the LoadBalancing and Cloud photon servers. -// No logic is implemented here. -// -// developer@photonengine.com -// ---------------------------------------------------------------------------- - -#if UNITY_4_7 || UNITY_5 || UNITY_5_3_OR_NEWER -#define SUPPORTED_UNITY -#endif - - -namespace Photon.Realtime -{ - using System; - using System.Collections; - using System.Collections.Generic; - using ExitGames.Client.Photon; - - #if SUPPORTED_UNITY - using UnityEngine; - using Debug = UnityEngine.Debug; - #endif - #if SUPPORTED_UNITY || NETFX_CORE - using Hashtable = ExitGames.Client.Photon.Hashtable; - using SupportClass = ExitGames.Client.Photon.SupportClass; - #endif - - - /// - /// A LoadBalancingPeer provides the operations and enum definitions needed to use the LoadBalancing server application which is also used in Photon Cloud. - /// - /// - /// This class is internally used. - /// The LoadBalancingPeer does not keep a state, instead this is done by a LoadBalancingClient. - /// - public class LoadBalancingPeer : PhotonPeer - { - /// Obsolete accessor to the RegionHandler.PingImplementation. - [Obsolete("Use RegionHandler.PingImplementation directly.")] - protected internal static Type PingImplementation - { - get { return RegionHandler.PingImplementation; } - set { RegionHandler.PingImplementation = value; } - } - - - private readonly Pool paramDictionaryPool = new Pool( - () => new ParameterDictionary(), - x => x.Clear(), - 1); // used in OpRaiseEvent() (avoids lots of new Dictionary() calls) - - - /// - /// Creates a Peer with specified connection protocol. You need to set the Listener before using the peer. - /// - /// Each connection protocol has it's own default networking ports for Photon. - /// The preferred option is UDP. - public LoadBalancingPeer(ConnectionProtocol protocolType) : base(protocolType) - { - // this does not require a Listener, so: - // make sure to set this.Listener before using a peer! - - this.ConfigUnitySockets(); - } - - /// - /// Creates a Peer with specified connection protocol and a Listener for callbacks. - /// - public LoadBalancingPeer(IPhotonPeerListener listener, ConnectionProtocol protocolType) : this(protocolType) - { - this.Listener = listener; - } - - - // Sets up the socket implementations to use, depending on platform - [System.Diagnostics.Conditional("SUPPORTED_UNITY")] - private void ConfigUnitySockets() - { - Type websocketType = null; - #if (UNITY_XBOXONE || UNITY_GAMECORE) && !UNITY_EDITOR - websocketType = Type.GetType("ExitGames.Client.Photon.SocketNativeSource, PhotonRealtime", false); - if (websocketType == null) - { - websocketType = Type.GetType("ExitGames.Client.Photon.SocketNativeSource, Assembly-CSharp-firstpass", false); - } - if (websocketType == null) - { - websocketType = Type.GetType("ExitGames.Client.Photon.SocketNativeSource, Assembly-CSharp", false); - } - if (websocketType == null) - { - Debug.LogError("UNITY_XBOXONE is defined but peer could not find SocketNativeSource. Check your project files to make sure the native WSS implementation is available. Won't connect."); - } - #else - // to support WebGL export in Unity, we find and assign the SocketWebTcp class (if it's in the project). - // alternatively class SocketWebTcp might be in the Photon3Unity3D.dll - websocketType = Type.GetType("ExitGames.Client.Photon.SocketWebTcp, PhotonWebSocket", false); - if (websocketType == null) - { - websocketType = Type.GetType("ExitGames.Client.Photon.SocketWebTcp, Assembly-CSharp-firstpass", false); - } - if (websocketType == null) - { - websocketType = Type.GetType("ExitGames.Client.Photon.SocketWebTcp, Assembly-CSharp", false); - } - #endif - - if (websocketType != null) - { - this.SocketImplementationConfig[ConnectionProtocol.WebSocket] = websocketType; - this.SocketImplementationConfig[ConnectionProtocol.WebSocketSecure] = websocketType; - } - - #if NET_4_6 && (UNITY_EDITOR || !ENABLE_IL2CPP) && !NETFX_CORE - this.SocketImplementationConfig[ConnectionProtocol.Udp] = typeof(SocketUdpAsync); - this.SocketImplementationConfig[ConnectionProtocol.Tcp] = typeof(SocketTcpAsync); - #endif - } - - - public virtual bool OpGetRegions(string appId) - { - Dictionary parameters = new Dictionary(1); - parameters[(byte)ParameterCode.ApplicationId] = appId; - - return this.SendOperation(OperationCode.GetRegions, parameters, new SendOptions() { Reliability = true, Encrypt = true }); - } - - /// - /// Joins the lobby on the Master Server, where you get a list of RoomInfos of currently open rooms. - /// This is an async request which triggers a OnOperationResponse() call. - /// - /// The lobby join to. - /// If the operation could be sent (has to be connected). - public virtual bool OpJoinLobby(TypedLobby lobby = null) - { - if (this.DebugOut >= DebugLevel.INFO) - { - this.Listener.DebugReturn(DebugLevel.INFO, "OpJoinLobby()"); - } - - Dictionary parameters = null; - if (lobby != null && !lobby.IsDefault) - { - parameters = new Dictionary(); - parameters[(byte)ParameterCode.LobbyName] = lobby.Name; - parameters[(byte)ParameterCode.LobbyType] = (byte)lobby.Type; - } - - return this.SendOperation(OperationCode.JoinLobby, parameters, SendOptions.SendReliable); - } - - - /// - /// Leaves the lobby on the Master Server. - /// This is an async request which triggers a OnOperationResponse() call. - /// - /// If the operation could be sent (requires connection). - public virtual bool OpLeaveLobby() - { - if (this.DebugOut >= DebugLevel.INFO) - { - this.Listener.DebugReturn(DebugLevel.INFO, "OpLeaveLobby()"); - } - - return this.SendOperation(OperationCode.LeaveLobby, (Dictionary)null, SendOptions.SendReliable); - } - - - /// Used by OpJoinRoom and by OpCreateRoom alike. - private void RoomOptionsToOpParameters(Dictionary op, RoomOptions roomOptions, bool usePropertiesKey = false) - { - if (roomOptions == null) - { - roomOptions = new RoomOptions(); - } - - Hashtable gameProperties = new Hashtable(); - gameProperties[GamePropertyKey.IsOpen] = roomOptions.IsOpen; - gameProperties[GamePropertyKey.IsVisible] = roomOptions.IsVisible; - gameProperties[GamePropertyKey.PropsListedInLobby] = (roomOptions.CustomRoomPropertiesForLobby == null) ? new string[0] : roomOptions.CustomRoomPropertiesForLobby; - gameProperties.MergeStringKeys(roomOptions.CustomRoomProperties); - if (roomOptions.MaxPlayers > 0) - { - gameProperties[GamePropertyKey.MaxPlayers] = roomOptions.MaxPlayers; - } - - if (!usePropertiesKey) - { - op[ParameterCode.GameProperties] = gameProperties; // typically, the key for game props is 248 - } - else - { - op[ParameterCode.Properties] = gameProperties; // when an op uses 248 as filter, the "create room" props can be set as 251 - } - - - int flags = 0; // a new way to send the room options as bitwise-flags - - if (roomOptions.CleanupCacheOnLeave) - { - op[ParameterCode.CleanupCacheOnLeave] = true; // this defines the server's room settings and logic - flags = flags | (int)RoomOptionBit.DeleteCacheOnLeave; // this defines the server's room settings and logic (for servers that support flags) - } - else - { - op[ParameterCode.CleanupCacheOnLeave] = false; // this defines the server's room settings and logic - gameProperties[GamePropertyKey.CleanupCacheOnLeave] = false; // this is only informational for the clients which join - } - - #if SERVERSDK - op[ParameterCode.CheckUserOnJoin] = roomOptions.CheckUserOnJoin; - if (roomOptions.CheckUserOnJoin) - { - flags = flags | (int) RoomOptionBit.CheckUserOnJoin; - } - #else - // in PUN v1.88 and PUN 2, CheckUserOnJoin is set by default: - flags = flags | (int) RoomOptionBit.CheckUserOnJoin; - op[ParameterCode.CheckUserOnJoin] = true; - #endif - - if (roomOptions.PlayerTtl > 0 || roomOptions.PlayerTtl == -1) - { - op[ParameterCode.PlayerTTL] = roomOptions.PlayerTtl; // TURNBASED - } - - if (roomOptions.EmptyRoomTtl > 0) - { - op[ParameterCode.EmptyRoomTTL] = roomOptions.EmptyRoomTtl; //TURNBASED - } - - if (roomOptions.SuppressRoomEvents) - { - flags = flags | (int)RoomOptionBit.SuppressRoomEvents; - op[ParameterCode.SuppressRoomEvents] = true; - } - if (roomOptions.SuppressPlayerInfo) - { - flags = flags | (int)RoomOptionBit.SuppressPlayerInfo; - } - - if (roomOptions.Plugins != null) - { - op[ParameterCode.Plugins] = roomOptions.Plugins; - } - if (roomOptions.PublishUserId) - { - flags = flags | (int)RoomOptionBit.PublishUserId; - op[ParameterCode.PublishUserId] = true; - } - if (roomOptions.DeleteNullProperties) - { - flags = flags | (int)RoomOptionBit.DeleteNullProps; // this is only settable as flag - } - if (roomOptions.BroadcastPropsChangeToAll) - { - flags = flags | (int)RoomOptionBit.BroadcastPropsChangeToAll; // this is only settable as flag - } - - op[ParameterCode.RoomOptionFlags] = flags; - } - - - /// - /// Creates a room (on either Master or Game Server). - /// The OperationResponse depends on the server the peer is connected to: - /// Master will return a Game Server to connect to. - /// Game Server will return the joined Room's data. - /// This is an async request which triggers a OnOperationResponse() call. - /// - /// - /// If the room is already existing, the OperationResponse will have a returnCode of ErrorCode.GameAlreadyExists. - /// - public virtual bool OpCreateRoom(EnterRoomParams opParams) - { - if (this.DebugOut >= DebugLevel.INFO) - { - this.Listener.DebugReturn(DebugLevel.INFO, "OpCreateRoom()"); - } - - Dictionary op = new Dictionary(); - - if (!string.IsNullOrEmpty(opParams.RoomName)) - { - op[ParameterCode.RoomName] = opParams.RoomName; - } - if (opParams.Lobby != null && !opParams.Lobby.IsDefault) - { - op[ParameterCode.LobbyName] = opParams.Lobby.Name; - op[ParameterCode.LobbyType] = (byte)opParams.Lobby.Type; - } - - if (opParams.ExpectedUsers != null && opParams.ExpectedUsers.Length > 0) - { - op[ParameterCode.Add] = opParams.ExpectedUsers; - } - if (opParams.OnGameServer) - { - if (opParams.PlayerProperties != null && opParams.PlayerProperties.Count > 0) - { - op[ParameterCode.PlayerProperties] = opParams.PlayerProperties; - } - op[ParameterCode.Broadcast] = true; // broadcast actor properties - - this.RoomOptionsToOpParameters(op, opParams.RoomOptions); - } - - //this.Listener.DebugReturn(DebugLevel.INFO, "OpCreateRoom: " + SupportClass.DictionaryToString(op)); - return this.SendOperation(OperationCode.CreateGame, op, SendOptions.SendReliable); - } - - /// - /// Joins a room by name or creates new room if room with given name not exists. - /// The OperationResponse depends on the server the peer is connected to: - /// Master will return a Game Server to connect to. - /// Game Server will return the joined Room's data. - /// This is an async request which triggers a OnOperationResponse() call. - /// - /// - /// If the room is not existing (anymore), the OperationResponse will have a returnCode of ErrorCode.GameDoesNotExist. - /// Other possible ErrorCodes are: GameClosed, GameFull. - /// - /// If the operation could be sent (requires connection). - public virtual bool OpJoinRoom(EnterRoomParams opParams) - { - if (this.DebugOut >= DebugLevel.INFO) - { - this.Listener.DebugReturn(DebugLevel.INFO, "OpJoinRoom()"); - } - Dictionary op = new Dictionary(); - - if (!string.IsNullOrEmpty(opParams.RoomName)) - { - op[ParameterCode.RoomName] = opParams.RoomName; - } - - if (opParams.JoinMode == JoinMode.CreateIfNotExists) - { - op[ParameterCode.JoinMode] = (byte)JoinMode.CreateIfNotExists; - if (opParams.Lobby != null && !opParams.Lobby.IsDefault) - { - op[ParameterCode.LobbyName] = opParams.Lobby.Name; - op[ParameterCode.LobbyType] = (byte)opParams.Lobby.Type; - } - } - else if (opParams.JoinMode == JoinMode.RejoinOnly) - { - op[ParameterCode.JoinMode] = (byte)JoinMode.RejoinOnly; // changed from JoinMode.JoinOrRejoin - } - - if (opParams.ExpectedUsers != null && opParams.ExpectedUsers.Length > 0) - { - op[ParameterCode.Add] = opParams.ExpectedUsers; - } - - if (opParams.OnGameServer) - { - if (opParams.PlayerProperties != null && opParams.PlayerProperties.Count > 0) - { - op[ParameterCode.PlayerProperties] = opParams.PlayerProperties; - } - op[ParameterCode.Broadcast] = true; // broadcast actor properties - - if (opParams.JoinMode == JoinMode.CreateIfNotExists) - { - this.RoomOptionsToOpParameters(op, opParams.RoomOptions); - } - } - - //this.Listener.DebugReturn(DebugLevel.INFO, "OpJoinRoom: " + SupportClass.DictionaryToString(op)); - return this.SendOperation(OperationCode.JoinGame, op, SendOptions.SendReliable); - } - - - /// - /// Operation to join a random, available room. Overloads take additional player properties. - /// This is an async request which triggers a OnOperationResponse() call. - /// If all rooms are closed or full, the OperationResponse will have a returnCode of ErrorCode.NoRandomMatchFound. - /// If successful, the OperationResponse contains a gameserver address and the name of some room. - /// - /// If the operation could be sent currently (requires connection). - public virtual bool OpJoinRandomRoom(OpJoinRandomRoomParams opJoinRandomRoomParams) - { - if (this.DebugOut >= DebugLevel.INFO) - { - this.Listener.DebugReturn(DebugLevel.INFO, "OpJoinRandomRoom()"); - } - - Hashtable expectedRoomProperties = new Hashtable(); - expectedRoomProperties.MergeStringKeys(opJoinRandomRoomParams.ExpectedCustomRoomProperties); - if (opJoinRandomRoomParams.ExpectedMaxPlayers > 0) - { - expectedRoomProperties[GamePropertyKey.MaxPlayers] = opJoinRandomRoomParams.ExpectedMaxPlayers; - } - - Dictionary opParameters = new Dictionary(); - if (expectedRoomProperties.Count > 0) - { - opParameters[ParameterCode.GameProperties] = expectedRoomProperties; - } - - if (opJoinRandomRoomParams.MatchingType != MatchmakingMode.FillRoom) - { - opParameters[ParameterCode.MatchMakingType] = (byte)opJoinRandomRoomParams.MatchingType; - } - - if (opJoinRandomRoomParams.TypedLobby != null && !opJoinRandomRoomParams.TypedLobby.IsDefault) - { - opParameters[ParameterCode.LobbyName] = opJoinRandomRoomParams.TypedLobby.Name; - opParameters[ParameterCode.LobbyType] = (byte)opJoinRandomRoomParams.TypedLobby.Type; - } - - if (!string.IsNullOrEmpty(opJoinRandomRoomParams.SqlLobbyFilter)) - { - opParameters[ParameterCode.Data] = opJoinRandomRoomParams.SqlLobbyFilter; - } - - if (opJoinRandomRoomParams.ExpectedUsers != null && opJoinRandomRoomParams.ExpectedUsers.Length > 0) - { - opParameters[ParameterCode.Add] = opJoinRandomRoomParams.ExpectedUsers; - } - - //this.Listener.DebugReturn(DebugLevel.INFO, "OpJoinRandomRoom: " + SupportClass.DictionaryToString(opParameters)); - return this.SendOperation(OperationCode.JoinRandomGame, opParameters, SendOptions.SendReliable); - } - - /// - /// Only used on the Master Server. It will assign a game server and room to join-or-create. - /// On the Game Server, the OpJoin is used with option "create if not exists". - /// - public virtual bool OpJoinRandomOrCreateRoom(OpJoinRandomRoomParams opJoinRandomRoomParams, EnterRoomParams createRoomParams) - { - if (this.DebugOut >= DebugLevel.INFO) - { - this.Listener.DebugReturn(DebugLevel.INFO, "OpJoinRandomOrCreateRoom()"); - } - - // join random room parameters: - - Hashtable expectedRoomProperties = new Hashtable(); - expectedRoomProperties.MergeStringKeys(opJoinRandomRoomParams.ExpectedCustomRoomProperties); - if (opJoinRandomRoomParams.ExpectedMaxPlayers > 0) - { - expectedRoomProperties[GamePropertyKey.MaxPlayers] = opJoinRandomRoomParams.ExpectedMaxPlayers; - } - - Dictionary opParameters = new Dictionary(); - if (expectedRoomProperties.Count > 0) - { - opParameters[ParameterCode.GameProperties] = expectedRoomProperties; // used as filter. below, RoomOptionsToOpParameters has usePropertiesKey = true - } - - if (opJoinRandomRoomParams.MatchingType != MatchmakingMode.FillRoom) - { - opParameters[ParameterCode.MatchMakingType] = (byte)opJoinRandomRoomParams.MatchingType; - } - - if (opJoinRandomRoomParams.TypedLobby != null && !opJoinRandomRoomParams.TypedLobby.IsDefault) - { - opParameters[ParameterCode.LobbyName] = opJoinRandomRoomParams.TypedLobby.Name; - opParameters[ParameterCode.LobbyType] = (byte)opJoinRandomRoomParams.TypedLobby.Type; - } - - if (!string.IsNullOrEmpty(opJoinRandomRoomParams.SqlLobbyFilter)) - { - opParameters[ParameterCode.Data] = opJoinRandomRoomParams.SqlLobbyFilter; - } - - if (opJoinRandomRoomParams.ExpectedUsers != null && opJoinRandomRoomParams.ExpectedUsers.Length > 0) - { - opParameters[ParameterCode.Add] = opJoinRandomRoomParams.ExpectedUsers; - } - - - // parameters for creating a room if needed ("or create" part of the operation) - // partial copy of OpCreateRoom - - opParameters[ParameterCode.JoinMode] = (byte)JoinMode.CreateIfNotExists; - - if (createRoomParams != null) - { - if (!string.IsNullOrEmpty(createRoomParams.RoomName)) - { - opParameters[ParameterCode.RoomName] = createRoomParams.RoomName; - } - - this.RoomOptionsToOpParameters(opParameters, createRoomParams.RoomOptions, true); - } - - //this.Listener.DebugReturn(DebugLevel.INFO, "OpJoinRandomOrCreateRoom: " + SupportClass.DictionaryToString(opParameters, false)); - return this.SendOperation(OperationCode.JoinRandomGame, opParameters, SendOptions.SendReliable); - } - - - /// - /// Leaves a room with option to come back later or "for good". - /// - /// Async games can be re-joined (loaded) later on. Set to false, if you want to abandon a game entirely. - /// WebFlag: Securely transmit the encrypted object AuthCookie to the web service in PathLeave webhook when available - /// If the opteration can be send currently. - public virtual bool OpLeaveRoom(bool becomeInactive, bool sendAuthCookie = false) - { - Dictionary opParameters = new Dictionary(); - if (becomeInactive) - { - opParameters[ParameterCode.IsInactive] = true; - } - if (sendAuthCookie) - { - opParameters[ParameterCode.EventForward] = WebFlags.SendAuthCookieConst; - } - return this.SendOperation(OperationCode.Leave, opParameters, SendOptions.SendReliable); - } - - /// Gets a list of games matching a SQL-like where clause. - /// - /// Operation is only available in lobbies of type SqlLobby. - /// This is an async request which triggers a OnOperationResponse() call. - /// Returned game list is stored in RoomInfoList. - /// - /// - /// The lobby to query. Has to be of type SqlLobby. - /// The sql query statement. - /// If the operation could be sent (has to be connected). - public virtual bool OpGetGameList(TypedLobby lobby, string queryData) - { - if (this.DebugOut >= DebugLevel.INFO) - { - this.Listener.DebugReturn(DebugLevel.INFO, "OpGetGameList()"); - } - - if (lobby == null) - { - if (this.DebugOut >= DebugLevel.INFO) - { - this.Listener.DebugReturn(DebugLevel.INFO, "OpGetGameList not sent. Lobby cannot be null."); - } - return false; - } - - if (lobby.Type != LobbyType.SqlLobby) - { - if (this.DebugOut >= DebugLevel.INFO) - { - this.Listener.DebugReturn(DebugLevel.INFO, "OpGetGameList not sent. LobbyType must be SqlLobby."); - } - return false; - } - - if (lobby.IsDefault) - { - if (this.DebugOut >= DebugLevel.INFO) - { - this.Listener.DebugReturn(DebugLevel.INFO, "OpGetGameList not sent. LobbyName must be not null and not empty."); - } - return false; - } - - if (string.IsNullOrEmpty(queryData)) - { - if (this.DebugOut >= DebugLevel.INFO) - { - this.Listener.DebugReturn(DebugLevel.INFO, "OpGetGameList not sent. queryData must be not null and not empty."); - } - return false; - } - - Dictionary opParameters = new Dictionary(); - opParameters[(byte)ParameterCode.LobbyName] = lobby.Name; - opParameters[(byte)ParameterCode.LobbyType] = (byte)lobby.Type; - opParameters[(byte)ParameterCode.Data] = queryData; - - return this.SendOperation(OperationCode.GetGameList, opParameters, SendOptions.SendReliable); - } - - /// - /// Request the rooms and online status for a list of friends (each client must set a unique username via OpAuthenticate). - /// - /// - /// Used on Master Server to find the rooms played by a selected list of users. - /// Users identify themselves by using OpAuthenticate with a unique user ID. - /// The list of user IDs must be fetched from some other source (not provided by Photon). - /// - /// The server response includes 2 arrays of info (each index matching a friend from the request):
- /// ParameterCode.FindFriendsResponseOnlineList = bool[] of online states
- /// ParameterCode.FindFriendsResponseRoomIdList = string[] of room names (empty string if not in a room)
- ///
- /// The options may be used to define which state a room must match to be returned. - ///
- /// Array of friend's names (make sure they are unique). - /// Options that affect the result of the FindFriends operation. - /// If the operation could be sent (requires connection). - public virtual bool OpFindFriends(string[] friendsToFind, FindFriendsOptions options = null) - { - Dictionary opParameters = new Dictionary(); - if (friendsToFind != null && friendsToFind.Length > 0) - { - opParameters[ParameterCode.FindFriendsRequestList] = friendsToFind; - } - - if (options != null) - { - opParameters[ParameterCode.FindFriendsOptions] = options.ToIntFlags(); - } - - return this.SendOperation(OperationCode.FindFriends, opParameters, SendOptions.SendReliable); - } - - public bool OpSetCustomPropertiesOfActor(int actorNr, Hashtable actorProperties) - { - return this.OpSetPropertiesOfActor(actorNr, actorProperties.StripToStringKeys(), null); - } - - /// - /// Sets properties of a player / actor. - /// Internally this uses OpSetProperties, which can be used to either set room or player properties. - /// - /// The payer ID (a.k.a. actorNumber) of the player to attach these properties to. - /// The properties to add or update. - /// If set, these must be in the current properties-set (on the server) to set actorProperties: CAS. - /// Set these to forward the properties to a WebHook as defined for this app (in Dashboard). - /// If the operation could be sent (requires connection). - protected internal bool OpSetPropertiesOfActor(int actorNr, Hashtable actorProperties, Hashtable expectedProperties = null, WebFlags webflags = null) - { - if (this.DebugOut >= DebugLevel.INFO) - { - this.Listener.DebugReturn(DebugLevel.INFO, "OpSetPropertiesOfActor()"); - } - - if (actorNr <= 0 || actorProperties == null || actorProperties.Count == 0) - { - if (this.DebugOut >= DebugLevel.INFO) - { - this.Listener.DebugReturn(DebugLevel.INFO, "OpSetPropertiesOfActor not sent. ActorNr must be > 0 and actorProperties must be not null nor empty."); - } - return false; - } - - Dictionary opParameters = new Dictionary(); - opParameters.Add(ParameterCode.Properties, actorProperties); - opParameters.Add(ParameterCode.ActorNr, actorNr); - opParameters.Add(ParameterCode.Broadcast, true); - if (expectedProperties != null && expectedProperties.Count != 0) - { - opParameters.Add(ParameterCode.ExpectedValues, expectedProperties); - } - - if (webflags != null && webflags.HttpForward) - { - opParameters[ParameterCode.EventForward] = webflags.WebhookFlags; - } - - return this.SendOperation(OperationCode.SetProperties, opParameters, SendOptions.SendReliable); - } - - - protected bool OpSetPropertyOfRoom(byte propCode, object value) - { - Hashtable properties = new Hashtable(); - properties[propCode] = value; - return this.OpSetPropertiesOfRoom(properties); - } - - public bool OpSetCustomPropertiesOfRoom(Hashtable gameProperties) - { - return this.OpSetPropertiesOfRoom(gameProperties.StripToStringKeys()); - } - - /// - /// Sets properties of a room. - /// Internally this uses OpSetProperties, which can be used to either set room or player properties. - /// - /// The properties to add or update. - /// The properties expected when update occurs. (CAS : "Check And Swap") - /// WebFlag to indicate if request should be forwarded as "PathProperties" webhook or not. - /// If the operation could be sent (has to be connected). - protected internal bool OpSetPropertiesOfRoom(Hashtable gameProperties, Hashtable expectedProperties = null, WebFlags webflags = null) - { - if (this.DebugOut >= DebugLevel.INFO) - { - this.Listener.DebugReturn(DebugLevel.INFO, "OpSetPropertiesOfRoom()"); - } - if (gameProperties == null || gameProperties.Count == 0) - { - if (this.DebugOut >= DebugLevel.INFO) - { - this.Listener.DebugReturn(DebugLevel.INFO, "OpSetPropertiesOfRoom not sent. gameProperties must be not null nor empty."); - } - return false; - } - - Dictionary opParameters = new Dictionary(); - opParameters.Add(ParameterCode.Properties, gameProperties); - opParameters.Add(ParameterCode.Broadcast, true); - if (expectedProperties != null && expectedProperties.Count != 0) - { - opParameters.Add(ParameterCode.ExpectedValues, expectedProperties); - } - - if (webflags!=null && webflags.HttpForward) - { - opParameters[ParameterCode.EventForward] = webflags.WebhookFlags; - } - - return this.SendOperation(OperationCode.SetProperties, opParameters, SendOptions.SendReliable); - } - - /// - /// Sends this app's appId and appVersion to identify this application server side. - /// This is an async request which triggers a OnOperationResponse() call. - /// - /// - /// This operation makes use of encryption, if that is established before. - /// See: EstablishEncryption(). Check encryption with IsEncryptionAvailable. - /// This operation is allowed only once per connection (multiple calls will have ErrorCode != Ok). - /// - /// Your application's name or ID to authenticate. This is assigned by Photon Cloud (webpage). - /// The client's version (clients with differing client appVersions are separated and players don't meet). - /// Contains all values relevant for authentication. Even without account system (external Custom Auth), the clients are allowed to identify themselves. - /// Optional region code, if the client should connect to a specific Photon Cloud Region. - /// Set to true on Master Server to receive "Lobby Statistics" events. - /// If the operation could be sent (has to be connected). - public virtual bool OpAuthenticate(string appId, string appVersion, AuthenticationValues authValues, string regionCode, bool getLobbyStatistics) - { - if (this.DebugOut >= DebugLevel.INFO) - { - this.Listener.DebugReturn(DebugLevel.INFO, "OpAuthenticate()"); - } - - Dictionary opParameters = new Dictionary(); - if (getLobbyStatistics) - { - // must be sent in operation, even if a Token is available - opParameters[ParameterCode.LobbyStats] = true; - } - - // shortcut, if we have a Token - if (authValues != null && authValues.Token != null) - { - opParameters[ParameterCode.Token] = authValues.Token; - return this.SendOperation(OperationCode.Authenticate, opParameters, SendOptions.SendReliable); // we don't have to encrypt, when we have a token (which is encrypted) - } - - - // without a token, we send a complete op auth - - opParameters[ParameterCode.AppVersion] = appVersion; - opParameters[ParameterCode.ApplicationId] = appId; - - if (!string.IsNullOrEmpty(regionCode)) - { - opParameters[ParameterCode.Region] = regionCode; - } - - if (authValues != null) - { - - if (!string.IsNullOrEmpty(authValues.UserId)) - { - opParameters[ParameterCode.UserId] = authValues.UserId; - } - - if (authValues.AuthType != CustomAuthenticationType.None) - { - opParameters[ParameterCode.ClientAuthenticationType] = (byte)authValues.AuthType; - // if we had a token, the code above would use it. here, we send parameters: - if (!string.IsNullOrEmpty(authValues.AuthGetParameters)) - { - opParameters[ParameterCode.ClientAuthenticationParams] = authValues.AuthGetParameters; - } - if (authValues.AuthPostData != null) - { - opParameters[ParameterCode.ClientAuthenticationData] = authValues.AuthPostData; - } - } - } - - return this.SendOperation(OperationCode.Authenticate, opParameters, new SendOptions() { Reliability = true, Encrypt = true }); - } - - - /// - /// Sends this app's appId and appVersion to identify this application server side. - /// This is an async request which triggers a OnOperationResponse() call. - /// - /// - /// This operation makes use of encryption, if that is established before. - /// See: EstablishEncryption(). Check encryption with IsEncryptionAvailable. - /// This operation is allowed only once per connection (multiple calls will have ErrorCode != Ok). - /// - /// Your application's name or ID to authenticate. This is assigned by Photon Cloud (webpage). - /// The client's version (clients with differing client appVersions are separated and players don't meet). - /// Optional authentication values. The client can set no values or a UserId or some parameters for Custom Authentication by a server. - /// Optional region code, if the client should connect to a specific Photon Cloud Region. - /// - /// - /// If the operation could be sent (has to be connected). - public virtual bool OpAuthenticateOnce(string appId, string appVersion, AuthenticationValues authValues, string regionCode, EncryptionMode encryptionMode, ConnectionProtocol expectedProtocol) - { - if (this.DebugOut >= DebugLevel.INFO) - { - this.Listener.DebugReturn(DebugLevel.INFO, "OpAuthenticateOnce(): authValues = " + authValues + ", region = " + regionCode + ", encryption = " + encryptionMode); - } - - var opParameters = new Dictionary(); - - // shortcut, if we have a Token - if (authValues != null && authValues.Token != null) - { - opParameters[ParameterCode.Token] = authValues.Token; - return this.SendOperation(OperationCode.AuthenticateOnce, opParameters, SendOptions.SendReliable); // we don't have to encrypt, when we have a token (which is encrypted) - } - - if (encryptionMode == EncryptionMode.DatagramEncryption && expectedProtocol != ConnectionProtocol.Udp) - { - // TODO disconnect?! - throw new NotSupportedException("Expected protocol set to UDP, due to encryption mode DatagramEncryption."); // TODO use some other form of callback?! - } - - opParameters[ParameterCode.ExpectedProtocol] = (byte)expectedProtocol; - opParameters[ParameterCode.EncryptionMode] = (byte)encryptionMode; - - opParameters[ParameterCode.AppVersion] = appVersion; - opParameters[ParameterCode.ApplicationId] = appId; - - if (!string.IsNullOrEmpty(regionCode)) - { - opParameters[ParameterCode.Region] = regionCode; - } - - if (authValues != null) - { - if (!string.IsNullOrEmpty(authValues.UserId)) - { - opParameters[ParameterCode.UserId] = authValues.UserId; - } - - if (authValues.AuthType != CustomAuthenticationType.None) - { - opParameters[ParameterCode.ClientAuthenticationType] = (byte)authValues.AuthType; - if (authValues.Token != null) - { - opParameters[ParameterCode.Token] = authValues.Token; - } - else - { - if (!string.IsNullOrEmpty(authValues.AuthGetParameters)) - { - opParameters[ParameterCode.ClientAuthenticationParams] = authValues.AuthGetParameters; - } - if (authValues.AuthPostData != null) - { - opParameters[ParameterCode.ClientAuthenticationData] = authValues.AuthPostData; - } - } - } - } - - return this.SendOperation(OperationCode.AuthenticateOnce, opParameters, new SendOptions() { Reliability = true, Encrypt = true }); - } - - /// - /// Operation to handle this client's interest groups (for events in room). - /// - /// - /// Note the difference between passing null and byte[0]: - /// null won't add/remove any groups. - /// byte[0] will add/remove all (existing) groups. - /// First, removing groups is executed. This way, you could leave all groups and join only the ones provided. - /// - /// Changes become active not immediately but when the server executes this operation (approximately RTT/2). - /// - /// Groups to remove from interest. Null will not remove any. A byte[0] will remove all. - /// Groups to add to interest. Null will not add any. A byte[0] will add all current. - /// If operation could be enqueued for sending. Sent when calling: Service or SendOutgoingCommands. - public virtual bool OpChangeGroups(byte[] groupsToRemove, byte[] groupsToAdd) - { - if (this.DebugOut >= DebugLevel.ALL) - { - this.Listener.DebugReturn(DebugLevel.ALL, "OpChangeGroups()"); - } - - Dictionary opParameters = new Dictionary(); - if (groupsToRemove != null) - { - opParameters[(byte)ParameterCode.Remove] = groupsToRemove; - } - if (groupsToAdd != null) - { - opParameters[(byte)ParameterCode.Add] = groupsToAdd; - } - - return this.SendOperation(OperationCode.ChangeGroups, opParameters, SendOptions.SendReliable); - } - - - /// - /// Send an event with custom code/type and any content to the other players in the same room. - /// - /// This override explicitly uses another parameter order to not mix it up with the implementation for Hashtable only. - /// Identifies this type of event (and the content). Your game's event codes can start with 0. - /// Any serializable datatype (including Hashtable like the other OpRaiseEvent overloads). - /// Contains (slightly) less often used options. If you pass null, the default options will be used. - /// Send options for reliable, encryption etc - /// If operation could be enqueued for sending. Sent when calling: Service or SendOutgoingCommands. - public virtual bool OpRaiseEvent(byte eventCode, object customEventContent, RaiseEventOptions raiseEventOptions, SendOptions sendOptions) - { - var paramDict = this.paramDictionaryPool.Acquire(); - try - { - if (raiseEventOptions != null) - { - if (raiseEventOptions.CachingOption != EventCaching.DoNotCache) - { - paramDict.Add(ParameterCode.Cache, (byte)raiseEventOptions.CachingOption); - } - switch (raiseEventOptions.CachingOption) - { - case EventCaching.SliceSetIndex: - case EventCaching.SlicePurgeIndex: - case EventCaching.SlicePurgeUpToIndex: - //this.opParameters[(byte) ParameterCode.CacheSliceIndex] = - // (byte) raiseEventOptions.CacheSliceIndex; - return this.SendOperation(OperationCode.RaiseEvent, paramDict, sendOptions); - case EventCaching.SliceIncreaseIndex: - case EventCaching.RemoveFromRoomCacheForActorsLeft: - return this.SendOperation(OperationCode.RaiseEvent, paramDict, sendOptions); - case EventCaching.RemoveFromRoomCache: - if (raiseEventOptions.TargetActors != null) - { - paramDict.Add(ParameterCode.ActorList, raiseEventOptions.TargetActors); - } - break; - default: - if (raiseEventOptions.TargetActors != null) - { - paramDict.Add(ParameterCode.ActorList, raiseEventOptions.TargetActors); - } - else if (raiseEventOptions.InterestGroup != 0) - { - paramDict.Add(ParameterCode.Group, (byte)raiseEventOptions.InterestGroup); - } - else if (raiseEventOptions.Receivers != ReceiverGroup.Others) - { - paramDict.Add(ParameterCode.ReceiverGroup, (byte)raiseEventOptions.Receivers); - } - if (raiseEventOptions.Flags.HttpForward) - { - paramDict.Add(ParameterCode.EventForward, (byte)raiseEventOptions.Flags.WebhookFlags); - } - break; - } - } - paramDict.Add(ParameterCode.Code, (byte)eventCode); - if (customEventContent != null) - { - paramDict.Add(ParameterCode.Data, (object)customEventContent); - } - return this.SendOperation(OperationCode.RaiseEvent, paramDict, sendOptions); - } - finally - { - this.paramDictionaryPool.Release(paramDict); - } - } - - - /// - /// Internally used operation to set some "per server" settings. This is for the Master Server. - /// - /// Set to true, to get Lobby Statistics (lists of existing lobbies). - /// False if the operation could not be sent. - public virtual bool OpSettings(bool receiveLobbyStats) - { - if (this.DebugOut >= DebugLevel.ALL) - { - this.Listener.DebugReturn(DebugLevel.ALL, "OpSettings()"); - } - - Dictionary opParameters = new Dictionary(); - - // implementation for Master Server: - if (receiveLobbyStats) - { - opParameters[(byte)0] = receiveLobbyStats; - } - - if (opParameters.Count == 0) - { - // no need to send op in case we set the default values - return true; - } - - return this.SendOperation(OperationCode.ServerSettings, opParameters, SendOptions.SendReliable); - } - } - - /// Used in the RoomOptionFlags parameter, this bitmask toggles options in the room. - internal enum RoomOptionBit : int - { - CheckUserOnJoin = 0x01, // toggles a check of the UserId when joining (enabling returning to a game) - DeleteCacheOnLeave = 0x02, // deletes cache on leave - SuppressRoomEvents = 0x04, // suppresses all room events - PublishUserId = 0x08, // signals that we should publish userId - DeleteNullProps = 0x10, // signals that we should remove property if its value was set to null. see RoomOption to Delete Null Properties - BroadcastPropsChangeToAll = 0x20, // signals that we should send PropertyChanged event to all room players including initiator - SuppressPlayerInfo = 0x40, // disables events join and leave from the server as well as property broadcasts in a room (to minimize traffic) - } - - /// - /// Options for OpFindFriends can be combined to filter which rooms of friends are returned. - /// - public class FindFriendsOptions - { - /// Include a friend's room only if it is created and confirmed by the game server. - public bool CreatedOnGs = false; //flag: 0x01 - /// Include a friend's room only if it is visible (using Room.IsVisible). - public bool Visible = false; //flag: 0x02 - /// Include a friend's room only if it is open (using Room.IsOpen). - public bool Open = false; //flag: 0x04 - - /// Turns the bool options into an integer, which is sent as option flags for Op FindFriends. - /// The options applied to bits of an integer. - internal int ToIntFlags() - { - int optionFlags = 0; - if (this.CreatedOnGs) - { - optionFlags = optionFlags | 0x1; - } - if (this.Visible) - { - optionFlags = optionFlags | 0x2; - } - if (this.Open) - { - optionFlags = optionFlags | 0x4; - } - return optionFlags; - } - } - - - /// - /// Parameters for the matchmaking of JoinRandomRoom and JoinRandomOrCreateRoom. - /// - /// - /// More about matchmaking: . - /// - public class OpJoinRandomRoomParams - { - /// The custom room properties a room must have to fit. All key-values must be present to match. In SQL Lobby, use SqlLobbyFilter instead. - public Hashtable ExpectedCustomRoomProperties; - /// Filters by the MaxPlayers value of rooms. - public byte ExpectedMaxPlayers; - /// The MatchmakingMode affects how rooms get filled. By default, the server fills rooms. - public MatchmakingMode MatchingType; - /// The lobby in which to match. The type affects how filters are applied. - public TypedLobby TypedLobby; - /// SQL query to filter room matches. For default-typed lobbies, use ExpectedCustomRoomProperties instead. - public string SqlLobbyFilter; - /// The expected users list blocks player slots for your friends or team mates to join the room, too. - /// See: https://doc.photonengine.com/en-us/pun/v2/lobby-and-matchmaking/matchmaking-and-lobby#matchmaking_slot_reservation - public string[] ExpectedUsers; - } - - /// Parameters for creating rooms. - public class EnterRoomParams - { - /// The name of the room to create. If null, the server generates a unique name. If not null, it must be unique and new or will cause an error. - public string RoomName; - /// The RoomOptions define the optional behaviour of rooms. - public RoomOptions RoomOptions; - /// A lobby to attach the new room to. If set, this overrides a joined lobby (if any). - public TypedLobby Lobby; - /// The custom player properties that describe this client / user. Keys must be strings. - public Hashtable PlayerProperties; - /// Internally used value to skip some values when the operation is sent to the Master Server. - protected internal bool OnGameServer = true; // defaults to true! better send more parameter than too few (GS needs all) - /// Internally used value to check which join mode we should call. - protected internal JoinMode JoinMode; - /// A list of users who are expected to join the room along with this client. Reserves slots for rooms with MaxPlayers value. - public string[] ExpectedUsers; - } - - - /// - /// ErrorCode defines the default codes associated with Photon client/server communication. - /// - public class ErrorCode - { - /// (0) is always "OK", anything else an error or specific situation. - public const int Ok = 0; - - // server - Photon low(er) level: <= 0 - - /// - /// (-3) Operation can't be executed yet (e.g. OpJoin can't be called before being authenticated, RaiseEvent cant be used before getting into a room). - /// - /// - /// Before you call any operations on the Cloud servers, the automated client workflow must complete its authorization. - /// Wait until State is: JoinedLobby or ConnectedToMasterServer - /// - public const int OperationNotAllowedInCurrentState = -3; - - /// (-2) The operation you called is not implemented on the server (application) you connect to. Make sure you run the fitting applications. - [Obsolete("Use InvalidOperation.")] - public const int InvalidOperationCode = -2; - - /// (-2) The operation you called could not be executed on the server. - /// - /// Make sure you are connected to the server you expect. - /// - /// This code is used in several cases: - /// The arguments/parameters of the operation might be out of range, missing entirely or conflicting. - /// The operation you called is not implemented on the server (application). Server-side plugins affect the available operations. - /// - public const int InvalidOperation = -2; - - /// (-1) Something went wrong in the server. Try to reproduce and contact Exit Games. - public const int InternalServerError = -1; - - // server - client: 0x7FFF and down - // logic-level error codes start with short.max - - /// (32767) Authentication failed. Possible cause: AppId is unknown to Photon (in cloud service). - public const int InvalidAuthentication = 0x7FFF; - - /// (32766) GameId (name) already in use (can't create another). Change name. - public const int GameIdAlreadyExists = 0x7FFF - 1; - - /// (32765) Game is full. This rarely happens when some player joined the room before your join completed. - public const int GameFull = 0x7FFF - 2; - - /// (32764) Game is closed and can't be joined. Join another game. - public const int GameClosed = 0x7FFF - 3; - - [Obsolete("No longer used, cause random matchmaking is no longer a process.")] - public const int AlreadyMatched = 0x7FFF - 4; - - /// (32762) All servers are busy. This is a temporary issue and the game logic should try again after a brief wait time. - /// - /// This error may happen for all operations that create rooms. The operation response will contain this error code. - /// - /// This error is very unlikely to happen as we monitor load on all servers and add them on demand. - /// However, it's good to be prepared for a shortage of machines or surge in CCUs. - /// - public const int ServerFull = 0x7FFF - 5; - - /// (32761) Not in use currently. - public const int UserBlocked = 0x7FFF - 6; - - /// (32760) Random matchmaking only succeeds if a room exists thats neither closed nor full. Repeat in a few seconds or create a new room. - public const int NoRandomMatchFound = 0x7FFF - 7; - - /// (32758) Join can fail if the room (name) is not existing (anymore). This can happen when players leave while you join. - public const int GameDoesNotExist = 0x7FFF - 9; - - /// (32757) Authorization on the Photon Cloud failed becaus the concurrent users (CCU) limit of the app's subscription is reached. - /// - /// Unless you have a plan with "CCU Burst", clients might fail the authentication step during connect. - /// Affected client are unable to call operations. Please note that players who end a game and return - /// to the master server will disconnect and re-connect, which means that they just played and are rejected - /// in the next minute / re-connect. - /// This is a temporary measure. Once the CCU is below the limit, players will be able to connect an play again. - /// - /// OpAuthorize is part of connection workflow but only on the Photon Cloud, this error can happen. - /// Self-hosted Photon servers with a CCU limited license won't let a client connect at all. - /// - public const int MaxCcuReached = 0x7FFF - 10; - - /// (32756) Authorization on the Photon Cloud failed because the app's subscription does not allow to use a particular region's server. - /// - /// Some subscription plans for the Photon Cloud are region-bound. Servers of other regions can't be used then. - /// Check your master server address and compare it with your Photon Cloud Dashboard's info. - /// https://dashboard.photonengine.com - /// - /// OpAuthorize is part of connection workflow but only on the Photon Cloud, this error can happen. - /// Self-hosted Photon servers with a CCU limited license won't let a client connect at all. - /// - public const int InvalidRegion = 0x7FFF - 11; - - /// - /// (32755) Custom Authentication of the user failed due to setup reasons (see Cloud Dashboard) or the provided user data (like username or token). Check error message for details. - /// - public const int CustomAuthenticationFailed = 0x7FFF - 12; - - /// (32753) The Authentication ticket expired. Usually, this is refreshed behind the scenes. Connect (and authorize) again. - public const int AuthenticationTicketExpired = 0x7FF1; - - /// - /// (32752) A server-side plugin (or webhook) failed to execute and reported an error. Check the OperationResponse.DebugMessage. - /// - public const int PluginReportedError = 0x7FFF - 15; - - /// - /// (32751) CreateGame/JoinGame/Join operation fails if expected plugin does not correspond to loaded one. - /// - public const int PluginMismatch = 0x7FFF - 16; - - /// - /// (32750) for join requests. Indicates the current peer already called join and is joined to the room. - /// - public const int JoinFailedPeerAlreadyJoined = 32750; // 0x7FFF - 17, - - /// - /// (32749) for join requests. Indicates the list of InactiveActors already contains an actor with the requested ActorNr or UserId. - /// - public const int JoinFailedFoundInactiveJoiner = 32749; // 0x7FFF - 18, - - /// - /// (32748) for join requests. Indicates the list of Actors (active and inactive) did not contain an actor with the requested ActorNr or UserId. - /// - public const int JoinFailedWithRejoinerNotFound = 32748; // 0x7FFF - 19, - - /// - /// (32747) for join requests. Note: for future use - Indicates the requested UserId was found in the ExcludedList. - /// - public const int JoinFailedFoundExcludedUserId = 32747; // 0x7FFF - 20, - - /// - /// (32746) for join requests. Indicates the list of ActiveActors already contains an actor with the requested ActorNr or UserId. - /// - public const int JoinFailedFoundActiveJoiner = 32746; // 0x7FFF - 21, - - /// - /// (32745) for SetProerties and Raisevent (if flag HttpForward is true) requests. Indicates the maximum allowd http requests per minute was reached. - /// - public const int HttpLimitReached = 32745; // 0x7FFF - 22, - - /// - /// (32744) for WebRpc requests. Indicates the the call to the external service failed. - /// - public const int ExternalHttpCallFailed = 32744; // 0x7FFF - 23, - - /// - /// (32743) for operations with defined limits (as in calls per second, content count or size). - /// - public const int OperationLimitReached = 32743; // 0x7FFF - 24, - - /// - /// (32742) Server error during matchmaking with slot reservation. E.g. the reserved slots can not exceed MaxPlayers. - /// - public const int SlotError = 32742; // 0x7FFF - 25, - - /// - /// (32741) Server will react with this error if invalid encryption parameters provided by token - /// - public const int InvalidEncryptionParameters = 32741; // 0x7FFF - 24, - -} - - - /// - /// Class for constants. These (byte) values define "well known" properties for an Actor / Player. - /// - /// - /// These constants are used internally. - /// "Custom properties" have to use a string-type as key. They can be assigned at will. - /// - public class ActorProperties - { - /// (255) Name of a player/actor. - public const byte PlayerName = 255; // was: 1 - - /// (254) Tells you if the player is currently in this game (getting events live). - /// A server-set value for async games, where players can leave the game and return later. - public const byte IsInactive = 254; - - /// (253) UserId of the player. Sent when room gets created with RoomOptions.PublishUserId = true. - public const byte UserId = 253; - } - - - /// - /// Class for constants. These (byte) values are for "well known" room/game properties used in Photon LoadBalancing. - /// - /// - /// These constants are used internally. - /// "Custom properties" have to use a string-type as key. They can be assigned at will. - /// - public class GamePropertyKey - { - /// (255) Max number of players that "fit" into this room. 0 is for "unlimited". - public const byte MaxPlayers = 255; - - /// (254) Makes this room listed or not in the lobby on master. - public const byte IsVisible = 254; - - /// (253) Allows more players to join a room (or not). - public const byte IsOpen = 253; - - /// (252) Current count of players in the room. Used only in the lobby on master. - public const byte PlayerCount = 252; - - /// (251) True if the room is to be removed from room listing (used in update to room list in lobby on master) - public const byte Removed = 251; - - /// (250) A list of the room properties to pass to the RoomInfo list in a lobby. This is used in CreateRoom, which defines this list once per room. - public const byte PropsListedInLobby = 250; - - /// (249) Equivalent of Operation Join parameter CleanupCacheOnLeave. - public const byte CleanupCacheOnLeave = 249; - - /// (248) Code for MasterClientId, which is synced by server. When sent as op-parameter this is (byte)203. As room property this is (byte)248. - /// Tightly related to ParameterCode.MasterClientId. - public const byte MasterClientId = (byte)248; - - /// (247) Code for ExpectedUsers in a room. Matchmaking keeps a slot open for the players with these userIDs. - public const byte ExpectedUsers = (byte)247; - - /// (246) Player Time To Live. How long any player can be inactive (due to disconnect or leave) before the user gets removed from the playerlist (freeing a slot). - public const byte PlayerTtl = (byte)246; - - /// (245) Room Time To Live. How long a room stays available (and in server-memory), after the last player becomes inactive. After this time, the room gets persisted or destroyed. - public const byte EmptyRoomTtl = (byte)245; - } - - - /// - /// Class for constants. These values are for events defined by Photon LoadBalancing. - /// - /// They start at 255 and go DOWN. Your own in-game events can start at 0. These constants are used internally. - public class EventCode - { - /// (230) Initial list of RoomInfos (in lobby on Master) - public const byte GameList = 230; - - /// (229) Update of RoomInfos to be merged into "initial" list (in lobby on Master) - public const byte GameListUpdate = 229; - - /// (228) Currently not used. State of queueing in case of server-full - public const byte QueueState = 228; - - /// (227) Currently not used. Event for matchmaking - public const byte Match = 227; - - /// (226) Event with stats about this application (players, rooms, etc) - public const byte AppStats = 226; - - /// (224) This event provides a list of lobbies with their player and game counts. - public const byte LobbyStats = 224; - - /// (210) Internally used in case of hosting by Azure - [Obsolete("TCP routing was removed after becoming obsolete.")] - public const byte AzureNodeInfo = 210; - - /// (255) Event Join: someone joined the game. The new actorNumber is provided as well as the properties of that actor (if set in OpJoin). - public const byte Join = (byte)255; - - /// (254) Event Leave: The player who left the game can be identified by the actorNumber. - public const byte Leave = (byte)254; - - /// (253) When you call OpSetProperties with the broadcast option "on", this event is fired. It contains the properties being set. - public const byte PropertiesChanged = (byte)253; - - /// (253) When you call OpSetProperties with the broadcast option "on", this event is fired. It contains the properties being set. - [Obsolete("Use PropertiesChanged now.")] - public const byte SetProperties = (byte)253; - - /// (252) When player left game unexpected and the room has a playerTtl != 0, this event is fired to let everyone know about the timeout. - /// Obsolete. Replaced by Leave. public const byte Disconnect = LiteEventCode.Disconnect; - - /// (251) Sent by Photon Cloud when a plugin-call or webhook-call failed or events cache limit exceeded. Usually, the execution on the server continues, despite the issue. Contains: ParameterCode.Info. - /// - public const byte ErrorInfo = 251; - - /// (250) Sent by Photon whent he event cache slice was changed. Done by OpRaiseEvent. - public const byte CacheSliceChanged = 250; - - /// (223) Sent by Photon to update a token before it times out. - public const byte AuthEvent = 223; - } - - - /// Class for constants. Codes for parameters of Operations and Events. - /// These constants are used internally. - public class ParameterCode - { - /// (237) A bool parameter for creating games. If set to true, no room events are sent to the clients on join and leave. Default: false (and not sent). - public const byte SuppressRoomEvents = 237; - - /// (236) Time To Live (TTL) for a room when the last player leaves. Keeps room in memory for case a player re-joins soon. In milliseconds. - public const byte EmptyRoomTTL = 236; - - /// (235) Time To Live (TTL) for an 'actor' in a room. If a client disconnects, this actor is inactive first and removed after this timeout. In milliseconds. - public const byte PlayerTTL = 235; - - /// (234) Optional parameter of OpRaiseEvent and OpSetCustomProperties to forward the event/operation to a web-service. - public const byte EventForward = 234; - - /// (233) Optional parameter of OpLeave in async games. If false, the player does abandons the game (forever). By default players become inactive and can re-join. - [Obsolete("Use: IsInactive")] - public const byte IsComingBack = (byte)233; - - /// (233) Used in EvLeave to describe if a user is inactive (and might come back) or not. In rooms with PlayerTTL, becoming inactive is the default case. - public const byte IsInactive = (byte)233; - - /// (232) Used when creating rooms to define if any userid can join the room only once. - public const byte CheckUserOnJoin = (byte)232; - - /// (231) Code for "Check And Swap" (CAS) when changing properties. - public const byte ExpectedValues = (byte)231; - - /// (230) Address of a (game) server to use. - public const byte Address = 230; - - /// (229) Count of players in this application in a rooms (used in stats event) - public const byte PeerCount = 229; - - /// (228) Count of games in this application (used in stats event) - public const byte GameCount = 228; - - /// (227) Count of players on the master server (in this app, looking for rooms) - public const byte MasterPeerCount = 227; - - /// (225) User's ID - public const byte UserId = 225; - - /// (224) Your application's ID: a name on your own Photon or a GUID on the Photon Cloud - public const byte ApplicationId = 224; - - /// (223) Not used currently (as "Position"). If you get queued before connect, this is your position - public const byte Position = 223; - - /// (223) Modifies the matchmaking algorithm used for OpJoinRandom. Allowed parameter values are defined in enum MatchmakingMode. - public const byte MatchMakingType = 223; - - /// (222) List of RoomInfos about open / listed rooms - public const byte GameList = 222; - - /// (221) Internally used to establish encryption - public const byte Token = 221; - - /// (220) Version of your application - public const byte AppVersion = 220; - - /// (210) Internally used in case of hosting by Azure - [Obsolete("TCP routing was removed after becoming obsolete.")] - public const byte AzureNodeInfo = 210; // only used within events, so use: EventCode.AzureNodeInfo - - /// (209) Internally used in case of hosting by Azure - [Obsolete("TCP routing was removed after becoming obsolete.")] - public const byte AzureLocalNodeId = 209; - - /// (208) Internally used in case of hosting by Azure - [Obsolete("TCP routing was removed after becoming obsolete.")] - public const byte AzureMasterNodeId = 208; - - /// (255) Code for the gameId/roomName (a unique name per room). Used in OpJoin and similar. - public const byte RoomName = (byte)255; - - /// (250) Code for broadcast parameter of OpSetProperties method. - public const byte Broadcast = (byte)250; - - /// (252) Code for list of players in a room. - public const byte ActorList = (byte)252; - - /// (254) Code of the Actor of an operation. Used for property get and set. - public const byte ActorNr = (byte)254; - - /// (249) Code for property set (Hashtable). - public const byte PlayerProperties = (byte)249; - - /// (245) Code of data/custom content of an event. Used in OpRaiseEvent. - public const byte CustomEventContent = (byte)245; - - /// (245) Code of data of an event. Used in OpRaiseEvent. - public const byte Data = (byte)245; - - /// (244) Code used when sending some code-related parameter, like OpRaiseEvent's event-code. - /// This is not the same as the Operation's code, which is no longer sent as part of the parameter Dictionary in Photon 3. - public const byte Code = (byte)244; - - /// (248) Code for property set (Hashtable). - public const byte GameProperties = (byte)248; - - /// - /// (251) Code for property-set (Hashtable). This key is used when sending only one set of properties. - /// If either ActorProperties or GameProperties are used (or both), check those keys. - /// - public const byte Properties = (byte)251; - - /// (253) Code of the target Actor of an operation. Used for property set. Is 0 for game - public const byte TargetActorNr = (byte)253; - - /// (246) Code to select the receivers of events (used in Lite, Operation RaiseEvent). - public const byte ReceiverGroup = (byte)246; - - /// (247) Code for caching events while raising them. - public const byte Cache = (byte)247; - - /// (241) Bool parameter of CreateGame Operation. If true, server cleans up roomcache of leaving players (their cached events get removed). - public const byte CleanupCacheOnLeave = (byte)241; - - /// (240) Code for "group" operation-parameter (as used in Op RaiseEvent). - public const byte Group = 240; - - /// (239) The "Remove" operation-parameter can be used to remove something from a list. E.g. remove groups from player's interest groups. - public const byte Remove = 239; - - /// (239) Used in Op Join to define if UserIds of the players are broadcast in the room. Useful for FindFriends and reserving slots for expected users. - public const byte PublishUserId = 239; - - /// (238) The "Add" operation-parameter can be used to add something to some list or set. E.g. add groups to player's interest groups. - public const byte Add = 238; - - /// (218) Content for EventCode.ErrorInfo and internal debug operations. - public const byte Info = 218; - - /// (217) This key's (byte) value defines the target custom authentication type/service the client connects with. Used in OpAuthenticate - public const byte ClientAuthenticationType = 217; - - /// (216) This key's (string) value provides parameters sent to the custom authentication type/service the client connects with. Used in OpAuthenticate - public const byte ClientAuthenticationParams = 216; - - /// (215) Makes the server create a room if it doesn't exist. OpJoin uses this to always enter a room, unless it exists and is full/closed. - // public const byte CreateIfNotExists = 215; - - /// (215) The JoinMode enum defines which variant of joining a room will be executed: Join only if available, create if not exists or re-join. - /// Replaces CreateIfNotExists which was only a bool-value. - public const byte JoinMode = 215; - - /// (214) This key's (string or byte[]) value provides parameters sent to the custom authentication service setup in Photon Dashboard. Used in OpAuthenticate - public const byte ClientAuthenticationData = 214; - - /// (203) Code for MasterClientId, which is synced by server. When sent as op-parameter this is code 203. - /// Tightly related to GamePropertyKey.MasterClientId. - public const byte MasterClientId = (byte)203; - - /// (1) Used in Op FindFriends request. Value must be string[] of friends to look up. - public const byte FindFriendsRequestList = (byte)1; - - /// (2) Used in Op FindFriends request. An integer containing option-flags to filter the results. - public const byte FindFriendsOptions = (byte)2; - - /// (1) Used in Op FindFriends response. Contains bool[] list of online states (false if not online). - public const byte FindFriendsResponseOnlineList = (byte)1; - - /// (2) Used in Op FindFriends response. Contains string[] of room names ("" where not known or no room joined). - public const byte FindFriendsResponseRoomIdList = (byte)2; - - /// (213) Used in matchmaking-related methods and when creating a room to name a lobby (to join or to attach a room to). - public const byte LobbyName = (byte)213; - - /// (212) Used in matchmaking-related methods and when creating a room to define the type of a lobby. Combined with the lobby name this identifies the lobby. - public const byte LobbyType = (byte)212; - - /// (211) This (optional) parameter can be sent in Op Authenticate to turn on Lobby Stats (info about lobby names and their user- and game-counts). - public const byte LobbyStats = (byte)211; - - /// (210) Used for region values in OpAuth and OpGetRegions. - public const byte Region = (byte)210; - - /// (209) Path of the WebRPC that got called. Also known as "WebRpc Name". Type: string. - public const byte UriPath = 209; - - /// (208) Parameters for a WebRPC as: Dictionary<string, object>. This will get serialized to JSon. - public const byte WebRpcParameters = 208; - - /// (207) ReturnCode for the WebRPC, as sent by the web service (not by Photon, which uses ErrorCode). Type: byte. - public const byte WebRpcReturnCode = 207; - - /// (206) Message returned by WebRPC server. Analog to Photon's debug message. Type: string. - public const byte WebRpcReturnMessage = 206; - - /// (205) Used to define a "slice" for cached events. Slices can easily be removed from cache. Type: int. - public const byte CacheSliceIndex = 205; - - /// (204) Informs the server of the expected plugin setup. - /// - /// The operation will fail in case of a plugin mismatch returning error code PluginMismatch 32751(0x7FFF - 16). - /// Setting string[]{} means the client expects no plugin to be setup. - /// Note: for backwards compatibility null omits any check. - /// - public const byte Plugins = 204; - - /// (202) Used by the server in Operation Responses, when it sends the nickname of the client (the user's nickname). - public const byte NickName = 202; - - /// (201) Informs user about name of plugin load to game - public const byte PluginName = 201; - - /// (200) Informs user about version of plugin load to game - public const byte PluginVersion = 200; - - /// (196) Cluster info provided in OpAuthenticate/OpAuthenticateOnce responses. - public const byte Cluster = 196; - - /// (195) Protocol which will be used by client to connect master/game servers. Used for nameserver. - public const byte ExpectedProtocol = 195; - - /// (194) Set of custom parameters which are sent in auth request. - public const byte CustomInitData = 194; - - /// (193) How are we going to encrypt data. - public const byte EncryptionMode = 193; - - /// (192) Parameter of Authentication, which contains encryption keys (depends on AuthMode and EncryptionMode). - public const byte EncryptionData = 192; - - /// (191) An int parameter summarizing several boolean room-options with bit-flags. - public const byte RoomOptionFlags = 191; - } - - - /// - /// Class for constants. Contains operation codes. - /// - /// These constants are used internally. - public class OperationCode - { - [Obsolete("Exchanging encrpytion keys is done internally in the lib now. Don't expect this operation-result.")] - public const byte ExchangeKeysForEncryption = 250; - - /// (255) Code for OpJoin, to get into a room. - [Obsolete] - public const byte Join = 255; - - /// (231) Authenticates this peer and connects to a virtual application - public const byte AuthenticateOnce = 231; - - /// (230) Authenticates this peer and connects to a virtual application - public const byte Authenticate = 230; - - /// (229) Joins lobby (on master) - public const byte JoinLobby = 229; - - /// (228) Leaves lobby (on master) - public const byte LeaveLobby = 228; - - /// (227) Creates a game (or fails if name exists) - public const byte CreateGame = 227; - - /// (226) Join game (by name) - public const byte JoinGame = 226; - - /// (225) Joins random game (on master) - public const byte JoinRandomGame = 225; - - // public const byte CancelJoinRandom = 224; // obsolete, cause JoinRandom no longer is a "process". now provides result immediately - - /// (254) Code for OpLeave, to get out of a room. - public const byte Leave = (byte)254; - - /// (253) Raise event (in a room, for other actors/players) - public const byte RaiseEvent = (byte)253; - - /// (252) Set Properties (of room or actor/player) - public const byte SetProperties = (byte)252; - - /// (251) Get Properties - public const byte GetProperties = (byte)251; - - /// (248) Operation code to change interest groups in Rooms (Lite application and extending ones). - public const byte ChangeGroups = (byte)248; - - /// (222) Request the rooms and online status for a list of friends (by name, which should be unique). - public const byte FindFriends = 222; - - /// (221) Request statistics about a specific list of lobbies (their user and game count). - public const byte GetLobbyStats = 221; - - /// (220) Get list of regional servers from a NameServer. - public const byte GetRegions = 220; - - /// (219) WebRpc Operation. - public const byte WebRpc = 219; - - /// (218) Operation to set some server settings. Used with different parameters on various servers. - public const byte ServerSettings = 218; - - /// (217) Get the game list matching a supplied sql filter (SqlListLobby only) - public const byte GetGameList = 217; - } - - /// Defines possible values for OpJoinRoom and OpJoinOrCreate. It tells the server if the room can be only be joined normally, created implicitly or found on a web-service for Turnbased games. - /// These values are not directly used by a game but implicitly set. - public enum JoinMode : byte - { - /// Regular join. The room must exist. - Default = 0, - - /// Join or create the room if it's not existing. Used for OpJoinOrCreate for example. - CreateIfNotExists = 1, - - /// The room might be out of memory and should be loaded (if possible) from a Turnbased web-service. - JoinOrRejoin = 2, - - /// Only re-join will be allowed. If the user is not yet in the room, this will fail. - RejoinOnly = 3, - } - - /// - /// Options for matchmaking rules for OpJoinRandom. - /// - public enum MatchmakingMode : byte - { - /// Fills up rooms (oldest first) to get players together as fast as possible. Default. - /// Makes most sense with MaxPlayers > 0 and games that can only start with more players. - FillRoom = 0, - - /// Distributes players across available rooms sequentially but takes filter into account. Without filter, rooms get players evenly distributed. - SerialMatching = 1, - - /// Joins a (fully) random room. Expected properties must match but aside from this, any available room might be selected. - RandomMatching = 2 - } - - - /// - /// Lite - OpRaiseEvent lets you chose which actors in the room should receive events. - /// By default, events are sent to "Others" but you can overrule this. - /// - public enum ReceiverGroup : byte - { - /// Default value (not sent). Anyone else gets my event. - Others = 0, - - /// Everyone in the current room (including this peer) will get this event. - All = 1, - - /// The server sends this event only to the actor with the lowest actorNumber. - /// The "master client" does not have special rights but is the one who is in this room the longest time. - MasterClient = 2, - } - - /// - /// Lite - OpRaiseEvent allows you to cache events and automatically send them to joining players in a room. - /// Events are cached per event code and player: Event 100 (example!) can be stored once per player. - /// Cached events can be modified, replaced and removed. - /// - /// - /// Caching works only combination with ReceiverGroup options Others and All. - /// - public enum EventCaching : byte - { - /// Default value (not sent). - DoNotCache = 0, - - /// Will merge this event's keys with those already cached. - [Obsolete] - MergeCache = 1, - - /// Replaces the event cache for this eventCode with this event's content. - [Obsolete] - ReplaceCache = 2, - - /// Removes this event (by eventCode) from the cache. - [Obsolete] - RemoveCache = 3, - - /// Adds an event to the room's cache - AddToRoomCache = 4, - - /// Adds this event to the cache for actor 0 (becoming a "globally owned" event in the cache). - AddToRoomCacheGlobal = 5, - - /// Remove fitting event from the room's cache. - RemoveFromRoomCache = 6, - - /// Removes events of players who already left the room (cleaning up). - RemoveFromRoomCacheForActorsLeft = 7, - - /// Increase the index of the sliced cache. - SliceIncreaseIndex = 10, - - /// Set the index of the sliced cache. You must set RaiseEventOptions.CacheSliceIndex for this. - SliceSetIndex = 11, - - /// Purge cache slice with index. Exactly one slice is removed from cache. You must set RaiseEventOptions.CacheSliceIndex for this. - SlicePurgeIndex = 12, - - /// Purge cache slices with specified index and anything lower than that. You must set RaiseEventOptions.CacheSliceIndex for this. - SlicePurgeUpToIndex = 13, - } - - /// - /// Flags for "types of properties", being used as filter in OpGetProperties. - /// - [Flags] - public enum PropertyTypeFlag : byte - { - /// (0x00) Flag type for no property type. - None = 0x00, - - /// (0x01) Flag type for game-attached properties. - Game = 0x01, - - /// (0x02) Flag type for actor related propeties. - Actor = 0x02, - - /// (0x01) Flag type for game AND actor properties. Equal to 'Game' - GameAndActor = Game | Actor - } - - - /// Wraps up common room properties needed when you create rooms. Read the individual entries for more details. - /// This directly maps to the fields in the Room class. - public class RoomOptions - { - /// Defines if this room is listed in the lobby. If not, it also is not joined randomly. - /// - /// A room that is not visible will be excluded from the room lists that are sent to the clients in lobbies. - /// An invisible room can be joined by name but is excluded from random matchmaking. - /// - /// Use this to "hide" a room and simulate "private rooms". Players can exchange a roomname and create it - /// invisble to avoid anyone else joining it. - /// - public bool IsVisible { get { return this.isVisible; } set { this.isVisible = value; } } - private bool isVisible = true; - - /// Defines if this room can be joined at all. - /// - /// If a room is closed, no player can join this. As example this makes sense when 3 of 4 possible players - /// start their gameplay early and don't want anyone to join during the game. - /// The room can still be listed in the lobby (set isVisible to control lobby-visibility). - /// - public bool IsOpen { get { return this.isOpen; } set { this.isOpen = value; } } - private bool isOpen = true; - - /// Max number of players that can be in the room at any time. 0 means "no limit". - public byte MaxPlayers; - - /// Time To Live (TTL) for an 'actor' in a room. If a client disconnects, this actor is inactive first and removed after this timeout. In milliseconds. - public int PlayerTtl; - - /// Time To Live (TTL) for a room when the last player leaves. Keeps room in memory for case a player re-joins soon. In milliseconds. - public int EmptyRoomTtl; - - /// Removes a user's events and properties from the room when a user leaves. - /// - /// This makes sense when in rooms where players can't place items in the room and just vanish entirely. - /// When you disable this, the event history can become too long to load if the room stays in use indefinitely. - /// Default: true. Cleans up the cache and props of leaving users. - /// - public bool CleanupCacheOnLeave { get { return this.cleanupCacheOnLeave; } set { this.cleanupCacheOnLeave = value; } } - private bool cleanupCacheOnLeave = true; - - /// The room's custom properties to set. Use string keys! - /// - /// Custom room properties are any key-values you need to define the game's setup. - /// The shorter your keys are, the better. - /// Example: Map, Mode (could be "m" when used with "Map"), TileSet (could be "t"). - /// - public Hashtable CustomRoomProperties; - - /// Defines the custom room properties that get listed in the lobby. - /// - /// Name the custom room properties that should be available to clients that are in a lobby. - /// Use with care. Unless a custom property is essential for matchmaking or user info, it should - /// not be sent to the lobby, which causes traffic and delays for clients in the lobby. - /// - /// Default: No custom properties are sent to the lobby. - /// - public string[] CustomRoomPropertiesForLobby = new string[0]; - - /// Informs the server of the expected plugin setup. - /// - /// The operation will fail in case of a plugin missmatch returning error code PluginMismatch 32757(0x7FFF - 10). - /// Setting string[]{} means the client expects no plugin to be setup. - /// Note: for backwards compatibility null omits any check. - /// - public string[] Plugins; - - /// - /// Tells the server to skip room events for joining and leaving players. - /// - /// - /// Using this makes the client unaware of the other players in a room. - /// That can save some traffic if you have some server logic that updates players - /// but it can also limit the client's usability. - /// - public bool SuppressRoomEvents { get; set; } - - /// Disables events join and leave from the server as well as property broadcasts in a room (to minimize traffic) - public bool SuppressPlayerInfo { get; set; } - - /// - /// Defines if the UserIds of players get "published" in the room. Useful for FindFriends, if players want to play another game together. - /// - /// - /// When you set this to true, Photon will publish the UserIds of the players in that room. - /// In that case, you can use PhotonPlayer.userId, to access any player's userID. - /// This is useful for FindFriends and to set "expected users" to reserve slots in a room. - /// - public bool PublishUserId { get; set; } - - /// Optionally, properties get deleted, when null gets assigned as value. Defaults to off / false. - /// - /// When Op SetProperties is setting a key's value to null, the server and clients should remove the key/value from the Custom Properties. - /// By default, the server keeps the keys (and null values) and sends them to joining players. - /// - /// Important: Only when SetProperties does a "broadcast", the change (key, value = null) is sent to clients to update accordingly. - /// This applies to Custom Properties for rooms and actors/players. - /// - public bool DeleteNullProperties { get; set; } - - /// By default, property changes are sent back to the client that's setting them to avoid de-sync when properties are set concurrently. - /// - /// This option is enables by default to fix this scenario: - /// - /// 1) On server, room property ABC is set to value FOO, which triggers notifications to all the clients telling them that the property changed. - /// 2) While that notification is in flight, a client sets the ABC property to value BAR. - /// 3) Client receives notification from the server and changes it�s local copy of ABC to FOO. - /// 4) Server receives the set operation and changes the official value of ABC to BAR, but never notifies the client that sent the set operation that the value is now BAR. - /// - /// Without this option, the client that set the value to BAR never hears from the server that the official copy has been updated to BAR, and thus gets stuck with a value of FOO. - /// - public bool BroadcastPropsChangeToAll { get { return this.broadcastPropsChangeToAll; } set { this.broadcastPropsChangeToAll = value; } } - private bool broadcastPropsChangeToAll = true; - - #if SERVERSDK - public bool CheckUserOnJoin { get; set; } - #endif - } - - - /// Aggregates several less-often used options for operation RaiseEvent. See field descriptions for usage details. - public class RaiseEventOptions - { - /// Default options: CachingOption: DoNotCache, InterestGroup: 0, targetActors: null, receivers: Others, sequenceChannel: 0. - public readonly static RaiseEventOptions Default = new RaiseEventOptions(); - - /// Defines if the server should simply send the event, put it in the cache or remove events that are like this one. - /// - /// When using option: SliceSetIndex, SlicePurgeIndex or SlicePurgeUpToIndex, set a CacheSliceIndex. All other options except SequenceChannel get ignored. - /// - public EventCaching CachingOption; - - /// The number of the Interest Group to send this to. 0 goes to all users but to get 1 and up, clients must subscribe to the group first. - public byte InterestGroup; - - /// A list of Player.ActorNumbers to send this event to. You can implement events that just go to specific users this way. - public int[] TargetActors; - - /// Sends the event to All, MasterClient or Others (default). Be careful with MasterClient, as the client might disconnect before it got the event and it gets lost. - public ReceiverGroup Receivers; - - /// Events are ordered per "channel". If you have events that are independent of others, they can go into another sequence or channel. - [Obsolete("Not used where SendOptions are a parameter too. Use SendOptions.Channel instead.")] - public byte SequenceChannel; - - /// Optional flags to be used in Photon client SDKs with Op RaiseEvent and Op SetProperties. - /// Introduced mainly for webhooks 1.2 to control behavior of forwarded HTTP requests. - public WebFlags Flags = WebFlags.Default; - - ///// Used along with CachingOption SliceSetIndex, SlicePurgeIndex or SlicePurgeUpToIndex if you want to set or purge a specific cache-slice. - //public int CacheSliceIndex; - } - - /// Types of lobbies define their behaviour and capabilities. Check each value for details. - /// Values of this enum must be matched by the server. - public enum LobbyType :byte - { - /// Standard type and behaviour: While joined to this lobby clients get room-lists and JoinRandomRoom can use a simple filter to match properties (perfectly). - Default = 0, - /// This lobby type lists rooms like Default but JoinRandom has a parameter for SQL-like "where" clauses for filtering. This allows bigger, less, or and and combinations. - SqlLobby = 2, - /// This lobby does not send lists of games. It is only used for OpJoinRandomRoom. It keeps rooms available for a while when there are only inactive users left. - AsyncRandomLobby = 3 - } - - /// Refers to a specific lobby on the server. - /// - /// Name and Type combined are the unique identifier for a lobby.
- /// The server will create lobbies "on demand", so no registration or setup is required.
- /// An empty or null Name always points to the "default lobby" as special case. - ///
- public class TypedLobby - { - /// - /// Name of the lobby. Default: null, pointing to the "default lobby". - /// - /// - /// If Name is null or empty, a TypedLobby will point to the "default lobby". This ignores the Type value and always acts as . - /// - public string Name; - - /// - /// Type (and behaviour) of the lobby. - /// - /// - /// An empty or null Name always points to the "default lobby" as special case. - /// - public LobbyType Type; - - /// - /// A reference to the default lobby which is the unique lobby that uses null as name and is of type . - /// - /// - /// There is only a single lobby with an empty name on the server. It is always of type .
- /// On the other hand, this is a shortcut and reusable reference to the default lobby.
- /// Do not change Name or Type.
- ///
- public static readonly TypedLobby Default = new TypedLobby(); - - /// - /// Returns whether or not this instance points to the "default lobby" (). - /// - /// - /// This comes up to checking if the Name is null or empty. - /// is not the same thing as the "default lobby" (). - /// - public bool IsDefault { get { return string.IsNullOrEmpty(this.Name); } } - - - /// - /// Creates a TypedLobby instance. Unless Name is changed, this points to the "default lobby" (). - /// - internal TypedLobby() - { - } - - /// - /// Sets Name and Type of the new instance. Make sure name is not empty or null, as that always points to the "default lobby" (). - /// - /// Some string to identify a lobby. - /// The type of a lobby defines it's capabilities and behaviour. - public TypedLobby(string name, LobbyType type) - { - this.Name = name; - this.Type = type; - } - - public override string ToString() - { - return string.Format("lobby '{0}'[{1}]", this.Name, this.Type); - } - } - - - /// - /// Info for a lobby on the server. Used when is true. - /// - public class TypedLobbyInfo : TypedLobby - { - /// Count of players that currently joined this lobby. - public int PlayerCount; - - /// Count of rooms currently associated with this lobby. - public int RoomCount; - - public override string ToString() - { - return string.Format("TypedLobbyInfo '{0}'[{1}] rooms: {2} players: {3}", this.Name, this.Type, this.RoomCount, this.PlayerCount); - } - } - - - /// - /// Options for authentication modes. From "classic" auth on each server to AuthOnce (on NameServer). - /// - public enum AuthModeOption { Auth, AuthOnce, AuthOnceWss } - - - /// - /// Options for optional "Custom Authentication" services used with Photon. Used by OpAuthenticate after connecting to Photon. - /// - public enum CustomAuthenticationType : byte - { - /// Use a custom authentification service. Currently the only implemented option. - Custom = 0, - - /// Authenticates users by their Steam Account. Set auth values accordingly! - Steam = 1, - - /// Authenticates users by their Facebook Account. Set auth values accordingly! - Facebook = 2, - - /// Authenticates users by their Oculus Account and token. - Oculus = 3, - - /// Authenticates users by their PSN Account and token. - PlayStation = 4, - - /// Authenticates users by their Xbox Account and XSTS token. - Xbox = 5, - - /// Authenticates users by their HTC Viveport Account and user token. Set AuthGetParameters to "userToken=[userToken]" - Viveport = 10, - - /// Authenticates users by their NSA ID. - NintendoSwitch = 11, - - /// Disables custom authentification. Same as not providing any AuthenticationValues for connect (more precisely for: OpAuthenticate). - None = byte.MaxValue - } - - - /// - /// Container for user authentication in Photon. Set AuthValues before you connect - all else is handled. - /// - /// - /// On Photon, user authentication is optional but can be useful in many cases. - /// If you want to FindFriends, a unique ID per user is very practical. - /// - /// There are basically three options for user authentication: None at all, the client sets some UserId - /// or you can use some account web-service to authenticate a user (and set the UserId server-side). - /// - /// Custom Authentication lets you verify end-users by some kind of login or token. It sends those - /// values to Photon which will verify them before granting access or disconnecting the client. - /// - /// The AuthValues are sent in OpAuthenticate when you connect, so they must be set before you connect. - /// If the AuthValues.UserId is null or empty when it's sent to the server, then the Photon Server assigns a UserId! - /// - /// The Photon Cloud Dashboard will let you enable this feature and set important server values for it. - /// https://dashboard.photonengine.com - /// - public class AuthenticationValues - { - /// See AuthType. - private CustomAuthenticationType authType = CustomAuthenticationType.None; - - /// The type of authentication provider that should be used. Defaults to None (no auth whatsoever). - /// Several auth providers are available and CustomAuthenticationType.Custom can be used if you build your own service. - public CustomAuthenticationType AuthType - { - get { return authType; } - set { authType = value; } - } - - /// This string must contain any (http get) parameters expected by the used authentication service. By default, username and token. - /// - /// Maps to operation parameter 216. - /// Standard http get parameters are used here and passed on to the service that's defined in the server (Photon Cloud Dashboard). - /// - public string AuthGetParameters { get; set; } - - /// Data to be passed-on to the auth service via POST. Default: null (not sent). Either string or byte[] (see setters). - /// Maps to operation parameter 214. - public object AuthPostData { get; private set; } - - /// Internal Photon token. After initial authentication, Photon provides a token for this client, subsequently used as (cached) validation. - /// Any token for custom authentication should be set via SetAuthPostData or AddAuthParameter. - public object Token { get; protected internal set; } - - /// The UserId should be a unique identifier per user. This is for finding friends, etc.. - /// See remarks of AuthValues for info about how this is set and used. - public string UserId { get; set; } - - - /// Creates empty auth values without any info. - public AuthenticationValues() - { - } - - /// Creates minimal info about the user. If this is authenticated or not, depends on the set AuthType. - /// Some UserId to set in Photon. - public AuthenticationValues(string userId) - { - this.UserId = userId; - } - - /// Sets the data to be passed-on to the auth service via POST. - /// AuthPostData is just one value. Each SetAuthPostData replaces any previous value. It can be either a string, a byte[] or a dictionary. - /// String data to be used in the body of the POST request. Null or empty string will set AuthPostData to null. - public virtual void SetAuthPostData(string stringData) - { - this.AuthPostData = (string.IsNullOrEmpty(stringData)) ? null : stringData; - } - - /// Sets the data to be passed-on to the auth service via POST. - /// AuthPostData is just one value. Each SetAuthPostData replaces any previous value. It can be either a string, a byte[] or a dictionary. - /// Binary token / auth-data to pass on. - public virtual void SetAuthPostData(byte[] byteData) - { - this.AuthPostData = byteData; - } - - /// Sets data to be passed-on to the auth service as Json (Content-Type: "application/json") via Post. - /// AuthPostData is just one value. Each SetAuthPostData replaces any previous value. It can be either a string, a byte[] or a dictionary. - /// A authentication-data dictionary will be converted to Json and passed to the Auth webservice via HTTP Post. - public virtual void SetAuthPostData(Dictionary dictData) - { - this.AuthPostData = dictData; - } - - /// Adds a key-value pair to the get-parameters used for Custom Auth (AuthGetParameters). - /// This method does uri-encoding for you. - /// Key for the value to set. - /// Some value relevant for Custom Authentication. - public virtual void AddAuthParameter(string key, string value) - { - string ampersand = string.IsNullOrEmpty(this.AuthGetParameters) ? "" : "&"; - this.AuthGetParameters = string.Format("{0}{1}{2}={3}", this.AuthGetParameters, ampersand, System.Uri.EscapeDataString(key), System.Uri.EscapeDataString(value)); - } - - /// - /// Transform this object into string. - /// - /// String info about this object's values. - public override string ToString() - { - return string.Format("AuthenticationValues = AuthType: {0} UserId: {1}{2}{3}{4}", - this.AuthType, - this.UserId, - string.IsNullOrEmpty(this.AuthGetParameters) ? " GetParameters: yes" : "", - this.AuthPostData == null ? "" : " PostData: yes", - this.Token == null ? "" : " Token: yes"); - } - - /// - /// Make a copy of the current object. - /// - /// The object to be copied into. - /// The copied object. - public AuthenticationValues CopyTo(AuthenticationValues copy) - { - copy.AuthType = this.AuthType; - copy.AuthGetParameters = this.AuthGetParameters; - copy.AuthPostData = this.AuthPostData; - copy.UserId = this.UserId; - return copy; - } - } -} diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/LoadBalancingPeer.cs.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/LoadBalancingPeer.cs.meta deleted file mode 100644 index 3a7f53922..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/LoadBalancingPeer.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 1f4cdbcd242e4f74299f4a780e4c3ff3 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/PhotonPing.cs b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/PhotonPing.cs deleted file mode 100644 index 3c5021c31..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/PhotonPing.cs +++ /dev/null @@ -1,477 +0,0 @@ -// ---------------------------------------------------------------------------- -// -// PhotonNetwork Framework for Unity - Copyright (C) 2018 Exit Games GmbH -// -// -// This file includes various PhotonPing implementations for different APIs, -// platforms and protocols. -// The RegionPinger class is the instance which selects the Ping implementation -// to use. -// -// developer@exitgames.com -// ---------------------------------------------------------------------------- - - -namespace Photon.Realtime -{ - using System; - using System.Collections; - using System.Threading; - - #if NETFX_CORE - using System.Diagnostics; - using Windows.Foundation; - using Windows.Networking; - using Windows.Networking.Sockets; - using Windows.Storage.Streams; - #endif - - #if !NO_SOCKET && !NETFX_CORE - using System.Collections.Generic; - using System.Diagnostics; - using System.Net.Sockets; - #endif - - #if UNITY_WEBGL - // import WWW class - using UnityEngine; - #endif - - /// - /// Abstract implementation of PhotonPing, ase for pinging servers to find the "Best Region". - /// - public abstract class PhotonPing : IDisposable - { - public string DebugString = ""; - public bool Successful; - - protected internal bool GotResult; - - protected internal int PingLength = 13; - - protected internal byte[] PingBytes = new byte[] { 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x7d, 0x00 }; - - protected internal byte PingId; - - private static readonly System.Random RandomIdProvider = new System.Random(); - - public virtual bool StartPing(string ip) - { - throw new NotImplementedException(); - } - - public virtual bool Done() - { - throw new NotImplementedException(); - } - - public virtual void Dispose() - { - throw new NotImplementedException(); - } - - protected internal void Init() - { - this.GotResult = false; - this.Successful = false; - this.PingId = (byte)(RandomIdProvider.Next(255)); - } - } - - - #if !NETFX_CORE && !NO_SOCKET - /// Uses C# Socket class from System.Net.Sockets (as Unity usually does). - /// Incompatible with Windows 8 Store/Phone API. - public class PingMono : PhotonPing - { - private Socket sock; - - /// - /// Sends a "Photon Ping" to a server. - /// - /// Address in IPv4 or IPv6 format. An address containing a '.' will be interpreted as IPv4. - /// True if the Photon Ping could be sent. - public override bool StartPing(string ip) - { - this.Init(); - - try - { - if (this.sock == null) - { - if (ip.Contains(".")) - { - this.sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); - } - else - { - this.sock = new Socket(AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp); - } - - this.sock.ReceiveTimeout = 5000; - this.sock.Connect(ip, 5055); - } - - - this.PingBytes[this.PingBytes.Length - 1] = this.PingId; - this.sock.Send(this.PingBytes); - this.PingBytes[this.PingBytes.Length - 1] = (byte)(this.PingId+1); // this buffer is re-used for the result/receive. invalidate the result now. - } - catch (Exception e) - { - this.sock = null; - Console.WriteLine(e); - } - - return false; - } - - public override bool Done() - { - if (this.GotResult || this.sock == null) - { - return true; // this just indicates the ping is no longer waiting. this.Successful value defines if the roundtrip completed - } - - int read = 0; - try - { - if (!this.sock.Poll(0, SelectMode.SelectRead)) - { - return false; - } - - read = this.sock.Receive(this.PingBytes, SocketFlags.None); - } - catch (Exception ex) - { - if (this.sock != null) - { - this.sock.Close(); - this.sock = null; - } - this.DebugString += " Exception of socket! " + ex.GetType() + " "; - return true; // this just indicates the ping is no longer waiting. this.Successful value defines if the roundtrip completed - } - - bool replyMatch = this.PingBytes[this.PingBytes.Length - 1] == this.PingId && read == this.PingLength; - if (!replyMatch) - { - this.DebugString += " ReplyMatch is false! "; - } - - - this.Successful = replyMatch; - this.GotResult = true; - return true; - } - - public override void Dispose() - { - try - { - this.sock.Close(); - } - catch - { - } - - this.sock = null; - } - - } - #endif - - - #if NETFX_CORE - /// Windows store API implementation of PhotonPing, based on DatagramSocket for UDP. - public class PingWindowsStore : PhotonPing - { - private DatagramSocket sock; - private readonly object syncer = new object(); - - public override bool StartPing(string host) - { - lock (this.syncer) - { - this.Init(); - - EndpointPair endPoint = new EndpointPair(null, string.Empty, new HostName(host), "5055"); - this.sock = new DatagramSocket(); - this.sock.MessageReceived += this.OnMessageReceived; - - IAsyncAction result = this.sock.ConnectAsync(endPoint); - result.Completed = this.OnConnected; - this.DebugString += " End StartPing"; - return true; - } - } - - public override bool Done() - { - lock (this.syncer) - { - return this.GotResult || this.sock == null; // this just indicates the ping is no longer waiting. this.Successful value defines if the roundtrip completed - } - } - - public override void Dispose() - { - lock (this.syncer) - { - this.sock = null; - } - } - - private void OnConnected(IAsyncAction asyncinfo, AsyncStatus asyncstatus) - { - lock (this.syncer) - { - if (asyncinfo.AsTask().IsCompleted && !asyncinfo.AsTask().IsFaulted && this.sock != null && this.sock.Information.RemoteAddress != null) - { - this.PingBytes[this.PingBytes.Length - 1] = this.PingId; - - DataWriter writer; - writer = new DataWriter(this.sock.OutputStream); - writer.WriteBytes(this.PingBytes); - DataWriterStoreOperation res = writer.StoreAsync(); - res.AsTask().Wait(100); - - this.PingBytes[this.PingBytes.Length - 1] = (byte)(this.PingId + 1); // this buffer is re-used for the result/receive. invalidate the result now. - - writer.DetachStream(); - writer.Dispose(); - } - else - { - this.sock = null; // will cause Done() to return true but this.Successful defines if the roundtrip completed - } - } - } - - private void OnMessageReceived(DatagramSocket sender, DatagramSocketMessageReceivedEventArgs args) - { - lock (this.syncer) - { - DataReader reader = null; - try - { - reader = args.GetDataReader(); - uint receivedByteCount = reader.UnconsumedBufferLength; - if (receivedByteCount > 0) - { - byte[] resultBytes = new byte[receivedByteCount]; - reader.ReadBytes(resultBytes); - - //TODO: check result bytes! - - - this.Successful = receivedByteCount == this.PingLength && resultBytes[resultBytes.Length - 1] == this.PingId; - this.GotResult = true; - } - } - catch - { - // TODO: handle error - } - } - } - } - #endif - - - #if NATIVE_SOCKETS - /// Abstract base class to provide proper resource management for the below native ping implementations - public abstract class PingNative : PhotonPing - { - // Native socket states - according to EnetConnect.h state definitions - protected enum NativeSocketState : byte - { - Disconnected = 0, - Connecting = 1, - Connected = 2, - ConnectionError = 3, - SendError = 4, - ReceiveError = 5, - Disconnecting = 6 - } - - protected IntPtr pConnectionHandler = IntPtr.Zero; - - ~PingNative() - { - Dispose(); - } - } - - /// Uses dynamic linked native Photon socket library via DllImport("PhotonSocketPlugin") attribute (as done by Unity Android and Unity PS3). - public class PingNativeDynamic : PingNative - { - public override bool StartPing(string ip) - { - lock (SocketUdpNativeDynamic.syncer) - { - base.Init(); - - if(pConnectionHandler == IntPtr.Zero) - { - pConnectionHandler = SocketUdpNativeDynamic.egconnect(ip); - SocketUdpNativeDynamic.egservice(pConnectionHandler); - byte state = SocketUdpNativeDynamic.eggetState(pConnectionHandler); - while (state == (byte) NativeSocketState.Connecting) - { - SocketUdpNativeDynamic.egservice(pConnectionHandler); - state = SocketUdpNativeDynamic.eggetState(pConnectionHandler); - } - } - - PingBytes[PingBytes.Length - 1] = PingId; - SocketUdpNativeDynamic.egsend(pConnectionHandler, PingBytes, PingBytes.Length); - SocketUdpNativeDynamic.egservice(pConnectionHandler); - - PingBytes[PingBytes.Length - 1] = (byte) (PingId - 1); - return true; - } - } - - public override bool Done() - { - lock (SocketUdpNativeDynamic.syncer) - { - if (this.GotResult || pConnectionHandler == IntPtr.Zero) - { - return true; - } - - int available = SocketUdpNativeDynamic.egservice(pConnectionHandler); - if (available < PingLength) - { - return false; - } - - int pingBytesLength = PingBytes.Length; - int bytesInRemainginDatagrams = SocketUdpNativeDynamic.egread(pConnectionHandler, PingBytes, ref pingBytesLength); - this.Successful = (PingBytes != null && PingBytes[PingBytes.Length - 1] == PingId); - //Debug.Log("Successful: " + this.Successful + " bytesInRemainginDatagrams: " + bytesInRemainginDatagrams + " PingId: " + PingId); - - this.GotResult = true; - return true; - } - } - - public override void Dispose() - { - lock (SocketUdpNativeDynamic.syncer) - { - if (this.pConnectionHandler != IntPtr.Zero) - SocketUdpNativeDynamic.egdisconnect(this.pConnectionHandler); - this.pConnectionHandler = IntPtr.Zero; - } - GC.SuppressFinalize(this); - } - } - - #if NATIVE_SOCKETS && NATIVE_SOCKETS_STATIC - /// Uses static linked native Photon socket library via DllImport("__Internal") attribute (as done by Unity iOS and Unity Switch). - public class PingNativeStatic : PingNative - { - public override bool StartPing(string ip) - { - base.Init(); - - lock (SocketUdpNativeStatic.syncer) - { - if(pConnectionHandler == IntPtr.Zero) - { - pConnectionHandler = SocketUdpNativeStatic.egconnect(ip); - SocketUdpNativeStatic.egservice(pConnectionHandler); - byte state = SocketUdpNativeStatic.eggetState(pConnectionHandler); - while (state == (byte) NativeSocketState.Connecting) - { - SocketUdpNativeStatic.egservice(pConnectionHandler); - state = SocketUdpNativeStatic.eggetState(pConnectionHandler); - Thread.Sleep(0); // suspending execution for a moment is critical on Switch for the OS to update the socket - } - } - - PingBytes[PingBytes.Length - 1] = PingId; - SocketUdpNativeStatic.egsend(pConnectionHandler, PingBytes, PingBytes.Length); - SocketUdpNativeStatic.egservice(pConnectionHandler); - - PingBytes[PingBytes.Length - 1] = (byte) (PingId - 1); - return true; - } - } - - public override bool Done() - { - lock (SocketUdpNativeStatic.syncer) - { - if (this.GotResult || pConnectionHandler == IntPtr.Zero) - { - return true; - } - - int available = SocketUdpNativeStatic.egservice(pConnectionHandler); - if (available < PingLength) - { - return false; - } - - int pingBytesLength = PingBytes.Length; - int bytesInRemainginDatagrams = SocketUdpNativeStatic.egread(pConnectionHandler, PingBytes, ref pingBytesLength); - this.Successful = (PingBytes != null && PingBytes[PingBytes.Length - 1] == PingId); - //Debug.Log("Successful: " + this.Successful + " bytesInRemainginDatagrams: " + bytesInRemainginDatagrams + " PingId: " + PingId); - - this.GotResult = true; - return true; - } - } - - public override void Dispose() - { - lock (SocketUdpNativeStatic.syncer) - { - if (pConnectionHandler != IntPtr.Zero) - SocketUdpNativeStatic.egdisconnect(pConnectionHandler); - pConnectionHandler = IntPtr.Zero; - } - GC.SuppressFinalize(this); - } - } - #endif - #endif - - - #if UNITY_WEBGL - public class PingHttp : PhotonPing - { - private WWW webRequest; - - public override bool StartPing(string address) - { - base.Init(); - - address = "https://" + address + "/photon/m/?ping&r=" + UnityEngine.Random.Range(0, 10000); - this.webRequest = new WWW(address); - return true; - } - - public override bool Done() - { - if (this.webRequest.isDone) - { - Successful = true; - return true; - } - - return false; - } - - public override void Dispose() - { - this.webRequest.Dispose(); - } - } - #endif -} \ No newline at end of file diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/PhotonPing.cs.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/PhotonPing.cs.meta deleted file mode 100644 index efb540b09..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/PhotonPing.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 67137a1b19aa760409002b5b2c63809c -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/PhotonPingClasses.cs b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/PhotonPingClasses.cs deleted file mode 100644 index 70f033744..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/PhotonPingClasses.cs +++ /dev/null @@ -1 +0,0 @@ -// this file is no longer used. it can be deleted safely. \ No newline at end of file diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/PhotonPingClasses.cs.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/PhotonPingClasses.cs.meta deleted file mode 100644 index 4ad43a9e2..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/PhotonPingClasses.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 26bab4a7373ca7d40a5ee8e5e2b0da16 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Player.cs b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Player.cs deleted file mode 100644 index 40588890f..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Player.cs +++ /dev/null @@ -1,452 +0,0 @@ -// ---------------------------------------------------------------------------- -// -// Loadbalancing Framework for Photon - Copyright (C) 2018 Exit Games GmbH -// -// -// Per client in a room, a Player is created. This client's Player is also -// known as PhotonClient.LocalPlayer and the only one you might change -// properties for. -// -// developer@photonengine.com -// ---------------------------------------------------------------------------- - -#if UNITY_4_7 || UNITY_5 || UNITY_5_3_OR_NEWER -#define SUPPORTED_UNITY -#endif - - -namespace Photon.Realtime -{ - using System; - using System.Collections; - using System.Collections.Generic; - using ExitGames.Client.Photon; - - #if SUPPORTED_UNITY - using UnityEngine; - #endif - #if SUPPORTED_UNITY || NETFX_CORE - using Hashtable = ExitGames.Client.Photon.Hashtable; - using SupportClass = ExitGames.Client.Photon.SupportClass; - #endif - - - /// - /// Summarizes a "player" within a room, identified (in that room) by ID (or "actorNumber"). - /// - /// - /// Each player has a actorNumber, valid for that room. It's -1 until assigned by server (and client logic). - /// - public class Player - { - /// - /// Used internally to identify the masterclient of a room. - /// - protected internal Room RoomReference { get; set; } - - - /// Backing field for property. - private int actorNumber = -1; - - /// Identifier of this player in current room. Also known as: actorNumber or actorNumber. It's -1 outside of rooms. - /// The ID is assigned per room and only valid in that context. It will change even on leave and re-join. IDs are never re-used per room. - public int ActorNumber - { - get { return this.actorNumber; } - } - - - /// Only one player is controlled by each client. Others are not local. - public readonly bool IsLocal; - - - public bool HasRejoined - { - get; internal set; - } - - - /// Background field for nickName. - private string nickName = string.Empty; - - /// Non-unique nickname of this player. Synced automatically in a room. - /// - /// A player might change his own playername in a room (it's only a property). - /// Setting this value updates the server and other players (using an operation). - /// - public string NickName - { - get - { - return this.nickName; - } - set - { - if (!string.IsNullOrEmpty(this.nickName) && this.nickName.Equals(value)) - { - return; - } - - this.nickName = value; - - // update a room, if we changed our nickName locally - if (this.IsLocal) - { - this.SetPlayerNameProperty(); - } - } - } - - /// UserId of the player, available when the room got created with RoomOptions.PublishUserId = true. - /// Useful for and blocking slots in a room for expected players (e.g. in ). - public string UserId { get; internal set; } - - /// - /// True if this player is the Master Client of the current room. - /// - public bool IsMasterClient - { - get - { - if (this.RoomReference == null) - { - return false; - } - - return this.ActorNumber == this.RoomReference.MasterClientId; - } - } - - /// If this player is active in the room (and getting events which are currently being sent). - /// - /// Inactive players keep their spot in a room but otherwise behave as if offline (no matter what their actual connection status is). - /// The room needs a PlayerTTL != 0. If a player is inactive for longer than PlayerTTL, the server will remove this player from the room. - /// For a client "rejoining" a room, is the same as joining it: It gets properties, cached events and then the live events. - /// - public bool IsInactive { get; protected internal set; } - - /// Read-only cache for custom properties of player. Set via Player.SetCustomProperties. - /// - /// Don't modify the content of this Hashtable. Use SetCustomProperties and the - /// properties of this class to modify values. When you use those, the client will - /// sync values with the server. - /// - /// - public Hashtable CustomProperties { get; set; } - - /// Can be used to store a reference that's useful to know "by player". - /// Example: Set a player's character as Tag by assigning the GameObject on Instantiate. - public object TagObject; - - - /// - /// Creates a player instance. - /// To extend and replace this Player, override LoadBalancingPeer.CreatePlayer(). - /// - /// NickName of the player (a "well known property"). - /// ID or ActorNumber of this player in the current room (a shortcut to identify each player in room) - /// If this is the local peer's player (or a remote one). - protected internal Player(string nickName, int actorNumber, bool isLocal) : this(nickName, actorNumber, isLocal, null) - { - } - - /// - /// Creates a player instance. - /// To extend and replace this Player, override LoadBalancingPeer.CreatePlayer(). - /// - /// NickName of the player (a "well known property"). - /// ID or ActorNumber of this player in the current room (a shortcut to identify each player in room) - /// If this is the local peer's player (or a remote one). - /// A Hashtable of custom properties to be synced. Must use String-typed keys and serializable datatypes as values. - protected internal Player(string nickName, int actorNumber, bool isLocal, Hashtable playerProperties) - { - this.IsLocal = isLocal; - this.actorNumber = actorNumber; - this.NickName = nickName; - - this.CustomProperties = new Hashtable(); - this.InternalCacheProperties(playerProperties); - } - - - /// - /// Get a Player by ActorNumber (Player.ID). - /// - /// ActorNumber of the a player in this room. - /// Player or null. - public Player Get(int id) - { - if (this.RoomReference == null) - { - return null; - } - - return this.RoomReference.GetPlayer(id); - } - - /// Gets this Player's next Player, as sorted by ActorNumber (Player.ID). Wraps around. - /// Player or null. - public Player GetNext() - { - return GetNextFor(this.ActorNumber); - } - - /// Gets a Player's next Player, as sorted by ActorNumber (Player.ID). Wraps around. - /// Useful when you pass something to the next player. For example: passing the turn to the next player. - /// The Player for which the next is being needed. - /// Player or null. - public Player GetNextFor(Player currentPlayer) - { - if (currentPlayer == null) - { - return null; - } - return GetNextFor(currentPlayer.ActorNumber); - } - - /// Gets a Player's next Player, as sorted by ActorNumber (Player.ID). Wraps around. - /// Useful when you pass something to the next player. For example: passing the turn to the next player. - /// The ActorNumber (Player.ID) for which the next is being needed. - /// Player or null. - public Player GetNextFor(int currentPlayerId) - { - if (this.RoomReference == null || this.RoomReference.Players == null || this.RoomReference.Players.Count < 2) - { - return null; - } - - Dictionary players = this.RoomReference.Players; - int nextHigherId = int.MaxValue; // we look for the next higher ID - int lowestId = currentPlayerId; // if we are the player with the highest ID, there is no higher and we return to the lowest player's id - - foreach (int playerid in players.Keys) - { - if (playerid < lowestId) - { - lowestId = playerid; // less than any other ID (which must be at least less than this player's id). - } - else if (playerid > currentPlayerId && playerid < nextHigherId) - { - nextHigherId = playerid; // more than our ID and less than those found so far. - } - } - - //UnityEngine.Debug.LogWarning("Debug. " + currentPlayerId + " lower: " + lowestId + " higher: " + nextHigherId + " "); - //UnityEngine.Debug.LogWarning(this.RoomReference.GetPlayer(currentPlayerId)); - //UnityEngine.Debug.LogWarning(this.RoomReference.GetPlayer(lowestId)); - //if (nextHigherId != int.MaxValue) UnityEngine.Debug.LogWarning(this.RoomReference.GetPlayer(nextHigherId)); - return (nextHigherId != int.MaxValue) ? players[nextHigherId] : players[lowestId]; - } - - - /// Caches properties for new Players or when updates of remote players are received. Use SetCustomProperties() for a synced update. - /// - /// This only updates the CustomProperties and doesn't send them to the server. - /// Mostly used when creating new remote players, where the server sends their properties. - /// - protected internal virtual void InternalCacheProperties(Hashtable properties) - { - if (properties == null || properties.Count == 0 || this.CustomProperties.Equals(properties)) - { - return; - } - - if (properties.ContainsKey(ActorProperties.PlayerName)) - { - string nameInServersProperties = (string)properties[ActorProperties.PlayerName]; - if (nameInServersProperties != null) - { - if (this.IsLocal) - { - // the local playername is different than in the properties coming from the server - // so the local nickName was changed and the server is outdated -> update server - // update property instead of using the outdated nickName coming from server - if (!nameInServersProperties.Equals(this.nickName)) - { - this.SetPlayerNameProperty(); - } - } - else - { - this.NickName = nameInServersProperties; - } - } - } - if (properties.ContainsKey(ActorProperties.UserId)) - { - this.UserId = (string)properties[ActorProperties.UserId]; - } - if (properties.ContainsKey(ActorProperties.IsInactive)) - { - this.IsInactive = (bool)properties[ActorProperties.IsInactive]; //TURNBASED new well-known propery for players - } - - this.CustomProperties.MergeStringKeys(properties); - this.CustomProperties.StripKeysWithNullValues(); - } - - - /// - /// Brief summary string of the Player: ActorNumber and NickName - /// - public override string ToString() - { - return string.Format("#{0:00} '{1}'",this.ActorNumber, this.NickName); - } - - /// - /// String summary of the Player: player.ID, name and all custom properties of this user. - /// - /// - /// Use with care and not every frame! - /// Converts the customProperties to a String on every single call. - /// - public string ToStringFull() - { - return string.Format("#{0:00} '{1}'{2} {3}", this.ActorNumber, this.NickName, this.IsInactive ? " (inactive)" : "", this.CustomProperties.ToStringFull()); - } - - /// - /// If players are equal (by GetHasCode, which returns this.ID). - /// - public override bool Equals(object p) - { - Player pp = p as Player; - return (pp != null && this.GetHashCode() == pp.GetHashCode()); - } - - /// - /// Accompanies Equals, using the ID (actorNumber) as HashCode to return. - /// - public override int GetHashCode() - { - return this.ActorNumber; - } - - /// - /// Used internally, to update this client's playerID when assigned (doesn't change after assignment). - /// - protected internal void ChangeLocalID(int newID) - { - if (!this.IsLocal) - { - //Debug.LogError("ERROR You should never change Player IDs!"); - return; - } - - this.actorNumber = newID; - } - - - - /// - /// Updates and synchronizes this Player's Custom Properties. Optionally, expectedProperties can be provided as condition. - /// - /// - /// Custom Properties are a set of string keys and arbitrary values which is synchronized - /// for the players in a Room. They are available when the client enters the room, as - /// they are in the response of OpJoin and OpCreate. - /// - /// Custom Properties either relate to the (current) Room or a Player (in that Room). - /// - /// Both classes locally cache the current key/values and make them available as - /// property: CustomProperties. This is provided only to read them. - /// You must use the method SetCustomProperties to set/modify them. - /// - /// Any client can set any Custom Properties anytime (when in a room). - /// It's up to the game logic to organize how they are best used. - /// - /// You should call SetCustomProperties only with key/values that are new or changed. This reduces - /// traffic and performance. - /// - /// Unless you define some expectedProperties, setting key/values is always permitted. - /// In this case, the property-setting client will not receive the new values from the server but - /// instead update its local cache in SetCustomProperties. - /// - /// If you define expectedProperties, the server will skip updates if the server property-cache - /// does not contain all expectedProperties with the same values. - /// In this case, the property-setting client will get an update from the server and update it's - /// cached key/values at about the same time as everyone else. - /// - /// The benefit of using expectedProperties can be only one client successfully sets a key from - /// one known value to another. - /// As example: Store who owns an item in a Custom Property "ownedBy". It's 0 initally. - /// When multiple players reach the item, they all attempt to change "ownedBy" from 0 to their - /// actorNumber. If you use expectedProperties {"ownedBy", 0} as condition, the first player to - /// take the item will have it (and the others fail to set the ownership). - /// - /// Properties get saved with the game state for Turnbased games (which use IsPersistent = true). - /// - /// Hashtable of Custom Properties to be set. - /// If non-null, these are the property-values the server will check as condition for this update. - /// Defines if this SetCustomProperties-operation gets forwarded to your WebHooks. Client must be in room. - /// - /// False if propertiesToSet is null or empty or have zero string keys. - /// True in offline mode even if expectedProperties or webFlags are used. - /// If not in a room, returns true if local player and expectedValues and webFlags are null. - /// (Use this to cache properties to be sent when joining a room). - /// Otherwise, returns if this operation could be sent to the server. - /// - public bool SetCustomProperties(Hashtable propertiesToSet, Hashtable expectedValues = null, WebFlags webFlags = null) - { - if (propertiesToSet == null || propertiesToSet.Count == 0) - { - return false; - } - - Hashtable customProps = propertiesToSet.StripToStringKeys() as Hashtable; - - if (this.RoomReference != null) - { - if (this.RoomReference.IsOffline) - { - if (customProps.Count == 0) - { - return false; - } - this.CustomProperties.Merge(customProps); - this.CustomProperties.StripKeysWithNullValues(); - // invoking callbacks - this.RoomReference.LoadBalancingClient.InRoomCallbackTargets.OnPlayerPropertiesUpdate(this, customProps); - return true; - } - else - { - Hashtable customPropsToCheck = expectedValues.StripToStringKeys() as Hashtable; - - // send (sync) these new values if in online room - return this.RoomReference.LoadBalancingClient.OpSetPropertiesOfActor(this.actorNumber, customProps, customPropsToCheck, webFlags); - } - } - if (this.IsLocal) - { - if (customProps.Count == 0) - { - return false; - } - if (expectedValues == null && webFlags == null) - { - this.CustomProperties.Merge(customProps); - this.CustomProperties.StripKeysWithNullValues(); - return true; - } - } - - return false; - } - - - /// Uses OpSetPropertiesOfActor to sync this player's NickName (server is being updated with this.NickName). - private bool SetPlayerNameProperty() - { - if (this.RoomReference != null && !this.RoomReference.IsOffline) - { - Hashtable properties = new Hashtable(); - properties[ActorProperties.PlayerName] = this.nickName; - return this.RoomReference.LoadBalancingClient.OpSetPropertiesOfActor(this.ActorNumber, properties); - } - - return false; - } - } -} \ No newline at end of file diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Player.cs.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Player.cs.meta deleted file mode 100644 index 804f3ea73..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Player.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 773eccd0bf28b5246a65b38198bc645c -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Region.cs b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Region.cs deleted file mode 100644 index 8d92300e8..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Region.cs +++ /dev/null @@ -1,90 +0,0 @@ -// ---------------------------------------------------------------------------- -// -// Loadbalancing Framework for Photon - Copyright (C) 2018 Exit Games GmbH -// -// -// Represents regions in the Photon Cloud. -// -// developer@photonengine.com -// ---------------------------------------------------------------------------- - -#if UNITY_4_7 || UNITY_5 || UNITY_5_3_OR_NEWER -#define SUPPORTED_UNITY -#endif - - -namespace Photon.Realtime -{ - using ExitGames.Client.Photon; - - #if SUPPORTED_UNITY || NETFX_CORE - using Hashtable = ExitGames.Client.Photon.Hashtable; - using SupportClass = ExitGames.Client.Photon.SupportClass; - #endif - - - public class Region - { - public string Code { get; private set; } - - /// Unlike the CloudRegionCode, this may contain cluster information. - public string Cluster { get; private set; } - - public string HostAndPort { get; protected internal set; } - - public int Ping { get; set; } - - public bool WasPinged { get { return this.Ping != int.MaxValue; } } - - public Region(string code, string address) - { - this.SetCodeAndCluster(code); - this.HostAndPort = address; - this.Ping = int.MaxValue; - } - - public Region(string code, int ping) - { - this.SetCodeAndCluster(code); - this.Ping = ping; - } - - private void SetCodeAndCluster(string codeAsString) - { - if (codeAsString == null) - { - this.Code = ""; - this.Cluster = ""; - return; - } - - codeAsString = codeAsString.ToLower(); - int slash = codeAsString.IndexOf('/'); - this.Code = slash <= 0 ? codeAsString : codeAsString.Substring(0, slash); - this.Cluster = slash <= 0 ? "" : codeAsString.Substring(slash+1, codeAsString.Length-slash-1); - } - - public override string ToString() - { - return this.ToString(false); - } - - public string ToString(bool compact = false) - { - string regionCluster = this.Code; - if (!string.IsNullOrEmpty(this.Cluster)) - { - regionCluster += "/" + this.Cluster; - } - - if (compact) - { - return string.Format("{0}:{1}", regionCluster, this.Ping); - } - else - { - return string.Format("{0}[{2}]: {1}ms ", regionCluster, this.Ping, this.HostAndPort); - } - } - } -} \ No newline at end of file diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Region.cs.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Region.cs.meta deleted file mode 100644 index b6799ac77..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Region.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 47fa07f9beebdfe4884f9f0eeaac7b16 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/RegionHandler.cs b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/RegionHandler.cs deleted file mode 100644 index 0f803f940..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/RegionHandler.cs +++ /dev/null @@ -1,690 +0,0 @@ -// ---------------------------------------------------------------------------- -// -// Loadbalancing Framework for Photon - Copyright (C) 2018 Exit Games GmbH -// -// -// The RegionHandler class provides methods to ping a list of regions, -// to find the one with best ping. -// -// developer@photonengine.com -// ---------------------------------------------------------------------------- - - -#if UNITY_4_7 || UNITY_5 || UNITY_5_3_OR_NEWER -#define SUPPORTED_UNITY -#endif - -#if UNITY_WEBGL -#define PING_VIA_COROUTINE -#endif - -namespace Photon.Realtime -{ - using System; - using System.Text; - using System.Threading; - using System.Net; - using System.Collections; - using System.Collections.Generic; - using System.Diagnostics; - using ExitGames.Client.Photon; - - #if SUPPORTED_UNITY - using UnityEngine; - using Debug = UnityEngine.Debug; - #endif - #if SUPPORTED_UNITY || NETFX_CORE - using Hashtable = ExitGames.Client.Photon.Hashtable; - using SupportClass = ExitGames.Client.Photon.SupportClass; - #endif - - /// - /// Provides methods to work with Photon's regions (Photon Cloud) and can be use to find the one with best ping. - /// - /// - /// When a client uses a Name Server to fetch the list of available regions, the LoadBalancingClient will create a RegionHandler - /// and provide it via the OnRegionListReceived callback. - /// - /// Your logic can decide to either connect to one of those regional servers, or it may use PingMinimumOfRegions to test - /// which region provides the best ping. - /// - /// It makes sense to make clients "sticky" to a region when one gets selected. - /// This can be achieved by storing the SummaryToCache value, once pinging was done. - /// When the client connects again, the previous SummaryToCache helps limiting the number of regions to ping. - /// In best case, only the previously selected region gets re-pinged and if the current ping is not much worse, this one region is used again. - /// - public class RegionHandler - { - /// The implementation of PhotonPing to use for region pinging (Best Region detection). - /// Defaults to null, which means the Type is set automatically. - public static Type PingImplementation; - - /// A list of region names for the Photon Cloud. Set by the result of OpGetRegions(). - /// - /// Implement ILoadBalancingCallbacks and register for the callbacks to get OnRegionListReceived(RegionHandler regionHandler). - /// You can also put a "case OperationCode.GetRegions:" into your OnOperationResponse method to notice when the result is available. - /// - public List EnabledRegions { get; protected internal set; } - - private string availableRegionCodes; - - private Region bestRegionCache; - - /// - /// When PingMinimumOfRegions was called and completed, the BestRegion is identified by best ping. - /// - public Region BestRegion - { - get - { - if (this.EnabledRegions == null) - { - return null; - } - if (this.bestRegionCache != null) - { - return this.bestRegionCache; - } - - this.EnabledRegions.Sort((a, b) => a.Ping.CompareTo(b.Ping) ); - - this.bestRegionCache = this.EnabledRegions[0]; - return this.bestRegionCache; - } - } - - /// - /// This value summarizes the results of pinging currently available regions (after PingMinimumOfRegions finished). - /// - /// - /// This value should be stored in the client by the game logic. - /// When connecting again, use it as previous summary to speed up pinging regions and to make the best region sticky for the client. - /// - public string SummaryToCache - { - get - { - if (this.BestRegion != null) { - return this.BestRegion.Code + ";" + this.BestRegion.Ping + ";" + this.availableRegionCodes; - } - - return this.availableRegionCodes; - } - } - - public string GetResults() - { - StringBuilder sb = new StringBuilder(); - sb.AppendFormat("Region Pinging Result: {0}\n", this.BestRegion.ToString()); - if (this.pingerList != null) - { - foreach (RegionPinger region in this.pingerList) - { - sb.AppendFormat(region.GetResults() + "\n"); - } - } - - sb.AppendFormat("Previous summary: {0}", this.previousSummaryProvided); - return sb.ToString(); - } - - public void SetRegions(OperationResponse opGetRegions) - { - if (opGetRegions.OperationCode != OperationCode.GetRegions) - { - return; - } - if (opGetRegions.ReturnCode != ErrorCode.Ok) - { - return; - } - - string[] regions = opGetRegions[ParameterCode.Region] as string[]; - string[] servers = opGetRegions[ParameterCode.Address] as string[]; - if (regions == null || servers == null || regions.Length != servers.Length) - { - //TODO: log error - //Debug.LogError("The region arrays from Name Server are not ok. Must be non-null and same length. " + (regions == null) + " " + (servers == null) + "\n" + opGetRegions.ToStringFull()); - return; - } - - this.bestRegionCache = null; - this.EnabledRegions = new List(regions.Length); - - for (int i = 0; i < regions.Length; i++) - { - Region tmp = new Region(regions[i], servers[i]); - if (string.IsNullOrEmpty(tmp.Code)) - { - continue; - } - - this.EnabledRegions.Add(tmp); - } - - Array.Sort(regions); - this.availableRegionCodes = string.Join(",", regions); - } - - private List pingerList; - private Action onCompleteCall; - private int previousPing; - public bool IsPinging { get; private set; } - private string previousSummaryProvided; - - - public bool PingMinimumOfRegions(Action onCompleteCallback, string previousSummary) - { - if (this.EnabledRegions == null || this.EnabledRegions.Count == 0) - { - //TODO: log error - //Debug.LogError("No regions available. Maybe all got filtered out or the AppId is not correctly configured."); - return false; - } - - if (this.IsPinging) - { - //TODO: log warning - //Debug.LogWarning("PingMinimumOfRegions() skipped, because this RegionHandler is already pinging some regions."); - return false; - } - - this.IsPinging = true; - this.onCompleteCall = onCompleteCallback; - this.previousSummaryProvided = previousSummary; - - if (string.IsNullOrEmpty(previousSummary)) - { - return this.PingEnabledRegions(); - } - - string[] values = previousSummary.Split(';'); - if (values.Length < 3) - { - return this.PingEnabledRegions(); - } - - int prevBestRegionPing; - bool secondValueIsInt = Int32.TryParse(values[1], out prevBestRegionPing); - if (!secondValueIsInt) - { - return this.PingEnabledRegions(); - } - - string prevBestRegionCode = values[0]; - string prevAvailableRegionCodes = values[2]; - - - if (string.IsNullOrEmpty(prevBestRegionCode)) - { - return this.PingEnabledRegions(); - } - if (string.IsNullOrEmpty(prevAvailableRegionCodes)) - { - return this.PingEnabledRegions(); - } - if (!this.availableRegionCodes.Equals(prevAvailableRegionCodes) || !this.availableRegionCodes.Contains(prevBestRegionCode)) - { - return this.PingEnabledRegions(); - } - if (prevBestRegionPing >= RegionPinger.PingWhenFailed) - { - return this.PingEnabledRegions(); - } - - // let's check only the preferred region to detect if it's still "good enough" - this.previousPing = prevBestRegionPing; - - Region preferred = this.EnabledRegions.Find(r => r.Code.Equals(prevBestRegionCode)); - RegionPinger singlePinger = new RegionPinger(preferred, this.OnPreferredRegionPinged); - singlePinger.Start(); - return true; - } - - private void OnPreferredRegionPinged(Region preferredRegion) - { - if (preferredRegion.Ping > this.previousPing * 1.50f) - { - this.PingEnabledRegions(); - } - else - { - this.IsPinging = false; - this.onCompleteCall(this); - #if PING_VIA_COROUTINE - MonoBehaviourEmpty.SelfDestroy(); - #endif - } - } - - - private bool PingEnabledRegions() - { - if (this.EnabledRegions == null || this.EnabledRegions.Count == 0) - { - //TODO: log - //Debug.LogError("No regions available. Maybe all got filtered out or the AppId is not correctly configured."); - return false; - } - - if (this.pingerList == null) - { - this.pingerList = new List(); - } - else - { - lock (this.pingerList) - { - this.pingerList.Clear(); - } - } - - lock (this.pingerList) - { - foreach (Region region in this.EnabledRegions) - { - RegionPinger rp = new RegionPinger(region, this.OnRegionDone); - this.pingerList.Add(rp); - rp.Start(); // TODO: check return value - } - } - - return true; - } - - private void OnRegionDone(Region region) - { - lock (this.pingerList) - { - if (this.IsPinging == false) - { - return; - } - - this.bestRegionCache = null; - foreach (RegionPinger pinger in this.pingerList) - { - if (!pinger.Done) - { - return; - } - } - - this.IsPinging = false; - } - - this.onCompleteCall(this); - #if PING_VIA_COROUTINE - MonoBehaviourEmpty.SelfDestroy(); - #endif - } - } - - public class RegionPinger - { - public static int Attempts = 5; - public static bool IgnoreInitialAttempt = true; - public static int MaxMilliseconsPerPing = 800; // enter a value you're sure some server can beat (have a lower rtt) - public static int PingWhenFailed = Attempts * MaxMilliseconsPerPing; - - private Region region; - private string regionAddress; - public int CurrentAttempt = 0; - - public bool Done { get; private set; } - private Action onDoneCall; - - private PhotonPing ping; - - private List rttResults; - - public RegionPinger(Region region, Action onDoneCallback) - { - this.region = region; - this.region.Ping = PingWhenFailed; - this.Done = false; - this.onDoneCall = onDoneCallback; - } - - /// Selects the best fitting ping implementation or uses the one set in RegionHandler.PingImplementation. - /// PhotonPing instance to use. - private PhotonPing GetPingImplementation() - { - PhotonPing ping = null; - - // using each type explicitly in the conditional code, makes sure Unity doesn't strip the class / constructor. - - #if !UNITY_EDITOR && NETFX_CORE - if (RegionHandler.PingImplementation == null || RegionHandler.PingImplementation == typeof(PingWindowsStore)) - { - ping = new PingWindowsStore(); - } - #elif NATIVE_SOCKETS || NO_SOCKET - if (RegionHandler.PingImplementation == null || RegionHandler.PingImplementation == typeof(PingNativeDynamic)) - { - ping = new PingNativeDynamic(); - } - #elif UNITY_WEBGL - if (RegionHandler.PingImplementation == null || RegionHandler.PingImplementation == typeof(PingHttp)) - { - ping = new PingHttp(); - } - #else - if (RegionHandler.PingImplementation == null || RegionHandler.PingImplementation == typeof(PingMono)) - { - ping = new PingMono(); - } - #endif - - if (ping == null) - { - if (RegionHandler.PingImplementation != null) - { - ping = (PhotonPing)Activator.CreateInstance(RegionHandler.PingImplementation); - } - } - - return ping; - } - - - /// - /// Starts the ping routine for the assigned region. - /// - /// - /// Pinging runs in a ThreadPool worker item or (if needed) in a Thread. - /// WebGL runs pinging on the Main Thread as coroutine. - /// - /// Always true. - public bool Start() - { - // all addresses for Photon region servers will contain a :port ending. this needs to be removed first. - // PhotonPing.StartPing() requires a plain (IP) address without port or protocol-prefix (on all but Windows 8.1 and WebGL platforms). - string address = this.region.HostAndPort; - int indexOfColon = address.LastIndexOf(':'); - if (indexOfColon > 1) - { - address = address.Substring(0, indexOfColon); - } - this.regionAddress = ResolveHost(address); - - - this.ping = this.GetPingImplementation(); - - - this.Done = false; - this.CurrentAttempt = 0; - this.rttResults = new List(Attempts); - - - #if PING_VIA_COROUTINE - MonoBehaviourEmpty.Instance.StartCoroutine(this.RegionPingCoroutine()); - #else - bool queued = false; - #if !NETFX_CORE - try - { - queued = ThreadPool.QueueUserWorkItem(this.RegionPingPooled); - } - catch - { - queued = false; - } - #endif - if (!queued) - { - SupportClass.StartBackgroundCalls(this.RegionPingThreaded, 0, "RegionPing_" + this.region.Code + "_" + this.region.Cluster); - } - #endif - - - return true; - } - - // wraps RegionPingThreaded() to get the signature compatible with ThreadPool.QueueUserWorkItem - protected internal void RegionPingPooled(object context) - { - this.RegionPingThreaded(); - } - - protected internal bool RegionPingThreaded() - { - this.region.Ping = PingWhenFailed; - - float rttSum = 0.0f; - int replyCount = 0; - - - Stopwatch sw = new Stopwatch(); - for (this.CurrentAttempt = 0; this.CurrentAttempt < Attempts; this.CurrentAttempt++) - { - bool overtime = false; - sw.Reset(); - sw.Start(); - - try - { - this.ping.StartPing(this.regionAddress); - } - catch (Exception e) - { - System.Diagnostics.Debug.WriteLine("RegionPinger.RegionPingThreaded() catched an exception for ping.StartPing(). Exception: " + e + " Source: " + e.Source + " Message: " + e.Message); - break; - } - - - while (!this.ping.Done()) - { - if (sw.ElapsedMilliseconds >= MaxMilliseconsPerPing) - { - overtime = true; - break; - } - #if !NETFX_CORE - System.Threading.Thread.Sleep(0); - #endif - } - - - sw.Stop(); - int rtt = (int)sw.ElapsedMilliseconds; - this.rttResults.Add(rtt); - - if (IgnoreInitialAttempt && this.CurrentAttempt == 0) - { - // do nothing. - } - else if (this.ping.Successful && !overtime) - { - rttSum += rtt; - replyCount++; - this.region.Ping = (int)((rttSum) / replyCount); - } - - #if !NETFX_CORE - System.Threading.Thread.Sleep(10); - #endif - } - - //Debug.Log("Done: "+ this.region.Code); - this.Done = true; - this.ping.Dispose(); - - this.onDoneCall(this.region); - - return false; - } - - - #if SUPPORTED_UNITY - /// - /// Affected by frame-rate of app, as this Coroutine checks the socket for a result once per frame. - /// - protected internal IEnumerator RegionPingCoroutine() - { - this.region.Ping = PingWhenFailed; - - float rttSum = 0.0f; - int replyCount = 0; - - - Stopwatch sw = new Stopwatch(); - for (this.CurrentAttempt = 0; this.CurrentAttempt < Attempts; this.CurrentAttempt++) - { - bool overtime = false; - sw.Reset(); - sw.Start(); - - try - { - this.ping.StartPing(this.regionAddress); - } - catch (Exception e) - { - Debug.Log("catched: " + e); - break; - } - - - while (!this.ping.Done()) - { - if (sw.ElapsedMilliseconds >= MaxMilliseconsPerPing) - { - overtime = true; - break; - } - yield return 0; // keep this loop tight, to avoid adding local lag to rtt. - } - - - sw.Stop(); - int rtt = (int)sw.ElapsedMilliseconds; - this.rttResults.Add(rtt); - - - if (IgnoreInitialAttempt && this.CurrentAttempt == 0) - { - // do nothing. - } - else if (this.ping.Successful && !overtime) - { - rttSum += rtt; - replyCount++; - this.region.Ping = (int)((rttSum) / replyCount); - } - - yield return new WaitForSeconds(0.1f); - } - - - //Debug.Log("Done: "+ this.region.Code); - this.Done = true; - this.ping.Dispose(); - this.onDoneCall(this.region); - yield return null; - } - #endif - - - public string GetResults() - { - return string.Format("{0}: {1} ({2})", this.region.Code, this.region.Ping, this.rttResults.ToStringFull()); - } - - /// - /// Attempts to resolve a hostname into an IP string or returns empty string if that fails. - /// - /// - /// To be compatible with most platforms, the address family is checked like this:
- /// if (ipAddress.AddressFamily.ToString().Contains("6")) // ipv6... - ///
- /// Hostname to resolve. - /// IP string or empty string if resolution fails - public static string ResolveHost(string hostName) - { - - if (hostName.StartsWith("wss://")) - { - hostName = hostName.Substring(6); - } - if (hostName.StartsWith("ws://")) - { - hostName = hostName.Substring(5); - } - - string ipv4Address = string.Empty; - - try - { - #if UNITY_WSA || NETFX_CORE || UNITY_WEBGL - return hostName; - #else - - IPAddress[] address = Dns.GetHostAddresses(hostName); - if (address.Length == 1) - { - return address[0].ToString(); - } - - // if we got more addresses, try to pick a IPv6 one - // checking ipAddress.ToString() means we don't have to import System.Net.Sockets, which is not available on some platforms (Metro) - for (int index = 0; index < address.Length; index++) - { - IPAddress ipAddress = address[index]; - if (ipAddress != null) - { - if (ipAddress.ToString().Contains(":")) - { - return ipAddress.ToString(); - } - if (string.IsNullOrEmpty(ipv4Address)) - { - ipv4Address = address.ToString(); - } - } - } - #endif - } - catch (System.Exception e) - { - System.Diagnostics.Debug.WriteLine("RegionPinger.ResolveHost() catched an exception for Dns.GetHostAddresses(). Exception: " + e + " Source: " + e.Source + " Message: " + e.Message); - } - - return ipv4Address; - } - } - - #if PING_VIA_COROUTINE - internal class MonoBehaviourEmpty : MonoBehaviour - { - private static bool instanceSet; // to avoid instance null check which may be incorrect - private static MonoBehaviourEmpty instance; - - public static MonoBehaviourEmpty Instance - { - get - { - if (instanceSet) - { - return instance; - } - GameObject go = new GameObject(); - DontDestroyOnLoad(go); - go.name = "RegionPinger"; - instance = go.AddComponent(); - instanceSet = true; - return instance; - } - } - - public static void SelfDestroy() - { - if (instanceSet) - { - instanceSet = false; - Destroy(instance.gameObject); - } - } - } - #endif -} diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/RegionHandler.cs.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/RegionHandler.cs.meta deleted file mode 100644 index 7a9fac8a0..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/RegionHandler.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e44fa9826b5332748a512d41bdcfbc48 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Room.cs b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Room.cs deleted file mode 100644 index dd88e9de2..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Room.cs +++ /dev/null @@ -1,585 +0,0 @@ -// ---------------------------------------------------------------------------- -// -// Loadbalancing Framework for Photon - Copyright (C) 2018 Exit Games GmbH -// -// -// The Room class resembles the properties known about the room in which -// a game/match happens. -// -// developer@photonengine.com -// ---------------------------------------------------------------------------- - -#if UNITY_4_7 || UNITY_5 || UNITY_5_3_OR_NEWER -#define SUPPORTED_UNITY -#endif - - -namespace Photon.Realtime -{ - using System; - using System.Collections; - using System.Collections.Generic; - using ExitGames.Client.Photon; - - #if SUPPORTED_UNITY || NETFX_CORE - using Hashtable = ExitGames.Client.Photon.Hashtable; - using SupportClass = ExitGames.Client.Photon.SupportClass; - #endif - - - /// - /// This class represents a room a client joins/joined. - /// - /// - /// Contains a list of current players, their properties and those of this room, too. - /// A room instance has a number of "well known" properties like IsOpen, MaxPlayers which can be changed. - /// Your own, custom properties can be set via SetCustomProperties() while being in the room. - /// - /// Typically, this class should be extended by a game-specific implementation with logic and extra features. - /// - public class Room : RoomInfo - { - /// - /// A reference to the LoadBalancingClient which is currently keeping the connection and state. - /// - public LoadBalancingClient LoadBalancingClient { get; set; } - - /// The name of a room. Unique identifier (per region and virtual appid) for a room/match. - /// The name can't be changed once it's set by the server. - public new string Name - { - get - { - return this.name; - } - - internal set - { - this.name = value; - } - } - - private bool isOffline; - - public bool IsOffline - { - get - { - return isOffline; - } - - private set - { - isOffline = value; - } - } - - /// - /// Defines if the room can be joined. - /// - /// - /// This does not affect listing in a lobby but joining the room will fail if not open. - /// If not open, the room is excluded from random matchmaking. - /// Due to racing conditions, found matches might become closed while users are trying to join. - /// Simply re-connect to master and find another. - /// Use property "IsVisible" to not list the room. - /// - /// As part of RoomInfo this can't be set. - /// As part of a Room (which the player joined), the setter will update the server and all clients. - /// - public new bool IsOpen - { - get - { - return this.isOpen; - } - - set - { - if (value != this.isOpen) - { - if (!this.isOffline) - { - this.LoadBalancingClient.OpSetPropertiesOfRoom(new Hashtable() { { GamePropertyKey.IsOpen, value } }); - } - } - - this.isOpen = value; - } - } - - /// - /// Defines if the room is listed in its lobby. - /// - /// - /// Rooms can be created invisible, or changed to invisible. - /// To change if a room can be joined, use property: open. - /// - /// As part of RoomInfo this can't be set. - /// As part of a Room (which the player joined), the setter will update the server and all clients. - /// - public new bool IsVisible - { - get - { - return this.isVisible; - } - - set - { - if (value != this.isVisible) - { - if (!this.isOffline) - { - this.LoadBalancingClient.OpSetPropertiesOfRoom(new Hashtable() { { GamePropertyKey.IsVisible, value } }); - } - } - - this.isVisible = value; - } - } - - /// - /// Sets a limit of players to this room. This property is synced and shown in lobby, too. - /// If the room is full (players count == maxplayers), joining this room will fail. - /// - /// - /// As part of RoomInfo this can't be set. - /// As part of a Room (which the player joined), the setter will update the server and all clients. - /// - public new byte MaxPlayers - { - get - { - return this.maxPlayers; - } - - set - { - if (value != this.maxPlayers) - { - if (!this.isOffline) - { - this.LoadBalancingClient.OpSetPropertiesOfRoom(new Hashtable() { { GamePropertyKey.MaxPlayers, value } }); - } - } - - this.maxPlayers = value; - } - } - - /// The count of players in this Room (using this.Players.Count). - public new byte PlayerCount - { - get - { - if (this.Players == null) - { - return 0; - } - - return (byte)this.Players.Count; - } - } - - /// While inside a Room, this is the list of players who are also in that room. - private Dictionary players = new Dictionary(); - - /// While inside a Room, this is the list of players who are also in that room. - public Dictionary Players - { - get - { - return this.players; - } - - private set - { - this.players = value; - } - } - - /// - /// List of users who are expected to join this room. In matchmaking, Photon blocks a slot for each of these UserIDs out of the MaxPlayers. - /// - /// - /// The corresponding feature in Photon is called "Slot Reservation" and can be found in the doc pages. - /// Define expected players in the methods: , and . - /// - public string[] ExpectedUsers - { - get { return this.expectedUsers; } - } - - /// Player Time To Live. How long any player can be inactive (due to disconnect or leave) before the user gets removed from the playerlist (freeing a slot). - public int PlayerTtl - { - get { return this.playerTtl; } - - set - { - if (value != this.playerTtl) - { - if (!this.isOffline) - { - this.LoadBalancingClient.OpSetPropertyOfRoom(GamePropertyKey.PlayerTtl, value); // TODO: implement Offline Mode - } - } - - this.playerTtl = value; - } - } - - /// Room Time To Live. How long a room stays available (and in server-memory), after the last player becomes inactive. After this time, the room gets persisted or destroyed. - public int EmptyRoomTtl - { - get { return this.emptyRoomTtl; } - - set - { - if (value != this.emptyRoomTtl) - { - if (!this.isOffline) - { - this.LoadBalancingClient.OpSetPropertyOfRoom(GamePropertyKey.EmptyRoomTtl, value); // TODO: implement Offline Mode - } - } - - this.emptyRoomTtl = value; - } - } - - /// - /// The ID (actorNumber, actorNumber) of the player who's the master of this Room. - /// Note: This changes when the current master leaves the room. - /// - public int MasterClientId { get { return this.masterClientId; } } - - /// - /// Gets a list of custom properties that are in the RoomInfo of the Lobby. - /// This list is defined when creating the room and can't be changed afterwards. Compare: LoadBalancingClient.OpCreateRoom() - /// - /// You could name properties that are not set from the beginning. Those will be synced with the lobby when added later on. - public string[] PropertiesListedInLobby - { - get - { - return this.propertiesListedInLobby; - } - - private set - { - this.propertiesListedInLobby = value; - } - } - - /// - /// Gets if this room uses autoCleanUp to remove all (buffered) RPCs and instantiated GameObjects when a player leaves. - /// - public bool AutoCleanUp - { - get - { - return this.autoCleanUp; - } - } - - /// Define if the client who calls SetProperties should receive the properties update event or not. - public bool BroadcastPropertiesChangeToAll { get; private set; } - /// Define if Join and Leave events should not be sent to clients in the room. - public bool SuppressRoomEvents { get; private set; } - /// Extends SuppressRoomEvents: Define if Join and Leave events but also the actors' list and their respective properties should not be sent to clients. - public bool SuppressPlayerInfo { get; private set; } - /// Define if UserIds of the players are broadcast in the room. Useful for FindFriends and reserving slots for expected users. - public bool PublishUserId { get; private set; } - /// Define if actor or room properties with null values are removed on the server or kept. - public bool DeleteNullProperties { get; private set; } - - #if SERVERSDK - /// Define if rooms should have unique UserId per actor and that UserIds are used instead of actor number in rejoin. - public bool CheckUserOnJoin { get; private set; } - #endif - - - /// Creates a Room (representation) with given name and properties and the "listing options" as provided by parameters. - /// Name of the room (can be null until it's actually created on server). - /// Room options. - public Room(string roomName, RoomOptions options, bool isOffline = false) : base(roomName, options != null ? options.CustomRoomProperties : null) - { - // base() sets name and (custom)properties. here we set "well known" properties - if (options != null) - { - this.isVisible = options.IsVisible; - this.isOpen = options.IsOpen; - this.maxPlayers = options.MaxPlayers; - this.propertiesListedInLobby = options.CustomRoomPropertiesForLobby; - //this.playerTtl = options.PlayerTtl; // set via well known properties - //this.emptyRoomTtl = options.EmptyRoomTtl; // set via well known properties - } - - this.isOffline = isOffline; - } - - - /// Read (received) room option flags into related bool parameters. - /// This is for internal use. The operation response for join and create room operations is read this way. - /// - internal void InternalCacheRoomFlags(int roomFlags) - { - this.BroadcastPropertiesChangeToAll = (roomFlags & (int)RoomOptionBit.BroadcastPropsChangeToAll) != 0; - this.SuppressRoomEvents = (roomFlags & (int)RoomOptionBit.SuppressRoomEvents) != 0; - this.SuppressPlayerInfo = (roomFlags & (int)RoomOptionBit.SuppressPlayerInfo) != 0; - this.PublishUserId = (roomFlags & (int)RoomOptionBit.PublishUserId) != 0; - this.DeleteNullProperties = (roomFlags & (int)RoomOptionBit.DeleteNullProps) != 0; - #if SERVERSDK - this.CheckUserOnJoin = (roomFlags & (int)RoomOptionBit.CheckUserOnJoin) != 0; - #endif - this.autoCleanUp = (roomFlags & (int)RoomOptionBit.DeleteCacheOnLeave) != 0; - } - - protected internal override void InternalCacheProperties(Hashtable propertiesToCache) - { - int oldMasterId = this.masterClientId; - - base.InternalCacheProperties(propertiesToCache); // important: updating the properties fields has no way to do callbacks on change - - if (oldMasterId != 0 && this.masterClientId != oldMasterId) - { - this.LoadBalancingClient.InRoomCallbackTargets.OnMasterClientSwitched(this.GetPlayer(this.masterClientId)); - } - } - - /// - /// Updates and synchronizes this Room's Custom Properties. Optionally, expectedProperties can be provided as condition. - /// - /// - /// Custom Properties are a set of string keys and arbitrary values which is synchronized - /// for the players in a Room. They are available when the client enters the room, as - /// they are in the response of OpJoin and OpCreate. - /// - /// Custom Properties either relate to the (current) Room or a Player (in that Room). - /// - /// Both classes locally cache the current key/values and make them available as - /// property: CustomProperties. This is provided only to read them. - /// You must use the method SetCustomProperties to set/modify them. - /// - /// Any client can set any Custom Properties anytime (when in a room). - /// It's up to the game logic to organize how they are best used. - /// - /// You should call SetCustomProperties only with key/values that are new or changed. This reduces - /// traffic and performance. - /// - /// Unless you define some expectedProperties, setting key/values is always permitted. - /// In this case, the property-setting client will not receive the new values from the server but - /// instead update its local cache in SetCustomProperties. - /// - /// If you define expectedProperties, the server will skip updates if the server property-cache - /// does not contain all expectedProperties with the same values. - /// In this case, the property-setting client will get an update from the server and update it's - /// cached key/values at about the same time as everyone else. - /// - /// The benefit of using expectedProperties can be only one client successfully sets a key from - /// one known value to another. - /// As example: Store who owns an item in a Custom Property "ownedBy". It's 0 initally. - /// When multiple players reach the item, they all attempt to change "ownedBy" from 0 to their - /// actorNumber. If you use expectedProperties {"ownedBy", 0} as condition, the first player to - /// take the item will have it (and the others fail to set the ownership). - /// - /// Properties get saved with the game state for Turnbased games (which use IsPersistent = true). - /// - /// Hashtable of Custom Properties that changes. - /// Provide some keys/values to use as condition for setting the new values. Client must be in room. - /// Defines if this SetCustomProperties-operation gets forwarded to your WebHooks. Client must be in room. - /// - /// False if propertiesToSet is null or empty or have zero string keys. - /// True in offline mode even if expectedProperties or webFlags are used. - /// Otherwise, returns if this operation could be sent to the server. - /// - public virtual bool SetCustomProperties(Hashtable propertiesToSet, Hashtable expectedProperties = null, WebFlags webFlags = null) - { - if (propertiesToSet == null || propertiesToSet.Count == 0) - { - return false; - } - Hashtable customProps = propertiesToSet.StripToStringKeys() as Hashtable; - - if (this.isOffline) - { - if (customProps.Count == 0) - { - return false; - } - // Merge and delete values. - this.CustomProperties.Merge(customProps); - this.CustomProperties.StripKeysWithNullValues(); - - // invoking callbacks - this.LoadBalancingClient.InRoomCallbackTargets.OnRoomPropertiesUpdate(propertiesToSet); - - } - else - { - // send (sync) these new values if in online room - return this.LoadBalancingClient.OpSetPropertiesOfRoom(customProps, expectedProperties, webFlags); - } - - return true; - } - - /// - /// Enables you to define the properties available in the lobby if not all properties are needed to pick a room. - /// - /// - /// Limit the amount of properties sent to users in the lobby to improve speed and stability. - /// - /// An array of custom room property names to forward to the lobby. - /// If the operation could be sent to the server. - public bool SetPropertiesListedInLobby(string[] lobbyProps) - { - if (this.isOffline) - { - return false; - } - Hashtable customProps = new Hashtable(); - customProps[GamePropertyKey.PropsListedInLobby] = lobbyProps; - return this.LoadBalancingClient.OpSetPropertiesOfRoom(customProps); - } - - - /// - /// Removes a player from this room's Players Dictionary. - /// This is internally used by the LoadBalancing API. There is usually no need to remove players yourself. - /// This is not a way to "kick" players. - /// - protected internal virtual void RemovePlayer(Player player) - { - this.Players.Remove(player.ActorNumber); - player.RoomReference = null; - } - - /// - /// Removes a player from this room's Players Dictionary. - /// - protected internal virtual void RemovePlayer(int id) - { - this.RemovePlayer(this.GetPlayer(id)); - } - - /// - /// Asks the server to assign another player as Master Client of your current room. - /// - /// - /// RaiseEvent has the option to send messages only to the Master Client of a room. - /// SetMasterClient affects which client gets those messages. - /// - /// This method calls an operation on the server to set a new Master Client, which takes a roundtrip. - /// In case of success, this client and the others get the new Master Client from the server. - /// - /// SetMasterClient tells the server which current Master Client should be replaced with the new one. - /// It will fail, if anything switches the Master Client moments earlier. There is no callback for this - /// error. All clients should get the new Master Client assigned by the server anyways. - /// - /// See also: MasterClientId - /// - /// The player to become the next Master Client. - /// False when this operation couldn't be done currently. Requires a v4 Photon Server. - public bool SetMasterClient(Player masterClientPlayer) - { - if (this.isOffline) - { - return false; - } - Hashtable newProps = new Hashtable() { { GamePropertyKey.MasterClientId, masterClientPlayer.ActorNumber } }; - Hashtable prevProps = new Hashtable() { { GamePropertyKey.MasterClientId, this.MasterClientId } }; - return this.LoadBalancingClient.OpSetPropertiesOfRoom(newProps, prevProps); - } - - /// - /// Checks if the player is in the room's list already and calls StorePlayer() if not. - /// - /// The new player - identified by ID. - /// False if the player could not be added (cause it was in the list already). - public virtual bool AddPlayer(Player player) - { - if (!this.Players.ContainsKey(player.ActorNumber)) - { - this.StorePlayer(player); - return true; - } - - return false; - } - - /// - /// Updates a player reference in the Players dictionary (no matter if it existed before or not). - /// - /// The Player instance to insert into the room. - public virtual Player StorePlayer(Player player) - { - this.Players[player.ActorNumber] = player; - player.RoomReference = this; - - // while initializing the room, the players are not guaranteed to be added in-order - if (this.MasterClientId == 0 || player.ActorNumber < this.MasterClientId) - { - this.masterClientId = player.ActorNumber; - } - - return player; - } - - /// - /// Tries to find the player with given actorNumber (a.k.a. ID). - /// Only useful when in a Room, as IDs are only valid per Room. - /// - /// ID to look for. - /// The player with the ID or null. - public virtual Player GetPlayer(int id) - { - Player result = null; - this.Players.TryGetValue(id, out result); - - return result; - } - - /// - /// Attempts to remove all current expected users from the server's Slot Reservation list. - /// - /// - /// Note that this operation can conflict with new/other users joining. They might be - /// adding users to the list of expected users before or after this client called ClearExpectedUsers. - /// - /// This room's expectedUsers value will update, when the server sends a successful update. - /// - /// Internals: This methods wraps up setting the ExpectedUsers property of a room. - /// - /// If the operation could be sent to the server. - public bool ClearExpectedUsers() - { - if (this.isOffline) - { - return false; - } - Hashtable props = new Hashtable(); - props[GamePropertyKey.ExpectedUsers] = new string[0]; - Hashtable expected = new Hashtable(); - expected[GamePropertyKey.ExpectedUsers] = this.ExpectedUsers; - return this.LoadBalancingClient.OpSetPropertiesOfRoom(props, expected); - } - - - /// Returns a summary of this Room instance as string. - /// Summary of this Room instance. - public override string ToString() - { - return string.Format("Room: '{0}' {1},{2} {4}/{3} players.", this.name, this.isVisible ? "visible" : "hidden", this.isOpen ? "open" : "closed", this.maxPlayers, this.PlayerCount); - } - - /// Returns a summary of this Room instance as longer string, including Custom Properties. - /// Summary of this Room instance. - public new string ToStringFull() - { - return string.Format("Room: '{0}' {1},{2} {4}/{3} players.\ncustomProps: {5}", this.name, this.isVisible ? "visible" : "hidden", this.isOpen ? "open" : "closed", this.maxPlayers, this.PlayerCount, this.CustomProperties.ToStringFull()); - } - } -} \ No newline at end of file diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Room.cs.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Room.cs.meta deleted file mode 100644 index acd92f81e..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Room.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b2d66ff82bb37f349b5645bcce4eb891 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/RoomInfo.cs b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/RoomInfo.cs deleted file mode 100644 index 6d7754526..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/RoomInfo.cs +++ /dev/null @@ -1,274 +0,0 @@ -// ---------------------------------------------------------------------------- -// -// Loadbalancing Framework for Photon - Copyright (C) 2018 Exit Games GmbH -// -// -// This class resembles info about available rooms, as sent by the Master -// server's lobby. Consider all values as readonly. -// -// developer@photonengine.com -// ---------------------------------------------------------------------------- - -#if UNITY_4_7 || UNITY_5 || UNITY_5_3_OR_NEWER -#define SUPPORTED_UNITY -#endif - - -namespace Photon.Realtime -{ - using System.Collections; - using ExitGames.Client.Photon; - - #if SUPPORTED_UNITY || NETFX_CORE - using Hashtable = ExitGames.Client.Photon.Hashtable; - using SupportClass = ExitGames.Client.Photon.SupportClass; - #endif - - - /// - /// A simplified room with just the info required to list and join, used for the room listing in the lobby. - /// The properties are not settable (IsOpen, MaxPlayers, etc). - /// - /// - /// This class resembles info about available rooms, as sent by the Master server's lobby. - /// Consider all values as readonly. None are synced (only updated by events by server). - /// - public class RoomInfo - { - /// Used in lobby, to mark rooms that are no longer listed (for being full, closed or hidden). - public bool RemovedFromList; - - /// Backing field for property. - private Hashtable customProperties = new Hashtable(); - - /// Backing field for property. - protected byte maxPlayers = 0; - - /// Backing field for property. - protected int emptyRoomTtl = 0; - - /// Backing field for property. - protected int playerTtl = 0; - - /// Backing field for property. - protected string[] expectedUsers; - - /// Backing field for property. - protected bool isOpen = true; - - /// Backing field for property. - protected bool isVisible = true; - - /// Backing field for property. False unless the GameProperty is set to true (else it's not sent). - protected bool autoCleanUp = true; - - /// Backing field for property. - protected string name; - - /// Backing field for master client id (actorNumber). defined by server in room props and ev leave. - public int masterClientId; - - /// Backing field for property. - protected string[] propertiesListedInLobby; - - /// Read-only "cache" of custom properties of a room. Set via Room.SetCustomProperties (not available for RoomInfo class!). - /// All keys are string-typed and the values depend on the game/application. - /// - public Hashtable CustomProperties - { - get - { - return this.customProperties; - } - } - - /// The name of a room. Unique identifier for a room/match (per AppId + game-Version). - public string Name - { - get - { - return this.name; - } - } - - /// - /// Count of players currently in room. This property is overwritten by the Room class (used when you're in a Room). - /// - public int PlayerCount { get; private set; } - - /// - /// The limit of players for this room. This property is shown in lobby, too. - /// If the room is full (players count == maxplayers), joining this room will fail. - /// - /// - /// As part of RoomInfo this can't be set. - /// As part of a Room (which the player joined), the setter will update the server and all clients. - /// - public byte MaxPlayers - { - get - { - return this.maxPlayers; - } - } - - /// - /// Defines if the room can be joined. - /// This does not affect listing in a lobby but joining the room will fail if not open. - /// If not open, the room is excluded from random matchmaking. - /// Due to racing conditions, found matches might become closed even while you join them. - /// Simply re-connect to master and find another. - /// Use property "IsVisible" to not list the room. - /// - /// - /// As part of RoomInfo this can't be set. - /// As part of a Room (which the player joined), the setter will update the server and all clients. - /// - public bool IsOpen - { - get - { - return this.isOpen; - } - } - - /// - /// Defines if the room is listed in its lobby. - /// Rooms can be created invisible, or changed to invisible. - /// To change if a room can be joined, use property: open. - /// - /// - /// As part of RoomInfo this can't be set. - /// As part of a Room (which the player joined), the setter will update the server and all clients. - /// - public bool IsVisible - { - get - { - return this.isVisible; - } - } - - /// - /// Constructs a RoomInfo to be used in room listings in lobby. - /// - /// Name of the room and unique ID at the same time. - /// Properties for this room. - protected internal RoomInfo(string roomName, Hashtable roomProperties) - { - this.InternalCacheProperties(roomProperties); - - this.name = roomName; - } - - /// - /// Makes RoomInfo comparable (by name). - /// - public override bool Equals(object other) - { - RoomInfo otherRoomInfo = other as RoomInfo; - return (otherRoomInfo != null && this.Name.Equals(otherRoomInfo.name)); - } - - /// - /// Accompanies Equals, using the name's HashCode as return. - /// - /// - public override int GetHashCode() - { - return this.name.GetHashCode(); - } - - - /// Returns most interesting room values as string. - /// Summary of this RoomInfo instance. - public override string ToString() - { - return string.Format("Room: '{0}' {1},{2} {4}/{3} players.", this.name, this.isVisible ? "visible" : "hidden", this.isOpen ? "open" : "closed", this.maxPlayers, this.PlayerCount); - } - - /// Returns most interesting room values as string, including custom properties. - /// Summary of this RoomInfo instance. - public string ToStringFull() - { - return string.Format("Room: '{0}' {1},{2} {4}/{3} players.\ncustomProps: {5}", this.name, this.isVisible ? "visible" : "hidden", this.isOpen ? "open" : "closed", this.maxPlayers, this.PlayerCount, this.customProperties.ToStringFull()); - } - - /// Copies "well known" properties to fields (IsVisible, etc) and caches the custom properties (string-keys only) in a local hashtable. - /// New or updated properties to store in this RoomInfo. - protected internal virtual void InternalCacheProperties(Hashtable propertiesToCache) - { - if (propertiesToCache == null || propertiesToCache.Count == 0 || this.customProperties.Equals(propertiesToCache)) - { - return; - } - - // check of this game was removed from the list. in that case, we don't - // need to read any further properties - // list updates will remove this game from the game listing - if (propertiesToCache.ContainsKey(GamePropertyKey.Removed)) - { - this.RemovedFromList = (bool)propertiesToCache[GamePropertyKey.Removed]; - if (this.RemovedFromList) - { - return; - } - } - - // fetch the "well known" properties of the room, if available - if (propertiesToCache.ContainsKey(GamePropertyKey.MaxPlayers)) - { - this.maxPlayers = (byte)propertiesToCache[GamePropertyKey.MaxPlayers]; - } - - if (propertiesToCache.ContainsKey(GamePropertyKey.IsOpen)) - { - this.isOpen = (bool)propertiesToCache[GamePropertyKey.IsOpen]; - } - - if (propertiesToCache.ContainsKey(GamePropertyKey.IsVisible)) - { - this.isVisible = (bool)propertiesToCache[GamePropertyKey.IsVisible]; - } - - if (propertiesToCache.ContainsKey(GamePropertyKey.PlayerCount)) - { - this.PlayerCount = (int)((byte)propertiesToCache[GamePropertyKey.PlayerCount]); - } - - if (propertiesToCache.ContainsKey(GamePropertyKey.CleanupCacheOnLeave)) - { - this.autoCleanUp = (bool)propertiesToCache[GamePropertyKey.CleanupCacheOnLeave]; - } - - if (propertiesToCache.ContainsKey(GamePropertyKey.MasterClientId)) - { - this.masterClientId = (int)propertiesToCache[GamePropertyKey.MasterClientId]; - } - - if (propertiesToCache.ContainsKey(GamePropertyKey.PropsListedInLobby)) - { - this.propertiesListedInLobby = propertiesToCache[GamePropertyKey.PropsListedInLobby] as string[]; - } - - if (propertiesToCache.ContainsKey((byte)GamePropertyKey.ExpectedUsers)) - { - this.expectedUsers = (string[])propertiesToCache[GamePropertyKey.ExpectedUsers]; - } - - if (propertiesToCache.ContainsKey((byte)GamePropertyKey.EmptyRoomTtl)) - { - this.emptyRoomTtl = (int)propertiesToCache[GamePropertyKey.EmptyRoomTtl]; - } - - if (propertiesToCache.ContainsKey((byte)GamePropertyKey.PlayerTtl)) - { - this.playerTtl = (int)propertiesToCache[GamePropertyKey.PlayerTtl]; - } - - // merge the custom properties (from your application) to the cache (only string-typed keys will be kept) - this.customProperties.MergeStringKeys(propertiesToCache); - this.customProperties.StripKeysWithNullValues(); - } - } -} diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/RoomInfo.cs.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/RoomInfo.cs.meta deleted file mode 100644 index d36d39b94..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/RoomInfo.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 53796df8b15a3334b97c65bdc88532ca -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/SupportLogger.cs b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/SupportLogger.cs deleted file mode 100644 index b43186fcc..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/SupportLogger.cs +++ /dev/null @@ -1,412 +0,0 @@ -// ---------------------------------------------------------------------------- -// -// Loadbalancing Framework for Photon - Copyright (C) 2018 Exit Games GmbH -// -// -// Implements callbacks of the Realtime API to logs selected information -// for support cases. -// -// developer@photonengine.com -// ---------------------------------------------------------------------------- - - - -#if UNITY_4_7 || UNITY_5 || UNITY_5_3_OR_NEWER -#define SUPPORTED_UNITY -#endif - - -namespace Photon.Realtime -{ - using System.Text; - using System.Collections; - using System.Collections.Generic; - - using Stopwatch = System.Diagnostics.Stopwatch; - - using ExitGames.Client.Photon; - - #if SUPPORTED_UNITY - using UnityEngine; - #endif - - #if SUPPORTED_UNITY || NETFX_CORE - using Hashtable = ExitGames.Client.Photon.Hashtable; - using SupportClass = ExitGames.Client.Photon.SupportClass; - #endif - - /// - /// Helper class to debug log basic information about Photon client and vital traffic statistics. - /// - /// - /// Set SupportLogger.Client for this to work. - /// - #if SUPPORTED_UNITY - [DisallowMultipleComponent] - [AddComponentMenu("")] // hide from Unity Menus and searches - public class SupportLogger : MonoBehaviour, IConnectionCallbacks , IMatchmakingCallbacks , IInRoomCallbacks, ILobbyCallbacks, IErrorInfoCallback - #else - public class SupportLogger : IConnectionCallbacks, IInRoomCallbacks, IMatchmakingCallbacks , ILobbyCallbacks - #endif - { - /// - /// Toggle to enable or disable traffic statistics logging. - /// - public bool LogTrafficStats = true; - private bool loggedStillOfflineMessage; - - private LoadBalancingClient client; - - private Stopwatch startStopwatch; - - private int pingMax; - private int pingMin; - - /// - /// Photon client to log information and statistics from. - /// - public LoadBalancingClient Client - { - get { return this.client; } - set - { - if (this.client != value) - { - if (this.client != null) - { - this.client.RemoveCallbackTarget(this); - } - this.client = value; - if (this.client != null) - { - this.client.AddCallbackTarget(this); - } - } - } - } - - - #if SUPPORTED_UNITY - protected void Start() - { - this.LogBasics(); - - if (this.startStopwatch == null) - { - this.startStopwatch = new Stopwatch(); - this.startStopwatch.Start(); - } - } - - protected void OnDestroy() - { - this.Client = null; // will remove this SupportLogger as callback target - } - - protected void OnApplicationPause(bool pause) - { - Debug.Log(this.GetFormattedTimestamp() + " SupportLogger OnApplicationPause: " + pause + " connected: " + (this.client == null ? "no (client is null)" : this.client.IsConnected.ToString())); - } - - protected void OnApplicationQuit() - { - this.CancelInvoke(); - } - #endif - - public void StartLogStats() - { - #if SUPPORTED_UNITY - this.InvokeRepeating("LogStats", 10, 10); - #else - Debug.Log("Not implemented for non-Unity projects."); - #endif - } - - public void StopLogStats() - { - #if SUPPORTED_UNITY - this.CancelInvoke("LogStats"); - #else - Debug.Log("Not implemented for non-Unity projects."); - #endif - } - - private void StartTrackValues() - { - #if SUPPORTED_UNITY - this.InvokeRepeating("TrackValues", 0.5f, 0.5f); - #else - Debug.Log("Not implemented for non-Unity projects."); - #endif - } - - private void StopTrackValues() - { - #if SUPPORTED_UNITY - this.CancelInvoke("TrackValues"); - #else - Debug.Log("Not implemented for non-Unity projects."); - #endif - } - - private string GetFormattedTimestamp() - { - if (this.startStopwatch == null) - { - this.startStopwatch = new Stopwatch(); - this.startStopwatch.Start(); - } - return string.Format("[{0}.{1}]", this.startStopwatch.Elapsed.Seconds, this.startStopwatch.Elapsed.Milliseconds); - } - - - // called via InvokeRepeatedly - private void TrackValues() - { - if (this.client != null) - { - int currentRtt = this.client.LoadBalancingPeer.RoundTripTime; - if (currentRtt > this.pingMax) - { - this.pingMax = currentRtt; - } - if (currentRtt < this.pingMin) - { - this.pingMin = currentRtt; - } - } - } - - - /// - /// Debug logs vital traffic statistics about the attached Photon Client. - /// - public void LogStats() - { - if (this.client == null || this.client.State == ClientState.PeerCreated) - { - return; - } - - if (this.LogTrafficStats) - { - Debug.Log(this.GetFormattedTimestamp() + " SupportLogger " + this.client.LoadBalancingPeer.VitalStatsToString(false) + " Ping min/max: " + this.pingMin + "/" + this.pingMax); - } - } - - /// - /// Debug logs basic information (AppId, AppVersion, PeerID, Server address, Region) about the attached Photon Client. - /// - private void LogBasics() - { - if (this.client != null) - { - List buildProperties = new List(10); - #if SUPPORTED_UNITY - buildProperties.Add(Application.unityVersion); - buildProperties.Add(Application.platform.ToString()); - #endif - #if ENABLE_IL2CPP - buildProperties.Add("ENABLE_IL2CPP"); - #endif - #if ENABLE_MONO - buildProperties.Add("ENABLE_MONO"); - #endif - #if DEBUG - buildProperties.Add("DEBUG"); - #endif - #if MASTER - buildProperties.Add("MASTER"); - #endif - #if NET_4_6 - buildProperties.Add("NET_4_6"); - #endif - #if NET_STANDARD_2_0 - buildProperties.Add("NET_STANDARD_2_0"); - #endif - #if NETFX_CORE - buildProperties.Add("NETFX_CORE"); - #endif - #if NET_LEGACY - buildProperties.Add("NET_LEGACY"); - #endif - #if UNITY_64 - buildProperties.Add("UNITY_64"); - #endif - - - StringBuilder sb = new StringBuilder(); - - string appIdShort = string.IsNullOrEmpty(this.client.AppId) || this.client.AppId.Length < 8 ? this.client.AppId : string.Concat(this.client.AppId.Substring(0, 8), "***"); - - sb.AppendFormat("{0} SupportLogger Info: ", this.GetFormattedTimestamp()); - sb.AppendFormat("AppID: \"{0}\" AppVersion: \"{1}\" Client: v{2} Build: {3} ", appIdShort, this.client.AppVersion, this.client.LoadBalancingPeer.ClientVersion, string.Join(", ", buildProperties.ToArray())); - if (this.client != null && this.client.LoadBalancingPeer != null && this.client.LoadBalancingPeer.SocketImplementation != null) - { - sb.AppendFormat("Socket: {0} ", this.client.LoadBalancingPeer.SocketImplementation.Name); - } - - sb.AppendFormat("UserId: \"{0}\" AuthType: {1} AuthMode: {2} {3} ", this.client.UserId, (this.client.AuthValues != null) ? this.client.AuthValues.AuthType.ToString() : "N/A", this.client.AuthMode, this.client.EncryptionMode); - - sb.AppendFormat("State: {0} ", this.client.State); - sb.AppendFormat("PeerID: {0} ", this.client.LoadBalancingPeer.PeerID); - sb.AppendFormat("NameServer: {0} Current Server: {1} IP: {2} Region: {3} ", this.client.NameServerHost, this.client.CurrentServerAddress, this.client.LoadBalancingPeer.ServerIpAddress, this.client.CloudRegion); - - Debug.LogWarning(sb.ToString()); - } - } - - - public void OnConnected() - { - Debug.Log(this.GetFormattedTimestamp() + " SupportLogger OnConnected()."); - this.pingMax = 0; - this.pingMin = this.client.LoadBalancingPeer.RoundTripTime; - this.LogBasics(); - - if (this.LogTrafficStats) - { - this.client.LoadBalancingPeer.TrafficStatsEnabled = false; - this.client.LoadBalancingPeer.TrafficStatsEnabled = true; - this.StartLogStats(); - } - - this.StartTrackValues(); - } - - public void OnConnectedToMaster() - { - Debug.Log(this.GetFormattedTimestamp() + " SupportLogger OnConnectedToMaster()."); - } - - public void OnFriendListUpdate(List friendList) - { - Debug.Log(this.GetFormattedTimestamp() + " SupportLogger OnFriendListUpdate(friendList)."); - } - - public void OnJoinedLobby() - { - Debug.Log(this.GetFormattedTimestamp() + " SupportLogger OnJoinedLobby(" + this.client.CurrentLobby + ")."); - } - - public void OnLeftLobby() - { - Debug.Log(this.GetFormattedTimestamp() + " SupportLogger OnLeftLobby()."); - } - - public void OnCreateRoomFailed(short returnCode, string message) - { - Debug.Log(this.GetFormattedTimestamp() + " SupportLogger OnCreateRoomFailed(" + returnCode+","+message+")."); - } - - public void OnJoinedRoom() - { - Debug.Log(this.GetFormattedTimestamp() + " SupportLogger OnJoinedRoom(" + this.client.CurrentRoom + "). " + this.client.CurrentLobby + " GameServer:" + this.client.GameServerAddress); - } - - public void OnJoinRoomFailed(short returnCode, string message) - { - Debug.Log(this.GetFormattedTimestamp() + " SupportLogger OnJoinRoomFailed(" + returnCode+","+message+")."); - } - - public void OnJoinRandomFailed(short returnCode, string message) - { - Debug.Log(this.GetFormattedTimestamp() + " SupportLogger OnJoinRandomFailed(" + returnCode+","+message+")."); - } - - public void OnCreatedRoom() - { - Debug.Log(this.GetFormattedTimestamp() + " SupportLogger OnCreatedRoom(" + this.client.CurrentRoom + "). " + this.client.CurrentLobby + " GameServer:" + this.client.GameServerAddress); - } - - public void OnLeftRoom() - { - Debug.Log(this.GetFormattedTimestamp() + " SupportLogger OnLeftRoom()."); - } - - public void OnDisconnected(DisconnectCause cause) - { - this.StopLogStats(); - this.StopTrackValues(); - - Debug.Log(this.GetFormattedTimestamp() + " SupportLogger OnDisconnected(" + cause + ")."); - this.LogBasics(); - this.LogStats(); - } - - public void OnRegionListReceived(RegionHandler regionHandler) - { - Debug.Log(this.GetFormattedTimestamp() + " SupportLogger OnRegionListReceived(regionHandler)."); - } - - public void OnRoomListUpdate(List roomList) - { - Debug.Log(this.GetFormattedTimestamp() + " SupportLogger OnRoomListUpdate(roomList). roomList.Count: " + roomList.Count); - } - - public void OnPlayerEnteredRoom(Player newPlayer) - { - Debug.Log(this.GetFormattedTimestamp() + " SupportLogger OnPlayerEnteredRoom(" + newPlayer+")."); - } - - public void OnPlayerLeftRoom(Player otherPlayer) - { - Debug.Log(this.GetFormattedTimestamp() + " SupportLogger OnPlayerLeftRoom(" + otherPlayer+")."); - } - - public void OnRoomPropertiesUpdate(Hashtable propertiesThatChanged) - { - Debug.Log(this.GetFormattedTimestamp() + " SupportLogger OnRoomPropertiesUpdate(propertiesThatChanged)."); - } - - public void OnPlayerPropertiesUpdate(Player targetPlayer, Hashtable changedProps) - { - Debug.Log(this.GetFormattedTimestamp() + " SupportLogger OnPlayerPropertiesUpdate(targetPlayer,changedProps)."); - } - - public void OnMasterClientSwitched(Player newMasterClient) - { - Debug.Log(this.GetFormattedTimestamp() + " SupportLogger OnMasterClientSwitched(" + newMasterClient+")."); - } - - public void OnCustomAuthenticationResponse(Dictionary data) - { - Debug.Log(this.GetFormattedTimestamp() + " SupportLogger OnCustomAuthenticationResponse(" + data.ToStringFull()+")."); - } - - public void OnCustomAuthenticationFailed (string debugMessage) - { - Debug.Log(this.GetFormattedTimestamp() + " SupportLogger OnCustomAuthenticationFailed(" + debugMessage+")."); - } - - public void OnLobbyStatisticsUpdate(List lobbyStatistics) - { - Debug.Log(this.GetFormattedTimestamp() + " SupportLogger OnLobbyStatisticsUpdate(lobbyStatistics)."); - } - - - #if !SUPPORTED_UNITY - private static class Debug - { - public static void Log(string msg) - { - System.Diagnostics.Debug.WriteLine(msg); - } - public static void LogWarning(string msg) - { - System.Diagnostics.Debug.WriteLine(msg); - } - public static void LogError(string msg) - { - System.Diagnostics.Debug.WriteLine(msg); - } - } - #endif - - public void OnErrorInfo(ErrorInfo errorInfo) - { - Debug.LogError(errorInfo.ToString()); - } - } -} \ No newline at end of file diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/SupportLogger.cs.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/SupportLogger.cs.meta deleted file mode 100644 index af0bc0448..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/SupportLogger.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e1cac9bea9852d243a38d475623ed5ef -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity.meta deleted file mode 100644 index ac385b848..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 0f144385262aa434da420ec5bff953e8 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor.meta deleted file mode 100644 index 4d10118c9..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: a02814c0303a60f488813e6111993aaa -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/AccountService.cs b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/AccountService.cs deleted file mode 100644 index 958454ede..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/AccountService.cs +++ /dev/null @@ -1,260 +0,0 @@ -// ---------------------------------------------------------------------------- -// -// Photon Cloud Account Service - Copyright (C) 2012 Exit Games GmbH -// -// -// Provides methods to register a new user-account for the Photon Cloud and -// get the resulting appId. -// -// developer@exitgames.com -// ---------------------------------------------------------------------------- - -#if UNITY_2017_4_OR_NEWER -#define SUPPORTED_UNITY -#endif - - -#if UNITY_EDITOR - -namespace Photon.Realtime -{ - using System; - using UnityEngine; - using System.Collections.Generic; - using System.Text.RegularExpressions; - using ExitGames.Client.Photon; - - - /// - /// Creates a instance of the Account Service to register Photon Cloud accounts. - /// - public class AccountService - { - private const string ServiceUrl = "https://partner.photonengine.com/api/{0}/User/RegisterEx"; - - private readonly Dictionary RequestHeaders = new Dictionary - { - { "Content-Type", "application/json" }, - { "x-functions-key", "" } - }; - - private const string DefaultContext = "Unity"; - - private const string DefaultToken = "VQ920wVUieLHT9c3v1ZCbytaLXpXbktUztKb3iYLCdiRKjUagcl6eg=="; - - /// - /// third parties custom context, if null, defaults to DefaultContext property value - /// - public string CustomContext = null; - - /// - /// third parties custom token. If null, defaults to DefaultToken property value - /// - public string CustomToken = null; - - /// - /// If this AccountService instance is currently waiting for a response. While pending, RegisterByEmail is blocked. - /// - public bool RequestPendingResult = false; - - /// - /// Attempts to create a Photon Cloud Account asynchronously. Blocked while RequestPendingResult is true. - /// - /// - /// Once your callback is called, check ReturnCode, Message and AppId to get the result of this attempt. - /// - /// Email of the account. - /// Defines which type of Photon-service is being requested. - /// Called when the result is available. - /// Called when the request failed. - public bool RegisterByEmail(string email, List serviceTypes, Action callback = null, Action errorCallback = null) - { - if (this.RequestPendingResult) - { - Debug.LogError("Registration request pending result. Not sending another."); - return false; - } - - if (!IsValidEmail(email)) - { - Debug.LogErrorFormat("Email \"{0}\" is not valid", email); - return false; - } - - string serviceTypeString = GetServiceTypesFromList(serviceTypes); - if (string.IsNullOrEmpty(serviceTypeString)) - { - Debug.LogError("serviceTypes string is null or empty"); - return false; - } - - string fullUrl = GetUrlWithQueryStringEscaped(email, serviceTypeString); - - RequestHeaders["x-functions-key"] = string.IsNullOrEmpty(CustomToken) ? DefaultToken : CustomToken; - - - this.RequestPendingResult = true; - - PhotonEditorUtils.StartCoroutine( - PhotonEditorUtils.HttpPost(fullUrl, - RequestHeaders, - null, - s => - { - this.RequestPendingResult = false; - //Debug.LogWarningFormat("received response {0}", s); - if (string.IsNullOrEmpty(s)) - { - if (errorCallback != null) - { - errorCallback("Server's response was empty. Please register through account website during this service interruption."); - } - } - else - { - AccountServiceResponse ase = this.ParseResult(s); - if (ase == null) - { - if (errorCallback != null) - { - errorCallback("Error parsing registration response. Please try registering from account website"); - } - } - else if (callback != null) - { - callback(ase); - } - } - }, - e => - { - this.RequestPendingResult = false; - if (errorCallback != null) - { - errorCallback(e); - } - }) - ); - return true; - } - - - private string GetUrlWithQueryStringEscaped(string email, string serviceTypes) - { - string emailEscaped = UnityEngine.Networking.UnityWebRequest.EscapeURL(email); - string st = UnityEngine.Networking.UnityWebRequest.EscapeURL(serviceTypes); - string uv = UnityEngine.Networking.UnityWebRequest.EscapeURL(Application.unityVersion); - string av = UnityEngine.Networking.UnityWebRequest.EscapeURL(new PhotonPeer(ConnectionProtocol.Udp).ClientVersion); - string serviceUrl = string.Format(ServiceUrl, string.IsNullOrEmpty(CustomContext) ? DefaultContext : CustomContext ); - - return string.Format("{0}?email={1}&st={2}&uv={3}&av={4}", serviceUrl, emailEscaped, st, uv, av); - } - - /// - /// Reads the Json response and applies it to local properties. - /// - /// - private AccountServiceResponse ParseResult(string result) - { - try - { - AccountServiceResponse res = JsonUtility.FromJson(result); - // Unity's JsonUtility does not support deserializing Dictionary, we manually parse it, dirty & ugly af, better then using a 3rd party lib - if (res.ReturnCode == AccountServiceReturnCodes.Success) - { - string[] parts = result.Split(new[] { "\"ApplicationIds\":{" }, StringSplitOptions.RemoveEmptyEntries); - parts = parts[1].Split('}'); - string applicationIds = parts[0]; - if (!string.IsNullOrEmpty(applicationIds)) - { - parts = applicationIds.Split(new[] { ',', '"', ':' }, StringSplitOptions.RemoveEmptyEntries); - res.ApplicationIds = new Dictionary(parts.Length / 2); - for (int i = 0; i < parts.Length; i = i + 2) - { - res.ApplicationIds.Add(parts[i], parts[i + 1]); - } - } - else - { - Debug.LogError("The server did not return any AppId, ApplicationIds was empty in the response."); - return null; - } - } - return res; - } - catch (Exception ex) // probably JSON parsing exception, check if returned string is valid JSON - { - Debug.LogException(ex); - return null; - } - } - - /// - /// Turns the list items to a comma separated string. Returns null if list is null or empty. - /// - /// List of service types. - /// Returns null if list is null or empty. - private static string GetServiceTypesFromList(List appTypes) - { - if (appTypes == null || appTypes.Count <= 0) - { - return null; - } - - string serviceTypes = ((int)appTypes[0]).ToString(); - for (int i = 1; i < appTypes.Count; i++) - { - int appType = (int)appTypes[i]; - serviceTypes = string.Format("{0},{1}", serviceTypes, appType); - } - - return serviceTypes; - } - - // RFC2822 compliant matching 99.9% of all email addresses in actual use today - // according to http://www.regular-expressions.info/email.html [22.02.2012] - private static Regex reg = new Regex("^((?>[a-zA-Z\\d!#$%&'*+\\-/=?^_{|}~]+\\x20*|\"((?=[\\x01-\\x7f])[^\"\\]|\\[\\x01-\\x7f])*\"\\x20*)*(?<))?((?!\\.)(?>\\.?[a-zA-Z\\d!#$%&'*+\\-/=?^_{|}~]+)+|\"((?=[\\x01-\\x7f])[^\"\\]|\\[\\x01-\\x7f])*\")@(((?!-)[a-zA-Z\\d\\-]+(?)$", - RegexOptions.CultureInvariant | RegexOptions.IgnoreCase); - public static bool IsValidEmail(string mailAddress) - { - if (string.IsNullOrEmpty(mailAddress)) - { - return false; - } - var result = reg.Match(mailAddress); - return result.Success; - } - } - - [Serializable] - public class AccountServiceResponse - { - public int ReturnCode; - public string Message; - public Dictionary ApplicationIds; // Unity's JsonUtility does not support deserializing Dictionary - } - - - public class AccountServiceReturnCodes - { - public static int Success = 0; - public static int EmailAlreadyRegistered = 8; - public static int InvalidParameters = 12; - } - - public enum ServiceTypes - { - Realtime = 0, - Turnbased = 1, - Chat = 2, - Voice = 3, - TrueSync = 4, - Pun = 5, - Thunder = 6, - Quantum = 7, - Fusion = 8, - Bolt = 20 - } -} - -#endif \ No newline at end of file diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/AccountService.cs.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/AccountService.cs.meta deleted file mode 100644 index a070b17dc..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/AccountService.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 166dfe22956ef0341b28e18d0499e363 -labels: -- ExitGames -- PUN -- Photon -- Networking -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/EditorIntegration.cs b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/EditorIntegration.cs deleted file mode 100644 index faa7c3216..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/EditorIntegration.cs +++ /dev/null @@ -1,134 +0,0 @@ -// ---------------------------------------------------------------------------- -// -// PhotonNetwork Framework for Unity - Copyright (C) 2018 Exit Games GmbH -// -// -// MenuItems and in-Editor scripts for PhotonNetwork. -// -// developer@exitgames.com -// ---------------------------------------------------------------------------- - -#if UNITY_2017_4_OR_NEWER -#define SUPPORTED_UNITY -#endif - - -#if !PHOTON_UNITY_NETWORKING && UNITY_EDITOR - -namespace Photon.Realtime -{ - using UnityEditor; - using UnityEditor.Compilation; - - - public class EditorIntegration - { - protected static string DocumentationLocation = "Assets/Photon/PhotonNetworking-Documentation.pdf"; - - protected static string UrlFreeLicense = "https://dashboard.photonengine.com/en-US/SelfHosted"; - - public const string UrlDevNet = "https://doc.photonengine.com/en-us/pun/v2"; - - protected static string UrlForum = "https://forum.photonengine.com"; - - protected static string UrlCompare = "https://doc.photonengine.com/en-us/realtime/current/getting-started/onpremise-or-saas"; - - protected static string UrlHowToSetup = "https://doc.photonengine.com/en-us/onpremise/current/getting-started/photon-server-in-5min"; - - protected static string UrlAppIDExplained = "https://doc.photonengine.com/en-us/realtime/current/getting-started/obtain-your-app-id"; - - public const string UrlCloudDashboard = "https://id.photonengine.com/en-US/account/signin?email="; - - public const string UrlPunSettings = "https://doc.photonengine.com/en-us/pun/v2/getting-started/initial-setup"; // the SeverSettings class has this url directly in it's HelpURL attribute. - - public const string UrlDiscordGeneral = "https://discord.gg/qP6XVe3XWK"; - - public const string UrlRealtimeDocsOnline = "https://doc.photonengine.com/en-us/realtime/"; - - - - [MenuItem("Window/Photon Realtime/Highlight Server Settings %#&p", false, 1)] - protected static void MenuItemHighlightSettings() - { - // Pings PhotonServerSettings and makes it selected (show in Inspector) - EditorGUIUtility.PingObject(PhotonAppSettings.Instance); - } - - - [UnityEditor.InitializeOnLoadMethod] - public static void InitializeOnLoadMethod() - { - //Debug.Log("InitializeOnLoadMethod()"); // DEBUG - - EditorApplication.delayCall += OnDelayCall; - } - - // used to register for various events (post-load) - private static void OnDelayCall() - { - //Debug.Log("OnDelayCall()");// DEBUG - - EditorApplication.playModeStateChanged += PlayModeStateChanged; - - CompilationPipeline.assemblyCompilationStarted -= OnCompileStarted; - CompilationPipeline.assemblyCompilationStarted += OnCompileStarted; - - - #if (UNITY_2018 || UNITY_2018_1_OR_NEWER) - EditorApplication.projectChanged -= OnProjectChanged; - EditorApplication.projectChanged += OnProjectChanged; - #else - EditorApplication.projectWindowChanged -= OnProjectChanged; - EditorApplication.projectWindowChanged += OnProjectChanged; - #endif - - OnProjectChanged(); // call this initially from here, as the project change events happened earlier (on start of the Editor) - } - - - // called in editor, opens wizard for initial setup, keeps scene PhotonViews up to date and closes connections when compiling (to avoid issues) - private static void OnProjectChanged() - { - //Debug.Log("OnProjectChanged()"); // DEBUG - - // Prevent issues with Unity Cloud Builds where ServerSettings are not found. - // Also, within the context of a Unity Cloud Build, ServerSettings is already present anyway. - #if UNITY_CLOUD_BUILD - return; - #endif - - // serverSetting is null when the file gets deleted. otherwise, the wizard should only run once and only if hosting option is not (yet) set - if (!PhotonAppSettings.Instance.DisableAutoOpenWizard) - { - PhotonAppSettings.Instance.DisableAutoOpenWizard = true; - - // Marks settings object as dirty, so it gets saved. - // unity 5.3 changes the usecase for SetDirty(). but here we don't modify a scene object! so it's ok to use - EditorUtility.SetDirty(PhotonAppSettings.Instance); - - Photon.Realtime.Editor.WizardWindow.Open(); // would be nice to jump directly to the registration - } - } - - private static void OnCompileStarted(string obj) - { - // Photon should disconnect on compile - } - - - private static void PlayModeStateChanged(PlayModeStateChange state) - { - if (EditorApplication.isPlaying || !EditorApplication.isPlayingOrWillChangePlaymode) - { - return; - } - - if (string.IsNullOrEmpty(PhotonAppSettings.Instance.AppSettings.AppIdRealtime) && !PhotonAppSettings.Instance.AppSettings.IsMasterServerAddress) - { - // TODO: show a dialog or log a warning?! - //EditorUtility.DisplayDialog(CurrentLang.SetupWizardWarningTitle, CurrentLang.SetupWizardWarningMessage, CurrentLang.OkButton); - } - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/EditorIntegration.cs.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/EditorIntegration.cs.meta deleted file mode 100644 index 7fb0ae86c..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/EditorIntegration.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 2bcf91572f7932545a99a0ee58fde6e4 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/PhotonEditorUtils.cs b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/PhotonEditorUtils.cs deleted file mode 100644 index 2f4b3bf89..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/PhotonEditorUtils.cs +++ /dev/null @@ -1,316 +0,0 @@ -// ---------------------------------------------------------------------------- -// -// PhotonNetwork Framework for Unity - Copyright (C) 2018 Exit Games GmbH -// -// -// Unity Editor Utils -// -// developer@exitgames.com -// ---------------------------------------------------------------------------- - -#if UNITY_2017_4_OR_NEWER -#define SUPPORTED_UNITY -#endif - - -#if UNITY_EDITOR - -namespace Photon.Realtime -{ - using System; - using System.Collections.Generic; - using System.Linq; - - using UnityEditor; - using UnityEngine; - - using System.IO; - using System.Text; - using UnityEngine.Networking; - - - [InitializeOnLoad] - public static class PhotonEditorUtils - { - /// True if the ChatClient of the Photon Chat API is available. If so, the editor may (e.g.) show additional options in settings. - public static bool HasChat; - - /// True if the VoiceClient of the Photon Voice API is available. If so, the editor may (e.g.) show additional options in settings. - public static bool HasVoice; - - public static bool HasPun; - - /// True if the PhotonEditorUtils checked the available products / APIs. If so, the editor may (e.g.) show additional options in settings. - public static bool HasCheckedProducts; - - static PhotonEditorUtils() - { - HasVoice = Type.GetType("Photon.Voice.VoiceClient, Assembly-CSharp") != null || Type.GetType("Photon.Voice.VoiceClient, Assembly-CSharp-firstpass") != null || Type.GetType("Photon.Voice.VoiceClient, PhotonVoice.API") != null; - HasChat = Type.GetType("Photon.Chat.ChatClient, Assembly-CSharp") != null || Type.GetType("Photon.Chat.ChatClient, Assembly-CSharp-firstpass") != null || Type.GetType("Photon.Chat.ChatClient, PhotonChat") != null; - HasPun = Type.GetType("Photon.Pun.PhotonNetwork, Assembly-CSharp") != null || Type.GetType("Photon.Pun.PhotonNetwork, Assembly-CSharp-firstpass") != null || Type.GetType("Photon.Pun.PhotonNetwork, PhotonUnityNetworking") != null; - PhotonEditorUtils.HasCheckedProducts = true; - - if (EditorPrefs.HasKey("DisablePun") && EditorPrefs.GetBool("DisablePun")) - { - HasPun = false; - } - - if (HasPun) - { - // MOUNTING SYMBOLS - #if !PHOTON_UNITY_NETWORKING - AddScriptingDefineSymbolToAllBuildTargetGroups("PHOTON_UNITY_NETWORKING"); - #endif - - #if !PUN_2_0_OR_NEWER - AddScriptingDefineSymbolToAllBuildTargetGroups("PUN_2_0_OR_NEWER"); - #endif - - #if !PUN_2_OR_NEWER - AddScriptingDefineSymbolToAllBuildTargetGroups("PUN_2_OR_NEWER"); - #endif - - #if !PUN_2_19_OR_NEWER - AddScriptingDefineSymbolToAllBuildTargetGroups("PUN_2_19_OR_NEWER"); - #endif - } - } - - /// - /// Adds a given scripting define symbol to all build target groups - /// You can see all scripting define symbols ( not the internal ones, only the one for this project), in the PlayerSettings inspector - /// - /// Define symbol. - public static void AddScriptingDefineSymbolToAllBuildTargetGroups(string defineSymbol) - { - foreach (BuildTarget target in Enum.GetValues(typeof(BuildTarget))) - { - BuildTargetGroup group = BuildPipeline.GetBuildTargetGroup(target); - - if (group == BuildTargetGroup.Unknown) - { - continue; - } - - var defineSymbols = PlayerSettings.GetScriptingDefineSymbolsForGroup(group).Split(';').Select(d => d.Trim()).ToList(); - - if (!defineSymbols.Contains(defineSymbol)) - { - defineSymbols.Add(defineSymbol); - - try - { - PlayerSettings.SetScriptingDefineSymbolsForGroup(group, string.Join(";", defineSymbols.ToArray())); - } - catch (Exception e) - { - Debug.Log("Could not set Photon " + defineSymbol + " defines for build target: " + target + " group: " + group + " " + e); - } - } - } - } - - - /// - /// Removes PUN2's Script Define Symbols from project - /// - public static void CleanUpPunDefineSymbols() - { - foreach (BuildTarget target in Enum.GetValues(typeof(BuildTarget))) - { - BuildTargetGroup group = BuildPipeline.GetBuildTargetGroup(target); - - if (group == BuildTargetGroup.Unknown) - { - continue; - } - - var defineSymbols = PlayerSettings.GetScriptingDefineSymbolsForGroup(group) - .Split(';') - .Select(d => d.Trim()) - .ToList(); - - List newDefineSymbols = new List(); - foreach (var symbol in defineSymbols) - { - if ("PHOTON_UNITY_NETWORKING".Equals(symbol) || symbol.StartsWith("PUN_2_")) - { - continue; - } - - newDefineSymbols.Add(symbol); - } - - try - { - PlayerSettings.SetScriptingDefineSymbolsForGroup(group, string.Join(";", newDefineSymbols.ToArray())); - } - catch (Exception e) - { - Debug.LogErrorFormat("Could not set clean up PUN2's define symbols for build target: {0} group: {1}, {2}", target, group, e); - } - } - } - - - /// - /// Gets the parent directory of a path. Recursive Function, will return null if parentName not found - /// - /// The parent directory - /// Path. - /// Parent name. - public static string GetParent(string path, string parentName) - { - var dir = new DirectoryInfo(path); - - if (dir.Parent == null) - { - return null; - } - - if (string.IsNullOrEmpty(parentName)) - { - return dir.Parent.FullName; - } - - if (dir.Parent.Name == parentName) - { - return dir.Parent.FullName; - } - - return GetParent(dir.Parent.FullName, parentName); - } - - /// - /// Check if a GameObject is a prefab asset or part of a prefab asset, as opposed to an instance in the scene hierarchy - /// - /// true, if a prefab asset or part of it, false otherwise. - /// The GameObject to check - public static bool IsPrefab(GameObject go) - { - #if UNITY_2018_3_OR_NEWER - return UnityEditor.Experimental.SceneManagement.PrefabStageUtility.GetPrefabStage(go) != null || EditorUtility.IsPersistent(go); - #else - return EditorUtility.IsPersistent(go); - #endif - } - - //https://forum.unity.com/threads/using-unitywebrequest-in-editor-tools.397466/#post-4485181 - public static void StartCoroutine(System.Collections.IEnumerator update) - { - EditorApplication.CallbackFunction closureCallback = null; - - closureCallback = () => - { - try - { - if (update.MoveNext() == false) - { - EditorApplication.update -= closureCallback; - } - } - catch (Exception ex) - { - Debug.LogException(ex); - EditorApplication.update -= closureCallback; - } - }; - - EditorApplication.update += closureCallback; - } - - public static System.Collections.IEnumerator HttpPost(string url, Dictionary headers, byte[] payload, Action successCallback, Action errorCallback) - { - using (UnityWebRequest w = new UnityWebRequest(url, "POST")) - { - if (payload != null) - { - w.uploadHandler = new UploadHandlerRaw(payload); - } - w.downloadHandler = new DownloadHandlerBuffer(); - if (headers != null) - { - foreach (var header in headers) - { - w.SetRequestHeader(header.Key, header.Value); - } - } - - #if UNITY_2017_2_OR_NEWER - yield return w.SendWebRequest(); - #else - yield return w.Send(); - #endif - - while (w.isDone == false) - yield return null; - - #if UNITY_2017_1_OR_NEWER - if (w.isNetworkError || w.isHttpError) - #else - if (w.isError) - #endif - { - if (errorCallback != null) - { - errorCallback(w.error); - } - } - else - { - if (successCallback != null) - { - successCallback(w.downloadHandler.text); - } - } - } - } - /// - /// Creates a Foldout using a toggle with (GUIStyle)"Foldout") and a separate label. This is a workaround for 2019.3 foldout arrows not working. - /// - /// - /// - /// Returns the new isExpanded value. - public static bool Foldout(this SerializedProperty isExpanded, GUIContent label) - { - var rect = EditorGUILayout.GetControlRect(); - bool newvalue = EditorGUI.Toggle(new Rect(rect) { xMin = rect.xMin + 2 }, GUIContent.none, isExpanded.boolValue, (GUIStyle)"Foldout"); - EditorGUI.LabelField(new Rect(rect) { xMin = rect.xMin + 15 }, label); - if (newvalue != isExpanded.boolValue) - { - isExpanded.boolValue = newvalue; - isExpanded.serializedObject.ApplyModifiedProperties(); - } - return newvalue; - } - - /// - /// Creates a Foldout using a toggle with (GUIStyle)"Foldout") and a separate label. This is a workaround for 2019.3 foldout arrows not working. - /// - /// - /// - /// Returns the new isExpanded value. - public static bool Foldout(this bool isExpanded, GUIContent label) - { - var rect = EditorGUILayout.GetControlRect(); - bool newvalue = EditorGUI.Toggle(new Rect(rect) { xMin = rect.xMin + 2 }, GUIContent.none, isExpanded, (GUIStyle)"Foldout"); - EditorGUI.LabelField(new Rect(rect) { xMin = rect.xMin + 15 }, label); - return newvalue; - } - } - - - public class CleanUpDefinesOnPunDelete : UnityEditor.AssetModificationProcessor - { - public static AssetDeleteResult OnWillDeleteAsset(string assetPath, RemoveAssetOptions rao) - { - if ("Assets/Photon/PhotonUnityNetworking".Equals(assetPath)) - { - PhotonEditorUtils.CleanUpPunDefineSymbols(); - } - - return AssetDeleteResult.DidNotDelete; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/PhotonEditorUtils.cs.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/PhotonEditorUtils.cs.meta deleted file mode 100644 index 90d608f3d..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/PhotonEditorUtils.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 607340ca505d53d4f8e785423fac7964 -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard.meta deleted file mode 100644 index 834e27f2e..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 146bee4bff786a04e81b8db57abb30b2 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources.meta deleted file mode 100644 index 3e4d23184..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 54c89a32f2b7e446d8304af59f5f5f4c -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome.meta deleted file mode 100644 index e40dab80e..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: e5668a209dbc6e24a9fe3cc3633bd50b -folderAsset: yes -timeCreated: 1500450079 -licenseType: Pro -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/ATTRIBUTION.txt b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/ATTRIBUTION.txt deleted file mode 100644 index 55acb022c..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/ATTRIBUTION.txt +++ /dev/null @@ -1 +0,0 @@ -Icons by Fat Cow Hosting (http://www.fatcow.com/free-icons). Licensed under a Creative Commons Attribution 3.0 License. \ No newline at end of file diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/ATTRIBUTION.txt.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/ATTRIBUTION.txt.meta deleted file mode 100644 index 87545b4a4..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/ATTRIBUTION.txt.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 28883dc040320bb4ea69a449132b35d7 -TextScriptImporter: - userData: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/bugtracker.png b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/bugtracker.png deleted file mode 100644 index 100662380..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/bugtracker.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7b4e2c392a7a176d5fbba9cbd486d8c759b73a2bdb792be3fc4336ec05c1cf97 -size 2078 diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/bugtracker.png.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/bugtracker.png.meta deleted file mode 100644 index d44049540..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/bugtracker.png.meta +++ /dev/null @@ -1,96 +0,0 @@ -fileFormatVersion: 2 -guid: 1d949f6bc5812234bb28b6bd51e902f5 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 4 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: 1 - mipBias: -1 - wrapU: 1 - wrapV: 1 - wrapW: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - buildTarget: DefaultTexturePlatform - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - buildTarget: Standalone - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - buildTarget: Android - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/bullet_black.png b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/bullet_black.png deleted file mode 100644 index 9f0675281..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/bullet_black.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5595d1e9e2fdc21ed5e3b6fd853b90f2243ec20ab2a8f36144e462229d6b11c2 -size 770 diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/bullet_black.png.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/bullet_black.png.meta deleted file mode 100644 index 1a58767dc..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/bullet_black.png.meta +++ /dev/null @@ -1,96 +0,0 @@ -fileFormatVersion: 2 -guid: ca583a4b5a2b2452c80aa11e55f19346 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 4 - 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 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - buildTarget: DefaultTexturePlatform - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - buildTarget: Standalone - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - buildTarget: Android - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/bullet_down.png b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/bullet_down.png deleted file mode 100644 index 26b7531fd..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/bullet_down.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f4de2007cae88dae667b443d902cf48f6034fe9f6832ab64c3fe38069aa8c17d -size 1365 diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/bullet_down.png.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/bullet_down.png.meta deleted file mode 100644 index 4980cc1c9..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/bullet_down.png.meta +++ /dev/null @@ -1,86 +0,0 @@ -fileFormatVersion: 2 -guid: 06632fbfd33334c72a288bdbdf2922ea -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 4 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - buildTarget: DefaultTexturePlatform - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - buildTarget: Standalone - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/bullet_green.png b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/bullet_green.png deleted file mode 100644 index f13dc219f..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/bullet_green.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:81205056f1c5058baaae05773849111a957190e3950e06f596184a3a8677814e -size 740 diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/bullet_green.png.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/bullet_green.png.meta deleted file mode 100644 index 3f310a09f..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/bullet_green.png.meta +++ /dev/null @@ -1,96 +0,0 @@ -fileFormatVersion: 2 -guid: e12890dcb5a25439e8a36389cf70fce1 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 4 - 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 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - buildTarget: DefaultTexturePlatform - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - buildTarget: Standalone - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - buildTarget: Android - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/comments.png b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/comments.png deleted file mode 100644 index 97ba5385c..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/comments.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:70855a452325a9e521de58ebd9fe6613fcb94cf9ad41ae00215f99a8a28fb9a1 -size 1691 diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/comments.png.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/comments.png.meta deleted file mode 100644 index 9f743b93f..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/comments.png.meta +++ /dev/null @@ -1,86 +0,0 @@ -fileFormatVersion: 2 -guid: 0d548c93fd2fd490db38298610780b39 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 4 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: 1 - mipBias: -1 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - buildTarget: DefaultTexturePlatform - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - buildTarget: Standalone - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/community.png b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/community.png deleted file mode 100644 index e626181ea..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/community.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6d3c1acadb853147d30142a18b8b586a19a84f471916f110293f8a3053d63788 -size 1806 diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/community.png.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/community.png.meta deleted file mode 100644 index edcec5770..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/community.png.meta +++ /dev/null @@ -1,96 +0,0 @@ -fileFormatVersion: 2 -guid: fd7da1b41e02e2546a5b59597cbbedfd -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 4 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: 1 - mipBias: -1 - wrapU: 1 - wrapV: 1 - wrapW: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - buildTarget: DefaultTexturePlatform - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - buildTarget: Standalone - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - buildTarget: Android - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/documentation.png b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/documentation.png deleted file mode 100644 index 1aca45d70..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/documentation.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0999844297b0bfcac040020267fd8cd79e5b81dd30f38741d2c96130bfe99878 -size 1211 diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/documentation.png.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/documentation.png.meta deleted file mode 100644 index ff9fb03c6..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/documentation.png.meta +++ /dev/null @@ -1,96 +0,0 @@ -fileFormatVersion: 2 -guid: 7d6ce7da11bf9aa4f98abcc9eb237a08 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 4 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: 1 - mipBias: -1 - wrapU: 1 - wrapV: 1 - wrapW: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - buildTarget: DefaultTexturePlatform - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - buildTarget: Standalone - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - buildTarget: Android - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/information.png b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/information.png deleted file mode 100644 index 5561a9e5e..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/information.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bcf9b788408bd931205a5a69fa660d99326bcd5588753362d4e0e9f4a109526f -size 2112 diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/information.png.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/information.png.meta deleted file mode 100644 index 9a595c85b..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/information.png.meta +++ /dev/null @@ -1,96 +0,0 @@ -fileFormatVersion: 2 -guid: fe64035b49c4e4a078ee42b857ae1519 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 4 - 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 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - buildTarget: DefaultTexturePlatform - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - buildTarget: Standalone - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - buildTarget: Android - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/samples.png b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/samples.png deleted file mode 100644 index 6939e46a4..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/samples.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b7d0b0af9be18a867ef50590d91cf231408cf7d46ed3bb614d7761ef7c3ad1e2 -size 1655 diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/samples.png.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/samples.png.meta deleted file mode 100644 index 6339d26c4..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/icons_welcome/samples.png.meta +++ /dev/null @@ -1,96 +0,0 @@ -fileFormatVersion: 2 -guid: d2b478a89610eb748a4b0b8040f43a01 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 4 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: 1 - mipBias: -1 - wrapU: 1 - wrapV: 1 - wrapW: 1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - buildTarget: DefaultTexturePlatform - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - buildTarget: Standalone - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - buildTarget: Android - maxTextureSize: 32 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/photon-cloud-32-dark.png b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/photon-cloud-32-dark.png deleted file mode 100644 index 1095a3ae4..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/photon-cloud-32-dark.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e0e45d6babbc1ee3ad558624b73bd6c7688451235281f5141a1bf81af223dcb0 -size 2803 diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/photon-cloud-32-dark.png.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/photon-cloud-32-dark.png.meta deleted file mode 100644 index 3a1dae125..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/photon-cloud-32-dark.png.meta +++ /dev/null @@ -1,116 +0,0 @@ -fileFormatVersion: 2 -guid: 539ffdbefac7adf4f8fea83d804b72e8 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 4 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: 1 - mipBias: -1 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - buildTarget: Android - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - buildTarget: Windows Store Apps - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - buildTarget: WebGL - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/photon-cloud-32-light.png b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/photon-cloud-32-light.png deleted file mode 100644 index 470435880..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/photon-cloud-32-light.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8ff9c4c47abc9e4c8263f5793e79f77f72427c001cada163ee289faa03b69027 -size 2819 diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/photon-cloud-32-light.png.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/photon-cloud-32-light.png.meta deleted file mode 100644 index ca3d633a5..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/photon-cloud-32-light.png.meta +++ /dev/null @@ -1,116 +0,0 @@ -fileFormatVersion: 2 -guid: ff4b7aa5abc57594a9561e1970bbc080 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 4 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: 1 - mipBias: -1 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - buildTarget: Android - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - buildTarget: Windows Store Apps - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - buildTarget: WebGL - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/photon-wizard-dark.png b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/photon-wizard-dark.png deleted file mode 100644 index 0c8182794..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/photon-wizard-dark.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:747f694e620e2949a01d9835cdb636ee943dbea4f4049fe70fd0fe289e7274bb -size 6309 diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/photon-wizard-dark.png.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/photon-wizard-dark.png.meta deleted file mode 100644 index 4b7ecb1e7..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/photon-wizard-dark.png.meta +++ /dev/null @@ -1,116 +0,0 @@ -fileFormatVersion: 2 -guid: 8ee8e41ed502191469d77de0c677c69e -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 4 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: -1 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - buildTarget: Android - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - buildTarget: Windows Store Apps - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - buildTarget: WebGL - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/photon-wizard-light.png b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/photon-wizard-light.png deleted file mode 100644 index 8425a7f8f..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/photon-wizard-light.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:54583c0beaf1e967ef94faf76c79020b088f2ddc1e9440072fb3f2975998684b -size 9494 diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/photon-wizard-light.png.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/photon-wizard-light.png.meta deleted file mode 100644 index ae1486566..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/resources/photon-wizard-light.png.meta +++ /dev/null @@ -1,116 +0,0 @@ -fileFormatVersion: 2 -guid: 7a3990cd80582f3498fb51309f1d018c -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 4 - mipmaps: - mipMapMode: 0 - enableMipMap: 0 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: 1 - mipBias: -1 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - buildTarget: Android - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - buildTarget: Windows Store Apps - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - buildTarget: WebGL - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/scripts.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/scripts.meta deleted file mode 100644 index 6c25d7491..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/scripts.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 7ad635e5a535c4d9e837a2ea13e0b953 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/scripts/WizardWindow.cs b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/scripts/WizardWindow.cs deleted file mode 100644 index fa32fda89..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/scripts/WizardWindow.cs +++ /dev/null @@ -1,893 +0,0 @@ -// ---------------------------------------------------------------------------- -// -// PhotonNetwork Framework for Unity - Copyright (C) 2021 Exit Games GmbH -// -// -// MenuItems and in-Editor scripts for PhotonNetwork. -// -// developer@exitgames.com -// ---------------------------------------------------------------------------- - -#if UNITY_2017_4_OR_NEWER -#define SUPPORTED_UNITY -#endif - -#if !PHOTON_UNITY_NETWORKING && UNITY_EDITOR - -namespace Photon.Realtime.Editor -{ - using System; - using System.Collections.Generic; - using System.Diagnostics; - using UnityEditor; - using UnityEngine; - using EditorUtility = UnityEditor.EditorUtility; - using Event = UnityEngine.Event; - - [InitializeOnLoad] - public partial class WizardWindow : EditorWindow - { - // ------------- PRIVATE MEMBERS ------------------------------------------------------------------------------ - - private static readonly Stopwatch Watch = new Stopwatch(); - - private WizardStage currentStage = WizardStage.Intro; - private static bool? ready; // true after InitContent(), reset onDestroy, onEnable, etc. - private static float? firstCall; - - private static volatile bool requestingAppId = false; - private static string appIdOrEmail = ""; - - private static string FirstStartupKey - { - get { return "$Photon$First$Startup$Wizard"; } - } - - private static Vector2 windowSize; - private static Vector2 windowPosition = new Vector2(100, 100); - private Vector2 scrollPosition; - - private Func beforeNextCallback; - - private int buttonWidth; - private int navMenuWidth; - - private bool validReleaseParse = false; - private string releaseHistoryHeader; - private List releaseHistoryTextAdded; - private List releaseHistoryTextChanged; - private List releaseHistoryTextFixed; - private List releaseHistoryTextRemoved; - private List releaseHistoryTextInternal; - - // GUI - - // Textures - private Texture2D introIcon; - private Texture2D releaseIcon; - private Texture2D photonCloudIcon; - private Texture2D activeIcon; - private Texture2D inactiveIcon; - private Texture2D bugtrackerIcon; - private Texture2D discordIcon; - private Texture2D documentationIcon; - private Texture2D reviewIcon; - private Texture2D samplesIcon; - private Texture2D productLogo; - - // GUI Elements - private GUIContent bugtrackerHeader; - private GUIContent bugtrackerText; - private GUIContent discordHeader; - private GUIContent discordText; - private GUIContent documentationHeader; - private GUIContent documentationText; - private GUIContent reviewHeader; - private GUIContent reviewText; - private GUIContent stepHeaderIntro; - private GUIContent stepHeaderHistory; - private GUIContent stepHeaderPhoton; - private GUIContent stepHeaderSupport; - - // Styles - // -- Buttons - private GUIStyle minimalButtonStyle; - private GUIStyle simpleButtonStyle; - // -- Icons - private GUIStyle iconSectionStyle; - // -- Labels & Text - private GUIStyle titleLabelStyle; - private GUIStyle inputLabelStyle; - private GUIStyle stageLabelStyle; - private GUIStyle headerNavBarlabelStyle; - private GUIStyle textLabelStyle; - private GUIStyle centerInputTextStyle; - private GUIStyle introTextStyle; - // -- GUI Style - private GUIStyle stepBoxStyle; - - private AppSettings AppSettingsInstance - { - get - { - #if !PHOTON_UNITY_NETWORKING - return PhotonAppSettings.Instance.AppSettings; - #else - return PhotonNetwork.PhotonServerSettings.AppSettings; - #endif - } - set - { - #if !PHOTON_UNITY_NETWORKING - PhotonAppSettings.Instance.AppSettings = value; - #else - PhotonNetwork.PhotonServerSettings.AppSettings = value; - #endif - } - } - private ScriptableObject AppSettingsScriptableObject - { - get - { - #if !PHOTON_UNITY_NETWORKING - return (ScriptableObject)PhotonAppSettings.Instance; - #else - return (ScriptableObject)PhotonNetwork.PhotonServerSettings; - #endif - } - } - - - [MenuItem("Window/Photon Realtime/Wizard &p", false, 0)] - public static void Open() - { - if (Application.isPlaying) - { - return; - } - - WizardWindow window = GetWindow(true, WizardText.WINDOW_TITLE, true); - window.position = new Rect(windowPosition, windowSize); - window.Show(); - - Watch.Start(); - } - - private static void ReOpen() - { - if (ready.HasValue && ready.Value == false) - { - Open(); - } - - EditorApplication.update -= ReOpen; - } - - private void OnEnable() - { - ready = false; - windowSize = new Vector2(800, 600); - - this.minSize = windowSize; - this.navMenuWidth = 210; - this.buttonWidth = 120; - this.beforeNextCallback = null; - - appIdOrEmail = AppSettingsInstance.AppIdRealtime; - if (string.IsNullOrEmpty(appIdOrEmail)) - { - appIdOrEmail = ""; - } - - // Pre-load Release History - this.PrepareReleaseHistoryText(); - } - - private void OnDestroy() - { - if (EditorPrefs.GetBool(FirstStartupKey, false) == false) - { - if (!EditorUtility.DisplayDialog(WizardText.CLOSE_MSG_TITLE, WizardText.CLOSE_MSG_QUESTION, "Yes", "Back")) - { - EditorApplication.update += ReOpen; - } - } - - ready = false; - } - - private void InitContent() - { - if (ready.HasValue && ready.Value) - { - return; - } - - this.introIcon = Resources.Load("icons_welcome/information"); - this.releaseIcon = Resources.Load("icons_welcome/documentation"); - - this.photonCloudIcon = EditorGUIUtility.isProSkin ? Resources.Load("photon-cloud-32-dark") : Resources.Load("photon-cloud-32-light"); - this.productLogo = EditorGUIUtility.isProSkin ? Resources.Load("photon-wizard-dark") : Resources.Load("photon-wizard-light"); - - this.activeIcon = Resources.Load("icons_welcome/bullet_green"); - this.inactiveIcon = Resources.Load("icons_welcome/bullet_black"); - - this.stepHeaderIntro = new GUIContent("Wizard Intro"); - this.stepHeaderHistory = new GUIContent("Release History"); - this.stepHeaderPhoton = new GUIContent("Photon Cloud"); - this.stepHeaderSupport = new GUIContent("Support"); - - Color headerTextColor = EditorGUIUtility.isProSkin - ? new Color(0xf2 / 255f, 0xad / 255f, 0f) - : new Color(30 / 255f, 99 / 255f, 183 / 255f); - Color commonTextColor = EditorGUIUtility.isProSkin ? Color.white : Color.black; - - this.titleLabelStyle = new GUIStyle(EditorStyles.boldLabel) - { - fontSize = 40, - padding = new RectOffset(10, 0, 0, 0), - margin = new RectOffset(), - normal = - { - textColor = headerTextColor - } - }; - - this.introTextStyle = new GUIStyle(EditorStyles.helpBox) - { - fontSize = 15, - padding = new RectOffset(10, 10, 10, 10), - normal = - { - textColor = commonTextColor - } - }; - - this.stepBoxStyle = new GUIStyle(EditorStyles.helpBox) - { - padding = new RectOffset(10, 10, 10, 10), - margin = new RectOffset(0, 0, 5, 0), - normal = - { - textColor = commonTextColor - } - }; - - this.stageLabelStyle = new GUIStyle(EditorStyles.boldLabel) - { - padding = new RectOffset(10, 0, 0, 0), - margin = new RectOffset(), - normal = - { - textColor = commonTextColor - } - }; - - this.inputLabelStyle = new GUIStyle(EditorStyles.boldLabel) - { - fontSize = 14, - margin = new RectOffset(), - padding = new RectOffset(10, 0, 0, 0), - normal = - { - textColor = commonTextColor - } - }; - - this.headerNavBarlabelStyle = new GUIStyle(EditorStyles.boldLabel) - { - padding = new RectOffset(10, 0, 0, 0), - margin = new RectOffset(), - fontSize = 18, - normal = - { - textColor = headerTextColor - } - }; - - this.textLabelStyle = new GUIStyle() - { - wordWrap = true, - margin = new RectOffset(), - padding = new RectOffset(10, 0, 0, 0), - normal = - { - textColor = commonTextColor - } - }; - - this.centerInputTextStyle = new GUIStyle(GUI.skin.textField) - { - alignment = TextAnchor.MiddleCenter, - fontSize = 12, - fixedHeight = 26 - }; - - this.minimalButtonStyle = new GUIStyle(EditorStyles.miniButton) - { - fixedWidth = 130 - }; - - this.simpleButtonStyle = new GUIStyle(GUI.skin.button) - { - fontSize = 12, - padding = new RectOffset(10, 10, 10, 10) - }; - - this.iconSectionStyle = new GUIStyle - { - margin = new RectOffset(0, 0, 0, 0) - }; - - this.discordIcon = Resources.Load("icons_welcome/community"); - this.discordText = new GUIContent(WizardText.DISCORD_TEXT); - this.discordHeader = new GUIContent(WizardText.DISCORD_HEADER); - - this.bugtrackerIcon = Resources.Load("icons_welcome/bugtracker"); - this.bugtrackerText = new GUIContent(WizardText.BUGTRACKER_TEXT); - this.bugtrackerHeader = new GUIContent(WizardText.BUGTRACKER_HEADER); - - this.documentationIcon = Resources.Load("icons_welcome/documentation"); - this.documentationText = new GUIContent(WizardText.DOCUMENTATION_TEXT); - this.documentationHeader = new GUIContent(WizardText.DOCUMENTATION_HEADER); - - this.reviewIcon = Resources.Load("icons_welcome/comments"); - this.reviewText = new GUIContent(WizardText.REVIEW_TEXT); - this.reviewHeader = new GUIContent(WizardText.REVIEW_HEADER); - - this.samplesIcon = Resources.Load("icons_welcome/samples"); - - ready = true; - } - - private void OnGUI() - { - try - { - this.InitContent(); - - windowPosition = this.position.position; - - EditorGUILayout.BeginVertical(); - this.DrawHeader(); - - // Content - EditorGUILayout.BeginHorizontal(); - { - // Nav menu - EditorGUILayout.BeginVertical(EditorStyles.helpBox, - GUILayout.MaxWidth(this.navMenuWidth), - GUILayout.MinWidth(this.navMenuWidth)); - { - this.DrawNavMenu(); - } - EditorGUILayout.EndVertical(); - - // Main Content - EditorGUILayout.BeginVertical(EditorStyles.helpBox); - { - this.DrawContent(); - } - EditorGUILayout.EndVertical(); - } - EditorGUILayout.EndHorizontal(); - - EditorGUILayout.EndVertical(); - - if (GUI.changed) - { - this.Save(); - } - } - catch (Exception) - { - // ignored - } - } - - private void DrawContent() - { - switch (this.currentStage) - { - case WizardStage.Intro: - this.DrawIntro(); - break; - case WizardStage.ReleaseHistory: - this.DrawReleaseHistory(); - break; - case WizardStage.Photon: - this.DrawSetupPhoton(); - break; - case WizardStage.Support: - this.DrawSupport(); - break; - } - - GUILayout.FlexibleSpace(); - this.DrawFooter(); - } - - private void DrawIntro() - { - GUILayout.BeginVertical(); - GUILayout.Label(WizardText.WIZARD_INTRO, this.introTextStyle); - - if (GUILayout.Button(WizardText.VISIT_TEXT, this.simpleButtonStyle)) - { - this.OpenURL("https://doc.photonengine.com/en-us/realtime/")(); - } - - //if (GUILayout.Button(WizardText.LEAVE_REVIEW_TEXT, this.simpleButtonStyle)) - //{ - // this.OpenURL("https://doc.photonengine.com/en-us/realtime/")(); - //} - - GUILayout.EndVertical(); - } - - private void DrawReleaseHistory() - { - this.DrawInputWithLabel(string.Format("Version Changelog: {0}", this.releaseHistoryHeader), () => - { - GUILayout.BeginVertical(); - { - GUILayout.Space(5); - - this.scrollPosition = GUILayout.BeginScrollView(this.scrollPosition, GUIStyle.none, GUILayout.ExpandHeight(true), - GUILayout.ExpandWidth(true)); - - this.DrawReleaseHistoryItem("Added:", this.releaseHistoryTextAdded); - this.DrawReleaseHistoryItem("Changed:", this.releaseHistoryTextChanged); - this.DrawReleaseHistoryItem("Fixed:", this.releaseHistoryTextFixed); - this.DrawReleaseHistoryItem("Removed:", this.releaseHistoryTextRemoved); - this.DrawReleaseHistoryItem("Internal:", this.releaseHistoryTextInternal); - - GUILayout.EndScrollView(); - } - GUILayout.EndVertical(); - }, false, labelSize: 300); - } - - private void DrawReleaseHistoryItem(string label, List items) - { - if (items != null && items.Count > 0) - { - this.DrawInputWithLabel(label, () => - { - GUILayout.BeginVertical(); - { - GUILayout.Space(5); - - foreach (string text in items) - { - GUILayout.Label(string.Format("- {0}.", text), this.textLabelStyle); - } - } - GUILayout.EndVertical(); - }, false, true, 200); - } - } - - private enum InputState { NotFinished, Email, Appid } - private InputState inputState = InputState.NotFinished; - - private enum SetupState { Input, SendingEmail, RegisteredSuccessful, AlreadyRegistered, AppIdApplied, RegistrationError, Skip } - private SetupState setupState = SetupState.Input; - private bool requestHighlighSettings = false; - - private void DrawSetupPhoton() - { - this.DrawInputWithLabel("Photon Cloud Setup", () => - { - GUILayout.BeginVertical(); - GUILayout.Space(5); - GUILayout.Label(WizardText.PHOTON, this.textLabelStyle); - GUILayout.EndVertical(); - - GUILayout.Space(5); - GUILayout.BeginHorizontal(); - GUILayout.Label(WizardText.PHOTON_DASH, this.textLabelStyle); - if (GUILayout.Button("Visit Dashboard", this.minimalButtonStyle)) - { - string mail = (this.inputState == InputState.Email) ? appIdOrEmail : string.Empty; - this.OpenURL(EditorIntegration.UrlCloudDashboard + mail)(); - } - - GUILayout.EndHorizontal(); - }, false); - GUILayout.Space(15); - - this.DrawInputWithLabel("Photon AppID or Email", () => - { - GUILayout.BeginVertical(); - - appIdOrEmail = EditorGUILayout.TextField(appIdOrEmail, this.centerInputTextStyle).Trim(); // trimming all input in/of this field - - GUILayout.EndVertical(); - }, false, true, 300); - - - // input state check to show dependent info / buttons - if (AccountService.IsValidEmail(appIdOrEmail)) - { - this.inputState = InputState.Email; - } - else - { - this.inputState = IsAppId(appIdOrEmail) ? InputState.Appid : InputState.NotFinished; - } - - // button to skip setup - GUILayout.BeginHorizontal(); - GUILayout.FlexibleSpace(); - if (GUILayout.Button("Skip", GUILayout.Width(100))) - { - this.requestHighlighSettings = true; - this.setupState = SetupState.Skip; - } - - // SETUP button - EditorGUI.BeginDisabledGroup(this.inputState == InputState.NotFinished || requestingAppId); - if (GUILayout.Button("Setup", GUILayout.Width(100))) - { - this.requestHighlighSettings = true; - GUIUtility.keyboardControl = 0; - if (this.inputState == InputState.Email && !requestingAppId) - { - requestingAppId = new AccountService().RegisterByEmail(appIdOrEmail, new List() { ServiceTypes.Realtime }, SuccessCallback, ErrorCallback); - if (requestingAppId) - { - EditorUtility.DisplayProgressBar(WizardText.CONNECTION_TITLE, WizardText.CONNECTION_INFO, 0.5f); - this.setupState = SetupState.SendingEmail; - } - } - else if (this.inputState == InputState.Appid) - { - this.setupState = SetupState.AppIdApplied; - //Undo.RecordObject(PhotonNetwork.PhotonServerSettings, "Update PhotonServerSettings for PUN"); - AppSettingsInstance.AppIdRealtime = appIdOrEmail; - //PhotonEditor.SaveSettings(); - } - } - EditorGUI.EndDisabledGroup(); - GUILayout.FlexibleSpace(); - GUILayout.EndHorizontal(); - - GUILayout.Space(10); - - switch (this.setupState) - { - case SetupState.RegisteredSuccessful: - GUILayout.Label(WizardText.RegisteredNewAccountInfo, this.textLabelStyle); - GUILayout.Label(WizardText.SetupCompleteInfo, this.textLabelStyle); - this.HighlightSettings(); - break; - case SetupState.AppIdApplied: - GUILayout.Label(WizardText.AppliedToSettingsInfo, this.textLabelStyle); - GUILayout.Label(WizardText.SetupCompleteInfo, this.textLabelStyle); - this.HighlightSettings(); - break; - case SetupState.AlreadyRegistered: - GUILayout.Label(WizardText.AlreadyRegisteredInfo, this.textLabelStyle); - this.HighlightSettings(); - break; - case SetupState.RegistrationError: - GUILayout.Label(WizardText.RegistrationError, this.textLabelStyle); - this.HighlightSettings(); - break; - case SetupState.Skip: - GUILayout.Label(WizardText.SkipRegistrationInfo, this.textLabelStyle); - this.HighlightSettings(); - break; - } - } - - /// - /// Highlight the Photon App Settings in the project - /// - private void HighlightSettings() - { - if (this.requestHighlighSettings && - ReferenceEquals(Selection.activeObject, AppSettingsScriptableObject) == false) // If not already selected - { - Selection.SetActiveObjectWithContext(AppSettingsScriptableObject, null); - EditorGUIUtility.PingObject(AppSettingsScriptableObject); - - this.requestHighlighSettings = false; // reset request - } - } - - private void ErrorCallback(string err) - { - UnityEngine.Debug.LogError(err); - - requestingAppId = false; - this.setupState = SetupState.RegistrationError; - EditorUtility.ClearProgressBar(); - } - - private void SuccessCallback(AccountServiceResponse response) - { - if (response.ReturnCode == AccountServiceReturnCodes.Success) - { - this.setupState = SetupState.RegisteredSuccessful; - - appIdOrEmail = response.ApplicationIds[((int)ServiceTypes.Realtime).ToString()]; - AppSettingsInstance.AppIdRealtime = appIdOrEmail; - - //UnityEngine.Debug.LogFormat("You new App ID: {0}", appIdOrEmail); - } - else - { - this.setupState = SetupState.AlreadyRegistered; - UnityEngine.Debug.LogWarning("It was not possible to process your request, please go to the Photon Cloud Dashboard."); - UnityEngine.Debug.LogWarningFormat("Return Code: {0}", response.ReturnCode); - } - - requestingAppId = false; - EditorUtility.ClearProgressBar(); - } - - private void DrawSupport() - { - this.DrawInputWithLabel("Support", () => - { - GUILayout.BeginVertical(); - GUILayout.Space(5); - GUILayout.Label(WizardText.SUPPORT, this.textLabelStyle); - GUILayout.EndVertical(); - }, false); - - GUILayout.Space(15); - - this.DrawStepOption(this.discordIcon, this.discordHeader, this.discordText, callback: this.OpenURL(EditorIntegration.UrlDiscordGeneral)); - this.DrawStepOption(this.documentationIcon, this.documentationHeader, this.documentationText, callback: this.OpenURL(EditorIntegration.UrlRealtimeDocsOnline)); - - // Action - - if (this.beforeNextCallback == null) - { - this.beforeNextCallback = () => - { - return EditorUtility.DisplayDialog(WizardText.FINISH_TITLE, WizardText.FINISH_QUESTION, "Yes", "No"); - }; - } - } - - private void DrawNavMenu() - { - GUILayout.Space(5); - this.DrawMenuHeader("Installation Steps"); - GUILayout.Space(10); - - this.DrawStepOption(this.introIcon, stepHeaderIntro, active: this.currentStage == WizardStage.Intro, callback: () => - { - this.SetStep(WizardStage.Intro); - }); - - this.DrawStepOption(this.releaseIcon, stepHeaderHistory, active: this.currentStage == WizardStage.ReleaseHistory, callback: () => - { - this.SetStep(WizardStage.ReleaseHistory); - }); - - this.DrawStepOption(this.photonCloudIcon, stepHeaderPhoton, active: this.currentStage == WizardStage.Photon, callback: () => - { - this.SetStep(WizardStage.Photon); - }); - - this.DrawStepOption(this.discordIcon, stepHeaderSupport, active: this.currentStage == WizardStage.Support, callback: () => - { - this.SetStep(WizardStage.Support); - }); - - GUILayout.FlexibleSpace(); - if (this.validReleaseParse) - { - GUILayout.Label(this.releaseHistoryHeader, this.textLabelStyle); - } - GUILayout.Space(5); - } - - private void DrawHeader() - { - GUILayout.BeginHorizontal(); - GUILayout.FlexibleSpace(); - GUILayout.Label(this.productLogo, GUILayout.Width(256), GUILayout.Height(64)); - GUILayout.FlexibleSpace(); - GUILayout.EndHorizontal(); - } - - private void DrawFooter() - { - GUILayout.BeginHorizontal(); - GUILayout.FlexibleSpace(); - - EditorGUI.BeginDisabledGroup((int)this.currentStage == 1); - - if (GUILayout.Button(WizardText.BUTTON_BACK_TEXT, GUILayout.Width(this.buttonWidth))) - { - this.beforeNextCallback = null; - this.BackStep(); - } - - EditorGUI.EndDisabledGroup(); - - string nextLabel; - switch (this.currentStage) - { - case WizardStage.Support: - nextLabel = WizardText.BUTTON_DONE_TEXT; - break; - default: - nextLabel = WizardText.BUTTON_NEXT_TEXT; - break; - } - - if (GUILayout.Button(nextLabel, GUILayout.Width(this.buttonWidth))) - { - if (this.beforeNextCallback == null || this.beforeNextCallback()) - { - if (this.currentStage == WizardStage.Support) - { - EditorPrefs.SetBool(FirstStartupKey, true); - this.Close(); - } - - this.NextStep(); - this.beforeNextCallback = null; - } - } - - GUILayout.Space(5); - GUILayout.EndHorizontal(); - GUILayout.Space(5); - } - - // Utils - - private void Save() - { - if (Watch.ElapsedMilliseconds > 5000) - { - Watch.Reset(); - Watch.Start(); - - EditorUtility.SetDirty(AppSettingsScriptableObject); - AssetDatabase.SaveAssets(); - } - } - - private void DrawMenuHeader(string text) - { - GUILayout.BeginHorizontal(); - GUILayout.FlexibleSpace(); - - GUILayout.Label(text, this.headerNavBarlabelStyle); - - GUILayout.FlexibleSpace(); - GUILayout.EndHorizontal(); - } - - private void DrawInputWithLabel(string label, Action gui, bool horizontal = true, bool box = false, int labelSize = 220) - { - GUILayout.Space(10); - - if (horizontal) - { - if (box) - { - GUILayout.BeginHorizontal(this.stepBoxStyle); - } - else - { - GUILayout.BeginHorizontal(); - } - } - else - { - if (box) - { - GUILayout.BeginVertical(this.stepBoxStyle); - } - else - { - GUILayout.BeginVertical(); - } - } - - GUILayout.Label(label, this.inputLabelStyle, GUILayout.Width(labelSize)); - - gui(); - - GUILayout.Space(5); - - if (horizontal) - { - GUILayout.EndHorizontal(); - } - else - { - GUILayout.EndVertical(); - } - } - - private void DrawStepOption(Texture2D icon, GUIContent header, GUIContent description = null, bool? active = null, - Action callback = null, Action ignoredCallback = null) - { - GUILayout.BeginHorizontal(this.stepBoxStyle); - - if (icon != null) - { - GUILayout.Label(icon, this.iconSectionStyle, GUILayout.Width(32), GUILayout.Height(32)); - } - - int height = icon != null ? 32 : 16; - - GUILayout.BeginVertical(GUILayout.MinHeight(height)); - GUILayout.FlexibleSpace(); - - GUILayout.Label(header, this.stageLabelStyle, GUILayout.MinWidth(120)); - - if (description != null) - { - GUILayout.Label(description, this.textLabelStyle); - } - - GUILayout.FlexibleSpace(); - GUILayout.EndVertical(); - - if (active == true) - { - GUILayout.Label(this.activeIcon, this.iconSectionStyle, GUILayout.Width(height), GUILayout.Height(height)); - } - else if (active == false) - { - GUILayout.Label(this.inactiveIcon, this.iconSectionStyle, GUILayout.Width(height), GUILayout.Height(height)); - } - - GUILayout.EndHorizontal(); - - if (callback != null) - { - Rect rect = GUILayoutUtility.GetLastRect(); - EditorGUIUtility.AddCursorRect(rect, MouseCursor.Link); - - if (rect.Contains(Event.current.mousePosition)) - { - if (Event.current.type == EventType.MouseDown) - { - callback(); - GUIUtility.ExitGUI(); - } - } - } - } - - /// - /// Go to the specific stage in the Wizard - /// - /// Stage to set - private void SetStep(WizardStage stage) - { - this.beforeNextCallback = null; - this.currentStage = stage; - } - - /// - /// Step foward in the Wizard stages - /// - private void NextStep() - { - this.currentStage += (int)this.currentStage < Enum.GetValues(typeof(WizardStage)).Length ? 1 : 0; - } - - /// - /// Step back in the Wizard stages - /// - private void BackStep() - { - this.currentStage -= (int)this.currentStage > 1 ? 1 : 0; - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/scripts/WizardWindow.cs.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/scripts/WizardWindow.cs.meta deleted file mode 100644 index d2955b39a..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/scripts/WizardWindow.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d22d423f7d4a0aa40a0ffe79f413aa27 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/scripts/WizardWindowUtils.cs b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/scripts/WizardWindowUtils.cs deleted file mode 100644 index b6bfc3cb5..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/scripts/WizardWindowUtils.cs +++ /dev/null @@ -1,197 +0,0 @@ -// ---------------------------------------------------------------------------- -// -// PhotonNetwork Framework for Unity - Copyright (C) 2021 Exit Games GmbH -// -// -// MenuItems and in-Editor scripts for PhotonNetwork. -// -// developer@exitgames.com -// ---------------------------------------------------------------------------- - -#if UNITY_2017_4_OR_NEWER -#define SUPPORTED_UNITY -#endif - -#if !PHOTON_UNITY_NETWORKING && UNITY_EDITOR - -namespace Photon.Realtime.Editor -{ - using System; - using System.Collections.Generic; - using System.IO; - using System.Text.RegularExpressions; - using UnityEditor; - using UnityEngine; - - public partial class WizardWindow - { - private class WizardText - { - internal static readonly string WINDOW_TITLE = "Wizard"; - internal static readonly string SUPPORT = "You can contact the Photon Team using one of the following links. You can also go to Photon Documentation in order to get started."; - internal static readonly string PACKAGES = "Here you will be able to select all packages you want to use into your project. Packages marked green are already installed. \nClick to install."; - internal static readonly string PHOTON = "In this step, you will configure your Photon Cloud credentials in order to use our servers for matchmaking, relay and much more. \n\n\u2022 To use an existing Photon Cloud App, enter your AppId.\n\u2022 To register an account or access an existing one, enter the account's mail address.\n\u2022 To use Photon OnPremise, skip this step."; - internal static readonly string PHOTON_DASH = "Go to Dashboard to create your App ID: "; - - internal static readonly string CONNECTION_TITLE = "Connecting"; - internal static readonly string CONNECTION_INFO = "Connecting to the account service..."; - - internal static readonly string FINISH_TITLE = "Setup Complete"; - internal static readonly string FINISH_QUESTION = "Confirm Exit?"; - - internal static readonly string CLOSE_MSG_TITLE = "Incomplete Installation"; - internal static readonly string CLOSE_MSG_QUESTION = "Are you sure you want to exit the Wizard?"; - internal static readonly string DISCORD_TEXT = "Join the Discord."; - internal static readonly string DISCORD_HEADER = "Community"; - internal static readonly string BUGTRACKER_TEXT = "Open bugtracker on github."; - internal static readonly string BUGTRACKER_HEADER = "Bug Tracker"; - internal static readonly string DOCUMENTATION_TEXT = "Open the documentation."; - internal static readonly string DOCUMENTATION_HEADER = "Documentation"; - internal static readonly string REVIEW_TEXT = "Please, let others know what you think about Photon."; - internal static readonly string REVIEW_HEADER = "Leave a review"; - internal static readonly string SAMPLES_TEXT = "Import the samples package."; - internal static readonly string SAMPLES_HEADER = "Samples"; - internal static readonly string WIZARD_INTRO = - @"Hello! Welcome to Photon Wizard! - -Photon Realtime is our base layer for multiplayer games and higher-level network solutions. It solves problems like matchmaking and fast communication with a scalable approach. - -The term Photon Realtime also wraps up our comprehensive framework of APIs, software tools and services and defines how the clients and servers interact with one another. - -Please, follow the instructions on the next steps to get your installation ready for use."; - - internal static readonly string BUTTON_BACK_TEXT = "Back"; - internal static readonly string BUTTON_DONE_TEXT = "Done"; - internal static readonly string BUTTON_NEXT_TEXT = "Next"; - - internal static readonly string LEAVE_REVIEW_TEXT = "Leave a review"; - internal static readonly string VISIT_TEXT = "Visit Getting Started Documentation"; - - internal static readonly string AlreadyRegisteredInfo = "The email is registered so we can't fetch your AppId (without password).\n\nPlease login online to get your AppId and paste it above."; - internal static readonly string RegistrationError = "Some error occurred. Please try again later."; - internal static readonly string SkipRegistrationInfo = "Skipping? No problem:\nEdit your server settings in the PhotonAppSettings file."; - internal static readonly string SetupCompleteInfo = "Done!\nAll connection settings can be edited in the PhotonAppSettings now.\nHave a look."; - internal static readonly string AppliedToSettingsInfo = "Your AppId is now applied to this project."; - internal static readonly string RegisteredNewAccountInfo = "We created a (free) account and fetched you an AppId.\nWelcome. Your project is setup."; - } - - private enum WizardStage - { - Intro = 1, - ReleaseHistory = 2, - Photon = 3, - Support = 4 - } - - private Action OpenURL(string url, params object[] args) - { - return () => - { - if (args.Length > 0) - { - url = string.Format(url, args); - } - - Application.OpenURL(url); - }; - } - - private bool IsAppId(string val) - { - try - { - new Guid(val); - } - catch - { - return false; - } - return true; - } - - private void PrepareReleaseHistoryText() - { - try - { - var filePath = BuildPath(Application.dataPath, "Photon", "PhotonRealtime", "Code", "changes-realtime.txt"); - var text = (TextAsset)AssetDatabase.LoadAssetAtPath(filePath, typeof(TextAsset)); - - var baseText = text.text; - - var regexVersion = new Regex(@"Version (\d+\.?)*", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | RegexOptions.Multiline); - var regexAdded = new Regex(@"\b(Added:)(.*)\b", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | RegexOptions.Multiline); - var regexChanged = new Regex(@"\b(Changed:)(.*)\b", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | RegexOptions.Multiline); - var regexUpdated = new Regex(@"\b(Updated:)(.*)\b", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | RegexOptions.Multiline); - var regexFixed = new Regex(@"\b(Fixed:)(.*)\b", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | RegexOptions.Multiline); - var regexRemoved = new Regex(@"\b(Removed:)(.*)\b", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | RegexOptions.Multiline); - var regexInternal = new Regex(@"\b(Internal:)(.*)\b", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | RegexOptions.Multiline); - - var matches = regexVersion.Matches(baseText); - - if (matches.Count > 0) - { - var currentVersionMatch = matches[0]; - var lastVersionMatch = currentVersionMatch.NextMatch(); - - if (currentVersionMatch.Success && lastVersionMatch.Success) - { - Func> itemProcessor = (match) => - { - List resultList = new List(); - for (int index = 0; index < match.Count; index++) - { - resultList.Add(match[index].Groups[2].Value.Trim()); - } - return resultList; - }; - - string mainText = baseText.Substring(currentVersionMatch.Index + currentVersionMatch.Length, - lastVersionMatch.Index - lastVersionMatch.Length - 1).Trim(); - - this.releaseHistoryHeader = currentVersionMatch.Value.Trim(); - this.releaseHistoryTextAdded = itemProcessor(regexAdded.Matches(mainText)); - this.releaseHistoryTextChanged = itemProcessor(regexChanged.Matches(mainText)); - this.releaseHistoryTextChanged.AddRange(itemProcessor(regexUpdated.Matches(mainText))); - this.releaseHistoryTextFixed = itemProcessor(regexFixed.Matches(mainText)); - this.releaseHistoryTextRemoved = itemProcessor(regexRemoved.Matches(mainText)); - this.releaseHistoryTextInternal = itemProcessor(regexInternal.Matches(mainText)); - this.validReleaseParse = true; - } - } - } - catch (Exception) - { - this.releaseHistoryHeader = "\nPlease look the file changes-realtime.txt"; - this.releaseHistoryTextAdded = new List(); - this.releaseHistoryTextChanged = new List(); - this.releaseHistoryTextFixed = new List(); - this.releaseHistoryTextRemoved = new List(); - this.releaseHistoryTextInternal = new List(); - } - } - - public static bool Toggle(bool value) - { - GUIStyle toggle = new GUIStyle("Toggle") - { - margin = new RectOffset(), - padding = new RectOffset() - }; - - return EditorGUILayout.Toggle(value, toggle, GUILayout.Width(15)); - } - - private static string BuildPath(params string[] parts) - { - var basePath = ""; - - foreach (var path in parts) - { - basePath = Path.Combine(basePath, path); - } - - return basePath.Replace(Application.dataPath, Path.GetFileName(Application.dataPath)); - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/scripts/WizardWindowUtils.cs.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/scripts/WizardWindowUtils.cs.meta deleted file mode 100644 index dd73773a3..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/Editor/Wizard/scripts/WizardWindowUtils.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8fb5ceb11dfed8748bfe208bced47b7f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/PhotonAppSettings.cs b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/PhotonAppSettings.cs deleted file mode 100644 index 66b57ebce..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/PhotonAppSettings.cs +++ /dev/null @@ -1,116 +0,0 @@ -// ----------------------------------------------------------------------- -// -// -// developer@photonengine.com -// ---------------------------------------------------------------------------- - -#if UNITY_2017_4_OR_NEWER -#define SUPPORTED_UNITY -#endif - - -#if !PHOTON_UNITY_NETWORKING - -namespace Photon.Realtime -{ - using System; - using System.IO; - using UnityEditor; - using UnityEngine; - /// - /// Collection of connection-relevant settings, used internally by PhotonNetwork.ConnectUsingSettings. - /// - /// - /// Includes the AppSettings class from the Realtime APIs plus some other, PUN-relevant, settings. - [Serializable] - [HelpURL("https://doc.photonengine.com/en-us/pun/v2/getting-started/initial-setup")] - public class PhotonAppSettings : ScriptableObject - { - [Tooltip("Core Photon Server/Cloud settings.")] - public AppSettings AppSettings; - - #if UNITY_EDITOR - [HideInInspector] - public bool DisableAutoOpenWizard; - //public bool ShowSettings; - //public bool DevRegionSetOnce; - #endif - - private static PhotonAppSettings instance; - - /// Serialized server settings, written by the Setup Wizard for use in ConnectUsingSettings. - public static PhotonAppSettings Instance - { - get - { - if (instance == null) - { - LoadOrCreateSettings(); - } - - return instance; - } - - private set { instance = value; } - } - - - - public static void LoadOrCreateSettings() - { - if (instance != null) - { - Debug.LogWarning("Instance is not null. Will not LoadOrCreateSettings()."); - return; - } - - - #if UNITY_EDITOR - // let's check if the AssetDatabase finds the file; aimed to avoid multiple files being created, potentially a futile step - AssetDatabase.Refresh(); - #endif - - // try to load the resource / asset (ServerSettings a.k.a. PhotonServerSettings) - instance = (PhotonAppSettings)Resources.Load(typeof(PhotonAppSettings).Name, typeof(PhotonAppSettings)); - if (instance != null) - { - //Debug.LogWarning("Settings from Resources."); // DEBUG - return; - } - - - // create it if not loaded - if (instance == null) - { - instance = (PhotonAppSettings)CreateInstance(typeof(PhotonAppSettings)); - if (instance == null) - { - Debug.LogError("Failed to create ServerSettings. PUN is unable to run this way. If you deleted it from the project, reload the Editor."); - return; - } - - //Debug.LogWarning("Settings created!"); // DEBUG - } - - // in the editor, store the settings file as it's not loaded - #if UNITY_EDITOR - string punResourcesDirectory = "Assets/Photon/Resources/"; - string serverSettingsAssetPath = punResourcesDirectory + typeof(PhotonAppSettings).Name + ".asset"; - string serverSettingsDirectory = Path.GetDirectoryName(serverSettingsAssetPath); - - if (!Directory.Exists(serverSettingsDirectory)) - { - Directory.CreateDirectory(serverSettingsDirectory); - AssetDatabase.ImportAsset(serverSettingsDirectory); - } - - AssetDatabase.CreateAsset(instance, serverSettingsAssetPath); - AssetDatabase.SaveAssets(); - - - //Debug.Log("Settings stored to DB."); // DEBUG - #endif - } - } -} -#endif \ No newline at end of file diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/PhotonAppSettings.cs.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/PhotonAppSettings.cs.meta deleted file mode 100644 index 63c192e1e..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/Unity/PhotonAppSettings.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a389b614f52fbf347a1533dbbf245033 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/WebRpc.cs b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/WebRpc.cs deleted file mode 100644 index b0177e3a6..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/WebRpc.cs +++ /dev/null @@ -1,187 +0,0 @@ -// ---------------------------------------------------------------------------- -// -// Loadbalancing Framework for Photon - Copyright (C) 2018 Exit Games GmbH -// -// -// This class wraps responses of a Photon WebRPC call, coming from a -// third party web service. -// -// developer@photonengine.com -// ---------------------------------------------------------------------------- - -#if UNITY_4_7 || UNITY_5 || UNITY_5_3_OR_NEWER -#define SUPPORTED_UNITY -#endif - - -namespace Photon.Realtime -{ - using System.Collections.Generic; - using ExitGames.Client.Photon; - - #if SUPPORTED_UNITY || NETFX_CORE - using Hashtable = ExitGames.Client.Photon.Hashtable; - using SupportClass = ExitGames.Client.Photon.SupportClass; - #endif - - - /// Reads an operation response of a WebRpc and provides convenient access to most common values. - /// - /// See LoadBalancingClient.OpWebRpc.
- /// Create a WebRpcResponse to access common result values.
- /// The operationResponse.OperationCode should be: OperationCode.WebRpc.
- ///
- public class WebRpcResponse - { - /// Name of the WebRpc that was called. - public string Name { get; private set; } - - /// ResultCode of the WebService that answered the WebRpc. - /// - /// 0 is: "OK" for WebRPCs.
- /// -1 is: No ResultCode by WebRpc service (check ).
- /// Other ResultCode are defined by the individual WebRpc and service. - ///
- public int ResultCode { get; private set; } - [System.Obsolete("Use ResultCode instead")] - public int ReturnCode - { - get { return ResultCode; } - } - - /// Might be empty or null. - public string Message { get; private set; } - [System.Obsolete("Use Message instead")] - public string DebugMessage - { - get { return Message; } - } - - - /// Other key/values returned by the webservice that answered the WebRpc. - public Dictionary Parameters { get; private set; } - - /// An OperationResponse for a WebRpc is needed to read it's values. - public WebRpcResponse(OperationResponse response) - { - object value; - if (response.Parameters.TryGetValue(ParameterCode.UriPath, out value)) - { - this.Name = value as string; - } - - this.ResultCode = -1; - if (response.Parameters.TryGetValue(ParameterCode.WebRpcReturnCode, out value)) - { - this.ResultCode = (byte)value; - } - - if (response.Parameters.TryGetValue(ParameterCode.WebRpcParameters, out value)) - { - this.Parameters = value as Dictionary; - } - - if (response.Parameters.TryGetValue(ParameterCode.WebRpcReturnMessage, out value)) - { - this.Message = value as string; - } - } - - /// Turns the response into an easier to read string. - /// String resembling the result. - public string ToStringFull() - { - return string.Format("{0}={2}: {1} \"{3}\"", this.Name, SupportClass.DictionaryToString(this.Parameters), this.ResultCode, this.Message); - } - } - - - /// - /// Optional flags to be used in Photon client SDKs with Op RaiseEvent and Op SetProperties. - /// Introduced mainly for webhooks 1.2 to control behavior of forwarded HTTP requests. - /// - public class WebFlags - { - - public readonly static WebFlags Default = new WebFlags(0); - public byte WebhookFlags; - /// - /// Indicates whether to forward HTTP request to web service or not. - /// - public bool HttpForward - { - get { return (WebhookFlags & HttpForwardConst) != 0; } - set { - if (value) - { - WebhookFlags |= HttpForwardConst; - } - else - { - WebhookFlags = (byte) (WebhookFlags & ~(1 << 0)); - } - } - } - public const byte HttpForwardConst = 0x01; - /// - /// Indicates whether to send AuthCookie of actor in the HTTP request to web service or not. - /// - public bool SendAuthCookie - { - get { return (WebhookFlags & SendAuthCookieConst) != 0; } - set { - if (value) - { - WebhookFlags |= SendAuthCookieConst; - } - else - { - WebhookFlags = (byte)(WebhookFlags & ~(1 << 1)); - } - } - } - public const byte SendAuthCookieConst = 0x02; - /// - /// Indicates whether to send HTTP request synchronously or asynchronously to web service. - /// - public bool SendSync - { - get { return (WebhookFlags & SendSyncConst) != 0; } - set { - if (value) - { - WebhookFlags |= SendSyncConst; - } - else - { - WebhookFlags = (byte)(WebhookFlags & ~(1 << 2)); - } - } - } - public const byte SendSyncConst = 0x04; - /// - /// Indicates whether to send serialized game state in HTTP request to web service or not. - /// - public bool SendState - { - get { return (WebhookFlags & SendStateConst) != 0; } - set { - if (value) - { - WebhookFlags |= SendStateConst; - } - else - { - WebhookFlags = (byte)(WebhookFlags & ~(1 << 3)); - } - } - } - public const byte SendStateConst = 0x08; - - public WebFlags(byte webhookFlags) - { - WebhookFlags = webhookFlags; - } - } - -} diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/WebRpc.cs.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/WebRpc.cs.meta deleted file mode 100644 index 11e090bc4..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/WebRpc.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: edf0013f7a02fbf4a810bbe4aed94dd2 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/changes-realtime.txt b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/changes-realtime.txt deleted file mode 100644 index 3fccec812..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/changes-realtime.txt +++ /dev/null @@ -1,316 +0,0 @@ - -Photon Realtime C# Client - Changelog -Exit Games GmbH - www.photonengine.com - forum.photonengine.com - -Version 4.1.5.0 () - Internal: EncryptionMode.DatagramEncryptionGCMRandomSequence (12) with .DatagramEncryptionGCM (13). - Internal: TokenForInit is now an object instead of a string. This also affects the AuthenticationValues class. This enables the server to send a byte[], which is more effective than a string. - Changed: Exposed all RoomOptions in Room class. Room.PublishUserId, Room.DeleteNullProperties. - Changed: Room.AutoCleanUp can also be set from room options flag. - Internal: EnterRoomParams and OpJoinRoom now use a JoinMode (replacing EnterRoomParams.CreateIfNotExists and EnterRoomParams.RejoinOnly). - Fixed: Unity-specific CustomTypes.cs to actually only compile for Unity. - Updated: EncryptionMode.DatagramEncryptionGCMRandomSequence (12) with .DatagramEncryptionGCM in the LoadBalancingClient. - - -Version 4.1.4.8 (30. November 2020) - Added: Conditional compilation in methods which are only for UNITY_WEBGL and UNITY_XBOXONE. The code needed to compile for any platform, even though it should not run anywhere else. - Added: Support for UNITY_GAMECORE. - Added: Parameter checks for GetGameList (and PUN GetCustomRoomList). The operation is not sent unless the parameters are OK. - Added: SupportLogger.OnDestroy to be removed from callback targets. - Added: RoomOptions.SuppressPlayerInfo. It can be used to skip join and leave events as well as properties broadcasts in rooms. - -Version 4.1.4.7 (25. November 2020) - Fixed: It was possible to trigger multiple calls of Authenticate by calling ConnectToRegionMaster(region) multiple times while being connected to the Name Server. - Changed: AuthenticationValues.ToString() to expose less data while showing which values are set. - -Version 4.1.4.6 (17. November 2020) - Added: Unity-specific types will now be registered for de/serialization automatically (in Unity projects) using CustomTypesUnity (in LoadBalancingClient constructor). - Note: The Player class needs to reference the current room to deserialize, so it is not a serializable type in the Realtime API (but in PUN). Send the Player.ActorNumber instead and the receiver looks up the ActorNumber in the room. - Changed: The client will now call disconnect if any operation response has a ReturnCode == ErrorCode.OperationLimitReached. The resulting OnDisconnect callback gets the new DisconnectCause.DisconnectByOperationLimit value. - Added: DisconnectCause.DisconnectByDisconnectMessage. If the server has a "low level" reason to disconnect a client, it can now send a Disconnect Message with some debug info. The LoadBalancingClient will log this message as error and disconnect. When this gets used will be added to the docs. - Changed: The BroadcastProperties parameter is now always sent to the Game Server, no matter if there are properties. This fixes a recent issue where UserIds were not broadcast in rooms, if no other player properties were used (see v4.1.4.5 changes). - Changed: UseAlternativeUdpPorts is replaced by ServerPortOverrides, which allow configuration of ports per server (including using no override). - Changed: UseAlternativeUdpPorts is obsolete and no longer used. - Changed: LoadBalancingClient.NameServerPortOverride is now named NameServerPortInAppSettings, which is closer to what it resembles. It is overwritten by the ServerPortOverrides if the nameserver port is > 0 there. - Added: Struct PhotonPortDefinition. - Added: ReplacePortWithAlternative method to wrap up the replacement as per our address rules. - Changed: When the client does not connect initially and EnableProtocolFallback is enabled, the ServerPortOverrides are reset and the fallback protocol will use the default ports for the Name Server (defined per protocol). - Changed: ReconnectAndRejoin() no longer affects the value IsUsingNameServer. This is only about reconnecting. - Changed: ReconnectAndRejoin() was logging error-level messages for expected situations. Now, there are only warnings in the logs. You can simply check the return value, which is false on error (then you should connect again, as usual). - Internal: The pool type for paramDictionaryPool, which is used in OpRaiseEvent. It is now a ParameterDictionary, which will wrap some value-types into pooled objects. This helps avoid some memory allocation. - Internal: ParameterCode.Secret is now .Token to match the server naming. - Changed: Logging level when OpRaiseEvent fails due to leaving a room. It reports as INFO level, when leaving or disconnecting. - Added: Error log for Op Authenticate, if the client does not have a token to authenticate on a Master or Game Server. That token comes from the Name Server and should be automatically present and used. Note: The client will send the auth but may fail due to missing token. - Changed: LoadBalancingClient.Disconnect() now checks if the client was just created or is disconnecting already. Those cases won't trigger a callback, so there is no surplus attempt to disconnect the peer. Also, the State does not change. An INFO level debug message helps detect those cases. - -Version 4.1.4.5 (02. September 2020) - Added: Unity-only ConnectionHandler.StaticReset() to allow entering playmode without domain reload. - Added: ErrorCode definition for OperationLimitReached (32743). The client will become unable to call any further operations (to safeguard the room/server) and get disconnected soon after. Currently used for SetProperties only. - Fixed: Region pinging for the case that none of the regions answered anything. Then, all region results caused a callback. - Added: Support for rooms that suppress room-events. - Added: Field bool Room.SuppressRoomEvents to allow checking if room events are suppressed. - Changed: If room events are suppressed, the callbacks OnCreatedRoom() and OnJoinedRoom() are now called by the operation response (not waiting for the suppressed events). - Renamed: Room.SetRoomFlags() to InternalCacheRoomFlags(). - Changed: When entering a room, the local players NickName property (255) is not sent if NullOrEmpty. - Changed: LoadBalancingApi should not use Unity.Debug unconditionally. - Updated: AuthenticationValues reference slightly. Better wording. - Updated: Token setter to be protected internal. Only needs to be set by Photon LB API. - Fixed: Csproject files for Chat API and LoadBalancing API. The two projects now import the dll based on the current target framework (dynamic). - -Version 4.1.4.4 (6. July 2020) - Fixed: AppSettings.CopyTo method. It was not copying the new value EnableProtocolFallback yet. - Fixed: The date of version 4.1.4.3 in this changelog. - Updated: Error handling in PingWindowsStore. - -Version 4.1.4.3 (24. June 2020) - Added: Check that the Dev Region override is in the list of available regions (from Name Server). If not, the first available region is being used. - Changed: RegionPinger.Start() now attempts to use a ThreadPool WorkerItem to ping individual regions. Only if that fails, a separate managed Thread is used. This should help avoid running into Thread limits (if any). Builds for NETFX_CORE don't use this. - Changed: Error handling in PingMono. SocketExceptions were not handled entirely. - Changed: PhotonPingClasses is no longer used. It's empty and can be removed. - Changed: Handling of event LobbyStats in case of LoadBalancingPeer.UseByteArraySlicePoolForEvents. This relates to a new option in the PhotonPeer to use pooled memory (wrapped byte[] basically) when incoming events only contain a byte[]. See changes-library.txt and API reference. - Added: Initial puzzle pieces for WSS Proxy support. This is not yet funtional. To actually use the proxy settings, a special WebSocket implementation is needed. - Changed: The AppSettings.Port value is now also usable when connecting to a Name Server initially. This allows custom ports on a (custom) Name Server. - Added: Various details to the SupportLogger output. - Changed: Callback OnCreatedRoom() is now also triggered by the event Join. This is the same trigger as for JoinOrCreateRoom (if that created a new room). - Added: Player.HasRejoined value. This is set for the local and remote players and can help define the workflow on ReJoin. - Added: LoadBalancingClient.EnableProtocolFallback. If enabled, the client will try another protocol if the initial connect to the Name Server fails. - Added: AppSettings.EnableProtocolFallback with a default of true. Used in ConnectUsingSettings to set the client's value accordingly. - Internal: Added setting the LoadBalancingClient.Server in Connect and other places, so it should be accurate. - Added: Checks for connections on WebGL and Xbox One. Settings that can be corrected (to match the platform's requirements) are corrected with a log note. An Exception is thrown, if the settings can't be corrected automatically. This means Connect methods may throw an Exception in some cases, which are to be fixed during development time. - -Version 4.1.4.2 (8. May 2020 - rev5519) - Fixed: EventLeave handling. The IsInactive property is to false before doing the OnPlayerLeftRoom callback. - Note: Use Player.IsInactive to know the 'reason' for the callback. - -Version 4.1.4.0 (27. April 2020 rev5469) - Fixed: When connecting directly to a Master Server (self hosted), the serialization protocol 1.6 is used (not the detault 1.8). This was changed accidentally in v4.1.3.0 (and thus PUN 2.17). - Added: Connection state check in CheckIfOpCanBeSent() to fail early if an op can't be sent. - Updated: WebRPC handling and added an example to the doc of OnWebRpcResponse. - Added: Logging of OnJoinRoomFailed to SupportLogger. - Changed: StripKeysWithNullValues to reuse a list of key with null-values. This causes less allocations and garbage to clean. As a downside, the method now runs only for one thread (even for distinct IDictionary instances). This should not be a problem for the expected use case. - Changed: The LoadBalancingClient.OnStatusChanged will handle StatusCode.SendError as disconnect due to Exception. Log level INFO should log the inner exception when sending. - Fixed: Cleanup of the RoomReference for the local player object on disconnect. This prevents issues when setting properties, after joining and leaving a room (back on Master Server). - Internal: LoadBalancingClient.ExpectedProtocol is now a nullable property with private setter. It's used internally (only) to switch to the target transport protocol when Authmode AuthOnceWss is "done". - Fixed: EventLeave handling. When a player gets removed from the room, the IsInactive property must be set to false before doing the OnPlayerLeftRoom callback. Use Player.IsInactive to know the 'reason' for the callback. - -Version 4.1.3.0 (23.03.2020 rev5394) - Changed: Trying to set empty custom properties Hashtable will fail (return false) and log error. - Changed: In online mode, trying to set properties while not joined to a room will fail (return false) and log error. Caching local player properties could be allowed though. - Changed: Player.InternalCacheProperties is now "protected internal" and no longer "public". - Changed: LoadBalancingClient.OpSetPropertiesOfRoom is now "protected internal" and no longer "public". Use LoadBalancingClient.OpSetCustomPropertiesOfRoom or Room.SetCustomProperties. - Changed: StatusCode.EncryptionFailedToEstablish will cause disconnection with DisconnectCause.ExceptionOnConnect. - Changed: Fix for Unity cloud build context to prevent sanitization of server settings, it's not needed and for some reason doesn't detect the current server settings. - Changed: AppSettings. The NonSerialized attribute is now only used in Unity builds. - Changed: With the updated Photon library (v4.1.3.0), the encryption can be set to true on any connection, including WSS. It should not be used conditionally for Auth. - Changed: GetPingImplementation() new sets a default PhotonPingImplementation for UNITY_WEBGL, NETFX_CORE and regular Mono/.Net. - Internal: New datagram encryption mode DatagramEncryptionGCMRandomSequence (value 12). To be used later on. - Internal: The SocketWebTcp.SerializationProtocol is now selected by the PhotonSocket with the Peer's current value. It no longer needs to be set. - -Version 4.1.2.20 (12. December 2019 - rev5296) - Added: New callback IErrorInfoCallback.OnErrorInfo when the client receives an ErrorInfo event from the server. - Changed: RegionPinger use a singleton MonoBehaviourEmpty for coroutine ping in WebGL in Unity. - Added: LoadBalancingClient.SerializationProtocol property to get or set the binary protocol version. Use this always instead of setting it via LoadBalancingPeer.SerializationProtocolType. - Added: LoadBalancingClient.ConnectUsingSettings(AppSettings appSettings). This allows Best Region connect, setting a custom name server and much more. - Changed: Connect() is now ConnectToMasterServer(). Unlike ConnectUsingSettings(), this requires some settings to be done on the client. - Added: Return parameter for all methods that set properties on the server. - Note: Room.SetCustomProperties returns bool. If you did override this, your project will have errors, make sure to fix the return type. - Changed: Failed Authentication will no longer call the OnDisconnected callback twice. This should better align with expectations. - Internal: Pinging regions via coroutine (when Threads are unavailable) now uses only one GameObject for all pinging. - -Version 4.1.2.19 (12. November 2019 - rev5266) - Fixed: The ExpectedProtocol is now also set for Authmode "AuthOnce" for ConnectToNameServer and ConnectToRegionMaster. - Changed: Player.ToString() to show ActorNumber and NickName. The PlayerProperties are included in ToStringFull(). - Changed: Logging message for OpAuthenticateOnce (only logged at info level and up). - Changed: Avoiding a potential nullreference exception on leave of another player. - Updated: Cluster support. The LoadBalancingClient.CurrentCluster gives access to the current cluster. Region.SetCodeAndCluster() now separates the cluster string properly. See ConnectToRegionMaster, too. - Fixed: Changing the SupportLogger.Client now skips registering for callbacks, if the new value is null. - Changed: Logging of SupportLogger. - Added: LoadBalancingClient.OpJoinRandomOrCreateRoom. This can be used to create a room, should random matchmaking fail. This helps avoid race conditons where players can't find one another. - Added: Extra null-check in handling of event leave. - -Version 4.1.2.17 (9. August 2019 - rev5188) - Changed: SupportLogger. Traffic stats are enabled by default. The PhotonHandler no longer has to enable this. - Added: Min/max ping to logged statistics. SupportLogger.TrackValues is invoked to keep track of min/max ping for each connection. - Fixed: Statistics logging is started on Connect and stopped OnDisconnected(). - Changed: Callback registration. - Changed: All callback target changes are now queued in one queue and executed in order. This avoids cases where our implementation defined if a callback got added or removed, when a target got added and removed. - Changed: Duplicate addition and removal is now prevented. - Changed: The callback containers now know and use the LoadBalancingClient to update the targets. This means they don't need lists for additions and removals anymore. - Changed: Events will now also update the callback targets before executing the event callback. - Changed: WebRpcCallbacksContainer is now also a List like the other containers. This is simpler to maintain. The only "custom" callback implementation is that for events. This was an event delegate before and remains one. No change for this. - Changed: The callbacks to OnDisconnected(reason). On timeout or exception, there is now only one callback which happens after the client/peer is actually disconnected. The peer's status changes (timeout, etc.) are used to identify the reason but don't cause a callback on their own. Previously, you could run into more than one OnDisconnected call and fail to reconnect in the first one. - Changed: There are now fewer calls of OnDisconnected(). Example: A timeout disconnect caused two calls because signalled the timeout and the second signalled when the client locally finished disconnecting. Now, the DisconnectCause stores the reason and there is only one callback. - Changed: Internal use of DisconnectCause. It's now set in LBC.Disconnect() and by errors from the Peer. It's reset to "None" before calls to Peer.Connect(). - Removed: DisconnectCause enum values that were obsolete already. DisconnectByServerUserLimit is now MaxCcuReached. TimeoutDisconnect is now ClientTimeout. DisconnectByServer is now ServerTimeout. - Changed: OnStatusChanged() case Disconnect always sets the CurrentRoom to null. It is no longer used to store the roomname from the Master Server to use on the Game Server. - Removed: LoadBalancingClient.didAuthenticate, which is no longer needed for the cleaned up logic. - Changed: WebRpcResponse.ReturnCode -> ResultCode and WebRpcResponse.DebugMessage -> Message. - Changed: AuthenticationValues.ToString() to include more useful info. - Changed: Execution order for disconnect on quit. As OnApplicationQuit is followed by OnDisable, PUN now disconnects in OnDisable, if OnApplicationQuit was called previously. This means that you can now send a final message in OnApplicationQuit. It's not guaranteed to arrive anywhere, as the message won't be repeated on loss. - Removed: PhotonHandler.OnDestroy which was not needed anymore. OnDisable is also called when the app quits, so it's adequate to tear down the thread there. - Removed: Outdated and unused PingMonoEditor. - Changed: Random ID for each ping is now truly randomized. - Changed: Region pinging result logging. Per region, all rtts are available, as well as a previous summary (if any). Pun gets it via RegionHandler.GetResults(). - -Version 4.1.2.15 (7. June 2019 - rev5137) - Added: Options for OpFindFriends to filter which rooms should be returned by the server. The default is the same as before but now the friend list may exclude rooms which are not yet on the game server, invisible, closed (or any combination). - Added: SimulateConnectionLoss(bool) to simplify testing of connection loss. This uses the built-in network simulation to get a client timeout disconnect. - Removed: EventExt class, which only contained obsolete methods. - -Version 4.1.2.14 (6. May 2019 - rev5097) - Changed: Realtime API changes are now listed in a separate changes file. - Updated: Demos to make use of Sender and CustomData. - -Version 4.1.2.13 (3. May 2019 - rev5086) - Changed: Renamed ClientState items which ended on "Gameserver" and "Masterserver" to using PascalCase "GameServer" and "MasterServer". The previous names are obsolete to ease upgrading this, if needed. - Updated: Checks if any given operation can be sent (to the currently connected server) or not. As not all operations are available on all server types, this may help avoid some mismatches. - Fixed: BroadcastPropsChangeToAll is applied correctly (it wasn't used properly, when false). - Fixed: When in offline mode, OpSetPropertiesOfActor does not get called (it failed due to not being connected). - -Version 4.1.2.11 (15. April 2019 - rev5043) - Changed: InLobby property is now checking the State == JoinedLobby, which is analog to InRoom. - Changed: IsConnectedAndReady is now also false for ClientState.DisconnectingFromGameserver, DisconnectingFromMasterserver and DisconnectingFromNameServer. - Changed: GetGameList check if the filter is null or empty. It's not sent for empty filters. - Added: Nintendo Switch as CustomAuthenticationType. - -Version 4.1.2.10 (11. March 2019 - rev5023) - Changed: The cached "best region" is cleared whenever a region's pinging finishes. This fixes a potential issue when the BestRegion value is used before the pinging is done. Then, you end up with a wrong selection. - Changed: PhotonPing now reuses the Socket per region. - Changed: The RegionHandler now checks #if PING_VIA_COROUTINE to use a coroutine instead of a thread (per region). This is for WebGL exports from Unity. - Changed: The SupportLogger now uses a Stopwatch to log the time (not depending on Unity's APIs). - -Version 4.1.2.1 (31. July 2018 - rev4787) - Changed: OnStateChangeAction is now named StateChanged and provides a "previous state" value. State changes only trigger the event-call when the value actually changes. - Renamed: OnEventAction to EventReceived and OnOpResponseAction to OpResponseReceived. - Added: LoadBalancingClient now has AddCallbackTarget and RemoveCallbackTarget to simplify registering for various callbacks. - -Version 4.1.2.0 (3. May 2018 - rev4660) - Changed: The namespace to the simpler "Photon.Realtime". - Added: Various callbacks to signal specific situations / events. To get those, a class must implement the interface and be added to a list of "Targets". See: ILoadBalancingCallbacks. - Added: RegionHandler, which provides methods to ping a list of regions and to find the one with best ping. This moves PUN's "Best Region" feature to the LoadBalancing API. - Moved: The PhotonPing was part of the dll but is now part of LoadBalancing. - Added: LoadBalancingClient.UseAlternativeUdpPorts. This way, UDP may use ports of the Steam Multiplayer port-range by simply replacing existing port strings in addresses. - Changed: RaiseEvent now has an overload, that uses RaiseEventOptions and SendOptions. The old variant is obsolete but will still work. - Changed: CheckUserOnJoin is now set by default. The RoomOptions.CheckUserOnJoin got removed. - Added: Client-side checks and limits for OpFindFriends. - Added: Optional parameter sendAuthCookie to OpLeaveRoom. The app can control what's passed from Photon to a server via WebHook. - Changes: The room list for lobbies is no longer part of the LoadBalancingClient. Instead, implement the callback for the changed room list. - Added: AppSettings, a base class to host AppId and some settings for a title. This will help make it available across products. Right now, the LoadBalancingClient is not using it yet. - Changed: Player.ID is now .ActorNumber, which mirrors the server's naming. - Fixed: Unity compile defines to support Unity 2018, - -Version 4.1.1.18 (19. December 2017 - rev4540) - Changed: FriendInfo.Name is now "UserId", which is up to date with it's usage. - Changed: CheckUserOnJoin is now set by default. The RoomOptions.CheckUserOnJoin got removed. - -Version 4.1.1.17 (11. October 2017 - rev4465) - Changed: OperationCode const byte Join = 255 is now marked obsolete. We use "JoinGame" instead. - Added: DisconnectCause.AuthenticationTicketExpired. - Fixed: DebugReturn call in Unity WebGL. - -Version 4.1.1.15 (17. July 2017 - rev4232) - Added: LoadBalancingClient.TransportProtocol as shortcut to the use PhotonPeer's TransportProtocol value. This enables setting the protocol easily while not connected. - Added: LoadBalancingClient.SocketImplementationConfig as shortcut to modify PhotonPeer's SocketImplementationConfig. This enables you to setup which IPhotonSocket implementation to use for which network protocol. - Changed: LoadBalancingPeer.ConfigUnitySockets() to try to find our websocket implementations in the assembly, making the SocketWebTcpCoroutine and SocketWebTcpThread classes optional. - Removed: Class "SocketWebTcp" is no longer found by ConfigUnitySockets(). - -Version 4.1.1.14 (5. July 2017 - rev4191) - Changed: The ClientState "Uninitialized" is now "PeerCreated". This is the initial state. ConnectedToMaster is now ConnectedToMasterserver (both use the same value). - Updated: ClientState values descriptions. - Internal: GameEnteredOnGameServer() first sets the local player's actorNumber, then updates the player lists. - -Version 4.1.1.8 (24. February 2017 - rev3873) - Added: Player.UserId field and code to read published UserIds from the player properties in CacheProperties(). When publishing the UserId in a room (RoomOptions.PublishUserId = true), the UserId becomes available for all players in a room. Good to find/make friends or follow a team player into another room. - Added: New matchmaking operation: OpGetGameList(typedLobby, sqlFilter). This fetches a list of rooms that match the filter. You can show lists of rooms with specific properties, if needed (or still use OpJoinRandom). - Fixed: WebFlags properties setters. - -Version 4.1.1.7 (16. December 2016) - Fixed: Demos with persistent (Turnbased) games. The Memory Demo was not setting up rooms correctly (which led to errors joining them) and used a "join" rather than a "rejoin" to get into saved games (getting added to the room once more). - -Version 4.1.1.6 (9. December 2016 - rev3801) - Added: OpJoinRandom will now "remember" to send ExpectedUsers to the Game Server (by caching the value). - Added: AuthEvent and it's handling. This (internally sent) event can now update the client's token anytime (before that expires). - Added: LoadBalancingClient.OpChangeGroups(). - Changed: LoadBalancingClient.Disconnect() no longer sets it's own State to Disconnected. It waits till the state-change callback gets called by the lib. - -Version 4.1.1.2 (13. September 2016 - rev3652) - Removed: LoadBalancingClient.PlayerName and Player.Name. Were obsolete for more than a year. There is a NickName and the UserId can be set in the AuthValues. - Removed: OpJoinRoom() overload with actorNumber. This was obsolete. To enable clients to return to a room, set AuthValues and a userID. - Changed: LoadBalancingClient no longer overrides the protocol for Unity WebGL. This is done in the LoadBalancingPeer.ConfigUnitySockets(). - Changed: GetNameServerAddress() is the same in Chat and LoadBalancing APIs now. - Added: DisconnectCause.DisconnectByServerLogic and handling for this case. You can check this DisconnectedCause when the LoadBalancingClient.State is ClientState.Disconnected. - Added: Hashtable definition to use Photon's own implementation for Windows Store builds (NETFX_CORE). This must be used but it means you to use the same Hashtable definition in all builds (no matter if 8.1 or 10). - Added: Support for WebGL export in Unity. - Changed: OnStateChangeAction, OnEventAction and OnOpResponseAction are now events. To register a method in one of those, use += and to deregister you need to use -=. This prevents assigning a new method and de-registering any previously registered ones. - -Version 4.1.1.0 (15. August 2016 - rev3536) - Fixed: Room.ClearExpectedUsers() is now sending it's current, local "expected users" to update the server with "CAS" (Check and Swap). This gives the client an update when the values become valid (which updates the local cache after the roundtrip). - Added: Support for the 'Server Side Master Client' feature. The Room will read master client updates from the server accordingly. Room.SetMasterClient() enables you to override the server's selection (provided it did not change before your operation gets executed). - Changed: Option for bool WebForward into the new "WebFlags". This allows fine control of which data is being sent to WebHooks. This affects all SetProperties, OpWebRPC and the RaiseEventOptions. - Added: WebRPC.cs to the LoadBalancing API folder (was available separately before). It contains WebFlags and WebRpcResponse. - -Version 4.1.0.6 (21. June 2016 - rev3376) - Fixed: LoadBalancingPeer.OpRaiseEvent(...) to send operations (and events) unencrypted again. - -Version 4.1.0.2 (21. April 2016 - rev3283) - Added: Expected Users. This affects the Room, LoadBalancingClient, JoinRoom, JoinOrCreateRoom and CreateRoom. - Added: null check in Extensions.StripToStringKeys(). - Fixed: FriendInfo.IsInRoom, which returned the opposite of it's naming! Also changed FriendInfo ToString() according to PUN's. - Added: RoomInfo expectedUsersField, which is updated with room properties (well known ones). - Added: Room.ExpectedUsers and ClearExpectedUsers() to expose the list of expected players. - Added: RoomInfo.serverSideMasterClient and masterClientIdField (also updated with well known properties). - Changed: OpRaiseEvent now re-uses a Dictionary in the LoadBalancingPeer. It uses Clear(), rather than creating a new Dict each time. - Changed: AuthenticationValues to also use C# properties and and backup-fields. This is guaranteed to work in Unity. - Updated: EventCode ErrorInfo reference with a link to "WebHooks" doc online. - Changed: Disconnect handling in the LoadBalancingClient. The client should reset correctly and log info, if it's in a State where a disconnect is a proper error. Note: In some cases like "switching server", a disconnect is expected, so it's not an error then. - Fixed: PlayerProperties sent to game server will now include well-known properties again. This fixes the "NickName missing" bug. - Fixed: LoadBalancingClient.State value when the client fails to join or create a game on the Master Server. The state is correctly re-set to ClientState.JoinedLobby or ClientState.ConnectedToMaster. - Internal: Added private inLobby value, to store if the client was/is in a lobby on the Master Server. - Fixed: DemoClient (in demo-loadbalancing) now makes use of the Name Server by using: ConnectToRegionMaster("eu"). - Added: DemoClient now has debug output when the connection times out or can't be established. - -Version 4.0.5.1 (18. January 2016 - rev3187) - Added: OpSetCustomPropertiesOfActor() and OpSetCustomPropertiesOfRoom() now check locally, if the client is currently in a room. It must be, to be able to set these properties. An exception exists for setting properties for the local player's actorNumber, but those are better set via LoadBalancingClient.LocalPlayer. - -Version 4.0.0.11 (28. October 2015 - rev3093) - Added: LeaveLobby handling in OnOperationResponse(), which sets the client's state correctly. - Changed: Order of execution for Ev Join. If user is known (inactive user rejoins), the player's props are read. The actor list is used, if available. - Changed: RoomOptions to use properties with backup-fields to avoid issues in Unity which has issues with Object Initializer (curly brackets). - Changed: JoinMode 2 is now "JoinOrRejoin". Was: "Rejoin". - Added: ErrorCode constant AuthenticationTicketExpired. - Internal: OpJoinRoom, OpCreateRoom and OpJoinRandomRoom no longer use a (growing) list of properties. Instead, classes were created to "sum up" their parameters. The api for games didn't change. - Internal: Related to the refactoring of Join/Create, the LoadBalancingClient now creates a Room instance when the client arrived on the GameServer (before, it got created in the initial "create" call). - -Version 4.0.0.10 (14. July 2015 - rev2988) - Updated: Description for IsConnectedAndReady. - Changed: NameServerAddress to return a fitting address depending on protocol (including WebSocket but not yet RHTTP). - Updated: The only name server host is now "ns.exitgames.com", which gets turned into a proper address by protocol. - Changed: LoadBalancingClient.CustomAuthenticationValues is now .AuthValues. You can use those values to identify a user, even if you don't setup an external, custom authentication service. - Changed: LoadBalancingClient.UserId no longer directly stores the id but puts it into AuthValues. This means, the UserId could also be set via setting AuthValues. - Changed: The API of AuthenticationValues. There is now the UserId and AddAuthParameter() replaces the less general SetAuthParameters() (which only set specific key/values). - Changed: PlayerName gets renamed to NickName, so PhotonPlayer.Name becomes .NickName and LoadBalancingClient.Name becomes .NickName, too. The old naming is marked as obsolete. - Changed: Particle Demo now connects to the Cloud by default (because it's easier to setup and try). You can define your own Master Server (Photon OnPremise) of course. - Added: GamePropertyKey.MasterClientId (248) and ParameterCode.MasterClientId (203) - Added: ParameterCode.ExpectedValues (231) - Added: ParameterCode.SuppressRoomEvents (237) - -Version 4.0.0.6 (05. December 2014 - rev2758) - Added: LoadBalancingClient.OpJoinOrCreateRoom overload which has lobby as parameter. If a room gets created, this defines in which lobby it belongs. - Changed: LoadBalancingPeer: Added new error code PluginMismatch, documentation for Plugins parameter code. - -Version 4.0.0.1 (17. June 2014 - rev2663) - Added: LoadBalancingClient.OpRaiseEvent(). Now that LoadBalancingClient USES a loadBalancingPeer (and doesn't extend it), things are much easier by offering this method, too! - Added: LoadBalancingClient.IsConnected and .IsConnectedAndReady to LB API. Going to be part of the API from now on. - Removed: Unused fields clientId and clientCount. - Changed: Field for internal use "lastJoinActorNumber" is now private as intended. - Changed: LoadBalancingClient.Disconnect is now setting it's own state to Disconnected if the connection got closed (as expected). - -Version 4.0.0.0 (23. May 2014 - rev2614) - Changed: LoadBalancingClient.FriendList creation/update is delayed until the server's response is available. This avoids cases where the friends are offline for the moment between requesting the update and getting it. Initially, it is null as before. - Added: some methods to Player to find next player, etc. Useful for turnbased games to find an opponent. - Added: LoadBalancingClient.UserId, which is the ID of a user(account). This is used in FindFriends and when you fetch account-related data (like save-games for Turnbased games). Set it before Connect*(). As fallback when empty during connect, the PlayerName is used instead. - Removed: LoadBalancingPeer.OpSetCustomPropertiesOfActor and OpSetPropertyOfRoom which were too special to be so low level. Could be implemented to LBClient. - Fixed: OpJoinRandomRoom and OpCreateRoom which didn't reset the ActorNr to claim when entering the room. Depending on previous actions, some calls of those methods did fail when the actorNumber wasn't available. - Changed: OperationCode.Rpc is now called OperationCode.WebRpc. It's simply much cleaner (considering PUN has RPCs as well but in a different context). - Changed: WebRpcResponse reading to be able to handle additional data. - Added: Parameter webForward to: OpSetCustomPropertiesOfRoom and OpSetPropertiesOfRoom. The "old" overloads of these methods are still there, too. If webForward is true, the properties are sent to the WebHooks. \ No newline at end of file diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/changes-realtime.txt.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/changes-realtime.txt.meta deleted file mode 100644 index dbd18e453..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/Photon/PhotonRealtime/Code/changes-realtime.txt.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: a9ee7a0fb64bf7d45933dba06560c21c -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/PhotonRealtimeTransport.cs b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/PhotonRealtimeTransport.cs deleted file mode 100644 index 911a0f1eb..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/PhotonRealtimeTransport.cs +++ /dev/null @@ -1,565 +0,0 @@ -using ExitGames.Client.Photon; -using MLAPI.Serialization.Pooled; -using MLAPI.Transports.Tasks; -using Photon.Realtime; -using System; -using System.Collections.Generic; -using System.IO; -using MLAPI.Logging; -using UnityEngine; -using UnityEngine.Serialization; - -namespace MLAPI.Transports -{ - [DefaultExecutionOrder(-1000)] - public class PhotonRealtimeTransport : NetworkTransport - { - [Tooltip("The nickname of the player in the photon room. This value is only relevant for other photon realtime features. Leaving it empty generates a random name.")] - [SerializeField] - string m_NickName; - - [Header("Server Settings")] - [Tooltip("Unique name of the room for this session.")] - [SerializeField] - string m_RoomName; - - [Tooltip("The maximum amount of players allowed in the room.")] - [SerializeField] - byte m_MaxPlayers = 16; - - [Header("Advanced Settings")] - [Tooltip("The first byte of the range of photon event codes which this transport will reserve for unbatched messages. Should be set to a number lower then 200 to not interfere with photon internal events. Approximately 8 events will be reserved.")] - [SerializeField] - byte m_ChannelIdCodesStartRange = 130; - - [Tooltip("Attaches the photon support logger to the transport. Useful for debugging disconnects or other issues.")] - [SerializeField] - bool m_AttachSupportLogger = false; - - [Tooltip("The batching this transport should apply to MLAPI events. None only works for very simple scenes.")] - [SerializeField] - BatchMode m_BatchMode = BatchMode.SendAllReliable; - - [Tooltip("The maximum size of the send queue which batches MLAPI events into Photon events.")] - [SerializeField] - int m_SendQueueBatchSize = 4096; - - [Tooltip("The Photon event code which will be used to send batched data over MLAPI channels.")] - [SerializeField] - byte m_BatchedTransportEventCode = 129; - - SocketTask m_ConnectTask; - LoadBalancingClient m_Client; - - bool m_IsHostOrServer; - - readonly Dictionary m_ChannelToId = new Dictionary(); - readonly Dictionary m_IdToChannel = new Dictionary(); - readonly Dictionary m_Channels = new Dictionary(); - - /// - /// SendQueue dictionary is used to batch events instead of sending them immediately. - /// - readonly Dictionary m_SendQueue = new Dictionary(); - - /// - /// This exists to cache raise event options when calling Saves us from 2 allocations per send. - /// - RaiseEventOptions m_CachedRaiseEventOptions = new RaiseEventOptions() { TargetActors = new int[1] }; - - /// - public override ulong ServerClientId => GetMlapiClientId(0, true); - - /// - /// The room name to use when hosting/joining with this transport. - /// - public string RoomName - { - get => m_RoomName; - set => m_RoomName = value; - } - - /// - public override void Send(ulong clientId, ArraySegment data, NetworkChannel channel) - { - RealtimeChannel realtimeChannel = m_Channels[m_ChannelToId[channel]]; - - if (m_BatchMode == BatchMode.None) - { - RaisePhotonEvent(clientId, realtimeChannel.SendMode.Reliability, data, realtimeChannel.Id); - return; - } - - SendQueue queue; - SendTarget sendTarget = new SendTarget(clientId, realtimeChannel.SendMode.Reliability); - - if (m_BatchMode == BatchMode.SendAllReliable) - { - sendTarget.IsReliable = true; - } - - if (!m_SendQueue.TryGetValue(sendTarget, out queue)) - { - queue = new SendQueue(m_SendQueueBatchSize); - m_SendQueue.Add(sendTarget, queue); - } - - if (!queue.AddEvent(realtimeChannel.Id, data)) - { - // If we are in here data exceeded remaining queue size. This should not happen under normal operation. - if (data.Count > queue.Size) - { - // If data is too large to be batched, flush it out immediately. This happens with large initial spawn packets from MLAPI. - Debug.LogWarning($"Sent {data.Count} bytes on channel: {channel.ToString()}. Event size exceeds sendQueueBatchSize: ({m_SendQueueBatchSize})."); - RaisePhotonEvent(sendTarget.ClientId, sendTarget.IsReliable, data, realtimeChannel.Id); - } - else - { - var sendBuffer = queue.GetData(); - RaisePhotonEvent(sendTarget.ClientId, sendTarget.IsReliable, sendBuffer, m_BatchedTransportEventCode); - queue.Clear(); - queue.AddEvent(realtimeChannel.Id, data); - } - } - } - - /// - /// Flushes all send queues. (Raises photon events with data from their buffers and clears them) - /// - void FlushAllSendQueues() - { - foreach (var kvp in m_SendQueue) - { - if (kvp.Value.IsEmpty()) continue; - - var sendBuffer = kvp.Value.GetData(); - RaisePhotonEvent(kvp.Key.ClientId, kvp.Key.IsReliable, sendBuffer, m_BatchedTransportEventCode); - kvp.Value.Clear(); - } - } - - void RaisePhotonEvent(ulong clientId, bool isReliable, ArraySegment data, byte eventCode) - { - m_CachedRaiseEventOptions.TargetActors[0] = GetPhotonRealtimeId(clientId); - var sendOptions = isReliable ? SendOptions.SendReliable : SendOptions.SendUnreliable; - - // This allocates because data gets boxed to object. - m_Client.OpRaiseEvent(eventCode, data, m_CachedRaiseEventOptions, sendOptions); - } - - /// - /// Photon Realtime Transport is event based. Polling will always return nothing. - /// - public override NetworkEvent PollEvent(out ulong clientId, out NetworkChannel channel, out ArraySegment payload, out float receiveTime) - { - clientId = 0; - channel = default; - receiveTime = Time.realtimeSinceStartup; - return NetworkEvent.Nothing; - } - - /// - public override SocketTasks StartClient() - { - return ConnectPeer().AsTasks(); - } - - /// - public override SocketTasks StartServer() - { - var task = ConnectPeer(); - m_IsHostOrServer = true; - return task.AsTasks(); - } - - /// - /// Creates and connects a peer synchronously to the region master server and returns a containing the result. - /// - /// - SocketTask ConnectPeer() - { - m_ConnectTask = SocketTask.Working; - InitializeClient(); - - var connected = m_Client.ConnectUsingSettings(PhotonAppSettings.Instance.AppSettings); - - if (!connected) - { - m_ConnectTask = SocketTask.Fault; - m_ConnectTask.Message = $"Can't connect to region: {this.m_Client.CloudRegion}"; - } - - return m_ConnectTask; - } - - /// - public override void DisconnectRemoteClient(ulong clientId) - { - m_Client.CurrentRoom.RemovePlayer(m_Client.CurrentRoom.Players[GetPhotonRealtimeId(clientId)]); - } - - /// - public override void DisconnectLocalClient() - { - m_Client.Disconnect(); - } - - /// - public override ulong GetCurrentRtt(ulong clientId) - { - // This is only an approximate value based on the own client's rtt to the server and could cause issues, maybe use a similar approach as the Steamworks transport. - return (ulong)(m_Client.LoadBalancingPeer.RoundTripTime * 2); - } - - /// - public override void Shutdown() - { - if (m_Client != null) - { - m_Client.EventReceived -= ClientOnEventReceived; - if (m_Client.IsConnected) - { - m_Client.Disconnect(); - } - } - } - - /// - public override void Init() - { - for (byte i = 0; i < MLAPI_CHANNELS.Length; i++) - { - m_IdToChannel.Add((byte)(i + m_ChannelIdCodesStartRange), MLAPI_CHANNELS[i].Channel); - m_ChannelToId.Add(MLAPI_CHANNELS[i].Channel, (byte)(i + m_ChannelIdCodesStartRange)); - m_Channels.Add((byte)(i + m_ChannelIdCodesStartRange), new RealtimeChannel() - { - Id = (byte)(i + m_ChannelIdCodesStartRange), - SendMode = MlapiChannelTypeToSendOptions(MLAPI_CHANNELS[i].Delivery) - }); - } - } - - /// - /// In Update before other scripts run we dispatch incoming commands. - /// - void Update() - { - if (m_Client != null) - { - do { } while (m_Client.LoadBalancingPeer.DispatchIncomingCommands()); - } - } - - /// - /// Send batched messages out in LateUpdate. - /// - void LateUpdate() - { - FlushAllSendQueues(); - - if (m_Client != null) - { - do { } while (m_Client.LoadBalancingPeer.SendOutgoingCommands()); - } - } - - void InitializeClient() - { - // This is taken from a Photon Realtime sample to get a random user name if none is provided. - var nickName = string.IsNullOrEmpty(m_NickName) ? m_NickName : "usr" + SupportClass.ThreadSafeRandom.Next() % 99; - - if (m_Client == null) - { - m_Client = new LoadBalancingClient - { - LocalPlayer = { NickName = nickName }, - }; - } - - // these two settings enable (almost) zero alloc sending and receiving of byte[] content - this.m_Client.LoadBalancingPeer.ReuseEventInstance = true; - this.m_Client.LoadBalancingPeer.UseByteArraySlicePoolForEvents = true; - - m_Client.EventReceived += ClientOnEventReceived; - m_Client.StateChanged += ClientOnStateChanged; - } - - void ClientOnStateChanged(ClientState lastState, ClientState currentState) - { - switch (currentState) - { - case ClientState.ConnectedToMasterServer: - - // Once the client does connect to the master immediately redirect to its room. - var enterRoomParams = new EnterRoomParams() - { - RoomName = m_RoomName, - RoomOptions = new RoomOptions() - { - MaxPlayers = m_MaxPlayers, - } - }; - - var success = m_IsHostOrServer ? m_Client.OpCreateRoom(enterRoomParams) : m_Client.OpJoinRoom(enterRoomParams); - - if (!success) - { - m_ConnectTask.IsDone = true; - m_ConnectTask.Success = false; - m_ConnectTask.TransportException = new InvalidOperationException("Unable to create or join room."); - } - - break; - - case ClientState.Joined: - if (m_AttachSupportLogger) - { - var logger = gameObject.GetComponent() ?? gameObject.AddComponent(); - logger.Client = m_Client; - m_Client.ConnectionCallbackTargets.Add(logger); - } - - // Client connected to the room successfully, connection process is completed - m_ConnectTask.IsDone = true; - m_ConnectTask.Success = true; - break; - } - } - - void ClientOnEventReceived(EventData eventData) - { - var clientId = GetMlapiClientId(eventData.Sender, false); - var localClientId = GetMlapiClientId(m_Client.LocalPlayer.ActorNumber, false); - - // Clients should ignore connection events from other clients, server should ignore its own connection event. - var isRelevantConnectionUpdateMessage = m_IsHostOrServer ^ clientId == localClientId; - - NetworkEvent netEvent = NetworkEvent.Nothing; - ArraySegment payload = default; - NetworkChannel channel = default; - var receiveTime = Time.realtimeSinceStartup; - - switch (eventData.Code) - { - case EventCode.Leave: - if (isRelevantConnectionUpdateMessage) - { - netEvent = NetworkEvent.Disconnect; - } - - break; - - case EventCode.Join: - if (isRelevantConnectionUpdateMessage) - { - netEvent = NetworkEvent.Connect; - } - - break; - - default: - if (eventData.Code >= 200) { return; } // EventCode is a photon event. - - using (ByteArraySlice slice = eventData.CustomData as ByteArraySlice) - { - if (slice == null) - { - Debug.LogError("Photon option UseByteArraySlicePoolForEvents should be set to true."); - return; - } - - if (eventData.Code == this.m_BatchedTransportEventCode) - { - using (PooledNetworkBuffer stream = PooledNetworkBuffer.Get()) - { - // moving data from one pooled wrapper to another (for MLAPI to read incoming data) - stream.Position = 0; - stream.Write(slice.Buffer, slice.Offset, slice.Count); - stream.SetLength(slice.Count); - stream.Position = 0; - - using (PooledNetworkReader reader = PooledNetworkReader.Get(stream)) - { - while (stream.Position < stream.Length) - { - byte channelId = reader.ReadByteDirect(); - int length = reader.ReadInt32Packed(); - byte[] dataArray = reader.ReadByteArray(null, length); - - this.InvokeOnTransportEvent(NetworkEvent.Data, clientId, this.m_IdToChannel[channelId], new ArraySegment(dataArray, 0, dataArray.Length), receiveTime); - } - } - } - - return; - } - else - { - // Event is a non-batched data event. - netEvent = NetworkEvent.Data; - payload = new ArraySegment(slice.Buffer, slice.Offset, slice.Count); - channel = m_IdToChannel[eventData.Code]; - } - } - - break; - } - - if (netEvent == NetworkEvent.Nothing) return; - InvokeOnTransportEvent(netEvent, clientId, channel, payload, receiveTime); - } - - SendOptions MlapiChannelTypeToSendOptions(NetworkDelivery type) - { - switch (type) - { - case NetworkDelivery.Unreliable: - return SendOptions.SendUnreliable; - default: - return SendOptions.SendReliable; - } - } - - ulong GetMlapiClientId(int photonId, bool isServer) - { - if (isServer) - { - return 0; - } - else - { - return (ulong)(photonId + 1); - } - } - - int GetPhotonRealtimeId(ulong clientId) - { - if (clientId == 0) - { - return m_Client.CurrentRoom.masterClientId; - } - else - { - return (int)(clientId - 1); - } - } - - class SendQueue - { - MemoryStream m_Stream; - - /// - /// The size of the send queue. - /// - public int Size { get; } - - public SendQueue(int size) - { - Size = size; - byte[] buffer = new byte[size]; - m_Stream = new MemoryStream(buffer, 0, buffer.Length, true, true); - } - - /// - /// Ads an event to the send queue. - /// - /// The channel this event should be sent on. - /// The data to send. - /// True if the event was added successfully to the queue. False if there was no space in the queue. - internal bool AddEvent(byte channelId, ArraySegment data) - { - if (m_Stream.Position + data.Count + 4 > Size) - { - return false; - } - - using (PooledNetworkWriter writer = PooledNetworkWriter.Get(m_Stream)) - { - writer.WriteByte(channelId); - writer.WriteInt32Packed(data.Count); - Array.Copy(data.Array, data.Offset, m_Stream.GetBuffer(), m_Stream.Position, data.Count); - m_Stream.Position += data.Count; - } - - return true; - } - - internal void Clear() - { - m_Stream.Position = 0; - } - - internal bool IsEmpty() - { - return m_Stream.Position == 0; - } - - internal ArraySegment GetData() - { - return new ArraySegment(m_Stream.GetBuffer(), 0, (int)m_Stream.Position); - } - } - - struct RealtimeChannel - { - public byte Id; - public SendOptions SendMode; - } - - struct SendTarget: IEquatable - { - public ulong ClientId; - public bool IsReliable; - - public SendTarget(ulong clientId, bool isReliable) - { - ClientId = clientId; - IsReliable = isReliable; - } - - public override int GetHashCode() - { - unchecked - { - return (ClientId.GetHashCode() * 397) ^ IsReliable.GetHashCode(); - } - } - - public override bool Equals(object obj) - { - return obj is SendTarget other && Equals(other); - } - - public static bool operator ==(SendTarget a, SendTarget b) - { - return a.ClientId == b.ClientId && a.IsReliable == b.IsReliable; - } - - public static bool operator !=(SendTarget a, SendTarget b) - { - return !(a == b); - } - - public bool Equals(SendTarget other) - { - return ClientId == other.ClientId && IsReliable == other.IsReliable; - } - } - - enum BatchMode : byte - { - /// - /// The transport performs no batching. - /// - None = 0, - /// - /// Batches all MLAPI events into reliable sequenced messages. - /// - SendAllReliable = 1, - /// - /// Batches all reliable MLAPI events into a single photon event and all unreliable MLAPI events into an unreliable photon event. - /// - ReliableAndUnreliable = 2, - } - } -} diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/PhotonRealtimeTransport.cs.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/PhotonRealtimeTransport.cs.meta deleted file mode 100644 index c9e78b8f1..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/PhotonRealtimeTransport.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 52c005b32a68a254cbe502a4e5cb8eb6 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/com.unity.multiplayer.transport.photon-realtime.asmdef b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/com.unity.multiplayer.transport.photon-realtime.asmdef deleted file mode 100644 index f8efbf6e8..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/com.unity.multiplayer.transport.photon-realtime.asmdef +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "Photon Realtime MLAPI Transport", - "rootNamespace": "", - "references": [ - "Unity.Multiplayer.MLAPI.Runtime" - ], - "includePlatforms": [], - "excludePlatforms": [], - "allowUnsafeCode": false, - "overrideReferences": false, - "precompiledReferences": [], - "autoReferenced": false, - "defineConstraints": [], - "versionDefines": [], - "noEngineReferences": false -} \ No newline at end of file diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/com.unity.multiplayer.transport.photon-realtime.asmdef.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/com.unity.multiplayer.transport.photon-realtime.asmdef.meta deleted file mode 100644 index ed60ce6a1..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/Runtime/com.unity.multiplayer.transport.photon-realtime.asmdef.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 1f4d40f5e4a05e64e9b596637963c0bc -AssemblyDefinitionImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/package.json b/Packages/com.unity.multiplayer.transport.photon-realtime/package.json deleted file mode 100644 index ffe7e1b5d..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/package.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "com.unity.multiplayer.transport.photon-realtime", - "displayName": "Photon Realtime Transport for MLAPI", - "version": "0.0.1-preview.1", - "unity": "2019.4", - "unityRelease": "8f1", - "description": "Photon Realtime Transport for MLAPI", - "keywords": [ - "unity" - ], - "dependencies": { - "com.unity.multiplayer.mlapi": "0.0.1-preview.1" - }, - "type": "library", - "hideInEditor": false -} diff --git a/Packages/com.unity.multiplayer.transport.photon-realtime/package.json.meta b/Packages/com.unity.multiplayer.transport.photon-realtime/package.json.meta deleted file mode 100644 index 086034882..000000000 --- a/Packages/com.unity.multiplayer.transport.photon-realtime/package.json.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: e4872529c0db1774fb1d8d148ff0e2ed -PackageManifestImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/manifest.json b/Packages/manifest.json index 4c025729e..239931535 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -1,5 +1,7 @@ { "dependencies": { + "com.mlapi.contrib.transport.photon-realtime": "https://github.com/Unity-Technologies/mlapi-community-contributions.git?path=/Transports/com.mlapi.contrib.transport.photon-realtime#3f0350ae57befd5ea7deabb1db310eb77704f58e", + "com.mlapi.contrib.transport.litenetlib": "https://github.com/Unity-Technologies/mlapi-community-contributions.git?path=/Transports/com.mlapi.contrib.transport.litenetlib#3f0350ae57befd5ea7deabb1db310eb77704f58e", "com.unity.2d.sprite": "1.0.0", "com.unity.ai.navigation.components": "https://github.com/Unity-Technologies/NavMeshComponents.git#package", "com.unity.cinemachine": "2.6.3", diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json index 0ff209a44..582c08f84 100644 --- a/Packages/packages-lock.json +++ b/Packages/packages-lock.json @@ -1,5 +1,19 @@ { "dependencies": { + "com.mlapi.contrib.transport.litenetlib": { + "version": "https://github.com/Unity-Technologies/mlapi-community-contributions.git?path=/Transports/com.mlapi.contrib.transport.litenetlib#3f0350ae57befd5ea7deabb1db310eb77704f58e", + "depth": 0, + "source": "git", + "dependencies": {}, + "hash": "3f0350ae57befd5ea7deabb1db310eb77704f58e" + }, + "com.mlapi.contrib.transport.photon-realtime": { + "version": "https://github.com/Unity-Technologies/mlapi-community-contributions.git?path=/Transports/com.mlapi.contrib.transport.photon-realtime#3f0350ae57befd5ea7deabb1db310eb77704f58e", + "depth": 0, + "source": "git", + "dependencies": {}, + "hash": "3f0350ae57befd5ea7deabb1db310eb77704f58e" + }, "com.unity.2d.sprite": { "version": "1.0.0", "depth": 0, @@ -13,7 +27,7 @@ "dependencies": { "com.unity.modules.ai": "1.0.0" }, - "hash": "49d0b3b11730c51c48ce0bcc5d6cc718d061045d" + "hash": "0fc6f532e4f47d66d173314efcb906bc7cf0d00f" }, "com.unity.cinemachine": { "version": "2.6.3", @@ -83,9 +97,11 @@ "depth": 0, "source": "git", "dependencies": { + "com.unity.modules.ai": "1.0.0", + "com.unity.modules.animation": "1.0.0", "com.unity.nuget.mono-cecil": "1.10.1-preview.1" }, - "hash": "56a02e6acd970cf8555e436b1fb6be08d4f27c41" + "hash": "3e3aef6aa02c2a25359898319e5bd49d3518b57b" }, "com.unity.multiplayer.samples.coop": { "version": "file:com.unity.multiplayer.samples.coop", @@ -103,22 +119,6 @@ "com.unity.modules.ui": "1.0.0" } }, - "com.unity.multiplayer.transport.litenet": { - "version": "file:com.unity.multiplayer.transport.litenet", - "depth": 0, - "source": "embedded", - "dependencies": { - "com.unity.multiplayer.mlapi": "0.0.1-preview.1" - } - }, - "com.unity.multiplayer.transport.photon-realtime": { - "version": "file:com.unity.multiplayer.transport.photon-realtime", - "depth": 0, - "source": "embedded", - "dependencies": { - "com.unity.multiplayer.mlapi": "0.0.1-preview.1" - } - }, "com.unity.nuget.mono-cecil": { "version": "1.10.1-preview.1", "depth": 1, diff --git a/ProjectSettings/GraphicsSettings.asset b/ProjectSettings/GraphicsSettings.asset index e5ecc1b2a..58da66aa7 100644 --- a/ProjectSettings/GraphicsSettings.asset +++ b/ProjectSettings/GraphicsSettings.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5499c7b9da6861f4a1f60e6e1c3131d4b853f7adbc16cae97baf3c6495108246 -size 3638 +oid sha256:ce70eff53628033c48098b341ff7b3d0cf7eae63a1b7cf8eb59ad94d5f7cdac8 +size 3707 diff --git a/README.md b/README.md index dc697aac3..3601e75bf 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,27 @@ ![Banner](Documentation/Images/Banner.png) -# BossRoom - co-op multiplayer RPG built with Unity MLAPI +# Boss Room - co-op multiplayer RPG built with Unity MLAPI ->**IMPORTANT**: This project is currently experimental. +| 🛑 IMPORTANT - Early Access 🛑 | +| -- | +| Boss Room: Small Scale Co-op Sample is built on top of the MLAPI package. The MLAPI package is on the road to being a fully featured solution. We have solutions architects available on Discord and forums to help you work through issues you encounter. | -BossRoom is a fully functional co-op multiplayer RPG made in Unity and MLAPI. It is built to serve as an educational sample that showcases certain typical gameplay patterns that are frequently featured in similar games. +Boss Room is a fully functional co-op multiplayer RPG made with Unity MLAPI. It is built to serve as an educational sample that showcases certain typical gameplay patterns that are frequently featured in similar games. -Our intention is that you can use everything in this project as a starting point or as bits and pieces in your own Unity games. The project is licensed under the Unity Companion License. See [LICENSE](LICENSE) for more legal information. +Our intention is that you can use everything in this project as a starting point or as bits and pieces in your own Unity games. The project is licensed under the Unity Companion License. See [LICENSE.md](LICENSE.md) for more legal information. ``` Platforms : Windows, Mac ``` +![](Documentation/Images/3Players.png) +![](Documentation/Images/Boss.png) + ## Getting the project - - A release version can be downloaded from the [Releases](https://github.com/Unity-Technologies/com.unity.multiplayer.samples.coop/releases) page. + - The early access version can be downloaded from the [Releases](https://github.com/Unity-Technologies/com.unity.multiplayer.samples.coop/releases) page. - Alternatively: click the green `Code` button and then choose to download the zip archive. Remember, that you would download the branch that you are currently viewing in Github. + - For Windows users: Using Windows' built-in extracting tool may generate a "Error 0x80010135: Path too long" error window which can invalidate the extraction process. A workaround for this is to shorten the zip file to a single character (eg. "c.zip") and move it to the shortest path on your computer (most often right at C:\\) and retry. If that solution fails, another workaround is to extract the downloaded zip file using 7zip. + ## Installing Git LFS @@ -22,7 +29,7 @@ This project uses Git Large Files Support (LFS), which ensures all large assets ## Opening the project for the first time -Once you have downloaded the project the steps below should get you up and running: +Once you have downloaded the project, the steps below should get you up and running: - Make sure you have installed the version of Unity that is listed above in the prerequisites section. - Make sure to include standalone support for Windows/Mac in your installation. - Add the project in _Unity Hub_ by clicking on **Add** button and pointing it to the root folder of the downloaded project. @@ -51,11 +58,16 @@ After the build has completed you can launch several instances of the built exec --------------- **Multiplayer over internet** -In contrast to running a local setup, when playing over internet we don't neccessarily need a built executable. We can just run the game in editor. +In order to play over internet, we need to have a built executable that is shared between all players. See the previous section. + +It is possible to connect between multiple instances of the same executable OR between executables and the editor that produced said executable. + +Running the game over internet currently requires setting up a [Photon Transport for MLAPI](https://github.com/Unity-Technologies/mlapi-community-contributions), which uses Photon relay server to facilitate communication between clients and server living on different networks. -Running the game over internet currently requires setting up a [Photon Transport for MLAPI](https://github.com/Unity-Technologies/mlapi-community-contributions), which uses Photon relay server to facilitate communication between clients and server living on different networks. +> Checkout our Photon-Realtime setup guide, here: +> [Boss Room Photon Setup Guide](Documentation/Photon-Realtime/Readme.md) -Alternatively you can use Port Forwarding. The wonderful https://portforward.com/ site has guides on how to enable port forwarding on a huge number of routers. BossRoom uses `UDP` and needs a `9998` external port to be open. +Alternatively you can use Port Forwarding. The wonderful https://portforward.com/ site has guides on how to enable port forwarding on a huge number of routers. Boss Room uses `UDP` and needs a `9998` external port to be open. ------------------------------------------ @@ -68,7 +80,11 @@ The game is server-authoritative, with latency-masking animations. Position upda Code is organized into three separate assemblies: **Client**, **Shared** and **Server** which reference each other when appropriate. -For an in-depth overview of the project's architecture please check out our [ARCHITECTURE.md](ARCHITECTURE.md). +For an overview of the project's architecture please check out our [ARCHITECTURE.md](ARCHITECTURE.md). + +--------------- + +For a deep dive in MLAPI and Boss Room, visit our [doc](https://docs-multiplayer.unity3d.com/) and [Learn](https://docs-multiplayer.unity3d.com/docs/learn/introduction) sections. ## Contributing