clean up BallPool

master
chwan1 6 years ago
parent 949a4ea7f3
commit 0c7e78026d
  1. 3
      .gitmodules
  2. 615
      Unity-19050-05-BallPool/Assets/Frozen/Frozen.unity
  3. 5
      Unity-19050-05-BallPool/Assets/Frozen/Material/Point.mat
  4. 47
      Unity-19050-05-BallPool/Assets/Frozen/ScenePostProcessingProfile.asset
  5. 3
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Plugins.meta
  6. 31
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Plugins/AVProQuickTime.bundle.meta
  7. 48
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Plugins/AVProQuickTime.bundle/Contents/Info.plist
  8. 6
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Plugins/AVProQuickTime.bundle/Contents/Info.plist.meta
  9. BIN
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Plugins/AVProQuickTime.bundle/Contents/MacOS/UnityQT
  10. 6
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Plugins/AVProQuickTime.bundle/Contents/MacOS/UnityQT.meta
  11. BIN
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Plugins/AVProQuickTime.bundle/Contents/Resources/English.lproj/InfoPlist.strings
  12. 6
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Plugins/AVProQuickTime.bundle/Contents/Resources/English.lproj/InfoPlist.strings.meta
  13. 9
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Plugins/Metro.meta
  14. BIN
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Plugins/Metro/KinectUnityAddin.dll
  15. 62
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Plugins/Metro/KinectUnityAddin.dll.meta
  16. 9
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Plugins/x86.meta
  17. BIN
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Plugins/x86/AVProQuickTime.dll
  18. 64
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Plugins/x86/AVProQuickTime.dll.meta
  19. BIN
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Plugins/x86/KinectUnityAddin.dll
  20. 62
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Plugins/x86/KinectUnityAddin.dll.meta
  21. BIN
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Plugins/x86/NativeSpoutPlugin_2_006.dll
  22. 76
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Plugins/x86/NativeSpoutPlugin_2_006.dll.meta
  23. BIN
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Plugins/x86/NativeSpoutPlugin_2_006_Debug.dll
  24. 76
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Plugins/x86/NativeSpoutPlugin_2_006_Debug.dll.meta
  25. BIN
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Plugins/x86/System.Drawing.dll
  26. 68
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Plugins/x86/System.Drawing.dll.meta
  27. BIN
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Plugins/x86/System.Windows.Forms.dll
  28. 68
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Plugins/x86/System.Windows.Forms.dll.meta
  29. 3
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Plugins/x86_64.meta
  30. BIN
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Plugins/x86_64/KinectUnityAddin.dll
  31. 62
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Plugins/x86_64/KinectUnityAddin.dll.meta
  32. 86
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Plugins/x86_64/NativeSpoutPlugin_2_006.dll.meta
  33. BIN
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Plugins/x86_64/NativeSpoutPlugin_2_006_Debug.dll
  34. 76
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Plugins/x86_64/NativeSpoutPlugin_2_006_Debug.dll.meta
  35. 9
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Spout.meta
  36. 9
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Spout/Editor.meta
  37. 134
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Spout/Editor/SpoutReceiverEditor.cs
  38. 8
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Spout/Editor/SpoutReceiverEditor.cs.meta
  39. 9
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Spout/Scripts.meta
  40. 31
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Spout/Scripts/InvertCamera.cs
  41. 563
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Spout/Scripts/Spout.cs
  42. 201
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Spout/Scripts/SpoutReceiver.cs
  43. 236
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Spout/Scripts/SpoutSender.cs
  44. 82
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Spout/Scripts/TextureInfo.cs
  45. 8
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/Spout/Scripts/TextureInfo.cs.meta
  46. 9
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext.meta
  47. 38
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/Hook.cs
  48. 8
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/Hook.cs.meta
  49. 5
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/HotKeys.meta
  50. 33
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/HotKeys/HotKeyArgs.cs
  51. 8
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/HotKeys/HotKeyArgs.cs.meta
  52. 287
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/HotKeys/HotKeySet.cs
  53. 8
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/HotKeys/HotKeySet.cs.meta
  54. 48
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/HotKeys/HotKeySetCollection.cs
  55. 8
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/HotKeys/HotKeySetCollection.cs.meta
  56. 4
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/HotKeys/HotKeySetsListener.cs
  57. 8
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/HotKeys/HotKeySetsListener.cs.meta
  58. 85
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/HotKeys/ReadMe.txt
  59. 4
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/HotKeys/ReadMe.txt.meta
  60. 43
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/IKeyboardEvents.cs
  61. 8
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/IKeyboardEvents.cs.meta
  62. 15
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/IKeyboardMouseEvents.cs
  63. 8
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/IKeyboardMouseEvents.cs.meta
  64. 110
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/IMouseEvents.cs
  65. 8
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/IMouseEvents.cs.meta
  66. 5
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/Implementation.meta
  67. 19
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/Implementation/AppEventFacade.cs
  68. 8
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/Implementation/AppEventFacade.cs.meta
  69. 27
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/Implementation/AppKeyListener.cs
  70. 8
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/Implementation/AppKeyListener.cs.meta
  71. 21
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/Implementation/AppMouseListener.cs
  72. 8
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/Implementation/AppMouseListener.cs.meta
  73. 26
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/Implementation/BaseListener.cs
  74. 8
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/Implementation/BaseListener.cs.meta
  75. 33
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/Implementation/ButtonSet.cs
  76. 8
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/Implementation/ButtonSet.cs.meta
  77. 10
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/Implementation/Callback.cs
  78. 8
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/Implementation/Callback.cs.meta
  79. 143
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/Implementation/EventFacade.cs
  80. 8
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/Implementation/EventFacade.cs.meta
  81. 19
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/Implementation/GlobalEventFacade.cs
  82. 8
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/Implementation/GlobalEventFacade.cs.meta
  83. 27
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/Implementation/GlobalKeyListener.cs
  84. 8
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/Implementation/GlobalKeyListener.cs.meta
  85. 73
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/Implementation/GlobalMouseListener.cs
  86. 8
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/Implementation/GlobalMouseListener.cs.meta
  87. 71
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/Implementation/KeyListener.cs
  88. 8
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/Implementation/KeyListener.cs.meta
  89. 111
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/Implementation/KeyboardState.cs
  90. 8
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/Implementation/KeyboardState.cs.meta
  91. 299
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/Implementation/MouseListener.cs
  92. 8
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/Implementation/MouseListener.cs.meta
  93. 10
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/Implementation/Subscribe.cs
  94. 8
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/Implementation/Subscribe.cs.meta
  95. 128
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/KeyEventArgsExt.cs
  96. 8
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/KeyEventArgsExt.cs.meta
  97. 119
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/KeyPressEventArgsExt.cs
  98. 8
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/KeyPressEventArgsExt.cs.meta
  99. 211
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/MouseEventExtArgs.cs
  100. 8
      Unity-19050-05-BallPool/Assets/UnityUtils/3rdParty/globalmousekeyhook-vNext/MouseEventExtArgs.cs.meta
  101. Some files were not shown because too many files have changed in this diff Show More

3
.gitmodules vendored

@ -31,3 +31,6 @@
[submodule "_Package/com.ultracombos.tuio"] [submodule "_Package/com.ultracombos.tuio"]
path = _Package/com.ultracombos.tuio path = _Package/com.ultracombos.tuio
url = https://github.com/UltraCombos/com.ultracombos.tuio url = https://github.com/UltraCombos/com.ultracombos.tuio
[submodule "_Package/jp.keijiro.klak.spout"]
path = _Package/jp.keijiro.klak.spout
url = "https://github.com/keijiro/KlakSpout#upm"

@ -38,7 +38,7 @@ RenderSettings:
m_ReflectionIntensity: 1 m_ReflectionIntensity: 1
m_CustomReflection: {fileID: 0} m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 1071731254} m_Sun: {fileID: 1071731254}
m_IndirectSpecularColor: {r: 0.021216419, g: 0.053037524, b: 0.08577964, a: 1} m_IndirectSpecularColor: {r: 0.021216419, g: 0.053037528, b: 0.08577963, a: 1}
m_UseRadianceAmbientProbe: 0 m_UseRadianceAmbientProbe: 0
--- !u!157 &3 --- !u!157 &3
LightmapSettings: LightmapSettings:
@ -694,7 +694,7 @@ Transform:
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: [] m_Children: []
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 7 m_RootOrder: 6
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &145750430 --- !u!1 &145750430
GameObject: GameObject:
@ -724,98 +724,7 @@ Transform:
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: [] m_Children: []
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 9 m_RootOrder: 8
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &151858420
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 151858424}
- component: {fileID: 151858423}
- component: {fileID: 151858422}
- component: {fileID: 151858421}
m_Layer: 0
m_Name: Main Camera
m_TagString: MainCamera
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!81 &151858421
AudioListener:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 151858420}
m_Enabled: 1
--- !u!124 &151858422
Behaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 151858420}
m_Enabled: 1
--- !u!20 &151858423
Camera:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 151858420}
m_Enabled: 1
serializedVersion: 2
m_ClearFlags: 1
m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
m_projectionMatrixMode: 1
m_SensorSize: {x: 36, y: 24}
m_LensShift: {x: 0, y: 0}
m_GateFitMode: 2
m_FocalLength: 50
m_NormalizedViewPortRect:
serializedVersion: 2
x: 0
y: 0
width: 1
height: 1
near clip plane: 0.3
far clip plane: 1000
field of view: 60
orthographic: 0
orthographic size: 5
m_Depth: -1
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_RenderingPath: 1
m_TargetTexture: {fileID: 0}
m_TargetDisplay: 0
m_TargetEye: 3
m_HDR: 0
m_AllowMSAA: 0
m_AllowDynamicResolution: 0
m_ForceIntoRT: 1
m_OcclusionCulling: 1
m_StereoConvergence: 10
m_StereoSeparation: 0.022
--- !u!4 &151858424
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 151858420}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 1.5, z: -2.73}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &164987818 --- !u!1 &164987818
GameObject: GameObject:
@ -1375,6 +1284,166 @@ MonoBehaviour:
m_CallState: 2 m_CallState: 2
mode: 0 mode: 0
info: info:
--- !u!43 &252394921
Mesh:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: 'Space Ground Mesh: (8x5x3)'
serializedVersion: 9
m_SubMeshes:
- serializedVersion: 2
firstByte: 0
indexCount: 24
topology: 0
baseVertex: 0
firstVertex: 0
vertexCount: 16
localAABB:
m_Center: {x: 0, y: 1.5, z: 0}
m_Extent: {x: 4, y: 1.5, z: 2.5}
m_Shapes:
vertices: []
shapes: []
channels: []
fullWeights: []
m_BindPose: []
m_BoneNameHashes:
m_RootBoneNameHash: 0
m_MeshCompression: 0
m_IsReadable: 0
m_KeepVertices: 1
m_KeepIndices: 1
m_IndexFormat: 0
m_IndexBuffer: 000001000200010003000200040005000600050007000600080009000a0009000b000a000c000d000e000d000f000e00
m_VertexData:
serializedVersion: 2
m_VertexCount: 16
m_Channels:
- stream: 0
offset: 0
format: 0
dimension: 3
- stream: 0
offset: 12
format: 0
dimension: 3
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 24
format: 0
dimension: 2
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
m_DataSize: 512
_typelessdata: 000080c000000000000020c0000000000000803f00000000e4388e3e00000000000080c00000000000002040000000000000803f00000000e4388e3e0000203f0000804000000000000020c0000000000000803f000000008ee3383f00000000000080400000000000002040000000000000803f000000008ee3383f0000203f000080c000000000000020400000000000000000000080bfe4388e3e0000203f000080c000004040000020400000000000000000000080bfe4388e3e0000803f0000804000000000000020400000000000000000000080bf8ee3383f0000203f0000804000004040000020400000000000000000000080bf8ee3383f0000803f000080c000000000000020c00000803f0000000000000000000000000000203f000080c000004040000020c00000803f0000000000000000000000000000803f000080c000000000000020400000803f0000000000000000e4388e3e0000203f000080c000004040000020400000803f0000000000000000e4388e3e0000803f000080400000000000002040000080bf00000000000000008ee3383f0000203f000080400000404000002040000080bf00000000000000008ee3383f0000803f0000804000000000000020c0000080bf00000000000000000000803f0000203f0000804000004040000020c0000080bf00000000000000000000803f0000803f
m_CompressedMesh:
m_Vertices:
m_NumItems: 0
m_Range: 0
m_Start: 0
m_Data:
m_BitSize: 0
m_UV:
m_NumItems: 0
m_Range: 0
m_Start: 0
m_Data:
m_BitSize: 0
m_Normals:
m_NumItems: 0
m_Range: 0
m_Start: 0
m_Data:
m_BitSize: 0
m_Tangents:
m_NumItems: 0
m_Range: 0
m_Start: 0
m_Data:
m_BitSize: 0
m_Weights:
m_NumItems: 0
m_Data:
m_BitSize: 0
m_NormalSigns:
m_NumItems: 0
m_Data:
m_BitSize: 0
m_TangentSigns:
m_NumItems: 0
m_Data:
m_BitSize: 0
m_FloatColors:
m_NumItems: 0
m_Range: 0
m_Start: 0
m_Data:
m_BitSize: 0
m_BoneIndices:
m_NumItems: 0
m_Data:
m_BitSize: 0
m_Triangles:
m_NumItems: 0
m_Data:
m_BitSize: 0
m_UVInfo: 0
m_LocalAABB:
m_Center: {x: 0, y: 1.5, z: 0}
m_Extent: {x: 4, y: 1.5, z: 2.5}
m_MeshUsageFlags: 0
m_BakedConvexCollisionMesh:
m_BakedTriangleCollisionMesh:
m_MeshMetrics[0]: 1
m_MeshMetrics[1]: 1
m_MeshOptimized: 0
m_StreamData:
offset: 0
size: 0
path:
--- !u!1 &260126567 --- !u!1 &260126567
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -1518,50 +1587,6 @@ MeshFilter:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 276089015} m_GameObject: {fileID: 276089015}
m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}
--- !u!1 &282141325
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 282141327}
- component: {fileID: 282141326}
m_Layer: 0
m_Name: Spout
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &282141326
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 282141325}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: aa175692d4b749244b474315598e4d14, type: 3}
m_Name:
m_EditorClassIdentifier:
_isEnabledInEditor: 0
--- !u!4 &282141327
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 282141325}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &314832561 --- !u!1 &314832561
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -1668,7 +1693,7 @@ Transform:
- {fileID: 199010598} - {fileID: 199010598}
- {fileID: 368474577} - {fileID: 368474577}
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 15 m_RootOrder: 14
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &351311318 --- !u!1 &351311318
GameObject: GameObject:
@ -1930,7 +1955,7 @@ Transform:
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: [] m_Children: []
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 10 m_RootOrder: 9
m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0}
--- !u!1 &386695295 --- !u!1 &386695295
GameObject: GameObject:
@ -1960,7 +1985,7 @@ Transform:
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: [] m_Children: []
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 8 m_RootOrder: 7
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &391089468 --- !u!1 &391089468
GameObject: GameObject:
@ -2298,7 +2323,7 @@ Transform:
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: [] m_Children: []
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 19 m_RootOrder: 18
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &436028452 --- !u!1 &436028452
GameObject: GameObject:
@ -2429,7 +2454,7 @@ RectTransform:
- {fileID: 770059767} - {fileID: 770059767}
- {fileID: 1774693142} - {fileID: 1774693142}
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 18 m_RootOrder: 17
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0} m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0}
@ -2520,31 +2545,13 @@ GameObject:
m_Component: m_Component:
- component: {fileID: 520040869} - component: {fileID: 520040869}
- component: {fileID: 520040868} - component: {fileID: 520040868}
- component: {fileID: 520040866}
m_Layer: 0 m_Layer: 0
m_Name: Final Camera m_Name: Monitor Camera
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
m_IsActive: 1 m_IsActive: 1
--- !u!114 &520040866
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 520040865}
m_Enabled: 0
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 542c4b2aee71a0142928f8b82f70141f, type: 3}
m_Name:
m_EditorClassIdentifier:
sharingName: FrozenSpout
textureFormat: 28
yFlip: 1
output: {fileID: 0}
m_Shader: {fileID: 4800000, guid: ca95743014f24fd49897e12abbe931fc, type: 3}
--- !u!20 &520040868 --- !u!20 &520040868
Camera: Camera:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -2599,7 +2606,7 @@ Transform:
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: [] m_Children: []
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 23 m_RootOrder: 22
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &565906440 --- !u!1 &565906440
GameObject: GameObject:
@ -2874,7 +2881,7 @@ PrefabInstance:
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 4472652550524646, guid: 1f68bf7cec2600e49a46d2f0554453c8, type: 3} - target: {fileID: 4472652550524646, guid: 1f68bf7cec2600e49a46d2f0554453c8, type: 3}
propertyPath: m_RootOrder propertyPath: m_RootOrder
value: 4 value: 3
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 114080462365263002, guid: 1f68bf7cec2600e49a46d2f0554453c8, - target: {fileID: 114080462365263002, guid: 1f68bf7cec2600e49a46d2f0554453c8,
type: 3} type: 3}
@ -3089,7 +3096,7 @@ Transform:
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: [] m_Children: []
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 12 m_RootOrder: 11
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &663412325 --- !u!1 &663412325
GameObject: GameObject:
@ -3309,166 +3316,6 @@ MeshFilter:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 681228290} m_GameObject: {fileID: 681228290}
m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}
--- !u!43 &731219095
Mesh:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: 'Space Ground Mesh: (8x5x3)'
serializedVersion: 9
m_SubMeshes:
- serializedVersion: 2
firstByte: 0
indexCount: 24
topology: 0
baseVertex: 0
firstVertex: 0
vertexCount: 16
localAABB:
m_Center: {x: 0, y: 1.5, z: 0}
m_Extent: {x: 4, y: 1.5, z: 2.5}
m_Shapes:
vertices: []
shapes: []
channels: []
fullWeights: []
m_BindPose: []
m_BoneNameHashes:
m_RootBoneNameHash: 0
m_MeshCompression: 0
m_IsReadable: 0
m_KeepVertices: 1
m_KeepIndices: 1
m_IndexFormat: 0
m_IndexBuffer: 000001000200010003000200040005000600050007000600080009000a0009000b000a000c000d000e000d000f000e00
m_VertexData:
serializedVersion: 2
m_VertexCount: 16
m_Channels:
- stream: 0
offset: 0
format: 0
dimension: 3
- stream: 0
offset: 12
format: 0
dimension: 3
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 24
format: 0
dimension: 2
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
- stream: 0
offset: 0
format: 0
dimension: 0
m_DataSize: 512
_typelessdata: 000080c000000000000020c0000000000000803f00000000e4388e3e00000000000080c00000000000002040000000000000803f00000000e4388e3e0000203f0000804000000000000020c0000000000000803f000000008ee3383f00000000000080400000000000002040000000000000803f000000008ee3383f0000203f000080c000000000000020400000000000000000000080bfe4388e3e0000203f000080c000004040000020400000000000000000000080bfe4388e3e0000803f0000804000000000000020400000000000000000000080bf8ee3383f0000203f0000804000004040000020400000000000000000000080bf8ee3383f0000803f000080c000000000000020c00000803f0000000000000000000000000000203f000080c000004040000020c00000803f0000000000000000000000000000803f000080c000000000000020400000803f0000000000000000e4388e3e0000203f000080c000004040000020400000803f0000000000000000e4388e3e0000803f000080400000000000002040000080bf00000000000000008ee3383f0000203f000080400000404000002040000080bf00000000000000008ee3383f0000803f0000804000000000000020c0000080bf00000000000000000000803f0000203f0000804000004040000020c0000080bf00000000000000000000803f0000803f
m_CompressedMesh:
m_Vertices:
m_NumItems: 0
m_Range: 0
m_Start: 0
m_Data:
m_BitSize: 0
m_UV:
m_NumItems: 0
m_Range: 0
m_Start: 0
m_Data:
m_BitSize: 0
m_Normals:
m_NumItems: 0
m_Range: 0
m_Start: 0
m_Data:
m_BitSize: 0
m_Tangents:
m_NumItems: 0
m_Range: 0
m_Start: 0
m_Data:
m_BitSize: 0
m_Weights:
m_NumItems: 0
m_Data:
m_BitSize: 0
m_NormalSigns:
m_NumItems: 0
m_Data:
m_BitSize: 0
m_TangentSigns:
m_NumItems: 0
m_Data:
m_BitSize: 0
m_FloatColors:
m_NumItems: 0
m_Range: 0
m_Start: 0
m_Data:
m_BitSize: 0
m_BoneIndices:
m_NumItems: 0
m_Data:
m_BitSize: 0
m_Triangles:
m_NumItems: 0
m_Data:
m_BitSize: 0
m_UVInfo: 0
m_LocalAABB:
m_Center: {x: 0, y: 1.5, z: 0}
m_Extent: {x: 4, y: 1.5, z: 2.5}
m_MeshUsageFlags: 0
m_BakedConvexCollisionMesh:
m_BakedTriangleCollisionMesh:
m_MeshMetrics[0]: 1
m_MeshMetrics[1]: 1
m_MeshOptimized: 0
m_StreamData:
offset: 0
size: 0
path:
--- !u!1 &732632614 --- !u!1 &732632614
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -3497,7 +3344,7 @@ Transform:
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: [] m_Children: []
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 11 m_RootOrder: 10
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &750667758 --- !u!1 &750667758
GameObject: GameObject:
@ -3550,7 +3397,7 @@ RectTransform:
m_Children: m_Children:
- {fileID: 1000268179} - {fileID: 1000268179}
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 21 m_RootOrder: 20
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0} m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0}
@ -3585,7 +3432,7 @@ Transform:
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: [] m_Children: []
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 16 m_RootOrder: 15
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &768391776 --- !u!1 &768391776
GameObject: GameObject:
@ -3763,7 +3610,7 @@ Transform:
m_Children: m_Children:
- {fileID: 60963459} - {fileID: 60963459}
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 6 m_RootOrder: 5
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &875420587 --- !u!1 &875420587
GameObject: GameObject:
@ -4694,6 +4541,73 @@ MeshFilter:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1191975162} m_GameObject: {fileID: 1191975162}
m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}
--- !u!1001 &1199875718
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 1424437803216390, guid: 65310f6d57df29045b6fa71ac0ceb175, type: 3}
propertyPath: m_Name
value: App Helper
objectReference: {fileID: 0}
- target: {fileID: 4443635060613428, guid: 65310f6d57df29045b6fa71ac0ceb175, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4443635060613428, guid: 65310f6d57df29045b6fa71ac0ceb175, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4443635060613428, guid: 65310f6d57df29045b6fa71ac0ceb175, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4443635060613428, guid: 65310f6d57df29045b6fa71ac0ceb175, type: 3}
propertyPath: m_LocalRotation.x
value: -0
objectReference: {fileID: 0}
- target: {fileID: 4443635060613428, guid: 65310f6d57df29045b6fa71ac0ceb175, type: 3}
propertyPath: m_LocalRotation.y
value: -0
objectReference: {fileID: 0}
- target: {fileID: 4443635060613428, guid: 65310f6d57df29045b6fa71ac0ceb175, type: 3}
propertyPath: m_LocalRotation.z
value: -0
objectReference: {fileID: 0}
- target: {fileID: 4443635060613428, guid: 65310f6d57df29045b6fa71ac0ceb175, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 4443635060613428, guid: 65310f6d57df29045b6fa71ac0ceb175, type: 3}
propertyPath: m_RootOrder
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4443635060613428, guid: 65310f6d57df29045b6fa71ac0ceb175, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4443635060613428, guid: 65310f6d57df29045b6fa71ac0ceb175, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4443635060613428, guid: 65310f6d57df29045b6fa71ac0ceb175, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 114802992808559142, guid: 65310f6d57df29045b6fa71ac0ceb175,
type: 3}
propertyPath: resolution.x
value: 1260
objectReference: {fileID: 0}
- target: {fileID: 114802992808559142, guid: 65310f6d57df29045b6fa71ac0ceb175,
type: 3}
propertyPath: resolution.y
value: 800
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 65310f6d57df29045b6fa71ac0ceb175, type: 3}
--- !u!1 &1206946024 --- !u!1 &1206946024
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -5381,7 +5295,7 @@ Transform:
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: [] m_Children: []
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 17 m_RootOrder: 16
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1329758486 --- !u!1 &1329758486
GameObject: GameObject:
@ -5714,7 +5628,7 @@ MeshFilter:
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1379541361} m_GameObject: {fileID: 1379541361}
m_Mesh: {fileID: 731219095} m_Mesh: {fileID: 252394921}
--- !u!114 &1379541365 --- !u!114 &1379541365
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -5738,7 +5652,6 @@ GameObject:
serializedVersion: 6 serializedVersion: 6
m_Component: m_Component:
- component: {fileID: 1390635888} - component: {fileID: 1390635888}
- component: {fileID: 1390635890}
- component: {fileID: 1390635889} - component: {fileID: 1390635889}
m_Layer: 0 m_Layer: 0
m_Name: Misc m_Name: Misc
@ -5774,22 +5687,6 @@ MonoBehaviour:
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
updateInterval: 0.5 updateInterval: 0.5
--- !u!114 &1390635890
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1390635887}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 022338fc4c683e749b2da8ff495f4b99, type: 3}
m_Name:
m_EditorClassIdentifier:
hideCursorInStandalone: 1
fullScreenMode: 3
targetFrameRate: 60
resolution: {x: 1260, y: 800}
--- !u!1 &1395728836 --- !u!1 &1395728836
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -6198,7 +6095,7 @@ Transform:
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: [] m_Children: []
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 13 m_RootOrder: 12
m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0}
--- !u!114 &1451842899 --- !u!114 &1451842899
MonoBehaviour: MonoBehaviour:
@ -7234,7 +7131,7 @@ RectTransform:
- {fileID: 1901892189} - {fileID: 1901892189}
- {fileID: 624498611} - {fileID: 624498611}
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 24 m_RootOrder: 23
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0} m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0}
@ -7416,14 +7313,10 @@ MonoBehaviour:
m_GameObject: {fileID: 1817143146} m_GameObject: {fileID: 1817143146}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 542c4b2aee71a0142928f8b82f70141f, type: 3} m_Script: {fileID: 11500000, guid: 45099d624c1e6c14e9514f4e5ea1ed9c, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
sharingName: FrozenSpout _clearAlpha: 1
textureFormat: 28
yFlip: 1
output: {fileID: 0}
m_Shader: {fileID: 4800000, guid: ca95743014f24fd49897e12abbe931fc, type: 3}
--- !u!20 &1817143148 --- !u!20 &1817143148
Camera: Camera:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -7478,7 +7371,7 @@ Transform:
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: [] m_Children: []
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 20 m_RootOrder: 19
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1817143150 --- !u!114 &1817143150
MonoBehaviour: MonoBehaviour:
@ -7999,7 +7892,7 @@ PrefabInstance:
- target: {fileID: 224189884305339602, guid: 7aba709da85d1c2439af18a2c2e1548c, - target: {fileID: 224189884305339602, guid: 7aba709da85d1c2439af18a2c2e1548c,
type: 3} type: 3}
propertyPath: m_AnchoredPosition.y propertyPath: m_AnchoredPosition.y
value: 0.000008848382 value: -0.00004082822
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 224189884305339602, guid: 7aba709da85d1c2439af18a2c2e1548c, - target: {fileID: 224189884305339602, guid: 7aba709da85d1c2439af18a2c2e1548c,
type: 3} type: 3}
@ -8196,7 +8089,7 @@ Transform:
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: [] m_Children: []
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 14 m_RootOrder: 13
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1925824385 --- !u!1 &1925824385
GameObject: GameObject:
@ -8648,7 +8541,7 @@ Transform:
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: [] m_Children: []
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 22 m_RootOrder: 21
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &2084936102 --- !u!1 &2084936102
GameObject: GameObject:
@ -8777,7 +8670,7 @@ Transform:
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: [] m_Children: []
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 5 m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &2086317000 --- !u!1 &2086317000
GameObject: GameObject:

