Copying //UE4/Dev-Enterprise to //UE4/Dev-Main (Source: //UE4/Dev-Enterprise @ 4071915)

#lockdown Nick.Penwarden
#rb none

============================
  MAJOR FEATURES & CHANGES
============================

Change 4060527 by Anousack.Kitisa

	Added support for importing FBX user properties as metadata on StaticMesh when importing FBX.
	Added support for exporting StaticMesh metadata as FBX user properties when exporting StaticMesh to FBX.

	#jira UESP-567

Change 4060835 by Jamie.Dale

	Added assign method to Python exposed structs

	This lets you assign the value of one struct instance onto another instance (rather than copy the pointer in Python). It also accepts anything that casts to the destination struct.

Change 4060838 by Jamie.Dale

	Include unary operator function tooltips in doc string

Change 4060843 by Jamie.Dale

	Fixed PythonizeValue including deprecated properties in the init function for a struct

Change 4060908 by Jamie.Dale

	Fixed some name conflicts in generated Python glue

Change 4061065 by Jamie.Dale

	Stubbed struct return values are now default constructed

Change 4061205 by David.Hibbitts

	Added blueprint functions to create a message bus source, for use in projects where the Editor UI is not available or is impractical.
	Added a blueprint function to get available subject names for the LiveLink Client
	Added a RemoveSource method to ILiveLinkClient
	Added a GetSubjectNames method to ILiveLinkClient
	Fixed a crash when RequestShutdown was called on a MessageBusSource after the HeartbeatManager had already been shut down.

Change 4061421 by Patrick.Boutot

	[AJA] Warn the user if he requested the key and the backbuffer is not setup properly.
	#jira UE-58614

Change 4061620 by Jamie.Dale

	Made the Sphinx config a template so we can inject the current engine version into it

Change 4062578 by Jamie.Dale

	Optimized Python stub and doc gen file writes

	 - Files are now only written when they've changed.
	 - We now only remove files that are stale.
	 - No requests to generate stub and doc files are queued before the first Tick.

Change 4062634 by Jamie.Dale

	No longer export FDateTime defaults to struct __init__ as they can be non-deterministic

Change 4064275 by Jamie.Dale

	Added callbacks for when Python is initialized and shutdown so that external modules can hook-in appropriately

Change 4064613 by James.McNatton

	Change to initialization for FVirtualCameraWaypoint and FVirtualCameraSettingsPreset to remove non-deterministic constructors and a few resulting cleanup items

Change 4064878 by Patrick.Boutot

	Add timecode provider plugin to capture from the Audio jack.

Change 4064910 by Patrick.Boutot

	[AJA]
	Add AjaTimecodeProvider that provider the timecode from a SDI input source.

Change 4067451 by Jamie.Dale

	Added command line options to enable all plugins, optionally excluding certain plugins

Change 4067489 by Simon.Tourangeau

	Support for DX12 quad buffer stereo rendering

Change 4068640 by Patrick.Boutot

	Add a state to CustomTimeStep. Show the state of the CustomTimeStep in "stat fps".

Change 4069147 by Patrick.Boutot

	Move Mediasmith console to Engine. Renamed to TimecodeSynchronizer.

Change 4071727 by Matt.Hoffman

	Initial pass at exposing Sequencer's Render to Movie functionality to Python. All settings that can be adjusted via the UI can be set from Python and renders can be invoked for both in-editor capture as well as new process capture. A basic API is provided which enables querying if a render in progress and canceling an in progress one.

	#jira UESP-541

