Merge branch 'development' into Atom/santorac/ShaderReloadDebugImprovements
This commit is contained in:
@@ -1,16 +1,9 @@
|
|||||||
<EngineDependencies versionnumber="1.0.0">
|
<EngineDependencies versionnumber="1.0.0">
|
||||||
<Dependency path="*.ent" optional="false" />
|
<Dependency path="game.cfg" optional="true" />
|
||||||
<Dependency path="game.cfg" optional="true" />
|
<Dependency path="autoexec.cfg" optional="true" />
|
||||||
<Dependency path="config/singleplayer.cfg" optional="true" />
|
<Dependency path="default-ui" optional="true" />
|
||||||
<Dependency path="singleplayer.cfg" optional="true" />
|
<Dependency path="fonts/default-ui.fontfamily" optional="true" />
|
||||||
<Dependency path="autoexec.cfg" optional="true" />
|
<Dependency path="fonts/default-ui/default-ui.fontfamily" optional="true" />
|
||||||
<Dependency path="default-ui" optional="true" />
|
<Dependency path="libs/localization/localization.xml" optional="true" />
|
||||||
<Dependency path="fonts/default-ui.fontfamily" optional="true" />
|
<Dependency path="localization/*xml" optional="true" />
|
||||||
<Dependency path="fonts/default-ui/default-ui.fontfamily" optional="true" />
|
</EngineDependencies>
|
||||||
<Dependency path="libs/smartobjects.xml" optional="true" />
|
|
||||||
<Dependency path="modes/menucommon_sp.pak" optional="true" />
|
|
||||||
<Dependency path="modes/menucommon_mp.pak" optional="true" />
|
|
||||||
<Dependency path="libs/materialeffects/surfacetypes.xml" optional="true" />
|
|
||||||
<Dependency path="libs/localization/localization.xml" optional="true" />
|
|
||||||
<Dependency path="localization/*xml" optional="true" />
|
|
||||||
</EngineDependencies>
|
|
||||||
|
|||||||
+258
-619
@@ -1,621 +1,260 @@
|
|||||||
<ObjectStream version="3">
|
<ObjectStream version="3">
|
||||||
<Class name="AZStd::vector" type="{82FC5264-88D0-57CD-9307-FC52E4DAD550}">
|
<Class name="AZStd::vector" type="{82FC5264-88D0-57CD-9307-FC52E4DAD550}">
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||||
<Class name="AZ::Uuid" field="guid" value="{2FB1A7EF-557C-577E-94E6-DC1F331E374F}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
<Class name="AZ::Uuid" field="guid" value="{2FB1A7EF-557C-577E-94E6-DC1F331E374F}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
<Class name="AZStd::string" field="pathHint" value="config/config.dat" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
<Class name="AZStd::string" field="pathHint" value="config/config.dat" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||||
<Class name="AZ::Uuid" field="guid" value="{1103CB60-BE8D-56C0-AE9D-98EF531C7106}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
<Class name="AZ::Uuid" field="guid" value="{1103CB60-BE8D-56C0-AE9D-98EF531C7106}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
<Class name="AZStd::string" field="pathHint" value="config/gpu/android_gpus.xml" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
<Class name="AZStd::string" field="pathHint" value="config/gpu/android_gpus.xml" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||||
<Class name="AZ::Uuid" field="guid" value="{AD7E02A2-5658-5138-95F2-47347A9C1BE1}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
<Class name="AZ::Uuid" field="guid" value="{AD7E02A2-5658-5138-95F2-47347A9C1BE1}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
<Class name="AZStd::string" field="pathHint" value="config/gpu/android_models.xml" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
<Class name="AZStd::string" field="pathHint" value="config/gpu/android_models.xml" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||||
<Class name="AZ::Uuid" field="guid" value="{7646BFFB-B94B-5593-8669-9B387B4669D6}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
<Class name="AZ::Uuid" field="guid" value="{7646BFFB-B94B-5593-8669-9B387B4669D6}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
<Class name="AZStd::string" field="pathHint" value="config/gpu/ios_models.xml" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
<Class name="AZStd::string" field="pathHint" value="config/gpu/ios_models.xml" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||||
<Class name="AZ::Uuid" field="guid" value="{0B1796E6-5BB3-5C4B-A8EE-58577A56EB0A}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
<Class name="AZ::Uuid" field="guid" value="{F408D747-032E-5409-BBDF-2C4AAA5FD385}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
<Class name="AZStd::string" field="pathHint" value="config/mgpu.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
<Class name="AZStd::string" field="pathHint" value="config/perfhud_pc.xml" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||||
<Class name="AZ::Uuid" field="guid" value="{F408D747-032E-5409-BBDF-2C4AAA5FD385}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
<Class name="AZ::Uuid" field="guid" value="{34B60E74-28FA-57C4-9A2E-77515A083AC5}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="subId" value="1000" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="platformFlags" value="127" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
<Class name="AZStd::string" field="pathHint" value="config/perfhud_pc.xml" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
<Class name="AZStd::string" field="pathHint" value="engineassets/icons/averagememoryusage.tif.streamingimage" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||||
<Class name="AZ::Uuid" field="guid" value="{34B60E74-28FA-57C4-9A2E-77515A083AC5}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
<Class name="AZ::Uuid" field="guid" value="{D84DBC88-3637-5876-B249-E92EA9BCD0F5}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||||
<Class name="unsigned int" field="subId" value="1000" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="subId" value="1000" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="unsigned int" field="platformFlags" value="127" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="platformFlags" value="127" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
<Class name="AZStd::string" field="pathHint" value="engineassets/icons/averagememoryusage.tif.streamingimage" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
<Class name="AZStd::string" field="pathHint" value="engineassets/icons/highmemoryusage.tif.streamingimage" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||||
<Class name="AZ::Uuid" field="guid" value="{D84DBC88-3637-5876-B249-E92EA9BCD0F5}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
<Class name="AZ::Uuid" field="guid" value="{98BA37F2-74C0-54CD-8109-F71276E834FE}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||||
<Class name="unsigned int" field="subId" value="1000" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="subId" value="1000" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="unsigned int" field="platformFlags" value="127" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="platformFlags" value="127" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
<Class name="AZStd::string" field="pathHint" value="engineassets/icons/highmemoryusage.tif.streamingimage" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
<Class name="AZStd::string" field="pathHint" value="engineassets/icons/livepreview.tif.streamingimage" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||||
<Class name="AZ::Uuid" field="guid" value="{98BA37F2-74C0-54CD-8109-F71276E834FE}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
<Class name="AZ::Uuid" field="guid" value="{DAC6670C-4A48-5661-B0DC-030071B2F2AB}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||||
<Class name="unsigned int" field="subId" value="1000" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="subId" value="1000" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="unsigned int" field="platformFlags" value="127" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="platformFlags" value="127" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
<Class name="AZStd::string" field="pathHint" value="engineassets/icons/livepreview.tif.streamingimage" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
<Class name="AZStd::string" field="pathHint" value="engineassets/icons/lowmemoryusage.tif.streamingimage" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||||
<Class name="AZ::Uuid" field="guid" value="{DAC6670C-4A48-5661-B0DC-030071B2F2AB}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
<Class name="AZ::Uuid" field="guid" value="{9AF56C8A-4B9F-5B20-A77D-E30114E032D6}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||||
<Class name="unsigned int" field="subId" value="1000" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="subId" value="1000" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="unsigned int" field="platformFlags" value="127" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="platformFlags" value="127" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
<Class name="AZStd::string" field="pathHint" value="engineassets/icons/lowmemoryusage.tif.streamingimage" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
<Class name="AZStd::string" field="pathHint" value="engineassets/icons/navigationprocessing.tif.streamingimage" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||||
<Class name="AZ::Uuid" field="guid" value="{9AF56C8A-4B9F-5B20-A77D-E30114E032D6}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
<Class name="AZ::Uuid" field="guid" value="{B6A22033-75B8-5580-80D7-0568C08AAFF3}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||||
<Class name="unsigned int" field="subId" value="1000" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="subId" value="1000" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="unsigned int" field="platformFlags" value="127" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="platformFlags" value="127" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
<Class name="AZStd::string" field="pathHint" value="engineassets/icons/navigationprocessing.tif.streamingimage" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
<Class name="AZStd::string" field="pathHint" value="engineassets/icons/nullsoundsystem.tif.streamingimage" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||||
<Class name="AZ::Uuid" field="guid" value="{B6A22033-75B8-5580-80D7-0568C08AAFF3}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
<Class name="AZ::Uuid" field="guid" value="{8AE41B60-4004-5749-8B50-5EF6E5151342}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||||
<Class name="unsigned int" field="subId" value="1000" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="subId" value="1000" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="unsigned int" field="platformFlags" value="127" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="platformFlags" value="127" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
<Class name="AZStd::string" field="pathHint" value="engineassets/icons/nullsoundsystem.tif.streamingimage" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
<Class name="AZStd::string" field="pathHint" value="engineassets/icons/shadercompiling.tif.streamingimage" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||||
<Class name="AZ::Uuid" field="guid" value="{8AE41B60-4004-5749-8B50-5EF6E5151342}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
<Class name="AZ::Uuid" field="guid" value="{B150AA1E-B38A-5827-AABE-A072E7C2477F}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||||
<Class name="unsigned int" field="subId" value="1000" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="subId" value="1000" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="unsigned int" field="platformFlags" value="127" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="platformFlags" value="127" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
<Class name="AZStd::string" field="pathHint" value="engineassets/icons/shadercompiling.tif.streamingimage" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
<Class name="AZStd::string" field="pathHint" value="engineassets/icons/streaming.tif.streamingimage" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||||
<Class name="AZ::Uuid" field="guid" value="{B150AA1E-B38A-5827-AABE-A072E7C2477F}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
<Class name="AZ::Uuid" field="guid" value="{F43241FB-ECDE-55A9-BA59-AE19AF495F62}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||||
<Class name="unsigned int" field="subId" value="1000" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="subId" value="1000" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="unsigned int" field="platformFlags" value="127" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="platformFlags" value="127" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
<Class name="AZStd::string" field="pathHint" value="engineassets/icons/streaming.tif.streamingimage" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
<Class name="AZStd::string" field="pathHint" value="engineassets/icons/streamingterrain.tif.streamingimage" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||||
<Class name="AZ::Uuid" field="guid" value="{F43241FB-ECDE-55A9-BA59-AE19AF495F62}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
<Class name="AZ::Uuid" field="guid" value="{E03A8D59-7F4C-5C84-9D05-339A65C65E2C}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||||
<Class name="unsigned int" field="subId" value="1000" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="unsigned int" field="platformFlags" value="127" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="platformFlags" value="127" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
<Class name="AZStd::string" field="pathHint" value="engineassets/icons/streamingterrain.tif.streamingimage" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
<Class name="AZStd::string" field="pathHint" value="fonts/default-ui.font" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||||
<Class name="AZ::Uuid" field="guid" value="{E03A8D59-7F4C-5C84-9D05-339A65C65E2C}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
<Class name="AZ::Uuid" field="guid" value="{D4279574-B13F-5B71-B5D2-BE04FA3A0C81}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="unsigned int" field="platformFlags" value="127" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="platformFlags" value="127" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
<Class name="AZStd::string" field="pathHint" value="fonts/default-ui.font" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
<Class name="AZStd::string" field="pathHint" value="fonts/default.font" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||||
<Class name="AZ::Uuid" field="guid" value="{D4279574-B13F-5B71-B5D2-BE04FA3A0C81}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
<Class name="AZ::Uuid" field="guid" value="{0ECD9946-3A20-5DB8-B731-763A1AE69B7F}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="subId" value="1000" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="unsigned int" field="platformFlags" value="127" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="platformFlags" value="127" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
<Class name="AZStd::string" field="pathHint" value="fonts/default.font" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
<Class name="AZStd::string" field="pathHint" value="textures/default_icon.png.streamingimage" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||||
<Class name="AZ::Uuid" field="guid" value="{01DE39C2-26D8-516E-9571-6D845E2382E5}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
<Class name="AZ::Uuid" field="guid" value="{368A249D-7AC3-5B44-A6FC-8FDDF7C2AA62}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
<Class name="AZStd::string" field="pathHint" value="libs/posteffectgroups/default.xml" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
<Class name="AZStd::string" field="pathHint" value="config/cvargroups/sys_spec_full.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||||
<Class name="AZ::Uuid" field="guid" value="{D5E96499-BC5A-5CC7-9170-E84FEC006DB5}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
<Class name="AZ::Uuid" field="guid" value="{FD38C182-1AFC-514C-99E5-BB1AB60C4A31}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="unsigned int" field="platformFlags" value="127" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
<Class name="AZStd::string" field="pathHint" value="materials/material_layers_default.mtl" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
<Class name="AZStd::string" field="pathHint" value="config/spec/android_high.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||||
<Class name="AZ::Uuid" field="guid" value="{43A1CBF0-72DF-5058-846F-1488BF0D261B}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
<Class name="AZ::Uuid" field="guid" value="{A81A509B-C473-583A-9675-AC159B274231}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="unsigned int" field="platformFlags" value="127" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
<Class name="AZStd::string" field="pathHint" value="materials/material_terrain_default.mtl" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
<Class name="AZStd::string" field="pathHint" value="config/spec/android_high_nogmem.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||||
<Class name="AZ::Uuid" field="guid" value="{0ECD9946-3A20-5DB8-B731-763A1AE69B7F}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
<Class name="AZ::Uuid" field="guid" value="{08D52EFB-D7FB-5266-905F-1599F8D29C77}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||||
<Class name="unsigned int" field="subId" value="1000" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="unsigned int" field="platformFlags" value="127" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
<Class name="AZStd::string" field="pathHint" value="textures/default_icon.png.streamingimage" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
<Class name="AZStd::string" field="pathHint" value="config/spec/android_low.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||||
<Class name="AZ::Uuid" field="guid" value="{7B1BA42D-E4D3-5E34-8950-B214CAEAAECF}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
<Class name="AZ::Uuid" field="guid" value="{78605B06-1772-5B60-AEF4-4F5DD3AAA665}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
<Class name="AZStd::string" field="pathHint" value="entities/animobject.ent" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
<Class name="AZStd::string" field="pathHint" value="config/spec/android_malit760.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||||
<Class name="AZ::Uuid" field="guid" value="{B045E22C-8872-5330-AF19-212F733F3E82}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
<Class name="AZ::Uuid" field="guid" value="{9452506B-6F3D-5907-B631-78AD00C7A555}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
<Class name="AZStd::string" field="pathHint" value="entities/areabeziervolume.ent" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
<Class name="AZStd::string" field="pathHint" value="config/spec/android_medium.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||||
<Class name="AZ::Uuid" field="guid" value="{C20CEB18-BBD9-57DB-B3D1-C4488D1FFD6B}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
<Class name="AZ::Uuid" field="guid" value="{E68C7CB3-DE0B-5A2C-914B-F2E50F48D4F3}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
<Class name="AZStd::string" field="pathHint" value="entities/areabox.ent" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
<Class name="AZStd::string" field="pathHint" value="config/spec/android_veryhigh.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||||
<Class name="AZ::Uuid" field="guid" value="{58FE6208-2D29-5C50-BD7C-95F4C28EA2C2}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
<Class name="AZ::Uuid" field="guid" value="{6971FAB8-2ABE-5830-AE34-081B35970662}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
<Class name="AZStd::string" field="pathHint" value="entities/areashape.ent" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
<Class name="AZStd::string" field="pathHint" value="config/spec/ios_high.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||||
<Class name="AZ::Uuid" field="guid" value="{393D27FD-3F56-5D5C-B18B-B084FD04B77E}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
<Class name="AZ::Uuid" field="guid" value="{ECFC3EF0-4B9D-504B-8DC6-231CA22E2EDB}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
<Class name="AZStd::string" field="pathHint" value="entities/areasolid.ent" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
<Class name="AZStd::string" field="pathHint" value="config/spec/ios_low.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||||
<Class name="AZ::Uuid" field="guid" value="{DAEEFC39-FA55-5827-9686-06A4BD781EBA}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
<Class name="AZ::Uuid" field="guid" value="{3B603071-F68A-515F-BE93-7592E08EA56B}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
<Class name="AZStd::string" field="pathHint" value="entities/areasphere.ent" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
<Class name="AZStd::string" field="pathHint" value="config/spec/ios_medium.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||||
<Class name="AZ::Uuid" field="guid" value="{0B36FCBA-B484-52AF-B8F9-881A3CCA5D2D}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
<Class name="AZ::Uuid" field="guid" value="{7DC7B81A-6E95-567E-8BBA-30957B97312A}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
<Class name="AZStd::string" field="pathHint" value="entities/areatrigger.ent" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
<Class name="AZStd::string" field="pathHint" value="config/spec/ios_veryhigh.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||||
<Class name="AZ::Uuid" field="guid" value="{EE4528D5-2985-5F8A-B419-1194A7C862E5}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
<Class name="AZ::Uuid" field="guid" value="{A8970A25-5043-5519-A927-F180E7D6E8C1}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="subId" value="1" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
<Class name="AZStd::string" field="pathHint" value="entities/audioareaambience.ent" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
<Class name="AZStd::string" field="pathHint" value="scripts/enginecommon.luac" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||||
<Class name="AZ::Uuid" field="guid" value="{E5EA4E2B-F33D-5C2D-A412-9ACFF6E07EBA}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
<Class name="AZ::Uuid" field="guid" value="{A8970A25-5043-5519-A927-F180E7D6E8C1}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="subId" value="2" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
<Class name="AZStd::string" field="pathHint" value="entities/audioareaentity.ent" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
<Class name="AZStd::string" field="pathHint" value="scripts/enginecommon.lua" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||||
<Class name="AZ::Uuid" field="guid" value="{B90C33E3-58C8-540D-96D6-4C0E8A20ED0A}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
<Class name="AZ::Uuid" field="guid" value="{2DEEC017-D5F2-585D-A729-F68D51AF6E07}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
<Class name="AZStd::string" field="pathHint" value="entities/audioarearandom.ent" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
<Class name="AZStd::string" field="pathHint" value="engine_dependencies.xml" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
||||||
<Class name="AZ::Uuid" field="guid" value="{9599A145-11D3-5D8D-960D-5853F77C38E3}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
<Class name="AZ::Uuid" field="guid" value="{3B28A661-E723-5EBE-AB52-EC5829D88C31}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="subId" value="-2010443522" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
||||||
<Class name="AZStd::string" field="pathHint" value="entities/audiotriggerspot.ent" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
<Class name="AZStd::string" field="pathHint" value="bootstrap.game.release.setreg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
||||||
</Class>
|
</Class>
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
</Class>
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
|
||||||
<Class name="AZ::Uuid" field="guid" value="{4007741F-9C2E-532E-ABD0-94D21E936FFC}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
<Class name="AZStd::string" field="pathHint" value="entities/basicentity.ent" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
|
||||||
<Class name="AZ::Uuid" field="guid" value="{2AE50E61-1BC4-593E-AAC3-94CE6A48DC43}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
<Class name="AZStd::string" field="pathHint" value="entities/cactorwrapper.ent" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
|
||||||
<Class name="AZ::Uuid" field="guid" value="{1DB72B2F-18D5-5C10-BEAA-8DAB9E26CAAF}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
<Class name="AZStd::string" field="pathHint" value="entities/camerasource.ent" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
|
||||||
<Class name="AZ::Uuid" field="guid" value="{FB3A723D-3351-57A8-81BB-82B91D278299}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
<Class name="AZStd::string" field="pathHint" value="entities/cameratarget.ent" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
|
||||||
<Class name="AZ::Uuid" field="guid" value="{5B8F78E6-0D7A-52BA-B25A-84A97828B168}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
<Class name="AZStd::string" field="pathHint" value="entities/comment.ent" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
|
||||||
<Class name="AZ::Uuid" field="guid" value="{161067E3-5EA2-55E8-AAB2-B315EFD005BE}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
<Class name="AZStd::string" field="pathHint" value="entities/environmentlight.ent" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
|
||||||
<Class name="AZ::Uuid" field="guid" value="{CFE7E2B2-7B69-5930-BEE0-076D800AB34C}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
<Class name="AZStd::string" field="pathHint" value="entities/fogvolume.ent" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
|
||||||
<Class name="AZ::Uuid" field="guid" value="{2C14FD60-5463-5E23-B0D7-4FEEB8259C20}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
<Class name="AZStd::string" field="pathHint" value="entities/geomcache.ent" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
|
||||||
<Class name="AZ::Uuid" field="guid" value="{D13E440D-43F3-5E8E-8F22-82530322FEEF}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
<Class name="AZStd::string" field="pathHint" value="entities/light.ent" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
|
||||||
<Class name="AZ::Uuid" field="guid" value="{75A38660-8A68-5FB9-B8C4-794556F78DE4}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
<Class name="AZStd::string" field="pathHint" value="entities/livingentity.ent" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
|
||||||
<Class name="AZ::Uuid" field="guid" value="{BBC9C728-F62D-53E4-AC77-58123C5F06C2}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
<Class name="AZStd::string" field="pathHint" value="entities/navigationseedpoint.ent" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
|
||||||
<Class name="AZ::Uuid" field="guid" value="{C3ED0C6D-2792-5498-A4BC-9041D326E2A0}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
<Class name="AZStd::string" field="pathHint" value="entities/particleeffect.ent" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
|
||||||
<Class name="AZ::Uuid" field="guid" value="{0AE73F30-E66A-5275-B185-08B4D041C577}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
<Class name="AZStd::string" field="pathHint" value="entities/proceduralobject.ent" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
|
||||||
<Class name="AZ::Uuid" field="guid" value="{662717C8-D7F3-52AC-8D29-1EA836AEFB3E}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
<Class name="AZStd::string" field="pathHint" value="entities/proximitytrigger.ent" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
|
||||||
<Class name="AZ::Uuid" field="guid" value="{28C8A842-2985-5C4F-8DC3-977638930554}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
<Class name="AZStd::string" field="pathHint" value="entities/rigidbody.ent" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
|
||||||
<Class name="AZ::Uuid" field="guid" value="{47031722-CAA9-5BB8-A791-5076D8FB56A2}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
<Class name="AZStd::string" field="pathHint" value="entities/rigidbodyex.ent" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
|
||||||
<Class name="AZ::Uuid" field="guid" value="{FD61EB7E-D309-5B9F-A6E6-C2BA742F50A8}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
<Class name="AZStd::string" field="pathHint" value="entities/smartobject.ent" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
|
||||||
<Class name="AZ::Uuid" field="guid" value="{1F249798-3169-5685-91D6-0F3A6999551C}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
<Class name="AZStd::string" field="pathHint" value="entities/tagpoint.ent" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
|
||||||
<Class name="AZ::Uuid" field="guid" value="{6C331041-3D70-5EDA-86A2-6FD588EBB3D5}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
<Class name="AZStd::string" field="pathHint" value="entities/uicanvasref.ent" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
|
||||||
<Class name="AZ::Uuid" field="guid" value="{368A249D-7AC3-5B44-A6FC-8FDDF7C2AA62}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
<Class name="AZStd::string" field="pathHint" value="config/cvargroups/sys_spec_full.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
|
||||||
<Class name="AZ::Uuid" field="guid" value="{FD38C182-1AFC-514C-99E5-BB1AB60C4A31}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
<Class name="AZStd::string" field="pathHint" value="config/spec/android_high.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
|
||||||
<Class name="AZ::Uuid" field="guid" value="{A81A509B-C473-583A-9675-AC159B274231}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
<Class name="AZStd::string" field="pathHint" value="config/spec/android_high_nogmem.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
|
||||||
<Class name="AZ::Uuid" field="guid" value="{08D52EFB-D7FB-5266-905F-1599F8D29C77}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
<Class name="AZStd::string" field="pathHint" value="config/spec/android_low.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
|
||||||
<Class name="AZ::Uuid" field="guid" value="{78605B06-1772-5B60-AEF4-4F5DD3AAA665}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
<Class name="AZStd::string" field="pathHint" value="config/spec/android_malit760.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
|
||||||
<Class name="AZ::Uuid" field="guid" value="{9452506B-6F3D-5907-B631-78AD00C7A555}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
<Class name="AZStd::string" field="pathHint" value="config/spec/android_medium.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
|
||||||
<Class name="AZ::Uuid" field="guid" value="{E68C7CB3-DE0B-5A2C-914B-F2E50F48D4F3}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
<Class name="AZStd::string" field="pathHint" value="config/spec/android_veryhigh.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
|
||||||
<Class name="AZ::Uuid" field="guid" value="{6971FAB8-2ABE-5830-AE34-081B35970662}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
<Class name="AZStd::string" field="pathHint" value="config/spec/ios_high.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
|
||||||
<Class name="AZ::Uuid" field="guid" value="{ECFC3EF0-4B9D-504B-8DC6-231CA22E2EDB}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
<Class name="AZStd::string" field="pathHint" value="config/spec/ios_low.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
|
||||||
<Class name="AZ::Uuid" field="guid" value="{3B603071-F68A-515F-BE93-7592E08EA56B}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
<Class name="AZStd::string" field="pathHint" value="config/spec/ios_medium.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
|
||||||
<Class name="AZ::Uuid" field="guid" value="{7DC7B81A-6E95-567E-8BBA-30957B97312A}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
<Class name="AZStd::string" field="pathHint" value="config/spec/ios_veryhigh.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
|
||||||
<Class name="AZ::Uuid" field="guid" value="{B632E8B1-884A-5A65-BC01-D85F0FED1266}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
<Class name="AZStd::string" field="pathHint" value="config/spec/pc_high.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
|
||||||
<Class name="AZ::Uuid" field="guid" value="{E1D99213-C3E7-502B-BF24-92A4DD5449A9}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
<Class name="AZStd::string" field="pathHint" value="config/spec/pc_low.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
|
||||||
<Class name="AZ::Uuid" field="guid" value="{9FE0B03E-7E58-53CC-BDB9-79CC5C7CF819}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
<Class name="AZStd::string" field="pathHint" value="config/spec/pc_medium.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
|
||||||
<Class name="AZ::Uuid" field="guid" value="{FA6AD9F7-77B5-5B95-A534-3850DC362A64}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
<Class name="AZStd::string" field="pathHint" value="config/spec/pc_veryhigh.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
|
||||||
<Class name="AZ::Uuid" field="guid" value="{A8970A25-5043-5519-A927-F180E7D6E8C1}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
|
||||||
<Class name="unsigned int" field="subId" value="1" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
<Class name="AZStd::string" field="pathHint" value="scripts/enginecommon.luac" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
|
||||||
<Class name="AZ::Uuid" field="guid" value="{A8970A25-5043-5519-A927-F180E7D6E8C1}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
|
||||||
<Class name="unsigned int" field="subId" value="2" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
<Class name="AZStd::string" field="pathHint" value="scripts/enginecommon.lua" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
|
||||||
<Class name="AZ::Uuid" field="guid" value="{65C1B8A1-B91E-55A4-A35F-0431C450C9D1}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
|
||||||
<Class name="unsigned int" field="subId" value="1" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
<Class name="AZStd::string" field="pathHint" value="scripts/entities/anim/mannequinobject.luac" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
|
||||||
<Class name="AZ::Uuid" field="guid" value="{65C1B8A1-B91E-55A4-A35F-0431C450C9D1}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
|
||||||
<Class name="unsigned int" field="subId" value="2" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
<Class name="AZStd::string" field="pathHint" value="scripts/entities/anim/mannequinobject.lua" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
|
||||||
<Class name="AZ::Uuid" field="guid" value="{6C9002C8-B416-5EE7-B1D4-703520132718}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
|
||||||
<Class name="unsigned int" field="subId" value="1" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
<Class name="AZStd::string" field="pathHint" value="scripts/entities/default/geomentity.luac" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
|
||||||
<Class name="AZ::Uuid" field="guid" value="{6C9002C8-B416-5EE7-B1D4-703520132718}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
|
||||||
<Class name="unsigned int" field="subId" value="2" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
<Class name="AZStd::string" field="pathHint" value="scripts/entities/default/geomentity.lua" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
|
||||||
<Class name="AZ::Uuid" field="guid" value="{5657A12F-D16B-5F3F-949E-A413B223BE30}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
|
||||||
<Class name="unsigned int" field="subId" value="1" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
<Class name="AZStd::string" field="pathHint" value="scripts/entities/default/ropeentity.luac" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
|
||||||
<Class name="AZ::Uuid" field="guid" value="{5657A12F-D16B-5F3F-949E-A413B223BE30}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
|
||||||
<Class name="unsigned int" field="subId" value="2" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
<Class name="AZStd::string" field="pathHint" value="scripts/entities/default/ropeentity.lua" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
|
||||||
<Class name="AZ::Uuid" field="guid" value="{B298A3D8-5E82-53E2-A809-D255209AEC0D}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
|
||||||
<Class name="unsigned int" field="subId" value="1" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
<Class name="AZStd::string" field="pathHint" value="scripts/entities/environment/watervolume.luac" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
|
||||||
<Class name="AZ::Uuid" field="guid" value="{B298A3D8-5E82-53E2-A809-D255209AEC0D}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
|
||||||
<Class name="unsigned int" field="subId" value="2" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
<Class name="AZStd::string" field="pathHint" value="scripts/entities/environment/watervolume.lua" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
|
|
||||||
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
|
|
||||||
<Class name="AZ::Uuid" field="guid" value="{2DEEC017-D5F2-585D-A729-F68D51AF6E07}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
|
|
||||||
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
</Class>
|
|
||||||
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
|
|
||||||
<Class name="AZStd::string" field="pathHint" value="engine_dependencies.xml" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
|
|
||||||
</Class>
|
|
||||||
</Class>
|
|
||||||
</ObjectStream>
|
</ObjectStream>
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
#
|
||||||
|
# Copyright (c) Contributors to the Open 3D Engine Project.
|
||||||
|
# For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||||
|
#
|
||||||
|
#
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
#
|
||||||
|
# Copyright (c) Contributors to the Open 3D Engine Project.
|
||||||
|
# For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||||
|
#
|
||||||
|
#
|
||||||
|
|
||||||
|
import azlmbr.debug as debug
|
||||||
|
|
||||||
|
import pathlib
|
||||||
|
|
||||||
|
def test_profiler_system():
|
||||||
|
if not debug.g_ProfilerSystem.IsValid():
|
||||||
|
print('g_ProfilerSystem is INVALID')
|
||||||
|
return
|
||||||
|
|
||||||
|
state = 'ACTIVE' if debug.g_ProfilerSystem.IsActive() else 'INACTIVE'
|
||||||
|
print(f'Profiler system is currently {state}')
|
||||||
|
|
||||||
|
capture_location = pathlib.Path(debug.g_ProfilerSystem.GetCaptureLocation())
|
||||||
|
print(f'Capture location set to {capture_location}')
|
||||||
|
|
||||||
|
print('Capturing single frame...' )
|
||||||
|
capture_file = str(capture_location / 'script_capture_frame.json')
|
||||||
|
debug.g_ProfilerSystem.CaptureFrame(capture_file)
|
||||||
|
|
||||||
|
# Invoke main function
|
||||||
|
if __name__ == '__main__':
|
||||||
|
test_profiler_system()
|
||||||
@@ -14,15 +14,25 @@ ly_add_target(
|
|||||||
FILES_CMAKE
|
FILES_CMAKE
|
||||||
automatedtesting_files.cmake
|
automatedtesting_files.cmake
|
||||||
${pal_dir}/platform_${PAL_PLATFORM_NAME_LOWERCASE}_files.cmake
|
${pal_dir}/platform_${PAL_PLATFORM_NAME_LOWERCASE}_files.cmake
|
||||||
|
automatedtesting_autogen_files.cmake
|
||||||
INCLUDE_DIRECTORIES
|
INCLUDE_DIRECTORIES
|
||||||
PRIVATE
|
PRIVATE
|
||||||
Source
|
Source
|
||||||
PUBLIC
|
PUBLIC
|
||||||
Include
|
Include
|
||||||
BUILD_DEPENDENCIES
|
BUILD_DEPENDENCIES
|
||||||
|
PUBLIC
|
||||||
|
AZ::AzNetworking
|
||||||
|
Gem::Multiplayer
|
||||||
PRIVATE
|
PRIVATE
|
||||||
AZ::AzCore
|
AZ::AzCore
|
||||||
Gem::Atom_AtomBridge.Static
|
Gem::Atom_AtomBridge.Static
|
||||||
|
Gem::Multiplayer.Static
|
||||||
|
AUTOGEN_RULES
|
||||||
|
*.AutoComponent.xml,AutoComponent_Header.jinja,$path/$fileprefix.AutoComponent.h
|
||||||
|
*.AutoComponent.xml,AutoComponent_Source.jinja,$path/$fileprefix.AutoComponent.cpp
|
||||||
|
*.AutoComponent.xml,AutoComponentTypes_Header.jinja,$path/AutoComponentTypes.h
|
||||||
|
*.AutoComponent.xml,AutoComponentTypes_Source.jinja,$path/AutoComponentTypes.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
# if enabled, AutomatedTesting is used by all kinds of applications
|
# if enabled, AutomatedTesting is used by all kinds of applications
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
|
||||||
|
<Component
|
||||||
|
Name="NetworkTestPlayerComponent"
|
||||||
|
Namespace="AutomatedTesting"
|
||||||
|
OverrideComponent="false"
|
||||||
|
OverrideController="false"
|
||||||
|
OverrideInclude=""
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
|
|
||||||
|
<ComponentRelation Constraint="Required" HasController="true" Name="NetworkTransformComponent" Namespace="Multiplayer" Include="Multiplayer/Components/NetworkTransformComponent.h" />
|
||||||
|
|
||||||
|
<NetworkInput Type="float" Name="FwdBack" Init="0.0f" ExposeToScript="true"/>
|
||||||
|
<NetworkInput Type="float" Name="LeftRight" Init="0.0f" ExposeToScript="true"/>
|
||||||
|
|
||||||
|
</Component>
|
||||||
@@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
#include <AzCore/Memory/SystemAllocator.h>
|
#include <AzCore/Memory/SystemAllocator.h>
|
||||||
#include <AzCore/Module/Module.h>
|
#include <AzCore/Module/Module.h>
|
||||||
|
#include <Source/AutoGen/AutoComponentTypes.h>
|
||||||
|
|
||||||
#include <AutomatedTestingSystemComponent.h>
|
#include <AutomatedTestingSystemComponent.h>
|
||||||
|
|
||||||
@@ -27,6 +28,8 @@ namespace AutomatedTesting
|
|||||||
m_descriptors.insert(m_descriptors.end(), {
|
m_descriptors.insert(m_descriptors.end(), {
|
||||||
AutomatedTestingSystemComponent::CreateDescriptor(),
|
AutomatedTestingSystemComponent::CreateDescriptor(),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
CreateComponentDescriptors(m_descriptors); //< Register multiplayer components
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
#include <AzCore/Serialization/SerializeContext.h>
|
#include <AzCore/Serialization/SerializeContext.h>
|
||||||
#include <AzCore/Serialization/EditContext.h>
|
#include <AzCore/Serialization/EditContext.h>
|
||||||
#include <AzCore/Serialization/EditContextConstants.inl>
|
#include <AzCore/Serialization/EditContextConstants.inl>
|
||||||
|
#include <Source/AutoGen/AutoComponentTypes.h>
|
||||||
|
|
||||||
#include <AutomatedTestingSystemComponent.h>
|
#include <AutomatedTestingSystemComponent.h>
|
||||||
|
|
||||||
@@ -60,6 +61,7 @@ namespace AutomatedTesting
|
|||||||
void AutomatedTestingSystemComponent::Activate()
|
void AutomatedTestingSystemComponent::Activate()
|
||||||
{
|
{
|
||||||
AutomatedTestingRequestBus::Handler::BusConnect();
|
AutomatedTestingRequestBus::Handler::BusConnect();
|
||||||
|
RegisterMultiplayerComponents(); //< Register AutomatedTesting's multiplayer components to assign NetComponentIds
|
||||||
}
|
}
|
||||||
|
|
||||||
void AutomatedTestingSystemComponent::Deactivate()
|
void AutomatedTestingSystemComponent::Deactivate()
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
#
|
||||||
|
# Copyright (c) Contributors to the Open 3D Engine Project. For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||||
|
#
|
||||||
|
#
|
||||||
|
|
||||||
|
set(FILES
|
||||||
|
${LY_ROOT_FOLDER}/Gems/Multiplayer/Code/Include/Multiplayer/AutoGen/AutoComponent_Common.jinja
|
||||||
|
${LY_ROOT_FOLDER}/Gems/Multiplayer/Code/Include/Multiplayer/AutoGen/AutoComponent_Header.jinja
|
||||||
|
${LY_ROOT_FOLDER}/Gems/Multiplayer/Code/Include/Multiplayer/AutoGen/AutoComponent_Source.jinja
|
||||||
|
${LY_ROOT_FOLDER}/Gems/Multiplayer/Code/Include/Multiplayer/AutoGen/AutoComponentTypes_Header.jinja
|
||||||
|
${LY_ROOT_FOLDER}/Gems/Multiplayer/Code/Include/Multiplayer/AutoGen/AutoComponentTypes_Source.jinja
|
||||||
|
)
|
||||||
@@ -11,4 +11,5 @@ set(FILES
|
|||||||
Source/AutomatedTestingModule.cpp
|
Source/AutomatedTestingModule.cpp
|
||||||
Source/AutomatedTestingSystemComponent.cpp
|
Source/AutomatedTestingSystemComponent.cpp
|
||||||
Source/AutomatedTestingSystemComponent.h
|
Source/AutomatedTestingSystemComponent.h
|
||||||
|
Source/AutoGen/NetworkTestPlayerComponent.AutoComponent.xml
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -55,4 +55,5 @@ set(ENABLED_GEMS
|
|||||||
PrefabBuilder
|
PrefabBuilder
|
||||||
AudioSystem
|
AudioSystem
|
||||||
Profiler
|
Profiler
|
||||||
|
Multiplayer
|
||||||
)
|
)
|
||||||
|
|||||||
-2
@@ -70,8 +70,6 @@ def AtomEditorComponents_postfx_layer_AddedToEntity():
|
|||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import os
|
|
||||||
|
|
||||||
import azlmbr.legacy.general as general
|
import azlmbr.legacy.general as general
|
||||||
|
|
||||||
from editor_python_test_tools.editor_entity_utils import EditorEntity
|
from editor_python_test_tools.editor_entity_utils import EditorEntity
|
||||||
|
|||||||
@@ -6,7 +6,11 @@
|
|||||||
#
|
#
|
||||||
#
|
#
|
||||||
|
|
||||||
if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS)
|
ly_get_list_relative_pal_filename(pal_dir ${CMAKE_CURRENT_LIST_DIR}/Platform/${PAL_PLATFORM_NAME})
|
||||||
|
|
||||||
|
include(${pal_dir}/PAL_${PAL_PLATFORM_NAME_LOWERCASE}.cmake) # for PAL_TRAIT_BLAST Traits
|
||||||
|
|
||||||
|
if(PAL_TRAIT_BLAST_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS)
|
||||||
ly_add_pytest(
|
ly_add_pytest(
|
||||||
NAME AutomatedTesting::BlastTests_Main
|
NAME AutomatedTesting::BlastTests_Main
|
||||||
TEST_SUITE main
|
TEST_SUITE main
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
#
|
||||||
|
# Copyright (c) Contributors to the Open 3D Engine Project.
|
||||||
|
# For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||||
|
#
|
||||||
|
#
|
||||||
|
|
||||||
|
set(PAL_TRAIT_BLAST_TESTS_SUPPORTED FALSE)
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
#
|
||||||
|
# Copyright (c) Contributors to the Open 3D Engine Project.
|
||||||
|
# For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||||
|
#
|
||||||
|
#
|
||||||
|
|
||||||
|
set(PAL_TRAIT_BLAST_TESTS_SUPPORTED FALSE)
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
#
|
||||||
|
# Copyright (c) Contributors to the Open 3D Engine Project.
|
||||||
|
# For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||||
|
#
|
||||||
|
#
|
||||||
|
|
||||||
|
set(PAL_TRAIT_BLAST_TESTS_SUPPORTED FALSE)
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
#
|
||||||
|
# Copyright (c) Contributors to the Open 3D Engine Project.
|
||||||
|
# For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||||
|
#
|
||||||
|
#
|
||||||
|
|
||||||
|
set(PAL_TRAIT_BLAST_TESTS_SUPPORTED TRUE)
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
#
|
||||||
|
# Copyright (c) Contributors to the Open 3D Engine Project.
|
||||||
|
# For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||||
|
#
|
||||||
|
#
|
||||||
|
|
||||||
|
set(PAL_TRAIT_BLAST_TESTS_SUPPORTED FALSE)
|
||||||
@@ -59,5 +59,8 @@ add_subdirectory(smoke)
|
|||||||
## AWS ##
|
## AWS ##
|
||||||
add_subdirectory(AWS)
|
add_subdirectory(AWS)
|
||||||
|
|
||||||
|
## Multiplayer ##
|
||||||
|
add_subdirectory(Multiplayer)
|
||||||
|
|
||||||
## Integration tests for editor testing framework ##
|
## Integration tests for editor testing framework ##
|
||||||
add_subdirectory(editor_test_testing)
|
add_subdirectory(editor_test_testing)
|
||||||
|
|||||||
+76
-15
@@ -107,6 +107,19 @@ class EditorComponent:
|
|||||||
return type_ids
|
return type_ids
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def convert_to_azvector3(xyz) -> azlmbr.math.Vector3:
|
||||||
|
"""
|
||||||
|
Converts a vector3-like element into a azlmbr.math.Vector3
|
||||||
|
"""
|
||||||
|
if isinstance(xyz, Tuple) or isinstance(xyz, List):
|
||||||
|
assert len(xyz) == 3, ValueError("vector must be a 3 element list/tuple or azlmbr.math.Vector3")
|
||||||
|
return math.Vector3(float(xyz[0]), float(xyz[1]), float(xyz[2]))
|
||||||
|
elif isinstance(xyz, type(math.Vector3())):
|
||||||
|
return xyz
|
||||||
|
else:
|
||||||
|
raise ValueError("vector must be a 3 element list/tuple or azlmbr.math.Vector3")
|
||||||
|
|
||||||
class EditorEntity:
|
class EditorEntity:
|
||||||
"""
|
"""
|
||||||
Entity class is used to create and interact with Editor Entities.
|
Entity class is used to create and interact with Editor Entities.
|
||||||
@@ -183,15 +196,6 @@ class EditorEntity:
|
|||||||
:return: EditorEntity class object
|
:return: EditorEntity class object
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def convert_to_azvector3(xyz) -> math.Vector3:
|
|
||||||
if isinstance(xyz, Tuple) or isinstance(xyz, List):
|
|
||||||
assert len(xyz) == 3, ValueError("vector must be a 3 element list/tuple or azlmbr.math.Vector3")
|
|
||||||
return math.Vector3(*xyz)
|
|
||||||
elif isinstance(xyz, type(math.Vector3())):
|
|
||||||
return xyz
|
|
||||||
else:
|
|
||||||
raise ValueError("vector must be a 3 element list/tuple or azlmbr.math.Vector3")
|
|
||||||
|
|
||||||
if parent_id is None:
|
if parent_id is None:
|
||||||
parent_id = azlmbr.entity.EntityId()
|
parent_id = azlmbr.entity.EntityId()
|
||||||
|
|
||||||
@@ -206,7 +210,7 @@ class EditorEntity:
|
|||||||
return entity
|
return entity
|
||||||
|
|
||||||
# Methods
|
# Methods
|
||||||
def set_name(self, entity_name: str):
|
def set_name(self, entity_name: str) -> None:
|
||||||
"""
|
"""
|
||||||
Given entity_name, sets name to Entity
|
Given entity_name, sets name to Entity
|
||||||
:param: entity_name: Name of the entity to set
|
:param: entity_name: Name of the entity to set
|
||||||
@@ -324,7 +328,7 @@ class EditorEntity:
|
|||||||
self.start_status = status
|
self.start_status = status
|
||||||
return status
|
return status
|
||||||
|
|
||||||
def set_start_status(self, desired_start_status: str):
|
def set_start_status(self, desired_start_status: str) -> None:
|
||||||
"""
|
"""
|
||||||
Set an entity as active/inactive at beginning of runtime or it is editor-only,
|
Set an entity as active/inactive at beginning of runtime or it is editor-only,
|
||||||
given its entity id and the start status then return set success
|
given its entity id and the start status then return set success
|
||||||
@@ -382,18 +386,75 @@ class EditorEntity:
|
|||||||
"""
|
"""
|
||||||
return editor.EditorEntityInfoRequestBus(bus.Event, "IsVisible", self.id)
|
return editor.EditorEntityInfoRequestBus(bus.Event, "IsVisible", self.id)
|
||||||
|
|
||||||
|
# World Transform Functions
|
||||||
|
def get_world_translation(self) -> azlmbr.math.Vector3:
|
||||||
|
"""
|
||||||
|
Gets the world translation of the entity
|
||||||
|
"""
|
||||||
|
return azlmbr.components.TransformBus(azlmbr.bus.Event, "GetWorldTranslation", self.id)
|
||||||
|
|
||||||
|
def set_world_translation(self, new_translation) -> None:
|
||||||
|
"""
|
||||||
|
Sets the new world translation of the current entity
|
||||||
|
"""
|
||||||
|
new_translation = convert_to_azvector3(new_translation)
|
||||||
|
azlmbr.components.TransformBus(azlmbr.bus.Event, "SetWorldTranslation", self.id, new_translation)
|
||||||
|
|
||||||
|
def get_world_rotation(self) -> azlmbr.math.Quaternion:
|
||||||
|
"""
|
||||||
|
Gets the world rotation of the entity
|
||||||
|
"""
|
||||||
|
return azlmbr.components.TransformBus(azlmbr.bus.Event, "GetWorldRotation", self.id)
|
||||||
|
|
||||||
|
def set_world_rotation(self, new_rotation):
|
||||||
|
"""
|
||||||
|
Sets the new world rotation of the current entity
|
||||||
|
"""
|
||||||
|
new_rotation = convert_to_azvector3(new_rotation)
|
||||||
|
azlmbr.components.TransformBus(azlmbr.bus.Event, "SetWorldRotation", self.id, new_rotation)
|
||||||
|
|
||||||
|
# Local Transform Functions
|
||||||
|
def get_local_uniform_scale(self) -> float:
|
||||||
|
"""
|
||||||
|
Gets the local uniform scale of the entity
|
||||||
|
"""
|
||||||
|
return azlmbr.components.TransformBus(azlmbr.bus.Event, "GetLocalUniformScale", self.id)
|
||||||
|
|
||||||
def set_local_uniform_scale(self, scale_float) -> None:
|
def set_local_uniform_scale(self, scale_float) -> None:
|
||||||
"""
|
"""
|
||||||
Sets the "SetLocalUniformScale" value on the entity.
|
Sets the local uniform scale value(relative to the parent) on the entity.
|
||||||
:param scale_float: value for "SetLocalUniformScale" to set to.
|
:param scale_float: value for "SetLocalUniformScale" to set to.
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
azlmbr.components.TransformBus(azlmbr.bus.Event, "SetLocalUniformScale", self.id, scale_float)
|
azlmbr.components.TransformBus(azlmbr.bus.Event, "SetLocalUniformScale", self.id, scale_float)
|
||||||
|
|
||||||
def set_local_rotation(self, vector3_rotation) -> None:
|
def get_local_rotation(self) -> azlmbr.math.Quaternion:
|
||||||
"""
|
"""
|
||||||
Sets the "SetLocalRotation" value on the entity.
|
Gets the local rotation of the entity
|
||||||
|
"""
|
||||||
|
return azlmbr.components.TransformBus(azlmbr.bus.Event, "GetLocalRotation", self.id)
|
||||||
|
|
||||||
|
def set_local_rotation(self, new_rotation) -> None:
|
||||||
|
"""
|
||||||
|
Sets the set the local rotation(relative to the parent) of the current entity.
|
||||||
:param vector3_rotation: The math.Vector3 value to use for rotation on the entity (uses radians).
|
:param vector3_rotation: The math.Vector3 value to use for rotation on the entity (uses radians).
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
azlmbr.components.TransformBus(azlmbr.bus.Event, "SetLocalRotation", self.id, vector3_rotation)
|
new_rotation = convert_to_azvector3(new_rotation)
|
||||||
|
azlmbr.components.TransformBus(azlmbr.bus.Event, "SetLocalRotation", self.id, new_rotation)
|
||||||
|
|
||||||
|
def get_local_translation(self) -> azlmbr.math.Vector3:
|
||||||
|
"""
|
||||||
|
Gets the local translation of the current entity.
|
||||||
|
:return: The math.Vector3 value of the local translation.
|
||||||
|
"""
|
||||||
|
return azlmbr.components.TransformBus(azlmbr.bus.Event, "GetLocalTranslation", self.id)
|
||||||
|
|
||||||
|
def set_local_translation(self, new_translation) -> None:
|
||||||
|
"""
|
||||||
|
Sets the local translation(relative to the parent) of the current entity.
|
||||||
|
:param vector3_translation: The math.Vector3 value to use for translation on the entity.
|
||||||
|
:return: None
|
||||||
|
"""
|
||||||
|
new_translation = convert_to_azvector3(new_translation)
|
||||||
|
azlmbr.components.TransformBus(azlmbr.bus.Event, "SetLocalTranslation", self.id, new_translation)
|
||||||
|
|||||||
+8
@@ -138,6 +138,14 @@ class PrefabInstance:
|
|||||||
self.container_entity = reparented_container_entity
|
self.container_entity = reparented_container_entity
|
||||||
current_instance_prefab.instances.add(self)
|
current_instance_prefab.instances.add(self)
|
||||||
|
|
||||||
|
def get_direct_child_entities(self):
|
||||||
|
"""
|
||||||
|
Returns the entities only contained in the current prefab instance.
|
||||||
|
This function does not return entities contained in other child instances
|
||||||
|
"""
|
||||||
|
return self.container_entity.get_children()
|
||||||
|
|
||||||
|
|
||||||
# This is a helper class which contains some of the useful information about a prefab template.
|
# This is a helper class which contains some of the useful information about a prefab template.
|
||||||
class Prefab:
|
class Prefab:
|
||||||
|
|
||||||
|
|||||||
+53
@@ -14,7 +14,10 @@ from typing import Callable, Tuple
|
|||||||
|
|
||||||
import azlmbr
|
import azlmbr
|
||||||
import azlmbr.legacy.general as general
|
import azlmbr.legacy.general as general
|
||||||
|
import azlmbr.multiplayer as multiplayer
|
||||||
import azlmbr.debug
|
import azlmbr.debug
|
||||||
|
import ly_test_tools.environment.waiter as waiter
|
||||||
|
import ly_test_tools.environment.process_utils as process_utils
|
||||||
|
|
||||||
|
|
||||||
class FailFast(Exception):
|
class FailFast(Exception):
|
||||||
@@ -66,6 +69,56 @@ class TestHelper:
|
|||||||
TestHelper.wait_for_condition(lambda : general.is_in_game_mode(), 1.0)
|
TestHelper.wait_for_condition(lambda : general.is_in_game_mode(), 1.0)
|
||||||
Report.critical_result(msgtuple_success_fail, general.is_in_game_mode())
|
Report.critical_result(msgtuple_success_fail, general.is_in_game_mode())
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def multiplayer_enter_game_mode(msgtuple_success_fail : Tuple[str, str], sv_default_player_spawn_asset : str):
|
||||||
|
# type: (tuple) -> None
|
||||||
|
"""
|
||||||
|
:param msgtuple_success_fail: The tuple with the expected/unexpected messages for entering game mode.
|
||||||
|
:param sv_default_player_spawn_asset: The path to the network player prefab that will be automatically spawned upon entering gamemode. The engine default is "prefabs/player.network.spawnable"
|
||||||
|
|
||||||
|
:return: None
|
||||||
|
"""
|
||||||
|
|
||||||
|
# looks for an expected line in a list of tracers lines
|
||||||
|
# lines: the tracer list of lines to search. options are section_tracer.warnings, section_tracer.errors, section_tracer.asserts, section_tracer.prints
|
||||||
|
# return: true if the line is found, otherwise false
|
||||||
|
def find_expected_line(expected_line, lines):
|
||||||
|
found_lines = [printInfo.message.strip() for printInfo in lines]
|
||||||
|
return expected_line in found_lines
|
||||||
|
|
||||||
|
def wait_for_critical_expected_line(expected_line, lines, time_out):
|
||||||
|
TestHelper.wait_for_condition(lambda : find_expected_line(expected_line, lines), time_out)
|
||||||
|
Report.critical_result(("Found expected line: " + expected_line, "Failed to find expected line: " + expected_line), find_expected_line(expected_line, lines))
|
||||||
|
|
||||||
|
def wait_for_critical_unexpected_line(unexpected_line, lines, time_out):
|
||||||
|
TestHelper.wait_for_condition(lambda : find_expected_line(unexpected_line, lines), time_out)
|
||||||
|
Report.critical_result(("Unexpected line not found: " + unexpected_line, "Unexpected line found: " + unexpected_line), not find_expected_line(unexpected_line, lines))
|
||||||
|
|
||||||
|
|
||||||
|
Report.info("Entering game mode")
|
||||||
|
if sv_default_player_spawn_asset :
|
||||||
|
general.set_cvar("sv_defaultPlayerSpawnAsset", sv_default_player_spawn_asset)
|
||||||
|
|
||||||
|
with Tracer() as section_tracer:
|
||||||
|
# enter game-mode.
|
||||||
|
# game-mode in multiplayer will also launch ServerLauncher.exe and connect to the editor
|
||||||
|
multiplayer.PythonEditorFuncs_enter_game_mode()
|
||||||
|
|
||||||
|
# make sure the server launcher binary exists
|
||||||
|
wait_for_critical_unexpected_line("LaunchEditorServer failed! The ServerLauncher binary is missing!", section_tracer.errors, 0.5)
|
||||||
|
|
||||||
|
# make sure the server launcher is running
|
||||||
|
waiter.wait_for(lambda: process_utils.process_exists("AutomatedTesting.ServerLauncher", ignore_extensions=True), timeout=5.0, exc=AssertionError("AutomatedTesting.ServerLauncher has NOT launched!"), interval=1.0)
|
||||||
|
|
||||||
|
# make sure the editor connects to the editor-server and sends the level data packet
|
||||||
|
wait_for_critical_expected_line("Editor is sending the editor-server the level data packet.", section_tracer.prints, 5.0)
|
||||||
|
|
||||||
|
# make sure the editor finally connects to the editor-server network simulation
|
||||||
|
wait_for_critical_expected_line("Editor-server ready. Editor has successfully connected to the editor-server's network simulation.", section_tracer.prints, 5.0)
|
||||||
|
|
||||||
|
TestHelper.wait_for_condition(lambda : multiplayer.PythonEditorFuncs_is_in_game_mode(), 5.0)
|
||||||
|
Report.critical_result(msgtuple_success_fail, multiplayer.PythonEditorFuncs_is_in_game_mode())
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def exit_game_mode(msgtuple_success_fail : Tuple[str, str]):
|
def exit_game_mode(msgtuple_success_fail : Tuple[str, str]):
|
||||||
# type: (tuple) -> None
|
# type: (tuple) -> None
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
#
|
||||||
|
# Copyright (c) Contributors to the Open 3D Engine Project.
|
||||||
|
# For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||||
|
#
|
||||||
|
#
|
||||||
|
|
||||||
|
if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS)
|
||||||
|
ly_add_pytest(
|
||||||
|
NAME AutomatedTesting::MultiplayerTests_Main
|
||||||
|
TEST_SUITE main
|
||||||
|
TEST_SERIAL
|
||||||
|
PATH ${CMAKE_CURRENT_LIST_DIR}/TestSuite_Main.py
|
||||||
|
RUNTIME_DEPENDENCIES
|
||||||
|
Legacy::Editor
|
||||||
|
AZ::AssetProcessor
|
||||||
|
AutomatedTesting.Assets
|
||||||
|
AutomatedTesting.ServerLauncher
|
||||||
|
COMPONENT
|
||||||
|
Multiplayer
|
||||||
|
)
|
||||||
|
endif()
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
"""
|
||||||
|
Copyright (c) Contributors to the Open 3D Engine Project.
|
||||||
|
For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||||
|
|
||||||
|
SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
# This suite consists of all test cases that are under development and have not been verified yet.
|
||||||
|
# Once they are verified, please move them to TestSuite_Active.py
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/../automatedtesting_shared')
|
||||||
|
|
||||||
|
from base import TestAutomationBase
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("project", ["AutomatedTesting"])
|
||||||
|
@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
|
||||||
|
class TestAutomation(TestAutomationBase):
|
||||||
|
def _run_prefab_test(self, request, workspace, editor, test_module, batch_mode=True, autotest_mode=True):
|
||||||
|
self._run_test(request, workspace, editor, test_module,
|
||||||
|
extra_cmdline_args=["--regset=/Amazon/Preferences/EnablePrefabSystem=true"],
|
||||||
|
batch_mode=batch_mode,
|
||||||
|
autotest_mode=autotest_mode)
|
||||||
|
|
||||||
|
def test_Multiplayer_AutoComponent_NetworkInput(self, request, workspace, editor, launcher_platform):
|
||||||
|
from .tests import Multiplayer_AutoComponent_NetworkInput as test_module
|
||||||
|
self._run_prefab_test(request, workspace, editor, test_module)
|
||||||
|
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
"""
|
||||||
|
Copyright (c) Contributors to the Open 3D Engine Project.
|
||||||
|
For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||||
|
|
||||||
|
SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||||
|
"""
|
||||||
+115
@@ -0,0 +1,115 @@
|
|||||||
|
"""
|
||||||
|
Copyright (c) Contributors to the Open 3D Engine Project.
|
||||||
|
For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||||
|
|
||||||
|
SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
# Test Case Title : Check that network input can be created, received by the authority, and processed
|
||||||
|
|
||||||
|
|
||||||
|
# fmt: off
|
||||||
|
class Tests():
|
||||||
|
enter_game_mode = ("Entered game mode", "Failed to enter game mode")
|
||||||
|
exit_game_mode = ("Exited game mode", "Couldn't exit game mode")
|
||||||
|
find_network_player = ("Found network player", "Couldn't find network player")
|
||||||
|
found_lines = ("Expected log lines were found", "Expected log lines were not found")
|
||||||
|
found_unexpected_lines = ("Unexpected log lines were not found", "Unexpected log lines were found")
|
||||||
|
# fmt: on
|
||||||
|
|
||||||
|
|
||||||
|
def Multiplayer_AutoComponent_NetworkInput():
|
||||||
|
r"""
|
||||||
|
Summary:
|
||||||
|
Runs a test to make sure that network input can be sent from the autonomous player, received by the authority, and processed
|
||||||
|
|
||||||
|
Level Description:
|
||||||
|
- Dynamic
|
||||||
|
1. Although the level is empty, when the server and editor connect the server will spawn and replicate the player network prefab.
|
||||||
|
a. The player network prefab has a NetworkTestPlayerComponent.AutoComponent and a script canvas attached which will listen for the CreateInput and ProcessInput events.
|
||||||
|
Print logs occur upon triggering the CreateInput and ProcessInput events along with their values; we are testing to make sure the expected events are values are recieved.
|
||||||
|
- Static
|
||||||
|
1. This is an empty level. All the logic occurs on the Player.network.spawnable (see the above Dynamic description)
|
||||||
|
|
||||||
|
|
||||||
|
Expected Outcome:
|
||||||
|
We should see editor logs stating that network input has been created and processed.
|
||||||
|
However, if the script receives unexpected values for the Process event we will see print logs for bad data as well.
|
||||||
|
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
import azlmbr.legacy.general as general
|
||||||
|
from editor_python_test_tools.utils import Report
|
||||||
|
from editor_python_test_tools.utils import Tracer
|
||||||
|
|
||||||
|
from editor_python_test_tools.utils import TestHelper as helper
|
||||||
|
from ly_remote_console.remote_console_commands import RemoteConsole as RemoteConsole
|
||||||
|
|
||||||
|
|
||||||
|
def find_expected_line(expected_line):
|
||||||
|
found_lines = [printInfo.message.strip() for printInfo in section_tracer.prints]
|
||||||
|
return expected_line in found_lines
|
||||||
|
|
||||||
|
def find_unexpected_line(expected_line):
|
||||||
|
return not find_expected_line(expected_line)
|
||||||
|
|
||||||
|
unexpected_lines = [
|
||||||
|
'AutoComponent_NetworkInput received bad fwdback!',
|
||||||
|
'AutoComponent_NetworkInput received bad leftright!',
|
||||||
|
|
||||||
|
]
|
||||||
|
expected_lines = [
|
||||||
|
'AutoComponent_NetworkInput ProcessInput called!',
|
||||||
|
'AutoComponent_NetworkInput CreateInput called!',
|
||||||
|
]
|
||||||
|
|
||||||
|
expected_lines_server = [
|
||||||
|
'(Script) - AutoComponent_NetworkInput ProcessInput called!',
|
||||||
|
]
|
||||||
|
|
||||||
|
level_name = "AutoComponent_NetworkInput"
|
||||||
|
player_prefab_name = "Player"
|
||||||
|
player_prefab_path = f"levels/multiplayer/{level_name}/{player_prefab_name}.network.spawnable"
|
||||||
|
|
||||||
|
helper.init_idle()
|
||||||
|
|
||||||
|
|
||||||
|
# 1) Open Level
|
||||||
|
helper.open_level("Multiplayer", level_name)
|
||||||
|
|
||||||
|
with Tracer() as section_tracer:
|
||||||
|
# 2) Enter game mode
|
||||||
|
helper.multiplayer_enter_game_mode(Tests.enter_game_mode, player_prefab_path.lower())
|
||||||
|
|
||||||
|
# 3) Make sure the network player was spawned
|
||||||
|
player_id = general.find_game_entity(player_prefab_name)
|
||||||
|
Report.critical_result(Tests.find_network_player, player_id.IsValid())
|
||||||
|
|
||||||
|
# 4) Check the editor logs for expected and unexpected log output
|
||||||
|
EXPECTEDLINE_WAIT_TIME_SECONDS = 1.0
|
||||||
|
for expected_line in expected_lines :
|
||||||
|
helper.wait_for_condition(lambda: find_expected_line(expected_line), EXPECTEDLINE_WAIT_TIME_SECONDS)
|
||||||
|
Report.result(Tests.found_lines, find_expected_line(expected_line))
|
||||||
|
|
||||||
|
general.idle_wait_frames(1)
|
||||||
|
for unexpected_line in unexpected_lines :
|
||||||
|
Report.result(Tests.found_unexpected_lines, find_unexpected_line(unexpected_line))
|
||||||
|
|
||||||
|
# 5) Check the ServerLauncher logs for expected log output
|
||||||
|
# Since the editor has started a server launcher, the RemoteConsole with the default port=4600 will automatically be able to read the server logs
|
||||||
|
server_console = RemoteConsole()
|
||||||
|
server_console.start()
|
||||||
|
for line in expected_lines_server:
|
||||||
|
assert server_console.expect_log_line(line, EXPECTEDLINE_WAIT_TIME_SECONDS), f"Expected line not found: {line}"
|
||||||
|
server_console.stop()
|
||||||
|
|
||||||
|
|
||||||
|
# Exit game mode
|
||||||
|
helper.exit_game_mode(Tests.exit_game_mode)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
from editor_python_test_tools.utils import Report
|
||||||
|
Report.start_test(Multiplayer_AutoComponent_NetworkInput)
|
||||||
@@ -53,6 +53,27 @@ class EditorSingleTest_WithFileOverrides(EditorSingleTest):
|
|||||||
for f in original_file_list:
|
for f in original_file_list:
|
||||||
fm._restore_file(f, file_list[f])
|
fm._restore_file(f, file_list[f])
|
||||||
|
|
||||||
|
@pytest.mark.xfail(reason="Optimized tests are experimental, we will enable xfail and monitor them temporarily.")
|
||||||
|
@pytest.mark.SUITE_main
|
||||||
|
@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
|
||||||
|
@pytest.mark.parametrize("project", ["AutomatedTesting"])
|
||||||
|
class TestAutomationWithPrefabSystemEnabled(EditorTestSuite):
|
||||||
|
|
||||||
|
global_extra_cmdline_args = ['-BatchMode', '-autotest_mode',
|
||||||
|
'extra_cmdline_args=["--regset=/Amazon/Preferences/EnablePrefabSystem=true"]']
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_number_parallel_editors():
|
||||||
|
return 16
|
||||||
|
|
||||||
|
class C4982801_PhysXColliderShape_CanBeSelected(EditorSharedTest):
|
||||||
|
from .tests.collider import Collider_BoxShapeEditing as test_module
|
||||||
|
|
||||||
|
class C4982800_PhysXColliderShape_CanBeSelected(EditorSharedTest):
|
||||||
|
from .tests.collider import Collider_SphereShapeEditing as test_module
|
||||||
|
|
||||||
|
class C4982802_PhysXColliderShape_CanBeSelected(EditorSharedTest):
|
||||||
|
from .tests.collider import Collider_CapsuleShapeEditing as test_module
|
||||||
|
|
||||||
@pytest.mark.xfail(reason="Optimized tests are experimental, we will enable xfail and monitor them temporarily.")
|
@pytest.mark.xfail(reason="Optimized tests are experimental, we will enable xfail and monitor them temporarily.")
|
||||||
@pytest.mark.SUITE_main
|
@pytest.mark.SUITE_main
|
||||||
@@ -286,15 +307,6 @@ class TestAutomation(EditorTestSuite):
|
|||||||
class C19723164_ShapeCollider_WontCrashEditor(EditorSharedTest):
|
class C19723164_ShapeCollider_WontCrashEditor(EditorSharedTest):
|
||||||
from .tests.shape_collider import ShapeCollider_LargeNumberOfShapeCollidersWontCrashEditor as test_module
|
from .tests.shape_collider import ShapeCollider_LargeNumberOfShapeCollidersWontCrashEditor as test_module
|
||||||
|
|
||||||
class C4982800_PhysXColliderShape_CanBeSelected(EditorSharedTest):
|
|
||||||
from .tests.collider import Collider_SphereShapeEditting as test_module
|
|
||||||
|
|
||||||
class C4982801_PhysXColliderShape_CanBeSelected(EditorSharedTest):
|
|
||||||
from .tests.collider import Collider_BoxShapeEditting as test_module
|
|
||||||
|
|
||||||
class C4982802_PhysXColliderShape_CanBeSelected(EditorSharedTest):
|
|
||||||
from .tests.collider import Collider_CapsuleShapeEditting as test_module
|
|
||||||
|
|
||||||
class C12905528_ForceRegion_WithNonTriggerCollider(EditorSharedTest):
|
class C12905528_ForceRegion_WithNonTriggerCollider(EditorSharedTest):
|
||||||
from .tests.force_region import ForceRegion_WithNonTriggerColliderWarning as test_module
|
from .tests.force_region import ForceRegion_WithNonTriggerColliderWarning as test_module
|
||||||
# Fixme: expected_lines = ["[Warning] (PhysX Force Region) - Please ensure collider component marked as trigger exists in entity"]
|
# Fixme: expected_lines = ["[Warning] (PhysX Force Region) - Please ensure collider component marked as trigger exists in entity"]
|
||||||
|
|||||||
@@ -401,19 +401,22 @@ class TestAutomation(TestAutomationBase):
|
|||||||
self._run_test(request, workspace, editor, test_module)
|
self._run_test(request, workspace, editor, test_module)
|
||||||
|
|
||||||
@revert_physics_config
|
@revert_physics_config
|
||||||
def test_Collider_SphereShapeEditting(self, request, workspace, editor, launcher_platform):
|
def test_Collider_SphereShapeEditing(self, request, workspace, editor, launcher_platform):
|
||||||
from .tests.collider import Collider_SphereShapeEditting as test_module
|
from .tests.collider import Collider_SphereShapeEditing as test_module
|
||||||
self._run_test(request, workspace, editor, test_module)
|
self._run_test(request, workspace, editor, test_module,
|
||||||
|
extra_cmdline_args=["--regset=/Amazon/Preferences/EnablePrefabSystem=true"])
|
||||||
|
|
||||||
@revert_physics_config
|
@revert_physics_config
|
||||||
def test_Collider_BoxShapeEditting(self, request, workspace, editor, launcher_platform):
|
def test_Collider_BoxShapeEditing(self, request, workspace, editor, launcher_platform):
|
||||||
from .tests.collider import Collider_BoxShapeEditting as test_module
|
from .tests.collider import Collider_BoxShapeEditing as test_module
|
||||||
self._run_test(request, workspace, editor, test_module)
|
self._run_test(request, workspace, editor, test_module,
|
||||||
|
extra_cmdline_args=["--regset=/Amazon/Preferences/EnablePrefabSystem=true"])
|
||||||
|
|
||||||
@revert_physics_config
|
@revert_physics_config
|
||||||
def test_Collider_CapsuleShapeEditting(self, request, workspace, editor, launcher_platform):
|
def test_Collider_CapsuleShapeEditing(self, request, workspace, editor, launcher_platform):
|
||||||
from .tests.collider import Collider_CapsuleShapeEditting as test_module
|
from .tests.collider import Collider_CapsuleShapeEditing as test_module
|
||||||
self._run_test(request, workspace, editor, test_module)
|
self._run_test(request, workspace, editor, test_module,
|
||||||
|
extra_cmdline_args=["--regset=/Amazon/Preferences/EnablePrefabSystem=true"])
|
||||||
|
|
||||||
def test_ForceRegion_WithNonTriggerColliderWarning(self, request, workspace, editor, launcher_platform):
|
def test_ForceRegion_WithNonTriggerColliderWarning(self, request, workspace, editor, launcher_platform):
|
||||||
from .tests.force_region import ForceRegion_WithNonTriggerColliderWarning as test_module
|
from .tests.force_region import ForceRegion_WithNonTriggerColliderWarning as test_module
|
||||||
|
|||||||
+3
-3
@@ -19,7 +19,7 @@ class Tests():
|
|||||||
# fmt: on
|
# fmt: on
|
||||||
|
|
||||||
|
|
||||||
def Collider_BoxShapeEditting():
|
def Collider_BoxShapeEditing():
|
||||||
"""
|
"""
|
||||||
Summary:
|
Summary:
|
||||||
Adding PhysX Collider and Shape components to test entity, then attempting to modify the shape's dimensions
|
Adding PhysX Collider and Shape components to test entity, then attempting to modify the shape's dimensions
|
||||||
@@ -73,7 +73,7 @@ def Collider_BoxShapeEditting():
|
|||||||
|
|
||||||
helper.init_idle()
|
helper.init_idle()
|
||||||
# 1) Load the empty level
|
# 1) Load the empty level
|
||||||
helper.open_level("Physics", "Base")
|
helper.open_level("", "Base")
|
||||||
|
|
||||||
# 2) Create the test entity
|
# 2) Create the test entity
|
||||||
test_entity = Entity.create_editor_entity("Test Entity")
|
test_entity = Entity.create_editor_entity("Test Entity")
|
||||||
@@ -102,4 +102,4 @@ def Collider_BoxShapeEditting():
|
|||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
from editor_python_test_tools.utils import Report
|
from editor_python_test_tools.utils import Report
|
||||||
Report.start_test(Collider_BoxShapeEditting)
|
Report.start_test(Collider_BoxShapeEditing)
|
||||||
+3
-3
@@ -19,7 +19,7 @@ class Tests():
|
|||||||
# fmt: on
|
# fmt: on
|
||||||
|
|
||||||
|
|
||||||
def Collider_CapsuleShapeEditting():
|
def Collider_CapsuleShapeEditing():
|
||||||
"""
|
"""
|
||||||
Summary:
|
Summary:
|
||||||
Adding PhysX Collider and Shape components to test entity, then attempting to modify the shape's dimensions
|
Adding PhysX Collider and Shape components to test entity, then attempting to modify the shape's dimensions
|
||||||
@@ -74,7 +74,7 @@ def Collider_CapsuleShapeEditting():
|
|||||||
|
|
||||||
helper.init_idle()
|
helper.init_idle()
|
||||||
# 1) Load the empty level
|
# 1) Load the empty level
|
||||||
helper.open_level("Physics", "Base")
|
helper.open_level("", "Base")
|
||||||
|
|
||||||
# 2) Create the test entity
|
# 2) Create the test entity
|
||||||
test_entity = Entity.create_editor_entity("Test Entity")
|
test_entity = Entity.create_editor_entity("Test Entity")
|
||||||
@@ -102,4 +102,4 @@ def Collider_CapsuleShapeEditting():
|
|||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
from editor_python_test_tools.utils import Report
|
from editor_python_test_tools.utils import Report
|
||||||
Report.start_test(Collider_CapsuleShapeEditting)
|
Report.start_test(Collider_CapsuleShapeEditing)
|
||||||
+3
-3
@@ -19,7 +19,7 @@ class Tests():
|
|||||||
# fmt: on
|
# fmt: on
|
||||||
|
|
||||||
|
|
||||||
def Collider_SphereShapeEditting():
|
def Collider_SphereShapeEditing():
|
||||||
"""
|
"""
|
||||||
Summary:
|
Summary:
|
||||||
Adding PhysX Collider and Shape components to test entity, then attempting to modify the shape's dimensions
|
Adding PhysX Collider and Shape components to test entity, then attempting to modify the shape's dimensions
|
||||||
@@ -57,7 +57,7 @@ def Collider_SphereShapeEditting():
|
|||||||
|
|
||||||
helper.init_idle()
|
helper.init_idle()
|
||||||
# 1) Load the empty level
|
# 1) Load the empty level
|
||||||
helper.open_level("Physics", "Base")
|
helper.open_level("", "Base")
|
||||||
|
|
||||||
# 2) Create the test entity
|
# 2) Create the test entity
|
||||||
test_entity = Entity.create_editor_entity("Test Entity")
|
test_entity = Entity.create_editor_entity("Test Entity")
|
||||||
@@ -90,4 +90,4 @@ def Collider_SphereShapeEditting():
|
|||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
from editor_python_test_tools.utils import Report
|
from editor_python_test_tools.utils import Report
|
||||||
Report.start_test(Collider_SphereShapeEditting)
|
Report.start_test(Collider_SphereShapeEditing)
|
||||||
@@ -55,3 +55,11 @@ class TestAutomation(TestAutomationBase):
|
|||||||
def test_PrefabBasicWorkflow_CreateAndDuplicatePrefab(self, request, workspace, editor, launcher_platform):
|
def test_PrefabBasicWorkflow_CreateAndDuplicatePrefab(self, request, workspace, editor, launcher_platform):
|
||||||
from .tests import PrefabBasicWorkflow_CreateAndDuplicatePrefab as test_module
|
from .tests import PrefabBasicWorkflow_CreateAndDuplicatePrefab as test_module
|
||||||
self._run_prefab_test(request, workspace, editor, test_module)
|
self._run_prefab_test(request, workspace, editor, test_module)
|
||||||
|
|
||||||
|
def test_PrefabComplexWorflow_CreatePrefabOfChildEntity(self, request, workspace, editor, launcher_platform):
|
||||||
|
from .tests import PrefabComplexWorflow_CreatePrefabOfChildEntity as test_module
|
||||||
|
self._run_prefab_test(request, workspace, editor, test_module, autotest_mode=False)
|
||||||
|
|
||||||
|
def test_PrefabComplexWorflow_CreatePrefabInsidePrefab(self, request, workspace, editor, launcher_platform):
|
||||||
|
from .tests import PrefabComplexWorflow_CreatePrefabInsidePrefab as test_module
|
||||||
|
self._run_prefab_test(request, workspace, editor, test_module, autotest_mode=False)
|
||||||
|
|||||||
+57
@@ -0,0 +1,57 @@
|
|||||||
|
"""
|
||||||
|
Copyright (c) Contributors to the Open 3D Engine Project.
|
||||||
|
For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||||
|
|
||||||
|
SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||||
|
"""
|
||||||
|
|
||||||
|
def PrefabComplexWorflow_CreatePrefabInsidePrefab():
|
||||||
|
"""
|
||||||
|
Test description:
|
||||||
|
- Creates an entity with a physx collider
|
||||||
|
- Creates a prefab "Outer_prefab" and an instance based of that entity
|
||||||
|
- Creates a prefab "Inner_prefab" inside "Outer_prefab" based the entity contained inside of it
|
||||||
|
Checks that the entity is correctly handlded by the prefab system checking the name and that it contains the physx collider
|
||||||
|
"""
|
||||||
|
|
||||||
|
from editor_python_test_tools.editor_entity_utils import EditorEntity
|
||||||
|
from editor_python_test_tools.prefab_utils import Prefab
|
||||||
|
|
||||||
|
import PrefabTestUtils as prefab_test_utils
|
||||||
|
|
||||||
|
prefab_test_utils.open_base_tests_level()
|
||||||
|
|
||||||
|
# Creates a new Entity at the root level
|
||||||
|
# Asserts if creation didn't succeed
|
||||||
|
entity = EditorEntity.create_editor_entity_at((100.0, 100.0, 100.0), name = "TestEntity")
|
||||||
|
assert entity.id.IsValid(), "Couldn't create entity"
|
||||||
|
entity.add_component("PhysX Collider")
|
||||||
|
assert entity.has_component("PhysX Collider"), "Attempted to add a PhysX Collider but no physx collider collider was found afterwards"
|
||||||
|
|
||||||
|
# Create a prefab based on that entity
|
||||||
|
outer_prefab, outer_instance = Prefab.create_prefab([entity], "Outer_prefab")
|
||||||
|
# The test should be now inside the outer prefab instance.
|
||||||
|
entity = outer_instance.get_direct_child_entities()[0]
|
||||||
|
# We track if that is the same entity by checking the name and if it still contains the component that we created before
|
||||||
|
assert entity.get_name() == "TestEntity", f"Entity name inside outer_prefab doesn't match the original name, original:'TestEntity' current:'{entity.get_name()}'"
|
||||||
|
assert entity.has_component("PhysX Collider"), "Entity name inside outer_prefab doesn't have the collider component it should"
|
||||||
|
|
||||||
|
# Now, create another prefab, based on the entity that is inside outer_prefab
|
||||||
|
inner_prefab, inner_instance = Prefab.create_prefab([entity], "Inner_prefab")
|
||||||
|
# The test entity should now be inside the inner prefab instance
|
||||||
|
entity = inner_instance.get_direct_child_entities()[0]
|
||||||
|
# We track if that is the same entity by checking the name and if it still contains the component that we created before
|
||||||
|
assert entity.get_name() == "TestEntity", f"Entity name inside inner_prefab doesn't match the original name, original:'TestEntity' current:'{entity.get_name()}'"
|
||||||
|
assert entity.has_component("PhysX Collider"), "Entity name inside inner_prefab doesn't have the collider component it should"
|
||||||
|
|
||||||
|
# Verify hierarchy of entities:
|
||||||
|
# Outer_prefab
|
||||||
|
# |- Inner_prefab
|
||||||
|
# | |- TestEntity
|
||||||
|
assert entity.get_parent_id() == inner_instance.container_entity.id
|
||||||
|
assert inner_instance.container_entity.get_parent_id() == outer_instance.container_entity.id
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
from editor_python_test_tools.utils import Report
|
||||||
|
Report.start_test(PrefabComplexWorflow_CreatePrefabInsidePrefab)
|
||||||
+52
@@ -0,0 +1,52 @@
|
|||||||
|
"""
|
||||||
|
Copyright (c) Contributors to the Open 3D Engine Project.
|
||||||
|
For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||||
|
|
||||||
|
SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||||
|
"""
|
||||||
|
|
||||||
|
def PrefabComplexWorflow_CreatePrefabOfChildEntity():
|
||||||
|
"""
|
||||||
|
Test description:
|
||||||
|
- Creates two entities, parent and child. Child entity has Parent entity as its parent.
|
||||||
|
- Creates a prefab of the child entity.
|
||||||
|
Test is successful if the new instanced prefab of the child has the parent entity id
|
||||||
|
"""
|
||||||
|
|
||||||
|
CAR_PREFAB_FILE_NAME = 'car_prefab'
|
||||||
|
|
||||||
|
from editor_python_test_tools.editor_entity_utils import EditorEntity
|
||||||
|
from editor_python_test_tools.prefab_utils import Prefab
|
||||||
|
|
||||||
|
import PrefabTestUtils as prefab_test_utils
|
||||||
|
|
||||||
|
prefab_test_utils.open_base_tests_level()
|
||||||
|
|
||||||
|
# Creates a new Entity at the root level
|
||||||
|
# Asserts if creation didn't succeed
|
||||||
|
parent_entity = EditorEntity.create_editor_entity_at((100.0, 100.0, 100.0))
|
||||||
|
assert parent_entity.id.IsValid(), "Couldn't create parent entity"
|
||||||
|
|
||||||
|
child_entity = EditorEntity.create_editor_entity(parent_id=parent_entity.id)
|
||||||
|
assert child_entity.id.IsValid(), "Couldn't create child entity"
|
||||||
|
assert child_entity.get_world_translation().IsClose(parent_entity.get_world_translation()), f"Child entity position{child_entity.get_world_translation().ToString()}" \
|
||||||
|
f" is not located at the same position as the parent{parent_entity.get_world_translation().ToString()}"
|
||||||
|
|
||||||
|
# Asserts if prefab creation doesn't succeed
|
||||||
|
child_prefab, child_instance = Prefab.create_prefab([child_entity], CAR_PREFAB_FILE_NAME)
|
||||||
|
child_entity_on_child_instance = child_instance.get_direct_child_entities()[0]
|
||||||
|
assert child_instance.container_entity.get_parent_id().IsValid(), "Newly instanced entity has no parent"
|
||||||
|
assert child_instance.container_entity.get_parent_id() == parent_entity.id, "Newly instanced entity parent does not match the expected parent"
|
||||||
|
assert child_instance.container_entity.get_world_translation().IsClose(parent_entity.get_world_translation()), "Newly instanced entity position is not located at the same position as the parent"
|
||||||
|
# Move the parent position, it should update the child position
|
||||||
|
parent_entity.set_world_translation((200.0, 200.0, 200.0))
|
||||||
|
child_instance_translation = child_instance.container_entity.get_world_translation()
|
||||||
|
assert child_instance_translation.IsClose(azlmbr.math.Vector3(200.0, 200.0, 200.0)), f"Instance position position{child_instance_translation.ToString()} didn't get updated" \
|
||||||
|
f" to the same position as the parent{parent_entity.get_world_translation().ToString()}"
|
||||||
|
child_translation = child_entity_on_child_instance.get_world_translation()
|
||||||
|
assert child_translation.IsClose(azlmbr.math.Vector3(200.0, 200.0, 200.0)), f"Entity position{child_translation.ToString()} of the instance didn't get updated" \
|
||||||
|
f" to the same position as the parent{parent_entity.get_world_translation().ToString()}"
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
from editor_python_test_tools.utils import Report
|
||||||
|
Report.start_test(PrefabComplexWorflow_CreatePrefabOfChildEntity)
|
||||||
@@ -23,7 +23,7 @@ def create_jobs(request):
|
|||||||
jobDescriptorList = []
|
jobDescriptorList = []
|
||||||
for platformInfo in request.enabledPlatforms:
|
for platformInfo in request.enabledPlatforms:
|
||||||
jobDesc = azlmbr.asset.builder.JobDescriptor()
|
jobDesc = azlmbr.asset.builder.JobDescriptor()
|
||||||
jobDesc.jobKey = jobKeyName
|
jobDesc.jobKey = f'{jobKeyName}-{platformInfo.identifier}'
|
||||||
jobDesc.set_platform_identifier(platformInfo.identifier)
|
jobDesc.set_platform_identifier(platformInfo.identifier)
|
||||||
jobDescriptorList.append(jobDesc)
|
jobDescriptorList.append(jobDesc)
|
||||||
|
|
||||||
@@ -38,7 +38,7 @@ def on_create_jobs(args):
|
|||||||
return create_jobs(request)
|
return create_jobs(request)
|
||||||
except:
|
except:
|
||||||
log_exception_traceback()
|
log_exception_traceback()
|
||||||
# returing back a default CreateJobsResponse() records an asset error
|
# returning back a default CreateJobsResponse() records an asset error
|
||||||
return azlmbr.asset.builder.CreateJobsResponse()
|
return azlmbr.asset.builder.CreateJobsResponse()
|
||||||
|
|
||||||
def process_file(request):
|
def process_file(request):
|
||||||
@@ -58,6 +58,7 @@ def process_file(request):
|
|||||||
fileOutput = open(tempFilename, "w")
|
fileOutput = open(tempFilename, "w")
|
||||||
fileOutput.write('{}')
|
fileOutput.write('{}')
|
||||||
fileOutput.close()
|
fileOutput.close()
|
||||||
|
print(f'Wrote mock asset file: {tempFilename}')
|
||||||
|
|
||||||
# generate a product asset file entry
|
# generate a product asset file entry
|
||||||
subId = binascii.crc32(mockFilename.encode())
|
subId = binascii.crc32(mockFilename.encode())
|
||||||
|
|||||||
@@ -6,7 +6,11 @@
|
|||||||
#
|
#
|
||||||
#
|
#
|
||||||
|
|
||||||
if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS)
|
ly_get_list_relative_pal_filename(pal_dir ${CMAKE_CURRENT_LIST_DIR}/Platform/${PAL_PLATFORM_NAME})
|
||||||
|
|
||||||
|
include(${pal_dir}/PAL_${PAL_PLATFORM_NAME_LOWERCASE}.cmake) # for PAL_TRAIT_WHITEBOX Traits
|
||||||
|
|
||||||
|
if(PAL_TRAIT_WHITEBOX_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS)
|
||||||
ly_add_pytest(
|
ly_add_pytest(
|
||||||
NAME AutomatedTesting::WhiteBoxTests
|
NAME AutomatedTesting::WhiteBoxTests
|
||||||
TEST_SUITE main
|
TEST_SUITE main
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
#
|
||||||
|
# Copyright (c) Contributors to the Open 3D Engine Project.
|
||||||
|
# For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||||
|
#
|
||||||
|
#
|
||||||
|
|
||||||
|
set(PAL_TRAIT_WHITEBOX_TESTS_SUPPORTED FALSE)
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
#
|
||||||
|
# Copyright (c) Contributors to the Open 3D Engine Project.
|
||||||
|
# For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||||
|
#
|
||||||
|
#
|
||||||
|
|
||||||
|
set(PAL_TRAIT_WHITEBOX_TESTS_SUPPORTED FALSE)
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
#
|
||||||
|
# Copyright (c) Contributors to the Open 3D Engine Project.
|
||||||
|
# For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||||
|
#
|
||||||
|
#
|
||||||
|
|
||||||
|
set(PAL_TRAIT_WHITEBOX_TESTS_SUPPORTED FALSE)
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
#
|
||||||
|
# Copyright (c) Contributors to the Open 3D Engine Project.
|
||||||
|
# For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||||
|
#
|
||||||
|
#
|
||||||
|
|
||||||
|
set(PAL_TRAIT_WHITEBOX_TESTS_SUPPORTED TRUE)
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
#
|
||||||
|
# Copyright (c) Contributors to the Open 3D Engine Project.
|
||||||
|
# For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||||
|
#
|
||||||
|
#
|
||||||
|
|
||||||
|
set(PAL_TRAIT_WHITEBOX_TESTS_SUPPORTED FALSE)
|
||||||
-76
@@ -47,82 +47,6 @@ class TestsAssetProcessorBatch_DependenycyTests(object):
|
|||||||
"""
|
"""
|
||||||
AssetProcessorBatch Dependency tests
|
AssetProcessorBatch Dependency tests
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@pytest.mark.test_case_id("C16877166")
|
|
||||||
@pytest.mark.BAT
|
|
||||||
@pytest.mark.assetpipeline
|
|
||||||
# fmt:off
|
|
||||||
def test_WindowsMacPlatforms_RunAPBatch_NotMissingDependency(self, ap_setup_fixture, asset_processor,
|
|
||||||
workspace):
|
|
||||||
# fmt:on
|
|
||||||
"""
|
|
||||||
Engine Schema
|
|
||||||
This test case has a conditional scenario depending on the existence of surfacetypes.xml in a project.
|
|
||||||
Some projects have this file and others do not. Run the conditional scenario depending on the existence
|
|
||||||
of the file in the project
|
|
||||||
libs/materialeffects/surfacetypes.xml is listed as an entry engine_dependencies.xml
|
|
||||||
libs/materialeffects/surfacetypes.xml is not listed as a missing dependency
|
|
||||||
in the 'assetprocessorbatch' console output
|
|
||||||
|
|
||||||
Test Steps:
|
|
||||||
1. Assets are pre-processed
|
|
||||||
2. Verify that engine_dependencies.xml exists
|
|
||||||
3. Verify engine_dependencies.xml has surfacetypes.xml present
|
|
||||||
4. Run Missing Dependency scanner against the engine_dependenciese.xml
|
|
||||||
5. Verify that Surfacetypes.xml is NOT in the missing depdencies output
|
|
||||||
6. Add the schema file which allows our xml parser to understand dependencies for our engine_dependencies file
|
|
||||||
7. Process assets
|
|
||||||
8. Run Missing Dependency scanner against the engine_dependenciese.xml
|
|
||||||
9. Verify that surfacetypes.xml is in the missing dependencies out
|
|
||||||
"""
|
|
||||||
|
|
||||||
env = ap_setup_fixture
|
|
||||||
BATCH_LOG_PATH = env["ap_batch_log_file"]
|
|
||||||
asset_processor.create_temp_asset_root()
|
|
||||||
asset_processor.add_relative_source_asset(os.path.join("Assets", "Engine", "Engine_Dependencies.xml"))
|
|
||||||
asset_processor.add_scan_folder(os.path.join("Assets", "Engine"))
|
|
||||||
asset_processor.add_relative_source_asset(os.path.join("Assets", "Engine", "Libs", "MaterialEffects", "surfacetypes.xml"))
|
|
||||||
|
|
||||||
# Precondition: Assets are all processed
|
|
||||||
asset_processor.batch_process()
|
|
||||||
|
|
||||||
DEPENDENCIES_PATH = os.path.join(asset_processor.temp_project_cache(), "engine_dependencies.xml")
|
|
||||||
assert os.path.exists(DEPENDENCIES_PATH), "The engine_dependencies.xml does not exist."
|
|
||||||
surfacetypes_in_dependencies = False
|
|
||||||
surfacetypes_missing_logline = False
|
|
||||||
|
|
||||||
# Read engine_dependencies.xml to see if surfacetypes.xml is present
|
|
||||||
with open(DEPENDENCIES_PATH, "r") as dependencies_file:
|
|
||||||
for line in dependencies_file.readlines():
|
|
||||||
if "surfacetypes.xml" in line:
|
|
||||||
surfacetypes_in_dependencies = True
|
|
||||||
logger.info("Surfacetypes.xml was listed in the engine_dependencies.xml file.")
|
|
||||||
break
|
|
||||||
|
|
||||||
if not surfacetypes_in_dependencies:
|
|
||||||
logger.info("Surfacetypes.xml was not listed in the engine_dependencies.xml file.")
|
|
||||||
|
|
||||||
_, output = asset_processor.batch_process(capture_output=True,
|
|
||||||
extra_params="--dsp=%engine_dependencies.xml")
|
|
||||||
log = APOutputParser(output)
|
|
||||||
for _ in log.get_lines(run=-1, contains=["surfacetypes.xml", "Missing"]):
|
|
||||||
surfacetypes_missing_logline = True
|
|
||||||
|
|
||||||
assert surfacetypes_missing_logline, "Surfacetypes.xml not seen in the batch log as missing."
|
|
||||||
|
|
||||||
# Add the schema file which allows our xml parser to understand dependencies for our engine_dependencies file
|
|
||||||
asset_processor.add_relative_source_asset(os.path.join("Assets", "Engine", "Schema", "enginedependency.xmlschema"))
|
|
||||||
asset_processor.batch_process()
|
|
||||||
|
|
||||||
_, output = asset_processor.batch_process(capture_output=True,
|
|
||||||
extra_params="--dsp=%engine_dependencies.xml")
|
|
||||||
log = APOutputParser(output)
|
|
||||||
surfacetypes_missing_logline = False
|
|
||||||
for _ in log.get_lines(run=-1, contains=["surfacetypes.xml", "Missing"]):
|
|
||||||
surfacetypes_missing_logline = True
|
|
||||||
|
|
||||||
assert not surfacetypes_missing_logline, "Surfacetypes.xml not seen in the batch log as missing."
|
|
||||||
|
|
||||||
schemas = [
|
schemas = [
|
||||||
("C16877167", ".ent"),
|
("C16877167", ".ent"),
|
||||||
("C16877168", "Environment.xml"),
|
("C16877168", "Environment.xml"),
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import sys
|
|||||||
import importlib
|
import importlib
|
||||||
import re
|
import re
|
||||||
|
|
||||||
|
import ly_test_tools
|
||||||
from ly_test_tools import LAUNCHERS
|
from ly_test_tools import LAUNCHERS
|
||||||
|
|
||||||
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
|
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
|
||||||
@@ -25,8 +26,15 @@ import ly_test_tools.environment.process_utils as process_utils
|
|||||||
|
|
||||||
import argparse, sys
|
import argparse, sys
|
||||||
|
|
||||||
@pytest.mark.SUITE_main
|
def get_editor_launcher_platform():
|
||||||
@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
|
if ly_test_tools.WINDOWS:
|
||||||
|
return "windows_editor"
|
||||||
|
elif ly_test_tools.LINUX:
|
||||||
|
return "linux_editor"
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("launcher_platform", [get_editor_launcher_platform()])
|
||||||
@pytest.mark.parametrize("project", ["AutomatedTesting"])
|
@pytest.mark.parametrize("project", ["AutomatedTesting"])
|
||||||
class TestEditorTest:
|
class TestEditorTest:
|
||||||
|
|
||||||
@@ -69,7 +77,7 @@ class TestEditorTest:
|
|||||||
from ly_test_tools.o3de.editor_test import EditorSingleTest, EditorSharedTest, EditorTestSuite
|
from ly_test_tools.o3de.editor_test import EditorSingleTest, EditorSharedTest, EditorTestSuite
|
||||||
|
|
||||||
@pytest.mark.SUITE_main
|
@pytest.mark.SUITE_main
|
||||||
@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
|
@pytest.mark.parametrize("launcher_platform", [{get_editor_launcher_platform()}])
|
||||||
@pytest.mark.parametrize("project", ["AutomatedTesting"])
|
@pytest.mark.parametrize("project", ["AutomatedTesting"])
|
||||||
class TestAutomation(EditorTestSuite):
|
class TestAutomation(EditorTestSuite):
|
||||||
class test_single(EditorSingleTest):
|
class test_single(EditorSingleTest):
|
||||||
@@ -123,7 +131,7 @@ class TestEditorTest:
|
|||||||
from ly_test_tools.o3de.editor_test import EditorSingleTest, EditorSharedTest, EditorTestSuite
|
from ly_test_tools.o3de.editor_test import EditorSingleTest, EditorSharedTest, EditorTestSuite
|
||||||
|
|
||||||
@pytest.mark.SUITE_main
|
@pytest.mark.SUITE_main
|
||||||
@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
|
@pytest.mark.parametrize("launcher_platform", [{get_editor_launcher_platform()}])
|
||||||
@pytest.mark.parametrize("project", ["AutomatedTesting"])
|
@pytest.mark.parametrize("project", ["AutomatedTesting"])
|
||||||
class TestAutomation(EditorTestSuite):
|
class TestAutomation(EditorTestSuite):
|
||||||
{module_class_code}
|
{module_class_code}
|
||||||
|
|||||||
@@ -0,0 +1,53 @@
|
|||||||
|
{
|
||||||
|
"ContainerEntity": {
|
||||||
|
"Id": "ContainerEntity",
|
||||||
|
"Name": "Base",
|
||||||
|
"Components": {
|
||||||
|
"Component_[10182366347512475253]": {
|
||||||
|
"$type": "EditorPrefabComponent",
|
||||||
|
"Id": 10182366347512475253
|
||||||
|
},
|
||||||
|
"Component_[12917798267488243668]": {
|
||||||
|
"$type": "EditorPendingCompositionComponent",
|
||||||
|
"Id": 12917798267488243668
|
||||||
|
},
|
||||||
|
"Component_[3261249813163778338]": {
|
||||||
|
"$type": "EditorOnlyEntityComponent",
|
||||||
|
"Id": 3261249813163778338
|
||||||
|
},
|
||||||
|
"Component_[3837204912784440039]": {
|
||||||
|
"$type": "EditorDisabledCompositionComponent",
|
||||||
|
"Id": 3837204912784440039
|
||||||
|
},
|
||||||
|
"Component_[4272963378099646759]": {
|
||||||
|
"$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
|
||||||
|
"Id": 4272963378099646759,
|
||||||
|
"Parent Entity": ""
|
||||||
|
},
|
||||||
|
"Component_[4848458548047175816]": {
|
||||||
|
"$type": "EditorVisibilityComponent",
|
||||||
|
"Id": 4848458548047175816
|
||||||
|
},
|
||||||
|
"Component_[5787060997243919943]": {
|
||||||
|
"$type": "EditorInspectorComponent",
|
||||||
|
"Id": 5787060997243919943
|
||||||
|
},
|
||||||
|
"Component_[7804170251266531779]": {
|
||||||
|
"$type": "EditorLockComponent",
|
||||||
|
"Id": 7804170251266531779
|
||||||
|
},
|
||||||
|
"Component_[7874177159288365422]": {
|
||||||
|
"$type": "EditorEntitySortComponent",
|
||||||
|
"Id": 7874177159288365422
|
||||||
|
},
|
||||||
|
"Component_[8018146290632383969]": {
|
||||||
|
"$type": "EditorEntityIconComponent",
|
||||||
|
"Id": 8018146290632383969
|
||||||
|
},
|
||||||
|
"Component_[8452360690590857075]": {
|
||||||
|
"$type": "SelectionComponent",
|
||||||
|
"Id": 8452360690590857075
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+525
@@ -0,0 +1,525 @@
|
|||||||
|
{
|
||||||
|
"ContainerEntity": {
|
||||||
|
"Id": "Entity_[1146574390643]",
|
||||||
|
"Name": "Level",
|
||||||
|
"Components": {
|
||||||
|
"Component_[10641544592923449938]": {
|
||||||
|
"$type": "EditorInspectorComponent",
|
||||||
|
"Id": 10641544592923449938
|
||||||
|
},
|
||||||
|
"Component_[12039882709170782873]": {
|
||||||
|
"$type": "EditorOnlyEntityComponent",
|
||||||
|
"Id": 12039882709170782873
|
||||||
|
},
|
||||||
|
"Component_[12265484671603697631]": {
|
||||||
|
"$type": "EditorPendingCompositionComponent",
|
||||||
|
"Id": 12265484671603697631
|
||||||
|
},
|
||||||
|
"Component_[14126657869720434043]": {
|
||||||
|
"$type": "EditorEntitySortComponent",
|
||||||
|
"Id": 14126657869720434043
|
||||||
|
},
|
||||||
|
"Component_[15230859088967841193]": {
|
||||||
|
"$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
|
||||||
|
"Id": 15230859088967841193,
|
||||||
|
"Parent Entity": ""
|
||||||
|
},
|
||||||
|
"Component_[16239496886950819870]": {
|
||||||
|
"$type": "EditorDisabledCompositionComponent",
|
||||||
|
"Id": 16239496886950819870
|
||||||
|
},
|
||||||
|
"Component_[5688118765544765547]": {
|
||||||
|
"$type": "EditorEntityIconComponent",
|
||||||
|
"Id": 5688118765544765547
|
||||||
|
},
|
||||||
|
"Component_[6545738857812235305]": {
|
||||||
|
"$type": "SelectionComponent",
|
||||||
|
"Id": 6545738857812235305
|
||||||
|
},
|
||||||
|
"Component_[7247035804068349658]": {
|
||||||
|
"$type": "EditorPrefabComponent",
|
||||||
|
"Id": 7247035804068349658
|
||||||
|
},
|
||||||
|
"Component_[9307224322037797205]": {
|
||||||
|
"$type": "EditorLockComponent",
|
||||||
|
"Id": 9307224322037797205
|
||||||
|
},
|
||||||
|
"Component_[9562516168917670048]": {
|
||||||
|
"$type": "EditorVisibilityComponent",
|
||||||
|
"Id": 9562516168917670048
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Entities": {
|
||||||
|
"Entity_[1155164325235]": {
|
||||||
|
"Id": "Entity_[1155164325235]",
|
||||||
|
"Name": "Sun",
|
||||||
|
"Components": {
|
||||||
|
"Component_[10440557478882592717]": {
|
||||||
|
"$type": "SelectionComponent",
|
||||||
|
"Id": 10440557478882592717
|
||||||
|
},
|
||||||
|
"Component_[13620450453324765907]": {
|
||||||
|
"$type": "EditorLockComponent",
|
||||||
|
"Id": 13620450453324765907
|
||||||
|
},
|
||||||
|
"Component_[2134313378593666258]": {
|
||||||
|
"$type": "EditorInspectorComponent",
|
||||||
|
"Id": 2134313378593666258
|
||||||
|
},
|
||||||
|
"Component_[234010807770404186]": {
|
||||||
|
"$type": "EditorVisibilityComponent",
|
||||||
|
"Id": 234010807770404186
|
||||||
|
},
|
||||||
|
"Component_[2970359110423865725]": {
|
||||||
|
"$type": "EditorEntityIconComponent",
|
||||||
|
"Id": 2970359110423865725
|
||||||
|
},
|
||||||
|
"Component_[3722854130373041803]": {
|
||||||
|
"$type": "EditorOnlyEntityComponent",
|
||||||
|
"Id": 3722854130373041803
|
||||||
|
},
|
||||||
|
"Component_[5992533738676323195]": {
|
||||||
|
"$type": "EditorDisabledCompositionComponent",
|
||||||
|
"Id": 5992533738676323195
|
||||||
|
},
|
||||||
|
"Component_[7378860763541895402]": {
|
||||||
|
"$type": "AZ::Render::EditorDirectionalLightComponent",
|
||||||
|
"Id": 7378860763541895402,
|
||||||
|
"Controller": {
|
||||||
|
"Configuration": {
|
||||||
|
"Intensity": 1.0,
|
||||||
|
"CameraEntityId": "",
|
||||||
|
"ShadowFilterMethod": 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Component_[7892834440890947578]": {
|
||||||
|
"$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
|
||||||
|
"Id": 7892834440890947578,
|
||||||
|
"Parent Entity": "Entity_[1176639161715]",
|
||||||
|
"Transform Data": {
|
||||||
|
"Translate": [
|
||||||
|
0.0,
|
||||||
|
0.0,
|
||||||
|
13.487043380737305
|
||||||
|
],
|
||||||
|
"Rotate": [
|
||||||
|
-76.13099670410156,
|
||||||
|
-0.847000002861023,
|
||||||
|
-15.8100004196167
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Component_[8599729549570828259]": {
|
||||||
|
"$type": "EditorEntitySortComponent",
|
||||||
|
"Id": 8599729549570828259
|
||||||
|
},
|
||||||
|
"Component_[952797371922080273]": {
|
||||||
|
"$type": "EditorPendingCompositionComponent",
|
||||||
|
"Id": 952797371922080273
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Entity_[1159459292531]": {
|
||||||
|
"Id": "Entity_[1159459292531]",
|
||||||
|
"Name": "Ground",
|
||||||
|
"Components": {
|
||||||
|
"Component_[11701138785793981042]": {
|
||||||
|
"$type": "SelectionComponent",
|
||||||
|
"Id": 11701138785793981042
|
||||||
|
},
|
||||||
|
"Component_[12260880513256986252]": {
|
||||||
|
"$type": "EditorEntityIconComponent",
|
||||||
|
"Id": 12260880513256986252
|
||||||
|
},
|
||||||
|
"Component_[13711420870643673468]": {
|
||||||
|
"$type": "EditorDisabledCompositionComponent",
|
||||||
|
"Id": 13711420870643673468
|
||||||
|
},
|
||||||
|
"Component_[138002849734991713]": {
|
||||||
|
"$type": "EditorOnlyEntityComponent",
|
||||||
|
"Id": 138002849734991713
|
||||||
|
},
|
||||||
|
"Component_[16578565737331764849]": {
|
||||||
|
"$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
|
||||||
|
"Id": 16578565737331764849,
|
||||||
|
"Parent Entity": "Entity_[1176639161715]"
|
||||||
|
},
|
||||||
|
"Component_[16919232076966545697]": {
|
||||||
|
"$type": "EditorInspectorComponent",
|
||||||
|
"Id": 16919232076966545697
|
||||||
|
},
|
||||||
|
"Component_[5182430712893438093]": {
|
||||||
|
"$type": "EditorMaterialComponent",
|
||||||
|
"Id": 5182430712893438093,
|
||||||
|
"materialSlots": [
|
||||||
|
{
|
||||||
|
"id": {
|
||||||
|
"materialSlotStableId": 803645540
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": {
|
||||||
|
"materialSlotStableId": 803645540
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"materialSlotsByLod": [
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"id": {
|
||||||
|
"lodIndex": 0,
|
||||||
|
"materialSlotStableId": 803645540
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"id": {
|
||||||
|
"lodIndex": 0,
|
||||||
|
"materialSlotStableId": 803645540
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"Component_[5675108321710651991]": {
|
||||||
|
"$type": "AZ::Render::EditorMeshComponent",
|
||||||
|
"Id": 5675108321710651991,
|
||||||
|
"Controller": {
|
||||||
|
"Configuration": {
|
||||||
|
"ModelAsset": {
|
||||||
|
"assetId": {
|
||||||
|
"guid": "{0CD745C0-6AA8-569A-A68A-73A3270986C4}",
|
||||||
|
"subId": 277889906
|
||||||
|
},
|
||||||
|
"assetHint": "objects/groudplane/groundplane_512x512m.azmodel"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Component_[5681893399601237518]": {
|
||||||
|
"$type": "EditorEntitySortComponent",
|
||||||
|
"Id": 5681893399601237518
|
||||||
|
},
|
||||||
|
"Component_[592692962543397545]": {
|
||||||
|
"$type": "EditorPendingCompositionComponent",
|
||||||
|
"Id": 592692962543397545
|
||||||
|
},
|
||||||
|
"Component_[7090012899106946164]": {
|
||||||
|
"$type": "EditorLockComponent",
|
||||||
|
"Id": 7090012899106946164
|
||||||
|
},
|
||||||
|
"Component_[9410832619875640998]": {
|
||||||
|
"$type": "EditorVisibilityComponent",
|
||||||
|
"Id": 9410832619875640998
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Entity_[1163754259827]": {
|
||||||
|
"Id": "Entity_[1163754259827]",
|
||||||
|
"Name": "Camera",
|
||||||
|
"Components": {
|
||||||
|
"Component_[11895140916889160460]": {
|
||||||
|
"$type": "EditorEntityIconComponent",
|
||||||
|
"Id": 11895140916889160460
|
||||||
|
},
|
||||||
|
"Component_[16880285896855930892]": {
|
||||||
|
"$type": "{CA11DA46-29FF-4083-B5F6-E02C3A8C3A3D} EditorCameraComponent",
|
||||||
|
"Id": 16880285896855930892,
|
||||||
|
"Controller": {
|
||||||
|
"Configuration": {
|
||||||
|
"Field of View": 55.0,
|
||||||
|
"EditorEntityId": 12554887233631987164
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Component_[17187464423780271193]": {
|
||||||
|
"$type": "EditorLockComponent",
|
||||||
|
"Id": 17187464423780271193
|
||||||
|
},
|
||||||
|
"Component_[17495696818315413311]": {
|
||||||
|
"$type": "EditorEntitySortComponent",
|
||||||
|
"Id": 17495696818315413311
|
||||||
|
},
|
||||||
|
"Component_[18086214374043522055]": {
|
||||||
|
"$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
|
||||||
|
"Id": 18086214374043522055,
|
||||||
|
"Parent Entity": "Entity_[1176639161715]",
|
||||||
|
"Transform Data": {
|
||||||
|
"Translate": [
|
||||||
|
-2.3000001907348633,
|
||||||
|
-3.9368600845336914,
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
"Rotate": [
|
||||||
|
-2.050307512283325,
|
||||||
|
1.9552897214889526,
|
||||||
|
-43.623355865478516
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Component_[18387556550380114975]": {
|
||||||
|
"$type": "SelectionComponent",
|
||||||
|
"Id": 18387556550380114975
|
||||||
|
},
|
||||||
|
"Component_[2654521436129313160]": {
|
||||||
|
"$type": "EditorVisibilityComponent",
|
||||||
|
"Id": 2654521436129313160
|
||||||
|
},
|
||||||
|
"Component_[5265045084611556958]": {
|
||||||
|
"$type": "EditorDisabledCompositionComponent",
|
||||||
|
"Id": 5265045084611556958
|
||||||
|
},
|
||||||
|
"Component_[7169798125182238623]": {
|
||||||
|
"$type": "EditorPendingCompositionComponent",
|
||||||
|
"Id": 7169798125182238623
|
||||||
|
},
|
||||||
|
"Component_[7255796294953281766]": {
|
||||||
|
"$type": "GenericComponentWrapper",
|
||||||
|
"Id": 7255796294953281766,
|
||||||
|
"m_template": {
|
||||||
|
"$type": "FlyCameraInputComponent"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Component_[8866210352157164042]": {
|
||||||
|
"$type": "EditorInspectorComponent",
|
||||||
|
"Id": 8866210352157164042
|
||||||
|
},
|
||||||
|
"Component_[9129253381063760879]": {
|
||||||
|
"$type": "EditorOnlyEntityComponent",
|
||||||
|
"Id": 9129253381063760879
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Entity_[1168049227123]": {
|
||||||
|
"Id": "Entity_[1168049227123]",
|
||||||
|
"Name": "Grid",
|
||||||
|
"Components": {
|
||||||
|
"Component_[11443347433215807130]": {
|
||||||
|
"$type": "EditorEntityIconComponent",
|
||||||
|
"Id": 11443347433215807130
|
||||||
|
},
|
||||||
|
"Component_[11779275529534764488]": {
|
||||||
|
"$type": "SelectionComponent",
|
||||||
|
"Id": 11779275529534764488
|
||||||
|
},
|
||||||
|
"Component_[14249419413039427459]": {
|
||||||
|
"$type": "EditorInspectorComponent",
|
||||||
|
"Id": 14249419413039427459
|
||||||
|
},
|
||||||
|
"Component_[15448581635946161318]": {
|
||||||
|
"$type": "AZ::Render::EditorGridComponent",
|
||||||
|
"Id": 15448581635946161318,
|
||||||
|
"Controller": {
|
||||||
|
"Configuration": {
|
||||||
|
"primarySpacing": 4.0,
|
||||||
|
"primaryColor": [
|
||||||
|
0.501960813999176,
|
||||||
|
0.501960813999176,
|
||||||
|
0.501960813999176
|
||||||
|
],
|
||||||
|
"secondarySpacing": 0.5,
|
||||||
|
"secondaryColor": [
|
||||||
|
0.250980406999588,
|
||||||
|
0.250980406999588,
|
||||||
|
0.250980406999588
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Component_[1843303322527297409]": {
|
||||||
|
"$type": "EditorDisabledCompositionComponent",
|
||||||
|
"Id": 1843303322527297409
|
||||||
|
},
|
||||||
|
"Component_[380249072065273654]": {
|
||||||
|
"$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
|
||||||
|
"Id": 380249072065273654,
|
||||||
|
"Parent Entity": "Entity_[1176639161715]"
|
||||||
|
},
|
||||||
|
"Component_[7476660583684339787]": {
|
||||||
|
"$type": "EditorPendingCompositionComponent",
|
||||||
|
"Id": 7476660583684339787
|
||||||
|
},
|
||||||
|
"Component_[7557626501215118375]": {
|
||||||
|
"$type": "EditorEntitySortComponent",
|
||||||
|
"Id": 7557626501215118375
|
||||||
|
},
|
||||||
|
"Component_[7984048488947365511]": {
|
||||||
|
"$type": "EditorVisibilityComponent",
|
||||||
|
"Id": 7984048488947365511
|
||||||
|
},
|
||||||
|
"Component_[8118181039276487398]": {
|
||||||
|
"$type": "EditorOnlyEntityComponent",
|
||||||
|
"Id": 8118181039276487398
|
||||||
|
},
|
||||||
|
"Component_[9189909764215270515]": {
|
||||||
|
"$type": "EditorLockComponent",
|
||||||
|
"Id": 9189909764215270515
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Entity_[1176639161715]": {
|
||||||
|
"Id": "Entity_[1176639161715]",
|
||||||
|
"Name": "Atom Default Environment",
|
||||||
|
"Components": {
|
||||||
|
"Component_[10757302973393310045]": {
|
||||||
|
"$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
|
||||||
|
"Id": 10757302973393310045,
|
||||||
|
"Parent Entity": "Entity_[1146574390643]"
|
||||||
|
},
|
||||||
|
"Component_[14505817420424255464]": {
|
||||||
|
"$type": "EditorInspectorComponent",
|
||||||
|
"Id": 14505817420424255464,
|
||||||
|
"ComponentOrderEntryArray": [
|
||||||
|
{
|
||||||
|
"ComponentId": 10757302973393310045
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"Component_[14988041764659020032]": {
|
||||||
|
"$type": "EditorLockComponent",
|
||||||
|
"Id": 14988041764659020032
|
||||||
|
},
|
||||||
|
"Component_[15808690248755038124]": {
|
||||||
|
"$type": "SelectionComponent",
|
||||||
|
"Id": 15808690248755038124
|
||||||
|
},
|
||||||
|
"Component_[15900837685796817138]": {
|
||||||
|
"$type": "EditorVisibilityComponent",
|
||||||
|
"Id": 15900837685796817138
|
||||||
|
},
|
||||||
|
"Component_[3298767348226484884]": {
|
||||||
|
"$type": "EditorOnlyEntityComponent",
|
||||||
|
"Id": 3298767348226484884
|
||||||
|
},
|
||||||
|
"Component_[4076975109609220594]": {
|
||||||
|
"$type": "EditorPendingCompositionComponent",
|
||||||
|
"Id": 4076975109609220594
|
||||||
|
},
|
||||||
|
"Component_[5679760548946028854]": {
|
||||||
|
"$type": "EditorDisabledCompositionComponent",
|
||||||
|
"Id": 5679760548946028854
|
||||||
|
},
|
||||||
|
"Component_[5855590796136709437]": {
|
||||||
|
"$type": "EditorEntitySortComponent",
|
||||||
|
"Id": 5855590796136709437,
|
||||||
|
"ChildEntityOrderEntryArray": [
|
||||||
|
{
|
||||||
|
"EntityId": "Entity_[1155164325235]"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EntityId": "Entity_[1180934129011]",
|
||||||
|
"SortIndex": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EntityId": "",
|
||||||
|
"SortIndex": 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EntityId": "Entity_[1168049227123]",
|
||||||
|
"SortIndex": 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EntityId": "Entity_[1163754259827]",
|
||||||
|
"SortIndex": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EntityId": "Entity_[1159459292531]",
|
||||||
|
"SortIndex": 5
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"Component_[9277695270015777859]": {
|
||||||
|
"$type": "EditorEntityIconComponent",
|
||||||
|
"Id": 9277695270015777859
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Entity_[1180934129011]": {
|
||||||
|
"Id": "Entity_[1180934129011]",
|
||||||
|
"Name": "Global Sky",
|
||||||
|
"Components": {
|
||||||
|
"Component_[11231930600558681245]": {
|
||||||
|
"$type": "AZ::Render::EditorHDRiSkyboxComponent",
|
||||||
|
"Id": 11231930600558681245,
|
||||||
|
"Controller": {
|
||||||
|
"Configuration": {
|
||||||
|
"CubemapAsset": {
|
||||||
|
"assetId": {
|
||||||
|
"guid": "{215E47FD-D181-5832-B1AB-91673ABF6399}",
|
||||||
|
"subId": 1000
|
||||||
|
},
|
||||||
|
"assetHint": "lightingpresets/highcontrast/goegap_4k_skyboxcm.exr.streamingimage"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Component_[11980494120202836095]": {
|
||||||
|
"$type": "SelectionComponent",
|
||||||
|
"Id": 11980494120202836095
|
||||||
|
},
|
||||||
|
"Component_[1428633914413949476]": {
|
||||||
|
"$type": "EditorLockComponent",
|
||||||
|
"Id": 1428633914413949476
|
||||||
|
},
|
||||||
|
"Component_[14936200426671614999]": {
|
||||||
|
"$type": "AZ::Render::EditorImageBasedLightComponent",
|
||||||
|
"Id": 14936200426671614999,
|
||||||
|
"Controller": {
|
||||||
|
"Configuration": {
|
||||||
|
"diffuseImageAsset": {
|
||||||
|
"assetId": {
|
||||||
|
"guid": "{3FD09945-D0F2-55C8-B9AF-B2FD421FE3BE}",
|
||||||
|
"subId": 3000
|
||||||
|
},
|
||||||
|
"assetHint": "lightingpresets/highcontrast/goegap_4k_iblglobalcm_ibldiffuse.exr.streamingimage"
|
||||||
|
},
|
||||||
|
"specularImageAsset": {
|
||||||
|
"assetId": {
|
||||||
|
"guid": "{3FD09945-D0F2-55C8-B9AF-B2FD421FE3BE}",
|
||||||
|
"subId": 2000
|
||||||
|
},
|
||||||
|
"assetHint": "lightingpresets/highcontrast/goegap_4k_iblglobalcm_iblspecular.exr.streamingimage"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Component_[14994774102579326069]": {
|
||||||
|
"$type": "EditorDisabledCompositionComponent",
|
||||||
|
"Id": 14994774102579326069
|
||||||
|
},
|
||||||
|
"Component_[15417479889044493340]": {
|
||||||
|
"$type": "EditorPendingCompositionComponent",
|
||||||
|
"Id": 15417479889044493340
|
||||||
|
},
|
||||||
|
"Component_[15826613364991382688]": {
|
||||||
|
"$type": "EditorEntitySortComponent",
|
||||||
|
"Id": 15826613364991382688
|
||||||
|
},
|
||||||
|
"Component_[1665003113283562343]": {
|
||||||
|
"$type": "EditorOnlyEntityComponent",
|
||||||
|
"Id": 1665003113283562343
|
||||||
|
},
|
||||||
|
"Component_[3704934735944502280]": {
|
||||||
|
"$type": "EditorEntityIconComponent",
|
||||||
|
"Id": 3704934735944502280
|
||||||
|
},
|
||||||
|
"Component_[5698542331457326479]": {
|
||||||
|
"$type": "EditorVisibilityComponent",
|
||||||
|
"Id": 5698542331457326479
|
||||||
|
},
|
||||||
|
"Component_[6644513399057217122]": {
|
||||||
|
"$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
|
||||||
|
"Id": 6644513399057217122,
|
||||||
|
"Parent Entity": "Entity_[1176639161715]"
|
||||||
|
},
|
||||||
|
"Component_[931091830724002070]": {
|
||||||
|
"$type": "EditorInspectorComponent",
|
||||||
|
"Id": 931091830724002070
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+1827
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,196 @@
|
|||||||
|
{
|
||||||
|
"ContainerEntity": {
|
||||||
|
"Id": "ContainerEntity",
|
||||||
|
"Name": "Player",
|
||||||
|
"Components": {
|
||||||
|
"Component_[10591405285626521927]": {
|
||||||
|
"$type": "EditorLockComponent",
|
||||||
|
"Id": 10591405285626521927
|
||||||
|
},
|
||||||
|
"Component_[10962884071806037909]": {
|
||||||
|
"$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
|
||||||
|
"Id": 10962884071806037909,
|
||||||
|
"Parent Entity": ""
|
||||||
|
},
|
||||||
|
"Component_[14883697413991420474]": {
|
||||||
|
"$type": "EditorOnlyEntityComponent",
|
||||||
|
"Id": 14883697413991420474
|
||||||
|
},
|
||||||
|
"Component_[1497622121956209837]": {
|
||||||
|
"$type": "EditorVisibilityComponent",
|
||||||
|
"Id": 1497622121956209837
|
||||||
|
},
|
||||||
|
"Component_[16429314387772079347]": {
|
||||||
|
"$type": "EditorEntityIconComponent",
|
||||||
|
"Id": 16429314387772079347
|
||||||
|
},
|
||||||
|
"Component_[16665294301093657382]": {
|
||||||
|
"$type": "EditorDisabledCompositionComponent",
|
||||||
|
"Id": 16665294301093657382
|
||||||
|
},
|
||||||
|
"Component_[1706666252612720326]": {
|
||||||
|
"$type": "EditorInspectorComponent",
|
||||||
|
"Id": 1706666252612720326
|
||||||
|
},
|
||||||
|
"Component_[4216896820422195198]": {
|
||||||
|
"$type": "EditorPendingCompositionComponent",
|
||||||
|
"Id": 4216896820422195198
|
||||||
|
},
|
||||||
|
"Component_[4540089401187370610]": {
|
||||||
|
"$type": "EditorPrefabComponent",
|
||||||
|
"Id": 4540089401187370610
|
||||||
|
},
|
||||||
|
"Component_[6378576046601184103]": {
|
||||||
|
"$type": "EditorEntitySortComponent",
|
||||||
|
"Id": 6378576046601184103
|
||||||
|
},
|
||||||
|
"Component_[7745420981568587180]": {
|
||||||
|
"$type": "SelectionComponent",
|
||||||
|
"Id": 7745420981568587180
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Entities": {
|
||||||
|
"Entity_[1028733630164]": {
|
||||||
|
"Id": "Entity_[1028733630164]",
|
||||||
|
"Name": "Player",
|
||||||
|
"Components": {
|
||||||
|
"Component_[12294726333564087591]": {
|
||||||
|
"$type": "SelectionComponent",
|
||||||
|
"Id": 12294726333564087591
|
||||||
|
},
|
||||||
|
"Component_[13587084088242540786]": {
|
||||||
|
"$type": "EditorInspectorComponent",
|
||||||
|
"Id": 13587084088242540786,
|
||||||
|
"ComponentOrderEntryArray": [
|
||||||
|
{
|
||||||
|
"ComponentId": 6819443882832501114
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ComponentId": 5577505593558922067,
|
||||||
|
"SortIndex": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ComponentId": 2069554278758260821,
|
||||||
|
"SortIndex": 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ComponentId": 16508969730014660362,
|
||||||
|
"SortIndex": 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ComponentId": 8125406152674415588,
|
||||||
|
"SortIndex": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ComponentId": 4337571454344109612,
|
||||||
|
"SortIndex": 5
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ComponentId": 16457408099527309065,
|
||||||
|
"SortIndex": 6
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"Component_[14335168881008289852]": {
|
||||||
|
"$type": "EditorEntitySortComponent",
|
||||||
|
"Id": 14335168881008289852
|
||||||
|
},
|
||||||
|
"Component_[16308902899170829847]": {
|
||||||
|
"$type": "EditorVisibilityComponent",
|
||||||
|
"Id": 16308902899170829847
|
||||||
|
},
|
||||||
|
"Component_[16457408099527309065]": {
|
||||||
|
"$type": "GenericComponentWrapper",
|
||||||
|
"Id": 16457408099527309065,
|
||||||
|
"m_template": {
|
||||||
|
"$type": "Multiplayer::NetworkTransformComponent"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Component_[16508969730014660362]": {
|
||||||
|
"$type": "GenericComponentWrapper",
|
||||||
|
"Id": 16508969730014660362,
|
||||||
|
"m_template": {
|
||||||
|
"$type": "AutomatedTesting::NetworkTestPlayerComponent"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Component_[16541569566865026527]": {
|
||||||
|
"$type": "EditorOnlyEntityComponent",
|
||||||
|
"Id": 16541569566865026527
|
||||||
|
},
|
||||||
|
"Component_[2002761223483048905]": {
|
||||||
|
"$type": "EditorPendingCompositionComponent",
|
||||||
|
"Id": 2002761223483048905
|
||||||
|
},
|
||||||
|
"Component_[2069554278758260821]": {
|
||||||
|
"$type": "EditorScriptCanvasComponent",
|
||||||
|
"Id": 2069554278758260821,
|
||||||
|
"m_name": "AutoComponent_NetworkInput",
|
||||||
|
"m_assetHolder": {
|
||||||
|
"m_asset": {
|
||||||
|
"assetId": {
|
||||||
|
"guid": "{D079F53D-CCAA-5C98-8E0C-B485B7821747}"
|
||||||
|
},
|
||||||
|
"assetHint": "levels/multiplayer/autocomponent_networkinput/autocomponent_networkinput.scriptcanvas"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"runtimeDataIsValid": true,
|
||||||
|
"runtimeDataOverrides": {
|
||||||
|
"source": {
|
||||||
|
"assetId": {
|
||||||
|
"guid": "{D079F53D-CCAA-5C98-8E0C-B485B7821747}"
|
||||||
|
},
|
||||||
|
"assetHint": "levels/multiplayer/autocomponent_networkinput/autocomponent_networkinput.scriptcanvas"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Component_[4337571454344109612]": {
|
||||||
|
"$type": "GenericComponentWrapper",
|
||||||
|
"Id": 4337571454344109612,
|
||||||
|
"m_template": {
|
||||||
|
"$type": "NetBindComponent"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Component_[477591477979440744]": {
|
||||||
|
"$type": "EditorLockComponent",
|
||||||
|
"Id": 477591477979440744
|
||||||
|
},
|
||||||
|
"Component_[5577505593558922067]": {
|
||||||
|
"$type": "AZ::Render::EditorMeshComponent",
|
||||||
|
"Id": 5577505593558922067,
|
||||||
|
"Controller": {
|
||||||
|
"Configuration": {
|
||||||
|
"ModelAsset": {
|
||||||
|
"assetId": {
|
||||||
|
"guid": "{6DE0E9A8-A1C7-5D0F-9407-4E627C1F223C}",
|
||||||
|
"subId": 284780167
|
||||||
|
},
|
||||||
|
"assetHint": "models/sphere.azmodel"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Component_[5828214869455694702]": {
|
||||||
|
"$type": "EditorDisabledCompositionComponent",
|
||||||
|
"Id": 5828214869455694702
|
||||||
|
},
|
||||||
|
"Component_[6819443882832501114]": {
|
||||||
|
"$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
|
||||||
|
"Id": 6819443882832501114,
|
||||||
|
"Parent Entity": "ContainerEntity"
|
||||||
|
},
|
||||||
|
"Component_[8125406152674415588]": {
|
||||||
|
"$type": "GenericComponentWrapper",
|
||||||
|
"Id": 8125406152674415588,
|
||||||
|
"m_template": {
|
||||||
|
"$type": "Multiplayer::LocalPredictionPlayerInputComponent"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Component_[8838623765985560328]": {
|
||||||
|
"$type": "EditorEntityIconComponent",
|
||||||
|
"Id": 8838623765985560328
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
0,0,0,0,0,0
|
||||||
|
0,0,0,0,0,0
|
||||||
|
0,0,0,0,0,0
|
||||||
|
0,0,0,0,0,0
|
||||||
|
0,0,0,0,0,0
|
||||||
|
0,0,0,0,0,0
|
||||||
|
0,0,0,0,0,0
|
||||||
|
0,0,0,0,0,0
|
||||||
|
0,0,0,0,0,0
|
||||||
|
0,0,0,0,0,0
|
||||||
|
0,0,0,0,0,0
|
||||||
|
0,0,0,0,0,0
|
||||||
@@ -205,6 +205,99 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
// NOTE: HairParentPass does not write into Depth MSAA from Opaque Pass. If new passes downstream
|
||||||
|
// of HairParentPass will need to use Depth MSAA, HairParentPass will need to be updated to use Depth MSAA
|
||||||
|
// instead of regular Depth as DepthStencil. Specifically, HairResolvePPLL.pass and the associated
|
||||||
|
// .azsl file will need to be updated.
|
||||||
|
"Name": "HairParentPass",
|
||||||
|
// Note: The following two lines represent the choice of rendering pipeline for the hair.
|
||||||
|
// You can either choose to use PPLL or ShortCut and accordingly change the flag
|
||||||
|
// 'm_usePPLLRenderTechnique' in the class 'HairFeatureProcessor.cpp'
|
||||||
|
// "TemplateName": "HairParentPassTemplate",
|
||||||
|
"TemplateName": "HairParentShortCutPassTemplate",
|
||||||
|
"Enabled": true,
|
||||||
|
"Connections": [
|
||||||
|
// Critical to keep DepthLinear as input - used to set the size of the Head PPLL image buffer.
|
||||||
|
// If DepthLinear is not available - connect to another viewport (non MSAA) image.
|
||||||
|
{
|
||||||
|
"LocalSlot": "DepthLinearInput",
|
||||||
|
"AttachmentRef": {
|
||||||
|
"Pass": "DepthPrePass",
|
||||||
|
"Attachment": "DepthLinear"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"LocalSlot": "Depth",
|
||||||
|
"AttachmentRef": {
|
||||||
|
"Pass": "DepthPrePass",
|
||||||
|
"Attachment": "Depth"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"LocalSlot": "RenderTargetInputOutput",
|
||||||
|
"AttachmentRef": {
|
||||||
|
"Pass": "OpaquePass",
|
||||||
|
"Attachment": "Output"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"LocalSlot": "RenderTargetInputOnly",
|
||||||
|
"AttachmentRef": {
|
||||||
|
"Pass": "OpaquePass",
|
||||||
|
"Attachment": "Output"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// Shadows resources
|
||||||
|
{
|
||||||
|
"LocalSlot": "DirectionalShadowmap",
|
||||||
|
"AttachmentRef": {
|
||||||
|
"Pass": "ShadowPass",
|
||||||
|
"Attachment": "DirectionalShadowmap"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"LocalSlot": "DirectionalESM",
|
||||||
|
"AttachmentRef": {
|
||||||
|
"Pass": "ShadowPass",
|
||||||
|
"Attachment": "DirectionalESM"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"LocalSlot": "ProjectedShadowmap",
|
||||||
|
"AttachmentRef": {
|
||||||
|
"Pass": "ShadowPass",
|
||||||
|
"Attachment": "ProjectedShadowmap"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"LocalSlot": "ProjectedESM",
|
||||||
|
"AttachmentRef": {
|
||||||
|
"Pass": "ShadowPass",
|
||||||
|
"Attachment": "ProjectedESM"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// Lighting Resources
|
||||||
|
{
|
||||||
|
"LocalSlot": "TileLightData",
|
||||||
|
"AttachmentRef": {
|
||||||
|
"Pass": "LightCullingPass",
|
||||||
|
"Attachment": "TileLightData"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"LocalSlot": "LightListRemapped",
|
||||||
|
"AttachmentRef": {
|
||||||
|
"Pass": "LightCullingPass",
|
||||||
|
"Attachment": "LightListRemapped"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"Name": "TransparentPass",
|
"Name": "TransparentPass",
|
||||||
"TemplateName": "TransparentParentTemplate",
|
"TemplateName": "TransparentParentTemplate",
|
||||||
@@ -254,22 +347,22 @@
|
|||||||
{
|
{
|
||||||
"LocalSlot": "InputLinearDepth",
|
"LocalSlot": "InputLinearDepth",
|
||||||
"AttachmentRef": {
|
"AttachmentRef": {
|
||||||
"Pass": "DepthPrePass",
|
"Pass": "HairParentPass",
|
||||||
"Attachment": "DepthLinear"
|
"Attachment": "DepthLinear"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"LocalSlot": "DepthStencil",
|
"LocalSlot": "DepthStencil",
|
||||||
"AttachmentRef": {
|
"AttachmentRef": {
|
||||||
"Pass": "DepthPrePass",
|
"Pass": "HairParentPass",
|
||||||
"Attachment": "Depth"
|
"Attachment": "Depth"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"LocalSlot": "InputOutput",
|
"LocalSlot": "InputOutput",
|
||||||
"AttachmentRef": {
|
"AttachmentRef": {
|
||||||
"Pass": "OpaquePass",
|
"Pass": "HairParentPass",
|
||||||
"Attachment": "Output"
|
"Attachment": "RenderTargetInputOutput"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -282,22 +375,22 @@
|
|||||||
{
|
{
|
||||||
"LocalSlot": "InputLinearDepth",
|
"LocalSlot": "InputLinearDepth",
|
||||||
"AttachmentRef": {
|
"AttachmentRef": {
|
||||||
"Pass": "DepthPrePass",
|
"Pass": "HairParentPass",
|
||||||
"Attachment": "DepthLinear"
|
"Attachment": "DepthLinear"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"LocalSlot": "InputDepthStencil",
|
"LocalSlot": "InputDepthStencil",
|
||||||
"AttachmentRef": {
|
"AttachmentRef": {
|
||||||
"Pass": "DepthPrePass",
|
"Pass": "HairParentPass",
|
||||||
"Attachment": "Depth"
|
"Attachment": "Depth"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"LocalSlot": "RenderTargetInputOutput",
|
"LocalSlot": "RenderTargetInputOutput",
|
||||||
"AttachmentRef": {
|
"AttachmentRef": {
|
||||||
"Pass": "TransparentPass",
|
"Pass": "HairParentPass",
|
||||||
"Attachment": "InputOutput"
|
"Attachment": "RenderTargetInputOutput"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@@ -337,7 +430,7 @@
|
|||||||
{
|
{
|
||||||
"LocalSlot": "Depth",
|
"LocalSlot": "Depth",
|
||||||
"AttachmentRef": {
|
"AttachmentRef": {
|
||||||
"Pass": "DepthPrePass",
|
"Pass": "HairParentPass",
|
||||||
"Attachment": "Depth"
|
"Attachment": "Depth"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -372,7 +465,7 @@
|
|||||||
{
|
{
|
||||||
"LocalSlot": "DepthInputOutput",
|
"LocalSlot": "DepthInputOutput",
|
||||||
"AttachmentRef": {
|
"AttachmentRef": {
|
||||||
"Pass": "DepthPrePass",
|
"Pass": "HairParentPass",
|
||||||
"Attachment": "Depth"
|
"Attachment": "Depth"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -431,7 +524,7 @@
|
|||||||
{
|
{
|
||||||
"LocalSlot": "DepthInputOutput",
|
"LocalSlot": "DepthInputOutput",
|
||||||
"AttachmentRef": {
|
"AttachmentRef": {
|
||||||
"Pass": "DepthPrePass",
|
"Pass": "HairParentPass",
|
||||||
"Attachment": "Depth"
|
"Attachment": "Depth"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -451,7 +544,7 @@
|
|||||||
{
|
{
|
||||||
"LocalSlot": "DepthInputOutput",
|
"LocalSlot": "DepthInputOutput",
|
||||||
"AttachmentRef": {
|
"AttachmentRef": {
|
||||||
"Pass": "DepthPrePass",
|
"Pass": "HairParentPass",
|
||||||
"Attachment": "Depth"
|
"Attachment": "Depth"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,9 +16,12 @@
|
|||||||
#include <AzCore/std/containers/vector.h>
|
#include <AzCore/std/containers/vector.h>
|
||||||
#include <AzCore/std/utils.h>
|
#include <AzCore/std/utils.h>
|
||||||
|
|
||||||
|
struct ICVar;
|
||||||
|
|
||||||
class CVarMenu
|
class CVarMenu
|
||||||
: public QMenu
|
: public QMenu
|
||||||
{
|
{
|
||||||
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
// CVar that can be toggled on and off
|
// CVar that can be toggled on and off
|
||||||
struct CVarToggle
|
struct CVarToggle
|
||||||
|
|||||||
+87
-95
@@ -19,10 +19,9 @@ namespace Config
|
|||||||
|
|
||||||
CConfigGroup::~CConfigGroup()
|
CConfigGroup::~CConfigGroup()
|
||||||
{
|
{
|
||||||
for (TConfigVariables::const_iterator it = m_vars.begin();
|
for (IConfigVar* var : m_vars)
|
||||||
it != m_vars.end(); ++it)
|
|
||||||
{
|
{
|
||||||
delete (*it);
|
delete var;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -31,17 +30,15 @@ namespace Config
|
|||||||
m_vars.push_back(var);
|
m_vars.push_back(var);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32 CConfigGroup::GetVarCount()
|
AZ::u32 CConfigGroup::GetVarCount()
|
||||||
{
|
{
|
||||||
return static_cast<uint32>(m_vars.size());
|
return aznumeric_cast<AZ::u32>(m_vars.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
IConfigVar* CConfigGroup::GetVar(const char* szName)
|
IConfigVar* CConfigGroup::GetVar(const char* szName)
|
||||||
{
|
{
|
||||||
for (TConfigVariables::const_iterator it = m_vars.begin();
|
for (IConfigVar* var : m_vars)
|
||||||
it != m_vars.end(); ++it)
|
|
||||||
{
|
{
|
||||||
IConfigVar* var = (*it);
|
|
||||||
if (0 == _stricmp(szName, var->GetName().c_str()))
|
if (0 == _stricmp(szName, var->GetName().c_str()))
|
||||||
{
|
{
|
||||||
return var;
|
return var;
|
||||||
@@ -53,20 +50,19 @@ namespace Config
|
|||||||
|
|
||||||
const IConfigVar* CConfigGroup::GetVar(const char* szName) const
|
const IConfigVar* CConfigGroup::GetVar(const char* szName) const
|
||||||
{
|
{
|
||||||
for (TConfigVariables::const_iterator it = m_vars.begin();
|
for (const IConfigVar* var : m_vars)
|
||||||
it != m_vars.end(); ++it)
|
|
||||||
{
|
{
|
||||||
IConfigVar* var = (*it);
|
|
||||||
if (0 == _stricmp(szName, var->GetName().c_str()))
|
if (0 == _stricmp(szName, var->GetName().c_str()))
|
||||||
{
|
{
|
||||||
return var;
|
return var;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
IConfigVar* CConfigGroup::GetVar(uint index)
|
IConfigVar* CConfigGroup::GetVar(AZ::u32 index)
|
||||||
{
|
{
|
||||||
if (index < m_vars.size())
|
if (index < m_vars.size())
|
||||||
{
|
{
|
||||||
@@ -76,7 +72,7 @@ namespace Config
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
const IConfigVar* CConfigGroup::GetVar(uint index) const
|
const IConfigVar* CConfigGroup::GetVar(AZ::u32 index) const
|
||||||
{
|
{
|
||||||
if (index < m_vars.size())
|
if (index < m_vars.size())
|
||||||
{
|
{
|
||||||
@@ -89,114 +85,110 @@ namespace Config
|
|||||||
void CConfigGroup::SaveToXML(XmlNodeRef node)
|
void CConfigGroup::SaveToXML(XmlNodeRef node)
|
||||||
{
|
{
|
||||||
// save only values that don't have default values
|
// save only values that don't have default values
|
||||||
for (TConfigVariables::const_iterator it = m_vars.begin();
|
for (const IConfigVar* var : m_vars)
|
||||||
it != m_vars.end(); ++it)
|
|
||||||
{
|
{
|
||||||
IConfigVar* var = (*it);
|
if (var->IsFlagSet(IConfigVar::eFlag_DoNotSave) || var->IsDefault())
|
||||||
if (!var->IsFlagSet(IConfigVar::eFlag_DoNotSave))
|
|
||||||
{
|
{
|
||||||
if (!var->IsDefault())
|
continue;
|
||||||
{
|
}
|
||||||
const char* szName = var->GetName().c_str();
|
|
||||||
|
|
||||||
switch (var->GetType())
|
const char* szName = var->GetName().c_str();
|
||||||
{
|
|
||||||
case IConfigVar::eType_BOOL:
|
|
||||||
{
|
|
||||||
bool currentValue = false;
|
|
||||||
var->Get(¤tValue);
|
|
||||||
node->setAttr(szName, currentValue);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case IConfigVar::eType_INT:
|
switch (var->GetType())
|
||||||
{
|
{
|
||||||
int currentValue = 0;
|
case IConfigVar::eType_BOOL:
|
||||||
var->Get(¤tValue);
|
{
|
||||||
node->setAttr(szName, currentValue);
|
bool currentValue = false;
|
||||||
break;
|
var->Get(¤tValue);
|
||||||
}
|
node->setAttr(szName, currentValue);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case IConfigVar::eType_FLOAT:
|
case IConfigVar::eType_INT:
|
||||||
{
|
{
|
||||||
float currentValue = 0;
|
int currentValue = 0;
|
||||||
var->Get(¤tValue);
|
var->Get(¤tValue);
|
||||||
node->setAttr(szName, currentValue);
|
node->setAttr(szName, currentValue);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case IConfigVar::eType_STRING:
|
case IConfigVar::eType_FLOAT:
|
||||||
{
|
{
|
||||||
AZStd::string currentValue;
|
float currentValue = 0;
|
||||||
var->Get(¤tValue);
|
var->Get(¤tValue);
|
||||||
node->setAttr(szName, currentValue.c_str());
|
node->setAttr(szName, currentValue);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
case IConfigVar::eType_STRING:
|
||||||
|
{
|
||||||
|
AZStd::string currentValue;
|
||||||
|
var->Get(¤tValue);
|
||||||
|
node->setAttr(szName, currentValue.c_str());
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CConfigGroup::LoadFromXML(XmlNodeRef node)
|
void CConfigGroup::LoadFromXML(XmlNodeRef node)
|
||||||
{
|
{
|
||||||
// save only values that don't have default values
|
// load values that are save-able
|
||||||
for (TConfigVariables::const_iterator it = m_vars.begin();
|
for (IConfigVar* var : m_vars)
|
||||||
it != m_vars.end(); ++it)
|
|
||||||
{
|
{
|
||||||
IConfigVar* var = (*it);
|
if (var->IsFlagSet(IConfigVar::eFlag_DoNotSave))
|
||||||
if (!var->IsFlagSet(IConfigVar::eFlag_DoNotSave))
|
|
||||||
{
|
{
|
||||||
const char* szName = var->GetName().c_str();
|
continue;
|
||||||
|
}
|
||||||
|
const char* szName = var->GetName().c_str();
|
||||||
|
|
||||||
switch (var->GetType())
|
switch (var->GetType())
|
||||||
|
{
|
||||||
|
case IConfigVar::eType_BOOL:
|
||||||
|
{
|
||||||
|
bool currentValue = false;
|
||||||
|
var->GetDefault(¤tValue);
|
||||||
|
if (node->getAttr(szName, currentValue))
|
||||||
{
|
{
|
||||||
case IConfigVar::eType_BOOL:
|
var->Set(¤tValue);
|
||||||
{
|
|
||||||
bool currentValue = false;
|
|
||||||
var->GetDefault(¤tValue);
|
|
||||||
if (node->getAttr(szName, currentValue))
|
|
||||||
{
|
|
||||||
var->Set(¤tValue);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case IConfigVar::eType_INT:
|
case IConfigVar::eType_INT:
|
||||||
|
{
|
||||||
|
int currentValue = 0;
|
||||||
|
var->GetDefault(¤tValue);
|
||||||
|
if (node->getAttr(szName, currentValue))
|
||||||
{
|
{
|
||||||
int currentValue = 0;
|
var->Set(¤tValue);
|
||||||
var->GetDefault(¤tValue);
|
|
||||||
if (node->getAttr(szName, currentValue))
|
|
||||||
{
|
|
||||||
var->Set(¤tValue);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case IConfigVar::eType_FLOAT:
|
case IConfigVar::eType_FLOAT:
|
||||||
|
{
|
||||||
|
float currentValue = 0;
|
||||||
|
var->GetDefault(¤tValue);
|
||||||
|
if (node->getAttr(szName, currentValue))
|
||||||
{
|
{
|
||||||
float currentValue = 0;
|
var->Set(¤tValue);
|
||||||
var->GetDefault(¤tValue);
|
|
||||||
if (node->getAttr(szName, currentValue))
|
|
||||||
{
|
|
||||||
var->Set(¤tValue);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case IConfigVar::eType_STRING:
|
case IConfigVar::eType_STRING:
|
||||||
|
{
|
||||||
|
AZStd::string currentValue;
|
||||||
|
var->GetDefault(¤tValue);
|
||||||
|
QString readValue(currentValue.c_str());
|
||||||
|
if (node->getAttr(szName, readValue))
|
||||||
{
|
{
|
||||||
AZStd::string currentValue;
|
currentValue = readValue.toUtf8().data();
|
||||||
var->GetDefault(¤tValue);
|
var->Set(¤tValue);
|
||||||
QString readValue(currentValue.c_str());
|
|
||||||
if (node->getAttr(szName, readValue))
|
|
||||||
{
|
|
||||||
currentValue = readValue.toUtf8().data();
|
|
||||||
var->Set(¤tValue);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+21
-69
@@ -8,8 +8,12 @@
|
|||||||
|
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#ifndef CRYINCLUDE_EDITOR_CONFIGGROUP_H
|
#include <AzCore/base.h>
|
||||||
#define CRYINCLUDE_EDITOR_CONFIGGROUP_H
|
#include <AzCore/std/containers/vector.h>
|
||||||
|
#include <AzCore/std/string/string.h>
|
||||||
|
|
||||||
|
struct ICVar;
|
||||||
|
class XmlNodeRef;
|
||||||
|
|
||||||
namespace Config
|
namespace Config
|
||||||
{
|
{
|
||||||
@@ -32,7 +36,7 @@ namespace Config
|
|||||||
eFlag_DoNotSave = 1 << 2,
|
eFlag_DoNotSave = 1 << 2,
|
||||||
};
|
};
|
||||||
|
|
||||||
IConfigVar(const char* szName, const char* szDescription, EType varType, uint8 flags)
|
IConfigVar(const char* szName, const char* szDescription, EType varType, AZ::u8 flags)
|
||||||
: m_name(szName)
|
: m_name(szName)
|
||||||
, m_description(szDescription)
|
, m_description(szDescription)
|
||||||
, m_type(varType)
|
, m_type(varType)
|
||||||
@@ -42,22 +46,22 @@ namespace Config
|
|||||||
|
|
||||||
virtual ~IConfigVar() = default;
|
virtual ~IConfigVar() = default;
|
||||||
|
|
||||||
ILINE EType GetType() const
|
AZ_FORCE_INLINE EType GetType() const
|
||||||
{
|
{
|
||||||
return m_type;
|
return m_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
ILINE const AZStd::string& GetName() const
|
AZ_FORCE_INLINE const AZStd::string& GetName() const
|
||||||
{
|
{
|
||||||
return m_name;
|
return m_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
ILINE const AZStd::string& GetDescription() const
|
AZ_FORCE_INLINE const AZStd::string& GetDescription() const
|
||||||
{
|
{
|
||||||
return m_description;
|
return m_description;
|
||||||
}
|
}
|
||||||
|
|
||||||
ILINE bool IsFlagSet(EFlags flag) const
|
AZ_FORCE_INLINE bool IsFlagSet(EFlags flag) const
|
||||||
{
|
{
|
||||||
return 0 != (m_flags & flag);
|
return 0 != (m_flags & flag);
|
||||||
}
|
}
|
||||||
@@ -68,73 +72,28 @@ namespace Config
|
|||||||
virtual void GetDefault(void* outPtr) const = 0;
|
virtual void GetDefault(void* outPtr) const = 0;
|
||||||
virtual void Reset() = 0;
|
virtual void Reset() = 0;
|
||||||
|
|
||||||
static EType TranslateType(const bool&) { return eType_BOOL; }
|
static constexpr EType TranslateType(const bool&) { return eType_BOOL; }
|
||||||
static EType TranslateType(const int&) { return eType_INT; }
|
static constexpr EType TranslateType(const int&) { return eType_INT; }
|
||||||
static EType TranslateType(const float&) { return eType_FLOAT; }
|
static constexpr EType TranslateType(const float&) { return eType_FLOAT; }
|
||||||
static EType TranslateType(const AZStd::string&) { return eType_STRING; }
|
static constexpr EType TranslateType(const AZStd::string&) { return eType_STRING; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
EType m_type;
|
EType m_type;
|
||||||
uint8 m_flags;
|
AZ::u8 m_flags;
|
||||||
AZStd::string m_name;
|
AZStd::string m_name;
|
||||||
AZStd::string m_description;
|
AZStd::string m_description;
|
||||||
void* m_ptr;
|
void* m_ptr;
|
||||||
ICVar* m_pCVar;
|
ICVar* m_pCVar;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Typed wrapper for config variable
|
|
||||||
template<class T>
|
|
||||||
class TConfigVar
|
|
||||||
: public IConfigVar
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
T m_default;
|
|
||||||
|
|
||||||
public:
|
|
||||||
TConfigVar(const char* szName, const char* szDescription, uint8 flags, T& ptr, const T& defaultValue)
|
|
||||||
: IConfigVar(szName, szDescription, IConfigVar::TranslateType(ptr), flags)
|
|
||||||
, m_default(defaultValue)
|
|
||||||
{
|
|
||||||
m_ptr = &ptr;
|
|
||||||
|
|
||||||
// reset to default value on initializations
|
|
||||||
ptr = defaultValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual void Get(void* outPtr) const
|
|
||||||
{
|
|
||||||
*reinterpret_cast<T*>(outPtr) = *reinterpret_cast<const T*>(m_ptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual void Set(const void* ptr)
|
|
||||||
{
|
|
||||||
*reinterpret_cast<T*>(m_ptr) = *reinterpret_cast<const T*>(ptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual void Reset()
|
|
||||||
{
|
|
||||||
*reinterpret_cast<T*>(m_ptr) = m_default;
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual void GetDefault(void* outPtr) const
|
|
||||||
{
|
|
||||||
*reinterpret_cast<T*>(outPtr) = m_default;
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual bool IsDefault() const
|
|
||||||
{
|
|
||||||
return *reinterpret_cast<const T*>(m_ptr) == m_default;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Group of configuration variables with optional mapping to CVars
|
// Group of configuration variables with optional mapping to CVars
|
||||||
class CConfigGroup
|
class CConfigGroup
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
typedef std::vector<IConfigVar*> TConfigVariables;
|
using TConfigVariables = AZStd::vector<IConfigVar*> ;
|
||||||
TConfigVariables m_vars;
|
TConfigVariables m_vars;
|
||||||
|
|
||||||
typedef std::vector<ICVar*> TConsoleVariables;
|
using TConsoleVariables = AZStd::vector<ICVar*>;
|
||||||
TConsoleVariables m_consoleVars;
|
TConsoleVariables m_consoleVars;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@@ -142,20 +101,13 @@ namespace Config
|
|||||||
virtual ~CConfigGroup();
|
virtual ~CConfigGroup();
|
||||||
|
|
||||||
void AddVar(IConfigVar* var);
|
void AddVar(IConfigVar* var);
|
||||||
uint32 GetVarCount();
|
AZ::u32 GetVarCount();
|
||||||
IConfigVar* GetVar(const char* szName);
|
IConfigVar* GetVar(const char* szName);
|
||||||
IConfigVar* GetVar(uint index);
|
IConfigVar* GetVar(AZ::u32 index);
|
||||||
const IConfigVar* GetVar(const char* szName) const;
|
const IConfigVar* GetVar(const char* szName) const;
|
||||||
const IConfigVar* GetVar(uint index) const;
|
const IConfigVar* GetVar(AZ::u32 index) const;
|
||||||
|
|
||||||
void SaveToXML(XmlNodeRef node);
|
void SaveToXML(XmlNodeRef node);
|
||||||
void LoadFromXML(XmlNodeRef node);
|
void LoadFromXML(XmlNodeRef node);
|
||||||
|
|
||||||
template<class T>
|
|
||||||
void AddVar(const char* szName, const char* szDescription, T& var, const T& defaultValue, uint8 flags = 0)
|
|
||||||
{
|
|
||||||
AddVar(new TConfigVar<T>(szName, szDescription, flags, var, defaultValue));
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
#endif // CRYINCLUDE_EDITOR_CONFIGGROUP_H
|
|
||||||
|
|||||||
@@ -6,8 +6,6 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef CRYINCLUDE_EDITOR_UTILS_PROPERTYMISCCTRL_H
|
|
||||||
#define CRYINCLUDE_EDITOR_UTILS_PROPERTYMISCCTRL_H
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#if !defined(Q_MOC_RUN)
|
#if !defined(Q_MOC_RUN)
|
||||||
@@ -53,6 +51,7 @@ private:
|
|||||||
|
|
||||||
class UserPopupWidgetHandler : public QObject, public AzToolsFramework::PropertyHandler < CReflectedVarUser, UserPropertyEditor>
|
class UserPopupWidgetHandler : public QObject, public AzToolsFramework::PropertyHandler < CReflectedVarUser, UserPropertyEditor>
|
||||||
{
|
{
|
||||||
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
AZ_CLASS_ALLOCATOR(UserPopupWidgetHandler, AZ::SystemAllocator, 0);
|
AZ_CLASS_ALLOCATOR(UserPopupWidgetHandler, AZ::SystemAllocator, 0);
|
||||||
bool IsDefaultHandler() const override { return false; }
|
bool IsDefaultHandler() const override { return false; }
|
||||||
@@ -67,6 +66,7 @@ public:
|
|||||||
|
|
||||||
class FloatCurveHandler : public QObject, public AzToolsFramework::PropertyHandler < CReflectedVarSpline, CSplineCtrl>
|
class FloatCurveHandler : public QObject, public AzToolsFramework::PropertyHandler < CReflectedVarSpline, CSplineCtrl>
|
||||||
{
|
{
|
||||||
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
AZ_CLASS_ALLOCATOR(FloatCurveHandler, AZ::SystemAllocator, 0);
|
AZ_CLASS_ALLOCATOR(FloatCurveHandler, AZ::SystemAllocator, 0);
|
||||||
bool IsDefaultHandler() const override { return false; }
|
bool IsDefaultHandler() const override { return false; }
|
||||||
@@ -80,5 +80,3 @@ public:
|
|||||||
|
|
||||||
void OnSplineChange(CSplineCtrl*);
|
void OnSplineChange(CSplineCtrl*);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // CRYINCLUDE_EDITOR_UTILS_PROPERTYMISCCTRL_H
|
|
||||||
|
|||||||
@@ -58,17 +58,9 @@ private:
|
|||||||
void OnClicked() override
|
void OnClicked() override
|
||||||
{
|
{
|
||||||
QString tempValue("");
|
QString tempValue("");
|
||||||
QString ext("");
|
if (!m_path.isEmpty() && !Path::GetExt(m_path).isEmpty())
|
||||||
if (m_path.isEmpty() == false)
|
|
||||||
{
|
{
|
||||||
if (Path::GetExt(m_path) == "")
|
tempValue = m_path;
|
||||||
{
|
|
||||||
tempValue = "";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
tempValue = m_path;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
AssetSelectionModel selection;
|
AssetSelectionModel selection;
|
||||||
|
|||||||
@@ -99,6 +99,7 @@ class FileResourceSelectorWidgetHandler
|
|||||||
: QObject
|
: QObject
|
||||||
, public AzToolsFramework::PropertyHandler < CReflectedVarResource, FileResourceSelectorWidget >
|
, public AzToolsFramework::PropertyHandler < CReflectedVarResource, FileResourceSelectorWidget >
|
||||||
{
|
{
|
||||||
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
AZ_CLASS_ALLOCATOR(FileResourceSelectorWidgetHandler, AZ::SystemAllocator, 0);
|
AZ_CLASS_ALLOCATOR(FileResourceSelectorWidgetHandler, AZ::SystemAllocator, 0);
|
||||||
|
|
||||||
|
|||||||
@@ -446,41 +446,54 @@ void ReflectedVarUserAdapter::SetVariable(IVariable *pVariable)
|
|||||||
m_reflectedVar.reset(new CReflectedVarUser( pVariable->GetHumanName().toUtf8().data()));
|
m_reflectedVar.reset(new CReflectedVarUser( pVariable->GetHumanName().toUtf8().data()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void ReflectedVarUserAdapter::SyncReflectedVarToIVar(IVariable *pVariable)
|
void ReflectedVarUserAdapter::SyncReflectedVarToIVar(IVariable* pVariable)
|
||||||
{
|
{
|
||||||
QString value;
|
QString value;
|
||||||
pVariable->Get(value);
|
pVariable->Get(value);
|
||||||
m_reflectedVar->m_value = value.toUtf8().data();
|
m_reflectedVar->m_value = value.toUtf8().data();
|
||||||
|
|
||||||
//extract the list of custom items from the IVariable user data
|
// extract the list of custom items from the IVariable user data
|
||||||
IVariable::IGetCustomItems* pGetCustomItems = static_cast<IVariable::IGetCustomItems*> (pVariable->GetUserData().value<void *>());
|
IVariable::IGetCustomItems* pGetCustomItems = static_cast<IVariable::IGetCustomItems*>(pVariable->GetUserData().value<void*>());
|
||||||
if (pGetCustomItems != nullptr)
|
if (pGetCustomItems == nullptr)
|
||||||
{
|
|
||||||
std::vector<IVariable::IGetCustomItems::SItem> items;
|
|
||||||
QString dlgTitle;
|
|
||||||
// call the user supplied callback to fill-in items and get dialog title
|
|
||||||
bool bShowIt = pGetCustomItems->GetItems(pVariable, items, dlgTitle);
|
|
||||||
if (bShowIt) // if func didn't veto, show the dialog
|
|
||||||
{
|
|
||||||
m_reflectedVar->m_enableEdit = true;
|
|
||||||
m_reflectedVar->m_useTree = pGetCustomItems->UseTree();
|
|
||||||
m_reflectedVar->m_treeSeparator = pGetCustomItems->GetTreeSeparator();
|
|
||||||
m_reflectedVar->m_dialogTitle = dlgTitle.toUtf8().data();
|
|
||||||
m_reflectedVar->m_itemNames.resize(items.size());
|
|
||||||
m_reflectedVar->m_itemDescriptions.resize(items.size());
|
|
||||||
|
|
||||||
QByteArray ba;
|
|
||||||
int i = -1;
|
|
||||||
std::generate(m_reflectedVar->m_itemNames.begin(), m_reflectedVar->m_itemNames.end(), [&items, &i, &ba]() { ++i; ba = items[i].name.toUtf8(); return ba.data(); });
|
|
||||||
i = -1;
|
|
||||||
std::generate(m_reflectedVar->m_itemDescriptions.begin(), m_reflectedVar->m_itemDescriptions.end(), [&items, &i, &ba]() { ++i; ba = items[i].desc.toUtf8(); return ba.data(); });
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
m_reflectedVar->m_enableEdit = false;
|
m_reflectedVar->m_enableEdit = false;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::vector<IVariable::IGetCustomItems::SItem> items;
|
||||||
|
QString dlgTitle;
|
||||||
|
// call the user supplied callback to fill-in items and get dialog title
|
||||||
|
bool bShowIt = pGetCustomItems->GetItems(pVariable, items, dlgTitle);
|
||||||
|
if (!bShowIt) // if func vetoed it, don't show the dialog
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
m_reflectedVar->m_enableEdit = true;
|
||||||
|
m_reflectedVar->m_useTree = pGetCustomItems->UseTree();
|
||||||
|
m_reflectedVar->m_treeSeparator = pGetCustomItems->GetTreeSeparator();
|
||||||
|
m_reflectedVar->m_dialogTitle = dlgTitle.toUtf8().data();
|
||||||
|
m_reflectedVar->m_itemNames.resize(items.size());
|
||||||
|
m_reflectedVar->m_itemDescriptions.resize(items.size());
|
||||||
|
|
||||||
|
QByteArray ba;
|
||||||
|
int i = -1;
|
||||||
|
AZStd::generate(
|
||||||
|
m_reflectedVar->m_itemNames.begin(), m_reflectedVar->m_itemNames.end(),
|
||||||
|
[&items, &i, &ba]()
|
||||||
|
{
|
||||||
|
++i;
|
||||||
|
ba = items[i].name.toUtf8();
|
||||||
|
return ba.data();
|
||||||
|
});
|
||||||
|
i = -1;
|
||||||
|
AZStd::generate(
|
||||||
|
m_reflectedVar->m_itemDescriptions.begin(), m_reflectedVar->m_itemDescriptions.end(),
|
||||||
|
[&items, &i, &ba]()
|
||||||
|
{
|
||||||
|
++i;
|
||||||
|
ba = items[i].desc.toUtf8();
|
||||||
|
return ba.data();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void ReflectedVarUserAdapter::SyncIVarToReflectedVar(IVariable *pVariable)
|
void ReflectedVarUserAdapter::SyncIVarToReflectedVar(IVariable *pVariable)
|
||||||
|
|||||||
@@ -126,7 +126,6 @@ void TimelineWidget::DrawTicks(QPainter* painter)
|
|||||||
const QPen pOldPen = painter->pen();
|
const QPen pOldPen = painter->pen();
|
||||||
|
|
||||||
const QPen ltgray(QColor(110, 110, 110));
|
const QPen ltgray(QColor(110, 110, 110));
|
||||||
const QPen black(palette().color(QPalette::Normal, QPalette::Text));
|
|
||||||
const QPen redpen(QColor(255, 0, 255));
|
const QPen redpen(QColor(255, 0, 255));
|
||||||
|
|
||||||
// Draw time ticks every tick step seconds.
|
// Draw time ticks every tick step seconds.
|
||||||
@@ -598,7 +597,6 @@ void TimelineWidget::DrawSecondTicks(QPainter* painter)
|
|||||||
{
|
{
|
||||||
const QPen ltgray(QColor(110, 110, 110));
|
const QPen ltgray(QColor(110, 110, 110));
|
||||||
const QPen black(palette().color(QPalette::Normal, QPalette::Text));
|
const QPen black(palette().color(QPalette::Normal, QPalette::Text));
|
||||||
const QPen redpen(QColor(255, 0, 255));
|
|
||||||
|
|
||||||
for (int gx = m_grid.firstGridLine.x(); gx < m_grid.firstGridLine.x() + m_grid.numGridLines.x() + 1; gx++)
|
for (int gx = m_grid.firstGridLine.x(); gx < m_grid.firstGridLine.x() + m_grid.numGridLines.x() + 1; gx++)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -832,7 +832,7 @@ QAction* LevelEditorMenuHandler::CreateViewPaneAction(const QtViewPane* view)
|
|||||||
|
|
||||||
if (view->m_options.showOnToolsToolbar)
|
if (view->m_options.showOnToolsToolbar)
|
||||||
{
|
{
|
||||||
action->setIcon(QIcon(view->m_options.toolbarIcon));
|
action->setIcon(QIcon(view->m_options.toolbarIcon.c_str()));
|
||||||
}
|
}
|
||||||
|
|
||||||
m_actionManager->AddAction(view->m_id, action);
|
m_actionManager->AddAction(view->m_id, action);
|
||||||
|
|||||||
+15
-1
@@ -45,6 +45,7 @@ AZ_POP_DISABLE_WARNING
|
|||||||
|
|
||||||
// AzCore
|
// AzCore
|
||||||
#include <AzCore/Casting/numeric_cast.h>
|
#include <AzCore/Casting/numeric_cast.h>
|
||||||
|
#include <AzCore/Component/ComponentApplicationLifecycle.h>
|
||||||
#include <AzCore/Module/Environment.h>
|
#include <AzCore/Module/Environment.h>
|
||||||
#include <AzCore/RTTI/BehaviorContext.h>
|
#include <AzCore/RTTI/BehaviorContext.h>
|
||||||
#include <AzCore/std/smart_ptr/make_shared.h>
|
#include <AzCore/std/smart_ptr/make_shared.h>
|
||||||
@@ -1686,6 +1687,11 @@ bool CCryEditApp::InitInstance()
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (AZ::SettingsRegistryInterface* settingsRegistry = AZ::SettingsRegistry::Get())
|
||||||
|
{
|
||||||
|
AZ::ComponentApplicationLifecycle::SignalEvent(*settingsRegistry, "LegacySystemInterfaceCreated", R"({})");
|
||||||
|
}
|
||||||
|
|
||||||
// Process some queued events come from system init
|
// Process some queued events come from system init
|
||||||
// Such as asset catalog loaded notification.
|
// Such as asset catalog loaded notification.
|
||||||
// There are some systems need to load configurations from assets for post initialization but before loading level
|
// There are some systems need to load configurations from assets for post initialization but before loading level
|
||||||
@@ -4137,7 +4143,15 @@ extern "C" int AZ_DLL_EXPORT CryEditMain(int argc, char* argv[])
|
|||||||
AzQtComponents::Utilities::HandleDpiAwareness(AzQtComponents::Utilities::SystemDpiAware);
|
AzQtComponents::Utilities::HandleDpiAwareness(AzQtComponents::Utilities::SystemDpiAware);
|
||||||
Editor::EditorQtApplication* app = Editor::EditorQtApplication::newInstance(argc, argv);
|
Editor::EditorQtApplication* app = Editor::EditorQtApplication::newInstance(argc, argv);
|
||||||
|
|
||||||
if (app->arguments().contains("-autotest_mode"))
|
QStringList qArgs = app->arguments();
|
||||||
|
const bool is_automated_test = AZStd::any_of(qArgs.begin(), qArgs.end(),
|
||||||
|
[](const QString& elem)
|
||||||
|
{
|
||||||
|
return elem.endsWith("autotest_mode") || elem.endsWith("runpythontest");
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
if (is_automated_test)
|
||||||
{
|
{
|
||||||
// Nullroute all stdout to null for automated tests, this way we make sure
|
// Nullroute all stdout to null for automated tests, this way we make sure
|
||||||
// that the test result output is not polluted with unrelated output data.
|
// that the test result output is not polluted with unrelated output data.
|
||||||
|
|||||||
@@ -431,6 +431,7 @@ public:
|
|||||||
class CCrySingleDocTemplate
|
class CCrySingleDocTemplate
|
||||||
: public QObject
|
: public QObject
|
||||||
{
|
{
|
||||||
|
Q_OBJECT
|
||||||
private:
|
private:
|
||||||
explicit CCrySingleDocTemplate(const QMetaObject* pDocClass)
|
explicit CCrySingleDocTemplate(const QMetaObject* pDocClass)
|
||||||
: QObject()
|
: QObject()
|
||||||
|
|||||||
@@ -12,8 +12,6 @@
|
|||||||
// Notice : Refer to ViewportTitleDlg.cpp for a use case.
|
// Notice : Refer to ViewportTitleDlg.cpp for a use case.
|
||||||
|
|
||||||
|
|
||||||
#ifndef CRYINCLUDE_EDITOR_CUSTOMRESOLUTIONDLG_H
|
|
||||||
#define CRYINCLUDE_EDITOR_CUSTOMRESOLUTIONDLG_H
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#if !defined(Q_MOC_RUN)
|
#if !defined(Q_MOC_RUN)
|
||||||
@@ -28,6 +26,7 @@ namespace Ui
|
|||||||
class CCustomResolutionDlg
|
class CCustomResolutionDlg
|
||||||
: public QDialog
|
: public QDialog
|
||||||
{
|
{
|
||||||
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
CCustomResolutionDlg(int w, int h, QWidget* pParent = nullptr);
|
CCustomResolutionDlg(int w, int h, QWidget* pParent = nullptr);
|
||||||
~CCustomResolutionDlg();
|
~CCustomResolutionDlg();
|
||||||
@@ -42,5 +41,3 @@ protected:
|
|||||||
|
|
||||||
QScopedPointer<Ui::CustomResolutionDlg> m_ui;
|
QScopedPointer<Ui::CustomResolutionDlg> m_ui;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // CRYINCLUDE_EDITOR_CUSTOMRESOLUTIONDLG_H
|
|
||||||
|
|||||||
@@ -211,9 +211,9 @@ public:
|
|||||||
|
|
||||||
void Reset(QAction& action)
|
void Reset(QAction& action)
|
||||||
{
|
{
|
||||||
emit beginResetModel();
|
beginResetModel();
|
||||||
m_action = &action;
|
m_action = &action;
|
||||||
emit endResetModel();
|
endResetModel();
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@@ -266,7 +266,7 @@ QStringList CustomizeKeyboardDialog::BuildModels(QWidget* parent)
|
|||||||
categories.append(category);
|
categories.append(category);
|
||||||
|
|
||||||
QMenu* menu = menuAction->menu();
|
QMenu* menu = menuAction->menu();
|
||||||
m_menuActions[category] = GetAllActionsForMenu(menu, QStringLiteral(""));
|
m_menuActions[category] = GetAllActionsForMenu(menu, QString());
|
||||||
}
|
}
|
||||||
|
|
||||||
return categories;
|
return categories;
|
||||||
|
|||||||
@@ -25,9 +25,9 @@ namespace SandboxEditor
|
|||||||
connect(m_ui->okButton, &QPushButton::clicked, this, &ErrorDialog::OnOK);
|
connect(m_ui->okButton, &QPushButton::clicked, this, &ErrorDialog::OnOK);
|
||||||
connect(
|
connect(
|
||||||
m_ui->messages,
|
m_ui->messages,
|
||||||
SIGNAL(itemSelectionChanged()),
|
&QTreeWidget::itemSelectionChanged,
|
||||||
this,
|
this,
|
||||||
SLOT(MessageSelectionChanged()));
|
&ErrorDialog::MessageSelectionChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
ErrorDialog::~ErrorDialog()
|
ErrorDialog::~ErrorDialog()
|
||||||
|
|||||||
@@ -240,7 +240,7 @@ QJsonObject KeyboardCustomizationSettings::ExportGroup()
|
|||||||
|
|
||||||
void KeyboardCustomizationSettings::ImportFromFile(QWidget* parent)
|
void KeyboardCustomizationSettings::ImportFromFile(QWidget* parent)
|
||||||
{
|
{
|
||||||
QString fileName = QFileDialog::getOpenFileName(parent, QObject::tr("Export Keyboard Shortcuts"), QStringLiteral(""), QObject::tr("Keyboard Settings (*.keys)"));
|
QString fileName = QFileDialog::getOpenFileName(parent, QObject::tr("Export Keyboard Shortcuts"), QString(), QObject::tr("Keyboard Settings (*.keys)"));
|
||||||
if (fileName.isEmpty())
|
if (fileName.isEmpty())
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -85,6 +85,7 @@ namespace UnitTest
|
|||||||
|
|
||||||
m_rootWidget = AZStd::make_unique<QWidget>();
|
m_rootWidget = AZStd::make_unique<QWidget>();
|
||||||
m_rootWidget->setFixedSize(QSize(100, 100));
|
m_rootWidget->setFixedSize(QSize(100, 100));
|
||||||
|
QApplication::setActiveWindow(m_rootWidget.get());
|
||||||
|
|
||||||
m_controllerList = AZStd::make_shared<AzFramework::ViewportControllerList>();
|
m_controllerList = AZStd::make_shared<AzFramework::ViewportControllerList>();
|
||||||
m_controllerList->RegisterViewportContext(TestViewportId);
|
m_controllerList->RegisterViewportContext(TestViewportId);
|
||||||
@@ -100,6 +101,8 @@ namespace UnitTest
|
|||||||
m_controllerList.reset();
|
m_controllerList.reset();
|
||||||
m_rootWidget.reset();
|
m_rootWidget.reset();
|
||||||
|
|
||||||
|
QApplication::setActiveWindow(nullptr);
|
||||||
|
|
||||||
AllocatorsTestFixture::TearDown();
|
AllocatorsTestFixture::TearDown();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -110,7 +113,7 @@ namespace UnitTest
|
|||||||
|
|
||||||
const AzFramework::ViewportId ViewportManipulatorControllerFixture::TestViewportId = AzFramework::ViewportId(0);
|
const AzFramework::ViewportId ViewportManipulatorControllerFixture::TestViewportId = AzFramework::ViewportId(0);
|
||||||
|
|
||||||
TEST_F(ViewportManipulatorControllerFixture, An_event_is_not_propagated_to_the_viewport_when_a_manipulator_handles_it_first)
|
TEST_F(ViewportManipulatorControllerFixture, AnEventIsNotPropagatedToTheViewportWhenAManipulatorHandlesItFirst)
|
||||||
{
|
{
|
||||||
// forward input events to our controller list
|
// forward input events to our controller list
|
||||||
QObject::connect(
|
QObject::connect(
|
||||||
@@ -151,4 +154,77 @@ namespace UnitTest
|
|||||||
|
|
||||||
editorInteractionViewportFake.Disconnect();
|
editorInteractionViewportFake.Disconnect();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(ViewportManipulatorControllerFixture, ChangingFocusDoesNotClearInput)
|
||||||
|
{
|
||||||
|
bool endedEvent = false;
|
||||||
|
// detect input events and ensure that the Alt key press does not end before the end of the test
|
||||||
|
QObject::connect(
|
||||||
|
m_inputChannelMapper.get(), &AzToolsFramework::QtEventToAzInputMapper::InputChannelUpdated, m_rootWidget.get(),
|
||||||
|
[&endedEvent](const AzFramework::InputChannel* inputChannel, [[maybe_unused]] QEvent* event)
|
||||||
|
{
|
||||||
|
if (inputChannel->GetInputChannelId() == AzFramework::InputDeviceKeyboard::Key::ModifierAltL &&
|
||||||
|
inputChannel->IsStateEnded())
|
||||||
|
{
|
||||||
|
endedEvent = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// given
|
||||||
|
auto* secondaryWidget = new QWidget(m_rootWidget.get());
|
||||||
|
|
||||||
|
m_rootWidget->show();
|
||||||
|
secondaryWidget->show();
|
||||||
|
|
||||||
|
m_rootWidget->setFocus();
|
||||||
|
|
||||||
|
// simulate a key press when root widget has focus
|
||||||
|
QTest::keyPress(m_rootWidget.get(), Qt::Key_Alt, Qt::KeyboardModifier::AltModifier);
|
||||||
|
|
||||||
|
// when
|
||||||
|
// change focus to secondary widget
|
||||||
|
secondaryWidget->setFocus();
|
||||||
|
|
||||||
|
// then
|
||||||
|
// the alt key was not released (cleared)
|
||||||
|
EXPECT_FALSE(endedEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
// note: Application State Change includes events such as switching to another application or minimizing
|
||||||
|
// the current application
|
||||||
|
TEST_F(ViewportManipulatorControllerFixture, ApplicationStateChangeDoesClearInput)
|
||||||
|
{
|
||||||
|
bool endedEvent = false;
|
||||||
|
// detect input events and ensure that the Alt key press does not end before the end of the test
|
||||||
|
QObject::connect(
|
||||||
|
m_inputChannelMapper.get(), &AzToolsFramework::QtEventToAzInputMapper::InputChannelUpdated, m_rootWidget.get(),
|
||||||
|
[&endedEvent](const AzFramework::InputChannel* inputChannel, [[maybe_unused]] QEvent* event)
|
||||||
|
{
|
||||||
|
if (inputChannel->GetInputChannelId() == AzFramework::InputDeviceKeyboard::Key::AlphanumericW &&
|
||||||
|
inputChannel->IsStateEnded())
|
||||||
|
{
|
||||||
|
endedEvent = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// given
|
||||||
|
auto* secondaryWidget = new QWidget(m_rootWidget.get());
|
||||||
|
|
||||||
|
m_rootWidget->show();
|
||||||
|
secondaryWidget->show();
|
||||||
|
|
||||||
|
m_rootWidget->setFocus();
|
||||||
|
|
||||||
|
// simulate a key press when root widget has focus
|
||||||
|
QTest::keyPress(m_rootWidget.get(), Qt::Key_W);
|
||||||
|
|
||||||
|
// when
|
||||||
|
// simulate changing the window state
|
||||||
|
QApplicationStateChangeEvent applicationStateChangeEvent(Qt::ApplicationState::ApplicationInactive);
|
||||||
|
QCoreApplication::sendEvent(m_rootWidget.get(), &applicationStateChangeEvent);
|
||||||
|
|
||||||
|
// then
|
||||||
|
// the key was released (cleared)
|
||||||
|
EXPECT_TRUE(endedEvent);
|
||||||
|
}
|
||||||
} // namespace UnitTest
|
} // namespace UnitTest
|
||||||
|
|||||||
@@ -419,7 +419,7 @@ void MemoryStatusItem::updateStatus()
|
|||||||
GeneralStatusItem::GeneralStatusItem(QString name, MainStatusBar* parent)
|
GeneralStatusItem::GeneralStatusItem(QString name, MainStatusBar* parent)
|
||||||
: StatusBarItem(name, parent)
|
: StatusBarItem(name, parent)
|
||||||
{
|
{
|
||||||
connect(parent, SIGNAL(messageChanged(QString)), this, SLOT(update()));
|
connect(parent, &MainStatusBar::messageChanged, this, [this](const QString&) { update(); });
|
||||||
}
|
}
|
||||||
|
|
||||||
QString GeneralStatusItem::CurrentText() const
|
QString GeneralStatusItem::CurrentText() const
|
||||||
|
|||||||
@@ -100,9 +100,10 @@ CNewLevelDialog::CNewLevelDialog(QWidget* pParent /*=nullptr*/)
|
|||||||
m_level = "";
|
m_level = "";
|
||||||
// First of all, keyboard focus is related to widget tab order, and the default tab order is based on the order in which
|
// First of all, keyboard focus is related to widget tab order, and the default tab order is based on the order in which
|
||||||
// widgets are constructed. Therefore, creating more widgets changes the keyboard focus. That is why setFocus() is called last.
|
// widgets are constructed. Therefore, creating more widgets changes the keyboard focus. That is why setFocus() is called last.
|
||||||
// Secondly, using singleShot() allows setFocus() slot of the QLineEdit instance to be invoked right after the event system
|
// in OnStartup()
|
||||||
// is ready to do so. Therefore, it is better to use singleShot() than directly call setFocus().
|
// Secondly, using singleShot() allows OnStartup() slot of the QLineEdit instance to be invoked right after the event system
|
||||||
QTimer::singleShot(0, ui->LEVEL, SLOT(OnStartup()));
|
// is ready to do so. Therefore, it is better to use singleShot() than directly call OnStartup().
|
||||||
|
QTimer::singleShot(0, this, &CNewLevelDialog::OnStartup);
|
||||||
|
|
||||||
ReloadLevelFolder();
|
ReloadLevelFolder();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,6 +38,7 @@
|
|||||||
#include <AzToolsFramework/Commands/EntityStateCommand.h>
|
#include <AzToolsFramework/Commands/EntityStateCommand.h>
|
||||||
#include <AzToolsFramework/Commands/SelectionCommand.h>
|
#include <AzToolsFramework/Commands/SelectionCommand.h>
|
||||||
#include <AzToolsFramework/Commands/SliceDetachEntityCommand.h>
|
#include <AzToolsFramework/Commands/SliceDetachEntityCommand.h>
|
||||||
|
#include <AzToolsFramework/ContainerEntity/ContainerEntityInterface.h>
|
||||||
#include <AzToolsFramework/Editor/EditorContextMenuBus.h>
|
#include <AzToolsFramework/Editor/EditorContextMenuBus.h>
|
||||||
#include <AzToolsFramework/Entity/EditorEntityHelpers.h>
|
#include <AzToolsFramework/Entity/EditorEntityHelpers.h>
|
||||||
#include <AzToolsFramework/Entity/EditorEntityInfoBus.h>
|
#include <AzToolsFramework/Entity/EditorEntityInfoBus.h>
|
||||||
@@ -642,6 +643,9 @@ void SandboxIntegrationManager::PopulateEditorGlobalContextMenu(QMenu* menu, con
|
|||||||
AzToolsFramework::EntityIdList selected;
|
AzToolsFramework::EntityIdList selected;
|
||||||
GetSelectedOrHighlightedEntities(selected);
|
GetSelectedOrHighlightedEntities(selected);
|
||||||
|
|
||||||
|
bool prefabSystemEnabled = false;
|
||||||
|
AzFramework::ApplicationRequests::Bus::BroadcastResult(prefabSystemEnabled, &AzFramework::ApplicationRequests::IsPrefabSystemEnabled);
|
||||||
|
|
||||||
QAction* action = nullptr;
|
QAction* action = nullptr;
|
||||||
|
|
||||||
// when nothing is selected, entity is created at root level
|
// when nothing is selected, entity is created at root level
|
||||||
@@ -658,18 +662,20 @@ void SandboxIntegrationManager::PopulateEditorGlobalContextMenu(QMenu* menu, con
|
|||||||
// when a single entity is selected, entity is created as its child
|
// when a single entity is selected, entity is created as its child
|
||||||
else if (selected.size() == 1)
|
else if (selected.size() == 1)
|
||||||
{
|
{
|
||||||
action = menu->addAction(QObject::tr("Create entity"));
|
auto containerEntityInterface = AZ::Interface<AzToolsFramework::ContainerEntityInterface>::Get();
|
||||||
QObject::connect(
|
if (!prefabSystemEnabled || (containerEntityInterface && containerEntityInterface->IsContainerOpen(selected.front())))
|
||||||
action, &QAction::triggered, action,
|
{
|
||||||
[selected]
|
action = menu->addAction(QObject::tr("Create entity"));
|
||||||
{
|
QObject::connect(
|
||||||
EBUS_EVENT(AzToolsFramework::EditorRequests::Bus, CreateNewEntityAsChild, selected.front());
|
action, &QAction::triggered, action,
|
||||||
});
|
[selected]
|
||||||
|
{
|
||||||
|
AzToolsFramework::EditorRequestBus::Broadcast(&AzToolsFramework::EditorRequestBus::Handler::CreateNewEntityAsChild, selected.front());
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool prefabSystemEnabled = false;
|
|
||||||
AzFramework::ApplicationRequests::Bus::BroadcastResult(prefabSystemEnabled, &AzFramework::ApplicationRequests::IsPrefabSystemEnabled);
|
|
||||||
|
|
||||||
if (!prefabSystemEnabled)
|
if (!prefabSystemEnabled)
|
||||||
{
|
{
|
||||||
menu->addSeparator();
|
menu->addSeparator();
|
||||||
|
|||||||
@@ -197,48 +197,46 @@ AssetCatalogModel::~AssetCatalogModel()
|
|||||||
AzFramework::AssetCatalogEventBus::Handler::BusDisconnect();
|
AzFramework::AssetCatalogEventBus::Handler::BusDisconnect();
|
||||||
}
|
}
|
||||||
|
|
||||||
AZ::Data::AssetType AssetCatalogModel::GetAssetType(QString filename) const
|
AZ::Data::AssetType AssetCatalogModel::GetAssetType(const QString &filename) const
|
||||||
{
|
{
|
||||||
AZ::Data::AssetType returnType = AZ::Uuid::CreateNull();
|
|
||||||
|
|
||||||
// Compare file extensions with the map created from the asset database.
|
// Compare file extensions with the map created from the asset database.
|
||||||
int dotIndex = filename.lastIndexOf('.');
|
int dotIndex = filename.lastIndexOf('.');
|
||||||
if (dotIndex >= 0)
|
if (dotIndex < 0)
|
||||||
{
|
{
|
||||||
QString extension = filename.mid(dotIndex);
|
return AZ::Uuid::CreateNull();
|
||||||
for (auto pair : m_extensionToAssetType)
|
}
|
||||||
{
|
|
||||||
QString qExtensions = pair.first.c_str();
|
|
||||||
if (qExtensions.indexOf(extension) >= 0)
|
|
||||||
{
|
|
||||||
if (pair.second.size() > 1)
|
|
||||||
{
|
|
||||||
// There are multiple types with this extension. Check each handler to see if they can handle this data type.
|
|
||||||
AZStd::string azFilename = filename.toStdString().c_str();
|
|
||||||
EBUS_EVENT(AzFramework::ApplicationRequests::Bus, MakePathAssetRootRelative, azFilename);
|
|
||||||
AZ::Data::AssetId assetId;
|
|
||||||
EBUS_EVENT_RESULT(assetId, AZ::Data::AssetCatalogRequestBus, GetAssetIdByPath, azFilename.c_str(), AZ::Data::s_invalidAssetType, false);
|
|
||||||
|
|
||||||
for (AZ::Uuid type : pair.second)
|
QStringRef extension = filename.midRef(dotIndex);
|
||||||
{
|
for (const auto& pair : m_extensionToAssetType)
|
||||||
const AZ::Data::AssetHandler* handler = AZ::Data::AssetManager::Instance().GetHandler(type);
|
{
|
||||||
if (handler && handler->CanHandleAsset(assetId))
|
QString qExtensions = pair.first.c_str();
|
||||||
{
|
if (qExtensions.indexOf(extension) < 0 || pair.second.empty())
|
||||||
returnType = type;
|
{
|
||||||
break;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
if (pair.second.size() == 1)
|
||||||
}
|
{
|
||||||
else
|
return pair.second[0];
|
||||||
{
|
}
|
||||||
returnType = pair.second[0];
|
|
||||||
break;
|
// There are multiple types with this extension. Search for a handler that can handle this data type.
|
||||||
}
|
AZStd::string azFilename = filename.toStdString().c_str();
|
||||||
|
EBUS_EVENT(AzFramework::ApplicationRequests::Bus, MakePathAssetRootRelative, azFilename);
|
||||||
|
AZ::Data::AssetId assetId;
|
||||||
|
EBUS_EVENT_RESULT(assetId, AZ::Data::AssetCatalogRequestBus, GetAssetIdByPath, azFilename.c_str(), AZ::Data::s_invalidAssetType, false);
|
||||||
|
|
||||||
|
for (const AZ::Uuid& type : pair.second)
|
||||||
|
{
|
||||||
|
const AZ::Data::AssetHandler* handler = AZ::Data::AssetManager::Instance().GetHandler(type);
|
||||||
|
if (handler && handler->CanHandleAsset(assetId))
|
||||||
|
{
|
||||||
|
return type;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return returnType;
|
return AZ::Uuid::CreateNull();
|
||||||
}
|
}
|
||||||
|
|
||||||
QStandardItem* AssetCatalogModel::GetPath(QString& path, bool createIfNeeded, QStandardItem* parent)
|
QStandardItem* AssetCatalogModel::GetPath(QString& path, bool createIfNeeded, QStandardItem* parent)
|
||||||
@@ -419,7 +417,7 @@ AssetCatalogEntry* AssetCatalogModel::AddAsset(QString assetPath, AZ::Data::Asse
|
|||||||
// icons' memory being reclaimed and crashing the Editor.
|
// icons' memory being reclaimed and crashing the Editor.
|
||||||
QSize size = fileIcon.actualSize(QSize(16, 16));
|
QSize size = fileIcon.actualSize(QSize(16, 16));
|
||||||
QIcon deepCopy = fileIcon.pixmap(size).copy(0, 0, size.width(), size.height());
|
QIcon deepCopy = fileIcon.pixmap(size).copy(0, 0, size.width(), size.height());
|
||||||
|
|
||||||
if (!fileIcon.isNull())
|
if (!fileIcon.isNull())
|
||||||
{
|
{
|
||||||
m_assetTypeToIcon[assetType] = deepCopy;
|
m_assetTypeToIcon[assetType] = deepCopy;
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ protected:
|
|||||||
void SetFilterRegExp(const AZStd::string& filterType, const QRegExp& regExp);
|
void SetFilterRegExp(const AZStd::string& filterType, const QRegExp& regExp);
|
||||||
void ClearFilterRegExp(const AZStd::string& filterType = AZStd::string());
|
void ClearFilterRegExp(const AZStd::string& filterType = AZStd::string());
|
||||||
|
|
||||||
AZ::Data::AssetType GetAssetType(QString filename) const;
|
AZ::Data::AssetType GetAssetType(const QString &filename) const;
|
||||||
QStandardItem* GetPath(QString& path, bool createIfNeeded, QStandardItem* parent = nullptr);
|
QStandardItem* GetPath(QString& path, bool createIfNeeded, QStandardItem* parent = nullptr);
|
||||||
|
|
||||||
void ApplyFilter(QStandardItem* parent);
|
void ApplyFilter(QStandardItem* parent);
|
||||||
|
|||||||
@@ -56,15 +56,21 @@ namespace AZ::ComponentApplicationLifecycle
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool RegisterHandler(AZ::SettingsRegistryInterface& settingsRegistry, AZ::SettingsRegistryInterface::NotifyEventHandler& handler,
|
bool RegisterHandler(AZ::SettingsRegistryInterface& settingsRegistry, AZ::SettingsRegistryInterface::NotifyEventHandler& handler,
|
||||||
AZ::SettingsRegistryInterface::NotifyCallback callback, AZStd::string_view eventName)
|
AZ::SettingsRegistryInterface::NotifyCallback callback, AZStd::string_view eventName, bool autoRegisterEvent)
|
||||||
{
|
{
|
||||||
using FixedValueString = AZ::SettingsRegistryInterface::FixedValueString;
|
using FixedValueString = AZ::SettingsRegistryInterface::FixedValueString;
|
||||||
using Type = AZ::SettingsRegistryInterface::Type;
|
using Type = AZ::SettingsRegistryInterface::Type;
|
||||||
using NotifyEventHandler = AZ::SettingsRegistryInterface::NotifyEventHandler;
|
using NotifyEventHandler = AZ::SettingsRegistryInterface::NotifyEventHandler;
|
||||||
|
|
||||||
if (!ValidateEvent(settingsRegistry, eventName))
|
// Some systems may attempt to register a handler before the settings registry has been loaded
|
||||||
|
// If so, this flag lets them automatically register an event if it hasn't yet been registered.
|
||||||
|
// RegisterEvent calls validate event.
|
||||||
|
if ((!autoRegisterEvent && !ValidateEvent(settingsRegistry, eventName)) ||
|
||||||
|
(autoRegisterEvent && !RegisterEvent(settingsRegistry, eventName)))
|
||||||
{
|
{
|
||||||
AZ_Warning("ComponentApplicationLifecycle", false, R"(Cannot register event %.*s. Name does is not a field of object "%.*s".)"
|
AZ_Warning(
|
||||||
|
"ComponentApplicationLifecycle", false,
|
||||||
|
R"(Cannot register event %.*s. Name is not a field of object "%.*s".)"
|
||||||
R"( Please make sure the entry exists in the '<engine-root>/Registry/application_lifecycle_events.setreg")"
|
R"( Please make sure the entry exists in the '<engine-root>/Registry/application_lifecycle_events.setreg")"
|
||||||
" or in *.setreg within the project", AZ_STRING_ARG(eventName), AZ_STRING_ARG(ApplicationLifecycleEventRegistrationKey));
|
" or in *.setreg within the project", AZ_STRING_ARG(eventName), AZ_STRING_ARG(ApplicationLifecycleEventRegistrationKey));
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
namespace AZ::ComponentApplicationLifecycle
|
namespace AZ::ComponentApplicationLifecycle
|
||||||
{
|
{
|
||||||
//! Root Key where lifecycle events should be registered under
|
//! Root Key where lifecycle events should be registered under
|
||||||
inline constexpr AZStd::string_view ApplicationLifecycleEventRegistrationKey = "/O3DE/Runtime/Application/LifecycleEvents";
|
inline constexpr AZStd::string_view ApplicationLifecycleEventRegistrationKey = "/O3DE/Application/LifecycleEvents";
|
||||||
|
|
||||||
|
|
||||||
//! Validates that the event @eventName is stored in the array at ApplicationLifecycleEventRegistrationKey
|
//! Validates that the event @eventName is stored in the array at ApplicationLifecycleEventRegistrationKey
|
||||||
@@ -48,7 +48,9 @@ namespace AZ::ComponentApplicationLifecycle
|
|||||||
//! if the specified @eventName passes validation
|
//! if the specified @eventName passes validation
|
||||||
//! @param callback will be moved into the handler if the specified @eventName is valid
|
//! @param callback will be moved into the handler if the specified @eventName is valid
|
||||||
//! @param eventName name of key underneath the ApplicationLifecycleEventRegistrationKey to register
|
//! @param eventName name of key underneath the ApplicationLifecycleEventRegistrationKey to register
|
||||||
|
//! @param autoRegisterEvent automatically register this event if it hasn't been registered yet. This is useful
|
||||||
|
//! when registering a handler before the settings registry has been loaded.
|
||||||
//! @return true if the handler was registered with the SettingsRegistry NotifyEvent
|
//! @return true if the handler was registered with the SettingsRegistry NotifyEvent
|
||||||
bool RegisterHandler(AZ::SettingsRegistryInterface& settingsRegistry, AZ::SettingsRegistryInterface::NotifyEventHandler& handler,
|
bool RegisterHandler(AZ::SettingsRegistryInterface& settingsRegistry, AZ::SettingsRegistryInterface::NotifyEventHandler& handler,
|
||||||
AZ::SettingsRegistryInterface::NotifyCallback callback, AZStd::string_view eventName);
|
AZ::SettingsRegistryInterface::NotifyCallback callback, AZStd::string_view eventName, bool autoRegisterEvent = false);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -168,6 +168,11 @@ namespace AZ
|
|||||||
|
|
||||||
//! Rotation modifiers
|
//! Rotation modifiers
|
||||||
//! @{
|
//! @{
|
||||||
|
//! Set the world rotation matrix using the composition of rotations around
|
||||||
|
//! the principle axes in the order of z-axis first and y-axis and then x-axis.
|
||||||
|
//! @param eulerRadianAngles A Vector3 denoting radian angles of the rotations around each principle axis.
|
||||||
|
virtual void SetWorldRotation([[maybe_unused]] const AZ::Vector3& eulerAnglesRadian) {}
|
||||||
|
|
||||||
//! Sets the entity's rotation in the world in quaternion notation.
|
//! Sets the entity's rotation in the world in quaternion notation.
|
||||||
//! The origin of the axes is the entity's position in world space.
|
//! The origin of the axes is the entity's position in world space.
|
||||||
//! @param quaternion A quaternion that represents the rotation to use for the entity.
|
//! @param quaternion A quaternion that represents the rotation to use for the entity.
|
||||||
|
|||||||
@@ -7,4 +7,63 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <AzCore/Debug/Profiler.h>
|
#include <AzCore/Debug/Profiler.h>
|
||||||
|
#include <AzCore/Debug/ProfilerBus.h>
|
||||||
|
#include <AzCore/Console/IConsole.h>
|
||||||
|
#include <AzCore/Console/ILogger.h>
|
||||||
|
#include <AzCore/Settings/SettingsRegistry.h>
|
||||||
|
|
||||||
|
namespace AZ::Debug
|
||||||
|
{
|
||||||
|
AZStd::string GenerateOutputFile(const char* nameHint)
|
||||||
|
{
|
||||||
|
AZ::IO::FixedMaxPathString captureOutput = GetProfilerCaptureLocation();
|
||||||
|
return AZStd::string::format("%s/capture_%s_%lld.json", captureOutput.c_str(), nameHint, AZStd::GetTimeNowSecond());
|
||||||
|
}
|
||||||
|
|
||||||
|
void ProfilerCaptureFrame([[maybe_unused]] const AZ::ConsoleCommandContainer& arguments)
|
||||||
|
{
|
||||||
|
if (auto profilerSystem = ProfilerSystemInterface::Get(); profilerSystem)
|
||||||
|
{
|
||||||
|
AZStd::string captureFile = GenerateOutputFile("single");
|
||||||
|
AZLOG_INFO("Setting capture file to %s", captureFile.c_str());
|
||||||
|
profilerSystem->CaptureFrame(captureFile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
AZ_CONSOLEFREEFUNC(ProfilerCaptureFrame, AZ::ConsoleFunctorFlags::DontReplicate, "Capture a single frame of profiling data");
|
||||||
|
|
||||||
|
void ProfilerStartCapture([[maybe_unused]] const AZ::ConsoleCommandContainer& arguments)
|
||||||
|
{
|
||||||
|
if (auto profilerSystem = ProfilerSystemInterface::Get(); profilerSystem)
|
||||||
|
{
|
||||||
|
AZStd::string captureFile = GenerateOutputFile("multi");
|
||||||
|
AZLOG_INFO("Setting capture file to %s", captureFile.c_str());
|
||||||
|
profilerSystem->StartCapture(AZStd::move(captureFile));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
AZ_CONSOLEFREEFUNC(ProfilerStartCapture, AZ::ConsoleFunctorFlags::DontReplicate, "Start a multi-frame capture of profiling data");
|
||||||
|
|
||||||
|
void ProfilerEndCapture([[maybe_unused]] const AZ::ConsoleCommandContainer& arguments)
|
||||||
|
{
|
||||||
|
if (auto profilerSystem = ProfilerSystemInterface::Get(); profilerSystem)
|
||||||
|
{
|
||||||
|
profilerSystem->EndCapture();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
AZ_CONSOLEFREEFUNC(ProfilerEndCapture, AZ::ConsoleFunctorFlags::DontReplicate, "End and dump an in-progress continuous capture");
|
||||||
|
|
||||||
|
AZ::IO::FixedMaxPathString GetProfilerCaptureLocation()
|
||||||
|
{
|
||||||
|
AZ::IO::FixedMaxPathString captureOutput;
|
||||||
|
if (AZ::SettingsRegistryInterface* settingsRegistry = AZ::SettingsRegistry::Get(); settingsRegistry)
|
||||||
|
{
|
||||||
|
settingsRegistry->Get(captureOutput, RegistryKey_ProfilerCaptureLocation);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (captureOutput.empty())
|
||||||
|
{
|
||||||
|
captureOutput = ProfilerCaptureLocationFallback;
|
||||||
|
}
|
||||||
|
|
||||||
|
return captureOutput;
|
||||||
|
}
|
||||||
|
} // namespace AZ::Debug
|
||||||
|
|||||||
@@ -9,11 +9,20 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <AzCore/EBus/EBus.h>
|
#include <AzCore/EBus/EBus.h>
|
||||||
|
#include <AzCore/Interface/Interface.h>
|
||||||
|
#include <AzCore/IO/Path/Path_fwd.h>
|
||||||
|
#include <AzCore/std/string/string.h>
|
||||||
|
|
||||||
namespace AZ
|
namespace AZ
|
||||||
{
|
{
|
||||||
namespace Debug
|
namespace Debug
|
||||||
{
|
{
|
||||||
|
//! settings registry entry for specifying where to output profiler captures
|
||||||
|
static constexpr const char* RegistryKey_ProfilerCaptureLocation = "/O3DE/AzCore/Debug/Profiler/CaptureLocation";
|
||||||
|
|
||||||
|
//! fallback value in the event the settings registry isn't ready or doesn't contain the key
|
||||||
|
static constexpr const char* ProfilerCaptureLocationFallback = "@user@/Profiler";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ProfilerNotifications provides a profiler event interface that can be used to update listeners on profiler status
|
* ProfilerNotifications provides a profiler event interface that can be used to update listeners on profiler status
|
||||||
*/
|
*/
|
||||||
@@ -23,32 +32,38 @@ namespace AZ
|
|||||||
public:
|
public:
|
||||||
virtual ~ProfilerNotifications() = default;
|
virtual ~ProfilerNotifications() = default;
|
||||||
|
|
||||||
virtual void OnProfileSystemInitialized() = 0;
|
//! Notify when the current profiler capture is finished
|
||||||
|
//! @param result Set to true if it's finished successfully
|
||||||
|
//! @param info The output file path or error information which depends on the return.
|
||||||
|
virtual void OnCaptureFinished(bool result, const AZStd::string& info) = 0;
|
||||||
};
|
};
|
||||||
using ProfilerNotificationBus = AZ::EBus<ProfilerNotifications>;
|
using ProfilerNotificationBus = AZ::EBus<ProfilerNotifications>;
|
||||||
|
|
||||||
enum class ProfileFrameAdvanceType
|
|
||||||
{
|
|
||||||
Game,
|
|
||||||
Render,
|
|
||||||
Default = Game
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ProfilerRequests provides an interface for making profiling system requests
|
* ProfilerRequests provides an interface for making profiling system requests
|
||||||
*/
|
*/
|
||||||
class ProfilerRequests
|
class ProfilerRequests
|
||||||
: public AZ::EBusTraits
|
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// Allow multiple threads to concurrently make requests
|
AZ_RTTI(ProfilerRequests, "{90AEC117-14C1-4BAE-9704-F916E49EF13F}");
|
||||||
using MutexType = AZStd::mutex;
|
|
||||||
|
|
||||||
virtual ~ProfilerRequests() = default;
|
virtual ~ProfilerRequests() = default;
|
||||||
|
|
||||||
virtual bool IsActive() = 0;
|
//! Getter/setter for the profiler active state
|
||||||
virtual void FrameAdvance(ProfileFrameAdvanceType type) = 0;
|
virtual bool IsActive() const = 0;
|
||||||
|
virtual void SetActive(bool active) = 0;
|
||||||
|
|
||||||
|
//! Capture a single frame of profiling data
|
||||||
|
virtual bool CaptureFrame(const AZStd::string& outputFilePath) = 0;
|
||||||
|
|
||||||
|
//! Starting/ending a multi-frame capture of profiling data
|
||||||
|
virtual bool StartCapture(AZStd::string outputFilePath) = 0;
|
||||||
|
virtual bool EndCapture() = 0;
|
||||||
};
|
};
|
||||||
using ProfilerRequestBus = AZ::EBus<ProfilerRequests>;
|
|
||||||
}
|
using ProfilerSystemInterface = AZ::Interface<ProfilerRequests>;
|
||||||
}
|
|
||||||
|
//! helper function for getting the profiler capture location from the settings registry that
|
||||||
|
//! includes fallback handing in the event the registry value can't be determined
|
||||||
|
AZ::IO::FixedMaxPathString GetProfilerCaptureLocation();
|
||||||
|
} // namespace Debug
|
||||||
|
} // namespace AZ
|
||||||
|
|||||||
@@ -0,0 +1,92 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Contributors to the Open 3D Engine Project.
|
||||||
|
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <AzCore/Debug/ProfilerBus.h>
|
||||||
|
|
||||||
|
#include <AzCore/RTTI/BehaviorContext.h>
|
||||||
|
#include <AzCore/RTTI/BehaviorInterfaceProxy.h>
|
||||||
|
#include <AzCore/Serialization/EditContext.h>
|
||||||
|
#include <AzCore/Serialization/EditContextConstants.inl>
|
||||||
|
|
||||||
|
namespace AZ::Debug
|
||||||
|
{
|
||||||
|
static constexpr const char* ProfilerScriptCategory = "Profiler";
|
||||||
|
static constexpr const char* ProfilerScriptModule = "debug";
|
||||||
|
static constexpr AZ::Script::Attributes::ScopeFlags ProfilerScriptScope = AZ::Script::Attributes::ScopeFlags::Automation;
|
||||||
|
|
||||||
|
class ProfilerNotificationBusHandler final
|
||||||
|
: public ProfilerNotificationBus::Handler
|
||||||
|
, public AZ::BehaviorEBusHandler
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
AZ_EBUS_BEHAVIOR_BINDER(ProfilerNotificationBusHandler, "{44161459-B816-4876-95A4-BA16DEC767D6}", AZ::SystemAllocator,
|
||||||
|
OnCaptureFinished
|
||||||
|
);
|
||||||
|
|
||||||
|
void OnCaptureFinished(bool result, const AZStd::string& info) override
|
||||||
|
{
|
||||||
|
Call(FN_OnCaptureFinished, result, info);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void Reflect(AZ::ReflectContext* context)
|
||||||
|
{
|
||||||
|
if (AZ::BehaviorContext* behaviorContext = azrtti_cast<AZ::BehaviorContext*>(context))
|
||||||
|
{
|
||||||
|
behaviorContext->EBus<ProfilerNotificationBus>("ProfilerNotificationBus")
|
||||||
|
->Attribute(AZ::Script::Attributes::Category, ProfilerScriptCategory)
|
||||||
|
->Attribute(AZ::Script::Attributes::Module, ProfilerScriptModule)
|
||||||
|
->Attribute(AZ::Script::Attributes::Scope, ProfilerScriptScope)
|
||||||
|
->Handler<ProfilerNotificationBusHandler>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class ProfilerSystemScriptProxy
|
||||||
|
: public BehaviorInterfaceProxy<ProfilerRequests>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
AZ_RTTI(ProfilerSystemScriptProxy, "{D671FB70-8B09-4C3A-96CD-06A339F3138E}", BehaviorInterfaceProxy<ProfilerRequests>);
|
||||||
|
|
||||||
|
AZ_BEHAVIOR_INTERFACE(ProfilerSystemScriptProxy, ProfilerRequests);
|
||||||
|
};
|
||||||
|
|
||||||
|
void ProfilerReflect(AZ::ReflectContext* context)
|
||||||
|
{
|
||||||
|
if (AZ::BehaviorContext* behaviorContext = azrtti_cast<AZ::BehaviorContext*>(context))
|
||||||
|
{
|
||||||
|
behaviorContext->ConstantProperty("g_ProfilerSystem", ProfilerSystemScriptProxy::GetProxy)
|
||||||
|
->Attribute(AZ::Script::Attributes::Category, ProfilerScriptCategory)
|
||||||
|
->Attribute(AZ::Script::Attributes::Module, ProfilerScriptModule)
|
||||||
|
->Attribute(AZ::Script::Attributes::Scope, ProfilerScriptScope);
|
||||||
|
|
||||||
|
behaviorContext->Class<ProfilerSystemScriptProxy>("ProfilerSystemInterface")
|
||||||
|
->Attribute(AZ::Script::Attributes::Category, ProfilerScriptCategory)
|
||||||
|
->Attribute(AZ::Script::Attributes::Module, ProfilerScriptModule)
|
||||||
|
->Attribute(AZ::Script::Attributes::Scope, ProfilerScriptScope)
|
||||||
|
|
||||||
|
->Method("IsValid", &ProfilerSystemScriptProxy::IsValid)
|
||||||
|
|
||||||
|
->Method("GetCaptureLocation",
|
||||||
|
[](ProfilerSystemScriptProxy*) -> AZStd::string
|
||||||
|
{
|
||||||
|
AZ::IO::FixedMaxPathString captureOutput = GetProfilerCaptureLocation();
|
||||||
|
return AZStd::string(captureOutput.c_str(), captureOutput.length());
|
||||||
|
})
|
||||||
|
|
||||||
|
->Method("IsActive", ProfilerSystemScriptProxy::WrapMethod<&ProfilerRequests::IsActive>())
|
||||||
|
->Method("SetActive", ProfilerSystemScriptProxy::WrapMethod<&ProfilerRequests::SetActive>())
|
||||||
|
|
||||||
|
->Method("CaptureFrame", ProfilerSystemScriptProxy::WrapMethod<&ProfilerRequests::CaptureFrame>())
|
||||||
|
|
||||||
|
->Method("StartCapture", ProfilerSystemScriptProxy::WrapMethod<&ProfilerRequests::StartCapture>())
|
||||||
|
->Method("EndCapture", ProfilerSystemScriptProxy::WrapMethod<&ProfilerRequests::EndCapture>());
|
||||||
|
}
|
||||||
|
|
||||||
|
ProfilerNotificationBusHandler::Reflect(context);
|
||||||
|
}
|
||||||
|
} // namespace AZ::Debug
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Contributors to the Open 3D Engine Project.
|
||||||
|
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace AZ
|
||||||
|
{
|
||||||
|
class ReflectContext;
|
||||||
|
|
||||||
|
namespace Debug
|
||||||
|
{
|
||||||
|
//! Reflects the profiler bus script bindings
|
||||||
|
void ProfilerReflect(AZ::ReflectContext* context);
|
||||||
|
} // namespace Debug
|
||||||
|
} // namespace AZ
|
||||||
@@ -27,26 +27,21 @@
|
|||||||
#include <AzCore/Console/IConsole.h>
|
#include <AzCore/Console/IConsole.h>
|
||||||
#include <AzCore/std/chrono/chrono.h>
|
#include <AzCore/std/chrono/chrono.h>
|
||||||
|
|
||||||
namespace AZ
|
namespace AZ::Debug
|
||||||
{
|
{
|
||||||
namespace Debug
|
struct StackFrame;
|
||||||
|
|
||||||
|
namespace Platform
|
||||||
{
|
{
|
||||||
struct StackFrame;
|
|
||||||
|
|
||||||
namespace Platform
|
|
||||||
{
|
|
||||||
#if defined(AZ_ENABLE_DEBUG_TOOLS)
|
#if defined(AZ_ENABLE_DEBUG_TOOLS)
|
||||||
bool AttachDebugger();
|
bool AttachDebugger();
|
||||||
bool IsDebuggerPresent();
|
bool IsDebuggerPresent();
|
||||||
void HandleExceptions(bool isEnabled);
|
void HandleExceptions(bool isEnabled);
|
||||||
void DebugBreak();
|
void DebugBreak();
|
||||||
#endif
|
#endif
|
||||||
void Terminate(int exitCode);
|
void Terminate(int exitCode);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
using namespace AZ::Debug;
|
|
||||||
|
|
||||||
namespace DebugInternal
|
namespace DebugInternal
|
||||||
{
|
{
|
||||||
// other threads can trigger fatals and errors, but the same thread should not, to avoid stack overflow.
|
// other threads can trigger fatals and errors, but the same thread should not, to avoid stack overflow.
|
||||||
@@ -60,7 +55,7 @@ namespace AZ
|
|||||||
// Globals
|
// Globals
|
||||||
const int g_maxMessageLength = 4096;
|
const int g_maxMessageLength = 4096;
|
||||||
static const char* g_dbgSystemWnd = "System";
|
static const char* g_dbgSystemWnd = "System";
|
||||||
Trace Debug::g_tracer;
|
Trace g_tracer;
|
||||||
void* g_exceptionInfo = nullptr;
|
void* g_exceptionInfo = nullptr;
|
||||||
|
|
||||||
// Environment var needed to track ignored asserts across systems and disable native UI under certain conditions
|
// Environment var needed to track ignored asserts across systems and disable native UI under certain conditions
|
||||||
@@ -616,4 +611,4 @@ namespace AZ
|
|||||||
val.Set(level);
|
val.Set(level);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} // namspace AZ
|
} // namspace AZ::Debug
|
||||||
|
|||||||
@@ -156,7 +156,10 @@ namespace AZ
|
|||||||
void StreamerComponent::OnTick([[maybe_unused]] float deltaTime, [[maybe_unused]] AZ::ScriptTimePoint time)
|
void StreamerComponent::OnTick([[maybe_unused]] float deltaTime, [[maybe_unused]] AZ::ScriptTimePoint time)
|
||||||
{
|
{
|
||||||
bool isEnabled = false;
|
bool isEnabled = false;
|
||||||
AZ::Debug::ProfilerRequestBus::BroadcastResult(isEnabled, &AZ::Debug::ProfilerRequests::IsActive);
|
if (auto profilerSystem = AZ::Debug::ProfilerSystemInterface::Get(); profilerSystem)
|
||||||
|
{
|
||||||
|
isEnabled = profilerSystem->IsActive();
|
||||||
|
}
|
||||||
|
|
||||||
if (isEnabled)
|
if (isEnabled)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -383,36 +383,36 @@ namespace AZ
|
|||||||
|
|
||||||
AZ_MATH_INLINE bool CmpAllEq(__m128 arg1, __m128 arg2, int32_t mask)
|
AZ_MATH_INLINE bool CmpAllEq(__m128 arg1, __m128 arg2, int32_t mask)
|
||||||
{
|
{
|
||||||
const __m128i compare = CastToInt(CmpNeq(arg1, arg2));
|
const __m128 compare = CmpEq(arg1, arg2);
|
||||||
return (_mm_movemask_epi8(compare) & mask) == 0;
|
return (_mm_movemask_ps(compare) & mask) == mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
AZ_MATH_INLINE bool CmpAllLt(__m128 arg1, __m128 arg2, int32_t mask)
|
AZ_MATH_INLINE bool CmpAllLt(__m128 arg1, __m128 arg2, int32_t mask)
|
||||||
{
|
{
|
||||||
const __m128i compare = CastToInt(CmpGtEq(arg1, arg2));
|
const __m128 compare = CmpLt(arg1, arg2);
|
||||||
return (_mm_movemask_epi8(compare) & mask) == 0;
|
return (_mm_movemask_ps(compare) & mask) == mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
AZ_MATH_INLINE bool CmpAllLtEq(__m128 arg1, __m128 arg2, int32_t mask)
|
AZ_MATH_INLINE bool CmpAllLtEq(__m128 arg1, __m128 arg2, int32_t mask)
|
||||||
{
|
{
|
||||||
const __m128i compare = CastToInt(CmpGt(arg1, arg2));
|
const __m128 compare = CmpLtEq(arg1, arg2);
|
||||||
return (_mm_movemask_epi8(compare) & mask) == 0;
|
return (_mm_movemask_ps(compare) & mask) == mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
AZ_MATH_INLINE bool CmpAllGt(__m128 arg1, __m128 arg2, int32_t mask)
|
AZ_MATH_INLINE bool CmpAllGt(__m128 arg1, __m128 arg2, int32_t mask)
|
||||||
{
|
{
|
||||||
const __m128i compare = CastToInt(CmpLtEq(arg1, arg2));
|
const __m128 compare = CmpGt(arg1, arg2);
|
||||||
return (_mm_movemask_epi8(compare) & mask) == 0;
|
return (_mm_movemask_ps(compare) & mask) == mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
AZ_MATH_INLINE bool CmpAllGtEq(__m128 arg1, __m128 arg2, int32_t mask)
|
AZ_MATH_INLINE bool CmpAllGtEq(__m128 arg1, __m128 arg2, int32_t mask)
|
||||||
{
|
{
|
||||||
const __m128i compare = CastToInt(CmpLt(arg1, arg2));
|
const __m128 compare = CmpGtEq(arg1, arg2);
|
||||||
return (_mm_movemask_epi8(compare) & mask) == 0;
|
return (_mm_movemask_ps(compare) & mask) == mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -331,31 +331,32 @@ namespace AZ
|
|||||||
|
|
||||||
AZ_MATH_INLINE bool Vec1::CmpAllEq(FloatArgType arg1, FloatArgType arg2)
|
AZ_MATH_INLINE bool Vec1::CmpAllEq(FloatArgType arg1, FloatArgType arg2)
|
||||||
{
|
{
|
||||||
return Sse::CmpAllEq(arg1, arg2, 0x000F);
|
// Only check the first bit for Vector1
|
||||||
|
return Sse::CmpAllEq(arg1, arg2, 0b0001);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
AZ_MATH_INLINE bool Vec1::CmpAllLt(FloatArgType arg1, FloatArgType arg2)
|
AZ_MATH_INLINE bool Vec1::CmpAllLt(FloatArgType arg1, FloatArgType arg2)
|
||||||
{
|
{
|
||||||
return Sse::CmpAllLt(arg1, arg2, 0x000F);
|
return Sse::CmpAllLt(arg1, arg2, 0b0001);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
AZ_MATH_INLINE bool Vec1::CmpAllLtEq(FloatArgType arg1, FloatArgType arg2)
|
AZ_MATH_INLINE bool Vec1::CmpAllLtEq(FloatArgType arg1, FloatArgType arg2)
|
||||||
{
|
{
|
||||||
return Sse::CmpAllLtEq(arg1, arg2, 0x000F);
|
return Sse::CmpAllLtEq(arg1, arg2, 0b0001);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
AZ_MATH_INLINE bool Vec1::CmpAllGt(FloatArgType arg1, FloatArgType arg2)
|
AZ_MATH_INLINE bool Vec1::CmpAllGt(FloatArgType arg1, FloatArgType arg2)
|
||||||
{
|
{
|
||||||
return Sse::CmpAllGt(arg1, arg2, 0x000F);
|
return Sse::CmpAllGt(arg1, arg2, 0b0001);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
AZ_MATH_INLINE bool Vec1::CmpAllGtEq(FloatArgType arg1, FloatArgType arg2)
|
AZ_MATH_INLINE bool Vec1::CmpAllGtEq(FloatArgType arg1, FloatArgType arg2)
|
||||||
{
|
{
|
||||||
return Sse::CmpAllGtEq(arg1, arg2, 0x000F);
|
return Sse::CmpAllGtEq(arg1, arg2, 0b0001);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -397,7 +398,7 @@ namespace AZ
|
|||||||
|
|
||||||
AZ_MATH_INLINE bool Vec1::CmpAllEq(Int32ArgType arg1, Int32ArgType arg2)
|
AZ_MATH_INLINE bool Vec1::CmpAllEq(Int32ArgType arg1, Int32ArgType arg2)
|
||||||
{
|
{
|
||||||
return Sse::CmpAllEq(arg1, arg2, 0x000F);
|
return Sse::CmpAllEq(arg1, arg2, 0b0001);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -383,31 +383,32 @@ namespace AZ
|
|||||||
|
|
||||||
AZ_MATH_INLINE bool Vec2::CmpAllEq(FloatArgType arg1, FloatArgType arg2)
|
AZ_MATH_INLINE bool Vec2::CmpAllEq(FloatArgType arg1, FloatArgType arg2)
|
||||||
{
|
{
|
||||||
return Sse::CmpAllEq(arg1, arg2, 0x00FF);
|
// Only check the first two bits for Vector2
|
||||||
|
return Sse::CmpAllEq(arg1, arg2, 0b0011);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
AZ_MATH_INLINE bool Vec2::CmpAllLt(FloatArgType arg1, FloatArgType arg2)
|
AZ_MATH_INLINE bool Vec2::CmpAllLt(FloatArgType arg1, FloatArgType arg2)
|
||||||
{
|
{
|
||||||
return Sse::CmpAllLt(arg1, arg2, 0x00FF);
|
return Sse::CmpAllLt(arg1, arg2, 0b0011);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
AZ_MATH_INLINE bool Vec2::CmpAllLtEq(FloatArgType arg1, FloatArgType arg2)
|
AZ_MATH_INLINE bool Vec2::CmpAllLtEq(FloatArgType arg1, FloatArgType arg2)
|
||||||
{
|
{
|
||||||
return Sse::CmpAllLtEq(arg1, arg2, 0x00FF);
|
return Sse::CmpAllLtEq(arg1, arg2, 0b0011);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
AZ_MATH_INLINE bool Vec2::CmpAllGt(FloatArgType arg1, FloatArgType arg2)
|
AZ_MATH_INLINE bool Vec2::CmpAllGt(FloatArgType arg1, FloatArgType arg2)
|
||||||
{
|
{
|
||||||
return Sse::CmpAllGt(arg1, arg2, 0x00FF);
|
return Sse::CmpAllGt(arg1, arg2, 0b0011);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
AZ_MATH_INLINE bool Vec2::CmpAllGtEq(FloatArgType arg1, FloatArgType arg2)
|
AZ_MATH_INLINE bool Vec2::CmpAllGtEq(FloatArgType arg1, FloatArgType arg2)
|
||||||
{
|
{
|
||||||
return Sse::CmpAllGtEq(arg1, arg2, 0x00FF);
|
return Sse::CmpAllGtEq(arg1, arg2, 0b0011);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -419,31 +419,32 @@ namespace AZ
|
|||||||
|
|
||||||
AZ_MATH_INLINE bool Vec3::CmpAllEq(FloatArgType arg1, FloatArgType arg2)
|
AZ_MATH_INLINE bool Vec3::CmpAllEq(FloatArgType arg1, FloatArgType arg2)
|
||||||
{
|
{
|
||||||
return Sse::CmpAllEq(arg1, arg2, 0x0FFF);
|
// Only check the first three bits for Vector3
|
||||||
|
return Sse::CmpAllEq(arg1, arg2, 0b0111);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
AZ_MATH_INLINE bool Vec3::CmpAllLt(FloatArgType arg1, FloatArgType arg2)
|
AZ_MATH_INLINE bool Vec3::CmpAllLt(FloatArgType arg1, FloatArgType arg2)
|
||||||
{
|
{
|
||||||
return Sse::CmpAllLt(arg1, arg2, 0x0FFF);
|
return Sse::CmpAllLt(arg1, arg2, 0b0111);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
AZ_MATH_INLINE bool Vec3::CmpAllLtEq(FloatArgType arg1, FloatArgType arg2)
|
AZ_MATH_INLINE bool Vec3::CmpAllLtEq(FloatArgType arg1, FloatArgType arg2)
|
||||||
{
|
{
|
||||||
return Sse::CmpAllLtEq(arg1, arg2, 0x0FFF);
|
return Sse::CmpAllLtEq(arg1, arg2, 0b0111);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
AZ_MATH_INLINE bool Vec3::CmpAllGt(FloatArgType arg1, FloatArgType arg2)
|
AZ_MATH_INLINE bool Vec3::CmpAllGt(FloatArgType arg1, FloatArgType arg2)
|
||||||
{
|
{
|
||||||
return Sse::CmpAllGt(arg1, arg2, 0x0FFF);
|
return Sse::CmpAllGt(arg1, arg2, 0b0111);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
AZ_MATH_INLINE bool Vec3::CmpAllGtEq(FloatArgType arg1, FloatArgType arg2)
|
AZ_MATH_INLINE bool Vec3::CmpAllGtEq(FloatArgType arg1, FloatArgType arg2)
|
||||||
{
|
{
|
||||||
return Sse::CmpAllGtEq(arg1, arg2, 0x0FFF);
|
return Sse::CmpAllGtEq(arg1, arg2, 0b0111);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -485,7 +486,7 @@ namespace AZ
|
|||||||
|
|
||||||
AZ_MATH_INLINE bool Vec3::CmpAllEq(Int32ArgType arg1, Int32ArgType arg2)
|
AZ_MATH_INLINE bool Vec3::CmpAllEq(Int32ArgType arg1, Int32ArgType arg2)
|
||||||
{
|
{
|
||||||
return Sse::CmpAllEq(arg1, arg2, 0x0FFF);
|
return Sse::CmpAllEq(arg1, arg2, 0b0111);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -455,31 +455,32 @@ namespace AZ
|
|||||||
|
|
||||||
AZ_MATH_INLINE bool Vec4::CmpAllEq(FloatArgType arg1, FloatArgType arg2)
|
AZ_MATH_INLINE bool Vec4::CmpAllEq(FloatArgType arg1, FloatArgType arg2)
|
||||||
{
|
{
|
||||||
return Sse::CmpAllEq(arg1, arg2, 0xFFFF);
|
// Check the first four bits for Vector4
|
||||||
|
return Sse::CmpAllEq(arg1, arg2, 0b1111);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
AZ_MATH_INLINE bool Vec4::CmpAllLt(FloatArgType arg1, FloatArgType arg2)
|
AZ_MATH_INLINE bool Vec4::CmpAllLt(FloatArgType arg1, FloatArgType arg2)
|
||||||
{
|
{
|
||||||
return Sse::CmpAllLt(arg1, arg2, 0xFFFF);
|
return Sse::CmpAllLt(arg1, arg2, 0b1111);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
AZ_MATH_INLINE bool Vec4::CmpAllLtEq(FloatArgType arg1, FloatArgType arg2)
|
AZ_MATH_INLINE bool Vec4::CmpAllLtEq(FloatArgType arg1, FloatArgType arg2)
|
||||||
{
|
{
|
||||||
return Sse::CmpAllLtEq(arg1, arg2, 0xFFFF);
|
return Sse::CmpAllLtEq(arg1, arg2, 0b1111);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
AZ_MATH_INLINE bool Vec4::CmpAllGt(FloatArgType arg1, FloatArgType arg2)
|
AZ_MATH_INLINE bool Vec4::CmpAllGt(FloatArgType arg1, FloatArgType arg2)
|
||||||
{
|
{
|
||||||
return Sse::CmpAllGt(arg1, arg2, 0xFFFF);
|
return Sse::CmpAllGt(arg1, arg2, 0b1111);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
AZ_MATH_INLINE bool Vec4::CmpAllGtEq(FloatArgType arg1, FloatArgType arg2)
|
AZ_MATH_INLINE bool Vec4::CmpAllGtEq(FloatArgType arg1, FloatArgType arg2)
|
||||||
{
|
{
|
||||||
return Sse::CmpAllGtEq(arg1, arg2, 0xFFFF);
|
return Sse::CmpAllGtEq(arg1, arg2, 0b1111);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -521,7 +522,7 @@ namespace AZ
|
|||||||
|
|
||||||
AZ_MATH_INLINE bool Vec4::CmpAllEq(Int32ArgType arg1, Int32ArgType arg2)
|
AZ_MATH_INLINE bool Vec4::CmpAllEq(Int32ArgType arg1, Int32ArgType arg2)
|
||||||
{
|
{
|
||||||
return Sse::CmpAllEq(arg1, arg2, 0xFFFF);
|
return Sse::CmpAllEq(arg1, arg2, 0b1111);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,126 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Contributors to the Open 3D Engine Project.
|
||||||
|
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0 OR MIT
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <AzCore/Interface/Interface.h>
|
||||||
|
#include <AzCore/Memory/SystemAllocator.h>
|
||||||
|
#include <AzCore/RTTI/RTTI.h>
|
||||||
|
#include <AzCore/std/functional.h>
|
||||||
|
#include <AzCore/std/typetraits/function_traits.h>
|
||||||
|
|
||||||
|
namespace AZ
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Utility class for reflecting an AZ::Interface through the BehaviorContext
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
*
|
||||||
|
* class MyInterface
|
||||||
|
* {
|
||||||
|
* public:
|
||||||
|
* AZ_RTTI(MyInterface, "{BADDF000D-CDCD-CDCD-CDCD-BAAAADF0000D}");
|
||||||
|
* virtual ~MyInterface() = default;
|
||||||
|
*
|
||||||
|
* virtual AZStd::string Foo() = 0;
|
||||||
|
* virtual void Bar(float x, float y) = 0;
|
||||||
|
* };
|
||||||
|
*
|
||||||
|
* class MySystemProxy
|
||||||
|
* : public BehaviorInterfaceProxy<MyInterface>
|
||||||
|
* {
|
||||||
|
* public:
|
||||||
|
* AZ_RTTI(MySystemProxy, "{CDCDCDCD-BAAD-BADD-F00D-CDCDCDCDCDCD}", BehaviorInterfaceProxy<MyInterface>);
|
||||||
|
* AZ_BEHAVIOR_INTERFACE(MySystemProxy, MyInterface);
|
||||||
|
* };
|
||||||
|
*
|
||||||
|
* void Reflect(AZ::ReflectContext* context)
|
||||||
|
* {
|
||||||
|
* if (AZ::BehaviorContext* behaviorContext = azrtti_cast<AZ::BehaviorContext*>(context))
|
||||||
|
* {
|
||||||
|
* behaviorContext->ConstantProperty("g_MySystem", MySystemProxy::GetProxy)
|
||||||
|
* ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common)
|
||||||
|
* ->Attribute(AZ::Script::Attributes::Module, "MyModule");
|
||||||
|
*
|
||||||
|
* behaviorContext->Class<MySystemProxy>("MySystemInterface")
|
||||||
|
* ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common)
|
||||||
|
* ->Attribute(AZ::Script::Attributes::Module, "MyModule")
|
||||||
|
*
|
||||||
|
* ->Method("Foo", MySystemProxy::WrapMethod<&MyInterface::Foo>())
|
||||||
|
* ->Method("Bar", MySystemProxy::WrapMethod<&MyInterface::Bar>());
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
*/
|
||||||
|
template<typename T>
|
||||||
|
class BehaviorInterfaceProxy
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
AZ_CLASS_ALLOCATOR(BehaviorInterfaceProxy, AZ::SystemAllocator, 0);
|
||||||
|
AZ_RTTI(BehaviorInterfaceProxy<T>, "{E7CC8D27-4499-454E-A7DF-3F72FBECD30D}");
|
||||||
|
|
||||||
|
BehaviorInterfaceProxy() = default;
|
||||||
|
virtual ~BehaviorInterfaceProxy() = default;
|
||||||
|
|
||||||
|
//! Stores the instance which will use the provided shared_ptr deleter when the reference count hits zero
|
||||||
|
BehaviorInterfaceProxy(AZStd::shared_ptr<T> sharedInstance)
|
||||||
|
: m_instance(AZStd::move(sharedInstance))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//! Stores the instance which will perform a no-op deleter when the reference count hits zero
|
||||||
|
BehaviorInterfaceProxy(T* rawIntance)
|
||||||
|
: m_instance(rawIntance, [](T*) {})
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//! Returns if the m_instance shared pointer is non-nullptr
|
||||||
|
bool IsValid() const { return m_instance; }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
//! Internal access for use in the derived GetProxy function
|
||||||
|
static T* GetInstance()
|
||||||
|
{
|
||||||
|
T* interfacePtr = AZ::Interface<T>::Get();
|
||||||
|
AZ_Warning("BehaviorInterfaceProxy", interfacePtr,
|
||||||
|
"There is currently no global %s registered with an AZ Interface<T>",
|
||||||
|
AzTypeInfo<T>::Name()
|
||||||
|
);
|
||||||
|
// Don't delete the global instance, it is not owned by the behavior context
|
||||||
|
return interfacePtr;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename... Args>
|
||||||
|
struct MethodWrapper
|
||||||
|
{
|
||||||
|
template<typename Proxy, auto Method>
|
||||||
|
static auto WrapMethod()
|
||||||
|
{
|
||||||
|
using ReturnType = AZStd::function_traits_get_result_t<AZStd::remove_cvref_t<decltype(Method)>>;
|
||||||
|
return [](Proxy* proxy, Args... params) -> ReturnType
|
||||||
|
{
|
||||||
|
if (proxy && proxy->IsValid())
|
||||||
|
{
|
||||||
|
return AZStd::invoke(Method, proxy->m_instance, AZStd::forward<Args>(params)...);
|
||||||
|
}
|
||||||
|
return ReturnType();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
AZStd::shared_ptr<T> m_instance;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define AZ_BEHAVIOR_INTERFACE(ProxyType, InterfaceType) \
|
||||||
|
static ProxyType GetProxy() { return GetInstance(); } \
|
||||||
|
template<auto Method> \
|
||||||
|
static auto WrapMethod() { \
|
||||||
|
using FuncTraits = AZStd::function_traits<AZStd::remove_cvref_t<decltype(Method)>>; \
|
||||||
|
return FuncTraits::template expand_args<MethodWrapper>::template WrapMethod<ProxyType, Method>(); \
|
||||||
|
} \
|
||||||
|
ProxyType() = default; \
|
||||||
|
ProxyType(AZStd::shared_ptr<InterfaceType> sharedInstance) : BehaviorInterfaceProxy(sharedInstance) {} \
|
||||||
|
ProxyType(InterfaceType* rawIntance) : BehaviorInterfaceProxy(rawIntance) {}
|
||||||
|
} // namespace AZ
|
||||||
@@ -14,6 +14,7 @@
|
|||||||
#include <AzCore/Component/ComponentApplication.h>
|
#include <AzCore/Component/ComponentApplication.h>
|
||||||
#include <AzCore/Component/Entity.h>
|
#include <AzCore/Component/Entity.h>
|
||||||
#include <AzCore/Component/TickBus.h>
|
#include <AzCore/Component/TickBus.h>
|
||||||
|
#include <AzCore/Debug/ProfilerReflection.h>
|
||||||
#include <AzCore/Debug/TraceReflection.h>
|
#include <AzCore/Debug/TraceReflection.h>
|
||||||
#include <AzCore/IO/FileIO.h>
|
#include <AzCore/IO/FileIO.h>
|
||||||
#include <AzCore/Math/MathReflection.h>
|
#include <AzCore/Math/MathReflection.h>
|
||||||
@@ -87,6 +88,8 @@ void ScriptSystemComponent::Activate()
|
|||||||
|
|
||||||
AZ::Data::AssetCatalogRequestBus::Broadcast(&AZ::Data::AssetCatalogRequests::AddExtension, "lua");
|
AZ::Data::AssetCatalogRequestBus::Broadcast(&AZ::Data::AssetCatalogRequests::AddExtension, "lua");
|
||||||
AZ::Data::AssetCatalogRequestBus::Broadcast(&AZ::Data::AssetCatalogRequests::AddExtension, "luac");
|
AZ::Data::AssetCatalogRequestBus::Broadcast(&AZ::Data::AssetCatalogRequests::AddExtension, "luac");
|
||||||
|
AZ::Data::AssetCatalogRequestBus::Broadcast(
|
||||||
|
&AZ::Data::AssetCatalogRequests::EnableCatalogForAsset, AZ::AzTypeInfo<AZ::ScriptAsset>::Uuid());
|
||||||
|
|
||||||
if (Data::AssetManager::Instance().IsReady())
|
if (Data::AssetManager::Instance().IsReady())
|
||||||
{
|
{
|
||||||
@@ -925,6 +928,7 @@ void ScriptSystemComponent::Reflect(ReflectContext* reflection)
|
|||||||
// reflect default entity
|
// reflect default entity
|
||||||
MathReflect(behaviorContext);
|
MathReflect(behaviorContext);
|
||||||
ScriptDebug::Reflect(behaviorContext);
|
ScriptDebug::Reflect(behaviorContext);
|
||||||
|
Debug::ProfilerReflect(behaviorContext);
|
||||||
Debug::TraceReflect(behaviorContext);
|
Debug::TraceReflect(behaviorContext);
|
||||||
|
|
||||||
behaviorContext->Class<PlatformID>("Platform")
|
behaviorContext->Class<PlatformID>("Platform")
|
||||||
|
|||||||
@@ -363,7 +363,11 @@ namespace AZ
|
|||||||
{
|
{
|
||||||
++m_graphsRemaining;
|
++m_graphsRemaining;
|
||||||
|
|
||||||
event->m_executor = this; // Used to validate event is not waited for inside a job
|
if (event)
|
||||||
|
{
|
||||||
|
event->IncWaitCount();
|
||||||
|
event->m_executor = this; // Used to validate event is not waited for inside a job
|
||||||
|
}
|
||||||
|
|
||||||
// Submit all tasks that have no inbound edges
|
// Submit all tasks that have no inbound edges
|
||||||
for (Internal::Task& task : graph.Tasks())
|
for (Internal::Task& task : graph.Tasks())
|
||||||
|
|||||||
@@ -20,6 +20,46 @@ namespace AZ
|
|||||||
m_semaphore.acquire();
|
m_semaphore.acquire();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TaskGraphEvent::IncWaitCount()
|
||||||
|
{
|
||||||
|
// guess zero to optimize for single task graph using an event, if multiple are using it then this will take 2+ comp_exch calls
|
||||||
|
int expectedValue = 0;
|
||||||
|
while(!m_waitCount.compare_exchange_weak(expectedValue, expectedValue + 1))
|
||||||
|
{
|
||||||
|
// value will be negative once event is ready to signal or has been signaled. Shouldn't happen.
|
||||||
|
AZ_Assert(expectedValue >= 0, "Called TaskGraphEvent::IncWaitCount on a signalled event");
|
||||||
|
if (expectedValue < 0) // event already signaled, skip
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
void TaskGraphEvent::Signal()
|
||||||
|
{
|
||||||
|
// guess one to optimize for single task graph using an event, if multiple are using it then this will take 2+ comp_exch calls
|
||||||
|
int expectedValue = 1;
|
||||||
|
while(!m_waitCount.compare_exchange_weak(expectedValue, expectedValue - 1))
|
||||||
|
{
|
||||||
|
// It's an error for Signal to be called if no one is waiting, or the event has already been signaled
|
||||||
|
AZ_Assert(expectedValue > 0, "Called TaskGraphEvent::Signal when event is either signaled or unused");
|
||||||
|
if (expectedValue < 0) // return if already signaled
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
if (expectedValue == 1) // This call to Signal decremented the value to 0.
|
||||||
|
{
|
||||||
|
expectedValue = 0;
|
||||||
|
// validate no one incremented the wait count and mark signalling state
|
||||||
|
if (m_waitCount.compare_exchange_strong(expectedValue, -1))
|
||||||
|
{
|
||||||
|
m_semaphore.release();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void TaskToken::PrecedesInternal(TaskToken& comesAfter)
|
void TaskToken::PrecedesInternal(TaskToken& comesAfter)
|
||||||
{
|
{
|
||||||
AZ_Assert(!m_parent.m_submitted, "Cannot mutate a TaskGraph that was previously submitted.");
|
AZ_Assert(!m_parent.m_submitted, "Cannot mutate a TaskGraph that was previously submitted.");
|
||||||
|
|||||||
@@ -61,14 +61,14 @@ namespace AZ
|
|||||||
uint32_t m_index;
|
uint32_t m_index;
|
||||||
};
|
};
|
||||||
|
|
||||||
// A TaskGraphEvent may be used to block until a task graph has finished executing. Usage
|
// A TaskGraphEvent may be used to block until one or more task graphs has finished executing. Usage
|
||||||
// is NOT recommended for the majority of tasks (prefer to simply containing expanding/contracting
|
// is NOT recommended for the majority of tasks (prefer to simply containing expanding/contracting
|
||||||
// the graph without synchronization over the course of the frame). However, the event
|
// the graph without synchronization over the course of the frame). However, the event
|
||||||
// is useful for the edges of the computation graph.
|
// is useful for the edges of the computation graph.
|
||||||
//
|
//
|
||||||
// You are responsible for ensuring the event object lifetime exceeds the task graph lifetime.
|
// You are responsible for ensuring the event object lifetime exceeds the task graph lifetime.
|
||||||
//
|
//
|
||||||
// After the TaskGraphEvent is signaled, you are allowed to reuse the same TaskGraphEvent
|
// After the TaskGraphEvent is signaled, you are NOT allowed to reuse the same TaskGraphEvent
|
||||||
// for a future submission.
|
// for a future submission.
|
||||||
class TaskGraphEvent
|
class TaskGraphEvent
|
||||||
{
|
{
|
||||||
@@ -81,10 +81,12 @@ namespace AZ
|
|||||||
friend class TaskGraph;
|
friend class TaskGraph;
|
||||||
friend class TaskExecutor;
|
friend class TaskExecutor;
|
||||||
|
|
||||||
|
void IncWaitCount();
|
||||||
void Signal();
|
void Signal();
|
||||||
|
|
||||||
AZStd::binary_semaphore m_semaphore;
|
AZStd::binary_semaphore m_semaphore;
|
||||||
TaskExecutor* m_executor = nullptr;
|
AZStd::atomic_int m_waitCount = 0;
|
||||||
|
TaskExecutor* m_executor = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
// The TaskGraph encapsulates a set of tasks and their interdependencies. After adding
|
// The TaskGraph encapsulates a set of tasks and their interdependencies. After adding
|
||||||
|
|||||||
@@ -33,11 +33,6 @@ namespace AZ
|
|||||||
return m_semaphore.try_acquire_for(AZStd::chrono::milliseconds{ 0 });
|
return m_semaphore.try_acquire_for(AZStd::chrono::milliseconds{ 0 });
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void TaskGraphEvent::Signal()
|
|
||||||
{
|
|
||||||
m_semaphore.release();
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename Lambda>
|
template<typename Lambda>
|
||||||
TaskToken TaskGraph::AddTask(TaskDescriptor const& desc, Lambda&& lambda)
|
TaskToken TaskGraph::AddTask(TaskDescriptor const& desc, Lambda&& lambda)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -108,6 +108,8 @@ set(FILES
|
|||||||
Debug/Profiler.inl
|
Debug/Profiler.inl
|
||||||
Debug/Profiler.h
|
Debug/Profiler.h
|
||||||
Debug/ProfilerBus.h
|
Debug/ProfilerBus.h
|
||||||
|
Debug/ProfilerReflection.cpp
|
||||||
|
Debug/ProfilerReflection.h
|
||||||
Debug/StackTracer.h
|
Debug/StackTracer.h
|
||||||
Debug/EventTrace.h
|
Debug/EventTrace.h
|
||||||
Debug/EventTrace.cpp
|
Debug/EventTrace.cpp
|
||||||
@@ -456,6 +458,7 @@ set(FILES
|
|||||||
RTTI/BehaviorContext.h
|
RTTI/BehaviorContext.h
|
||||||
RTTI/BehaviorContextUtilities.h
|
RTTI/BehaviorContextUtilities.h
|
||||||
RTTI/BehaviorContextUtilities.cpp
|
RTTI/BehaviorContextUtilities.cpp
|
||||||
|
RTTI/BehaviorInterfaceProxy.h
|
||||||
RTTI/BehaviorObjectSignals.h
|
RTTI/BehaviorObjectSignals.h
|
||||||
RTTI/TypeSafeIntegral.h
|
RTTI/TypeSafeIntegral.h
|
||||||
Script/ScriptAsset.cpp
|
Script/ScriptAsset.cpp
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
namespace AZ
|
namespace AZ::Debug
|
||||||
{
|
{
|
||||||
#if defined(AZ_ENABLE_DEBUG_TOOLS)
|
#if defined(AZ_ENABLE_DEBUG_TOOLS)
|
||||||
LONG WINAPI ExceptionHandler(PEXCEPTION_POINTERS ExceptionInfo);
|
LONG WINAPI ExceptionHandler(PEXCEPTION_POINTERS ExceptionInfo);
|
||||||
@@ -26,94 +26,91 @@ namespace AZ
|
|||||||
|
|
||||||
constexpr int g_maxMessageLength = 4096;
|
constexpr int g_maxMessageLength = 4096;
|
||||||
|
|
||||||
namespace Debug
|
namespace Platform
|
||||||
{
|
{
|
||||||
namespace Platform
|
|
||||||
{
|
|
||||||
#if defined(AZ_ENABLE_DEBUG_TOOLS)
|
#if defined(AZ_ENABLE_DEBUG_TOOLS)
|
||||||
bool IsDebuggerPresent()
|
bool IsDebuggerPresent()
|
||||||
|
{
|
||||||
|
return ::IsDebuggerPresent() ? true : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void HandleExceptions(bool isEnabled)
|
||||||
|
{
|
||||||
|
if (isEnabled)
|
||||||
{
|
{
|
||||||
return ::IsDebuggerPresent() ? true : false;
|
g_previousExceptionHandler = ::SetUnhandledExceptionFilter(&ExceptionHandler);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
void HandleExceptions(bool isEnabled)
|
|
||||||
{
|
{
|
||||||
if (isEnabled)
|
::SetUnhandledExceptionFilter(g_previousExceptionHandler);
|
||||||
{
|
g_previousExceptionHandler = NULL;
|
||||||
g_previousExceptionHandler = ::SetUnhandledExceptionFilter(&ExceptionHandler);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
::SetUnhandledExceptionFilter(g_previousExceptionHandler);
|
|
||||||
g_previousExceptionHandler = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool AttachDebugger()
|
|
||||||
{
|
|
||||||
if (IsDebuggerPresent())
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Launch vsjitdebugger.exe, this app is always present in System32 folder
|
|
||||||
// with an installation of any version of visual studio.
|
|
||||||
// It will open a debugging dialog asking the user what debugger to use
|
|
||||||
|
|
||||||
STARTUPINFOW startupInfo = {0};
|
|
||||||
startupInfo.cb = sizeof(startupInfo);
|
|
||||||
PROCESS_INFORMATION processInfo = {0};
|
|
||||||
|
|
||||||
wchar_t cmdline[MAX_PATH];
|
|
||||||
swprintf_s(cmdline, L"vsjitdebugger.exe -p %li", ::GetCurrentProcessId());
|
|
||||||
bool success = ::CreateProcessW(
|
|
||||||
NULL, // No module name (use command line)
|
|
||||||
cmdline, // Command line
|
|
||||||
NULL, // Process handle not inheritable
|
|
||||||
NULL, // Thread handle not inheritable
|
|
||||||
FALSE, // No handle inheritance
|
|
||||||
0, // No creation flags
|
|
||||||
NULL, // Use parent's environment block
|
|
||||||
NULL, // Use parent's starting directory
|
|
||||||
&startupInfo, // Pointer to STARTUPINFO structure
|
|
||||||
&processInfo); // Pointer to PROCESS_INFORMATION structure
|
|
||||||
|
|
||||||
if (success)
|
|
||||||
{
|
|
||||||
::WaitForSingleObject(processInfo.hProcess, INFINITE);
|
|
||||||
::CloseHandle(processInfo.hProcess);
|
|
||||||
::CloseHandle(processInfo.hThread);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void DebugBreak()
|
|
||||||
{
|
|
||||||
__debugbreak();
|
|
||||||
}
|
|
||||||
#endif // AZ_ENABLE_DEBUG_TOOLS
|
|
||||||
|
|
||||||
void Terminate(int exitCode)
|
|
||||||
{
|
|
||||||
TerminateProcess(GetCurrentProcess(), exitCode);
|
|
||||||
}
|
|
||||||
|
|
||||||
void OutputToDebugger([[maybe_unused]] const char* window, const char* message)
|
|
||||||
{
|
|
||||||
AZStd::fixed_wstring<g_maxMessageLength> tmpW;
|
|
||||||
if(window)
|
|
||||||
{
|
|
||||||
AZStd::to_wstring(tmpW, window);
|
|
||||||
tmpW += L": ";
|
|
||||||
OutputDebugStringW(tmpW.c_str());
|
|
||||||
tmpW.clear();
|
|
||||||
}
|
|
||||||
AZStd::to_wstring(tmpW, message);
|
|
||||||
OutputDebugStringW(tmpW.c_str());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
bool AttachDebugger()
|
||||||
|
{
|
||||||
|
if (IsDebuggerPresent())
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Launch vsjitdebugger.exe, this app is always present in System32 folder
|
||||||
|
// with an installation of any version of visual studio.
|
||||||
|
// It will open a debugging dialog asking the user what debugger to use
|
||||||
|
|
||||||
|
STARTUPINFOW startupInfo = {0};
|
||||||
|
startupInfo.cb = sizeof(startupInfo);
|
||||||
|
PROCESS_INFORMATION processInfo = {0};
|
||||||
|
|
||||||
|
wchar_t cmdline[MAX_PATH];
|
||||||
|
swprintf_s(cmdline, L"vsjitdebugger.exe -p %li", ::GetCurrentProcessId());
|
||||||
|
bool success = ::CreateProcessW(
|
||||||
|
NULL, // No module name (use command line)
|
||||||
|
cmdline, // Command line
|
||||||
|
NULL, // Process handle not inheritable
|
||||||
|
NULL, // Thread handle not inheritable
|
||||||
|
FALSE, // No handle inheritance
|
||||||
|
0, // No creation flags
|
||||||
|
NULL, // Use parent's environment block
|
||||||
|
NULL, // Use parent's starting directory
|
||||||
|
&startupInfo, // Pointer to STARTUPINFO structure
|
||||||
|
&processInfo); // Pointer to PROCESS_INFORMATION structure
|
||||||
|
|
||||||
|
if (success)
|
||||||
|
{
|
||||||
|
::WaitForSingleObject(processInfo.hProcess, INFINITE);
|
||||||
|
::CloseHandle(processInfo.hProcess);
|
||||||
|
::CloseHandle(processInfo.hThread);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DebugBreak()
|
||||||
|
{
|
||||||
|
__debugbreak();
|
||||||
|
}
|
||||||
|
#endif // AZ_ENABLE_DEBUG_TOOLS
|
||||||
|
|
||||||
|
void Terminate(int exitCode)
|
||||||
|
{
|
||||||
|
TerminateProcess(GetCurrentProcess(), exitCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
void OutputToDebugger([[maybe_unused]] const char* window, const char* message)
|
||||||
|
{
|
||||||
|
AZStd::fixed_wstring<g_maxMessageLength> tmpW;
|
||||||
|
if(window)
|
||||||
|
{
|
||||||
|
AZStd::to_wstring(tmpW, window);
|
||||||
|
tmpW += L": ";
|
||||||
|
OutputDebugStringW(tmpW.c_str());
|
||||||
|
tmpW.clear();
|
||||||
|
}
|
||||||
|
AZStd::to_wstring(tmpW, message);
|
||||||
|
OutputDebugStringW(tmpW.c_str());
|
||||||
|
}
|
||||||
|
} // namespace Platform
|
||||||
|
|
||||||
#if defined(AZ_ENABLE_DEBUG_TOOLS)
|
#if defined(AZ_ENABLE_DEBUG_TOOLS)
|
||||||
|
|
||||||
@@ -187,6 +184,8 @@ namespace AZ
|
|||||||
azsnprintf(message, g_maxMessageLength, "Exception : 0x%lX - '%s' [%p]\n", ExceptionInfo->ExceptionRecord->ExceptionCode, GetExeptionName(ExceptionInfo->ExceptionRecord->ExceptionCode), ExceptionInfo->ExceptionRecord->ExceptionAddress);
|
azsnprintf(message, g_maxMessageLength, "Exception : 0x%lX - '%s' [%p]\n", ExceptionInfo->ExceptionRecord->ExceptionCode, GetExeptionName(ExceptionInfo->ExceptionRecord->ExceptionCode), ExceptionInfo->ExceptionRecord->ExceptionAddress);
|
||||||
Debug::Trace::Instance().Output(nullptr, message);
|
Debug::Trace::Instance().Output(nullptr, message);
|
||||||
|
|
||||||
|
Debug::Trace::Instance().PrintCallstack(nullptr, 0, ExceptionInfo->ContextRecord);
|
||||||
|
|
||||||
EBUS_EVENT(Debug::TraceMessageDrillerBus, OnException, message);
|
EBUS_EVENT(Debug::TraceMessageDrillerBus, OnException, message);
|
||||||
|
|
||||||
bool result = false;
|
bool result = false;
|
||||||
@@ -198,7 +197,7 @@ namespace AZ
|
|||||||
// if someone ever returns TRUE we assume that they somehow handled this exception and continue.
|
// if someone ever returns TRUE we assume that they somehow handled this exception and continue.
|
||||||
return EXCEPTION_CONTINUE_EXECUTION;
|
return EXCEPTION_CONTINUE_EXECUTION;
|
||||||
}
|
}
|
||||||
Debug::Trace::Instance().PrintCallstack(nullptr, 0, ExceptionInfo->ContextRecord);
|
|
||||||
Debug::Trace::Instance().Output(nullptr, "==================================================================\n");
|
Debug::Trace::Instance().Output(nullptr, "==================================================================\n");
|
||||||
|
|
||||||
// allowing continue of execution is not valid here. This handler gets called for serious exceptions.
|
// allowing continue of execution is not valid here. This handler gets called for serious exceptions.
|
||||||
@@ -211,4 +210,4 @@ namespace AZ
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
}
|
} // namspace AZ::Debug
|
||||||
|
|||||||
@@ -610,15 +610,16 @@ namespace UnitTest
|
|||||||
g.Follows(e, f);
|
g.Follows(e, f);
|
||||||
g.Precedes(d);
|
g.Precedes(d);
|
||||||
|
|
||||||
TaskGraphEvent ev;
|
TaskGraphEvent ev1;
|
||||||
graph.SubmitOnExecutor(*m_executor, &ev);
|
graph.SubmitOnExecutor(*m_executor, &ev1);
|
||||||
ev.Wait();
|
ev1.Wait();
|
||||||
|
|
||||||
EXPECT_EQ(3 | 0b100000, x);
|
EXPECT_EQ(3 | 0b100000, x);
|
||||||
x = 0;
|
x = 0;
|
||||||
|
|
||||||
graph.SubmitOnExecutor(*m_executor, &ev);
|
TaskGraphEvent ev2;
|
||||||
ev.Wait();
|
graph.SubmitOnExecutor(*m_executor, &ev2);
|
||||||
|
ev2.Wait();
|
||||||
|
|
||||||
EXPECT_EQ(3 | 0b100000, x);
|
EXPECT_EQ(3 | 0b100000, x);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -204,7 +204,6 @@ namespace AzFramework
|
|||||||
systemEntity->Activate();
|
systemEntity->Activate();
|
||||||
AZ_Assert(systemEntity->GetState() == AZ::Entity::State::Active, "System Entity failed to activate.");
|
AZ_Assert(systemEntity->GetState() == AZ::Entity::State::Active, "System Entity failed to activate.");
|
||||||
|
|
||||||
|
|
||||||
if (m_isStarted = (systemEntity->GetState() == AZ::Entity::State::Active); m_isStarted)
|
if (m_isStarted = (systemEntity->GetState() == AZ::Entity::State::Active); m_isStarted)
|
||||||
{
|
{
|
||||||
if (m_startupParameters.m_loadAssetCatalog)
|
if (m_startupParameters.m_loadAssetCatalog)
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
|
|
||||||
#include <AzCore/Casting/numeric_cast.h>
|
#include <AzCore/Casting/numeric_cast.h>
|
||||||
#include <AzCore/Component/ComponentApplicationBus.h>
|
#include <AzCore/Component/ComponentApplicationBus.h>
|
||||||
|
#include <AzCore/Component/ComponentApplicationLifecycle.h>
|
||||||
#include <AzCore/Console/IConsole.h>
|
#include <AzCore/Console/IConsole.h>
|
||||||
#include <AzCore/Debug/Profiler.h>
|
#include <AzCore/Debug/Profiler.h>
|
||||||
#include <AzCore/Interface/Interface.h>
|
#include <AzCore/Interface/Interface.h>
|
||||||
@@ -363,6 +364,23 @@ namespace AZ::IO
|
|||||||
, m_mainThreadId{ AZStd::this_thread::get_id() }
|
, m_mainThreadId{ AZStd::this_thread::get_id() }
|
||||||
{
|
{
|
||||||
CompressionBus::Handler::BusConnect();
|
CompressionBus::Handler::BusConnect();
|
||||||
|
|
||||||
|
// If the settings registry is not available at this point,
|
||||||
|
// then something catastrophic has happened in the application startup.
|
||||||
|
// That should have been caught and messaged out earlier in startup.
|
||||||
|
if (auto settingsRegistry = AZ::SettingsRegistry::Get(); settingsRegistry != nullptr)
|
||||||
|
{
|
||||||
|
// Automatically register the event if it's not registered, because
|
||||||
|
// this system is initialized before the settings registry has loaded the event list.
|
||||||
|
AZ::ComponentApplicationLifecycle::RegisterHandler(
|
||||||
|
*settingsRegistry, m_componentApplicationLifecycleHandler,
|
||||||
|
[this](AZStd::string_view /*path*/, AZ::SettingsRegistryInterface::Type /*type*/)
|
||||||
|
{
|
||||||
|
OnSystemEntityActivated();
|
||||||
|
},
|
||||||
|
"SystemComponentsActivated",
|
||||||
|
/*autoRegisterEvent*/ true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
@@ -1175,13 +1193,20 @@ namespace AZ::IO
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
auto bundleManifest = GetBundleManifest(desc.pZip);
|
|
||||||
AZStd::shared_ptr<AzFramework::AssetRegistry> bundleCatalog;
|
AZStd::shared_ptr<AzFramework::AssetRegistry> bundleCatalog;
|
||||||
|
auto bundleManifest = GetBundleManifest(desc.pZip);
|
||||||
if (bundleManifest)
|
if (bundleManifest)
|
||||||
{
|
{
|
||||||
bundleCatalog = GetBundleCatalog(desc.pZip, bundleManifest->GetCatalogName());
|
bundleCatalog = GetBundleCatalog(desc.pZip, bundleManifest->GetCatalogName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If this archive is loaded before the serialize context is available, then the manifest and catalog will need to be loaded later.
|
||||||
|
if (!bundleManifest || !bundleCatalog)
|
||||||
|
{
|
||||||
|
m_archivesWithCatalogsToLoad.push_back(
|
||||||
|
ArchivesWithCatalogsToLoad(szFullPath, szBindRoot, flags, nextBundle, desc.m_strFileName));
|
||||||
|
}
|
||||||
|
|
||||||
bool usePrefabSystemForLevels = false;
|
bool usePrefabSystemForLevels = false;
|
||||||
AzFramework::ApplicationRequests::Bus::BroadcastResult(
|
AzFramework::ApplicationRequests::Bus::BroadcastResult(
|
||||||
usePrefabSystemForLevels, &AzFramework::ApplicationRequests::IsPrefabSystemForLevelsEnabled);
|
usePrefabSystemForLevels, &AzFramework::ApplicationRequests::IsPrefabSystemForLevelsEnabled);
|
||||||
@@ -1219,12 +1244,17 @@ namespace AZ::IO
|
|||||||
m_levelOpenEvent.Signal(levelDirs);
|
m_levelOpenEvent.Signal(levelDirs);
|
||||||
}
|
}
|
||||||
|
|
||||||
AZ::IO::ArchiveNotificationBus::Broadcast([](AZ::IO::ArchiveNotifications* archiveNotifications, const char* bundleName,
|
if (bundleManifest && bundleCatalog)
|
||||||
AZStd::shared_ptr<AzFramework::AssetBundleManifest> bundleManifest, const AZ::IO::FixedMaxPath& nextBundle, AZStd::shared_ptr<AzFramework::AssetRegistry> bundleCatalog)
|
|
||||||
{
|
{
|
||||||
archiveNotifications->BundleOpened(bundleName, bundleManifest, nextBundle.c_str(), bundleCatalog);
|
AZ::IO::ArchiveNotificationBus::Broadcast(
|
||||||
}, desc.m_strFileName.c_str(), bundleManifest, nextBundle, bundleCatalog);
|
[](AZ::IO::ArchiveNotifications* archiveNotifications, const char* bundleName,
|
||||||
|
AZStd::shared_ptr<AzFramework::AssetBundleManifest> bundleManifest, const AZ::IO::FixedMaxPath& nextBundle,
|
||||||
|
AZStd::shared_ptr<AzFramework::AssetRegistry> bundleCatalog)
|
||||||
|
{
|
||||||
|
archiveNotifications->BundleOpened(bundleName, bundleManifest, nextBundle.c_str(), bundleCatalog);
|
||||||
|
},
|
||||||
|
desc.m_strFileName.c_str(), bundleManifest, nextBundle, bundleCatalog);
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2138,7 +2168,7 @@ namespace AZ::IO
|
|||||||
}
|
}
|
||||||
|
|
||||||
currentDirPattern = currentDir + AZ_FILESYSTEM_SEPARATOR_WILDCARD;
|
currentDirPattern = currentDir + AZ_FILESYSTEM_SEPARATOR_WILDCARD;
|
||||||
currentFilePattern = currentDir + AZ_CORRECT_FILESYSTEM_SEPARATOR_STRING + "levels.pak";
|
currentFilePattern = currentDir + AZ_CORRECT_FILESYSTEM_SEPARATOR_STRING + "level.pak";
|
||||||
|
|
||||||
ZipDir::FileEntry* fileEntry = findFile.FindExact(currentFilePattern.c_str());
|
ZipDir::FileEntry* fileEntry = findFile.FindExact(currentFilePattern.c_str());
|
||||||
if (fileEntry)
|
if (fileEntry)
|
||||||
@@ -2175,4 +2205,36 @@ namespace AZ::IO
|
|||||||
|
|
||||||
return catalogInfo;
|
return catalogInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Archive::OnSystemEntityActivated()
|
||||||
|
{
|
||||||
|
for (const auto& archiveInfo : m_archivesWithCatalogsToLoad)
|
||||||
|
{
|
||||||
|
AZStd::intrusive_ptr<INestedArchive> archive =
|
||||||
|
OpenArchive(archiveInfo.m_fullPath, archiveInfo.m_bindRoot, archiveInfo.m_flags, nullptr);
|
||||||
|
if (!archive)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
ZipDir::CachePtr pZip = static_cast<NestedArchive*>(archive.get())->GetCache();
|
||||||
|
|
||||||
|
AZStd::shared_ptr<AzFramework::AssetRegistry> bundleCatalog;
|
||||||
|
auto bundleManifest = GetBundleManifest(pZip);
|
||||||
|
if (bundleManifest)
|
||||||
|
{
|
||||||
|
bundleCatalog = GetBundleCatalog(pZip, bundleManifest->GetCatalogName());
|
||||||
|
}
|
||||||
|
|
||||||
|
AZ::IO::ArchiveNotificationBus::Broadcast(
|
||||||
|
[](AZ::IO::ArchiveNotifications* archiveNotifications, const char* bundleName,
|
||||||
|
AZStd::shared_ptr<AzFramework::AssetBundleManifest> bundleManifest, const AZ::IO::FixedMaxPath& nextBundle,
|
||||||
|
AZStd::shared_ptr<AzFramework::AssetRegistry> bundleCatalog)
|
||||||
|
{
|
||||||
|
archiveNotifications->BundleOpened(bundleName, bundleManifest, nextBundle.c_str(), bundleCatalog);
|
||||||
|
},
|
||||||
|
archiveInfo.m_strFileName.c_str(), bundleManifest, archiveInfo.m_nextBundle, bundleCatalog);
|
||||||
|
}
|
||||||
|
m_archivesWithCatalogsToLoad.clear();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
#include <AzCore/IO/CompressionBus.h>
|
#include <AzCore/IO/CompressionBus.h>
|
||||||
#include <AzCore/Outcome/Outcome.h>
|
#include <AzCore/Outcome/Outcome.h>
|
||||||
#include <AzCore/IO/Path/Path.h>
|
#include <AzCore/IO/Path/Path.h>
|
||||||
|
#include <AzCore/Settings/SettingsRegistry.h>
|
||||||
#include <AzCore/std/containers/set.h>
|
#include <AzCore/std/containers/set.h>
|
||||||
#include <AzCore/std/parallel/mutex.h>
|
#include <AzCore/std/parallel/mutex.h>
|
||||||
#include <AzCore/std/parallel/lock.h>
|
#include <AzCore/std/parallel/lock.h>
|
||||||
@@ -271,6 +272,11 @@ namespace AZ::IO
|
|||||||
ZipDir::CachePtr* pZip = {}) const;
|
ZipDir::CachePtr* pZip = {}) const;
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
// Archives can't be fully mounted until the system entity has been activated,
|
||||||
|
// because mounting them requires the BundlingSystemComponent and the serialization system
|
||||||
|
// to both be available.
|
||||||
|
void OnSystemEntityActivated();
|
||||||
|
|
||||||
bool OpenPackCommon(AZStd::string_view szBindRoot, AZStd::string_view pName, AZStd::intrusive_ptr<AZ::IO::MemoryBlock> pData = nullptr, bool addLevels = true);
|
bool OpenPackCommon(AZStd::string_view szBindRoot, AZStd::string_view pName, AZStd::intrusive_ptr<AZ::IO::MemoryBlock> pData = nullptr, bool addLevels = true);
|
||||||
bool OpenPacksCommon(AZStd::string_view szDir, AZStd::string_view pWildcardIn, AZStd::vector<AZ::IO::FixedMaxPathString>* pFullPaths = nullptr, bool addLevels = true);
|
bool OpenPacksCommon(AZStd::string_view szDir, AZStd::string_view pWildcardIn, AZStd::vector<AZ::IO::FixedMaxPathString>* pFullPaths = nullptr, bool addLevels = true);
|
||||||
|
|
||||||
@@ -313,6 +319,8 @@ namespace AZ::IO
|
|||||||
mutable AZStd::shared_mutex m_csZips;
|
mutable AZStd::shared_mutex m_csZips;
|
||||||
ZipArray m_arrZips;
|
ZipArray m_arrZips;
|
||||||
|
|
||||||
|
AZ::SettingsRegistryInterface::NotifyEventHandler m_componentApplicationLifecycleHandler;
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
// Opened files collector.
|
// Opened files collector.
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
@@ -339,5 +347,34 @@ namespace AZ::IO
|
|||||||
// [LYN-2376] Remove once legacy slice support is removed
|
// [LYN-2376] Remove once legacy slice support is removed
|
||||||
LevelPackOpenEvent m_levelOpenEvent;
|
LevelPackOpenEvent m_levelOpenEvent;
|
||||||
LevelPackCloseEvent m_levelCloseEvent;
|
LevelPackCloseEvent m_levelCloseEvent;
|
||||||
|
|
||||||
|
// If pak files are loaded before the serialization and bundling system
|
||||||
|
// are ready to go, their asset catalogs can't be loaded.
|
||||||
|
// In this case, cache information about those archives,
|
||||||
|
// and attempt to load the catalogs later, when the required systems are enabled.
|
||||||
|
struct ArchivesWithCatalogsToLoad
|
||||||
|
{
|
||||||
|
ArchivesWithCatalogsToLoad(
|
||||||
|
AZStd::string_view fullPath,
|
||||||
|
AZStd::string_view bindRoot,
|
||||||
|
int flags,
|
||||||
|
AZ::IO::PathView nextBundle,
|
||||||
|
AZ::IO::Path strFileName)
|
||||||
|
: m_fullPath(fullPath)
|
||||||
|
, m_bindRoot(bindRoot)
|
||||||
|
, m_flags(flags)
|
||||||
|
, m_nextBundle(nextBundle)
|
||||||
|
, m_strFileName(strFileName)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
AZ::IO::Path m_strFileName;
|
||||||
|
AZStd::string m_fullPath;
|
||||||
|
AZStd::string m_bindRoot;
|
||||||
|
AZ::IO::PathView m_nextBundle;
|
||||||
|
int m_flags;
|
||||||
|
};
|
||||||
|
|
||||||
|
AZStd::vector<ArchivesWithCatalogsToLoad> m_archivesWithCatalogsToLoad;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -323,6 +323,13 @@ namespace AzFramework
|
|||||||
return localZ;
|
return localZ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TransformComponent::SetWorldRotation(const AZ::Vector3& eulerAnglesRadian)
|
||||||
|
{
|
||||||
|
AZ::Transform newWorldTransform = m_worldTM;
|
||||||
|
newWorldTransform.SetRotation(AZ::Quaternion::CreateFromEulerAnglesRadians(eulerAnglesRadian));
|
||||||
|
SetWorldTM(newWorldTransform);
|
||||||
|
}
|
||||||
|
|
||||||
void TransformComponent::SetWorldRotationQuaternion(const AZ::Quaternion& quaternion)
|
void TransformComponent::SetWorldRotationQuaternion(const AZ::Quaternion& quaternion)
|
||||||
{
|
{
|
||||||
AZ::Transform newWorldTransform = m_worldTM;
|
AZ::Transform newWorldTransform = m_worldTM;
|
||||||
|
|||||||
@@ -108,6 +108,7 @@ namespace AzFramework
|
|||||||
float GetLocalZ() override;
|
float GetLocalZ() override;
|
||||||
|
|
||||||
// Rotation modifiers
|
// Rotation modifiers
|
||||||
|
void SetWorldRotation(const AZ::Vector3& eulerAnglesRadian) override;
|
||||||
void SetWorldRotationQuaternion(const AZ::Quaternion& quaternion) override;
|
void SetWorldRotationQuaternion(const AZ::Quaternion& quaternion) override;
|
||||||
|
|
||||||
AZ::Vector3 GetWorldRotation() override;
|
AZ::Vector3 GetWorldRotation() override;
|
||||||
|
|||||||
@@ -24,17 +24,17 @@ namespace AzFramework
|
|||||||
IMatchmakingRequests() = default;
|
IMatchmakingRequests() = default;
|
||||||
virtual ~IMatchmakingRequests() = default;
|
virtual ~IMatchmakingRequests() = default;
|
||||||
|
|
||||||
// Registers a player's acceptance or rejection of a proposed matchmaking.
|
//! Registers a player's acceptance or rejection of a proposed matchmaking.
|
||||||
// @param acceptMatchRequest The request of AcceptMatch operation
|
//! @param acceptMatchRequest The request of AcceptMatch operation
|
||||||
virtual void AcceptMatch(const AcceptMatchRequest& acceptMatchRequest) = 0;
|
virtual void AcceptMatch(const AcceptMatchRequest& acceptMatchRequest) = 0;
|
||||||
|
|
||||||
// Create a game match for a group of players.
|
//! Create a game match for a group of players.
|
||||||
// @param startMatchmakingRequest The request of StartMatchmaking operation
|
//! @param startMatchmakingRequest The request of StartMatchmaking operation
|
||||||
// @return A unique identifier for a matchmaking ticket
|
//! @return A unique identifier for a matchmaking ticket
|
||||||
virtual AZStd::string StartMatchmaking(const StartMatchmakingRequest& startMatchmakingRequest) = 0;
|
virtual AZStd::string StartMatchmaking(const StartMatchmakingRequest& startMatchmakingRequest) = 0;
|
||||||
|
|
||||||
// Cancels a matchmaking ticket that is currently being processed.
|
//! Cancels a matchmaking ticket that is currently being processed.
|
||||||
// @param stopMatchmakingRequest The request of StopMatchmaking operation
|
//! @param stopMatchmakingRequest The request of StopMatchmaking operation
|
||||||
virtual void StopMatchmaking(const StopMatchmakingRequest& stopMatchmakingRequest) = 0;
|
virtual void StopMatchmaking(const StopMatchmakingRequest& stopMatchmakingRequest) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -48,16 +48,16 @@ namespace AzFramework
|
|||||||
IMatchmakingAsyncRequests() = default;
|
IMatchmakingAsyncRequests() = default;
|
||||||
virtual ~IMatchmakingAsyncRequests() = default;
|
virtual ~IMatchmakingAsyncRequests() = default;
|
||||||
|
|
||||||
// AcceptMatch Async
|
//! AcceptMatch Async
|
||||||
// @param acceptMatchRequest The request of AcceptMatch operation
|
//! @param acceptMatchRequest The request of AcceptMatch operation
|
||||||
virtual void AcceptMatchAsync(const AcceptMatchRequest& acceptMatchRequest) = 0;
|
virtual void AcceptMatchAsync(const AcceptMatchRequest& acceptMatchRequest) = 0;
|
||||||
|
|
||||||
// StartMatchmaking Async
|
//! StartMatchmaking Async
|
||||||
// @param startMatchmakingRequest The request of StartMatchmaking operation
|
//! @param startMatchmakingRequest The request of StartMatchmaking operation
|
||||||
virtual void StartMatchmakingAsync(const StartMatchmakingRequest& startMatchmakingRequest) = 0;
|
virtual void StartMatchmakingAsync(const StartMatchmakingRequest& startMatchmakingRequest) = 0;
|
||||||
|
|
||||||
// StopMatchmaking Async
|
//! StopMatchmaking Async
|
||||||
// @param stopMatchmakingRequest The request of StopMatchmaking operation
|
//! @param stopMatchmakingRequest The request of StopMatchmaking operation
|
||||||
virtual void StopMatchmakingAsync(const StopMatchmakingRequest& stopMatchmakingRequest) = 0;
|
virtual void StopMatchmakingAsync(const StopMatchmakingRequest& stopMatchmakingRequest) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -76,14 +76,14 @@ namespace AzFramework
|
|||||||
static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single;
|
static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single;
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
// OnAcceptMatchAsyncComplete is fired once AcceptMatchAsync completes
|
//! OnAcceptMatchAsyncComplete is fired once AcceptMatchAsync completes
|
||||||
virtual void OnAcceptMatchAsyncComplete() = 0;
|
virtual void OnAcceptMatchAsyncComplete() = 0;
|
||||||
|
|
||||||
// OnStartMatchmakingAsyncComplete is fired once StartMatchmakingAsync completes
|
//! OnStartMatchmakingAsyncComplete is fired once StartMatchmakingAsync completes
|
||||||
// @param matchmakingTicketId The unique identifier for the matchmaking ticket
|
//! @param matchmakingTicketId The unique identifier for the matchmaking ticket
|
||||||
virtual void OnStartMatchmakingAsyncComplete(const AZStd::string& matchmakingTicketId) = 0;
|
virtual void OnStartMatchmakingAsyncComplete(const AZStd::string& matchmakingTicketId) = 0;
|
||||||
|
|
||||||
// OnStopMatchmakingAsyncComplete is fired once StopMatchmakingAsync completes
|
//! OnStopMatchmakingAsyncComplete is fired once StopMatchmakingAsync completes
|
||||||
virtual void OnStopMatchmakingAsyncComplete() = 0;
|
virtual void OnStopMatchmakingAsyncComplete() = 0;
|
||||||
};
|
};
|
||||||
using MatchmakingAsyncRequestNotificationBus = AZ::EBus<MatchmakingAsyncRequestNotifications>;
|
using MatchmakingAsyncRequestNotificationBus = AZ::EBus<MatchmakingAsyncRequestNotifications>;
|
||||||
|
|||||||
@@ -29,17 +29,17 @@ namespace AzFramework
|
|||||||
static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single;
|
static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single;
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
// OnMatchAcceptance is fired when match is found and pending on acceptance
|
//! OnMatchAcceptance is fired when match is found and pending on acceptance
|
||||||
// Use this notification to accept found match
|
//! Use this notification to accept found match
|
||||||
virtual void OnMatchAcceptance() = 0;
|
virtual void OnMatchAcceptance() = 0;
|
||||||
|
|
||||||
// OnMatchComplete is fired when match is complete
|
//! OnMatchComplete is fired when match is complete
|
||||||
virtual void OnMatchComplete() = 0;
|
virtual void OnMatchComplete() = 0;
|
||||||
|
|
||||||
// OnMatchError is fired when match is processed with error
|
//! OnMatchError is fired when match is processed with error
|
||||||
virtual void OnMatchError() = 0;
|
virtual void OnMatchError() = 0;
|
||||||
|
|
||||||
// OnMatchFailure is fired when match is failed to complete
|
//! OnMatchFailure is fired when match is failed to complete
|
||||||
virtual void OnMatchFailure() = 0;
|
virtual void OnMatchFailure() = 0;
|
||||||
};
|
};
|
||||||
using MatchmakingNotificationBus = AZ::EBus<MatchmakingNotifications>;
|
using MatchmakingNotificationBus = AZ::EBus<MatchmakingNotifications>;
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user