@ -4,8 +4,9 @@
Material: Material:
serializedVersion: 6 serializedVersion: 6
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Point m_Name: Point
m_Shader: {fileID: 4800000, guid: 44b738c16dcfd5445b9019d3c98e1a3c, type: 3} m_Shader: {fileID: 4800000, guid: 44b738c16dcfd5445b9019d3c98e1a3c, type: 3}
m_ShaderKeywords: m_ShaderKeywords:

@ -3,8 +3,9 @@
--- !u!114 &11400000 --- !u!114 &11400000
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInternal: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0} m_GameObject: {fileID: 0}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
@ -109,7 +110,7 @@ MonoBehaviour:
texture: {fileID: 0} texture: {fileID: 0}
intensity: 3 intensity: 3
colorGrading: colorGrading:
m_Enabled: 1 m_Enabled: 0
m_Settings: m_Settings:
tonemapping: tonemapping:
tonemapper: 0 tonemapper: 0
@ -146,18 +147,24 @@ MonoBehaviour:
curve: curve:
serializedVersion: 2 serializedVersion: 2
m_Curve: m_Curve:
- serializedVersion: 2 - serializedVersion: 3
time: 0 time: 0
value: 0 value: 0
inSlope: 1 inSlope: 1
outSlope: 1 outSlope: 1
tangentMode: 0 tangentMode: 0
- serializedVersion: 2 weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
time: 1 time: 1
value: 1 value: 1
inSlope: 1 inSlope: 1
outSlope: 1 outSlope: 1
tangentMode: 0 tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2 m_PreInfinity: 2
m_PostInfinity: 2 m_PostInfinity: 2
m_RotationOrder: 0 m_RotationOrder: 0
@ -168,18 +175,24 @@ MonoBehaviour:
curve: curve:
serializedVersion: 2 serializedVersion: 2
m_Curve: m_Curve:
- serializedVersion: 2 - serializedVersion: 3
time: 0 time: 0
value: 0 value: 0
inSlope: 1 inSlope: 1
outSlope: 1 outSlope: 1
tangentMode: 0 tangentMode: 0
- serializedVersion: 2 weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
time: 1 time: 1
value: 1 value: 1
inSlope: 1 inSlope: 1
outSlope: 1 outSlope: 1
tangentMode: 0 tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2 m_PreInfinity: 2
m_PostInfinity: 2 m_PostInfinity: 2
m_RotationOrder: 4 m_RotationOrder: 4
@ -190,18 +203,24 @@ MonoBehaviour:
curve: curve:
serializedVersion: 2 serializedVersion: 2
m_Curve: m_Curve:
- serializedVersion: 2 - serializedVersion: 3
time: 0 time: 0
value: 0 value: 0
inSlope: 1 inSlope: 1
outSlope: 1 outSlope: 1
tangentMode: 0 tangentMode: 0
- serializedVersion: 2 weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
time: 1 time: 1
value: 1 value: 1
inSlope: 1 inSlope: 1
outSlope: 1 outSlope: 1
tangentMode: 0 tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2 m_PreInfinity: 2
m_PostInfinity: 2 m_PostInfinity: 2
m_RotationOrder: 4 m_RotationOrder: 4
@ -212,18 +231,24 @@ MonoBehaviour:
curve: curve:
serializedVersion: 2 serializedVersion: 2
m_Curve: m_Curve:
- serializedVersion: 2 - serializedVersion: 3
time: 0 time: 0
value: 0 value: 0
inSlope: 1 inSlope: 1
outSlope: 1 outSlope: 1
tangentMode: 0 tangentMode: 0
- serializedVersion: 2 weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
time: 1 time: 1
value: 1 value: 1
inSlope: 1 inSlope: 1
outSlope: 1 outSlope: 1
tangentMode: 0 tangentMode: 0
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
m_PreInfinity: 2 m_PreInfinity: 2
m_PostInfinity: 2 m_PostInfinity: 2
m_RotationOrder: 4 m_RotationOrder: 4

@ -1,9 +1,8 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 134f27287120b5a4f88fe738d3847874 guid: 134f27287120b5a4f88fe738d3847874
folderAsset: yes folderAsset: yes
timeCreated: 1462037990
licenseType: Pro
DefaultImporter: DefaultImporter:
externalObjects: {}
userData: userData:
assetBundleName: assetBundleName:
assetBundleVariant: assetBundleVariant:

@ -1,31 +0,0 @@
fileFormatVersion: 2
guid: caac1cf6b04514f8abcebc841466ae71
folderAsset: yes
timeCreated: 1462037990
licenseType: Pro
PluginImporter:
serializedVersion: 1
iconMap: {}
executionOrder: {}
isPreloaded: 0
isOverridable: 0
platformData:
Any:
enabled: 0
settings: {}
Editor:
enabled: 1
settings:
DefaultValueInitialized: true
OSXIntel:
enabled: 1
settings: {}
OSXIntel64:
enabled: 1
settings: {}
OSXUniversal:
enabled: 1
settings: {}
userData:
assetBundleName:
assetBundleVariant:

@ -1,48 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>BuildMachineOSBuild</key>
<string>15E65</string>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleDisplayName</key>
<string>AVProQuickTime</string>
<key>CFBundleExecutable</key>
<string>UnityQT</string>
<key>CFBundleIdentifier</key>
<string>com.renderheads.AVProQuickTime</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>AVProQuickTime</string>
<key>CFBundlePackageType</key>
<string>BNDL</string>
<key>CFBundleShortVersionString</key>
<string>1.01</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleSupportedPlatforms</key>
<array>
<string>MacOSX</string>
</array>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>DTCompiler</key>
<string>com.apple.compilers.llvm.clang.1_0</string>
<key>DTPlatformBuild</key>
<string>7D175</string>
<key>DTPlatformVersion</key>
<string>GM</string>
<key>DTSDKBuild</key>
<string>9M2809</string>
<key>DTSDKName</key>
<string>macosx10.5</string>
<key>DTXcode</key>
<string>0730</string>
<key>DTXcodeBuild</key>
<string>7D175</string>
<key>LSApplicationCategoryType</key>
<string></string>
</dict>
</plist>

@ -1,6 +0,0 @@
fileFormatVersion: 2
guid: ca952a5152b9d4566a3bb69fa3362965
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

@ -1,6 +0,0 @@
fileFormatVersion: 2
guid: be334d9fa0ec3ad4284fef2d08ce724a
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

@ -1,6 +0,0 @@
fileFormatVersion: 2
guid: f1fe79251648c4fd5b30fb570b712180
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

@ -1,9 +0,0 @@
fileFormatVersion: 2
guid: bbbba6f01494a31478f8c2872a3c6841
folderAsset: yes
timeCreated: 1488532537
licenseType: Free
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

@ -1,62 +0,0 @@
fileFormatVersion: 2
guid: 85bafbe9b14b18b45b445b304b1f3efc
PluginImporter:
serializedVersion: 1
iconMap: {}
executionOrder: {}
isPreloaded: 0
isOverridable: 0
platformData:
Any:
enabled: 0
settings:
Exclude Editor: 1
Exclude Linux: 1
Exclude Linux64: 1
Exclude LinuxUniversal: 1
Exclude OSXIntel: 1
Exclude OSXIntel64: 1
Exclude OSXUniversal: 1
Exclude Win: 1
Exclude Win64: 1
Editor:
enabled: 0
settings:
CPU: AnyCPU
DefaultValueInitialized: true
OS: AnyOS
Linux:
enabled: 0
settings:
CPU: x86
Linux64:
enabled: 0
settings:
CPU: x86_64
LinuxUniversal:
enabled: 0
settings:
CPU: None
OSXIntel:
enabled: 0
settings:
CPU: AnyCPU
OSXIntel64:
enabled: 0
settings:
CPU: AnyCPU
OSXUniversal:
enabled: 0
settings:
CPU: None
Win:
enabled: 0
settings:
CPU: AnyCPU
Win64:
enabled: 0
settings:
CPU: AnyCPU
userData:
assetBundleName:
assetBundleVariant:

@ -1,9 +0,0 @@
fileFormatVersion: 2
guid: de7655be96a18bb4ebf546de09cb5762
folderAsset: yes
timeCreated: 1462037990
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

@ -1,64 +0,0 @@
fileFormatVersion: 2
guid: 6573cdc626ce76247974a9d2ff486fff
timeCreated: 1491014027
licenseType: Free
PluginImporter:
serializedVersion: 1
iconMap: {}
executionOrder: {}
isPreloaded: 0
isOverridable: 0
platformData:
Any:
enabled: 1
settings:
Exclude Editor: 0
Exclude Linux: 0
Exclude Linux64: 0
Exclude LinuxUniversal: 0
Exclude OSXIntel: 0
Exclude OSXIntel64: 0
Exclude OSXUniversal: 0
Exclude Win: 0
Exclude Win64: 1
Editor:
enabled: 1
settings:
CPU: x86
DefaultValueInitialized: true
OS: AnyOS
Linux:
enabled: 1
settings:
CPU: x86
Linux64:
enabled: 1
settings:
CPU: None
LinuxUniversal:
enabled: 1
settings:
CPU: AnyCPU
OSXIntel:
enabled: 1
settings:
CPU: AnyCPU
OSXIntel64:
enabled: 1
settings:
CPU: None
OSXUniversal:
enabled: 1
settings:
CPU: AnyCPU
Win:
enabled: 1
settings:
CPU: AnyCPU
Win64:
enabled: 0
settings:
CPU: None
userData:
assetBundleName:
assetBundleVariant:

@ -1,62 +0,0 @@
fileFormatVersion: 2
guid: b65facb0c9c68b647b8ca7435b5f35c4
PluginImporter:
serializedVersion: 1
iconMap: {}
executionOrder: {}
isPreloaded: 0
isOverridable: 0
platformData:
Any:
enabled: 1
settings:
Exclude Editor: 0
Exclude Linux: 0
Exclude Linux64: 0
Exclude LinuxUniversal: 0
Exclude OSXIntel: 0
Exclude OSXIntel64: 0
Exclude OSXUniversal: 0
Exclude Win: 0
Exclude Win64: 1
Editor:
enabled: 1
settings:
CPU: x86
DefaultValueInitialized: true
OS: AnyOS
Linux:
enabled: 1
settings:
CPU: x86
Linux64:
enabled: 1
settings:
CPU: None
LinuxUniversal:
enabled: 1
settings:
CPU: AnyCPU
OSXIntel:
enabled: 1
settings:
CPU: AnyCPU
OSXIntel64:
enabled: 1
settings:
CPU: None
OSXUniversal:
enabled: 1
settings:
CPU: AnyCPU
Win:
enabled: 1
settings:
CPU: AnyCPU
Win64:
enabled: 0
settings:
CPU: None
userData:
assetBundleName:
assetBundleVariant:

@ -1,76 +0,0 @@
fileFormatVersion: 2
guid: 25455f33895f34847aec2c5c7987fcfc
timeCreated: 1483429812
licenseType: Free
PluginImporter:
serializedVersion: 1
iconMap: {}
executionOrder: {}
isPreloaded: 0
isOverridable: 0
platformData:
Android:
enabled: 0
settings:
CPU: ARMv7
Any:
enabled: 0
settings:
Exclude Android: 1
Exclude Editor: 0
Exclude Linux: 0
Exclude Linux64: 0
Exclude LinuxUniversal: 0
Exclude OSXIntel: 0
Exclude OSXIntel64: 0
Exclude OSXUniversal: 0
Exclude WebGL: 1
Exclude Win: 0
Exclude Win64: 1
Exclude iOS: 1
Editor:
enabled: 1
settings:
CPU: x86
DefaultValueInitialized: true
OS: Windows
Linux:
enabled: 1
settings:
CPU: x86
Linux64:
enabled: 1
settings:
CPU: None
LinuxUniversal:
enabled: 1
settings:
CPU: AnyCPU
OSXIntel:
enabled: 1
settings:
CPU: AnyCPU
OSXIntel64:
enabled: 1
settings:
CPU: None
OSXUniversal:
enabled: 1
settings:
CPU: AnyCPU
Win:
enabled: 1
settings:
CPU: AnyCPU
Win64:
enabled: 0
settings:
CPU: None
iOS:
enabled: 0
settings:
CompileFlags:
FrameworkDependencies:
userData:
assetBundleName:
assetBundleVariant:

@ -1,76 +0,0 @@
fileFormatVersion: 2
guid: d3726263bb01104438338589a388b623
timeCreated: 1490779320
licenseType: Free
PluginImporter:
serializedVersion: 1
iconMap: {}
executionOrder: {}
isPreloaded: 0
isOverridable: 0
platformData:
Android:
enabled: 0
settings:
CPU: ARMv7
Any:
enabled: 0
settings:
Exclude Android: 1
Exclude Editor: 0
Exclude Linux: 0
Exclude Linux64: 0
Exclude LinuxUniversal: 0
Exclude OSXIntel: 0
Exclude OSXIntel64: 0
Exclude OSXUniversal: 0
Exclude WebGL: 1
Exclude Win: 0
Exclude Win64: 1
Exclude iOS: 1
Editor:
enabled: 1
settings:
CPU: x86
DefaultValueInitialized: true
OS: Windows
Linux:
enabled: 1
settings:
CPU: x86
Linux64:
enabled: 1
settings:
CPU: None
LinuxUniversal:
enabled: 1
settings:
CPU: AnyCPU
OSXIntel:
enabled: 1
settings:
CPU: AnyCPU
OSXIntel64:
enabled: 1
settings:
CPU: None
OSXUniversal:
enabled: 1
settings:
CPU: AnyCPU
Win:
enabled: 1
settings:
CPU: AnyCPU
Win64:
enabled: 0
settings:
CPU: None
iOS:
enabled: 0
settings:
CompileFlags:
FrameworkDependencies:
userData:
assetBundleName:
assetBundleVariant:

@ -1,68 +0,0 @@
fileFormatVersion: 2
guid: 7d8eddf3a0f61b4459ceb9a071e17948
timeCreated: 1491013800
licenseType: Free
PluginImporter:
serializedVersion: 1
iconMap: {}
executionOrder: {}
isPreloaded: 0
isOverridable: 0
platformData:
Any:
enabled: 0
settings:
Exclude Editor: 0
Exclude Linux: 1
Exclude Linux64: 1
Exclude LinuxUniversal: 1
Exclude OSXIntel: 1
Exclude OSXIntel64: 1
Exclude OSXUniversal: 1
Exclude Win: 0
Exclude Win64: 1
Editor:
enabled: 1
settings:
CPU: x86
DefaultValueInitialized: true
OS: Windows
Linux:
enabled: 0
settings:
CPU: x86
Linux64:
enabled: 0
settings:
CPU: None
LinuxUniversal:
enabled: 0
settings:
CPU: None
OSXIntel:
enabled: 0
settings:
CPU: None
OSXIntel64:
enabled: 0
settings:
CPU: None
OSXUniversal:
enabled: 0
settings:
CPU: None
Win:
enabled: 1
settings:
CPU: AnyCPU
Win64:
enabled: 0
settings:
CPU: None
WindowsStoreApps:
enabled: 0
settings:
CPU: AnyCPU
userData:
assetBundleName:
assetBundleVariant:

@ -1,68 +0,0 @@
fileFormatVersion: 2
guid: f602d57aa622772419e169b21a1cad88
timeCreated: 1491013801
licenseType: Free
PluginImporter:
serializedVersion: 1
iconMap: {}
executionOrder: {}
isPreloaded: 0
isOverridable: 0
platformData:
Any:
enabled: 0
settings:
Exclude Editor: 0
Exclude Linux: 1
Exclude Linux64: 1
Exclude LinuxUniversal: 1
Exclude OSXIntel: 1
Exclude OSXIntel64: 1
Exclude OSXUniversal: 1
Exclude Win: 0
Exclude Win64: 1
Editor:
enabled: 1
settings:
CPU: x86
DefaultValueInitialized: true
OS: Windows
Linux:
enabled: 0
settings:
CPU: None
Linux64:
enabled: 0
settings:
CPU: None
LinuxUniversal:
enabled: 0
settings:
CPU: None
OSXIntel:
enabled: 0
settings:
CPU: None
OSXIntel64:
enabled: 0
settings:
CPU: None
OSXUniversal:
enabled: 0
settings:
CPU: None
Win:
enabled: 1
settings:
CPU: AnyCPU
Win64:
enabled: 0
settings:
CPU: None
WindowsStoreApps:
enabled: 0
settings:
CPU: AnyCPU
userData:
assetBundleName:
assetBundleVariant:

@ -1,9 +1,8 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 300743055358bfc48a753441b44a31e4 guid: 300743055358bfc48a753441b44a31e4
folderAsset: yes folderAsset: yes
timeCreated: 1488532537
licenseType: Free
DefaultImporter: DefaultImporter:
externalObjects: {}
userData: userData:
assetBundleName: assetBundleName:
assetBundleVariant: assetBundleVariant:

@ -1,62 +0,0 @@
fileFormatVersion: 2
guid: 82e143d16729051459ae6a54b37e9eab
PluginImporter:
serializedVersion: 1
iconMap: {}
executionOrder: {}
isPreloaded: 0
isOverridable: 0
platformData:
Any:
enabled: 1
settings:
Exclude Editor: 0
Exclude Linux: 0
Exclude Linux64: 0
Exclude LinuxUniversal: 0
Exclude OSXIntel: 0
Exclude OSXIntel64: 0
Exclude OSXUniversal: 0
Exclude Win: 1
Exclude Win64: 0
Editor:
enabled: 1
settings:
CPU: x86_64
DefaultValueInitialized: true
OS: AnyOS
Linux:
enabled: 1
settings:
CPU: None
Linux64:
enabled: 1
settings:
CPU: x86_64
LinuxUniversal:
enabled: 1
settings:
CPU: AnyCPU
OSXIntel:
enabled: 1
settings:
CPU: None
OSXIntel64:
enabled: 1
settings:
CPU: AnyCPU
OSXUniversal:
enabled: 1
settings:
CPU: AnyCPU
Win:
enabled: 0
settings:
CPU: None
Win64:
enabled: 1
settings:
CPU: AnyCPU
userData:
assetBundleName:
assetBundleVariant:

@ -1,76 +1,76 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: d10f5e2a5b57a7c40a3f71fb68fc1314 guid: d10f5e2a5b57a7c40a3f71fb68fc1314
timeCreated: 1483429812
licenseType: Free
PluginImporter: PluginImporter:
serializedVersion: 1 externalObjects: {}
serializedVersion: 2
iconMap: {} iconMap: {}
executionOrder: {} executionOrder: {}
defineConstraints: []
isPreloaded: 0 isPreloaded: 0
isOverridable: 0 isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData: platformData:
Android: - first:
enabled: 0
settings:
CPU: ARMv7
Any: Any:
enabled: 0 second:
settings:
Exclude Android: 1
Exclude Editor: 0
Exclude Linux: 0
Exclude Linux64: 0
Exclude LinuxUniversal: 0
Exclude OSXIntel: 0
Exclude OSXIntel64: 0
Exclude OSXUniversal: 0
Exclude WebGL: 1
Exclude Win: 1
Exclude Win64: 0
Exclude iOS: 1
Editor:
enabled: 1 enabled: 1
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings: settings:
CPU: x86_64 CPU: x86_64
DefaultValueInitialized: true DefaultValueInitialized: true
OS: Windows - first:
Linux: Facebook: Win
enabled: 1 second:
enabled: 0
settings: settings:
CPU: None CPU: None
Linux64: - first:
enabled: 1 Facebook: Win64
settings: second:
CPU: x86_64
LinuxUniversal:
enabled: 1 enabled: 1
settings: settings:
CPU: AnyCPU CPU: AnyCPU
OSXIntel: - first:
enabled: 1 Standalone: Linux
second:
enabled: 0
settings: settings:
CPU: None CPU: None
OSXIntel64: - first:
Standalone: Linux64
second:
enabled: 1 enabled: 1
settings: settings:
CPU: AnyCPU CPU: x86_64
OSXUniversal: - first:
Standalone: LinuxUniversal
second:
enabled: 1 enabled: 1
settings: settings:
CPU: AnyCPU CPU: x86_64
Win: - first:
Standalone: OSXUniversal
second:
enabled: 0
settings:
CPU: x86_64
- first:
Standalone: Win
second:
enabled: 0 enabled: 0
settings: settings:
CPU: None CPU: None
Win64: - first:
Standalone: Win64
second:
enabled: 1 enabled: 1
settings: settings:
CPU: AnyCPU CPU: AnyCPU
iOS:
enabled: 0
settings:
CompileFlags:
FrameworkDependencies:
userData: userData:
assetBundleName: assetBundleName:
assetBundleVariant: assetBundleVariant:

@ -1,76 +0,0 @@
fileFormatVersion: 2
guid: b248714091c28c741adc3e9dec5e5b19
timeCreated: 1490779249
licenseType: Free
PluginImporter:
serializedVersion: 1
iconMap: {}
executionOrder: {}
isPreloaded: 0
isOverridable: 0
platformData:
Android:
enabled: 0
settings:
CPU: ARMv7
Any:
enabled: 0
settings:
Exclude Android: 1
Exclude Editor: 0
Exclude Linux: 0
Exclude Linux64: 0
Exclude LinuxUniversal: 0
Exclude OSXIntel: 0
Exclude OSXIntel64: 0
Exclude OSXUniversal: 0
Exclude WebGL: 1
Exclude Win: 1
Exclude Win64: 0
Exclude iOS: 1
Editor:
enabled: 1
settings:
CPU: x86_64
DefaultValueInitialized: true
OS: Windows
Linux:
enabled: 1
settings:
CPU: None
Linux64:
enabled: 1
settings:
CPU: x86_64
LinuxUniversal:
enabled: 1
settings:
CPU: AnyCPU
OSXIntel:
enabled: 1
settings:
CPU: None
OSXIntel64:
enabled: 1
settings:
CPU: AnyCPU
OSXUniversal:
enabled: 1
settings:
CPU: AnyCPU
Win:
enabled: 0
settings:
CPU: None
Win64:
enabled: 1
settings:
CPU: AnyCPU
iOS:
enabled: 0
settings:
CompileFlags:
FrameworkDependencies:
userData:
assetBundleName:
assetBundleVariant:

@ -1,9 +0,0 @@
fileFormatVersion: 2
guid: 5621ecffabf710148a6e8b66ad72404a
folderAsset: yes
timeCreated: 1483429808
licenseType: Free
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

@ -1,9 +0,0 @@
fileFormatVersion: 2
guid: 9522b2e936960b74d86ac5d484163db9
folderAsset: yes
timeCreated: 1483429808
licenseType: Free
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

@ -1,134 +0,0 @@
/*
* Spout4Unity
* Copyright © 2014-2015 Benjamin Kuperberg
* Copyright © 2015 Stefan Schlupek
* All rights reserved
*/
using UnityEngine;
using System.Collections;
using UnityEditor;
using System;
namespace Spout{
[CustomEditor(typeof(SpoutReceiver))]
[CanEditMultipleObjects]
[Serializable]
public class SpoutReceiverEditor : Editor {
SpoutReceiver receiver;
[SerializeField]
private int _popupIndex;
string[] options;
string currentName;
void OnEnable()
{
if(receiver == null)
{
receiver = target as SpoutReceiver;
Spout.instance.addListener(texShared,senderStopped);
updateOptions();
}
//Debug.Log ("Enable popup Index : "+popupIndex);
}
void OnDisable(){
//if(target == null)return;
Spout.removeListener(texShared,senderStopped);
}
public void texShared(TextureInfo texInfo)
{
//Debug.Log ("Editor : senderStarted :"+texInfo.name);
updateOptions();
}
public void senderStopped(TextureInfo texInfo)
{
//Debug.Log ("Editor : senderStopped :"+texInfo.name);
updateOptions();
}
void updateOptions(bool assignNewName = true)
{
string oldSharingName = receiver.sharingName;
int newPopupIndex = 0;
bool found = false;
options = new string[Spout.instance.activeSenders.Count+2];
options[0] = "Any";
for(int i=0;i<Spout.instance.activeSenders.Count;i++)
{
string currentName = Spout.instance.activeSenders[i].name;
options[i+1] = currentName;
if(currentName == oldSharingName && oldSharingName != "Any")
{
found = true;
newPopupIndex = i+1;
}
}
options[options.Length-1] = "Other (specify)";
if(!found)
{
newPopupIndex = (oldSharingName != "Any")?options.Length-1:0;
}
popupIndex = newPopupIndex;
setNameFromPopup();
}
public override void OnInspectorGUI()
{
//if(target == null)return;
//if(Spout2.instance == null)return;
//serializedObject.Update();
int selectedIndex = EditorGUILayout.Popup("Select sender",_popupIndex,options);
if(selectedIndex == options.Length-1)//other
{
_popupIndex = selectedIndex; //silent update
receiver.sharingName = EditorGUILayout.TextField("Sender name",receiver.sharingName);
} else
{
popupIndex = selectedIndex;
}
//receiver.debugConsole = EditorGUILayout.Toggle("Debug Console",receiver.debugConsole);
serializedObject.ApplyModifiedProperties();
}
void setNameFromPopup()
{
if(popupIndex < options.Length -1)
{
receiver.sharingName = options[popupIndex];
}
}
int popupIndex
{
get { return _popupIndex;}
set {
if(popupIndex == value) return;
_popupIndex = value;
setNameFromPopup();
}
}
}
}

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: faca4b0692d8eff4fa85aa07f397b55f
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

@ -1,9 +0,0 @@
fileFormatVersion: 2
guid: 53b624cbbdde7e34cb6f67cd4fa124ab
folderAsset: yes
timeCreated: 1483429808
licenseType: Free
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