[CL 4071957 by JeanMichel Dignard in Main branch]
This commit is contained in:
JeanMichel Dignard
2018-05-14 17:38:22 -04:00
parent f4d3b0eaa1
commit 6ab73c6457
237 changed files with 6070 additions and 1808 deletions
+22 -10
View File
@@ -60,7 +60,7 @@
<File Name="Engine/Binaries/Mac/UnrealSync.app/Contents/MacOS/UnrealSync" Hash="6bbb80f881edfedf850b4ad5d34100076b3e5c6f" IsExecutable="true" />
<File Name="Engine/Binaries/Mac/UnrealSync.app/Contents/MacOS/UnrealSync.dsym" Hash="f150e7355efb6f72df571b59d465d1ec98c745b4" />
<File Name="Engine/Binaries/Mac/UnrealSync.app/Contents/PkgInfo" Hash="9f9eea0cfe2d65f2c3d6b092e375b40782d08f31" IsExecutable="true" />
<File Name="Engine/Binaries/ThirdParty/AJA/Win64/AJA.dll" Hash="df6827b14a3654d380e4d6be2540829a404197af" />
<File Name="Engine/Binaries/ThirdParty/AJA/Win64/AJA.dll" Hash="e70230d27989e42b09c8d02305cd8d8623b8b47a" />
<File Name="Engine/Binaries/ThirdParty/ANGLE/libEGL.dll" Hash="a9d19b9df61ba0fc6d7f985c96cc1eed8958d94b" />
<File Name="Engine/Binaries/ThirdParty/ANGLE/libGLESv2.dll" Hash="663c0c47a7fa2d73f4bc17b443a31859679b636a" />
<File Name="Engine/Binaries/ThirdParty/AppLocalDependencies/Win32/DirectX/X3DAudio1_7.dll" Hash="ec48da45888ccea388da1425d5322f5ee9285282" />
@@ -26610,7 +26610,7 @@
<File Name="Engine/Plugins/Experimental/VirtualCamera/Content/VirtualCameraGameMode.uasset" Hash="c6b7c47f6cfcef405c937477adf64274c0298098" />
<File Name="Engine/Plugins/Experimental/VirtualCamera/Content/VirtualCameraPawn.uasset" Hash="c0da7675f5b2ac9433e5f8f3fb1e2c06263fe1b8" />
<File Name="Engine/Plugins/Experimental/VirtualCamera/Content/VirtualCameraPlayerController.uasset" Hash="005c8b0e6533723ea5cb569ef99d9184e0b1c3b3" />
<File Name="Engine/Plugins/Experimental/VirtualCamera/Content/VirtualCameraUI.uasset" Hash="1825debee7bd32be67c9986ddc483e54e14bd987" />
<File Name="Engine/Plugins/Experimental/VirtualCamera/Content/VirtualCameraUI.uasset" Hash="fe9f897083368e3ec2db695ff590ee71a60c8358" />
<File Name="Engine/Plugins/Experimental/VirtualCamera/Content/Widgets/BottomFrame/BottomFrame.uasset" Hash="cdcb3d0aa28faa4b69934bf327f5a6102365eaef" />
<File Name="Engine/Plugins/Experimental/VirtualCamera/Content/Widgets/BottomFrame/BottomFrameWidget.uasset" Hash="6c664dae93225f1782c0299c9a08292dacb57382" />
<File Name="Engine/Plugins/Experimental/VirtualCamera/Content/Widgets/BottomFrame/DockingBar.uasset" Hash="871fc17488f65a2098256a026e34d5472a7f93a0" />
@@ -26857,6 +26857,12 @@
<File Name="Engine/Plugins/Media/MediaPlayerEditor/Content/tab_playlist_16x.png" Hash="ebbef43c56317732d9244597e62c5b8d89d5ce34" />
<File Name="Engine/Plugins/Media/MediaPlayerEditor/Content/tab_stats_16x.png" Hash="99ab5f3000f5785b18a3ee4b213672364f78d839" />
<File Name="Engine/Plugins/Media/MfMedia/Resources/Icon128.png" Hash="40b43cd796a144fb805d7a176b52beb74992c2a4" />
<File Name="Engine/Plugins/Media/TimecodeSynchronizer/Content/Editor/Icons/Icon_Play_40x.png" Hash="69e5d252ea036fc19aa4b294124b93607561f277" />
<File Name="Engine/Plugins/Media/TimecodeSynchronizer/Content/Editor/Icons/Icon_TimecodeSynchronizer_20x.png" Hash="5636ecb11b7b39edf8b1ced0eed0771bc008f9a8" />
<File Name="Engine/Plugins/Media/TimecodeSynchronizer/Content/Editor/Icons/Icon_TimecodeSynchronizer_40x.png" Hash="693f06462d87c286469e7482e3888a14eed46bde" />
<File Name="Engine/Plugins/Media/TimecodeSynchronizer/Content/Editor/Icons/TimecodeSynchronizer_20x.png" Hash="6701004577e0327f6166c6db4bcb38ce699e3bd7" />
<File Name="Engine/Plugins/Media/TimecodeSynchronizer/Content/Editor/Icons/TimecodeSynchronizer_64x.png" Hash="979d74ef3b61f45c60eea1436ec5baddfd60ca66" />
<File Name="Engine/Plugins/Media/TimecodeSynchronizer/Resources/Icon128.png" Hash="5c45ba549fb85ee5a1051a072931af1b0cdb9fee" />
<File Name="Engine/Plugins/Media/WmfMedia/Resources/Icon128.png" Hash="40b43cd796a144fb805d7a176b52beb74992c2a4" />
<File Name="Engine/Plugins/Messaging/MessagingDebugger/Content/BreakpointBorder.png" Hash="53181029fbea06aed2e663392654737696f5b4cb" />
<File Name="Engine/Plugins/Messaging/MessagingDebugger/Content/GroupBorder.png" Hash="8cee767e4e593036a33348b2766013b7cad750c8" />
@@ -26917,7 +26923,7 @@
<File Name="Engine/Plugins/MovieScene/LevelSequenceEditor/Content/ViewportLayout_OnePaneCinematic.png" Hash="b0df7ad51ddf5dd50cc9c3e9f78419f64541fbb4" />
<File Name="Engine/Plugins/MovieScene/LevelSequenceEditor/Content/ViewportLayout_TwoPaneCinematic.png" Hash="a34e3c31d0604973889d8e32ae751721818f2d58" />
<File Name="Engine/Plugins/MovieScene/LevelSequenceEditor/Resources/Icon128.png" Hash="a60993660da7ee9eec9640e5b362a4969aaff2ee" />
<File Name="Engine/Plugins/MovieScene/SequencerScripting/Content/Python/sequencer.py" Hash="445cd494abcd88a88942792e1a9fb52f0dd02339" />
<File Name="Engine/Plugins/MovieScene/SequencerScripting/Content/Python/sequencer_examples.py" Hash="4a1e179d5a57978682e82716cb5dc24719a4a02b" />
<File Name="Engine/Plugins/MovieScene/SequencerScripting/Resources/Icon128.png" Hash="999db2543e227fcfa6ece50ec9b4a96f54476b95" />
<File Name="Engine/Plugins/NetcodeUnitTest/NetcodeUnitTest.docx" Hash="c097f0004df42864d0eb21cb481fdd1155af8f40" />
<File Name="Engine/Plugins/NetcodeUnitTest/test.dat" Hash="0513ceb3c94f666ff21f6edbc66857a876075cc8" />
@@ -27995,7 +28001,7 @@
<File Name="Engine/Source/Runtime/Navmesh/RecastDemo/Bin/SDL.dll" Hash="2f49dc36198c2db24293ec5b677340a159962438" />
<File Name="Engine/Source/Runtime/Navmesh/RecastDemo/Bin/test.chf" Hash="ddcb6768ae00c12ce9d9420cc9c24295a94fbf47" />
<File Name="Engine/Source/Runtime/Navmesh/RecastDemo/Source.zip" Hash="8dc18f56bbec960f68469c18597fbb9aaaf05881" />
<File Name="Engine/Source/ThirdParty/AJA/Build/lib/Win64/AJA.lib" Hash="d0536c567dd090d7eb673c47e962e05fdd2cf71e" />
<File Name="Engine/Source/ThirdParty/AJA/Build/lib/Win64/AJA.lib" Hash="14403a5a38a97856de7663dd8f4074e095517c76" />
<File Name="Engine/Source/ThirdParty/AMD/AMD_AGS/doc/amd_ags.chm" Hash="e3b6c70425738a8eaadd68dfecc18f242fb230a5" />
<File Name="Engine/Source/ThirdParty/AMD/AMD_AGS/lib/VS2015/amd_ags_x64_2015_MD.lib" Hash="a6f75b70684355689917c6a7264a83d0ec1f0bfa" />
<File Name="Engine/Source/ThirdParty/AMD/AMD_AGS/lib/VS2015/amd_ags_x86_2015_MD.lib" Hash="78185e61d4cfc45f2ed939230217e32aef9bf65e" />
@@ -40355,6 +40361,7 @@
<Blob Hash="1438da73e515abd424907a5288a67817e1951897" Size="20891" PackHash="9ecde5d682a1fb9ca9bd5c995228d226cdb13860" PackOffset="2005890" />
<Blob Hash="143984ff5bd93a743180ea03f552f2af720d7ad6" Size="28160" PackHash="e70061ffc85b6027a648cac0b1c8c6ef7d4e3106" PackOffset="1940498" />
<Blob Hash="1439a29df5c5c1612a365521f7e6d1e5a8279869" Size="58" PackHash="0aea457d3fb14174a1cd037c649288b253c1cbe7" PackOffset="2097057" />
<Blob Hash="14403a5a38a97856de7663dd8f4074e095517c76" Size="31334" PackHash="fa48ff18c8bfe5de58cfd0b9f5fc9ff52ec1b1da" PackOffset="56512" />
<Blob Hash="144254613d42663b547226b48d2941421a242aad" Size="123" PackHash="1a3a21e3a685f120e196700aaf9d7755a5ff8dee" PackOffset="1178949" />
<Blob Hash="1445f0550c201a00fb1a350317fa07119a104e1a" Size="25600" PackHash="2fb0ce94e7960b83e88bc4d2687ba07c94e9d96f" PackOffset="1952264" />
<Blob Hash="1446798289ef4371443fec4604a1a7d7bb5487fd" Size="894" PackHash="10917aeabcd8089492835f6fdf0cc16d5545cb80" PackOffset="2093634" />
@@ -40755,7 +40762,6 @@
<Blob Hash="182164292e382455f00349625dd5fd1e41dcc0c8" Size="196096" PackHash="4cd4bfc27173885f1aee3affc692eed9b041d197" PackOffset="522033" />
<Blob Hash="1821e8f7c97653ec7cb8f23daab42f5212a511f8" Size="4462" PackHash="59c4bec5e2957d30ef37c5198c4b90381f3ba20f" PackOffset="935184" />
<Blob Hash="1824a019e426fd29c846b8e5d95e80163807a714" Size="3382" PackHash="c96e9cd94a86b222bed132142b65c1d90314445d" PackOffset="1059636" />
<Blob Hash="1825debee7bd32be67c9986ddc483e54e14bd987" Size="2166935" PackHash="b53b024f09d16f566786b61cb2d738b8e3176cf1" PackOffset="8" />
<Blob Hash="1826d27a7f6d21e4c46e5509ce7b7fa8d6e6b340" Size="26872" PackHash="15c1c1820f17cbc99a977498d87549e3b4060f7c" PackOffset="974692" />
<Blob Hash="182d152703bd7c0dfe56f5b5fce52cf3b29fd14c" Size="2849280" PackHash="fedc0f0de48ecba38365fdabad35ec1857db98d6" PackOffset="8" />
<Blob Hash="182df2bdb55238480ab25873cc24bf0fe404a238" Size="6767016" PackHash="08c883562a37ec19f6d36e957d61acab6efb392e" PackOffset="8" />
@@ -45425,7 +45431,6 @@
<Blob Hash="4453b88e26923d7bc06b2c61a4beebd7b5ae6a0d" Size="2224" PackHash="0d57e8104575102e83043b6a71861eb6fbaba0d2" PackOffset="2077148" />
<Blob Hash="4455dfff7734b0cbc576c58af10c6c4da0179cb0" Size="4761" PackHash="43de67a97c49441e26fb689fad4850f919826430" PackOffset="1229451" />
<Blob Hash="445a54c2604e78cbab5d490172c8b71ba52ce4ad" Size="61634" PackHash="12582f0c651cdaf8a3d2ed39d6d5c41ff2045005" PackOffset="2023544" />
<Blob Hash="445cd494abcd88a88942792e1a9fb52f0dd02339" Size="4300" PackHash="897370b8aae1f0bd072aaa9f84aa5edcf4810baf" PackOffset="2074307" />
<Blob Hash="445dc8f3f1c18e3da2921d800dac1cd619340943" Size="6769020" PackHash="83c26e75614987b0816315db03de7aca670aae61" PackOffset="8" />
<Blob Hash="445dcdb5affed7b1dc60a698ff22119a0a72317e" Size="215" PackHash="b0e7677a897dcc7da7de82ccb301777868eddf84" PackOffset="835797" />
<Blob Hash="4460122a3d0f60732da56a7b16c2f7ee0f581d16" Size="188" PackHash="b0e7677a897dcc7da7de82ccb301777868eddf84" PackOffset="2096580" />
@@ -46000,6 +46005,7 @@
<Blob Hash="4a17269166a38d38f98268dd019110a3fb8f7563" Size="3218" PackHash="59c4bec5e2957d30ef37c5198c4b90381f3ba20f" PackOffset="319594" />
<Blob Hash="4a1d34db16b8b5004f580ad9b6e8b0de63392c9f" Size="45826" PackHash="5435cf07dad1155ea3ddbd5178f3dd6013a507d8" PackOffset="112845" />
<Blob Hash="4a1d3a27f345626205ccf57a21bceae25e2a3aa3" Size="5068392" PackHash="c8b6c81a1f82320e02a43232edf87be07a77f89d" PackOffset="8" />
<Blob Hash="4a1e179d5a57978682e82716cb5dc24719a4a02b" Size="17441" PackHash="fa48ff18c8bfe5de58cfd0b9f5fc9ff52ec1b1da" PackOffset="39071" />
<Blob Hash="4a237e0a574ae61c377e5f0f748534a14f00fab4" Size="10240" PackHash="504c0a6da5f49d4bcd18f11ee59db45e32d6c143" PackOffset="2011181" />
<Blob Hash="4a249869473e7469d3c19b524f434884ef2f9e4d" Size="2223" PackHash="bbd0d366aa5edcf7c89a18c6bcc1c936170ac171" PackOffset="868873" />
<Blob Hash="4a27014a5c17656eb12d05754da71a86ab7325d1" Size="2904" PackHash="e2fa2ac520eb51bd27214ee5bf3c3511f0803850" PackOffset="1201924" />
@@ -47238,6 +47244,7 @@
<Blob Hash="563369ea690300bda22f3e8478acd91b58f537c7" Size="9752576" PackHash="332e4dbcbffeb057e013476dabfd6264e16bbd85" PackOffset="8" />
<Blob Hash="563630f470e7c1c86be85a71783b6f187a52feb7" Size="1742" PackHash="b8b36b31df40a1fc9087e4b313999fcda60845cc" PackOffset="1976248" />
<Blob Hash="563662c090e0e45ff95800913c21835b6db5c623" Size="857" PackHash="d67cb445f37637410f670b1d8682dcf22ced07ae" PackOffset="444659" />
<Blob Hash="5636ecb11b7b39edf8b1ced0eed0771bc008f9a8" Size="3773" PackHash="fa48ff18c8bfe5de58cfd0b9f5fc9ff52ec1b1da" PackOffset="8" />
<Blob Hash="56375ffabf743481e84834f970f9b5b508da7f95" Size="2396" PackHash="2f143d8520d94bbf2cb250b35a8f79e3d3e8572c" PackOffset="1000180" />
<Blob Hash="563e52908205186ceb1d12c802ee75169b021bb0" Size="11703" PackHash="36dc5f21c7755cd7fcc2f06d9f9b27d1325e43e2" PackOffset="541544" />
<Blob Hash="563eaf26076d8c014cd747f6af90b80cfdc3608d" Size="1860168" PackHash="c38a58ebaed4f4113a72a83d4c9eed961e2b9d98" PackOffset="8" />
@@ -47923,6 +47930,7 @@
<Blob Hash="5c3eda4b325a5d5e224387fc4d65862a13b81bcf" Size="212" PackHash="9d232548aa4e0302e308e8904fce4c2c9a811af2" PackOffset="187747" />
<Blob Hash="5c3f945cc49b957c47efa3c0ab919df11da0bb04" Size="156" PackHash="16e421c9204b08586edd8de93b93b19fb10644ea" PackOffset="1672332" />
<Blob Hash="5c42eea7e3b5b62501fad54807043a3836be9387" Size="344" PackHash="61414cf7f1e5c788cc1612ab498ef841efa0481a" PackOffset="1618164" />
<Blob Hash="5c45ba549fb85ee5a1051a072931af1b0cdb9fee" Size="17439" PackHash="fa48ff18c8bfe5de58cfd0b9f5fc9ff52ec1b1da" PackOffset="21632" />
<Blob Hash="5c4a470f2b3a78a48cc3c2db127a54ef4d4162f0" Size="3500" PackHash="8962c9283d246aa6183316165b2eabb0cb7e0781" PackOffset="10578" />
<Blob Hash="5c4e10f956fb547d2ff61cd9476f931d62533762" Size="2556" PackHash="ea83e8125c0978669c9398911e0f6c2fd3f945d8" PackOffset="957822" />
<Blob Hash="5c4ea771a3f1da7cefdc5e3cb68ccd424a2c5d3b" Size="390" PackHash="9d232548aa4e0302e308e8904fce4c2c9a811af2" PackOffset="223578" />
@@ -49054,6 +49062,7 @@
<Blob Hash="66fc3ea3189a916f03f89dc040365409a2c9833b" Size="4667" PackHash="12d213957fbfe643a97d5072b1f6ae30aeebcbb7" PackOffset="509931" />
<Blob Hash="66fe499a8f43d09f30925df4c594a1a2f656f01d" Size="3957" PackHash="59c4bec5e2957d30ef37c5198c4b90381f3ba20f" PackOffset="1188705" />
<Blob Hash="66fee4ec3c99300722a787f437c00ea2be3b95cc" Size="736" PackHash="9d232548aa4e0302e308e8904fce4c2c9a811af2" PackOffset="218606" />
<Blob Hash="6701004577e0327f6166c6db4bcb38ce699e3bd7" Size="3758" PackHash="fa48ff18c8bfe5de58cfd0b9f5fc9ff52ec1b1da" PackOffset="9900" />
<Blob Hash="6702e2169f7ad25cfdcf2d5ff3e00e847efc3168" Size="4584206" PackHash="eaea434c65e3ccf8cec643ea1ec391bdddbc6fac" PackOffset="8" />
<Blob Hash="6704b0fee79fa4795dc04e0111fac4fc46f611f0" Size="2306" PackHash="7f00c380f25858c6ca3b906b06dc3b7812b02016" PackOffset="2091446" />
<Blob Hash="6706eb13de25d00872c92effdd6c76528096ec9b" Size="346916" PackHash="705810a107813f391dbcf74972f321782aedc6b8" PackOffset="8" />
@@ -49311,6 +49320,7 @@
<Blob Hash="693650b4ed358f9b38532ae4ce1ae1a55e7d7aa7" Size="5094" PackHash="4905bf362dac5be04631d1ce552b8184a6f9eb7f" PackOffset="1565470" />
<Blob Hash="6939cca0ef7770988797e18034b2c02bc979d1b9" Size="676" PackHash="aca495e4ccbf3620acba4cb167d20a643cc5c6db" PackOffset="2096462" />
<Blob Hash="693a91411212ae47a2b96eaf407183bb44bccc44" Size="1200" PackHash="991dd7e85549ea1d68d7c6e18a206ffed99537d3" PackOffset="1043255" />
<Blob Hash="693f06462d87c286469e7482e3888a14eed46bde" Size="6119" PackHash="fa48ff18c8bfe5de58cfd0b9f5fc9ff52ec1b1da" PackOffset="3781" />
<Blob Hash="693fbc63173ef97c841e91796ec4f2d56ea52f3b" Size="61440" PackHash="e70061ffc85b6027a648cac0b1c8c6ef7d4e3106" PackOffset="1691477" />
<Blob Hash="6940737107700f1ca207e82bf1a4a120a92e682f" Size="1420570" PackHash="858de213a099ae751d4748be354bdddec041c44b" PackOffset="8" />
<Blob Hash="6941c5917e4ac097fd374708d0cfb8f41b7c835f" Size="1052" PackHash="e1c15e4bd99ba88718cb8c80fa13bc01920a443d" PackOffset="2071368" />
@@ -54224,6 +54234,7 @@
<Blob Hash="9799c6e63b1166853178b2d495dee4aa5e8f217b" Size="3127" PackHash="4f9629d19fa7928aaae10e4bb7c79195fb4f2436" PackOffset="1008820" />
<Blob Hash="979aec590ceb996d176c4a77f702755bab1fedfe" Size="6830" PackHash="9ecde5d682a1fb9ca9bd5c995228d226cdb13860" PackOffset="2066763" />
<Blob Hash="979b4653f7a892cb27a587729fa16fc9e8f92a2d" Size="41984" PackHash="7e504e731d99b59de57d71becdb34fce6d198dec" PackOffset="1067034" />
<Blob Hash="979d74ef3b61f45c60eea1436ec5baddfd60ca66" Size="7974" PackHash="fa48ff18c8bfe5de58cfd0b9f5fc9ff52ec1b1da" PackOffset="13658" />
<Blob Hash="979dddf323c7885721dcacb2427e7471d68c2af7" Size="428704" PackHash="cfaa6e2212f937f340e867175482030d495675ed" PackOffset="1048487" />
<Blob Hash="97a0ccc9424dd3260cf352634c614e548a29c76a" Size="10920" PackHash="529198f2ee46d987aeed3fff1a66a0ba7ab79765" PackOffset="1942884" />
<Blob Hash="97aa79e6384421616a59b0c4d9152a83c76ce931" Size="14005" PackHash="0e0fc56444fa93555de76ff8aaa98b0bd94a186d" PackOffset="1607690" />
@@ -60127,7 +60138,6 @@
<Blob Hash="d04b8c47374482080b6565b23c2f69841141f3fe" Size="6795" PackHash="435b84318b43c1178e4eb52628fb46a39961b284" PackOffset="1846999" />
<Blob Hash="d04cfedbf8b8a820bd75931948f2af1b22443ad2" Size="48" PackHash="61414cf7f1e5c788cc1612ab498ef841efa0481a" PackOffset="1550433" />
<Blob Hash="d05103a52033477b2ed82f4127222fd0309e22a7" Size="43520" PackHash="6a15e6e47a10c1dc80c27a80b5ac376ca60794c5" PackOffset="1875388" />
<Blob Hash="d0536c567dd090d7eb673c47e962e05fdd2cf71e" Size="30928" PackHash="870ca928827716f87bfe40deac8a182b8f5933a5" PackOffset="1190952" />
<Blob Hash="d053822fb09acc5610808dc850aa5f3608f6f7de" Size="3607" PackHash="2fb0ce94e7960b83e88bc4d2687ba07c94e9d96f" PackOffset="2093064" />
<Blob Hash="d054308feb0fdf6bd0194d775c4c21d9fe0a142d" Size="200" PackHash="16e421c9204b08586edd8de93b93b19fb10644ea" PackOffset="1281708" />
<Blob Hash="d05bea665bcdbf0957172c0154dd6158de76ef5d" Size="993" PackHash="c96e9cd94a86b222bed132142b65c1d90314445d" PackOffset="1638988" />
@@ -61716,7 +61726,6 @@
<Blob Hash="df63adcbad60c1703b813aa11ce87625d152a7bb" Size="51866" PackHash="e68fd345f57007c501cf74e2d02946684e887bcb" PackOffset="47015" />
<Blob Hash="df63e32be7f72f4b55b2336b9865831fd761874a" Size="151040" PackHash="753eb938736a4b412147164d4077e991f9c89950" PackOffset="141472" />
<Blob Hash="df653274907d6f9e59c01b816ecbbd759152b444" Size="23011" PackHash="b2f88f44baa14211312509c95df7f2a600873cef" PackOffset="1953404" />
<Blob Hash="df6827b14a3654d380e4d6be2540829a404197af" Size="2109952" PackHash="de8eb2d3cc98126cdce5e4f8e475dd4382dd626a" PackOffset="8" />
<Blob Hash="df69a38864fabe64d749061d16fb7815a294fac0" Size="243" PackHash="df09a1189b1d8964858cfb161710f823446cb601" PackOffset="2096842" />
<Blob Hash="df6a4ea61b1b95c4b976114371e5d3e127a5a64e" Size="7588640" PackHash="940efd71d46bd3adcd95775096ff81074df16efd" PackOffset="8" />
<Blob Hash="df6c0e4ca6591e17bf46d34435b347641a10314a" Size="441334" PackHash="142ddd26a143aeb02ee0ebc41be2e53c051e8680" PackOffset="1467302" />
@@ -62501,6 +62510,7 @@
<Blob Hash="e6fa61923049d58e71f49c80bafa3b1ee098aee4" Size="86016" PackHash="88192934143593f3b9bdf82185f4ac7a7373da7b" PackOffset="1869147" />
<Blob Hash="e6fe94e93920839564b0a1cdedba48d87b05bc4c" Size="69197" PackHash="d92734f6a18a11d0dfbf8c9e12f63f2180c5225d" PackOffset="878294" />
<Blob Hash="e6ff9aaaad94c910613d43dd3947cf9fe74c5569" Size="24795" PackHash="8eb9b2bca1fd3169f88939176fcba84d79e2efb3" PackOffset="2040914" />
<Blob Hash="e70230d27989e42b09c8d02305cd8d8623b8b47a" Size="2110464" PackHash="7763bc2a723835983323800aed495fdef3171de7" PackOffset="8" />
<Blob Hash="e702b5b3290900cffacacac7677b6074703232da" Size="39424" PackHash="aaf3a012f48b24c193628af42ef3302d96784c3f" PackOffset="2026064" />
<Blob Hash="e702e43d0a41d6951db2ae7fe57c2aed33e94136" Size="1194496" PackHash="c2e8f2bf69a66ee756deb2b98fe8e6b015a71f3b" PackOffset="8" />
<Blob Hash="e7047e8f04d731d38fa328fbc0e1856c4a8bb23d" Size="257" PackHash="b8b36b31df40a1fc9087e4b313999fcda60845cc" PackOffset="1044166" />
@@ -64959,6 +64969,7 @@
<Blob Hash="fe985394bf8ebfb1097905c453ee6186f332f688" Size="186176" PackHash="19ede39792670acddd34ed95e64693476ff138d6" PackOffset="1147768" />
<Blob Hash="fe9909998cb689186ca772e1318fa257da9977cf" Size="1256" PackHash="a74a1a5121db55028d0a9d281ca2e5d501761af4" PackOffset="546858" />
<Blob Hash="fe9f300dd562486bd82a406b3e76c104c18d47b0" Size="1817088" PackHash="c12630229aec6a6d5650a913934dd964f725eeeb" PackOffset="8" />
<Blob Hash="fe9f897083368e3ec2db695ff590ee71a60c8358" Size="2168815" PackHash="30abec4df27f82943cf2f46504770edf5000b727" PackOffset="8" />
<Blob Hash="fea348e4251a63c474ecaa1b9ec3139556e3b8ba" Size="62079" PackHash="2f13e90048446b62f7b075e0a79209d62ee1b054" PackOffset="2018499" />
<Blob Hash="fea59097c5daf2c921656ca1aac6561ab052c118" Size="18014" PackHash="61414cf7f1e5c788cc1612ab498ef841efa0481a" PackOffset="1065992" />
<Blob Hash="fea5d4d103e88ad371bbed943fdbe38a981aa6e0" Size="202673" PackHash="c63b8b65198dbac3e3764c69e57b85f011332ea1" PackOffset="1261794" />
@@ -65672,6 +65683,7 @@
<Pack Hash="305e297b2b5cfbc7e8ed4a63a3675efefa5e98c6" Size="2985912" CompressedSize="877083" RemotePath="UnrealEngine-3903710-c0a431f3a7fa47508c57a1b68a0c1c20" />
<Pack Hash="3079ca967e96faed7447bb62972be52c51fefd0b" Size="5571852" CompressedSize="216308" RemotePath="UnrealEngine-4067073-f4223345c30c43e9b9a5d5fb88e6738b" />
<Pack Hash="3079df4a3d586d43d272a660d269190b32b35686" Size="2097137" CompressedSize="1449956" RemotePath="UnrealEngine-3851379-9574459699d54a468d422fafe2380ede" />
<Pack Hash="30abec4df27f82943cf2f46504770edf5000b727" Size="2168823" CompressedSize="260156" RemotePath="UnrealEngine-4071957-6642e934a7024324b15f91414df34b28" />
<Pack Hash="30ba7bb330361d176b1fe57e61dee2be600e9b64" Size="2912160" CompressedSize="1007269" RemotePath="UnrealEngine-3600450-c3e3142cd8824d5ea86ce9e428159b08" />
<Pack Hash="30bf523aff5cc60cdbb2da5ca9b51226e6aefc9b" Size="2097142" CompressedSize="744436" RemotePath="2369826-2acd3c361c9d4a858bd63938a2ab980e" />
<Pack Hash="30c121a8a201c1fb51737b1b088de3a5bd3c3fca" Size="81523720" CompressedSize="14367071" RemotePath="UnrealEngine-3903710-c0a431f3a7fa47508c57a1b68a0c1c20" />
@@ -66538,6 +66550,7 @@
<Pack Hash="772be2a1b26f994f4af5928b9a48434ff28b41b2" Size="2091208" CompressedSize="593726" RemotePath="UnrealEngine-3903710-c0a431f3a7fa47508c57a1b68a0c1c20" />
<Pack Hash="774363affa148e7acada2be2f0553fedf8552894" Size="3994336" CompressedSize="1317725" RemotePath="UnrealEngine-3903710-c0a431f3a7fa47508c57a1b68a0c1c20" />
<Pack Hash="7756f8e0698993a2efb94e15819a1d1a22edd9aa" Size="2803148" CompressedSize="969091" RemotePath="2369826-2acd3c361c9d4a858bd63938a2ab980e" />
<Pack Hash="7763bc2a723835983323800aed495fdef3171de7" Size="2110472" CompressedSize="692282" RemotePath="UnrealEngine-4071957-6642e934a7024324b15f91414df34b28" />
<Pack Hash="7768e26095f6f16e7f329165693df1ce2b1b50b1" Size="6571424" CompressedSize="2494637" RemotePath="3140364-25fb5146829445ab89ef552f8f2cddc4" />
<Pack Hash="77a45c780d4b8b728c809b3746997230d1e80d28" Size="7521576" CompressedSize="2149127" RemotePath="UnrealEngine-3903710-c0a431f3a7fa47508c57a1b68a0c1c20" />
<Pack Hash="77ab57479dfe164e72b8298375e3b9b577e6640d" Size="8389824" CompressedSize="8390491" RemotePath="2487260-b428468bcd6545bfbb79f02a6605b9ef" />
@@ -67275,7 +67288,6 @@
<Pack Hash="b4d22366c02cea6b30ea26961825358361ba47f2" Size="1572646" CompressedSize="332135" RemotePath="UnrealEngine-3777242-2bd2dd48ffff490f920a1af9d6c763dd" />
<Pack Hash="b4d8e0b490d2a1157340644482cc429e03d9575a" Size="2097144" CompressedSize="623061" RemotePath="UnrealEngine-3600450-c3e3142cd8824d5ea86ce9e428159b08" />
<Pack Hash="b50b2c32f95d78ac0f63d6c0063c800b3c883e13" Size="2097073" CompressedSize="750112" RemotePath="UnrealEngine-3903710-c0a431f3a7fa47508c57a1b68a0c1c20" />
<Pack Hash="b53b024f09d16f566786b61cb2d738b8e3176cf1" Size="2166943" CompressedSize="260014" RemotePath="UnrealEngine-4060164-d69a73f952174c318802b4322d29764f" />
<Pack Hash="b59506b87ef3d619a3747897e1f0921349ec252e" Size="4159640" CompressedSize="985242" RemotePath="UnrealEngine-3903710-c0a431f3a7fa47508c57a1b68a0c1c20" />
<Pack Hash="b5d103f39702f6a58b4e0e29b1b4e09be6689d12" Size="3466436" CompressedSize="218209" RemotePath="UnrealEngine-4069744-6d8a6a4085764dba89097508c3984eec" />
<Pack Hash="b6031fd8e7c7749f931cc4703f065767edfa8a3b" Size="7077360" CompressedSize="4156390" RemotePath="3046645-5118f05e81a74ec4b9df0322d127b3f5" />
@@ -67750,7 +67762,6 @@
<Pack Hash="de74434214aa307a9b0fd7f9d71b839fc98c45e1" Size="4982730" CompressedSize="608161" RemotePath="UnrealEngine-3567077-8a334f3f74574a8583d4869b352a08e4" />
<Pack Hash="de7be9bd446cca2c3d817d2f1d7042e9a6f27378" Size="8399819" CompressedSize="8400498" RemotePath="2487260-b428468bcd6545bfbb79f02a6605b9ef" />
<Pack Hash="de85751668591870e7965db775b02872c59e1667" Size="2095769" CompressedSize="886376" RemotePath="UnrealEngine-3600450-c3e3142cd8824d5ea86ce9e428159b08" />
<Pack Hash="de8eb2d3cc98126cdce5e4f8e475dd4382dd626a" Size="2109960" CompressedSize="692124" RemotePath="UnrealEngine-4060164-d69a73f952174c318802b4322d29764f" />
<Pack Hash="de91426e5f3e3df5e3245d6aeb1634e9c47ced52" Size="2096332" CompressedSize="1391578" RemotePath="3362661-c42b75bbdfa5405597d5cca909cf2e91" />
<Pack Hash="de95456c72c660a7fc9f70aa125bbefaa24b5897" Size="47805864" CompressedSize="12564370" RemotePath="3321770-f9a487bdd60e467b9a438b5715e2646c" />
<Pack Hash="de97d5ea9d0119675bc1b66f36c68cb50fe4aee5" Size="6379762" CompressedSize="1649065" RemotePath="UnrealEngine-3903710-c0a431f3a7fa47508c57a1b68a0c1c20" />
@@ -68060,6 +68071,7 @@
<Pack Hash="fa09585b9d6d07f49e9f66b7bc0c064ae5b342ca" Size="2096988" CompressedSize="554133" RemotePath="UnrealEngine-3537460-fc4e9ec63e054c8198c29206bb6442a0" />
<Pack Hash="fa3c3cf43525a5cf7e63f9b4de6d7441a0e826af" Size="8838914" CompressedSize="8839813" RemotePath="2487260-b428468bcd6545bfbb79f02a6605b9ef" />
<Pack Hash="fa46706927a9be426d4a9e202d324198df62b341" Size="17753466" CompressedSize="4452569" RemotePath="3147801-f415651f647b4861a899c285d0f69963" />
<Pack Hash="fa48ff18c8bfe5de58cfd0b9f5fc9ff52ec1b1da" Size="87846" CompressedSize="37759" RemotePath="UnrealEngine-4071957-6642e934a7024324b15f91414df34b28" />
<Pack Hash="fa6b03fd484f9c41484542437072d4053af6cfb1" Size="4269880" CompressedSize="1379105" RemotePath="UnrealEngine-3903710-c0a431f3a7fa47508c57a1b68a0c1c20" />
<Pack Hash="fa831f9211c00727c75faa1ba30d872024a924b2" Size="45716288" CompressedSize="8365183" RemotePath="UnrealEngine-3903710-c0a431f3a7fa47508c57a1b68a0c1c20" />
<Pack Hash="faa641df952d93274d1774a37ecd0e58a425c5a1" Size="2096793" CompressedSize="464084" RemotePath="3386123-114c137db15c440eb0400947c008540e" />
@@ -1,6 +1,8 @@
// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved.
#include "LiveLinkBlueprintLibrary.h"
#include "Features/IModularFeatures.h"
#include "ILiveLinkClient.h"
void ULiveLinkBlueprintLibrary::GetCurves(UPARAM(ref) FSubjectFrameHandle& SubjectFrameHandle, TMap<FName, float>& Curves)
{
@@ -61,3 +63,60 @@ void ULiveLinkBlueprintLibrary::GetChildren(UPARAM(ref) FLiveLinkTransform& Live
{
LiveLinkTransform.GetChildren(Children);
};
bool ULiveLinkBlueprintLibrary::IsSourceStillValid(UPARAM(ref) FLiveLinkSourceHandle& SourceHandle)
{
return SourceHandle.SourcePointer.IsValid() && SourceHandle.SourcePointer->IsSourceStillValid();
};
bool ULiveLinkBlueprintLibrary::RequestShutdown(UPARAM(ref) FLiveLinkSourceHandle& SourceHandle)
{
bool bSourceShutdown = SourceHandle.SourcePointer.IsValid() && SourceHandle.SourcePointer->RequestSourceShutdown();
if (bSourceShutdown)
{
IModularFeatures& ModularFeatures = IModularFeatures::Get();
if (ModularFeatures.IsModularFeatureAvailable(ILiveLinkClient::ModularFeatureName))
{
ILiveLinkClient* LiveLinkClient = &ModularFeatures.GetModularFeature<ILiveLinkClient>(ILiveLinkClient::ModularFeatureName);
LiveLinkClient->RemoveSource(SourceHandle.SourcePointer);
}
}
return bSourceShutdown;
}
FText ULiveLinkBlueprintLibrary::GetSourceStatus(UPARAM(ref) FLiveLinkSourceHandle& SourceHandle)
{
if (SourceHandle.SourcePointer.IsValid())
{
return SourceHandle.SourcePointer->GetSourceStatus();
}
else
{
return FText::GetEmpty();
}
}
FText ULiveLinkBlueprintLibrary::GetSourceType(UPARAM(ref) FLiveLinkSourceHandle& SourceHandle)
{
if (SourceHandle.SourcePointer.IsValid())
{
return SourceHandle.SourcePointer->GetSourceType();
}
else
{
return FText::GetEmpty();
}
}
FText ULiveLinkBlueprintLibrary::GetSourceMachineName(UPARAM(ref) FLiveLinkSourceHandle& SourceHandle)
{
if (SourceHandle.SourcePointer.IsValid())
{
return SourceHandle.SourcePointer->GetSourceMachineName();
}
else
{
return FText::GetEmpty();
}
}
@@ -1,7 +1,7 @@
// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved.
#include "LiveLinkBlueprintStructs.h"
#include "QualifiedFrameTime.h"
#include "Misc/QualifiedFrameTime.h"
// FCachedSubjectFrame
@@ -318,3 +318,8 @@ void FSubjectFrameHandle::SetCachedFrame(TSharedPtr<FCachedSubjectFrame> InCache
{
CachedFrame = InCachedFrame;
};
void FLiveLinkSourceHandle::SetSourcePointer(TSharedPtr<ILiveLinkSource> InSourcePointer)
{
SourcePointer = InSourcePointer;
};
@@ -432,6 +432,18 @@ void FLiveLinkClient::RemoveSource(FGuid InEntryGuid)
}
}
void FLiveLinkClient::RemoveSource(TSharedPtr<ILiveLinkSource> InSource)
{
LastValidationCheck = 0.0; //Force validation check next frame
int32 SourceIdx = GetSourceIndexForPointer(InSource);
if (SourceIdx != INDEX_NONE)
{
SourcesToRemove.Add(Sources[SourceIdx]);
RemoveSourceInternal(SourceIdx);
OnLiveLinkSourcesChanged.Broadcast();
}
}
void FLiveLinkClient::RemoveAllSources()
{
LastValidationCheck = 0.0; //Force validation check next frame
@@ -508,6 +520,31 @@ TArray<FLiveLinkSubjectKey> FLiveLinkClient::GetSubjects()
return SubjectEntries;
}
void FLiveLinkClient::GetSubjectNames(TArray<FName>& SubjectNames)
{
SubjectNames.Reset();
{
FScopeLock Lock(&SubjectDataAccessCriticalSection);
SubjectNames.Reserve(LiveSubjectData.Num() + VirtualSubjects.Num());
for (const TPair<FName, FLiveLinkSubject>& LiveSubject : LiveSubjectData)
{
SubjectNames.Emplace(LiveSubject.Key);
}
}
for (TPair<FName, FLiveLinkVirtualSubject>& VirtualSubject : VirtualSubjects)
{
SubjectNames.Emplace(VirtualSubject.Key);
}
}
int32 FLiveLinkClient::GetSourceIndexForPointer(TSharedPtr<ILiveLinkSource> InSource) const
{
return Sources.IndexOfByKey(InSource);
}
int32 FLiveLinkClient::GetSourceIndexForGUID(FGuid InEntryGuid) const
{
return SourceGuids.IndexOfByKey(InEntryGuid);
@@ -0,0 +1,85 @@
// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved.
#include "LiveLinkMessageBusFinder.h"
#include "Engine/Engine.h"
#include "Features/IModularFeatures.h"
#include "ILiveLinkClient.h"
#include "LiveLinkMessages.h"
#include "LiveLinkMessageBusSource.h"
#include "MessageEndpointBuilder.h"
ULiveLinkMessageBusFinder::ULiveLinkMessageBusFinder()
: MessageEndpoint(nullptr)
{
};
void ULiveLinkMessageBusFinder::GetAvailableProviders(UObject* WorldContextObject, struct FLatentActionInfo LatentInfo, float Duration, TArray<FProviderPollResult>& AvailableProviders)
{
if (UWorld* World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull))
{
FLatentActionManager& LatentManager = World->GetLatentActionManager();
if (LatentManager.FindExistingAction<FLiveLinkMessageBusFinderAction>(LatentInfo.CallbackTarget, LatentInfo.UUID) == nullptr)
{
PollNetwork();
FLiveLinkMessageBusFinderAction* NewAction = new FLiveLinkMessageBusFinderAction(LatentInfo, this, Duration, AvailableProviders);
LatentManager.AddNewAction(LatentInfo.CallbackTarget, LatentInfo.UUID, NewAction);
}
else
{
UE_LOG(LogTemp, Warning, TEXT("GetAvailableProviders not executed. The previous action hasn't finished yet."));
}
}
};
void ULiveLinkMessageBusFinder::GetPollResults(TArray<FProviderPollResult>& AvailableProviders)
{
FScopeLock ScopedLock(&PollDataCriticalSection);
AvailableProviders = PollData;
};
void ULiveLinkMessageBusFinder::PollNetwork()
{
if (!MessageEndpoint.IsValid())
{
MessageEndpoint = FMessageEndpoint::Builder(TEXT("LiveLinkMessageBusSource"))
.Handling<FLiveLinkPongMessage>(this, &ULiveLinkMessageBusFinder::HandlePongMessage);
}
PollData.Reset();
CurrentPollRequest = FGuid::NewGuid();
MessageEndpoint->Publish(new FLiveLinkPingMessage(CurrentPollRequest));
};
void ULiveLinkMessageBusFinder::HandlePongMessage(const FLiveLinkPongMessage& Message, const TSharedRef<IMessageContext, ESPMode::ThreadSafe>& Context)
{
if (Message.PollRequest == CurrentPollRequest)
{
FScopeLock ScopedLock(&PollDataCriticalSection);
PollData.Add(FProviderPollResult(Context->GetSender(), Message.ProviderName, Message.MachineName));
}
};
void ULiveLinkMessageBusFinder::ConnectToProvider(UPARAM(ref) FProviderPollResult& Provider, FLiveLinkSourceHandle& SourceHandle)
{
IModularFeatures& ModularFeatures = IModularFeatures::Get();
if (ModularFeatures.IsModularFeatureAvailable(ILiveLinkClient::ModularFeatureName))
{
ILiveLinkClient* LiveLinkClient = &ModularFeatures.GetModularFeature<ILiveLinkClient>(ILiveLinkClient::ModularFeatureName);
TSharedPtr<FLiveLinkMessageBusSource> NewSource = MakeShared<FLiveLinkMessageBusSource>(FText::FromString(Provider.Name), FText::FromString(Provider.MachineName), Provider.Address);
LiveLinkClient->AddSource(NewSource);
SourceHandle.SetSourcePointer(NewSource);
}
else
{
SourceHandle.SetSourcePointer(nullptr);
}
};
ULiveLinkMessageBusFinder* ULiveLinkMessageBusFinder::ConstructMessageBusFinder()
{
return NewObject<ULiveLinkMessageBusFinder>();
}
@@ -64,7 +64,11 @@ void FLiveLinkMessageBusSource::HandleClearSubject(const FLiveLinkClearSubject&
bool FLiveLinkMessageBusSource::RequestSourceShutdown()
{
FHeartbeatManager::Get()->RemoveSource(this);
FHeartbeatManager* HeartbeatManager = FHeartbeatManager::Get();
if (HeartbeatManager->IsRunning())
{
HeartbeatManager->RemoveSource(this);
}
FMessageEndpoint::SafeRelease(MessageEndpoint);
return true;
}
@@ -64,4 +64,25 @@ class LIVELINK_API ULiveLinkBlueprintLibrary : public UBlueprintFunctionLibrary
UFUNCTION(BlueprintPure, Category = "LiveLink")
static void GetChildren(UPARAM(ref) FLiveLinkTransform& LiveLinkTransform, TArray<FLiveLinkTransform>& Children);
// FLiveLinkSourceHandle
// Checks whether the LiveLink Source is valid via its handle
UFUNCTION(BlueprintCallable, Category = "LiveLink")
static bool IsSourceStillValid(UPARAM(ref) FLiveLinkSourceHandle& SourceHandle);
// Requests the given LiveLink Source to shut down via its handle
UFUNCTION(BlueprintCallable, Category = "LiveLink")
static bool RequestShutdown(UPARAM(ref) FLiveLinkSourceHandle& SourceHandle);
// Get the text status of a LiveLink Source via its handle
UFUNCTION(BlueprintCallable, Category = "LiveLink")
static FText GetSourceStatus(UPARAM(ref) FLiveLinkSourceHandle& SourceHandle);
// Get the type of a LiveLink Source via its handle
UFUNCTION(BlueprintCallable, Category = "LiveLink")
static FText GetSourceType(UPARAM(ref) FLiveLinkSourceHandle& SourceHandle);
// Get the machine name of a LiveLink Source via its handle
UFUNCTION(BlueprintCallable, Category = "LiveLink")
static FText GetSourceMachineName(UPARAM(ref) FLiveLinkSourceHandle& SourceHandle);
};
@@ -4,8 +4,9 @@
#include "CoreMinimal.h"
#include "LiveLinkTypes.h"
#include "Timecode.h"
#include "FrameRate.h"
#include "Misc/Timecode.h"
#include "Misc/FrameRate.h"
#include "ILiveLinkSource.h"
#include "LiveLinkBlueprintStructs.generated.h"
USTRUCT(BlueprintType)
@@ -122,3 +123,18 @@ struct FSubjectFrameHandle
private:
TSharedPtr<FCachedSubjectFrame> CachedFrame;
};
// A Blueprint handle to a specific LiveLink Source
USTRUCT(BlueprintType)
struct FLiveLinkSourceHandle
{
GENERATED_USTRUCT_BODY()
FLiveLinkSourceHandle() = default;
virtual ~FLiveLinkSourceHandle() = default;
void SetSourcePointer(TSharedPtr<ILiveLinkSource> InSourcePointer);
TSharedPtr<ILiveLinkSource> SourcePointer;
};
@@ -134,6 +134,9 @@ public:
// Remove the specified source from the live link client
void RemoveSource(FGuid InEntryGuid);
// Remove the specified source from the live link client
virtual void RemoveSource(TSharedPtr<ILiveLinkSource> InSource) override;
// Remover all sources from the live link client
void RemoveAllSources();
@@ -157,6 +160,9 @@ public:
// Get a list of currently active subjects
TArray<FLiveLinkSubjectKey> GetSubjects();
// Populates an array with in-use subject names
virtual void GetSubjectNames(TArray<FName>& SubjectNames) override;
FText GetSourceTypeForEntry(FGuid InEntryGuid) const;
FText GetMachineNameForEntry(FGuid InEntryGuid) const;
FText GetEntryStatusForEntry(FGuid InEntryGuid) const;
@@ -185,7 +191,7 @@ public:
FDelegateHandle RegisterSourcesChangedHandle(const FSimpleMulticastDelegate::FDelegate& SourcesChanged);
void UnregisterSourcesChangedHandle(FDelegateHandle Handle);
// Functions for managing sources changed delegate
// Functions for managing subjects changed delegate
FDelegateHandle RegisterSubjectsChangedHandle(const FSimpleMulticastDelegate::FDelegate& SubjectsChanged);
void UnregisterSubjectsChangedHandle(FDelegateHandle Handle);
@@ -197,6 +203,9 @@ private:
// Remove the specified source (must be a valid index, function does no checking)
void RemoveSourceInternal(int32 SourceIdx);
// Get index of specified source
int32 GetSourceIndexForPointer(TSharedPtr<ILiveLinkSource> InSource) const;
// Get index of specified source
int32 GetSourceIndexForGUID(FGuid InEntryGuid) const;
@@ -0,0 +1,134 @@
// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "LiveLinkTypes.h"
#include "Misc/ScopeLock.h"
#include "MessageEndpoint.h"
#include "LatentActions.h"
#include "Engine/LatentActionManager.h"
#include "LiveLinkBlueprintStructs.h"
#include "LiveLinkMessageBusFinder.generated.h"
struct FLiveLinkPongMessage;
USTRUCT(BlueprintType)
struct FProviderPollResult
{
public:
GENERATED_USTRUCT_BODY()
FProviderPollResult() = default;
FProviderPollResult(const FMessageAddress& InAddress, const FString& InName, const FString& InMachineName)
: Address(InAddress)
, Name(InName)
, MachineName(InMachineName)
{}
FMessageAddress Address;
// The name of the provider
UPROPERTY(BlueprintReadOnly, EditAnywhere, Category="LiveLink", meta=(DisplayName = "Provider Name"))
FString Name;
// The name of the machine the provider is running on
UPROPERTY(BlueprintReadOnly, EditAnywhere, Category="LiveLink")
FString MachineName;
};
// Asset for finding available Message Bus Sources.
UCLASS(BlueprintType)
class LIVELINK_API ULiveLinkMessageBusFinder
: public UObject
{
GENERATED_BODY()
public:
ULiveLinkMessageBusFinder();
/*
* Broadcasts a message to the network and returns a list of all providers who replied within a set amount of time.
*
* @param AvailableProviders Will contain the collection of found Message Bus Providers.
* @param Duration The amount of time to wait for replies in seconds
*/
UFUNCTION(BlueprintCallable, Category = "LiveLink", meta=(Latent, LatentInfo = "LatentInfo", WorldContext = "WorldContextObject", Duration = "0.2"))
void GetAvailableProviders(UObject* WorldContextObject, struct FLatentActionInfo LatentInfo, float Duration, TArray<FProviderPollResult>& AvailableProviders);
/*
* Connects to a given Message Bus Provider and returns a handle to the created LiveLink Source
*
* @param Provider The provider to connect to.
* @param SourceHandle A handle to the created LiveLink Source, lets you query information about the created source and request a shutdown
*/
UFUNCTION(BlueprintCallable, Category = "LiveLink")
static void ConnectToProvider(UPARAM(ref) FProviderPollResult& Provider, FLiveLinkSourceHandle& SourceHandle);
/*
* Constructs a new Message Bus Finder which enables you to detect available Message Bus Providers on the network
*
* @return The newly constructed Message Bus Finder
*/
UFUNCTION(BlueprintCallable, Category = "LiveLink")
static ULiveLinkMessageBusFinder* ConstructMessageBusFinder();
// Broadcast a ping message to the network and listen for responses
void PollNetwork();
// Populates AvailableProviders with the Providers who have responded to the latest poll.
void GetPollResults(TArray<FProviderPollResult>& AvailableProviders);
private:
// Runs when a Provider responds to the ping from PollNetwork()
void HandlePongMessage(const FLiveLinkPongMessage& Message, const TSharedRef<IMessageContext, ESPMode::ThreadSafe>& Context);
TSharedPtr<FMessageEndpoint, ESPMode::ThreadSafe> MessageEndpoint;
TArray<FProviderPollResult> PollData;
FGuid CurrentPollRequest;
FCriticalSection PollDataCriticalSection;
};
struct FLiveLinkMessageBusFinderAction : public FPendingLatentAction
{
public:
FName ExecutionFunction;
int32 OutputLink;
FWeakObjectPtr CallbackTarget;
TWeakObjectPtr<ULiveLinkMessageBusFinder> MessageBusFinderWeakPtr;
TArray<FProviderPollResult>& OutAvailableProviders;
float RemainingTime;
FLiveLinkMessageBusFinderAction(const FLatentActionInfo& InLatentInfo, ULiveLinkMessageBusFinder* InMessageBusFinder, float Duration, TArray<FProviderPollResult>& InAvailableProviders)
: FPendingLatentAction()
, ExecutionFunction(InLatentInfo.ExecutionFunction)
, OutputLink(InLatentInfo.Linkage)
, CallbackTarget(InLatentInfo.CallbackTarget)
, MessageBusFinderWeakPtr(InMessageBusFinder)
, OutAvailableProviders(InAvailableProviders)
, RemainingTime(Duration)
{}
virtual void UpdateOperation(FLatentResponse& Response) override
{
RemainingTime -= Response.ElapsedTime();
if (RemainingTime <= 0)
{
if (ULiveLinkMessageBusFinder* MessageBusFinder = MessageBusFinderWeakPtr.Get())
{
MessageBusFinder->GetPollResults(OutAvailableProviders);
}
Response.FinishAndTriggerIf(true, ExecutionFunction, OutputLink, CallbackTarget);
}
}
#if WITH_EDITOR
virtual FString GetDescription() const override
{
return FString::Printf(TEXT("Searching for LiveLink Message Bus providers."));
}
#endif
};
@@ -1,6 +1,7 @@
// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved.
// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved.
#include "LiveLinkMessageBusSourceEditor.h"
#include "LiveLinkMessageBusFinder.h"
#include "LiveLinkMessages.h"
#include "Widgets/Layout/SBox.h"
@@ -124,7 +125,7 @@ void SLiveLinkMessageBusSourceEditor::HandlePongMessage(const FLiveLinkPongMessa
{
if(Message.PollRequest == CurrentPollRequest)
{
PollData.Add(MakeShareable(new FProviderPollResult(Context->GetSender(), Message.ProviderName, Message.MachineName)));
PollData.Add(MakeShared<FProviderPollResult>(Context->GetSender(), Message.ProviderName, Message.MachineName));
ListView->RequestListRefresh();
}
@@ -1,4 +1,4 @@
// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved.
// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved.
#pragma once
@@ -11,24 +11,10 @@
struct FLiveLinkPongMessage;
struct FMessageAddress;
struct FProviderPollResult;
class ITableRow;
class STableViewBase;
struct FProviderPollResult
{
public:
FProviderPollResult(const FMessageAddress& InAddress, const FString& InName, const FString& InMachineName)
: Address(InAddress)
, Name(InName)
, MachineName(InMachineName)
{}
FMessageAddress Address;
FString Name;
FString MachineName;
};
typedef TSharedPtr<FProviderPollResult> FProviderPollResultPtr;
class SLiveLinkMessageBusSourceEditor : public SCompoundWidget
@@ -1,7 +1,8 @@
// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved.
// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved.
#include "LiveLinkMessageBusSourceFactory.h"
#include "LiveLinkMessageBusSource.h"
#include "LiveLinkMessageBusSourceEditor.h"
#include "LiveLinkMessageBusFinder.h"
#define LOCTEXT_NAMESPACE "LiveLinkMessageBusSourceFactory"
@@ -34,7 +35,7 @@ TSharedPtr<ILiveLinkSource> ULiveLinkMessageBusSourceFactory::OnSourceCreationPa
FProviderPollResultPtr Result = ActiveSourceEditor->GetSelectedSource();
if(Result.IsValid())
{
NewSource = MakeShareable( new FLiveLinkMessageBusSource(FText::FromString(Result->Name), FText::FromString(Result->MachineName), Result->Address));
NewSource = MakeShared<FLiveLinkMessageBusSource>(FText::FromString(Result->Name), FText::FromString(Result->MachineName), Result->Address);
}
}
ActiveSourceEditor = nullptr;
@@ -9,7 +9,7 @@
#include "Widgets/Notifications/SNotificationList.h"
#include "Framework/Notifications/NotificationManager.h"
#include "ComposureEditorModule.h"
#include "QualifiedFrameTime.h"
#include "Misc/QualifiedFrameTime.h"
#define LOCTEXT_NAMESPACE "ComposurePostMoveSettingsPropertyTrackEditor"
@@ -3,7 +3,7 @@
#pragma once
#include "Widgets/SWindow.h"
#include "FrameRate.h"
#include "Misc/FrameRate.h"
/** A dialog for collecting settings for importing post move settings from an external file. */
class SComposurePostMoveSettingsImportDialog : public SWindow
@@ -0,0 +1,3 @@
[CoreRedirects]
+ClassRedirects=(OldName="/Script/EditorScriptingUtilities.BlutilityActor",NewName="/Script/Blutility.PlacedEditorUtilityBase")
@@ -1,15 +0,0 @@
// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved.
#pragma once
#include "GameFramework/Actor.h"
#include "BlutilityActor.generated.h"
/**
* Utility class to do most of the common functionalities.
*/
UCLASS()
class EDITORSCRIPTINGUTILITIES_API ABlutilityActor : public AActor
{
GENERATED_BODY()
};
@@ -118,9 +118,11 @@ struct DATASMITHCONTENT_API FDatasmithStaticMeshImportOptions
FDatasmithStaticMeshImportOptions();
/** Minimum resolution for auto-generated lightmap UVs */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Lightmap)
EDatasmithImportLightmapMin MinLightmapResolution;
/** Maximum resolution for auto-generated lightmap UVs */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Lightmap)
EDatasmithImportLightmapMax MaxLightmapResolution;
@@ -145,11 +147,11 @@ struct DATASMITHCONTENT_API FDatasmithReimportOptions
public:
FDatasmithReimportOptions();
/** Specifies whether geometry are to be imported or not */
/** Specifies whether or not to update Datasmith Scene Actors in the current Level */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SyncCurrentLevelActors", meta = (DisplayName = "Datasmith Scene Actors"))
bool bUpdateActors;
/** Specifies whether materials and textures are to be imported or not */
/** Specifies whether or not to add back Actors you've deleted from the current Level */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "SyncCurrentLevelActors", meta = (DisplayName = "Re-Spawn Deleted Actors", EditCondition = "bUpdateActors"))
bool bRespawnDeletedActors;
};
@@ -165,19 +167,19 @@ struct DATASMITHCONTENT_API FDatasmithImportBaseOptions
UPROPERTY(BlueprintReadWrite, Category = Import, Transient)
EDatasmithImportScene SceneHandling; // Not displayed, not saved
/** Specifies whether geometry are to be imported or not */
/** Specifies whether or not to import geometry */
UPROPERTY(config, EditAnywhere, BlueprintReadWrite, Category = Process, meta = (DisplayName = "Geometry"))
bool bIncludeGeometry;
/** Specifies whether materials and textures are to be imported or not */
/** Specifies whether or not to import materials and textures */
UPROPERTY(config, EditAnywhere, BlueprintReadWrite, Category = Process, meta = (DisplayName = "Materials & Textures"))
bool bIncludeMaterial;
/** Specifies whether lights are to be imported or not */
/** Specifies whether or not to import lights */
UPROPERTY(config, EditAnywhere, BlueprintReadWrite, Category = Process, meta = (DisplayName = "Lights"))
bool bIncludeLight;
/** Specifies whether cameras are to be imported or not */
/** Specifies whether or not to import cameras */
UPROPERTY(config, EditAnywhere, BlueprintReadWrite, Category = Process, meta = (DisplayName = "Cameras"))
bool bIncludeCamera;
@@ -206,7 +208,7 @@ struct DATASMITHCONTENT_API FDatasmithTessellationOptions
* The lower the value the more triangles.
* Default value is 0.2.
*/
UPROPERTY(config, EditAnywhere, BlueprintReadWrite, Category = "Geometry & Tessellation Options", meta = (Units = cm, ToolTip = "Maximum distance between a generated triangle and the original surface. Smaller values increase triangles count.", ClampMin = "0.0"))
UPROPERTY(config, EditAnywhere, BlueprintReadWrite, Category = "Geometry & Tessellation Options", meta = (Units = cm, ToolTip = "Maximum distance between any generated triangle and the original surface. Smaller values make more triangles.", ClampMin = "0.0"))
float ChordTolerance;
/**
@@ -215,7 +217,7 @@ struct DATASMITHCONTENT_API FDatasmithTessellationOptions
* Value of 0 means no constraint on length of edges
* Default value is 0.
*/
UPROPERTY(config, EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = "Geometry & Tessellation Options", meta = (Units = cm, DisplayName = "Max Edge Length", ToolTip = "Maximum length of an edge in the generated triangles. Smaller values increase triangles count.", ClampMin = "0.0"))
UPROPERTY(config, EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = "Geometry & Tessellation Options", meta = (Units = cm, DisplayName = "Max Edge Length", ToolTip = "Maximum length of any edge in the generated triangles. Smaller values make more triangles.", ClampMin = "0.0"))
float MaxEdgeLength;
/**
@@ -223,7 +225,7 @@ struct DATASMITHCONTENT_API FDatasmithTessellationOptions
* The angle is expressed in degree. The smaller the more triangles are generated.
* Default value is 20 degrees.
*/
UPROPERTY(config, EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = "Geometry & Tessellation Options", meta = (Units = deg, ToolTip = "Maximum angle between adjacent triangles generated from a surface. Smaller values increase triangles count.", ClampMin = "0.0", ClampMax = "90.0"))
UPROPERTY(config, EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = "Geometry & Tessellation Options", meta = (Units = deg, ToolTip = "Maximum angle between adjacent triangles. Smaller values make more triangles.", ClampMin = "0.0", ClampMax = "90.0"))
float NormalTolerance;
public:
@@ -4,7 +4,7 @@
#include "Evaluation/MovieSceneEvalTemplate.h"
#include "Evaluation/MovieScenePropertyTemplate.h"
#include "FrameNumber.h"
#include "Misc/FrameNumber.h"
#include "MovieSceneImagePlateTemplate.generated.h"
class UMovieSceneImagePlateSection;
@@ -1,12 +1,10 @@
// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved.
#include "PyFileWriter.h"
#include "Misc/FileHelper.h"
#include "PyGenUtil.h"
#if WITH_PYTHON
FPyFileWriter::FPyFileWriter()
: Indentation(0)
{
@@ -88,8 +86,7 @@ void FPyFileWriter::DecreaseIndent(const int32 InCount)
bool FPyFileWriter::SaveFile(const TCHAR* InFilename)
{
return FFileHelper::SaveStringToFile(FileContents, InFilename, FFileHelper::EEncodingOptions::ForceUTF8);
return PyGenUtil::SaveGeneratedTextFile(InFilename, FileContents);
}
#endif // WITH_PYTHON

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