@ -1,31 +0,0 @@
//http://docs.unity3d.com/412/Documentation/ScriptReference/Camera.OnPreCull.html
using UnityEngine;
using System.Collections;
namespace Spout{
[RequireComponent (typeof(Camera))]
[ExecuteInEditMode]
public class InvertCamera : MonoBehaviour {
//public Camera camera;
void Start () {
//camera = get
}
void OnPreCull () {
GetComponent<Camera>().ResetWorldToCameraMatrix();
GetComponent<Camera>().ResetProjectionMatrix();
GetComponent<Camera>().projectionMatrix = GetComponent<Camera>().projectionMatrix * Matrix4x4.Scale(new Vector3(1, -1, 1));
}
void OnPreRender () {
GL.invertCulling = true;
}
void OnPostRender () {
GL.invertCulling = false;
}
}
}

@ -1,563 +0,0 @@
/*
* Spout4Unity
* Copyright © 2014-2015 Benjamin Kuperberg
* Copyright © 2015 Stefan Schlupek
* All rights reserved
*/
using UnityEngine;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Linq;
namespace Spout
{
[ExecuteInEditMode]
public class Spout : MonoBehaviour
{
#region public
public event EventHandler<TextureShareEventArgs> OnSenderStopped;
public event Action OnEnabled;
public event Action OnAllSendersStopped;
public delegate void TextureSharedDelegate(TextureInfo texInfo);
public TextureSharedDelegate texSharedDelegate;
public delegate void SenderStoppedDelegate(TextureInfo texInfo);
public SenderStoppedDelegate senderStoppedDelegate;
public List<TextureInfo> activeSenders;
public List<TextureInfo> activeLocalSenders;
public HashSet<string> localSenderNames;
public static bool isInit
{
get { return _isInit; }
}
public static bool isEnabledInEditor
{
get
{
return _instance == null ? false : _instance._isEnabledInEditor;
//return _isEnabledInEditor;
}
}
//You can use a fakeName of your choice .It's just to force an update in the Spout Receiver at start even if the 'offical' sharingName doesn't change.
public static string fakeName = "SpoutIsSuperCoolAndMakesFun";
public enum TextureFormat { DXGI_FORMAT_R32G32B32A32_FLOAT = 2, DXGI_FORMAT_R10G10B10A2_UNORM = 24, DXGI_FORMAT_R8G8B8A8_UNORM = 28, DXGI_FORMAT_B8G8R8A8_UNORM = 87 }
#endregion
#region private
private IntPtr intptr_senderUpdate_delegate;
private IntPtr intptr_senderStarted_delegate;
private IntPtr intptr_senderStopped_delegate;
// Use GCHandle to hold the delegate object in memory.
private GCHandle handleSenderUpdate;
private GCHandle handleSenderStarted;
private GCHandle handleSenderStopped;
#pragma warning disable 414
[SerializeField]
private static bool _isInit;
[SerializeField]
private bool _isEnabledInEditor;
#pragma warning restore 414
private static bool isReceiving;
private List<TextureInfo> newSenders;
private List<TextureInfo> stoppedSenders;
[SerializeField]
private static Spout _instance;
#pragma warning disable 414
//In EditMode we have to force the camera to render.But as this is called 100 times per second beware of your performance, so we only render at a special interval
private int _editorUpdateFrameInterval = 3;
#pragma warning restore 414
private int _frameCounter;
#endregion
[SerializeField]
private static Texture2D _nullTexture;
public static Texture2D nullTexture
{
get { return _nullTexture; }
}
public static Spout instance
{
get
{
if (_instance == null)
{
_instance = GameObject.FindObjectOfType<Spout>();
if (_instance == null)
{
GameObject _go = new GameObject("Spout");
_instance = _go.AddComponent<Spout>();
}
//DontDestroyOnLoad(_instance.gameObject);
}
return _instance;
}
private set { _instance = value; }
}
//
public void Awake()
{
Debug.Log("Spout.Awake");
if (_instance != null && _instance != this)
{
//Debug.Log("Spout.Awake.Destroy");
#if UNITY_EDITOR
DestroyImmediate(this.gameObject);
#else
Destroy(this.gameObject);
#endif
return;
}
newSenders = new List<TextureInfo>();
stoppedSenders = new List<TextureInfo>();
activeSenders = new List<TextureInfo>();
activeLocalSenders = new List<TextureInfo>();
localSenderNames = new HashSet<string>();
_nullTexture = new Texture2D(32, 32);
_nullTexture.hideFlags = HideFlags.HideAndDontSave;
}
public void OnEnable()
{
//Debug.Log("Spout.OnEnable");
if (_instance != null && _instance != this)
{
//Debug.Log("Spout.OnEnable.Destroy");
#if UNITY_EDITOR
DestroyImmediate(this.gameObject);
#else
Destroy(this.gameObject);
#endif
return;
}
newSenders = new List<TextureInfo>();
stoppedSenders = new List<TextureInfo>();
activeSenders = new List<TextureInfo>();
activeLocalSenders = new List<TextureInfo>();
localSenderNames = new HashSet<string>();
#if UNITY_EDITOR
if (_isEnabledInEditor || Application.isPlaying)
{
_Enable();
}
#else
_Enable();
#endif
}
private void _Enable()
{
//Debug.Log("Spout._Enable");
#if UNITY_EDITOR
if (!Application.isPlaying)
{
UnityEditor.EditorApplication.update -= _Update;
UnityEditor.EditorApplication.update += _Update;
}
#endif
_Init();
//notify others so they can re-initialize
if (OnEnabled != null) OnEnabled();
}
private void _Disable()
{
}
private void _Init()
{
//Debug.Log("Spout._Init");
initNative();
//Debug.Log("isReceiving:+"+isReceiving);
_startReceiving();
_isInit = true;
//if(debug) initDebugConsole();
}
void Update()
{
//if(_instance == null || _instance != this ) return;
_Update();
}
private void _Update()
{
#if UNITY_EDITOR
_frameCounter++;
_frameCounter %= _editorUpdateFrameInterval;
if (_frameCounter == 0)
{
UnityEditor.SceneView.RepaintAll();
}
#endif
if (isReceiving)
{
//Debug.Log("checkReceivers");
checkReceivers();
}
lock (this)
{
foreach (TextureInfo s in newSenders)
{
//Debug.Log("texSharedDelegate");
activeSenders.Add(s);
if (texSharedDelegate != null) texSharedDelegate(s);
}
newSenders.Clear();
foreach (TextureInfo s in stoppedSenders)
{
foreach (TextureInfo t in activeSenders)
{
if (s.name == t.name)
{
activeSenders.Remove(t);
break;
}
}
//Debug.Log ("Stopped sender from Spout :"+s.name);
if (senderStoppedDelegate != null) senderStoppedDelegate(s);
}
stoppedSenders.Clear();
}//lock
}
public void OnDisable()
{
//Debug.Log("Spout.OnDisable");
if (_instance != this) return;
#if UNITY_EDITOR
UnityEditor.EditorApplication.update -= _Update;
#endif
StopAllLocalSenders();
//Force the Plugin to check. Otherwise we don't get a SenderStopped delegate call
Update();
//Debug.Log("Spout.OnDisable.End");
}
void OnDestroy()
{
//Debug.Log("Spout.OnDestroy");
if (_instance != this) return;
if (_isInit)
{
_CleanUpResources();
}
isReceiving = false;
_isInit = false;
newSenders = null;
stoppedSenders = null;
activeSenders = null;
activeLocalSenders = null;
localSenderNames = null;
OnEnabled = null;
OnSenderStopped = null;
_instance = null;
GC.Collect();//??
}
private void _CleanUpResources()
{
clean();
_instance.texSharedDelegate = null;
_instance.senderStoppedDelegate = null;
_instance.handleSenderUpdate.Free();
_instance.handleSenderStarted.Free();
_instance.handleSenderStopped.Free();
intptr_senderUpdate_delegate = IntPtr.Zero;
intptr_senderStarted_delegate = IntPtr.Zero;
intptr_senderStopped_delegate = IntPtr.Zero;
}
public void addListener(TextureSharedDelegate sharedCallback, SenderStoppedDelegate stoppedCallback)
{
// Debug.Log ("Spout.addListener");
if (_instance == null) return;
_instance.texSharedDelegate += sharedCallback;
_instance.senderStoppedDelegate += stoppedCallback;
}
public static void removeListener(TextureSharedDelegate sharedCallback, SenderStoppedDelegate stoppedCallback)
{
// Debug.Log ("Spout.removeListener");
if (_instance == null) return;
_instance.texSharedDelegate -= sharedCallback;
_instance.senderStoppedDelegate -= stoppedCallback;
}
public bool CreateSender(string sharingName, Texture tex, int texFormat = 1)
{
if (!enabled) return false;
if (!_isInit) return false;
#if UNITY_EDITOR
if (!Application.isPlaying && !_isEnabledInEditor) return false;
#endif
IntPtr p_tex = tex.GetNativeTexturePtr();
if (p_tex == IntPtr.Zero)
{
Debug.Log("[WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING]");
Debug.Log("Spout.UpdateSender:" + sharingName + " NativeTexturePtr is NULL !!!");
Debug.Log("[WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING]");
return false;
}
Debug.Log("Spout.CreateSender:" + sharingName + "::" + p_tex.ToInt32());
bool result = createSenderNative(sharingName, p_tex, texFormat);
if (result)
{
//Debug.Log (String.Format("Spout sender creation with name {0} success !",sharingName));
localSenderNames.Add(sharingName);
}
else
{
Debug.LogWarning(String.Format("createSenderNative(): Spout sender creation with name {0} failed !", sharingName));
}
return result;
}
public bool UpdateSender(string sharingName, Texture tex)
{
if (enabled == false || gameObject.activeInHierarchy == false || _isInit == false) return false;
//Debug.Log("Spout.UpdateSender:"+sharingName+"::"+tex.GetNativeTexturePtr().ToInt32());
IntPtr p_tex = tex.GetNativeTexturePtr();
if (p_tex == IntPtr.Zero)
{
Debug.Log("[WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING]");
Debug.Log("Spout.UpdateSender:" + sharingName + " NativeTexturePtr is NULL !!!");
Debug.Log("[WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING]");
return false;
}
return updateSenderNative(sharingName, p_tex);
}
public TextureInfo getTextureInfo(string sharingName)
{
if (activeSenders == null) return null;
foreach (TextureInfo tex in activeSenders)
{
if (tex.name == sharingName) return tex;
}
if (sharingName != Spout.fakeName) Debug.Log(String.Format("sharing name {0} not found", sharingName));
return null;
}
private const string SpoutVersion = "2_006";
private const string SpoutLibNameBase = "NativeSpoutPlugin";
private const string SpoutLibName = SpoutLibNameBase + "_" + SpoutVersion;
#if DEVELOPMENT_BUILD
public const string SpoutLibImport = SpoutLibName + "_Debug";
#else
public const string SpoutLibImport = SpoutLibName;
#endif
//Imports
[DllImport(SpoutLibImport, EntryPoint = "init")]
public static extern bool initNative();
[DllImport(SpoutLibImport, EntryPoint = "initDebugConsole")]
private static extern void _initDebugConsole();
[DllImport(SpoutLibImport)]
private static extern void checkReceivers();
[DllImport(SpoutLibImport, EntryPoint = "createSender")]
private static extern bool createSenderNative(string sharingName, IntPtr texture, int texFormat);
[DllImport(SpoutLibImport, EntryPoint = "updateSender")]
private static extern bool updateSenderNative(string sharingName, IntPtr texture);
[DllImport(SpoutLibImport, EntryPoint = "closeSender")]
public static extern bool CloseSender(string sharingName);
[DllImport(SpoutLibImport)]
private static extern void clean();
[DllImport(SpoutLibImport, EntryPoint = "startReceiving")]
private static extern bool startReceivingNative(IntPtr senderUpdateHandler, IntPtr senderStartedHandler, IntPtr senderStoppedHandler);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate void SpoutSenderUpdateDelegate(int numSenders);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate void SpoutSenderStartedDelegate(string senderName, IntPtr resourceView, int textureWidth, int textureHeight);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate void SpoutSenderStoppedDelegate(string senderName);
public void initDebugConsole()
{
//check if multiple inits?
_initDebugConsole();
}
private void _startReceiving()
{
if (isReceiving) return;
//Debug.Log("Spout.startReceiving");
SpoutSenderUpdateDelegate senderUpdate_delegate = new SpoutSenderUpdateDelegate(SenderUpdate);
handleSenderUpdate = GCHandle.Alloc(senderUpdate_delegate);
intptr_senderUpdate_delegate = Marshal.GetFunctionPointerForDelegate(senderUpdate_delegate);
SpoutSenderStartedDelegate senderStarted_delegate = new SpoutSenderStartedDelegate(SenderStarted);
handleSenderStarted = GCHandle.Alloc(senderStarted_delegate);
intptr_senderStarted_delegate = Marshal.GetFunctionPointerForDelegate(senderStarted_delegate);
SpoutSenderStoppedDelegate senderStopped_delegate = new SpoutSenderStoppedDelegate(SenderStopped);
handleSenderStopped = GCHandle.Alloc(senderStopped_delegate);
intptr_senderStopped_delegate = Marshal.GetFunctionPointerForDelegate(senderStopped_delegate);
isReceiving = startReceivingNative(intptr_senderUpdate_delegate, intptr_senderStarted_delegate, intptr_senderStopped_delegate);
}
private void SenderUpdate(int numSenders)
{
//Debug.Log("Sender update, numSenders : "+numSenders);
}
private void SenderStarted(string senderName, IntPtr resourceView, int textureWidth, int textureHeight)
{
Debug.Log("Spout. Sender started, sender name : " + senderName);
if (_instance == null || _instance.activeLocalSenders == null || _instance.newSenders == null) return;
lock (this)
{
TextureInfo texInfo = new TextureInfo(senderName);
Debug.Log("resourceView:" + resourceView.ToInt32());
texInfo.setInfos(textureWidth, textureHeight, resourceView);
_instance.newSenders.Add(texInfo);
if (_instance.localSenderNames.Contains(texInfo.name))
{
_instance.activeLocalSenders.Add(texInfo);
//Debug.Log("activeLocalSenders.count:"+_instance.activeLocalSenders.Count);
}
Debug.Log("Spout.SenderStarted.End");
}//lock
}
private void SenderStopped(string senderName)
{
Debug.Log("Sender stopped, sender name : " + senderName);
if (_instance == null || _instance.activeLocalSenders == null || _instance.stoppedSenders == null) return;
lock (this)
{
TextureInfo texInfo = new TextureInfo(senderName);
_instance.stoppedSenders.Add(texInfo);
_instance.localSenderNames.Remove(texInfo.name);
if (_instance.activeLocalSenders.Contains(texInfo))
{
_instance.activeLocalSenders.Remove(texInfo);
}
}//lock
//Debug.Log("localSenderNames.count:"+instance.localSenderNames.Count);
//Debug.Log("activeLocalSenders.count:"+instance.activeLocalSenders.Count);
}
private void StopAllLocalSenders()
{
Debug.Log("Spout.StopAllLocalSenders()");
if (_instance == null) return;
foreach (TextureInfo t in _instance.activeLocalSenders)
{
CloseSender(t.name);
if (OnSenderStopped != null) OnSenderStopped(this, new TextureShareEventArgs(t.name));
/*
double i = 0;
while(i< 100000000){
i++;
}
*/
}
if (OnAllSendersStopped != null) OnAllSendersStopped();
}
}
public class TextureShareEventArgs : EventArgs
{
public string sharingName { get; set; }
public TextureShareEventArgs(string myString)
{
this.sharingName = myString;
}
}
}

@ -1,201 +0,0 @@
/*
* Spout4Unity
* Copyright © 2014-2015 Benjamin Kuperberg
* Copyright © 2015 Stefan Schlupek
* All rights reserved
*/
using UnityEngine;
using System.Collections;
using System;
namespace Spout{
[Serializable]
[ExecuteInEditMode]
public class SpoutReceiver : MonoBehaviour {
[SerializeField]
private string _sharingName;
private Texture2D _texture;
// leave false in this version!
//private bool debugConsole = false;
private bool _receiverIsReady;
//If you have want to prevent the Console warnings about not existing Senders just turn on the StartupDelay and specify the frame delay
private bool _startupDelay = true;
//how many frames of delay
private int _startupFramesDelay = 0;
private int _startUpFrameCount;
private string _tempName;
// Use this for initialization
void Awake () {
// Debug.Log("SpoutReceiver.Awake");
//if(debugConsole) Spout2.instance.initDebugConsole();
}
void Start()
{
}
void OnEnable(){
//Debug.Log("SpoutReceiver.OnEnable");
//Add the listener immediately to get the events when Unity starts and the Spout plugin initialize.
//Otherwise the external Spout Senders have to start afterwards to trigger the native plugin events
Spout.instance.addListener(TexShared,TexStopped);
#if UNITY_EDITOR
if(!Application.isPlaying){
UnityEditor.EditorApplication.update -= _Update;
UnityEditor.EditorApplication.update += _Update;
}
#endif
_receiverIsReady = false;
_startUpFrameCount = 0;
if(!_startupDelay)_ForceTextureUpdate();
}
void OnDisable(){
//Debug.Log("SpoutReceiver.OnDisable");
#if UNITY_EDITOR
UnityEditor.EditorApplication.update -= _Update;
#endif
_receiverIsReady = false;
_startUpFrameCount = 0;
Spout.removeListener(TexShared,TexStopped);
texture = null;
GC.Collect();
}
void OnDestroy(){
//Debug.Log("SpoutReceiver.OnDestroy");
}
void Update(){
_Update();
}
// Update is called once per frame
void _Update () {
//if(texture == null)_createNullTexture();
if(!_startupDelay)return;
if(!_receiverIsReady){
_startUpFrameCount++;
if( _startUpFrameCount < _startupFramesDelay)return;
_ForceTextureUpdate();
}
}
private void _ForceTextureUpdate(){
//Debug.Log("SpoutReceiver._ForceTextureUpdate");
//Little hack to force an update of the Texture
_tempName = _sharingName;
sharingName = Spout.fakeName;
sharingName = _tempName;
_receiverIsReady = true;
}
public void TexShared(TextureInfo texInfo)
{
//Debug.Log("SpoutReceiver.texShared");
if(sharingName == "" || sharingName == texInfo.name || sharingName == "Any")
{
//Debug.Log("SpoutReceiver.texShared:"+texInfo.name);
texture = texInfo.getTexture();
}
}
public void TexStopped(TextureInfo texInfo)
{
//Debug.Log("SpoutReceiver.texStopped:"+texInfo.name);
if(texInfo.name == _sharingName)
{
//Debug.Log("SpoutReceiver.texStopped:"+texInfo.name);
texture = Spout.nullTexture;
}
else if(sharingName == "Any" && Spout.instance.activeSenders.Count > 0)
{
texture = Spout.instance.activeSenders[Spout.instance.activeSenders.Count-1].getTexture();
}
}
public Texture2D texture
{
get { return _texture; }
set {
_texture = value;
if(_texture == null) _texture = Spout.nullTexture;
#if false
try { GetComponent<Renderer>().sharedMaterial.mainTexture = _texture; } catch { }
try { GetComponent<UnityEngine.UI.RawImage>().texture = _texture; } catch { }
#else
if(GetComponent<Renderer>() != null)
{
GetComponent<Renderer>().sharedMaterial.mainTexture = _texture;
}
if (GetComponent<UnityEngine.UI.RawImage>() != null)
{
GetComponent<UnityEngine.UI.RawImage>().texture = _texture;
}
#endif
}
}
[SerializeField]
public string sharingName
{
get { return _sharingName; }
set {
if(_sharingName == value && sharingName != "Any") return;
_sharingName = value;
//Debug.Log("sharingName:"+_sharingName);
if(sharingName == "Any")
{
if(Spout.instance.activeSenders != null && Spout.instance.activeSenders.Count > 0)
{
texture = Spout.instance.activeSenders[Spout.instance.activeSenders.Count-1].getTexture();
}
}else
{
//Debug.Log ("Set sharing name :"+sharingName);
TextureInfo texInfo = Spout.instance.getTextureInfo(sharingName);
if(texInfo != null) {
texture = texInfo.getTexture ();
}
else
{
if(sharingName != Spout.fakeName)Debug.LogWarning ("Sender "+sharingName+" does not exist");
texture = Spout.nullTexture;
/*
texture = new Texture2D(32,32);
//new Texture2D(32,32,TextureFormat.RGBA32,true,true);
texture.hideFlags = HideFlags.HideAndDontSave;
*/
}
}
}
}
}
}

@ -1,236 +0,0 @@
/*
* Spout4Unity
* Copyright © 2014-2015 Benjamin Kuperberg
* Copyright © 2015 Stefan Schlupek
* All rights reserved
*/
using UnityEngine;
using System.Collections;
using System;
namespace Spout
{
[Serializable]
[ExecuteInEditMode]
[Obsolete("This component is deprecated. Use ImageEffectSpoutSender component instead.", false)]
public class SpoutSender : MonoBehaviour
{
//according to dxgiformat.h :
//tested with DXGI_FORMAT_R8G8B8A8_UNORM (ATI Card)
public string sharingName = "UnitySender";
public Texture texture;
public Spout.TextureFormat textureFormat = Spout.TextureFormat.DXGI_FORMAT_R8G8B8A8_UNORM;
public bool debugConsole = false;
private bool senderIsCreated;
#if UNITY_EDITOR
private Camera _cam;
#endif
//make this public if you want
//It's better you set this always to true!
//There are problems with creating a sender at OnEnable at Editor/App Start time so we have a little delay hack that calls the CreateSender at Update()
private bool StartupDelay = true;
// if there are problems you can increase this value
private int _startupFramesDelay = 3;
private int _startUpFrameCount;
private int _createAttempts = 5;
private int _attempts = 0;
#pragma warning disable 414
//In EditMode we have to force the camera to render.But as this is called 100 times per second beware of your performance, so we only render at a specific interval
private int _editorUpdateFrameInterval = 10;
#pragma warning restore 414
private int _frameCounter;
void Awake()
{
//Debug.Log("SpoutSender.Awake");
//if(debugConsole) Spout2.instance.initDebugConsole();
#if UNITY_EDITOR
_cam = GetComponent<Camera>() as Camera;
#endif
}
void Start()
{
}
void OnEnable()
{
//Debug.Log("SpoutSender.OnEnable");
#if UNITY_EDITOR
if (!Application.isPlaying)
{
UnityEditor.EditorApplication.update -= _Update;
UnityEditor.EditorApplication.update += _Update;
}
#endif
if (debugConsole) Spout.instance.initDebugConsole();
_startUpFrameCount = 0;
_attempts = 0;
//Problem with creatingSender and disabled hosting Gameobject.(You always have to call OnEnable twice to get a Sender created)
//It's better to do the real createSender call at OnUpdate.
if (!StartupDelay) _CreateSender();
}
void OnDisable()
{
Debug.Log("SpoutSender.OnDisable");
//we can't call Spout2.instance because on Disable is also called when scene is destroyed.
//so a nother instance of Spout could be generated in the moment when the Spout2 instance is destroyed!
#if UNITY_EDITOR
UnityEditor.EditorApplication.update -= _Update;
#endif
_CloseSender();
}
void Update()
{
_Update();
}
void _Update()
{
//Debug.Log("SpoutSender.Update");
if (texture == null) return;
//in EditMode we have to force the camera to render.But as this is called 100 times per second beware of your performance, so we only render at a special interval
#if UNITY_EDITOR
if (!Application.isPlaying)
{
_frameCounter++;
_frameCounter %= _editorUpdateFrameInterval;
if (Spout.isEnabledInEditor)
{
if (_cam != null)
{
if (_frameCounter == 0) _cam.Render();
}
}
}
#endif
if (senderIsCreated)
{
Spout.instance.UpdateSender(sharingName, texture);
//Debug.Log("Update sender :"+updateSenderResult);
}
else
{
//this is the delay
if (StartupDelay)
{
_startUpFrameCount++;
if (_startUpFrameCount < _startupFramesDelay) return;
if (_attempts > _createAttempts) return;
_CreateSender();
}
}
}
void OnDestroy()
{
}
private void _CreateSender()
{
//Debug.Log("SpoutSender._CreateSender");
if (texture == null) return;
if (!Spout.isInit) return;
if (!Spout.instance.enabled) return;
#if UNITY_EDITOR
if (!Application.isPlaying && !Spout.isEnabledInEditor) return;
#endif
//Debug.Log("SpoutSender._CreateSender");
if (!senderIsCreated)
{
Debug.Log("Sender is not created, creating one");
senderIsCreated = Spout.instance.CreateSender(sharingName, texture, (int)textureFormat);
}
_attempts++;
if (_attempts > _createAttempts) Debug.LogWarning(String.Format("There are problems with creating the sender {0}. Please check your settings or restart Unity.", sharingName));
#if UNITY_EDITOR
if (_cam != null)
{
if (_cam.targetTexture == null || _cam.targetTexture != texture)
{
Debug.LogWarning("Your Camera has no Target Texture or the texture that the Spout Sender uses is different!");
if (texture != null) _cam.targetTexture = (RenderTexture)texture;
}
}
#endif
Spout.instance.OnSenderStopped -= OnSenderStoppedDelegate;
Spout.instance.OnSenderStopped += OnSenderStoppedDelegate;
Spout.instance.OnAllSendersStopped -= OnAllSendersStoppedDelegate;
Spout.instance.OnAllSendersStopped += OnAllSendersStoppedDelegate;
Spout.instance.OnEnabled -= _OnSpoutEnabled;
Spout.instance.OnEnabled += _OnSpoutEnabled;
}
private void _OnSpoutEnabled()
{
//Debug.Log("SpoutSender._OnSpoutEnabled");
if (enabled)
{
//force a reconnection
enabled = !enabled;
enabled = !enabled;
}
}
private void _CloseSender()
{
Debug.Log("SpoutSender._CloseSender:" + sharingName);
if (senderIsCreated) Spout.CloseSender(sharingName);
_CloseSenderCleanUpData();
}
private void OnSenderStoppedDelegate(object sender, TextureShareEventArgs e)
{
//Debug.Log("SpoutSender.OnSenderStoppedDelegate:"+e.sharingName);
if (e.sharingName == sharingName)
{
_CloseSenderCleanUpData();
}
}
private void OnAllSendersStoppedDelegate()
{
_CloseSenderCleanUpData();
}
private void _CloseSenderCleanUpData()
{
senderIsCreated = false;
}
}
}

@ -1,82 +0,0 @@
/*
* Spout4Unity
* Copyright © 2014-2015 Benjamin Kuperberg
* Copyright © 2015 Stefan Schlupek
* All rights reserved
*/
using UnityEngine;
using System.Collections;
using System;
namespace Spout{
public class TextureInfo {
public string name;
private int w;
private int h;
private IntPtr resourceView;
private Texture2D tex;
// Use this for initialization
public TextureInfo (string name) {
this.name = name;
}
public void setInfos(int width, int height, IntPtr resourceView){
this.w = width;
this.h = height;
this.resourceView = resourceView;
}
public Texture2D getTexture()
{
if(resourceView == IntPtr.Zero)
{
Debug.LogWarning("ResourceView is null, returning empty texture");
tex = null;
//Resources.UnloadUnusedAssets();
//GC.Collect();
//There could be problems with creating a Texture2d at this point!
//tex = new Texture2D(64,64,TextureFormat.RGBA32,false,true);//new Texture2D(64,64);
//tex.hideFlags = HideFlags.HideAndDontSave;
}
else
{
if(tex == null) {
tex = Texture2D.CreateExternalTexture(w,h,TextureFormat.RGBA32,true,true,resourceView);
/*
Without setting the Hideflags there seems to be a reference floating in the scene which causes great trouble with [ExecuteInEditmode] at OnDestroy
And we get some weired exception when enter PlayMode and there is an already open Spout sender outside from Unity
*/
tex.hideFlags = HideFlags.HideAndDontSave;
}
}
return tex;
}
//Make it comparable for Linq
public override bool Equals(object obj)
{
TextureInfo q = obj as TextureInfo;
return q != null && q.name == this.name ;
}
public override int GetHashCode()
{
return this.name.GetHashCode() ^ this.name.GetHashCode();
}
}
}

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 9403bcc28b14bab4086ab044f04eb4e2
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

@ -1,9 +0,0 @@
fileFormatVersion: 2
guid: dc01a313f01e7504586df3241c4199e6
folderAsset: yes
timeCreated: 1488451788
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

@ -1,38 +0,0 @@
// This code is distributed under MIT license.
// Copyright (c) 2015 George Mamaladze
// See license.txt or http://opensource.org/licenses/mit-license.php
using Gma.System.MouseKeyHook.Implementation;
namespace Gma.System.MouseKeyHook
{
/// <summary>
/// This is the class to start with.
/// </summary>
public static class Hook
{
/// <summary>
/// Here you find all application wide events. Both mouse and keyboard.
/// </summary>
/// <returns>
/// Returned instance is used for event subscriptions.
/// You can refetch it (you will get the same instance anyway).
/// </returns>
public static IKeyboardMouseEvents AppEvents()
{
return new AppEventFacade();
}
/// <summary>
/// Here you find all application wide events. Both mouse and keyboard.
/// </summary>
/// <returns>
/// Returned instance is used for event subscriptions.
/// You can refetch it (you will get the same instance anyway).
/// </returns>
public static IKeyboardMouseEvents GlobalEvents()
{
return new GlobalEventFacade();
}
}
}

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 0c6113b90df3d3748af2d69410b579d3
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

@ -1,5 +0,0 @@
fileFormatVersion: 2
guid: d829ad4124538794d9cccd3a438c0ae1
folderAsset: yes
DefaultImporter:
userData:

@ -1,33 +0,0 @@
// This code is distributed under MIT license.
// Copyright (c) 2015 George Mamaladze
// See license.txt or http://opensource.org/licenses/mit-license.php
using System;
namespace Gma.System.MouseKeyHook.HotKeys
{
/// <summary>
/// The event arguments passed when a HotKeySet's OnHotKeysDownHold event is triggered.
/// </summary>
public sealed class HotKeyArgs : EventArgs
{
private readonly DateTime m_TimeOfExecution;
/// <summary>
/// Creates an instance of the HotKeyArgs.
/// <param name="triggeredAt">Time when the event was triggered</param>
/// </summary>
public HotKeyArgs(DateTime triggeredAt)
{
m_TimeOfExecution = triggeredAt;
}
/// <summary>
/// Time when the event was triggered
/// </summary>
public DateTime Time
{
get { return m_TimeOfExecution; }
}
}
}

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 9cf432a5dbc4d504c803933115b90809
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

@ -1,287 +0,0 @@
// This code is distributed under MIT license.
// Copyright (c) 2015 George Mamaladze
// See license.txt or http://opensource.org/licenses/mit-license.php
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using Gma.System.MouseKeyHook.Implementation;
namespace Gma.System.MouseKeyHook.HotKeys
{
/// <summary>
/// An immutable set of Hot Keys that provides an event for when the set is activated.
/// </summary>
public class HotKeySet
{
/// <summary>
/// A delegate representing the signature for the OnHotKeysDownHold event
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public delegate void HotKeyHandler(object sender, HotKeyArgs e);
private readonly IEnumerable<Keys> m_hotkeys; //hotkeys provided by the user.
private readonly Dictionary<Keys, bool> m_hotkeystate; //Keeps track of the status of the set of Keys
/*
* Example of m_remapping:
* a single key from the set of Keys requested is chosen to be the reference key (aka primary key)
*
* m_remapping[ Keys.LShiftKey ] = Keys.LShiftKey
* m_remapping[ Keys.RShiftKey ] = Keys.LShiftKey
*
* This allows the m_hotkeystate to use a single key (primary key) from the set that will act on behalf of all the keys in the set,
* which in turn reduces to this:
*
* Keys k = Keys.RShiftKey
* Keys primaryKey = PrimaryKeyOf( k ) = Keys.LShiftKey
* m_hotkeystate[ primaryKey ] = true/false
*/
private readonly Dictionary<Keys, Keys> m_remapping; //Used for mapping multiple keys to a single key
private bool m_enabled = true; //enabled by default
//These provide the actual status of whether a set is truly activated or not.
private int m_hotkeydowncount; //number of hot keys down
private int m_remappingCount;
//the number of remappings, i.e., a set of mappings, not the individual count in m_remapping
/// <summary>
/// Creates an instance of the HotKeySet class. Once created, the keys cannot be changed.
/// </summary>
/// <param name="hotkeys">Set of Hot Keys</param>
public HotKeySet(IEnumerable<Keys> hotkeys)
{
m_hotkeystate = new Dictionary<Keys, bool>();
m_remapping = new Dictionary<Keys, Keys>();
m_hotkeys = hotkeys;
InitializeKeys();
}
/// <summary>
/// Enables the ability to name the set
/// </summary>
public string Name { get; set; }
/// <summary>
/// Enables the ability to describe what the set is used for or supposed to do
/// </summary>
public string Description { get; set; }
/// <summary>
/// Gets the set of hotkeys that this class handles.
/// </summary>
public IEnumerable<Keys> HotKeys
{
get { return m_hotkeys; }
}
/// <summary>
/// Returns whether the set of Keys is activated
/// </summary>
public bool HotKeysActivated
{
//The number of sets of remapped keys is used to offset the amount originally specified by the user.
get { return m_hotkeydowncount == (m_hotkeystate.Count - m_remappingCount); }
}
/// <summary>
/// Gets or sets the enabled state of the HotKey set.
/// </summary>
public bool Enabled
{
get { return m_enabled; }
set
{
if (value)
InitializeKeys(); //must get the actual current state of each key to update
m_enabled = value;
}
}
/// <summary>
/// Called as the user holds down the keys in the set. It is NOT triggered the first time the keys are set.
/// <see cref="OnHotKeysDownOnce" />
/// </summary>
public event HotKeyHandler OnHotKeysDownHold;
/// <summary>
/// Called whenever the hot key set is no longer active. This is essentially a KeyPress event, indicating that a full
/// key cycle has occurred, only for HotKeys because a single key removed from the set constitutes an incomplete set.
/// </summary>
public event HotKeyHandler OnHotKeysUp;
/// <summary>
/// Called the first time the down keys are set. It does not get called throughout the duration the user holds it but
/// only the
/// first time it's activated.
/// </summary>
public event HotKeyHandler OnHotKeysDownOnce;
/// <summary>
/// General invocation handler
/// </summary>
/// <param name="hotKeyDelegate"></param>
private void InvokeHotKeyHandler(HotKeyHandler hotKeyDelegate)
{
if (hotKeyDelegate != null)
hotKeyDelegate(this, new HotKeyArgs(DateTime.Now));
}
/// <summary>
/// Adds the keys into the dictionary tracking the keys and gets the real-time status of the Keys
/// from the OS
/// </summary>
private void InitializeKeys()
{
foreach (Keys k in HotKeys)
{
if (m_hotkeystate.ContainsKey(k))
m_hotkeystate.Add(k, false);
//assign using the current state of the keyboard
m_hotkeystate[k] = KeyboardState.GetCurrent().IsDown(k);
}
}
/// <summary>
/// Unregisters a previously set exclusive or based on the primary key.
/// </summary>
/// <param name="anyKeyInTheExclusiveOrSet">Any key used in the Registration method used to create an exclusive or set</param>
/// <returns>
/// True if successful. False doesn't indicate a failure to unregister, it indicates that the Key is not
/// registered as an Exclusive Or key or it's not the Primary Key.
/// </returns>
public bool UnregisterExclusiveOrKey(Keys anyKeyInTheExclusiveOrSet)
{
Keys primaryKey = GetExclusiveOrPrimaryKey(anyKeyInTheExclusiveOrSet);
if (primaryKey == Keys.None || !m_remapping.ContainsValue(primaryKey))
return false;
List<Keys> keystoremove = new List<Keys>();
foreach (KeyValuePair<Keys, Keys> pair in m_remapping)
{
if (pair.Value == primaryKey)
keystoremove.Add(pair.Key);
}
foreach (Keys k in keystoremove)
m_remapping.Remove(k);
--m_remappingCount;
return true;
}
/// <summary>
/// Registers a group of Keys that are already part of the HotKeySet in order to provide better flexibility among keys.
/// <example>
/// <code>
/// HotKeySet hks = new HotKeySet( new [] { Keys.T, Keys.LShiftKey, Keys.RShiftKey } );
/// RegisterExclusiveOrKey( new [] { Keys.LShiftKey, Keys.RShiftKey } );
/// </code>
/// allows either Keys.LShiftKey or Keys.RShiftKey to be combined with Keys.T.
/// </example>
/// </summary>
/// <param name="orKeySet"></param>
/// <returns>Primary key used for mapping or Keys.None on error</returns>
public Keys RegisterExclusiveOrKey(IEnumerable<Keys> orKeySet)
{
//Verification first, so as to not leave the m_remapping with a partial set.
foreach (Keys k in orKeySet)
{
if (!m_hotkeystate.ContainsKey(k))
return Keys.None;
}
int i = 0;
Keys primaryKey = Keys.None;
//Commit after verification
foreach (Keys k in orKeySet)
{
if (i == 0)
primaryKey = k;
m_remapping[k] = primaryKey;
++i;
}
//Must increase to keep a true count of how many keys are necessary for the activation to be true
++m_remappingCount;
return primaryKey;
}
/// <summary>
/// Gets the primary key
/// </summary>
/// <param name="k"></param>
/// <returns>The primary key if it exists, otherwise Keys.None</returns>
private Keys GetExclusiveOrPrimaryKey(Keys k)
{
return (m_remapping.ContainsKey(k) ? m_remapping[k] : Keys.None);
}
/// <summary>
/// Resolves obtaining the key used for state checking.
/// </summary>
/// <param name="k"></param>
/// <returns>The primary key if it exists, otherwise the key entered</returns>
private Keys GetPrimaryKey(Keys k)
{
//If the key is remapped then get the primary keys
return (m_remapping.ContainsKey(k) ? m_remapping[k] : k);
}
/// <summary>
/// </summary>
/// <param name="kex"></param>
internal void OnKey(KeyEventArgsExt kex)
{
if (!Enabled)
return;
//Gets the primary key if mapped to a single key or gets the key itself
Keys primaryKey = GetPrimaryKey(kex.KeyCode);
if (kex.IsKeyDown)
OnKeyDown(primaryKey);
else //reset
OnKeyUp(primaryKey);
}
private void OnKeyDown(Keys k)
{
//If the keys are activated still then keep invoking the event
if (HotKeysActivated)
InvokeHotKeyHandler(OnHotKeysDownHold); //Call the duration event
//indicates the key's state is current false but the key is now down
else if (m_hotkeystate.ContainsKey(k) && !m_hotkeystate[k])
{
m_hotkeystate[k] = true; //key's state is down
++m_hotkeydowncount; //increase the number of keys down in this set
if (HotKeysActivated) //because of the increase, check whether the set is activated
InvokeHotKeyHandler(OnHotKeysDownOnce); //Call the initial event
}
}
private void OnKeyUp(Keys k)
{
if (m_hotkeystate.ContainsKey(k) && m_hotkeystate[k]) //indicates the key's state was down but now it's up
{
bool wasActive = HotKeysActivated;
m_hotkeystate[k] = false; //key's state is up
--m_hotkeydowncount; //this set is no longer ready
if (wasActive)
InvokeHotKeyHandler(OnHotKeysUp); //call the KeyUp event because the set is no longer active
}
}
}
}

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: e6f9d864ee9efe14db3bc0e43168dd63
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

@ -1,48 +0,0 @@
// This code is distributed under MIT license.
// Copyright (c) 2015 George Mamaladze
// See license.txt or http://opensource.org/licenses/mit-license.php
using System.Collections.Generic;
namespace Gma.System.MouseKeyHook.HotKeys
{
/// <summary>
/// A collection of HotKeySets
/// </summary>
public sealed class HotKeySetCollection : List<HotKeySet>
{
private KeyChainHandler m_keyChain;
/// <summary>
/// Adds a HotKeySet to the collection.
/// </summary>
/// <param name="hks"></param>
public new void Add(HotKeySet hks)
{
m_keyChain += hks.OnKey;
base.Add(hks);
}
/// <summary>
/// Removes the HotKeySet from the collection.
/// </summary>
/// <param name="hks"></param>
public new void Remove(HotKeySet hks)
{
m_keyChain -= hks.OnKey;
base.Remove(hks);
}
/// <summary>
/// Uses a multi-case delegate to invoke individual HotKeySets if the Key is in use by any HotKeySets.
/// </summary>
/// <param name="e"></param>
internal void OnKey(KeyEventArgsExt e)
{
if (m_keyChain != null)
m_keyChain(e);
}
private delegate void KeyChainHandler(KeyEventArgsExt kex);
}
}

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: abb1b5bc0868959418594e18ca2d761e
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

@ -1,4 +0,0 @@
// This code is distributed under MIT license.
// Copyright (c) 2015 George Mamaladze
// See license.txt or http://opensource.org/licenses/mit-license.php

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: e75fe692f990b2948bff81921d4248f0
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

@ -1,85 +0,0 @@
Until a separate, full-featured test version is ready, here's a quick update that can be made to the TestFormHookListeners:
//HotKeySetsListener inherits KeyboardHookListener
private readonly HotKeySetsListener m_KeyboardHookManager;
private readonly MouseHookListener m_MouseHookManager;
public TestFormHookListeners()
{
InitializeComponent();
//m_KeyboardHookManager = new KeyboardHookListener(new GlobalHooker());
//m_KeyboardHookManager.Enabled = true;
m_MouseHookManager = new MouseHookListener( new GlobalHooker() ) { Enabled = true };
HotKeySetCollection hkscoll = new HotKeySetCollection();
m_KeyboardHookManager = new HotKeySetsListener( hkscoll, new GlobalHooker() ) { Enabled = true };
BuildHotKeyTests( hkscoll );
}
private void BuildHotKeyTests( HotKeySetCollection hkscoll )
{
//Hot Keys are enabled by default. Use the Enabled property to adjust.
hkscoll.Add( BindHotKeySet( new[] { Keys.T, Keys.LShiftKey }, null, OnHotKeyDownOnce1, OnHotKeyDownHold1, OnHotKeyUp1, "test1" ) );
hkscoll.Add( BindHotKeySet( new[] { Keys.T, Keys.LControlKey, Keys.RControlKey }, new[] { Keys.LControlKey, Keys.RControlKey }, OnHotKeyDownGeneral2, OnHotKeyDownGeneral2, OnHotKeyUp1, "test2" ) );
}
private static HotKeySet BindHotKeySet( IEnumerable<Keys> ks,
IEnumerable<Keys> xorKeys,
HotKeySet.HotKeyHandler onEventDownOnce,
HotKeySet.HotKeyHandler onEventDownHold,
HotKeySet.HotKeyHandler onEventUp,
string name )
{
//Declare ALL Keys that will be available in this set, including any keys you want to register as an either/or subset
HotKeySet hks = new HotKeySet( ks );
//Indicates that the keys in this array will be treated as an OR rather than AND: LShiftKey or RShiftKey
//The keys MUST be a subset of the ks Keys array.
if ( hks.RegisterExclusiveOrKey( xorKeys ) == Keys.None ) //Keys.None indicates an error
{
MessageBox.Show( null, @"Unable to register subset: " + String.Join( ", ", xorKeys ),
@"Subset registration error", MessageBoxButtons.OK, MessageBoxIcon.Error );
}
hks.OnHotKeysDownOnce += onEventDownOnce; //The first time the key is down
hks.OnHotKeysDownHold += onEventDownHold; //Fired as long as the user holds the hot keys down but is not fired the first time.
hks.OnHotKeysUp += onEventUp; //Whenever a key from the set is no longer being held down
hks.Name = ( name ?? String.Empty );
return hks;
}
private void GeneralHotKeyEvent( object sender, DateTime timeTriggered, string eventType )
{
HotKeySet hks = sender as HotKeySet;
string kstring = String.Join( ", ", hks.HotKeys );
Log( String.Format( "{0}: {2} {1} - {3}\r\n", timeTriggered.TimeOfDay, eventType, hks.Name, kstring ) );
}
private void OnHotKeyDownGeneral2( object sender, HotKeyArgs e )
{
GeneralHotKeyEvent( sender, e.Time, "ONCE/HOLD" );
}
private void OnHotKeyDownOnce1( object sender, HotKeyArgs e )
{
GeneralHotKeyEvent( sender, e.Time, "ONCE" );
}
private void OnHotKeyDownHold1( object sender, HotKeyArgs e )
{
GeneralHotKeyEvent( sender, e.Time, "HOLD" );
}
private void OnHotKeyUp1( object sender, HotKeyArgs e )
{
GeneralHotKeyEvent( sender, e.Time, "UP" );
}

@ -1,4 +0,0 @@
fileFormatVersion: 2
guid: 8fd70ad9e60802b45aec220394edef27
TextScriptImporter:
userData:

@ -1,43 +0,0 @@
// This code is distributed under MIT license.
// Copyright (c) 2015 George Mamaladze
// See license.txt or http://opensource.org/licenses/mit-license.php
using System.Windows.Forms;
namespace Gma.System.MouseKeyHook
{
/// <summary>
/// Provides keyboard events
/// </summary>
public interface IKeyboardEvents
{
/// <summary>
/// Occurs when a key is pressed.
/// </summary>
event KeyEventHandler KeyDown;
/// <summary>
/// Occurs when a key is pressed.
/// </summary>
/// <remarks>
/// Key events occur in the following order:
/// <list type="number">
/// <item>KeyDown</item>
/// <item>KeyPress</item>
/// <item>KeyUp</item>
/// </list>
/// The KeyPress event is not raised by non-character keys; however, the non-character keys do raise the KeyDown and
/// KeyUp events.
/// Use the KeyChar property to sample keystrokes at run time and to consume or modify a subset of common keystrokes.
/// To handle keyboard events only in your application and not enable other applications to receive keyboard events,
/// set the <see cref="KeyPressEventArgs.Handled" /> property in your form's KeyPress event-handling method to
/// <b>true</b>.
/// </remarks>
event KeyPressEventHandler KeyPress;
/// <summary>
/// Occurs when a key is released.
/// </summary>
event KeyEventHandler KeyUp;
}
}

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 8bff586109adc39479700bee873f4bae
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

@ -1,15 +0,0 @@
// This code is distributed under MIT license.
// Copyright (c) 2015 George Mamaladze
// See license.txt or http://opensource.org/licenses/mit-license.php
using System;
namespace Gma.System.MouseKeyHook
{
/// <summary>
/// Provides keyboard and mouse events.
/// </summary>
public interface IKeyboardMouseEvents : IKeyboardEvents, IMouseEvents, IDisposable
{
}
}

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: a43cf702f9faf504a843b7de593673b6
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

@ -1,110 +0,0 @@
// This code is distributed under MIT license.
// Copyright (c) 2015 George Mamaladze
// See license.txt or http://opensource.org/licenses/mit-license.php
using System;
using System.Windows.Forms;
namespace Gma.System.MouseKeyHook
{
/// <summary>
/// Provides all mouse events.
/// </summary>
public interface IMouseEvents
{
/// <summary>
/// Occurs when the mouse pointer is moved.
/// </summary>
event MouseEventHandler MouseMove;
/// <summary>
/// Occurs when the mouse pointer is moved.
/// </summary>
/// <remarks>
/// This event provides extended arguments of type <see cref="MouseEventArgs" /> enabling you to
/// suppress further processing of mouse movement in other applications.
/// </remarks>
event EventHandler<MouseEventExtArgs> MouseMoveExt;
/// <summary>
/// Occurs when a click was performed by the mouse.
/// </summary>
event MouseEventHandler MouseClick;
/// <summary>
/// Occurs when the mouse a mouse button is pressed.
/// </summary>
event MouseEventHandler MouseDown;
/// <summary>
/// Occurs when the mouse a mouse button is pressed.
/// </summary>
/// <remarks>
/// This event provides extended arguments of type <see cref="MouseEventArgs" /> enabling you to
/// suppress further processing of mouse click in other applications.
/// </remarks>
event EventHandler<MouseEventExtArgs> MouseDownExt;
/// <summary>
/// Occurs when a mouse button is released.
/// </summary>
event MouseEventHandler MouseUp;
/// <summary>
/// Occurs when a mouse button is released.
/// </summary>
/// <remarks>
/// This event provides extended arguments of type <see cref="MouseEventArgs" /> enabling you to
/// suppress further processing of mouse click in other applications.
/// </remarks>
event EventHandler<MouseEventExtArgs> MouseUpExt;
/// <summary>
/// Occurs when the mouse wheel moves.
/// </summary>
event MouseEventHandler MouseWheel;
/// <summary>
/// Occurs when the mouse wheel moves.
/// </summary>
/// <remarks>
/// This event provides extended arguments of type <see cref="MouseEventArgs" /> enabling you to
/// suppress further processing of mouse wheel moves in other applications.
/// </remarks>
event EventHandler<MouseEventExtArgs> MouseWheelExt;
/// <summary>
/// Occurs when a mouse button is double-clicked.
/// </summary>
event MouseEventHandler MouseDoubleClick;
/// <summary>
/// Occurs when a drag event has started (left button held down whilst moving more than the system drag threshold).
/// </summary>
event MouseEventHandler MouseDragStarted;
/// <summary>
/// Occurs when a drag event has started (left button held down whilst moving more than the system drag threshold).
/// </summary>
/// <remarks>
/// This event provides extended arguments of type <see cref="MouseEventArgs" /> enabling you to
/// suppress further processing of mouse movement in other applications.
/// </remarks>
event EventHandler<MouseEventExtArgs> MouseDragStartedExt;
/// <summary>
/// Occurs when a drag event has completed.
/// </summary>
event MouseEventHandler MouseDragFinished;
/// <summary>
/// Occurs when a drag event has completed.
/// </summary>
/// <remarks>
/// This event provides extended arguments of type <see cref="MouseEventArgs" /> enabling you to
/// suppress further processing of mouse movement in other applications.
/// </remarks>
event EventHandler<MouseEventExtArgs> MouseDragFinishedExt;
}
}

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 4a5514476bcb36e449910cef0f67921d
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

@ -1,5 +0,0 @@
fileFormatVersion: 2
guid: 7b22d83a9d2d21f40a0518969040e5ff
folderAsset: yes
DefaultImporter:
userData:

@ -1,19 +0,0 @@
// This code is distributed under MIT license.
// Copyright (c) 2015 George Mamaladze
// See license.txt or http://opensource.org/licenses/mit-license.php
namespace Gma.System.MouseKeyHook.Implementation
{
internal class AppEventFacade : EventFacade
{
protected override MouseListener CreateMouseListener()
{
return new AppMouseListener();
}
protected override KeyListener CreateKeyListener()
{
return new AppKeyListener();
}
}
}

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: e61e069a5bc6f704896c3686104b881c
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

@ -1,27 +0,0 @@
// This code is distributed under MIT license.
// Copyright (c) 2015 George Mamaladze
// See license.txt or http://opensource.org/licenses/mit-license.php
using System.Collections.Generic;
using Gma.System.MouseKeyHook.WinApi;
namespace Gma.System.MouseKeyHook.Implementation
{
internal class AppKeyListener : KeyListener
{
public AppKeyListener()
: base(HookHelper.HookAppKeyboard)
{
}
protected override IEnumerable<KeyPressEventArgsExt> GetPressEventArgs(CallbackData data)
{
return KeyPressEventArgsExt.FromRawDataApp(data);
}
protected override KeyEventArgsExt GetDownUpEventArgs(CallbackData data)
{
return KeyEventArgsExt.FromRawDataApp(data);
}
}
}

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 3697ceb009eb6e746bd138ba6bcc9513
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

@ -1,21 +0,0 @@
// This code is distributed under MIT license.
// Copyright (c) 2015 George Mamaladze
// See license.txt or http://opensource.org/licenses/mit-license.php
using Gma.System.MouseKeyHook.WinApi;
namespace Gma.System.MouseKeyHook.Implementation
{
internal class AppMouseListener : MouseListener
{
public AppMouseListener()
: base(HookHelper.HookAppMouse)
{
}
protected override MouseEventExtArgs GetEventArgs(CallbackData data)
{
return MouseEventExtArgs.FromRawDataApp(data);
}
}
}

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: a350bc2476043194a838ee02d3d202c4
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

@ -1,26 +0,0 @@
// This code is distributed under MIT license.
// Copyright (c) 2015 George Mamaladze
// See license.txt or http://opensource.org/licenses/mit-license.php
using System;
using Gma.System.MouseKeyHook.WinApi;
namespace Gma.System.MouseKeyHook.Implementation
{
internal abstract class BaseListener : IDisposable
{
protected BaseListener(Subscribe subscribe)
{
Handle = subscribe(Callback);
}
protected HookResult Handle { get; set; }
public void Dispose()
{
Handle.Dispose();
}
protected abstract bool Callback(CallbackData data);
}
}

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 4dfaa3dcdb23c5e42866682f65c82624
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

@ -1,33 +0,0 @@
// This code is distributed under MIT license.
// Copyright (c) 2015 George Mamaladze
// See license.txt or http://opensource.org/licenses/mit-license.php
using System.Windows.Forms;
namespace Gma.System.MouseKeyHook.Implementation
{
internal class ButtonSet
{
private MouseButtons m_Set;
public ButtonSet()
{
m_Set = MouseButtons.None;
}
public void Add(MouseButtons element)
{
m_Set |= element;
}
public void Remove(MouseButtons element)
{
m_Set &= ~element;
}
public bool Contains(MouseButtons element)
{
return (m_Set & element) != MouseButtons.None;
}
}
}

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: e313f6b68d303dd40850940c4d15aad6
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

@ -1,10 +0,0 @@
// This code is distributed under MIT license.
// Copyright (c) 2015 George Mamaladze
// See license.txt or http://opensource.org/licenses/mit-license.php
using Gma.System.MouseKeyHook.WinApi;
namespace Gma.System.MouseKeyHook.Implementation
{
internal delegate bool Callback(CallbackData data);
}

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: c7106e5726083bc419777aa1bd7e0584
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

@ -1,143 +0,0 @@
// This code is distributed under MIT license.
// Copyright (c) 2015 George Mamaladze
// See license.txt or http://opensource.org/licenses/mit-license.php
using System;
using System.Windows.Forms;
namespace Gma.System.MouseKeyHook.Implementation
{
internal abstract class EventFacade : IKeyboardMouseEvents
{
private KeyListener m_KeyListenerCache;
private MouseListener m_MouseListenerCache;
public event KeyEventHandler KeyDown
{
add { GetKeyListener().KeyDown += value; }
remove { GetKeyListener().KeyDown -= value; }
}
public event KeyPressEventHandler KeyPress
{
add { GetKeyListener().KeyPress += value; }
remove { GetKeyListener().KeyPress -= value; }
}
public event KeyEventHandler KeyUp
{
add { GetKeyListener().KeyUp += value; }
remove { GetKeyListener().KeyUp -= value; }
}
public event MouseEventHandler MouseMove
{
add { GetMouseListener().MouseMove += value; }
remove { GetMouseListener().MouseMove -= value; }
}
public event EventHandler<MouseEventExtArgs> MouseMoveExt
{
add { GetMouseListener().MouseMoveExt += value; }
remove { GetMouseListener().MouseMoveExt -= value; }
}
public event MouseEventHandler MouseClick
{
add { GetMouseListener().MouseClick += value; }
remove { GetMouseListener().MouseClick -= value; }
}
public event MouseEventHandler MouseDown
{
add { GetMouseListener().MouseDown += value; }
remove { GetMouseListener().MouseDown -= value; }
}
public event EventHandler<MouseEventExtArgs> MouseDownExt
{
add { GetMouseListener().MouseDownExt += value; }
remove { GetMouseListener().MouseDownExt -= value; }
}
public event MouseEventHandler MouseUp
{
add { GetMouseListener().MouseUp += value; }
remove { GetMouseListener().MouseUp -= value; }
}
public event EventHandler<MouseEventExtArgs> MouseUpExt
{
add { GetMouseListener().MouseUpExt += value; }
remove { GetMouseListener().MouseUpExt -= value; }
}
public event MouseEventHandler MouseWheel
{
add { GetMouseListener().MouseWheel += value; }
remove { GetMouseListener().MouseWheel -= value; }
}
public event EventHandler<MouseEventExtArgs> MouseWheelExt
{
add { GetMouseListener().MouseWheelExt += value; }
remove { GetMouseListener().MouseWheelExt -= value; }
}
public event MouseEventHandler MouseDoubleClick
{
add { GetMouseListener().MouseDoubleClick += value; }
remove { GetMouseListener().MouseDoubleClick -= value; }
}
public event MouseEventHandler MouseDragStarted {
add { GetMouseListener().MouseDragStarted += value; }
remove { GetMouseListener().MouseDragStarted -= value; }
}
public event EventHandler<MouseEventExtArgs> MouseDragStartedExt
{
add { GetMouseListener().MouseDragStartedExt += value; }
remove { GetMouseListener().MouseDragStartedExt -= value; }
}
public event MouseEventHandler MouseDragFinished
{
add { GetMouseListener().MouseDragFinished += value; }
remove { GetMouseListener().MouseDragFinished -= value; }
}
public event EventHandler<MouseEventExtArgs> MouseDragFinishedExt
{
add { GetMouseListener().MouseDragFinishedExt += value; }
remove { GetMouseListener().MouseDragFinishedExt -= value; }
}
public void Dispose()
{
if (m_MouseListenerCache != null) m_MouseListenerCache.Dispose();
if (m_KeyListenerCache != null) m_KeyListenerCache.Dispose();
}
private KeyListener GetKeyListener()
{
var target = m_KeyListenerCache;
if (target != null) return target;
target = CreateKeyListener();
m_KeyListenerCache = target;
return target;
}
private MouseListener GetMouseListener()
{
var target = m_MouseListenerCache;
if (target != null) return target;
target = CreateMouseListener();
m_MouseListenerCache = target;
return target;
}
protected abstract MouseListener CreateMouseListener();
protected abstract KeyListener CreateKeyListener();
}
}

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 2978fe448edc3c04388ef0037b24de38
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

@ -1,19 +0,0 @@
// This code is distributed under MIT license.
// Copyright (c) 2015 George Mamaladze
// See license.txt or http://opensource.org/licenses/mit-license.php
namespace Gma.System.MouseKeyHook.Implementation
{
internal class GlobalEventFacade : EventFacade
{
protected override MouseListener CreateMouseListener()
{
return new GlobalMouseListener();
}
protected override KeyListener CreateKeyListener()
{
return new GlobalKeyListener();
}
}
}

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: cbc3f02ac1de7c04a93ca0652da1b8dc
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

@ -1,27 +0,0 @@
// This code is distributed under MIT license.
// Copyright (c) 2015 George Mamaladze
// See license.txt or http://opensource.org/licenses/mit-license.php
using System.Collections.Generic;
using Gma.System.MouseKeyHook.WinApi;
namespace Gma.System.MouseKeyHook.Implementation
{
internal class GlobalKeyListener : KeyListener
{
public GlobalKeyListener()
: base(HookHelper.HookGlobalKeyboard)
{
}
protected override IEnumerable<KeyPressEventArgsExt> GetPressEventArgs(CallbackData data)
{
return KeyPressEventArgsExt.FromRawDataGlobal(data);
}
protected override KeyEventArgsExt GetDownUpEventArgs(CallbackData data)
{
return KeyEventArgsExt.FromRawDataGlobal(data);
}
}
}

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: dc35f860e517fc147983684333cef4c4
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

@ -1,73 +0,0 @@
// This code is distributed under MIT license.
// Copyright (c) 2015 George Mamaladze
// See license.txt or http://opensource.org/licenses/mit-license.php
using System.Windows.Forms;
using Gma.System.MouseKeyHook.WinApi;
namespace Gma.System.MouseKeyHook.Implementation
{
internal class GlobalMouseListener : MouseListener
{
private readonly int m_SystemDoubleClickTime;
private MouseButtons m_PreviousClicked;
private Point m_PreviousClickedPosition;
private int m_PreviousClickedTime;
public GlobalMouseListener()
: base(HookHelper.HookGlobalMouse)
{
m_SystemDoubleClickTime = MouseNativeMethods.GetDoubleClickTime();
}
protected override void ProcessDown(ref MouseEventExtArgs e)
{
if (IsDoubleClick(e))
{
e = e.ToDoubleClickEventArgs();
}
base.ProcessDown(ref e);
}
protected override void ProcessUp(ref MouseEventExtArgs e)
{
base.ProcessUp(ref e);
if (e.Clicks == 2)
{
StopDoubleClickWaiting();
}
if (e.Clicks == 1)
{
StartDoubleClickWaiting(e);
}
}
private void StartDoubleClickWaiting(MouseEventExtArgs e)
{
m_PreviousClicked = e.Button;
m_PreviousClickedTime = e.Timestamp;
m_PreviousClickedPosition = e.Point;
}
private void StopDoubleClickWaiting()
{
m_PreviousClicked = MouseButtons.None;
m_PreviousClickedTime = 0;
m_PreviousClickedPosition = new Point(0, 0);
}
private bool IsDoubleClick(MouseEventExtArgs e)
{
return
e.Button == m_PreviousClicked &&
e.Point == m_PreviousClickedPosition && // Click-move-click exception, see Patch 11222
e.Timestamp - m_PreviousClickedTime <= m_SystemDoubleClickTime;
}
protected override MouseEventExtArgs GetEventArgs(CallbackData data)
{
return MouseEventExtArgs.FromRawDataGlobal(data);
}
}
}

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: a74b2a12f2765414281b031d272643af
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

@ -1,71 +0,0 @@
// This code is distributed under MIT license.
// Copyright (c) 2015 George Mamaladze
// See license.txt or http://opensource.org/licenses/mit-license.php
using System.Collections.Generic;
using System.Windows.Forms;
using Gma.System.MouseKeyHook.WinApi;
namespace Gma.System.MouseKeyHook.Implementation
{
internal abstract class KeyListener : BaseListener, IKeyboardEvents
{
protected KeyListener(Subscribe subscribe)
: base(subscribe)
{
}
public event KeyEventHandler KeyDown;
public event KeyPressEventHandler KeyPress;
public event KeyEventHandler KeyUp;
public void InvokeKeyDown(KeyEventArgsExt e)
{
var handler = KeyDown;
if (handler == null || e.Handled || !e.IsKeyDown)
{
return;
}
handler(this, e);
}
public void InvokeKeyPress(KeyPressEventArgsExt e)
{
var handler = KeyPress;
if (handler == null || e.Handled || e.IsNonChar)
{
return;
}
handler(this, e);
}
public void InvokeKeyUp(KeyEventArgsExt e)
{
var handler = KeyUp;
if (handler == null || e.Handled || !e.IsKeyUp)
{
return;
}
handler(this, e);
}
protected override bool Callback(CallbackData data)
{
var eDownUp = GetDownUpEventArgs(data);
var pressEventArgs = GetPressEventArgs(data);
InvokeKeyDown(eDownUp);
foreach (var pressEventArg in pressEventArgs)
{
InvokeKeyPress(pressEventArg);
}
InvokeKeyUp(eDownUp);
return !eDownUp.Handled;
}
protected abstract IEnumerable<KeyPressEventArgsExt> GetPressEventArgs(CallbackData data);
protected abstract KeyEventArgsExt GetDownUpEventArgs(CallbackData data);
}
}

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 6dd5c819de01d4e4a8039b3f9aa76260
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

@ -1,111 +0,0 @@
// This code is distributed under MIT license.
// Copyright (c) 2015 George Mamaladze
// See license.txt or http://opensource.org/licenses/mit-license.php
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using Gma.System.MouseKeyHook.WinApi;
namespace Gma.System.MouseKeyHook.Implementation
{
/// <summary>
/// Contains a snapshot of a keyboard state at certain moment and provides methods
/// of querying whether specific keys are pressed or locked.
/// </summary>
/// <remarks>
/// This class is basically a managed wrapper of GetKeyboardState API function
/// http://msdn.microsoft.com/en-us/library/ms646299
/// </remarks>
internal class KeyboardState
{
private readonly byte[] m_KeyboardStateNative;
private KeyboardState(byte[] keyboardStateNative)
{
m_KeyboardStateNative = keyboardStateNative;
}
/// <summary>
/// Makes a snapshot of a keyboard state to the moment of call and returns an
/// instance of <see cref="KeyboardState" /> class.
/// </summary>
/// <returns>An instance of <see cref="KeyboardState" /> class representing a snapshot of keyboard state at certain moment.</returns>
public static KeyboardState GetCurrent()
{
byte[] keyboardStateNative = new byte[256];
KeyboardNativeMethods.GetKeyboardState(keyboardStateNative);
return new KeyboardState(keyboardStateNative);
}
internal byte[] GetNativeState()
{
return m_KeyboardStateNative;
}
/// <summary>
/// Indicates whether specified key was down at the moment when snapshot was created or not.
/// </summary>
/// <param name="key">Key (corresponds to the virtual code of the key)</param>
/// <returns><b>true</b> if key was down, <b>false</b> - if key was up.</returns>
public bool IsDown(Keys key)
{
byte keyState = GetKeyState(key);
bool isDown = GetHighBit(keyState);
return isDown;
}
/// <summary>
/// Indicate weather specified key was toggled at the moment when snapshot was created or not.
/// </summary>
/// <param name="key">Key (corresponds to the virtual code of the key)</param>
/// <returns>
/// <b>true</b> if toggle key like (CapsLock, NumLocke, etc.) was on. <b>false</b> if it was off.
/// Ordinal (non toggle) keys return always false.
/// </returns>
public bool IsToggled(Keys key)
{
byte keyState = GetKeyState(key);
bool isToggled = GetLowBit(keyState);
return isToggled;
}
/// <summary>
/// Indicates weather every of specified keys were down at the moment when snapshot was created.
/// The method returns false if even one of them was up.
/// </summary>
/// <param name="keys">Keys to verify whether they were down or not.</param>
/// <returns><b>true</b> - all were down. <b>false</b> - at least one was up.</returns>
public bool AreAllDown(IEnumerable<Keys> keys)
{
foreach (Keys key in keys)
{
if (!IsDown(key))
{
return true;
}
}
return false;
}
private byte GetKeyState(Keys key)
{
int virtualKeyCode = (int) key;
if (virtualKeyCode < 0 || virtualKeyCode > 255)
{
throw new ArgumentOutOfRangeException("key", key, "The value must be between 0 and 255.");
}
return m_KeyboardStateNative[virtualKeyCode];
}
private static bool GetHighBit(byte value)
{
return (value >> 7) != 0;
}
private static bool GetLowBit(byte value)
{
return (value & 1) != 0;
}
}
}

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 77bc8dd76134c794089b78799eadbb32
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

@ -1,299 +0,0 @@
// This code is distributed under MIT license.
// Copyright (c) 2015 George Mamaladze
// See license.txt or http://opensource.org/licenses/mit-license.php
using Gma.System.MouseKeyHook.WinApi;
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace Gma.System.MouseKeyHook.Implementation
{
// Because it is a P/Invoke method, 'GetSystemMetrics(int)'
// should be defined in a class named NativeMethods, SafeNativeMethods,
// or UnsafeNativeMethods.
// https://msdn.microsoft.com/en-us/library/windows/desktop/ms724385(v=vs.85).aspx
internal static class NativeMethods
{
private const int SM_CXDRAG = 68;
private const int SM_CYDRAG = 69;
[DllImport("user32.dll")]
private static extern int GetSystemMetrics(int index);
public static int GetXDragThreshold()
{
return GetSystemMetrics(SM_CXDRAG);
}
public static int GetYDragThreshold()
{
return GetSystemMetrics(SM_CYDRAG);
}
}
internal abstract class MouseListener : BaseListener, IMouseEvents
{
private readonly int m_xDragThreshold;
private readonly int m_yDragThreshold;
private readonly ButtonSet m_DoubleDown;
private readonly ButtonSet m_SingleDown;
private bool m_IsDragging;
private Point m_PreviousPosition;
private Point m_DragStartPosition;
private readonly Point m_UninitialisedPoint = new Point(-1, -1);
protected MouseListener(Subscribe subscribe)
: base(subscribe)
{
m_xDragThreshold = NativeMethods.GetXDragThreshold();
m_yDragThreshold = NativeMethods.GetYDragThreshold();
m_IsDragging = false;
m_PreviousPosition = m_UninitialisedPoint;
m_DragStartPosition = m_UninitialisedPoint;
m_DoubleDown = new ButtonSet();
m_SingleDown = new ButtonSet();
}
protected override bool Callback(CallbackData data)
{
var e = GetEventArgs(data);
if (e.IsMouseButtonDown)
{
ProcessDown(ref e);
}
if (e.IsMouseButtonUp)
{
ProcessUp(ref e);
}
if (e.WheelScrolled)
{
ProcessWheel(ref e);
}
if (HasMoved(e.Point))
{
ProcessMove(ref e);
}
ProcessDrag(ref e);
return !e.Handled;
}
protected abstract MouseEventExtArgs GetEventArgs(CallbackData data);
protected virtual void ProcessWheel(ref MouseEventExtArgs e)
{
OnWheel(e);
OnWheelExt(e);
}
protected virtual void ProcessDown(ref MouseEventExtArgs e)
{
OnDown(e);
OnDownExt(e);
if (e.Handled)
{
return;
}
if (e.Clicks == 2)
{
m_DoubleDown.Add(e.Button);
}
if (e.Clicks == 1)
{
m_SingleDown.Add(e.Button);
}
}
protected virtual void ProcessUp(ref MouseEventExtArgs e)
{
if (m_SingleDown.Contains(e.Button))
{
OnUp(e);
OnUpExt(e);
if (e.Handled)
{
return;
}
OnClick(e);
m_SingleDown.Remove(e.Button);
}
if (m_DoubleDown.Contains(e.Button))
{
e = e.ToDoubleClickEventArgs();
OnUp(e);
OnDoubleClick(e);
m_DoubleDown.Remove(e.Button);
}
}
private void ProcessMove(ref MouseEventExtArgs e)
{
m_PreviousPosition = e.Point;
OnMove(e);
OnMoveExt(e);
}
private void ProcessDrag(ref MouseEventExtArgs e)
{
if (m_SingleDown.Contains(MouseButtons.Left))
{
if (m_DragStartPosition.Equals(m_UninitialisedPoint))
{
m_DragStartPosition = e.Point;
}
ProcessDragStarted(ref e);
}
else
{
m_DragStartPosition = m_UninitialisedPoint;
ProcessDragFinished(ref e);
}
}
private void ProcessDragStarted(ref MouseEventExtArgs e)
{
if (!m_IsDragging)
{
var isXDragging = Math.Abs(e.Point.X - m_DragStartPosition.X) > m_xDragThreshold;
var isYDragging = Math.Abs(e.Point.Y - m_DragStartPosition.Y) > m_yDragThreshold;
m_IsDragging = isXDragging || isYDragging;
if (m_IsDragging)
{
OnDragStarted(e);
OnDragStartedExt(e);
}
}
}
private void ProcessDragFinished(ref MouseEventExtArgs e)
{
if (m_IsDragging)
{
OnDragFinished(e);
OnDragFinishedExt(e);
m_IsDragging = false;
}
}
private bool HasMoved(Point actualPoint)
{
return m_PreviousPosition != actualPoint;
}
public event MouseEventHandler MouseMove;
public event EventHandler<MouseEventExtArgs> MouseMoveExt;
public event MouseEventHandler MouseClick;
public event MouseEventHandler MouseDown;
public event EventHandler<MouseEventExtArgs> MouseDownExt;
public event MouseEventHandler MouseUp;
public event EventHandler<MouseEventExtArgs> MouseUpExt;
public event MouseEventHandler MouseWheel;
public event EventHandler<MouseEventExtArgs> MouseWheelExt;
public event MouseEventHandler MouseDoubleClick;
public event MouseEventHandler MouseDragStarted;
public event EventHandler<MouseEventExtArgs> MouseDragStartedExt;
public event MouseEventHandler MouseDragFinished;
public event EventHandler<MouseEventExtArgs> MouseDragFinishedExt;
protected virtual void OnMove(MouseEventArgs e)
{
var handler = MouseMove;
if (handler != null) handler(this, e);
}
protected virtual void OnMoveExt(MouseEventExtArgs e)
{
var handler = MouseMoveExt;
if (handler != null) handler(this, e);
}
protected virtual void OnClick(MouseEventArgs e)
{
var handler = MouseClick;
if (handler != null) handler(this, e);
}
protected virtual void OnDown(MouseEventArgs e)
{
var handler = MouseDown;
if (handler != null) handler(this, e);
}
protected virtual void OnDownExt(MouseEventExtArgs e)
{
var handler = MouseDownExt;
if (handler != null) handler(this, e);
}
protected virtual void OnUp(MouseEventArgs e)
{
var handler = MouseUp;
if (handler != null) handler(this, e);
}
protected virtual void OnUpExt(MouseEventExtArgs e)
{
var handler = MouseUpExt;
if (handler != null) handler(this, e);
}
protected virtual void OnWheel(MouseEventArgs e)
{
var handler = MouseWheel;
if (handler != null) handler(this, e);
}
protected virtual void OnWheelExt(MouseEventExtArgs e)
{
var handler = MouseWheelExt;
if (handler != null) handler(this, e);
}
protected virtual void OnDoubleClick(MouseEventArgs e)
{
var handler = MouseDoubleClick;
if (handler != null) handler(this, e);
}
protected virtual void OnDragStarted(MouseEventArgs e)
{
var handler = MouseDragStarted;
if (handler != null) handler(this, e);
}
protected virtual void OnDragStartedExt(MouseEventExtArgs e)
{
var handler = MouseDragStartedExt;
if (handler != null) handler(this, e);
}
protected virtual void OnDragFinished(MouseEventArgs e)
{
var handler = MouseDragFinished;
if (handler != null) handler(this, e);
}
protected virtual void OnDragFinishedExt(MouseEventExtArgs e)
{
var handler = MouseDragFinishedExt;
if (handler != null) handler(this, e);
}
}
}

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 93d13a4abdb37f14084deafe5847b216
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

@ -1,10 +0,0 @@
// This code is distributed under MIT license.
// Copyright (c) 2015 George Mamaladze
// See license.txt or http://opensource.org/licenses/mit-license.php
using Gma.System.MouseKeyHook.WinApi;
namespace Gma.System.MouseKeyHook.Implementation
{
internal delegate HookResult Subscribe(Callback callbck);
}

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: d48ae441d13f11643935ea50af54d521
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

@ -1,128 +0,0 @@
// This code is distributed under MIT license.
// Copyright (c) 2015 George Mamaladze
// See license.txt or http://opensource.org/licenses/mit-license.php
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using Gma.System.MouseKeyHook.Implementation;
using Gma.System.MouseKeyHook.WinApi;
namespace Gma.System.MouseKeyHook
{
/// <summary>
/// Provides extended argument data for the <see cref='KeyListener.KeyDown' /> or
/// <see cref='KeyListener.KeyUp' /> event.
/// </summary>
public class KeyEventArgsExt : KeyEventArgs
{
/// <summary>
/// Initializes a new instance of the <see cref="KeyEventArgsExt" /> class.
/// </summary>
/// <param name="keyData"></param>
public KeyEventArgsExt(Keys keyData)
: base(keyData)
{
}
internal KeyEventArgsExt(Keys keyData, int timestamp, bool isKeyDown, bool isKeyUp)
: this(keyData)
{
Timestamp = timestamp;
IsKeyDown = isKeyDown;
IsKeyUp = isKeyUp;
}
/// <summary>
/// The system tick count of when the event occurred.
/// </summary>
public int Timestamp { get; private set; }
/// <summary>
/// True if event signals key down..
/// </summary>
public bool IsKeyDown { get; private set; }
/// <summary>
/// True if event signals key up.
/// </summary>
public bool IsKeyUp { get; private set; }
internal static KeyEventArgsExt FromRawDataApp(CallbackData data)
{
var wParam = data.WParam;
var lParam = data.LParam;
//http://msdn.microsoft.com/en-us/library/ms644984(v=VS.85).aspx
const uint maskKeydown = 0x40000000; // for bit 30
const uint maskKeyup = 0x80000000; // for bit 31
int timestamp = Environment.TickCount;
var flags = (uint) lParam.ToInt64();
//bit 30 Specifies the previous key state. The value is 1 if the key is down before the message is sent; it is 0 if the key is up.
bool wasKeyDown = (flags & maskKeydown) > 0;
//bit 31 Specifies the transition state. The value is 0 if the key is being pressed and 1 if it is being released.
bool isKeyReleased = (flags & maskKeyup) > 0;
Keys keyData = AppendModifierStates((Keys) wParam);
bool isKeyDown = !wasKeyDown && !isKeyReleased;
bool isKeyUp = wasKeyDown && isKeyReleased;
return new KeyEventArgsExt(keyData, timestamp, isKeyDown, isKeyUp);
}
internal static KeyEventArgsExt FromRawDataGlobal(CallbackData data)
{
var wParam = data.WParam;
var lParam = data.LParam;
var keyboardHookStruct =
(KeyboardHookStruct) Marshal.PtrToStructure(lParam, typeof (KeyboardHookStruct));
var keyData = AppendModifierStates((Keys) keyboardHookStruct.VirtualKeyCode);
var keyCode = (int) wParam;
bool isKeyDown = (keyCode == Messages.WM_KEYDOWN || keyCode == Messages.WM_SYSKEYDOWN);
bool isKeyUp = (keyCode == Messages.WM_KEYUP || keyCode == Messages.WM_SYSKEYUP);
return new KeyEventArgsExt(keyData, keyboardHookStruct.Time, isKeyDown, isKeyUp);
}
// # It is not possible to distinguish Keys.LControlKey and Keys.RControlKey when they are modifiers
// Check for Keys.Control instead
// Same for Shift and Alt(Menu)
// See more at http://www.tech-archive.net/Archive/DotNet/microsoft.public.dotnet.framework.windowsforms/2008-04/msg00127.html #
// A shortcut to make life easier
private static bool CheckModifier(int vKey)
{
return (KeyboardNativeMethods.GetKeyState(vKey) & 0x8000) > 0;
}
private static Keys AppendModifierStates(Keys keyData)
{
// Is Control being held down?
bool control = CheckModifier(KeyboardNativeMethods.VK_CONTROL);
// Is Shift being held down?
bool shift = CheckModifier(KeyboardNativeMethods.VK_SHIFT);
// Is Alt being held down?
bool alt = CheckModifier(KeyboardNativeMethods.VK_MENU);
// Windows keys
// # combine LWin and RWin key with other keys will potentially corrupt the data
// notable F5 | Keys.LWin == F12, see https://globalmousekeyhook.codeplex.com/workitem/1188
// and the KeyEventArgs.KeyData don't recognize combined data either
// Function (Fn) key
// # CANNOT determine state due to conversion inside keyboard
// See http://en.wikipedia.org/wiki/Fn_key#Technical_details #
return keyData |
(control ? Keys.Control : Keys.None) |
(shift ? Keys.Shift : Keys.None) |
(alt ? Keys.Alt : Keys.None);
}
}
}

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 938fc2617ef5f70418a407959dce8be6
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

@ -1,119 +0,0 @@
// This code is distributed under MIT license.
// Copyright (c) 2015 George Mamaladze
// See license.txt or http://opensource.org/licenses/mit-license.php
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using Gma.System.MouseKeyHook.Implementation;
using Gma.System.MouseKeyHook.WinApi;
namespace Gma.System.MouseKeyHook
{
/// <summary>
/// Provides extended data for the <see cref='KeyListener.KeyPress' /> event.
/// </summary>
public class KeyPressEventArgsExt : KeyPressEventArgs
{
internal KeyPressEventArgsExt(char keyChar, int timestamp)
: base(keyChar)
{
IsNonChar = keyChar == (char) 0x0;
Timestamp = timestamp;
}
/// <summary>
/// Initializes a new instance of the <see cref='KeyPressEventArgsExt' /> class.
/// </summary>
/// <param name="keyChar">
/// Character corresponding to the key pressed. 0 char if represents a system or functional non char
/// key.
/// </param>
public KeyPressEventArgsExt(char keyChar)
: this(keyChar, Environment.TickCount)
{
}
/// <summary>
/// True if represents a system or functional non char key.
/// </summary>
public bool IsNonChar { get; private set; }
/// <summary>
/// The system tick count of when the event occurred.
/// </summary>
public int Timestamp { get; private set; }
internal static IEnumerable<KeyPressEventArgsExt> FromRawDataApp(CallbackData data)
{
var wParam = data.WParam;
var lParam = data.LParam;
//http://msdn.microsoft.com/en-us/library/ms644984(v=VS.85).aspx
const uint maskKeydown = 0x40000000; // for bit 30
const uint maskKeyup = 0x80000000; // for bit 31
const uint maskScanCode = 0xff0000; // for bit 23-16
var flags = (uint) lParam.ToInt64();
//bit 30 Specifies the previous key state. The value is 1 if the key is down before the message is sent; it is 0 if the key is up.
var wasKeyDown = (flags & maskKeydown) > 0;
//bit 31 Specifies the transition state. The value is 0 if the key is being pressed and 1 if it is being released.
var isKeyReleased = (flags & maskKeyup) > 0;
if (!wasKeyDown && !isKeyReleased)
{
yield break;
}
var virtualKeyCode = (int) wParam;
var scanCode = checked((int) (flags & maskScanCode));
const int fuState = 0;
char[] chars;
KeyboardNativeMethods.TryGetCharFromKeyboardState(virtualKeyCode, scanCode, fuState, out chars);
if (chars == null) yield break;
foreach (var ch in chars)
{
yield return new KeyPressEventArgsExt(ch);
}
}
internal static IEnumerable<KeyPressEventArgsExt> FromRawDataGlobal(CallbackData data)
{
var wParam = data.WParam;
var lParam = data.LParam;
if ((int) wParam != Messages.WM_KEYDOWN)
{
yield break;
}
KeyboardHookStruct keyboardHookStruct =
(KeyboardHookStruct) Marshal.PtrToStructure(lParam, typeof (KeyboardHookStruct));
var virtualKeyCode = keyboardHookStruct.VirtualKeyCode;
var scanCode = keyboardHookStruct.ScanCode;
var fuState = keyboardHookStruct.Flags;
if (virtualKeyCode == KeyboardNativeMethods.VK_PACKET)
{
var ch = (char) scanCode;
yield return new KeyPressEventArgsExt(ch, keyboardHookStruct.Time);
}
else
{
char[] chars;
KeyboardNativeMethods.TryGetCharFromKeyboardState(virtualKeyCode, scanCode, fuState, out chars);
if (chars == null) yield break;
foreach (var current in chars)
{
yield return new KeyPressEventArgsExt(current, keyboardHookStruct.Time);
}
}
}
}
}

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 46eeb9684c5cf11418208f4ce9e5b549
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

@ -1,211 +0,0 @@
// This code is distributed under MIT license.
// Copyright (c) 2015 George Mamaladze
// See license.txt or http://opensource.org/licenses/mit-license.php
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using Gma.System.MouseKeyHook.WinApi;
namespace Gma.System.MouseKeyHook
{
/// <summary>
/// Provides extended data for the MouseClickExt and MouseMoveExt events.
/// </summary>
public class MouseEventExtArgs : MouseEventArgs
{
/// <summary>
/// Initializes a new instance of the <see cref="MouseEventExtArgs" /> class.
/// </summary>
/// <param name="buttons">One of the MouseButtons values indicating which mouse button was pressed.</param>
/// <param name="clicks">The number of times a mouse button was pressed.</param>
/// <param name="point">The x and y coordinate of a mouse click, in pixels.</param>
/// <param name="delta">A signed count of the number of detents the wheel has rotated.</param>
/// <param name="timestamp">The system tick count when the event occurred.</param>
/// <param name="isMouseButtonDown">True if event signals mouse button down.</param>
/// <param name="isMouseButtonUp">True if event signals mouse button up.</param>
internal MouseEventExtArgs(MouseButtons buttons, int clicks, Point point, int delta, int timestamp,
bool isMouseButtonDown, bool isMouseButtonUp)
: base(buttons, clicks, point.X, point.Y, delta)
{
IsMouseButtonDown = isMouseButtonDown;
IsMouseButtonUp = isMouseButtonUp;
Timestamp = timestamp;
}
/// <summary>
/// Set this property to <b>true</b> inside your event handler to prevent further processing of the event in other
/// applications.
/// </summary>
public bool Handled { get; set; }
/// <summary>
/// True if event contains information about wheel scroll.
/// </summary>
public bool WheelScrolled
{
get { return Delta != 0; }
}
/// <summary>
/// True if event signals a click. False if it was only a move or wheel scroll.
/// </summary>
public bool Clicked
{
get { return Clicks > 0; }
}
/// <summary>
/// True if event signals mouse button down.
/// </summary>
public bool IsMouseButtonDown { get; private set; }
/// <summary>
/// True if event signals mouse button up.
/// </summary>
public bool IsMouseButtonUp { get; private set; }
/// <summary>
/// The system tick count of when the event occurred.
/// </summary>
public int Timestamp { get; private set; }
/// <summary>
/// </summary>
internal Point Point
{
get { return new Point(X, Y); }
}
internal static MouseEventExtArgs FromRawDataApp(CallbackData data)
{
var wParam = data.WParam;
var lParam = data.LParam;
AppMouseStruct marshalledMouseStruct =
(AppMouseStruct) Marshal.PtrToStructure(lParam, typeof (AppMouseStruct));
return FromRawDataUniversal(wParam, marshalledMouseStruct.ToMouseStruct());
}
internal static MouseEventExtArgs FromRawDataGlobal(CallbackData data)
{
var wParam = data.WParam;
var lParam = data.LParam;
MouseStruct marshalledMouseStruct = (MouseStruct) Marshal.PtrToStructure(lParam, typeof (MouseStruct));
return FromRawDataUniversal(wParam, marshalledMouseStruct);
}
/// <summary>
/// Creates <see cref="MouseEventExtArgs" /> from relevant mouse data.
/// </summary>
/// <param name="wParam">First Windows Message parameter.</param>
/// <param name="mouseInfo">A MouseStruct containing information from which to construct MouseEventExtArgs.</param>
/// <returns>A new MouseEventExtArgs object.</returns>
private static MouseEventExtArgs FromRawDataUniversal(IntPtr wParam, MouseStruct mouseInfo)
{
MouseButtons button = MouseButtons.None;
short mouseDelta = 0;
int clickCount = 0;
bool isMouseButtonDown = false;
bool isMouseButtonUp = false;
switch ((long) wParam)
{
case Messages.WM_LBUTTONDOWN:
isMouseButtonDown = true;
button = MouseButtons.Left;
clickCount = 1;
break;
case Messages.WM_LBUTTONUP:
isMouseButtonUp = true;
button = MouseButtons.Left;
clickCount = 1;
break;
case Messages.WM_LBUTTONDBLCLK:
isMouseButtonDown = true;
button = MouseButtons.Left;
clickCount = 2;
break;
case Messages.WM_RBUTTONDOWN:
isMouseButtonDown = true;
button = MouseButtons.Right;
clickCount = 1;
break;
case Messages.WM_RBUTTONUP:
isMouseButtonUp = true;
button = MouseButtons.Right;
clickCount = 1;
break;
case Messages.WM_RBUTTONDBLCLK:
isMouseButtonDown = true;
button = MouseButtons.Right;
clickCount = 2;
break;
case Messages.WM_MBUTTONDOWN:
isMouseButtonDown = true;
button = MouseButtons.Middle;
clickCount = 1;
break;
case Messages.WM_MBUTTONUP:
isMouseButtonUp = true;
button = MouseButtons.Middle;
clickCount = 1;
break;
case Messages.WM_MBUTTONDBLCLK:
isMouseButtonDown = true;
button = MouseButtons.Middle;
clickCount = 2;
break;
case Messages.WM_MOUSEWHEEL:
mouseDelta = mouseInfo.MouseData;
break;
case Messages.WM_XBUTTONDOWN:
button = mouseInfo.MouseData == 1
? MouseButtons.XButton1
: MouseButtons.XButton2;
isMouseButtonDown = true;
clickCount = 1;
break;
case Messages.WM_XBUTTONUP:
button = mouseInfo.MouseData == 1
? MouseButtons.XButton1
: MouseButtons.XButton2;
isMouseButtonUp = true;
clickCount = 1;
break;
case Messages.WM_XBUTTONDBLCLK:
isMouseButtonDown = true;
button = mouseInfo.MouseData == 1
? MouseButtons.XButton1
: MouseButtons.XButton2;
clickCount = 2;
break;
case Messages.WM_MOUSEHWHEEL:
mouseDelta = mouseInfo.MouseData;
break;
}
var e = new MouseEventExtArgs(
button,
clickCount,
mouseInfo.Point,
mouseDelta,
mouseInfo.Timestamp,
isMouseButtonDown,
isMouseButtonUp);
return e;
}
internal MouseEventExtArgs ToDoubleClickEventArgs()
{
return new MouseEventExtArgs(Button, 2, Point, Delta, Timestamp, IsMouseButtonDown, IsMouseButtonUp);
}
}
}

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: e8be406248b8307489268b31e9d84901
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save