From 1909d43dcc424c84452a7f8e70f350a0eec996e0 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Tue, 23 Nov 2021 17:57:45 -0800 Subject: [PATCH 001/284] initial version ported from an old implementation Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Tests/Memory/AllocatorBenchmarks.cpp | 483 ++++++++++++++++++ .../Memory/AllocatorBenchmarks_Linux.cpp | 31 ++ .../Platform/Linux/platform_linux_files.cmake | 1 + .../Tests/Memory/AllocatorBenchmarks_Mac.cpp | 30 ++ .../Platform/Mac/platform_mac_files.cmake | 1 + .../Memory/AllocatorBenchmarks_Windows.cpp | 74 +++ .../Windows/platform_windows_files.cmake | 1 + .../AzCore/Tests/azcoretests_files.cmake | 1 + 8 files changed, 622 insertions(+) create mode 100644 Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp create mode 100644 Code/Framework/AzCore/Tests/Platform/Linux/Tests/Memory/AllocatorBenchmarks_Linux.cpp create mode 100644 Code/Framework/AzCore/Tests/Platform/Mac/Tests/Memory/AllocatorBenchmarks_Mac.cpp create mode 100644 Code/Framework/AzCore/Tests/Platform/Windows/Tests/Memory/AllocatorBenchmarks_Windows.cpp diff --git a/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp b/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp new file mode 100644 index 0000000000..2bac12fe83 --- /dev/null +++ b/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp @@ -0,0 +1,483 @@ +/* + * 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 defined(HAVE_BENCHMARK) + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +namespace Benchmark +{ + namespace Platform + { + size_t GetProcessMemoryUsageBytes(); + size_t GetMemorySize(void* memory); + } + + static AZ::Debug::DrillerManager* s_drillerManager = nullptr; + + template + class TestAllocator : public TAllocator + { + public: + TestAllocator() + : TAllocator() + { + } + + static void SetUp() + { + AZ::AllocatorInstance::Create(); + + s_drillerManager = AZ::Debug::DrillerManager::Create(); + s_drillerManager->Register(aznew AZ::Debug::MemoryDriller); + } + + static void TearDown() + { + AZ::Debug::DrillerManager::Destroy(s_drillerManager); + s_drillerManager = nullptr; + + AZ::AllocatorInstance::Destroy(); + } + + typename TAllocator::pointer_type Allocate( + typename TAllocator::size_type byteSize, + typename TAllocator::size_type alignment, + int = 0, + const char* = nullptr, + const char* = nullptr, + int = 0, + unsigned int = 0) override + { + return AZ::AllocatorInstance::Get().Allocate(byteSize, alignment); + } + + void DeAllocate( + typename TAllocator::pointer_type ptr, + typename TAllocator::size_type byteSize = 0, + typename TAllocator::size_type = 0) override + { + AZ::AllocatorInstance::Get().DeAllocate(ptr, byteSize); + } + + typename TAllocator::pointer_type ReAllocate( + typename TAllocator::pointer_type ptr, + typename TAllocator::size_type newSize, + typename TAllocator::size_type newAlignment) override + { + return AZ::AllocatorInstance::Get().ReAllocate(ptr, newSize, newAlignment); + } + + typename TAllocator::size_type Resize(typename TAllocator::pointer_type ptr, typename TAllocator::size_type newSize) override + { + return AZ::AllocatorInstance::Get().Resize(ptr, newSize); + } + + void GarbageCollect() override + { + AZ::AllocatorInstance::Get().GarbageCollect(); + } + + typename TAllocator::size_type NumAllocatedBytes() const override + { + return AZ::AllocatorInstance::Get().NumAllocatedBytes() + + AZ::AllocatorInstance::Get().GetUnAllocatedMemory(); + } + }; +} + +namespace AZ +{ + AZ_TYPE_INFO_TEMPLATE(Benchmark::TestAllocator, "{ACE2D6E5-4EB8-4DD2-AE95-6BDFD0476801}", AZ_TYPE_INFO_CLASS); +} + +namespace Benchmark +{ + class TestRawMallocAllocator {}; + + template <> + class TestAllocator + : public TestRawMallocAllocator + { + public: + struct Descriptor {}; + + TestAllocator() + {} + + static void SetUp() + { + s_numAllocatedBytes = 0; + } + + static void TearDown() + {} + + void* Allocate( + size_t byteSize, + size_t alignment, + int = 0, + const char* = nullptr, + const char* = nullptr, + int = 0, + unsigned int = 0) + { + s_numAllocatedBytes += byteSize; + if (alignment) + { + return AZ_OS_MALLOC(byteSize, alignment); + } + else + { + return AZ_OS_MALLOC(byteSize, 1); + } + } + + static void DeAllocate(void* ptr, size_t = 0) + { + s_numAllocatedBytes -= Platform::GetMemorySize(ptr); + AZ_OS_FREE(ptr); + } + + static void* ReAllocate(void* ptr, size_t newSize, size_t newAlignment) + { + s_numAllocatedBytes -= Platform::GetMemorySize(ptr); + AZ_OS_FREE(ptr); + + s_numAllocatedBytes += newSize; + if (newAlignment) + { + return AZ_OS_MALLOC(newSize, newAlignment); + } + else + { + return AZ_OS_MALLOC(newSize, 1); + } + } + + static size_t Resize(void* ptr, size_t newSize) + { + AZ_UNUSED(ptr); + AZ_UNUSED(newSize); + + return 0; + } + + static void GarbageCollect() + {} + + static size_t NumAllocatedBytes() + { + return s_numAllocatedBytes; + } + + private: + static size_t s_numAllocatedBytes; + }; + + size_t TestAllocator::s_numAllocatedBytes = 0; + + // Here we require to implement this to be able to configure a name for the allocator, otherswise the AllocatorManager crashes when trying to configure the overrides + class TestMallocSchemaAllocator : public AZ::SimpleSchemaAllocator + { + public: + AZ_TYPE_INFO(TestMallocSchemaAllocator, "{3E68224F-E676-402C-8276-CE4B49C05E89}"); + + TestMallocSchemaAllocator() + : AZ::SimpleSchemaAllocator("TestMallocSchemaAllocator", "") + {} + }; + + class TestHeapSchemaAllocator : public AZ::SimpleSchemaAllocator + { + public: + AZ_TYPE_INFO(TestHeapSchemaAllocator, "{456E6C30-AA84-488F-BE47-5C1E6AF636B7}"); + + TestHeapSchemaAllocator() + : AZ::SimpleSchemaAllocator("TestHeapSchemaAllocator", "") + {} + }; + + class TestHphaSchemaAllocator : public AZ::SimpleSchemaAllocator + { + public: + AZ_TYPE_INFO(TestHphaSchemaAllocator, "{6563AB4B-A68E-4499-8C98-D61D640D1F7F}"); + + TestHphaSchemaAllocator() + : AZ::SimpleSchemaAllocator("TestHphaSchemaAllocator", "") + {} + }; + + class TestSystemAllocator : public AZ::SystemAllocator + { + public: + AZ_TYPE_INFO(TestSystemAllocator, "{360D4DAA-D65D-4D5C-A6FA-1A4C5261C35C}"); + + TestSystemAllocator() + : AZ::SystemAllocator() + {} + }; +} + +namespace AZ +{ + AZ_TYPE_INFO_SPECIALIZE(Benchmark::TestAllocator, "{1065B446-4873-4B3E-9CB1-069E148D4DF6}"); + AZ_TYPE_INFO_SPECIALIZE(Benchmark::TestAllocator, "{92CFDF86-02EE-4247-9809-884EE9F7BA18}"); + AZ_TYPE_INFO_SPECIALIZE(Benchmark::TestAllocator, "{67DA01DF-9232-493A-B11C-6952FEDEB2A9}"); + AZ_TYPE_INFO_SPECIALIZE(Benchmark::TestAllocator, "{47384CB4-6729-43A9-B0CE-402E3A7AEFB2}"); + AZ_TYPE_INFO_SPECIALIZE(Benchmark::TestAllocator, "{096423BC-DC36-48D2-8E89-8F1D600F488A}"); +} + +namespace Benchmark +{ + // Allocated bytes reported by the allocator / actually requested bytes + static const char* s_counterAllocatorMemoryRatio = "Allocator_MemoryRatio"; + + // Allocated bytes reported by the process / actually requested bytes + static const char* s_counterProcessMemoryRatio = "Process_MemoryRatio"; + + enum AllocationSize + { + SMALL, + BIG, + MIXED, + COUNT + }; + + static const size_t s_kiloByte = 1024; + static const size_t s_megaByte = s_kiloByte * s_kiloByte; + using AllocationSizeArray = AZStd::array; + static const AZStd::array s_allocationSizes = { + /* SMALL */ AllocationSizeArray{ 2, 16, 20, 59, 100, 128, 160, 250, 300, 512 }, + /* BIG */ AllocationSizeArray{ 513, s_kiloByte, 2 * s_kiloByte, 4 * s_kiloByte, 10 * s_kiloByte, 64 * s_kiloByte, 128 * s_kiloByte, 200 * s_kiloByte, s_megaByte, 2 * s_megaByte }, + /* MIXED */ AllocationSizeArray{ 2, s_kiloByte, 59, 4 * s_kiloByte, 128, 200 * s_kiloByte, 250, s_megaByte, 512, 2 * s_megaByte } + }; + + template + class AllocatorBenchmarkFixture + : public ::benchmark::Fixture + { + protected: + using TestAllocatorType = TestAllocator; + + virtual void internalSetUp(const ::benchmark::State&) + { + TestAllocatorType::SetUp(); + } + + virtual void internalTearDown(const ::benchmark::State&) + { + TestAllocatorType::TearDown(); + } + + public: + void SetUp(const ::benchmark::State& state) override + { + internalSetUp(state); + } + void SetUp(::benchmark::State& state) override + { + internalSetUp(state); + } + + void TearDown(const ::benchmark::State& state) override + { + internalTearDown(state); + } + void TearDown(::benchmark::State& state) override + { + internalTearDown(state); + } + }; + + template + class AllocationBenchmarkFixture + : public AllocatorBenchmarkFixture + { + using TestAllocatorType = AllocatorBenchmarkFixture::TestAllocatorType; + + void internalSetUp(const ::benchmark::State& state) override + { + AllocatorBenchmarkFixture::SetUp(state); + + m_allocations.resize(state.range_x(), nullptr); + } + + void internalTearDown(const ::benchmark::State& state) override + { + m_allocations.clear(); + m_allocations.shrink_to_fit(); + + AllocatorBenchmarkFixture::TearDown(state); + } + + public: + void Benchmark(benchmark::State& state) + { + TestAllocatorType allocatorType; + + for (auto _ : state) + { + const size_t processMemoryBaseline = Platform::GetProcessMemoryUsageBytes(); + + const size_t numberOfAllocations = m_allocations.size(); + for (size_t allocationIndex = 0; allocationIndex < numberOfAllocations; ++allocationIndex) + { + state.PauseTiming(); + const AllocationSizeArray& allocationArray = s_allocationSizes[TAllocationSize]; + const size_t allocationSize = allocationArray[allocationIndex % allocationArray.size()]; + + state.ResumeTiming(); + m_allocations[allocationIndex] = allocatorType.Allocate(allocationSize, 0); + } + + state.PauseTiming(); + state.counters[s_counterAllocatorMemoryRatio] = + benchmark::Counter(static_cast(allocatorType.NumAllocatedBytes()), benchmark::Counter::kDefaults); + state.counters[s_counterProcessMemoryRatio] = benchmark::Counter( + static_cast(Platform::GetProcessMemoryUsageBytes() - processMemoryBaseline), + benchmark::Counter::kDefaults); + + for (size_t allocationIndex = 0; allocationIndex < numberOfAllocations; ++allocationIndex) + { + const AllocationSizeArray& allocationArray = s_allocationSizes[TAllocationSize]; + const size_t allocationSize = allocationArray[allocationIndex % allocationArray.size()]; + allocatorType.DeAllocate(m_allocations[allocationIndex], allocationSize); + m_allocations[allocationIndex] = nullptr; + } + allocatorType.GarbageCollect(); + + state.SetItemsProcessed(numberOfAllocations); + state.ResumeTiming(); + } + } + + private: + AZStd::vector m_allocations; + }; + + template + class DeAllocationBenchmarkFixture + : public AllocatorBenchmarkFixture + { + using TestAllocatorType = AllocatorBenchmarkFixture::TestAllocatorType; + + void internalSetUp(const ::benchmark::State& state) override + { + AllocatorBenchmarkFixture::SetUp(state); + + m_allocations.resize(state.range_x(), nullptr); + } + + void internalTearDown(const ::benchmark::State& state) override + { + m_allocations.clear(); + m_allocations.shrink_to_fit(); + + AllocatorBenchmarkFixture::TearDown(state); + } + public: + void Benchmark(benchmark::State& state) + { + TestAllocatorType allocatorType; + + for (auto _ : state) + { + state.PauseTiming(); + const size_t processMemoryBaseline = Platform::GetProcessMemoryUsageBytes(); + + const size_t numberOfAllocations = m_allocations.size(); + for (size_t allocationIndex = 0; allocationIndex < numberOfAllocations; ++allocationIndex) + { + const AllocationSizeArray& allocationArray = s_allocationSizes[TAllocationSize]; + const size_t allocationSize = allocationArray[allocationIndex % allocationArray.size()]; + m_allocations[allocationIndex] = allocatorType.Allocate(allocationSize, 0); + } + + for (size_t allocationIndex = 0; allocationIndex < numberOfAllocations; ++allocationIndex) + { + const AllocationSizeArray& allocationArray = s_allocationSizes[TAllocationSize]; + const size_t allocationSize = allocationArray[allocationIndex % allocationArray.size()]; + state.ResumeTiming(); + allocatorType.DeAllocate(m_allocations[allocationIndex], allocationSize); + state.PauseTiming(); + m_allocations[allocationIndex] = nullptr; + } + + state.counters[s_counterAllocatorMemoryRatio] = + benchmark::Counter(static_cast(allocatorType.NumAllocatedBytes()), benchmark::Counter::kDefaults); + state.counters[s_counterProcessMemoryRatio] = benchmark::Counter( + static_cast(Platform::GetProcessMemoryUsageBytes() - processMemoryBaseline), + benchmark::Counter::kDefaults); + + state.SetItemsProcessed(numberOfAllocations); + + allocatorType.GarbageCollect(); + + state.ResumeTiming(); + } + } + + private: + AZStd::vector m_allocations; + }; + + static void RunRanges(benchmark::internal::Benchmark* b) + { + for (int i = 0; i < 6; ++i) + { + b->Arg((1 << i) * 1000); + } + } + +#define BM_REGISTER_TEMPLATE(FIXTURE, TESTNAME, ...) \ + BENCHMARK_TEMPLATE_DEFINE_F(FIXTURE, TESTNAME, __VA_ARGS__)(benchmark::State& state) { Benchmark(state); } \ + BENCHMARK_REGISTER_F(FIXTURE, TESTNAME) + +#define BM_REGISTER_SIZE_FIXTURES(FIXTURE, TESTNAME, ALLOCATORTYPE) \ + BM_REGISTER_TEMPLATE(FIXTURE, TESTNAME##_SMALL, ALLOCATORTYPE, SMALL)->Apply(RunRanges); \ + BM_REGISTER_TEMPLATE(FIXTURE, TESTNAME##_BIG, ALLOCATORTYPE, BIG)->Apply(RunRanges); \ + BM_REGISTER_TEMPLATE(FIXTURE, TESTNAME##_MIXED, ALLOCATORTYPE, MIXED)->Apply(RunRanges); + +#define BM_REGISTER_ALLOCATOR(TESTNAME, ALLOCATORTYPE) \ + namespace TESTNAME \ + { \ + BM_REGISTER_SIZE_FIXTURES(AllocationBenchmarkFixture, TESTNAME, ALLOCATORTYPE) \ + BM_REGISTER_SIZE_FIXTURES(DeAllocationBenchmarkFixture, TESTNAME, ALLOCATORTYPE) \ + } + + BM_REGISTER_ALLOCATOR(RawMallocAllocator, TestRawMallocAllocator); + BM_REGISTER_ALLOCATOR(MallocSchemaAllocator, TestMallocSchemaAllocator); + BM_REGISTER_ALLOCATOR(HeapSchemaAllocator, TestHeapSchemaAllocator); + BM_REGISTER_ALLOCATOR(HphaSchemaAllocator, TestHphaSchemaAllocator); + BM_REGISTER_ALLOCATOR(SystemAllocator, TestSystemAllocator); + + //BM_REGISTER_SCHEMA(BestFitExternalMapSchema); // Requires to implement AZ::IAllocatorAllocate + //BM_REGISTER_SCHEMA(PoolSchema); // Requires special alignment requests while allocating + +#undef BM_REGISTER_ALLOCATOR +#undef BM_REGISTER_SIZE_FIXTURES +#undef BM_REGISTER_TEMPLATE + +} // Benchmark + +#endif // HAVE_BENCHMARK diff --git a/Code/Framework/AzCore/Tests/Platform/Linux/Tests/Memory/AllocatorBenchmarks_Linux.cpp b/Code/Framework/AzCore/Tests/Platform/Linux/Tests/Memory/AllocatorBenchmarks_Linux.cpp new file mode 100644 index 0000000000..49ecefda49 --- /dev/null +++ b/Code/Framework/AzCore/Tests/Platform/Linux/Tests/Memory/AllocatorBenchmarks_Linux.cpp @@ -0,0 +1,31 @@ +/* + * 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 +#include + +#include +#include + +namespace Benchmark +{ + namespace Platform + { + size_t GetProcessMemoryUsageBytes() + { + struct rusage rusage; + getrusage(RUSAGE_SELF, &rusage); + return rusage.ru_maxrss * 1024L; + } + + size_t GetMemorySize(void* memory) + { + return memory ? _aligned_msize(memory, 1, 0) : 0; + } + } +} diff --git a/Code/Framework/AzCore/Tests/Platform/Linux/platform_linux_files.cmake b/Code/Framework/AzCore/Tests/Platform/Linux/platform_linux_files.cmake index 844b621e05..953dbb7791 100644 --- a/Code/Framework/AzCore/Tests/Platform/Linux/platform_linux_files.cmake +++ b/Code/Framework/AzCore/Tests/Platform/Linux/platform_linux_files.cmake @@ -9,4 +9,5 @@ set(FILES Tests/UtilsTests_Linux.cpp ../Common/UnixLike/Tests/UtilsTests_UnixLike.cpp + Tests/Memory/AllocatorBenchmarks_Linux.cpp ) diff --git a/Code/Framework/AzCore/Tests/Platform/Mac/Tests/Memory/AllocatorBenchmarks_Mac.cpp b/Code/Framework/AzCore/Tests/Platform/Mac/Tests/Memory/AllocatorBenchmarks_Mac.cpp new file mode 100644 index 0000000000..374d9f81f7 --- /dev/null +++ b/Code/Framework/AzCore/Tests/Platform/Mac/Tests/Memory/AllocatorBenchmarks_Mac.cpp @@ -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 + * + */ + +#include +#include + +#include + +namespace Benchmark +{ + namespace Platform + { + size_t GetProcessMemoryUsageBytes() + { + struct rusage rusage; + getrusage(RUSAGE_SELF, &rusage); + return rusage.ru_maxrss; + } + + size_t GetMemorySize(void* memory) + { + return memory ? _aligned_msize(memory, 1, 0) : 0; + } + } +} diff --git a/Code/Framework/AzCore/Tests/Platform/Mac/platform_mac_files.cmake b/Code/Framework/AzCore/Tests/Platform/Mac/platform_mac_files.cmake index 93d2daf2b8..14e39d47f4 100644 --- a/Code/Framework/AzCore/Tests/Platform/Mac/platform_mac_files.cmake +++ b/Code/Framework/AzCore/Tests/Platform/Mac/platform_mac_files.cmake @@ -9,4 +9,5 @@ set(FILES ../Common/Apple/Tests/UtilsTests_Apple.cpp ../Common/UnixLike/Tests/UtilsTests_UnixLike.cpp + Tests/Memory/AllocatorBenchmarks_Mac.cpp ) diff --git a/Code/Framework/AzCore/Tests/Platform/Windows/Tests/Memory/AllocatorBenchmarks_Windows.cpp b/Code/Framework/AzCore/Tests/Platform/Windows/Tests/Memory/AllocatorBenchmarks_Windows.cpp new file mode 100644 index 0000000000..9f4efd7a2c --- /dev/null +++ b/Code/Framework/AzCore/Tests/Platform/Windows/Tests/Memory/AllocatorBenchmarks_Windows.cpp @@ -0,0 +1,74 @@ +/* + * 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 +#include + +#include +#include + +namespace Benchmark +{ + namespace Platform + { + size_t GetProcessMemoryUsageBytes() + { + EmptyWorkingSet(GetCurrentProcess()); + + //PROCESS_MEMORY_COUNTERS_EX pmc; + //GetProcessMemoryInfo(GetCurrentProcess(), (PPROCESS_MEMORY_COUNTERS)&pmc, sizeof(pmc)); + //return pmc.PrivateUsage; + //return pmc.WorkingSetSize; + + //size_t memoryUsage = 0; + //HANDLE defaultProcessHeap = GetProcessHeap(); + //PROCESS_HEAP_ENTRY heapEntry; + //if (HeapLock(defaultProcessHeap) == FALSE) + //{ + // AZ_Error("Benchmark", false, "Could not lock process' heap, error: %d", GetLastError()); + // return memoryUsage; + //} + + //heapEntry.lpData = NULL; + //while (HeapWalk(defaultProcessHeap, &heapEntry) != FALSE) + //{ + // memoryUsage += heapEntry.cbData; + //} + + //DWORD lastError = GetLastError(); + //if (lastError != ERROR_NO_MORE_ITEMS) + //{ + // AZ_Error("Benchmark", false, "HeapWalk failed with LastError %d", lastError); + //} + + //if (HeapUnlock(defaultProcessHeap) == FALSE) + //{ + // AZ_Error("Benchmark", false, "Failed to unlock heap with LastError %d", GetLastError()); + //} + + //return memoryUsage; + + size_t memoryUsage = 0; + + MEMORY_BASIC_INFORMATION mbi = { 0 }; + unsigned char* pEndRegion = NULL; + while (sizeof(mbi) == VirtualQuery(pEndRegion, &mbi, sizeof(mbi))) { + pEndRegion += mbi.RegionSize; + if ((mbi.AllocationProtect & PAGE_READWRITE) && (mbi.State & MEM_COMMIT)) { + memoryUsage += mbi.RegionSize; + } + } + return memoryUsage; + } + + size_t GetMemorySize(void* memory) + { + return memory ? _aligned_msize(memory, 1, 0) : 0; + } + } +} diff --git a/Code/Framework/AzCore/Tests/Platform/Windows/platform_windows_files.cmake b/Code/Framework/AzCore/Tests/Platform/Windows/platform_windows_files.cmake index 0a96dad34e..97b12b28e6 100644 --- a/Code/Framework/AzCore/Tests/Platform/Windows/platform_windows_files.cmake +++ b/Code/Framework/AzCore/Tests/Platform/Windows/platform_windows_files.cmake @@ -9,6 +9,7 @@ set(FILES ../Common/WinAPI/Tests/UtilsTests_WinAPI.cpp Tests/IO/Streamer/StorageDriveTests_Windows.cpp + Tests/Memory/AllocatorBenchmarks_Windows.cpp Tests/Memory/OverrunDetectionAllocator_Windows.cpp Tests/Serialization_Windows.cpp ) diff --git a/Code/Framework/AzCore/Tests/azcoretests_files.cmake b/Code/Framework/AzCore/Tests/azcoretests_files.cmake index d39595c45e..6762e07d0a 100644 --- a/Code/Framework/AzCore/Tests/azcoretests_files.cmake +++ b/Code/Framework/AzCore/Tests/azcoretests_files.cmake @@ -170,6 +170,7 @@ set(FILES Math/Vector3Tests.cpp Math/Vector4PerformanceTests.cpp Math/Vector4Tests.cpp + Memory/AllocatorBenchmarks.cpp Memory/AllocatorManager.cpp Memory/HphaSchema.cpp Memory/HphaSchemaErrorDetection.cpp From 35c1751694ce245b2a033c195a83a094140ec1a0 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Tue, 23 Nov 2021 18:31:00 -0800 Subject: [PATCH 002/284] simplification of code Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Tests/Memory/AllocatorBenchmarks.cpp | 189 +++++++++--------- 1 file changed, 95 insertions(+), 94 deletions(-) diff --git a/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp b/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp index 2bac12fe83..af87584fc6 100644 --- a/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp +++ b/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp @@ -34,15 +34,15 @@ namespace Benchmark static AZ::Debug::DrillerManager* s_drillerManager = nullptr; + /// + /// Test allocator wrapper that redirects the calls to the passed TAllocator by using AZ::AllocatorInstance. + /// It also creates/destroys the TAllocator type and connects the driller (to reflect what happens at runtime) + /// + /// Allocator type to wrap template - class TestAllocator : public TAllocator + class TestAllocatorWrapper { public: - TestAllocator() - : TAllocator() - { - } - static void SetUp() { AZ::AllocatorInstance::Create(); @@ -59,89 +59,81 @@ namespace Benchmark AZ::AllocatorInstance::Destroy(); } - typename TAllocator::pointer_type Allocate( - typename TAllocator::size_type byteSize, - typename TAllocator::size_type alignment, - int = 0, - const char* = nullptr, - const char* = nullptr, - int = 0, - unsigned int = 0) override + static void* Allocate(size_t byteSize, size_t alignment) { return AZ::AllocatorInstance::Get().Allocate(byteSize, alignment); } - void DeAllocate( - typename TAllocator::pointer_type ptr, - typename TAllocator::size_type byteSize = 0, - typename TAllocator::size_type = 0) override + static void DeAllocate(void* ptr, size_t byteSize = 0) { AZ::AllocatorInstance::Get().DeAllocate(ptr, byteSize); } - typename TAllocator::pointer_type ReAllocate( - typename TAllocator::pointer_type ptr, - typename TAllocator::size_type newSize, - typename TAllocator::size_type newAlignment) override + static void* ReAllocate(void* ptr, size_t newSize, size_t newAlignment) { return AZ::AllocatorInstance::Get().ReAllocate(ptr, newSize, newAlignment); } - typename TAllocator::size_type Resize(typename TAllocator::pointer_type ptr, typename TAllocator::size_type newSize) override + static size_t Resize(void* ptr, size_t newSize) { return AZ::AllocatorInstance::Get().Resize(ptr, newSize); } - void GarbageCollect() override + static void GarbageCollect() { AZ::AllocatorInstance::Get().GarbageCollect(); } - typename TAllocator::size_type NumAllocatedBytes() const override + static size_t NumAllocatedBytes() { return AZ::AllocatorInstance::Get().NumAllocatedBytes() + AZ::AllocatorInstance::Get().GetUnAllocatedMemory(); } }; -} -namespace AZ -{ - AZ_TYPE_INFO_TEMPLATE(Benchmark::TestAllocator, "{ACE2D6E5-4EB8-4DD2-AE95-6BDFD0476801}", AZ_TYPE_INFO_CLASS); -} - -namespace Benchmark -{ - class TestRawMallocAllocator {}; - - template <> - class TestAllocator - : public TestRawMallocAllocator + /// + /// Basic allocator used as a baseline. This allocator is the most basic allocation possible with the OS (AZ_OS_MALLOC). + /// MallocSchema cannot be used here because it has extra logic that we don't want to use as a baseline. + /// + class TestRawMallocAllocator + : public AZ::AllocatorBase + , public AZ::IAllocatorAllocate { public: + AZ_TYPE_INFO(TestMallocSchemaAllocator, "{08EB400A-D723-46C6-808E-D0844C8DE206}"); + struct Descriptor {}; - TestAllocator() - {} - - static void SetUp() + TestRawMallocAllocator() + : AllocatorBase(this, "TestRawMallocAllocator", "") { - s_numAllocatedBytes = 0; + m_numAllocatedBytes = 0; } - static void TearDown() - {} - - void* Allocate( - size_t byteSize, - size_t alignment, - int = 0, - const char* = nullptr, - const char* = nullptr, - int = 0, - unsigned int = 0) + bool Create(const Descriptor&) { - s_numAllocatedBytes += byteSize; + m_numAllocatedBytes = 0; + return true; + } + + // IAllocator + void Destroy() override + { + m_numAllocatedBytes = 0; + } + AZ::AllocatorDebugConfig GetDebugConfig() override + { + return AZ::AllocatorDebugConfig(); + } + AZ::IAllocatorAllocate* GetSchema() override + { + return nullptr; + } + + // IAllocatorAllocate + void* Allocate(size_t byteSize, size_t alignment, int = 0, const char* = 0, const char* = 0, int = 0, unsigned int = 0) override + { + m_numAllocatedBytes += byteSize; if (alignment) { return AZ_OS_MALLOC(byteSize, alignment); @@ -152,18 +144,18 @@ namespace Benchmark } } - static void DeAllocate(void* ptr, size_t = 0) + void DeAllocate(void* ptr, size_t = 0, size_type = 0) override { - s_numAllocatedBytes -= Platform::GetMemorySize(ptr); + m_numAllocatedBytes -= Platform::GetMemorySize(ptr); AZ_OS_FREE(ptr); } - static void* ReAllocate(void* ptr, size_t newSize, size_t newAlignment) + void* ReAllocate(void* ptr, size_t newSize, size_t newAlignment) override { - s_numAllocatedBytes -= Platform::GetMemorySize(ptr); + m_numAllocatedBytes -= Platform::GetMemorySize(ptr); AZ_OS_FREE(ptr); - s_numAllocatedBytes += newSize; + m_numAllocatedBytes += newSize; if (newAlignment) { return AZ_OS_MALLOC(newSize, newAlignment); @@ -174,7 +166,7 @@ namespace Benchmark } } - static size_t Resize(void* ptr, size_t newSize) + size_t Resize(void* ptr, size_t newSize) override { AZ_UNUSED(ptr); AZ_UNUSED(newSize); @@ -182,20 +174,45 @@ namespace Benchmark return 0; } - static void GarbageCollect() - {} - - static size_t NumAllocatedBytes() + size_t AllocationSize(void* ptr) override { - return s_numAllocatedBytes; + return Platform::GetMemorySize(ptr); + } + + void GarbageCollect() override {} + + size_t NumAllocatedBytes() const override + { + return m_numAllocatedBytes; + } + + size_t Capacity() const override + { + return AZ_CORE_MAX_ALLOCATOR_SIZE; // unused + } + + size_t GetMaxAllocationSize() const override + { + return AZ_CORE_MAX_ALLOCATOR_SIZE; // unused + } + + size_t GetMaxContiguousAllocationSize() const override + { + return AZ_CORE_MAX_ALLOCATOR_SIZE; // unused + } + size_t GetUnAllocatedMemory(bool = false) const override + { + return 0; // unused + } + IAllocatorAllocate* GetSubAllocator() override + { + return nullptr; // unused } private: - static size_t s_numAllocatedBytes; + size_t m_numAllocatedBytes; }; - size_t TestAllocator::s_numAllocatedBytes = 0; - // Here we require to implement this to be able to configure a name for the allocator, otherswise the AllocatorManager crashes when trying to configure the overrides class TestMallocSchemaAllocator : public AZ::SimpleSchemaAllocator { @@ -236,19 +253,7 @@ namespace Benchmark : AZ::SystemAllocator() {} }; -} -namespace AZ -{ - AZ_TYPE_INFO_SPECIALIZE(Benchmark::TestAllocator, "{1065B446-4873-4B3E-9CB1-069E148D4DF6}"); - AZ_TYPE_INFO_SPECIALIZE(Benchmark::TestAllocator, "{92CFDF86-02EE-4247-9809-884EE9F7BA18}"); - AZ_TYPE_INFO_SPECIALIZE(Benchmark::TestAllocator, "{67DA01DF-9232-493A-B11C-6952FEDEB2A9}"); - AZ_TYPE_INFO_SPECIALIZE(Benchmark::TestAllocator, "{47384CB4-6729-43A9-B0CE-402E3A7AEFB2}"); - AZ_TYPE_INFO_SPECIALIZE(Benchmark::TestAllocator, "{096423BC-DC36-48D2-8E89-8F1D600F488A}"); -} - -namespace Benchmark -{ // Allocated bytes reported by the allocator / actually requested bytes static const char* s_counterAllocatorMemoryRatio = "Allocator_MemoryRatio"; @@ -277,7 +282,7 @@ namespace Benchmark : public ::benchmark::Fixture { protected: - using TestAllocatorType = TestAllocator; + using TestAllocatorType = TestAllocatorWrapper; virtual void internalSetUp(const ::benchmark::State&) { @@ -333,8 +338,6 @@ namespace Benchmark public: void Benchmark(benchmark::State& state) { - TestAllocatorType allocatorType; - for (auto _ : state) { const size_t processMemoryBaseline = Platform::GetProcessMemoryUsageBytes(); @@ -347,12 +350,12 @@ namespace Benchmark const size_t allocationSize = allocationArray[allocationIndex % allocationArray.size()]; state.ResumeTiming(); - m_allocations[allocationIndex] = allocatorType.Allocate(allocationSize, 0); + m_allocations[allocationIndex] = TestAllocatorType::Allocate(allocationSize, 0); } state.PauseTiming(); state.counters[s_counterAllocatorMemoryRatio] = - benchmark::Counter(static_cast(allocatorType.NumAllocatedBytes()), benchmark::Counter::kDefaults); + benchmark::Counter(static_cast(TestAllocatorType::NumAllocatedBytes()), benchmark::Counter::kDefaults); state.counters[s_counterProcessMemoryRatio] = benchmark::Counter( static_cast(Platform::GetProcessMemoryUsageBytes() - processMemoryBaseline), benchmark::Counter::kDefaults); @@ -361,10 +364,10 @@ namespace Benchmark { const AllocationSizeArray& allocationArray = s_allocationSizes[TAllocationSize]; const size_t allocationSize = allocationArray[allocationIndex % allocationArray.size()]; - allocatorType.DeAllocate(m_allocations[allocationIndex], allocationSize); + TestAllocatorType::DeAllocate(m_allocations[allocationIndex], allocationSize); m_allocations[allocationIndex] = nullptr; } - allocatorType.GarbageCollect(); + TestAllocatorType::GarbageCollect(); state.SetItemsProcessed(numberOfAllocations); state.ResumeTiming(); @@ -398,8 +401,6 @@ namespace Benchmark public: void Benchmark(benchmark::State& state) { - TestAllocatorType allocatorType; - for (auto _ : state) { state.PauseTiming(); @@ -410,7 +411,7 @@ namespace Benchmark { const AllocationSizeArray& allocationArray = s_allocationSizes[TAllocationSize]; const size_t allocationSize = allocationArray[allocationIndex % allocationArray.size()]; - m_allocations[allocationIndex] = allocatorType.Allocate(allocationSize, 0); + m_allocations[allocationIndex] = TestAllocatorType::Allocate(allocationSize, 0); } for (size_t allocationIndex = 0; allocationIndex < numberOfAllocations; ++allocationIndex) @@ -418,20 +419,20 @@ namespace Benchmark const AllocationSizeArray& allocationArray = s_allocationSizes[TAllocationSize]; const size_t allocationSize = allocationArray[allocationIndex % allocationArray.size()]; state.ResumeTiming(); - allocatorType.DeAllocate(m_allocations[allocationIndex], allocationSize); + TestAllocatorType::DeAllocate(m_allocations[allocationIndex], allocationSize); state.PauseTiming(); m_allocations[allocationIndex] = nullptr; } state.counters[s_counterAllocatorMemoryRatio] = - benchmark::Counter(static_cast(allocatorType.NumAllocatedBytes()), benchmark::Counter::kDefaults); + benchmark::Counter(static_cast(TestAllocatorType::NumAllocatedBytes()), benchmark::Counter::kDefaults); state.counters[s_counterProcessMemoryRatio] = benchmark::Counter( static_cast(Platform::GetProcessMemoryUsageBytes() - processMemoryBaseline), benchmark::Counter::kDefaults); state.SetItemsProcessed(numberOfAllocations); - allocatorType.GarbageCollect(); + TestAllocatorType::GarbageCollect(); state.ResumeTiming(); } From 3273b7621d10dc98d54864ef41b59284161f5c0d Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Tue, 23 Nov 2021 18:37:24 -0800 Subject: [PATCH 003/284] Fixes a recursive loop Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp b/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp index af87584fc6..f27c92dfb2 100644 --- a/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp +++ b/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp @@ -322,7 +322,7 @@ namespace Benchmark void internalSetUp(const ::benchmark::State& state) override { - AllocatorBenchmarkFixture::SetUp(state); + AllocatorBenchmarkFixture::internalSetUp(state); m_allocations.resize(state.range_x(), nullptr); } @@ -332,7 +332,7 @@ namespace Benchmark m_allocations.clear(); m_allocations.shrink_to_fit(); - AllocatorBenchmarkFixture::TearDown(state); + AllocatorBenchmarkFixture::internalTearDown(state); } public: @@ -386,7 +386,7 @@ namespace Benchmark void internalSetUp(const ::benchmark::State& state) override { - AllocatorBenchmarkFixture::SetUp(state); + AllocatorBenchmarkFixture::internalSetUp(state); m_allocations.resize(state.range_x(), nullptr); } @@ -396,7 +396,7 @@ namespace Benchmark m_allocations.clear(); m_allocations.shrink_to_fit(); - AllocatorBenchmarkFixture::TearDown(state); + AllocatorBenchmarkFixture::internalTearDown(state); } public: void Benchmark(benchmark::State& state) From 160235e86f940a63dd7a06ccb12af39622a0eff8 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 29 Nov 2021 09:03:14 -0800 Subject: [PATCH 004/284] Removing commented code of different options for getting memory usage of a process Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Memory/AllocatorBenchmarks_Windows.cpp | 34 ------------------- 1 file changed, 34 deletions(-) diff --git a/Code/Framework/AzCore/Tests/Platform/Windows/Tests/Memory/AllocatorBenchmarks_Windows.cpp b/Code/Framework/AzCore/Tests/Platform/Windows/Tests/Memory/AllocatorBenchmarks_Windows.cpp index 9f4efd7a2c..c8532687e8 100644 --- a/Code/Framework/AzCore/Tests/Platform/Windows/Tests/Memory/AllocatorBenchmarks_Windows.cpp +++ b/Code/Framework/AzCore/Tests/Platform/Windows/Tests/Memory/AllocatorBenchmarks_Windows.cpp @@ -20,41 +20,7 @@ namespace Benchmark { EmptyWorkingSet(GetCurrentProcess()); - //PROCESS_MEMORY_COUNTERS_EX pmc; - //GetProcessMemoryInfo(GetCurrentProcess(), (PPROCESS_MEMORY_COUNTERS)&pmc, sizeof(pmc)); - //return pmc.PrivateUsage; - //return pmc.WorkingSetSize; - - //size_t memoryUsage = 0; - //HANDLE defaultProcessHeap = GetProcessHeap(); - //PROCESS_HEAP_ENTRY heapEntry; - //if (HeapLock(defaultProcessHeap) == FALSE) - //{ - // AZ_Error("Benchmark", false, "Could not lock process' heap, error: %d", GetLastError()); - // return memoryUsage; - //} - - //heapEntry.lpData = NULL; - //while (HeapWalk(defaultProcessHeap, &heapEntry) != FALSE) - //{ - // memoryUsage += heapEntry.cbData; - //} - - //DWORD lastError = GetLastError(); - //if (lastError != ERROR_NO_MORE_ITEMS) - //{ - // AZ_Error("Benchmark", false, "HeapWalk failed with LastError %d", lastError); - //} - - //if (HeapUnlock(defaultProcessHeap) == FALSE) - //{ - // AZ_Error("Benchmark", false, "Failed to unlock heap with LastError %d", GetLastError()); - //} - - //return memoryUsage; - size_t memoryUsage = 0; - MEMORY_BASIC_INFORMATION mbi = { 0 }; unsigned char* pEndRegion = NULL; while (sizeof(mbi) == VirtualQuery(pEndRegion, &mbi, sizeof(mbi))) { From febaebc386225a091dc785e72d6bd99a2b3de196 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Tue, 30 Nov 2021 13:51:08 -0800 Subject: [PATCH 005/284] PR comment (NULL->nullptr) Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Windows/Tests/Memory/AllocatorBenchmarks_Windows.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Code/Framework/AzCore/Tests/Platform/Windows/Tests/Memory/AllocatorBenchmarks_Windows.cpp b/Code/Framework/AzCore/Tests/Platform/Windows/Tests/Memory/AllocatorBenchmarks_Windows.cpp index c8532687e8..e9571a7e5b 100644 --- a/Code/Framework/AzCore/Tests/Platform/Windows/Tests/Memory/AllocatorBenchmarks_Windows.cpp +++ b/Code/Framework/AzCore/Tests/Platform/Windows/Tests/Memory/AllocatorBenchmarks_Windows.cpp @@ -22,7 +22,7 @@ namespace Benchmark size_t memoryUsage = 0; MEMORY_BASIC_INFORMATION mbi = { 0 }; - unsigned char* pEndRegion = NULL; + unsigned char* pEndRegion = nullptr; while (sizeof(mbi) == VirtualQuery(pEndRegion, &mbi, sizeof(mbi))) { pEndRegion += mbi.RegionSize; if ((mbi.AllocationProtect & PAGE_READWRITE) && (mbi.State & MEM_COMMIT)) { From 215cb9b52ffd0ee1f40325421f93d977754ed2ff Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Tue, 30 Nov 2021 16:06:26 -0800 Subject: [PATCH 006/284] Adds mulit-threaded tests Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Tests/Memory/AllocatorBenchmarks.cpp | 82 +++++++++++-------- 1 file changed, 50 insertions(+), 32 deletions(-) diff --git a/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp b/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp index f27c92dfb2..7cd7e7ce0a 100644 --- a/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp +++ b/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp @@ -284,14 +284,34 @@ namespace Benchmark protected: using TestAllocatorType = TestAllocatorWrapper; - virtual void internalSetUp(const ::benchmark::State&) + virtual void internalSetUp(const ::benchmark::State& state) { - TestAllocatorType::SetUp(); + if (state.thread_index == 0) // Only setup in the first thread + { + TestAllocatorType::SetUp(); + + m_allocations.resize(state.threads); + for (auto& perThreadAllocations : m_allocations) + { + perThreadAllocations.resize(state.range_x(), nullptr); + } + } } - virtual void internalTearDown(const ::benchmark::State&) + virtual void internalTearDown(const ::benchmark::State& state) { - TestAllocatorType::TearDown(); + if (state.thread_index == 0) // Only setup in the first thread + { + m_allocations.clear(); + m_allocations.shrink_to_fit(); + + TestAllocatorType::TearDown(); + } + } + + AZStd::vector& GetPerThreadAllocations(size_t threadIndex) + { + return m_allocations[threadIndex]; } public: @@ -312,26 +332,25 @@ namespace Benchmark { internalTearDown(state); } + + private: + AZStd::vector> m_allocations; }; template class AllocationBenchmarkFixture : public AllocatorBenchmarkFixture { - using TestAllocatorType = AllocatorBenchmarkFixture::TestAllocatorType; + using base = AllocatorBenchmarkFixture; + using TestAllocatorType = base::TestAllocatorType; void internalSetUp(const ::benchmark::State& state) override { AllocatorBenchmarkFixture::internalSetUp(state); - - m_allocations.resize(state.range_x(), nullptr); } void internalTearDown(const ::benchmark::State& state) override { - m_allocations.clear(); - m_allocations.shrink_to_fit(); - AllocatorBenchmarkFixture::internalTearDown(state); } @@ -340,17 +359,19 @@ namespace Benchmark { for (auto _ : state) { + state.PauseTiming(); const size_t processMemoryBaseline = Platform::GetProcessMemoryUsageBytes(); - const size_t numberOfAllocations = m_allocations.size(); + AZStd::vector& perThreadAllocations = base::GetPerThreadAllocations(state.thread_index); + const size_t numberOfAllocations = perThreadAllocations.size(); for (size_t allocationIndex = 0; allocationIndex < numberOfAllocations; ++allocationIndex) { - state.PauseTiming(); const AllocationSizeArray& allocationArray = s_allocationSizes[TAllocationSize]; const size_t allocationSize = allocationArray[allocationIndex % allocationArray.size()]; state.ResumeTiming(); - m_allocations[allocationIndex] = TestAllocatorType::Allocate(allocationSize, 0); + perThreadAllocations[allocationIndex] = TestAllocatorType::Allocate(allocationSize, 0); + state.PauseTiming(); } state.PauseTiming(); @@ -364,8 +385,8 @@ namespace Benchmark { const AllocationSizeArray& allocationArray = s_allocationSizes[TAllocationSize]; const size_t allocationSize = allocationArray[allocationIndex % allocationArray.size()]; - TestAllocatorType::DeAllocate(m_allocations[allocationIndex], allocationSize); - m_allocations[allocationIndex] = nullptr; + TestAllocatorType::DeAllocate(perThreadAllocations[allocationIndex], allocationSize); + perThreadAllocations[allocationIndex] = nullptr; } TestAllocatorType::GarbageCollect(); @@ -373,29 +394,22 @@ namespace Benchmark state.ResumeTiming(); } } - - private: - AZStd::vector m_allocations; }; template class DeAllocationBenchmarkFixture : public AllocatorBenchmarkFixture { - using TestAllocatorType = AllocatorBenchmarkFixture::TestAllocatorType; + using base = AllocatorBenchmarkFixture; + using TestAllocatorType = base::TestAllocatorType; void internalSetUp(const ::benchmark::State& state) override { AllocatorBenchmarkFixture::internalSetUp(state); - - m_allocations.resize(state.range_x(), nullptr); } void internalTearDown(const ::benchmark::State& state) override { - m_allocations.clear(); - m_allocations.shrink_to_fit(); - AllocatorBenchmarkFixture::internalTearDown(state); } public: @@ -404,14 +418,15 @@ namespace Benchmark for (auto _ : state) { state.PauseTiming(); + AZStd::vector& perThreadAllocations = base::GetPerThreadAllocations(state.thread_index); const size_t processMemoryBaseline = Platform::GetProcessMemoryUsageBytes(); - const size_t numberOfAllocations = m_allocations.size(); + const size_t numberOfAllocations = perThreadAllocations.size(); for (size_t allocationIndex = 0; allocationIndex < numberOfAllocations; ++allocationIndex) { const AllocationSizeArray& allocationArray = s_allocationSizes[TAllocationSize]; const size_t allocationSize = allocationArray[allocationIndex % allocationArray.size()]; - m_allocations[allocationIndex] = TestAllocatorType::Allocate(allocationSize, 0); + perThreadAllocations[allocationIndex] = TestAllocatorType::Allocate(allocationSize, 0); } for (size_t allocationIndex = 0; allocationIndex < numberOfAllocations; ++allocationIndex) @@ -419,9 +434,9 @@ namespace Benchmark const AllocationSizeArray& allocationArray = s_allocationSizes[TAllocationSize]; const size_t allocationSize = allocationArray[allocationIndex % allocationArray.size()]; state.ResumeTiming(); - TestAllocatorType::DeAllocate(m_allocations[allocationIndex], allocationSize); + TestAllocatorType::DeAllocate(perThreadAllocations[allocationIndex], allocationSize); state.PauseTiming(); - m_allocations[allocationIndex] = nullptr; + perThreadAllocations[allocationIndex] = nullptr; } state.counters[s_counterAllocatorMemoryRatio] = @@ -437,9 +452,6 @@ namespace Benchmark state.ResumeTiming(); } } - - private: - AZStd::vector m_allocations; }; static void RunRanges(benchmark::internal::Benchmark* b) @@ -450,14 +462,20 @@ namespace Benchmark } } + // Test under and over-subscription of threads vs the amount of CPUs available + static const unsigned int MaxThreadRange = 2 * AZStd::thread::hardware_concurrency(); + #define BM_REGISTER_TEMPLATE(FIXTURE, TESTNAME, ...) \ BENCHMARK_TEMPLATE_DEFINE_F(FIXTURE, TESTNAME, __VA_ARGS__)(benchmark::State& state) { Benchmark(state); } \ BENCHMARK_REGISTER_F(FIXTURE, TESTNAME) + // We test small/big/mixed allocations in single-threaded environments. For multi-threaded environments, we test mixed since + // the multi threaded fixture will run multiple passes (1, 2, 4, ... until 2*hardware_concurrency) #define BM_REGISTER_SIZE_FIXTURES(FIXTURE, TESTNAME, ALLOCATORTYPE) \ BM_REGISTER_TEMPLATE(FIXTURE, TESTNAME##_SMALL, ALLOCATORTYPE, SMALL)->Apply(RunRanges); \ BM_REGISTER_TEMPLATE(FIXTURE, TESTNAME##_BIG, ALLOCATORTYPE, BIG)->Apply(RunRanges); \ - BM_REGISTER_TEMPLATE(FIXTURE, TESTNAME##_MIXED, ALLOCATORTYPE, MIXED)->Apply(RunRanges); + BM_REGISTER_TEMPLATE(FIXTURE, TESTNAME##_MIXED, ALLOCATORTYPE, MIXED)->Apply(RunRanges); \ + BM_REGISTER_TEMPLATE(FIXTURE, TESTNAME##_MIXED_THREADED, ALLOCATORTYPE, MIXED)->ThreadRange(1, MaxThreadRange)->Apply(RunRanges); #define BM_REGISTER_ALLOCATOR(TESTNAME, ALLOCATORTYPE) \ namespace TESTNAME \ From f062b563c89e88b1facf32c6660bdca6cfac9057 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Tue, 30 Nov 2021 17:30:55 -0800 Subject: [PATCH 007/284] Improving runtime and making the whole duration manageable Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Tests/Memory/AllocatorBenchmarks.cpp | 44 +++++++--- .../AzCore/Tests/Memory/HphaSchema.cpp | 88 ------------------- 2 files changed, 31 insertions(+), 101 deletions(-) diff --git a/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp b/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp index 7cd7e7ce0a..c1fdd4ca32 100644 --- a/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp +++ b/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp @@ -364,21 +364,27 @@ namespace Benchmark AZStd::vector& perThreadAllocations = base::GetPerThreadAllocations(state.thread_index); const size_t numberOfAllocations = perThreadAllocations.size(); + size_t totalAllocationSize = 0; for (size_t allocationIndex = 0; allocationIndex < numberOfAllocations; ++allocationIndex) { const AllocationSizeArray& allocationArray = s_allocationSizes[TAllocationSize]; const size_t allocationSize = allocationArray[allocationIndex % allocationArray.size()]; + totalAllocationSize += allocationSize; state.ResumeTiming(); perThreadAllocations[allocationIndex] = TestAllocatorType::Allocate(allocationSize, 0); state.PauseTiming(); } - state.PauseTiming(); - state.counters[s_counterAllocatorMemoryRatio] = - benchmark::Counter(static_cast(TestAllocatorType::NumAllocatedBytes()), benchmark::Counter::kDefaults); + // In allocation cases, s_counterAllocatorMemoryRatio is measuring how much over-allocation our allocators + // are doing to keep track of the memory and because of fragmentation/under-use of blocks. A ratio over 1 means + // that we are using more memory than requested. Ideally we would approximate to a ratio of 1. + state.counters[s_counterAllocatorMemoryRatio] = benchmark::Counter( + static_cast(TestAllocatorType::NumAllocatedBytes()) / static_cast(totalAllocationSize), + benchmark::Counter::kDefaults); + // s_counterProcessMemoryRatio is measuring the same ratio but using the OS to measure the used process memory state.counters[s_counterProcessMemoryRatio] = benchmark::Counter( - static_cast(Platform::GetProcessMemoryUsageBytes() - processMemoryBaseline), + static_cast(Platform::GetProcessMemoryUsageBytes() - processMemoryBaseline) / static_cast(totalAllocationSize), benchmark::Counter::kDefaults); for (size_t allocationIndex = 0; allocationIndex < numberOfAllocations; ++allocationIndex) @@ -391,7 +397,6 @@ namespace Benchmark TestAllocatorType::GarbageCollect(); state.SetItemsProcessed(numberOfAllocations); - state.ResumeTiming(); } } }; @@ -422,10 +427,12 @@ namespace Benchmark const size_t processMemoryBaseline = Platform::GetProcessMemoryUsageBytes(); const size_t numberOfAllocations = perThreadAllocations.size(); + size_t totalAllocationSize = 0; for (size_t allocationIndex = 0; allocationIndex < numberOfAllocations; ++allocationIndex) { const AllocationSizeArray& allocationArray = s_allocationSizes[TAllocationSize]; const size_t allocationSize = allocationArray[allocationIndex % allocationArray.size()]; + totalAllocationSize += allocationSize; perThreadAllocations[allocationIndex] = TestAllocatorType::Allocate(allocationSize, 0); } @@ -439,29 +446,40 @@ namespace Benchmark perThreadAllocations[allocationIndex] = nullptr; } - state.counters[s_counterAllocatorMemoryRatio] = - benchmark::Counter(static_cast(TestAllocatorType::NumAllocatedBytes()), benchmark::Counter::kDefaults); + // In deallocation cases, s_counterAllocatorMemoryRatio is measuring how much "left-over" memory our allocators + // have after deallocations happen. This is memory that is not returned to the operative system. A ratio of 1 means + // that no memory was returned to the OS. A ratio over 1 means that we are holding more memory than requested. A ratio + // lower than 1 means that we have returned some memory. + state.counters[s_counterAllocatorMemoryRatio] = benchmark::Counter( + static_cast(TestAllocatorType::NumAllocatedBytes()) / static_cast(totalAllocationSize), + benchmark::Counter::kDefaults); + // s_counterProcessMemoryRatio is measuring the same ratio but using the OS to measure the used process memory state.counters[s_counterProcessMemoryRatio] = benchmark::Counter( - static_cast(Platform::GetProcessMemoryUsageBytes() - processMemoryBaseline), + static_cast(Platform::GetProcessMemoryUsageBytes() - processMemoryBaseline) / static_cast(totalAllocationSize), benchmark::Counter::kDefaults); state.SetItemsProcessed(numberOfAllocations); TestAllocatorType::GarbageCollect(); - - state.ResumeTiming(); } } }; + // For non-threaded ranges, run 100, 400, 1600 amounts static void RunRanges(benchmark::internal::Benchmark* b) { - for (int i = 0; i < 6; ++i) + for (int i = 0; i < 6; i += 2) { - b->Arg((1 << i) * 1000); + b->Arg((1 << i) * 100); } } + // For threaded ranges, run just 200, multi-threaded will already multiply by thread + static void ThreadedRunRanges(benchmark::internal::Benchmark* b) + { + b->Arg(100); + } + // Test under and over-subscription of threads vs the amount of CPUs available static const unsigned int MaxThreadRange = 2 * AZStd::thread::hardware_concurrency(); @@ -475,7 +493,7 @@ namespace Benchmark BM_REGISTER_TEMPLATE(FIXTURE, TESTNAME##_SMALL, ALLOCATORTYPE, SMALL)->Apply(RunRanges); \ BM_REGISTER_TEMPLATE(FIXTURE, TESTNAME##_BIG, ALLOCATORTYPE, BIG)->Apply(RunRanges); \ BM_REGISTER_TEMPLATE(FIXTURE, TESTNAME##_MIXED, ALLOCATORTYPE, MIXED)->Apply(RunRanges); \ - BM_REGISTER_TEMPLATE(FIXTURE, TESTNAME##_MIXED_THREADED, ALLOCATORTYPE, MIXED)->ThreadRange(1, MaxThreadRange)->Apply(RunRanges); + BM_REGISTER_TEMPLATE(FIXTURE, TESTNAME##_MIXED_THREADED, ALLOCATORTYPE, MIXED)->ThreadRange(2, MaxThreadRange)->Apply(ThreadedRunRanges); #define BM_REGISTER_ALLOCATOR(TESTNAME, ALLOCATORTYPE) \ namespace TESTNAME \ diff --git a/Code/Framework/AzCore/Tests/Memory/HphaSchema.cpp b/Code/Framework/AzCore/Tests/Memory/HphaSchema.cpp index 85dd79931d..08b84416e6 100644 --- a/Code/Framework/AzCore/Tests/Memory/HphaSchema.cpp +++ b/Code/Framework/AzCore/Tests/Memory/HphaSchema.cpp @@ -10,10 +10,6 @@ #include #include -#if defined(HAVE_BENCHMARK) -#include -#endif // HAVE_BENCHMARK - class HphaSchema_TestAllocator : public AZ::SimpleSchemaAllocator { @@ -112,87 +108,3 @@ namespace UnitTest HphaSchemaTestFixture, ::testing::ValuesIn(s_mixedInstancesParameters)); } - - -#if defined(HAVE_BENCHMARK) -namespace Benchmark -{ - class HphaSchemaBenchmarkFixture - : public ::benchmark::Fixture - { - void internalSetUp() - { - AZ::AllocatorInstance::Create(); - } - - void internalTearDown() - { - AZ::AllocatorInstance::Destroy(); - } - - public: - void SetUp(const benchmark::State&) override - { - internalSetUp(); - } - void SetUp(benchmark::State&) override - { - internalSetUp(); - } - void TearDown(const benchmark::State&) override - { - internalTearDown(); - } - void TearDown(benchmark::State&) override - { - internalTearDown(); - } - - static void BM_Allocations(benchmark::State& state, const AllocationSizeArray& allocationArray) - { - AZStd::vector allocations; - while (state.KeepRunning()) - { - state.PauseTiming(); - const size_t allocationIndex = allocations.size(); - const size_t allocationSize = allocationArray[allocationIndex % allocationArray.size()]; - - state.ResumeTiming(); - void* allocation = AZ::AllocatorInstance::Get().Allocate(allocationSize, 0); - - state.PauseTiming(); - allocations.emplace_back(allocation); - - state.ResumeTiming(); - } - - const size_t numberOfAllocations = allocations.size(); - state.SetItemsProcessed(numberOfAllocations); - - for (size_t allocationIndex = 0; allocationIndex < numberOfAllocations; ++allocationIndex) - { - AZ::AllocatorInstance::Get().DeAllocate(allocations[allocationIndex], allocationArray[allocationIndex % allocationArray.size()]); - } - AZ::AllocatorInstance::Get().GarbageCollect(); - } - }; - - // Small allocations, these are allocations that are going to end up in buckets in the HphaSchema - BENCHMARK_F(HphaSchemaBenchmarkFixture, SmallAllocations)(benchmark::State& state) - { - BM_Allocations(state, s_smallAllocationSizes); - } - - BENCHMARK_F(HphaSchemaBenchmarkFixture, BigAllocations)(benchmark::State& state) - { - BM_Allocations(state, s_bigAllocationSizes); - } - - BENCHMARK_F(HphaSchemaBenchmarkFixture, MixedAllocations)(benchmark::State& state) - { - BM_Allocations(state, s_mixedAllocationSizes); - } - - -} // Benchmark -#endif // HAVE_BENCHMARK From 0f5cb54a38d32abacc29f1bc23d58d6032384bb6 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Tue, 30 Nov 2021 18:11:08 -0800 Subject: [PATCH 008/284] Fixes Linux build Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../AzCore/Tests/Memory/AllocatorBenchmarks.cpp | 10 +++------- .../Linux/Tests/Memory/AllocatorBenchmarks_Linux.cpp | 4 ++-- .../Mac/Tests/Memory/AllocatorBenchmarks_Mac.cpp | 5 +++-- 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp b/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp index c1fdd4ca32..dfaefd4c0f 100644 --- a/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp +++ b/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp @@ -248,10 +248,6 @@ namespace Benchmark { public: AZ_TYPE_INFO(TestSystemAllocator, "{360D4DAA-D65D-4D5C-A6FA-1A4C5261C35C}"); - - TestSystemAllocator() - : AZ::SystemAllocator() - {} }; // Allocated bytes reported by the allocator / actually requested bytes @@ -293,7 +289,7 @@ namespace Benchmark m_allocations.resize(state.threads); for (auto& perThreadAllocations : m_allocations) { - perThreadAllocations.resize(state.range_x(), nullptr); + perThreadAllocations.resize(state.range(0), nullptr); } } } @@ -342,7 +338,7 @@ namespace Benchmark : public AllocatorBenchmarkFixture { using base = AllocatorBenchmarkFixture; - using TestAllocatorType = base::TestAllocatorType; + using TestAllocatorType = typename base::TestAllocatorType; void internalSetUp(const ::benchmark::State& state) override { @@ -406,7 +402,7 @@ namespace Benchmark : public AllocatorBenchmarkFixture { using base = AllocatorBenchmarkFixture; - using TestAllocatorType = base::TestAllocatorType; + using TestAllocatorType = typename base::TestAllocatorType; void internalSetUp(const ::benchmark::State& state) override { diff --git a/Code/Framework/AzCore/Tests/Platform/Linux/Tests/Memory/AllocatorBenchmarks_Linux.cpp b/Code/Framework/AzCore/Tests/Platform/Linux/Tests/Memory/AllocatorBenchmarks_Linux.cpp index 49ecefda49..636d5519d8 100644 --- a/Code/Framework/AzCore/Tests/Platform/Linux/Tests/Memory/AllocatorBenchmarks_Linux.cpp +++ b/Code/Framework/AzCore/Tests/Platform/Linux/Tests/Memory/AllocatorBenchmarks_Linux.cpp @@ -10,7 +10,7 @@ #include #include -#include +#include namespace Benchmark { @@ -25,7 +25,7 @@ namespace Benchmark size_t GetMemorySize(void* memory) { - return memory ? _aligned_msize(memory, 1, 0) : 0; + return memory ? malloc_usable_size(memory) : 0; } } } diff --git a/Code/Framework/AzCore/Tests/Platform/Mac/Tests/Memory/AllocatorBenchmarks_Mac.cpp b/Code/Framework/AzCore/Tests/Platform/Mac/Tests/Memory/AllocatorBenchmarks_Mac.cpp index 374d9f81f7..303b7efbb4 100644 --- a/Code/Framework/AzCore/Tests/Platform/Mac/Tests/Memory/AllocatorBenchmarks_Mac.cpp +++ b/Code/Framework/AzCore/Tests/Platform/Mac/Tests/Memory/AllocatorBenchmarks_Mac.cpp @@ -9,7 +9,8 @@ #include #include -#include +#include +#include namespace Benchmark { @@ -24,7 +25,7 @@ namespace Benchmark size_t GetMemorySize(void* memory) { - return memory ? _aligned_msize(memory, 1, 0) : 0; + return memory ? malloc_usable_size(memory) : 0; } } } From fbd2d60fc1cfc91a49331b304abb797524ae0270 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Tue, 30 Nov 2021 18:15:22 -0800 Subject: [PATCH 009/284] Fixes for mac Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Platform/Mac/Tests/Memory/AllocatorBenchmarks_Mac.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Code/Framework/AzCore/Tests/Platform/Mac/Tests/Memory/AllocatorBenchmarks_Mac.cpp b/Code/Framework/AzCore/Tests/Platform/Mac/Tests/Memory/AllocatorBenchmarks_Mac.cpp index 303b7efbb4..932252985a 100644 --- a/Code/Framework/AzCore/Tests/Platform/Mac/Tests/Memory/AllocatorBenchmarks_Mac.cpp +++ b/Code/Framework/AzCore/Tests/Platform/Mac/Tests/Memory/AllocatorBenchmarks_Mac.cpp @@ -9,7 +9,7 @@ #include #include -#include +#include #include namespace Benchmark @@ -25,7 +25,7 @@ namespace Benchmark size_t GetMemorySize(void* memory) { - return memory ? malloc_usable_size(memory) : 0; + return memory ? malloc_size(memory) : 0; } } } From 72f338a6897ff952ae0bfc564fc19fae072fbb1c Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 2 Dec 2021 11:55:36 -0800 Subject: [PATCH 010/284] Fixes for HeapSchema to get a default block if none is passed Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Framework/AzCore/AzCore/Memory/HeapSchema.cpp | 12 +----------- Code/Framework/AzCore/AzCore/Memory/HeapSchema.h | 14 ++++---------- 2 files changed, 5 insertions(+), 21 deletions(-) diff --git a/Code/Framework/AzCore/AzCore/Memory/HeapSchema.cpp b/Code/Framework/AzCore/AzCore/Memory/HeapSchema.cpp index aceafa1b28..1f0fc59a97 100644 --- a/Code/Framework/AzCore/AzCore/Memory/HeapSchema.cpp +++ b/Code/Framework/AzCore/AzCore/Memory/HeapSchema.cpp @@ -115,6 +115,7 @@ namespace AZ m_ownMemoryBlock[i] = false; } + AZ_Assert(m_desc.m_numMemoryBlocks > 0, "At least one memory block is required"); for (int i = 0; i < m_desc.m_numMemoryBlocks; ++i) { if (m_desc.m_memoryBlocks[i] == nullptr) // Allocate memory block if requested! @@ -131,17 +132,6 @@ namespace AZ m_capacity += m_desc.m_memoryBlocksByteSize[i]; } - - if (m_desc.m_numMemoryBlocks == 0) - { - // Create default memory space if we can to serve for default allocations - m_memSpaces[0] = AZDLMalloc::create_mspace(0, m_desc.m_isMultithreadAlloc); - if (m_memSpaces[0]) - { - AZDLMalloc::mspace_az_set_expandable(m_memSpaces[0], true); - m_capacity = Platform::GetHeapCapacity(); - } - } } HeapSchema::~HeapSchema() diff --git a/Code/Framework/AzCore/AzCore/Memory/HeapSchema.h b/Code/Framework/AzCore/AzCore/Memory/HeapSchema.h index f72ae31057..3a7716a127 100644 --- a/Code/Framework/AzCore/AzCore/Memory/HeapSchema.h +++ b/Code/Framework/AzCore/AzCore/Memory/HeapSchema.h @@ -32,17 +32,11 @@ namespace AZ */ struct Descriptor { - Descriptor() - : m_numMemoryBlocks(0) - , m_isMultithreadAlloc(true) - {} - - static const int m_memoryBlockAlignment = 64 * 1024; static const int m_maxNumBlocks = 5; - int m_numMemoryBlocks; ///< Number of memory blocks to use. - void* m_memoryBlocks[m_maxNumBlocks]; ///< Pointers to provided memory blocks or NULL if you want the system to allocate them for you with the System Allocator. - size_t m_memoryBlocksByteSize[m_maxNumBlocks]; ///< Sizes of different memory blocks, if m_memoryBlock is 0 the block will be allocated for you with the System Allocator. - bool m_isMultithreadAlloc; ///< Set to true to enable multi threading safe allocation. + int m_numMemoryBlocks = 1; ///< Number of memory blocks to use. + void* m_memoryBlocks[m_maxNumBlocks] = {}; ///< Pointers to provided memory blocks or NULL if you want the system to allocate them for you with the System Allocator. + size_t m_memoryBlocksByteSize[m_maxNumBlocks] = {4 * 1024}; ///< Sizes of different memory blocks, if m_memoryBlock is 0 the block will be allocated for you with the System Allocator. + bool m_isMultithreadAlloc = true; ///< Set to true to enable multi threading safe allocation. }; HeapSchema(const Descriptor& desc); From cf9aab991104d0b59697b4826d25024add70f752 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 6 Dec 2021 18:34:52 -0800 Subject: [PATCH 011/284] Adds recording functionality (disabled) and a benchmark that can run recordings Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../AzCore/AzCore/Memory/AllocatorBase.cpp | 81 +++++ .../Tests/Memory/AllocatorBenchmarks.cpp | 344 ++++++++++++------ 2 files changed, 309 insertions(+), 116 deletions(-) diff --git a/Code/Framework/AzCore/AzCore/Memory/AllocatorBase.cpp b/Code/Framework/AzCore/AzCore/Memory/AllocatorBase.cpp index e450f12bcf..40ddff0fc3 100644 --- a/Code/Framework/AzCore/AzCore/Memory/AllocatorBase.cpp +++ b/Code/Framework/AzCore/AzCore/Memory/AllocatorBase.cpp @@ -12,6 +12,49 @@ using namespace AZ; +#define RECORDING_ENABLED 0 + +#if RECORDING_ENABLED + +struct AllocatorOperation +{ + enum OperationType : unsigned int + { + ALLOCATE, + DEALLOCATE, + REALLOCATE, + RESIZE + }; + OperationType m_operationType : 2; + size_t m_size : 46; + size_t m_alignment : 16; + void* m_ptr; + void* m_newptr; // required for resize +}; +static constexpr size_t s_allocationOperationCount = 5 * 1024; +static AZStd::array s_operations = {}; +static uint64_t s_operationCounter = 0; +static AZStd::mutex s_operationsMutex; + +AllocatorOperation& GetNextAllocatorOperation() +{ + AZStd::scoped_lock lock(s_operationsMutex); + if (s_operationCounter == s_allocationOperationCount) + { + FILE* file = nullptr; + fopen_s(&file, "memoryrecordings.bin", "ab"); + if (file) + { + fwrite(&s_operations, sizeof(AllocatorOperation), s_allocationOperationCount, file); + fclose(file); + } + s_operationCounter = 0; + } + return s_operations[s_operationCounter++]; +} + +#endif + AllocatorBase::AllocatorBase(IAllocatorAllocate* allocationSource, const char* name, const char* desc) : IAllocator(allocationSource), m_name(name), @@ -136,6 +179,16 @@ void AllocatorBase::ProfileAllocation(void* ptr, size_t byteSize, size_t alignme EBUS_EVENT(AZ::Debug::MemoryDrillerBus, RegisterAllocation, this, ptr, byteSize, alignment, name, fileName, lineNum, suppressStackRecord); #endif } + +#if RECORDING_ENABLED + { + AllocatorOperation& op = GetNextAllocatorOperation(); + op.m_operationType = AllocatorOperation::ALLOCATE; + op.m_size = byteSize; + op.m_alignment = alignment; + op.m_ptr = ptr; + } +#endif } void AllocatorBase::ProfileDeallocation(void* ptr, size_t byteSize, size_t alignment, Debug::AllocationInfo* info) @@ -148,6 +201,15 @@ void AllocatorBase::ProfileDeallocation(void* ptr, size_t byteSize, size_t align EBUS_EVENT(AZ::Debug::MemoryDrillerBus, UnregisterAllocation, this, ptr, byteSize, alignment, info); #endif } +#if RECORDING_ENABLED + { + AllocatorOperation& op = GetNextAllocatorOperation(); + op.m_operationType = AllocatorOperation::DEALLOCATE; + op.m_size = byteSize; + op.m_alignment = alignment; + op.m_ptr = ptr; + } +#endif } void AllocatorBase::ProfileReallocationBegin(void* ptr, size_t newSize) @@ -174,6 +236,16 @@ void AllocatorBase::ProfileReallocationEnd(void* ptr, void* newPtr, size_t newSi EBUS_EVENT(AZ::Debug::MemoryDrillerBus, ReallocateAllocation, this, ptr, newPtr, newSize, newAlignment); #endif } +#if RECORDING_ENABLED + { + AllocatorOperation& op = GetNextAllocatorOperation(); + op.m_operationType = AllocatorOperation::REALLOCATE; + op.m_size = newSize; + op.m_alignment = newAlignment; + op.m_ptr = ptr; + op.m_newptr = newPtr; + } +#endif } void AllocatorBase::ProfileReallocation(void* ptr, void* newPtr, size_t newSize, size_t newAlignment) @@ -187,6 +259,15 @@ void AllocatorBase::ProfileResize(void* ptr, size_t newSize) { EBUS_EVENT(AZ::Debug::MemoryDrillerBus, ResizeAllocation, this, ptr, newSize); } +#if RECORDING_ENABLED + { + AllocatorOperation& op = GetNextAllocatorOperation(); + op.m_operationType = AllocatorOperation::RESIZE; + op.m_size = newSize; + op.m_alignment = 0; + op.m_ptr = ptr; + } +#endif } bool AllocatorBase::OnOutOfMemory(size_t byteSize, size_t alignment, int flags, const char* name, const char* fileName, int lineNum) diff --git a/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp b/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp index dfaefd4c0f..76c3316009 100644 --- a/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp +++ b/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp @@ -32,7 +32,7 @@ namespace Benchmark size_t GetMemorySize(void* memory); } - static AZ::Debug::DrillerManager* s_drillerManager = nullptr; + //static AZ::Debug::DrillerManager* s_drillerManager = nullptr; /// /// Test allocator wrapper that redirects the calls to the passed TAllocator by using AZ::AllocatorInstance. @@ -47,14 +47,14 @@ namespace Benchmark { AZ::AllocatorInstance::Create(); - s_drillerManager = AZ::Debug::DrillerManager::Create(); - s_drillerManager->Register(aznew AZ::Debug::MemoryDriller); + /*s_drillerManager = AZ::Debug::DrillerManager::Create(); + s_drillerManager->Register(aznew AZ::Debug::MemoryDriller);*/ } static void TearDown() { - AZ::Debug::DrillerManager::Destroy(s_drillerManager); - s_drillerManager = nullptr; + /*AZ::Debug::DrillerManager::Destroy(s_drillerManager); + s_drillerManager = nullptr;*/ AZ::AllocatorInstance::Destroy(); } @@ -89,51 +89,41 @@ namespace Benchmark return AZ::AllocatorInstance::Get().NumAllocatedBytes() + AZ::AllocatorInstance::Get().GetUnAllocatedMemory(); } + + static size_t GetSize(void* ptr) + { + return AZ::AllocatorInstance::Get().AllocationSize(ptr); + } }; /// /// Basic allocator used as a baseline. This allocator is the most basic allocation possible with the OS (AZ_OS_MALLOC). /// MallocSchema cannot be used here because it has extra logic that we don't want to use as a baseline. /// - class TestRawMallocAllocator - : public AZ::AllocatorBase - , public AZ::IAllocatorAllocate + class TestRawMallocAllocator {}; + + template<> + class TestAllocatorWrapper { public: - AZ_TYPE_INFO(TestMallocSchemaAllocator, "{08EB400A-D723-46C6-808E-D0844C8DE206}"); - - struct Descriptor {}; - - TestRawMallocAllocator() - : AllocatorBase(this, "TestRawMallocAllocator", "") + TestAllocatorWrapper() { - m_numAllocatedBytes = 0; + s_numAllocatedBytes = 0; } - bool Create(const Descriptor&) + static void SetUp() { - m_numAllocatedBytes = 0; - return true; + s_numAllocatedBytes = 0; } - // IAllocator - void Destroy() override + static void TearDown() { - m_numAllocatedBytes = 0; - } - AZ::AllocatorDebugConfig GetDebugConfig() override - { - return AZ::AllocatorDebugConfig(); - } - AZ::IAllocatorAllocate* GetSchema() override - { - return nullptr; } // IAllocatorAllocate - void* Allocate(size_t byteSize, size_t alignment, int = 0, const char* = 0, const char* = 0, int = 0, unsigned int = 0) override + static void* Allocate(size_t byteSize, size_t alignment) { - m_numAllocatedBytes += byteSize; + s_numAllocatedBytes += byteSize; if (alignment) { return AZ_OS_MALLOC(byteSize, alignment); @@ -144,18 +134,18 @@ namespace Benchmark } } - void DeAllocate(void* ptr, size_t = 0, size_type = 0) override + static void DeAllocate(void* ptr, size_t = 0) { - m_numAllocatedBytes -= Platform::GetMemorySize(ptr); + s_numAllocatedBytes -= Platform::GetMemorySize(ptr); AZ_OS_FREE(ptr); } - void* ReAllocate(void* ptr, size_t newSize, size_t newAlignment) override + static void* ReAllocate(void* ptr, size_t newSize, size_t newAlignment) { - m_numAllocatedBytes -= Platform::GetMemorySize(ptr); + s_numAllocatedBytes -= Platform::GetMemorySize(ptr); AZ_OS_FREE(ptr); - m_numAllocatedBytes += newSize; + s_numAllocatedBytes += newSize; if (newAlignment) { return AZ_OS_MALLOC(newSize, newAlignment); @@ -166,7 +156,7 @@ namespace Benchmark } } - size_t Resize(void* ptr, size_t newSize) override + static size_t Resize(void* ptr, size_t newSize) { AZ_UNUSED(ptr); AZ_UNUSED(newSize); @@ -174,45 +164,24 @@ namespace Benchmark return 0; } - size_t AllocationSize(void* ptr) override + static void GarbageCollect() {} + + static size_t NumAllocatedBytes() + { + return s_numAllocatedBytes; + } + + static size_t GetSize(void* ptr) { return Platform::GetMemorySize(ptr); } - void GarbageCollect() override {} - - size_t NumAllocatedBytes() const override - { - return m_numAllocatedBytes; - } - - size_t Capacity() const override - { - return AZ_CORE_MAX_ALLOCATOR_SIZE; // unused - } - - size_t GetMaxAllocationSize() const override - { - return AZ_CORE_MAX_ALLOCATOR_SIZE; // unused - } - - size_t GetMaxContiguousAllocationSize() const override - { - return AZ_CORE_MAX_ALLOCATOR_SIZE; // unused - } - size_t GetUnAllocatedMemory(bool = false) const override - { - return 0; // unused - } - IAllocatorAllocate* GetSubAllocator() override - { - return nullptr; // unused - } - private: - size_t m_numAllocatedBytes; + static size_t s_numAllocatedBytes; }; + size_t TestAllocatorWrapper::s_numAllocatedBytes = 0; + // Here we require to implement this to be able to configure a name for the allocator, otherswise the AllocatorManager crashes when trying to configure the overrides class TestMallocSchemaAllocator : public AZ::SimpleSchemaAllocator { @@ -250,11 +219,14 @@ namespace Benchmark AZ_TYPE_INFO(TestSystemAllocator, "{360D4DAA-D65D-4D5C-A6FA-1A4C5261C35C}"); }; - // Allocated bytes reported by the allocator / actually requested bytes - static const char* s_counterAllocatorMemoryRatio = "Allocator_MemoryRatio"; + // Allocated bytes reported by the allocator + static const char* s_counterAllocatorMemory = "Allocator_Memory"; - // Allocated bytes reported by the process / actually requested bytes - static const char* s_counterProcessMemoryRatio = "Process_MemoryRatio"; + // Allocated bytes reported by the process + static const char* s_counterProcessMemory = "Process_Memory"; + + // Allocated bytes as counted by the benchmark + static const char* s_counterBenchmarkMemory = "Benchmark_Memory"; enum AllocationSize { @@ -340,16 +312,6 @@ namespace Benchmark using base = AllocatorBenchmarkFixture; using TestAllocatorType = typename base::TestAllocatorType; - void internalSetUp(const ::benchmark::State& state) override - { - AllocatorBenchmarkFixture::internalSetUp(state); - } - - void internalTearDown(const ::benchmark::State& state) override - { - AllocatorBenchmarkFixture::internalTearDown(state); - } - public: void Benchmark(benchmark::State& state) { @@ -372,16 +334,9 @@ namespace Benchmark state.PauseTiming(); } - // In allocation cases, s_counterAllocatorMemoryRatio is measuring how much over-allocation our allocators - // are doing to keep track of the memory and because of fragmentation/under-use of blocks. A ratio over 1 means - // that we are using more memory than requested. Ideally we would approximate to a ratio of 1. - state.counters[s_counterAllocatorMemoryRatio] = benchmark::Counter( - static_cast(TestAllocatorType::NumAllocatedBytes()) / static_cast(totalAllocationSize), - benchmark::Counter::kDefaults); - // s_counterProcessMemoryRatio is measuring the same ratio but using the OS to measure the used process memory - state.counters[s_counterProcessMemoryRatio] = benchmark::Counter( - static_cast(Platform::GetProcessMemoryUsageBytes() - processMemoryBaseline) / static_cast(totalAllocationSize), - benchmark::Counter::kDefaults); + state.counters[s_counterAllocatorMemory] = benchmark::Counter(static_cast(TestAllocatorType::NumAllocatedBytes()), benchmark::Counter::kDefaults); + state.counters[s_counterProcessMemory] = benchmark::Counter(static_cast(Platform::GetProcessMemoryUsageBytes() - processMemoryBaseline), benchmark::Counter::kDefaults); + state.counters[s_counterBenchmarkMemory] = benchmark::Counter(static_cast(totalAllocationSize), benchmark::Counter::kDefaults); for (size_t allocationIndex = 0; allocationIndex < numberOfAllocations; ++allocationIndex) { @@ -404,15 +359,6 @@ namespace Benchmark using base = AllocatorBenchmarkFixture; using TestAllocatorType = typename base::TestAllocatorType; - void internalSetUp(const ::benchmark::State& state) override - { - AllocatorBenchmarkFixture::internalSetUp(state); - } - - void internalTearDown(const ::benchmark::State& state) override - { - AllocatorBenchmarkFixture::internalTearDown(state); - } public: void Benchmark(benchmark::State& state) { @@ -442,17 +388,9 @@ namespace Benchmark perThreadAllocations[allocationIndex] = nullptr; } - // In deallocation cases, s_counterAllocatorMemoryRatio is measuring how much "left-over" memory our allocators - // have after deallocations happen. This is memory that is not returned to the operative system. A ratio of 1 means - // that no memory was returned to the OS. A ratio over 1 means that we are holding more memory than requested. A ratio - // lower than 1 means that we have returned some memory. - state.counters[s_counterAllocatorMemoryRatio] = benchmark::Counter( - static_cast(TestAllocatorType::NumAllocatedBytes()) / static_cast(totalAllocationSize), - benchmark::Counter::kDefaults); - // s_counterProcessMemoryRatio is measuring the same ratio but using the OS to measure the used process memory - state.counters[s_counterProcessMemoryRatio] = benchmark::Counter( - static_cast(Platform::GetProcessMemoryUsageBytes() - processMemoryBaseline) / static_cast(totalAllocationSize), - benchmark::Counter::kDefaults); + state.counters[s_counterAllocatorMemory] = benchmark::Counter(static_cast(TestAllocatorType::NumAllocatedBytes()), benchmark::Counter::kDefaults); + state.counters[s_counterProcessMemory] = benchmark::Counter(static_cast(Platform::GetProcessMemoryUsageBytes() - processMemoryBaseline), benchmark::Counter::kDefaults); + state.counters[s_counterBenchmarkMemory] = benchmark::Counter(static_cast(totalAllocationSize), benchmark::Counter::kDefaults); state.SetItemsProcessed(numberOfAllocations); @@ -460,6 +398,175 @@ namespace Benchmark } } }; + + template + class RecordedAllocationBenchmarkFixture : public AllocatorBenchmarkFixture + { + using base = AllocatorBenchmarkFixture; + using TestAllocatorType = typename base::TestAllocatorType; + + struct AllocatorOperation + { + enum OperationType : unsigned int + { + ALLOCATE, + DEALLOCATE, + REALLOCATE, + RESIZE + }; + OperationType m_operationType : 2; + size_t m_size : 46; + size_t m_alignment : 16; + void* m_ptr; + void* m_newptr; // required for resize + }; + + public: + void Benchmark(benchmark::State& state) + { + for (auto _ : state) + { + state.PauseTiming(); + + AZStd::unordered_map pointerRemapping; + AZStd::unordered_map allocationSize; + constexpr size_t allocationOperationCount = 5 * 1024; + AZStd::array m_operations = {}; + + FILE* file = nullptr; + fopen_s(&file, "memoryrecordings.bin", "rb"); + if (!file) + { + return; + } + size_t elementsRead = fread(&m_operations, sizeof(AllocatorOperation), allocationOperationCount, file); + size_t totalElementsRead = elementsRead; + const size_t processMemoryBaseline = Platform::GetProcessMemoryUsageBytes(); + size_t totalAllocationSize = 0; + + while (elementsRead > 0) + { + for (size_t operationIndex = 0; operationIndex < elementsRead; ++operationIndex) + { + const AllocatorOperation& operation = m_operations[operationIndex]; + switch (operation.m_operationType) + { + case AllocatorOperation::ALLOCATE: + { + if (operation.m_ptr) + { + const auto it = pointerRemapping.emplace(operation.m_ptr, nullptr); + if (it.second) // otherwise already allocated + { + state.ResumeTiming(); + void* ptr = TestAllocatorType::Allocate(operation.m_size, operation.m_alignment); + state.PauseTiming(); + totalAllocationSize += operation.m_size; + it.first->second = ptr; + allocationSize[ptr] = operation.m_size; + } + else + { + //AZ_Warning("RecordedAllocationBenchmarkFixture", false, "Allocation on %p was already made", operation.m_ptr); + } + } + break; + } + case AllocatorOperation::DEALLOCATE: + { + if (operation.m_ptr) // some deallocate(nullptr) are recorded + { + const auto ptrIt = pointerRemapping.find(operation.m_ptr); + if (ptrIt != pointerRemapping.end()) + { + totalAllocationSize -= allocationSize[ptrIt->second]; + state.ResumeTiming(); + TestAllocatorType::DeAllocate(ptrIt->second, /*operation.m_size*/ 0); // size is not correct after a resize, a 0 size deals with it + state.PauseTiming(); + pointerRemapping.erase(ptrIt); + } + } + else + { + // Just to account of the call of deallocate(nullptr); + // totalAllocationSize -= 0; // No real deallocation happened + state.ResumeTiming(); + TestAllocatorType::DeAllocate(operation.m_ptr, /*operation.m_size*/ 0); + state.PauseTiming(); + } + break; + } + case AllocatorOperation::REALLOCATE: + { + void* ptr = nullptr; + if (operation.m_ptr) + { + AZ_Assert(operation.m_newptr, "Need to consider other cases?"); + const auto ptrIt = pointerRemapping.find(operation.m_ptr); + AZ_Assert(ptrIt != pointerRemapping.end(), "Missing allocation for reallocation"); // In case the recording didnt catch something + ptr = ptrIt->second; + pointerRemapping.erase(ptrIt); + } + AZ_Assert(operation.m_newptr != nullptr, "Reallocation failed in the game"); + const auto it = pointerRemapping.emplace(operation.m_newptr, nullptr); + if (it.second) + { + totalAllocationSize -= allocationSize[ptr]; + state.ResumeTiming(); + void* newPtr = TestAllocatorType::ReAllocate(ptr, operation.m_size, operation.m_alignment); + state.PauseTiming(); + totalAllocationSize += operation.m_size; + it.first->second = newPtr; + allocationSize[newPtr] = operation.m_size; + } + else + { + totalAllocationSize -= allocationSize[ptr]; + state.ResumeTiming(); + TestAllocatorType::DeAllocate(ptr); + state.PauseTiming(); + } + break; + } + case AllocatorOperation::RESIZE: + { + const auto ptrIt = pointerRemapping.find(operation.m_ptr); + AZ_Assert(ptrIt != pointerRemapping.end(), "Missing allocation for resize"); // In case the recording didnt catch something + totalAllocationSize -= allocationSize[ptrIt->second]; + state.ResumeTiming(); + TestAllocatorType::Resize(ptrIt->second, operation.m_size); + state.PauseTiming(); + totalAllocationSize += operation.m_size; + if (operation.m_size == 0) + { + pointerRemapping.erase(ptrIt); + } + break; + } + } + } + + elementsRead = fread(&m_operations, sizeof(AllocatorOperation), allocationOperationCount, file); + totalElementsRead += elementsRead; + } + fclose(file); + + state.counters[s_counterAllocatorMemory] = benchmark::Counter(static_cast(TestAllocatorType::NumAllocatedBytes()), benchmark::Counter::kDefaults); + state.counters[s_counterProcessMemory] = benchmark::Counter(static_cast(Platform::GetProcessMemoryUsageBytes() - processMemoryBaseline), benchmark::Counter::kDefaults); + state.counters[s_counterBenchmarkMemory] = benchmark::Counter(static_cast(totalAllocationSize), benchmark::Counter::kDefaults); + + state.SetItemsProcessed(totalElementsRead); + + // Deallocate the remainder (since we stopped the recording middle-game)(there are leaks as well) + for (const auto& pointerMapping : pointerRemapping) + { + TestAllocatorType::DeAllocate(pointerMapping.second); + } + pointerRemapping.clear(); + TestAllocatorType::GarbageCollect(); + } + } + }; // For non-threaded ranges, run 100, 400, 1600 amounts static void RunRanges(benchmark::internal::Benchmark* b) @@ -469,6 +576,10 @@ namespace Benchmark b->Arg((1 << i) * 100); } } + static void RecordedRunRanges(benchmark::internal::Benchmark* b) + { + b->Arg(1); + } // For threaded ranges, run just 200, multi-threaded will already multiply by thread static void ThreadedRunRanges(benchmark::internal::Benchmark* b) @@ -494,16 +605,17 @@ namespace Benchmark #define BM_REGISTER_ALLOCATOR(TESTNAME, ALLOCATORTYPE) \ namespace TESTNAME \ { \ - BM_REGISTER_SIZE_FIXTURES(AllocationBenchmarkFixture, TESTNAME, ALLOCATORTYPE) \ - BM_REGISTER_SIZE_FIXTURES(DeAllocationBenchmarkFixture, TESTNAME, ALLOCATORTYPE) \ + BM_REGISTER_SIZE_FIXTURES(AllocationBenchmarkFixture, TESTNAME, ALLOCATORTYPE); \ + BM_REGISTER_SIZE_FIXTURES(DeAllocationBenchmarkFixture, TESTNAME, ALLOCATORTYPE); \ + BM_REGISTER_TEMPLATE(RecordedAllocationBenchmarkFixture, TESTNAME, ALLOCATORTYPE)->Apply(RecordedRunRanges); \ } BM_REGISTER_ALLOCATOR(RawMallocAllocator, TestRawMallocAllocator); BM_REGISTER_ALLOCATOR(MallocSchemaAllocator, TestMallocSchemaAllocator); - BM_REGISTER_ALLOCATOR(HeapSchemaAllocator, TestHeapSchemaAllocator); BM_REGISTER_ALLOCATOR(HphaSchemaAllocator, TestHphaSchemaAllocator); BM_REGISTER_ALLOCATOR(SystemAllocator, TestSystemAllocator); + //BM_REGISTER_ALLOCATOR(HeapSchemaAllocator, TestHeapSchemaAllocator); // Requires to pre-allocate blocks and cannot work as a general-purpose allocator //BM_REGISTER_SCHEMA(BestFitExternalMapSchema); // Requires to implement AZ::IAllocatorAllocate //BM_REGISTER_SCHEMA(PoolSchema); // Requires special alignment requests while allocating From 4b07665496f060459020f3f6c250807f26d0a80f Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 6 Dec 2021 18:35:39 -0800 Subject: [PATCH 012/284] Removes Heap allocator from being possible to use as a SystemAllocator since it doesnt allow dynamic allocating (only works with pre-allocated blocks) Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../AzCore/AzCore/Memory/SystemAllocator.cpp | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/Code/Framework/AzCore/AzCore/Memory/SystemAllocator.cpp b/Code/Framework/AzCore/AzCore/Memory/SystemAllocator.cpp index 8c84338fd0..9ce681ef2d 100644 --- a/Code/Framework/AzCore/AzCore/Memory/SystemAllocator.cpp +++ b/Code/Framework/AzCore/AzCore/Memory/SystemAllocator.cpp @@ -19,7 +19,6 @@ #define AZCORE_SYSTEM_ALLOCATOR_HPHA 1 #define AZCORE_SYSTEM_ALLOCATOR_MALLOC 2 -#define AZCORE_SYSTEM_ALLOCATOR_HEAP 3 #if !defined(AZCORE_SYSTEM_ALLOCATOR) // define the default @@ -30,8 +29,6 @@ #include #elif AZCORE_SYSTEM_ALLOCATOR == AZCORE_SYSTEM_ALLOCATOR_MALLOC #include -#elif AZCORE_SYSTEM_ALLOCATOR == AZCORE_SYSTEM_ALLOCATOR_HEAP - #include #else #error "Invalid allocator selected for SystemAllocator" #endif @@ -46,8 +43,6 @@ static bool g_isSystemSchemaUsed = false; static AZStd::aligned_storage::value>::type g_systemSchema; #elif AZCORE_SYSTEM_ALLOCATOR == AZCORE_SYSTEM_ALLOCATOR_MALLOC static AZStd::aligned_storage::value>::type g_systemSchema; -#elif AZCORE_SYSTEM_ALLOCATOR == AZCORE_SYSTEM_ALLOCATOR_HEAP - static AZStd::aligned_storage::value>::type g_systemSchema; #endif ////////////////////////////////////////////////////////////////////////// @@ -121,11 +116,6 @@ SystemAllocator::Create(const Descriptor& desc) heapDesc.m_systemChunkSize = desc.m_heap.m_systemChunkSize; #elif AZCORE_SYSTEM_ALLOCATOR == AZCORE_SYSTEM_ALLOCATOR_MALLOC MallocSchema::Descriptor heapDesc; -#elif AZCORE_SYSTEM_ALLOCATOR == AZCORE_SYSTEM_ALLOCATOR_HEAP - HeapSchema::Descriptor heapDesc; - memcpy(heapDesc.m_memoryBlocks, desc.m_heap.m_memoryBlocks, sizeof(heapDesc.m_memoryBlocks)); - memcpy(heapDesc.m_memoryBlocksByteSize, desc.m_heap.m_memoryBlocksByteSize, sizeof(heapDesc.m_memoryBlocksByteSize)); - heapDesc.m_numMemoryBlocks = desc.m_heap.m_numMemoryBlocks; #endif if (&AllocatorInstance::Get() == this) // if we are the system allocator { @@ -135,8 +125,6 @@ SystemAllocator::Create(const Descriptor& desc) m_allocator = new(&g_systemSchema)HphaSchema(heapDesc); #elif AZCORE_SYSTEM_ALLOCATOR == AZCORE_SYSTEM_ALLOCATOR_MALLOC m_allocator = new(&g_systemSchema)MallocSchema(heapDesc); -#elif AZCORE_SYSTEM_ALLOCATOR == AZCORE_SYSTEM_ALLOCATOR_HEAP - m_allocator = new(&g_systemSchema)HeapSchema(heapDesc); #endif g_isSystemSchemaUsed = true; isReady = true; @@ -150,8 +138,6 @@ SystemAllocator::Create(const Descriptor& desc) m_allocator = azcreate(HphaSchema, (heapDesc), SystemAllocator); #elif AZCORE_SYSTEM_ALLOCATOR == AZCORE_SYSTEM_ALLOCATOR_MALLOC m_allocator = azcreate(MallocSchema, (heapDesc), SystemAllocator); -#elif AZCORE_SYSTEM_ALLOCATOR == AZCORE_SYSTEM_ALLOCATOR_HEAP - m_allocator = azcreate(HeapSchema, (heapDesc), SystemAllocator); #endif if (m_allocator == nullptr) { @@ -188,8 +174,6 @@ SystemAllocator::Destroy() static_cast(m_allocator)->~HphaSchema(); #elif AZCORE_SYSTEM_ALLOCATOR == AZCORE_SYSTEM_ALLOCATOR_MALLOC static_cast(m_allocator)->~MallocSchema(); -#elif AZCORE_SYSTEM_ALLOCATOR == AZCORE_SYSTEM_ALLOCATOR_HEAP - static_cast(m_allocator)->~HeapSchema(); #endif g_isSystemSchemaUsed = false; } From f96a466212c1acc526e2a1e41e6849fe854e3a1d Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Tue, 7 Dec 2021 17:58:49 -0800 Subject: [PATCH 013/284] WIP trying to use SystemAllocator instead of raw reads Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../AzCore/AzCore/Memory/AllocatorBase.cpp | 193 ++++++++++++------ Code/Framework/AzCore/CMakeLists.txt | 5 + .../Memory/AllocatorBenchmarkRecordings.bin | 3 + .../Tests/Memory/AllocatorBenchmarks.cpp | 145 ++++--------- 4 files changed, 181 insertions(+), 165 deletions(-) create mode 100644 Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarkRecordings.bin diff --git a/Code/Framework/AzCore/AzCore/Memory/AllocatorBase.cpp b/Code/Framework/AzCore/AzCore/Memory/AllocatorBase.cpp index 7bba1b1d20..32ccd43f9a 100644 --- a/Code/Framework/AzCore/AzCore/Memory/AllocatorBase.cpp +++ b/Code/Framework/AzCore/AzCore/Memory/AllocatorBase.cpp @@ -11,47 +11,142 @@ using namespace AZ; -#define RECORDING_ENABLED 0 +#define RECORDING_ENABLED 1 #if RECORDING_ENABLED -struct AllocatorOperation -{ - enum OperationType : unsigned int - { - ALLOCATE, - DEALLOCATE, - REALLOCATE, - RESIZE - }; - OperationType m_operationType : 2; - size_t m_size : 46; - size_t m_alignment : 16; - void* m_ptr; - void* m_newptr; // required for resize -}; -static constexpr size_t s_allocationOperationCount = 5 * 1024; -static AZStd::array s_operations = {}; -static uint64_t s_operationCounter = 0; -static AZStd::mutex s_operationsMutex; +#include +#include +#include +#include -AllocatorOperation& GetNextAllocatorOperation() +namespace { - AZStd::scoped_lock lock(s_operationsMutex); - if (s_operationCounter == s_allocationOperationCount) + class DebugAllocator { - FILE* file = nullptr; - fopen_s(&file, "memoryrecordings.bin", "ab"); - if (file) + public: + typedef void* pointer_type; + typedef AZStd::size_t size_type; + typedef AZStd::ptrdiff_t difference_type; + typedef AZStd::false_type allow_memory_leaks; ///< Regular allocators should not leak. + + AZ_FORCE_INLINE pointer_type allocate(size_t byteSize, size_t alignment, int = 0) { - fwrite(&s_operations, sizeof(AllocatorOperation), s_allocationOperationCount, file); - fclose(file); + return AZ_OS_MALLOC(byteSize, alignment); } - s_operationCounter = 0; - } - return s_operations[s_operationCounter++]; -} + AZ_FORCE_INLINE size_type resize(pointer_type, size_type) + { + return 0; + } + AZ_FORCE_INLINE void deallocate(pointer_type ptr, size_type, size_type) + { + AZ_OS_FREE(ptr); + } + }; + struct AllocatorOperation + { + enum OperationType : unsigned int + { + ALLOCATE, + DEALLOCATE + }; + OperationType m_type: 1; + unsigned int m_size : 28; // Can represent up to 256Mb requests + unsigned int m_alignment : 7; // Can represent up to 128 alignment + unsigned int m_recordId : 28; // Can represent up to 256M simultaneous requests, we reuse ids + }; + static AZStd::mutex s_operationsMutex = {}; + + static constexpr size_t s_maxNumberOfAllocationsToRecord = 16384; + static size_t s_numberOfAllocationsRecorded = 0; + static constexpr size_t s_allocationOperationCount = 5 * 1024; + static AZStd::array s_operations = {}; + static uint64_t s_operationCounter = 0; + + static unsigned int s_nextRecordId = 1; + using AllocatorOperationByAddress = AZStd::map, DebugAllocator>; + static AllocatorOperationByAddress s_allocatorOperationByAddress; + using AvailableRecordIds = AZStd::vector; + AvailableRecordIds s_availableRecordIds; + + void RecordAllocatorOperation(AllocatorOperation::OperationType type, void* ptr, size_t size = 0, size_t alignment = 0) + { + AZStd::scoped_lock lock(s_operationsMutex); + if (s_operationCounter == s_allocationOperationCount) + { + AZ::IO::SystemFile file; + file.Open("memoryrecordings.bin", AZ::IO::SystemFile::OpenMode::SF_OPEN_APPEND); + if (file.IsOpen()) + { + file.Write(&s_operations, sizeof(AllocatorOperation) * s_allocationOperationCount); + file.Close(); + } + s_operationCounter = 0; + } + AllocatorOperation& operation = s_operations[s_operationCounter++]; + operation.m_type = type; + if (type == AllocatorOperation::OperationType::ALLOCATE) + { + if (s_numberOfAllocationsRecorded > s_maxNumberOfAllocationsToRecord) + { + // reached limit of allocations, dont record anymore + --s_operationCounter; + return; + } + ++s_numberOfAllocationsRecorded; + operation.m_size = size; + operation.m_alignment = alignment; + unsigned int recordId = 0; + if (!s_availableRecordIds.empty()) + { + recordId = s_availableRecordIds.back(); + s_availableRecordIds.pop_back(); + } + else + { + recordId = s_nextRecordId; + ++s_nextRecordId; + } + operation.m_recordId = recordId; + auto it = s_allocatorOperationByAddress.emplace(ptr, operation); + if (!it.second) + { + // double alloc or resize, leave the current record and return the id + operation = it.first->second; + s_availableRecordIds.emplace_back(recordId); + } + } + else + { + if (ptr == nullptr) + { + // common scenario, just record the operation + operation.m_size = 0; + operation.m_alignment = 0; + operation.m_recordId = 0; // recordId = 0 will flag this case + } + else + { + auto it = s_allocatorOperationByAddress.find(ptr); + if (it != s_allocatorOperationByAddress.end()) + { + operation.m_size = it->second.m_size; + operation.m_alignment = it->second.m_alignment; + operation.m_recordId = it->second.m_recordId; + s_availableRecordIds.push_back(it->second.m_recordId); + s_allocatorOperationByAddress.erase(it); + } + else + { + // just dont record this operation + --s_operationCounter; + } + } + } + + } +} #endif AllocatorBase::AllocatorBase(IAllocatorAllocate* allocationSource, const char* name, const char* desc) : @@ -188,13 +283,7 @@ void AllocatorBase::ProfileAllocation(void* ptr, size_t byteSize, size_t alignme } #if RECORDING_ENABLED - { - AllocatorOperation& op = GetNextAllocatorOperation(); - op.m_operationType = AllocatorOperation::ALLOCATE; - op.m_size = byteSize; - op.m_alignment = alignment; - op.m_ptr = ptr; - } + RecordAllocatorOperation(AllocatorOperation::ALLOCATE, ptr, byteSize, alignment); #endif } @@ -209,13 +298,7 @@ void AllocatorBase::ProfileDeallocation(void* ptr, size_t byteSize, size_t align } } #if RECORDING_ENABLED - { - AllocatorOperation& op = GetNextAllocatorOperation(); - op.m_operationType = AllocatorOperation::DEALLOCATE; - op.m_size = byteSize; - op.m_alignment = alignment; - op.m_ptr = ptr; - } + RecordAllocatorOperation(AllocatorOperation::DEALLOCATE, ptr, byteSize, alignment); #endif } @@ -232,14 +315,8 @@ void AllocatorBase::ProfileReallocationEnd(void* ptr, void* newPtr, size_t newSi ProfileAllocation(newPtr, newSize, newAlignment, info.m_name, info.m_fileName, info.m_lineNum, 0); } #if RECORDING_ENABLED - { - AllocatorOperation& op = GetNextAllocatorOperation(); - op.m_operationType = AllocatorOperation::REALLOCATE; - op.m_size = newSize; - op.m_alignment = newAlignment; - op.m_ptr = ptr; - op.m_newptr = newPtr; - } + RecordAllocatorOperation(AllocatorOperation::DEALLOCATE, ptr); + RecordAllocatorOperation(AllocatorOperation::ALLOCATE, newPtr, newSize, newAlignment); #endif } @@ -259,13 +336,7 @@ void AllocatorBase::ProfileResize(void* ptr, size_t newSize) } } #if RECORDING_ENABLED - { - AllocatorOperation& op = GetNextAllocatorOperation(); - op.m_operationType = AllocatorOperation::RESIZE; - op.m_size = newSize; - op.m_alignment = 0; - op.m_ptr = ptr; - } + RecordAllocatorOperation(AllocatorOperation::ALLOCATE, ptr, newSize); #endif } diff --git a/Code/Framework/AzCore/CMakeLists.txt b/Code/Framework/AzCore/CMakeLists.txt index 96ed838ccc..838142f0df 100644 --- a/Code/Framework/AzCore/CMakeLists.txt +++ b/Code/Framework/AzCore/CMakeLists.txt @@ -146,6 +146,11 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED) PROPERTY COMPILE_DEFINITIONS VALUES AZCORETEST_DLL_NAME=\"$\" ) + ly_add_target_files( + TARGETS AzCore.Tests + FILES ${CMAKE_CURRENT_SOURCE_DIR}/Tests/Memory/AllocatorBenchmarkRecordings.bin + OUTPUT_SUBDIRECTORY Tests/AzCore/Memory + ) endif() diff --git a/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarkRecordings.bin b/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarkRecordings.bin new file mode 100644 index 0000000000..2b587a2304 --- /dev/null +++ b/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarkRecordings.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d0f148441ce120b303896618cec364b5afb6f8b911b4785ec6358cfe8467cf7a +size 368640 diff --git a/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp b/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp index 76c3316009..f5a728018c 100644 --- a/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp +++ b/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp @@ -9,9 +9,8 @@ #if defined(HAVE_BENCHMARK) #include +#include #include -#include -#include #include #include #include @@ -21,6 +20,7 @@ #include #include #include +#include #include @@ -32,11 +32,9 @@ namespace Benchmark size_t GetMemorySize(void* memory); } - //static AZ::Debug::DrillerManager* s_drillerManager = nullptr; - /// /// Test allocator wrapper that redirects the calls to the passed TAllocator by using AZ::AllocatorInstance. - /// It also creates/destroys the TAllocator type and connects the driller (to reflect what happens at runtime) + /// It also creates/destroys the TAllocator type (to reflect what happens at runtime) /// /// Allocator type to wrap template @@ -46,16 +44,10 @@ namespace Benchmark static void SetUp() { AZ::AllocatorInstance::Create(); - - /*s_drillerManager = AZ::Debug::DrillerManager::Create(); - s_drillerManager->Register(aznew AZ::Debug::MemoryDriller);*/ } static void TearDown() { - /*AZ::Debug::DrillerManager::Destroy(s_drillerManager); - s_drillerManager = nullptr;*/ - AZ::AllocatorInstance::Destroy(); } @@ -410,15 +402,12 @@ namespace Benchmark enum OperationType : unsigned int { ALLOCATE, - DEALLOCATE, - REALLOCATE, - RESIZE + DEALLOCATE }; - OperationType m_operationType : 2; - size_t m_size : 46; - size_t m_alignment : 16; - void* m_ptr; - void* m_newptr; // required for resize + OperationType m_type : 1; + unsigned int m_size : 28; // Can represent up to 256Mb requests + unsigned int m_alignment : 7; // Can represent up to 128 alignment + unsigned int m_recordId : 28; // Can represent up to 256M simultaneous requests, we reuse ids }; public: @@ -428,18 +417,18 @@ namespace Benchmark { state.PauseTiming(); - AZStd::unordered_map pointerRemapping; - AZStd::unordered_map allocationSize; + AZStd::unordered_map pointerRemapping; constexpr size_t allocationOperationCount = 5 * 1024; AZStd::array m_operations = {}; - FILE* file = nullptr; - fopen_s(&file, "memoryrecordings.bin", "rb"); - if (!file) + AZ::IO::SystemFile file; + AZ::IO::FixedMaxPathString filePath = AZ::Utils::GetExecutableDirectory(); + filePath += "/Tests/AzCore/Memory/AllocatorBenchmarkRecordings.bin"; + if (!file.Open(filePath.c_str(), AZ::IO::SystemFile::OpenMode::SF_OPEN_READ_ONLY)) { return; } - size_t elementsRead = fread(&m_operations, sizeof(AllocatorOperation), allocationOperationCount, file); + size_t elementsRead = file.Read(sizeof(AllocatorOperation) * allocationOperationCount, &m_operations); size_t totalElementsRead = elementsRead; const size_t processMemoryBaseline = Platform::GetProcessMemoryUsageBytes(); size_t totalAllocationSize = 0; @@ -449,107 +438,54 @@ namespace Benchmark for (size_t operationIndex = 0; operationIndex < elementsRead; ++operationIndex) { const AllocatorOperation& operation = m_operations[operationIndex]; - switch (operation.m_operationType) + if (operation.m_type == AllocatorOperation::ALLOCATE) { - case AllocatorOperation::ALLOCATE: - { - if (operation.m_ptr) + const auto it = pointerRemapping.emplace(operation.m_recordId, nullptr); + if (it.second) // otherwise already allocated { - const auto it = pointerRemapping.emplace(operation.m_ptr, nullptr); - if (it.second) // otherwise already allocated - { - state.ResumeTiming(); - void* ptr = TestAllocatorType::Allocate(operation.m_size, operation.m_alignment); - state.PauseTiming(); - totalAllocationSize += operation.m_size; - it.first->second = ptr; - allocationSize[ptr] = operation.m_size; - } - else - { - //AZ_Warning("RecordedAllocationBenchmarkFixture", false, "Allocation on %p was already made", operation.m_ptr); - } + state.ResumeTiming(); + void* ptr = TestAllocatorType::Allocate(operation.m_size, operation.m_alignment); + state.PauseTiming(); + totalAllocationSize += operation.m_size; + it.first->second = ptr; } - break; - } - case AllocatorOperation::DEALLOCATE: - { - if (operation.m_ptr) // some deallocate(nullptr) are recorded + else { - const auto ptrIt = pointerRemapping.find(operation.m_ptr); + // Doing a resize, dont account for this memory change, this operation is rare and we dont have + // the size of the previous allocation + state.ResumeTiming(); + TestAllocatorType::Resize(it.first->second, operation.m_size); + state.PauseTiming(); + } + } + else // AllocatorOperation::DEALLOCATE: + { + if (operation.m_recordId) + { + const auto ptrIt = pointerRemapping.find(operation.m_recordId); if (ptrIt != pointerRemapping.end()) { - totalAllocationSize -= allocationSize[ptrIt->second]; + totalAllocationSize -= operation.m_size; state.ResumeTiming(); TestAllocatorType::DeAllocate(ptrIt->second, /*operation.m_size*/ 0); // size is not correct after a resize, a 0 size deals with it state.PauseTiming(); pointerRemapping.erase(ptrIt); } } - else + else // deallocate(nullptr) are recorded { // Just to account of the call of deallocate(nullptr); - // totalAllocationSize -= 0; // No real deallocation happened state.ResumeTiming(); - TestAllocatorType::DeAllocate(operation.m_ptr, /*operation.m_size*/ 0); + TestAllocatorType::DeAllocate(nullptr, /*operation.m_size*/ 0); state.PauseTiming(); } - break; - } - case AllocatorOperation::REALLOCATE: - { - void* ptr = nullptr; - if (operation.m_ptr) - { - AZ_Assert(operation.m_newptr, "Need to consider other cases?"); - const auto ptrIt = pointerRemapping.find(operation.m_ptr); - AZ_Assert(ptrIt != pointerRemapping.end(), "Missing allocation for reallocation"); // In case the recording didnt catch something - ptr = ptrIt->second; - pointerRemapping.erase(ptrIt); - } - AZ_Assert(operation.m_newptr != nullptr, "Reallocation failed in the game"); - const auto it = pointerRemapping.emplace(operation.m_newptr, nullptr); - if (it.second) - { - totalAllocationSize -= allocationSize[ptr]; - state.ResumeTiming(); - void* newPtr = TestAllocatorType::ReAllocate(ptr, operation.m_size, operation.m_alignment); - state.PauseTiming(); - totalAllocationSize += operation.m_size; - it.first->second = newPtr; - allocationSize[newPtr] = operation.m_size; - } - else - { - totalAllocationSize -= allocationSize[ptr]; - state.ResumeTiming(); - TestAllocatorType::DeAllocate(ptr); - state.PauseTiming(); - } - break; - } - case AllocatorOperation::RESIZE: - { - const auto ptrIt = pointerRemapping.find(operation.m_ptr); - AZ_Assert(ptrIt != pointerRemapping.end(), "Missing allocation for resize"); // In case the recording didnt catch something - totalAllocationSize -= allocationSize[ptrIt->second]; - state.ResumeTiming(); - TestAllocatorType::Resize(ptrIt->second, operation.m_size); - state.PauseTiming(); - totalAllocationSize += operation.m_size; - if (operation.m_size == 0) - { - pointerRemapping.erase(ptrIt); - } - break; - } } } - elementsRead = fread(&m_operations, sizeof(AllocatorOperation), allocationOperationCount, file); + elementsRead = file.Read(sizeof(AllocatorOperation) * allocationOperationCount, &m_operations); totalElementsRead += elementsRead; } - fclose(file); + file.Close(); state.counters[s_counterAllocatorMemory] = benchmark::Counter(static_cast(TestAllocatorType::NumAllocatedBytes()), benchmark::Counter::kDefaults); state.counters[s_counterProcessMemory] = benchmark::Counter(static_cast(Platform::GetProcessMemoryUsageBytes() - processMemoryBaseline), benchmark::Counter::kDefaults); @@ -579,6 +515,7 @@ namespace Benchmark static void RecordedRunRanges(benchmark::internal::Benchmark* b) { b->Arg(1); + b->Iterations(100); } // For threaded ranges, run just 200, multi-threaded will already multiply by thread From 0d66278ef7c466e6457fc8f5cb99ac020022becd Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 8 Dec 2021 13:44:15 -0800 Subject: [PATCH 014/284] Makes the recorded benchmark more stable Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../AzCore/AzCore/Memory/AllocatorBase.cpp | 23 ++- .../Memory/AllocatorBenchmarkRecordings.bin | 4 +- .../Tests/Memory/AllocatorBenchmarks.cpp | 186 +++++++++++------- 3 files changed, 135 insertions(+), 78 deletions(-) diff --git a/Code/Framework/AzCore/AzCore/Memory/AllocatorBase.cpp b/Code/Framework/AzCore/AzCore/Memory/AllocatorBase.cpp index 32ccd43f9a..48994c4eef 100644 --- a/Code/Framework/AzCore/AzCore/Memory/AllocatorBase.cpp +++ b/Code/Framework/AzCore/AzCore/Memory/AllocatorBase.cpp @@ -11,7 +11,7 @@ using namespace AZ; -#define RECORDING_ENABLED 1 +#define RECORDING_ENABLED 0 #if RECORDING_ENABLED @@ -44,18 +44,22 @@ namespace } }; - struct AllocatorOperation + #pragma pack(push, 1) + struct alignas(1) AllocatorOperation { - enum OperationType : unsigned int + enum OperationType : size_t { ALLOCATE, DEALLOCATE }; OperationType m_type: 1; - unsigned int m_size : 28; // Can represent up to 256Mb requests - unsigned int m_alignment : 7; // Can represent up to 128 alignment - unsigned int m_recordId : 28; // Can represent up to 256M simultaneous requests, we reuse ids + size_t m_size : 28; // Can represent up to 256Mb requests + size_t m_alignment : 7; // Can represent up to 128 alignment + size_t m_recordId : 28; // Can represent up to 256M simultaneous requests, we reuse ids }; + #pragma pack(pop) + static_assert(sizeof(AllocatorOperation) == 8); + static AZStd::mutex s_operationsMutex = {}; static constexpr size_t s_maxNumberOfAllocationsToRecord = 16384; @@ -76,7 +80,12 @@ namespace if (s_operationCounter == s_allocationOperationCount) { AZ::IO::SystemFile file; - file.Open("memoryrecordings.bin", AZ::IO::SystemFile::OpenMode::SF_OPEN_APPEND); + int mode = AZ::IO::SystemFile::OpenMode::SF_OPEN_APPEND | AZ::IO::SystemFile::OpenMode::SF_OPEN_WRITE_ONLY; + if (!file.Exists("memoryrecordings.bin")) + { + mode |= AZ::IO::SystemFile::OpenMode::SF_OPEN_CREATE; + } + file.Open("memoryrecordings.bin", mode); if (file.IsOpen()) { file.Write(&s_operations, sizeof(AllocatorOperation) * s_allocationOperationCount); diff --git a/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarkRecordings.bin b/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarkRecordings.bin index 2b587a2304..ec5de82e83 100644 --- a/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarkRecordings.bin +++ b/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarkRecordings.bin @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d0f148441ce120b303896618cec364b5afb6f8b911b4785ec6358cfe8467cf7a -size 368640 +oid sha256:281ba03e79ecba90b313a0b17bdba87c57d76b504b6e38d579b5eabd995902cc +size 245760 diff --git a/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp b/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp index f5a728018c..aa1c7f21ab 100644 --- a/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp +++ b/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp @@ -390,115 +390,159 @@ namespace Benchmark } } }; - - template - class RecordedAllocationBenchmarkFixture : public AllocatorBenchmarkFixture - { - using base = AllocatorBenchmarkFixture; - using TestAllocatorType = typename base::TestAllocatorType; - struct AllocatorOperation + template + class RecordedAllocationBenchmarkFixture : public ::benchmark::Fixture + { + using TestAllocatorType = TestAllocatorWrapper; + + virtual void internalSetUp() { - enum OperationType : unsigned int + TestAllocatorType::SetUp(); + } + + void internalTearDown() + { + TestAllocatorType::TearDown(); + } + + #pragma pack(push, 1) + struct alignas(1) AllocatorOperation + { + enum OperationType : size_t { ALLOCATE, DEALLOCATE }; OperationType m_type : 1; - unsigned int m_size : 28; // Can represent up to 256Mb requests - unsigned int m_alignment : 7; // Can represent up to 128 alignment - unsigned int m_recordId : 28; // Can represent up to 256M simultaneous requests, we reuse ids + size_t m_size : 28; // Can represent up to 256Mb requests + size_t m_alignment : 7; // Can represent up to 128 alignment + size_t m_recordId : 28; // Can represent up to 256M simultaneous requests, we reuse ids }; + #pragma pack(pop) + static_assert(sizeof(AllocatorOperation) == 8); public: + void SetUp(const ::benchmark::State&) override + { + internalSetUp(); + } + void SetUp(::benchmark::State&) override + { + internalSetUp(); + } + + void TearDown(const ::benchmark::State&) override + { + internalTearDown(); + } + void TearDown(::benchmark::State&) override + { + internalTearDown(); + } + void Benchmark(benchmark::State& state) { for (auto _ : state) { state.PauseTiming(); - AZStd::unordered_map pointerRemapping; + AZStd::unordered_map pointerRemapping; constexpr size_t allocationOperationCount = 5 * 1024; AZStd::array m_operations = {}; + [[maybe_unused]] const size_t operationSize = sizeof(AllocatorOperation); - AZ::IO::SystemFile file; - AZ::IO::FixedMaxPathString filePath = AZ::Utils::GetExecutableDirectory(); - filePath += "/Tests/AzCore/Memory/AllocatorBenchmarkRecordings.bin"; - if (!file.Open(filePath.c_str(), AZ::IO::SystemFile::OpenMode::SF_OPEN_READ_ONLY)) - { - return; - } - size_t elementsRead = file.Read(sizeof(AllocatorOperation) * allocationOperationCount, &m_operations); - size_t totalElementsRead = elementsRead; const size_t processMemoryBaseline = Platform::GetProcessMemoryUsageBytes(); size_t totalAllocationSize = 0; + size_t itemsProcessed = 0; - while (elementsRead > 0) + for (size_t i = 0; i < 100; ++i) // replay the recording, this way we can keep a smaller recording { - for (size_t operationIndex = 0; operationIndex < elementsRead; ++operationIndex) + AZ::IO::SystemFile file; + AZ::IO::FixedMaxPathString filePath = AZ::Utils::GetExecutableDirectory(); + filePath += "/Tests/AzCore/Memory/AllocatorBenchmarkRecordings.bin"; + if (!file.Open(filePath.c_str(), AZ::IO::SystemFile::OpenMode::SF_OPEN_READ_ONLY)) { - const AllocatorOperation& operation = m_operations[operationIndex]; - if (operation.m_type == AllocatorOperation::ALLOCATE) + return; + } + size_t elementsRead = + file.Read(sizeof(AllocatorOperation) * allocationOperationCount, &m_operations) / sizeof(AllocatorOperation); + itemsProcessed += elementsRead; + + while (elementsRead > 0) + { + for (size_t operationIndex = 0; operationIndex < elementsRead; ++operationIndex) { - const auto it = pointerRemapping.emplace(operation.m_recordId, nullptr); - if (it.second) // otherwise already allocated + const AllocatorOperation& operation = m_operations[operationIndex]; + if (operation.m_type == AllocatorOperation::ALLOCATE) { - state.ResumeTiming(); - void* ptr = TestAllocatorType::Allocate(operation.m_size, operation.m_alignment); - state.PauseTiming(); - totalAllocationSize += operation.m_size; - it.first->second = ptr; - } - else - { - // Doing a resize, dont account for this memory change, this operation is rare and we dont have - // the size of the previous allocation - state.ResumeTiming(); - TestAllocatorType::Resize(it.first->second, operation.m_size); - state.PauseTiming(); - } - } - else // AllocatorOperation::DEALLOCATE: - { - if (operation.m_recordId) - { - const auto ptrIt = pointerRemapping.find(operation.m_recordId); - if (ptrIt != pointerRemapping.end()) + const auto it = pointerRemapping.emplace(operation.m_recordId, nullptr); + if (it.second) // otherwise already allocated { - totalAllocationSize -= operation.m_size; state.ResumeTiming(); - TestAllocatorType::DeAllocate(ptrIt->second, /*operation.m_size*/ 0); // size is not correct after a resize, a 0 size deals with it + void* ptr = TestAllocatorType::Allocate(operation.m_size, operation.m_alignment); + state.PauseTiming(); + totalAllocationSize += operation.m_size; + it.first->second = ptr; + } + else + { + // Doing a resize, dont account for this memory change, this operation is rare and we dont have + // the size of the previous allocation + state.ResumeTiming(); + TestAllocatorType::Resize(it.first->second, operation.m_size); state.PauseTiming(); - pointerRemapping.erase(ptrIt); } } - else // deallocate(nullptr) are recorded + else // AllocatorOperation::DEALLOCATE: { - // Just to account of the call of deallocate(nullptr); - state.ResumeTiming(); - TestAllocatorType::DeAllocate(nullptr, /*operation.m_size*/ 0); - state.PauseTiming(); + if (operation.m_recordId) + { + const auto ptrIt = pointerRemapping.find(operation.m_recordId); + if (ptrIt != pointerRemapping.end()) + { + totalAllocationSize -= operation.m_size; + state.ResumeTiming(); + TestAllocatorType::DeAllocate( + ptrIt->second, + /*operation.m_size*/ 0); // size is not correct after a resize, a 0 size deals with it + state.PauseTiming(); + pointerRemapping.erase(ptrIt); + } + } + else // deallocate(nullptr) are recorded + { + // Just to account of the call of deallocate(nullptr); + state.ResumeTiming(); + TestAllocatorType::DeAllocate(nullptr, /*operation.m_size*/ 0); + state.PauseTiming(); + } } } - } - elementsRead = file.Read(sizeof(AllocatorOperation) * allocationOperationCount, &m_operations); - totalElementsRead += elementsRead; + elementsRead = + file.Read(sizeof(AllocatorOperation) * allocationOperationCount, &m_operations) / sizeof(AllocatorOperation); + itemsProcessed += elementsRead; + } + file.Close(); + + // Deallocate the remainder (since we stopped the recording middle-game)(there are leaks as well) + for (const auto& pointerMapping : pointerRemapping) + { + state.ResumeTiming(); + TestAllocatorType::DeAllocate(pointerMapping.second); + state.PauseTiming(); + } + itemsProcessed += pointerRemapping.size(); + pointerRemapping.clear(); } - file.Close(); state.counters[s_counterAllocatorMemory] = benchmark::Counter(static_cast(TestAllocatorType::NumAllocatedBytes()), benchmark::Counter::kDefaults); state.counters[s_counterProcessMemory] = benchmark::Counter(static_cast(Platform::GetProcessMemoryUsageBytes() - processMemoryBaseline), benchmark::Counter::kDefaults); state.counters[s_counterBenchmarkMemory] = benchmark::Counter(static_cast(totalAllocationSize), benchmark::Counter::kDefaults); - state.SetItemsProcessed(totalElementsRead); + state.SetItemsProcessed(itemsProcessed); - // Deallocate the remainder (since we stopped the recording middle-game)(there are leaks as well) - for (const auto& pointerMapping : pointerRemapping) - { - TestAllocatorType::DeAllocate(pointerMapping.second); - } - pointerRemapping.clear(); TestAllocatorType::GarbageCollect(); } } @@ -514,8 +558,7 @@ namespace Benchmark } static void RecordedRunRanges(benchmark::internal::Benchmark* b) { - b->Arg(1); - b->Iterations(100); + b->Iterations(1); } // For threaded ranges, run just 200, multi-threaded will already multiply by thread @@ -547,6 +590,11 @@ namespace Benchmark BM_REGISTER_TEMPLATE(RecordedAllocationBenchmarkFixture, TESTNAME, ALLOCATORTYPE)->Apply(RecordedRunRanges); \ } + /// Warm up benchmark used to prepare the OS for allocations. Most OS keep allocations for a process somehow + /// reserved. So the first allocations run always get a bigger impact in a process. This warm up allocator runs + /// all the benchmarks and is just used for the the next allocators to report more consistent results. + BM_REGISTER_ALLOCATOR(WarmUpAllocator, TestRawMallocAllocator); + BM_REGISTER_ALLOCATOR(RawMallocAllocator, TestRawMallocAllocator); BM_REGISTER_ALLOCATOR(MallocSchemaAllocator, TestMallocSchemaAllocator); BM_REGISTER_ALLOCATOR(HphaSchemaAllocator, TestHphaSchemaAllocator); From b96be71c619000a580e964ff51d84c14aa4c2c0f Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 8 Dec 2021 19:55:55 -0800 Subject: [PATCH 015/284] More stability changes, improvement on type usage within the benchmark, cleanup of unstable stats Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Tests/Memory/AllocatorBenchmarks.cpp | 93 +++++++------------ 1 file changed, 35 insertions(+), 58 deletions(-) diff --git a/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp b/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp index aa1c7f21ab..5cf5176308 100644 --- a/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp +++ b/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp @@ -11,7 +11,7 @@ #include #include #include -#include +#include #include #include #include @@ -92,10 +92,10 @@ namespace Benchmark /// Basic allocator used as a baseline. This allocator is the most basic allocation possible with the OS (AZ_OS_MALLOC). /// MallocSchema cannot be used here because it has extra logic that we don't want to use as a baseline. /// - class TestRawMallocAllocator {}; + class RawMallocAllocator {}; template<> - class TestAllocatorWrapper + class TestAllocatorWrapper { public: TestAllocatorWrapper() @@ -113,17 +113,11 @@ namespace Benchmark } // IAllocatorAllocate - static void* Allocate(size_t byteSize, size_t alignment) + static void* Allocate(size_t byteSize, size_t) { s_numAllocatedBytes += byteSize; - if (alignment) - { - return AZ_OS_MALLOC(byteSize, alignment); - } - else - { - return AZ_OS_MALLOC(byteSize, 1); - } + // Don't pass an alignment since we wont be able to get the memory size without also passing the alignment + return AZ_OS_MALLOC(byteSize, 1); } static void DeAllocate(void* ptr, size_t = 0) @@ -132,20 +126,13 @@ namespace Benchmark AZ_OS_FREE(ptr); } - static void* ReAllocate(void* ptr, size_t newSize, size_t newAlignment) + static void* ReAllocate(void* ptr, size_t newSize, size_t) { s_numAllocatedBytes -= Platform::GetMemorySize(ptr); AZ_OS_FREE(ptr); s_numAllocatedBytes += newSize; - if (newAlignment) - { - return AZ_OS_MALLOC(newSize, newAlignment); - } - else - { - return AZ_OS_MALLOC(newSize, 1); - } + return AZ_OS_MALLOC(newSize, 1); } static size_t Resize(void* ptr, size_t newSize) @@ -172,51 +159,47 @@ namespace Benchmark static size_t s_numAllocatedBytes; }; - size_t TestAllocatorWrapper::s_numAllocatedBytes = 0; + size_t TestAllocatorWrapper::s_numAllocatedBytes = 0; - // Here we require to implement this to be able to configure a name for the allocator, otherswise the AllocatorManager crashes when trying to configure the overrides - class TestMallocSchemaAllocator : public AZ::SimpleSchemaAllocator + // Some allocator are not fully declared, those we simply setup from the schema + class MallocSchemaAllocator : public AZ::SimpleSchemaAllocator { public: - AZ_TYPE_INFO(TestMallocSchemaAllocator, "{3E68224F-E676-402C-8276-CE4B49C05E89}"); + AZ_TYPE_INFO(MallocSchemaAllocator, "{3E68224F-E676-402C-8276-CE4B49C05E89}"); - TestMallocSchemaAllocator() - : AZ::SimpleSchemaAllocator("TestMallocSchemaAllocator", "") + MallocSchemaAllocator() + : AZ::SimpleSchemaAllocator("MallocSchemaAllocator", "") {} }; - class TestHeapSchemaAllocator : public AZ::SimpleSchemaAllocator + // We use both this HphaSchemaAllocator and the SystemAllocator configured with Hpha because the SystemAllocator + // has extra things + class HphaSchemaAllocator : public AZ::SimpleSchemaAllocator { public: - AZ_TYPE_INFO(TestHeapSchemaAllocator, "{456E6C30-AA84-488F-BE47-5C1E6AF636B7}"); + AZ_TYPE_INFO(HphaSchemaAllocator, "{6563AB4B-A68E-4499-8C98-D61D640D1F7F}"); - TestHeapSchemaAllocator() - : AZ::SimpleSchemaAllocator("TestHeapSchemaAllocator", "") - {} - }; - - class TestHphaSchemaAllocator : public AZ::SimpleSchemaAllocator - { - public: - AZ_TYPE_INFO(TestHphaSchemaAllocator, "{6563AB4B-A68E-4499-8C98-D61D640D1F7F}"); - - TestHphaSchemaAllocator() + HphaSchemaAllocator() : AZ::SimpleSchemaAllocator("TestHphaSchemaAllocator", "") {} }; + // For the SystemAllocator we inherit so we have a different stack. The SystemAllocator is used globally so we dont want + // to get that data affecting the benchmark class TestSystemAllocator : public AZ::SystemAllocator { public: AZ_TYPE_INFO(TestSystemAllocator, "{360D4DAA-D65D-4D5C-A6FA-1A4C5261C35C}"); + + TestSystemAllocator() + : AZ::SystemAllocator() + { + } }; // Allocated bytes reported by the allocator static const char* s_counterAllocatorMemory = "Allocator_Memory"; - // Allocated bytes reported by the process - static const char* s_counterProcessMemory = "Process_Memory"; - // Allocated bytes as counted by the benchmark static const char* s_counterBenchmarkMemory = "Benchmark_Memory"; @@ -310,8 +293,7 @@ namespace Benchmark for (auto _ : state) { state.PauseTiming(); - const size_t processMemoryBaseline = Platform::GetProcessMemoryUsageBytes(); - + AZStd::vector& perThreadAllocations = base::GetPerThreadAllocations(state.thread_index); const size_t numberOfAllocations = perThreadAllocations.size(); size_t totalAllocationSize = 0; @@ -327,7 +309,6 @@ namespace Benchmark } state.counters[s_counterAllocatorMemory] = benchmark::Counter(static_cast(TestAllocatorType::NumAllocatedBytes()), benchmark::Counter::kDefaults); - state.counters[s_counterProcessMemory] = benchmark::Counter(static_cast(Platform::GetProcessMemoryUsageBytes() - processMemoryBaseline), benchmark::Counter::kDefaults); state.counters[s_counterBenchmarkMemory] = benchmark::Counter(static_cast(totalAllocationSize), benchmark::Counter::kDefaults); for (size_t allocationIndex = 0; allocationIndex < numberOfAllocations; ++allocationIndex) @@ -358,7 +339,6 @@ namespace Benchmark { state.PauseTiming(); AZStd::vector& perThreadAllocations = base::GetPerThreadAllocations(state.thread_index); - const size_t processMemoryBaseline = Platform::GetProcessMemoryUsageBytes(); const size_t numberOfAllocations = perThreadAllocations.size(); size_t totalAllocationSize = 0; @@ -381,7 +361,6 @@ namespace Benchmark } state.counters[s_counterAllocatorMemory] = benchmark::Counter(static_cast(TestAllocatorType::NumAllocatedBytes()), benchmark::Counter::kDefaults); - state.counters[s_counterProcessMemory] = benchmark::Counter(static_cast(Platform::GetProcessMemoryUsageBytes() - processMemoryBaseline), benchmark::Counter::kDefaults); state.counters[s_counterBenchmarkMemory] = benchmark::Counter(static_cast(totalAllocationSize), benchmark::Counter::kDefaults); state.SetItemsProcessed(numberOfAllocations); @@ -452,11 +431,10 @@ namespace Benchmark AZStd::array m_operations = {}; [[maybe_unused]] const size_t operationSize = sizeof(AllocatorOperation); - const size_t processMemoryBaseline = Platform::GetProcessMemoryUsageBytes(); size_t totalAllocationSize = 0; size_t itemsProcessed = 0; - for (size_t i = 0; i < 100; ++i) // replay the recording, this way we can keep a smaller recording + for (size_t i = 0; i < 100; ++i) // play the recording multiple times to get a good stable sample, this way we can keep a smaller recording { AZ::IO::SystemFile file; AZ::IO::FixedMaxPathString filePath = AZ::Utils::GetExecutableDirectory(); @@ -538,7 +516,6 @@ namespace Benchmark } state.counters[s_counterAllocatorMemory] = benchmark::Counter(static_cast(TestAllocatorType::NumAllocatedBytes()), benchmark::Counter::kDefaults); - state.counters[s_counterProcessMemory] = benchmark::Counter(static_cast(Platform::GetProcessMemoryUsageBytes() - processMemoryBaseline), benchmark::Counter::kDefaults); state.counters[s_counterBenchmarkMemory] = benchmark::Counter(static_cast(totalAllocationSize), benchmark::Counter::kDefaults); state.SetItemsProcessed(itemsProcessed); @@ -583,7 +560,7 @@ namespace Benchmark BM_REGISTER_TEMPLATE(FIXTURE, TESTNAME##_MIXED_THREADED, ALLOCATORTYPE, MIXED)->ThreadRange(2, MaxThreadRange)->Apply(ThreadedRunRanges); #define BM_REGISTER_ALLOCATOR(TESTNAME, ALLOCATORTYPE) \ - namespace TESTNAME \ + namespace BM_##TESTNAME \ { \ BM_REGISTER_SIZE_FIXTURES(AllocationBenchmarkFixture, TESTNAME, ALLOCATORTYPE); \ BM_REGISTER_SIZE_FIXTURES(DeAllocationBenchmarkFixture, TESTNAME, ALLOCATORTYPE); \ @@ -593,15 +570,15 @@ namespace Benchmark /// Warm up benchmark used to prepare the OS for allocations. Most OS keep allocations for a process somehow /// reserved. So the first allocations run always get a bigger impact in a process. This warm up allocator runs /// all the benchmarks and is just used for the the next allocators to report more consistent results. - BM_REGISTER_ALLOCATOR(WarmUpAllocator, TestRawMallocAllocator); + BM_REGISTER_ALLOCATOR(WarmUpAllocator, RawMallocAllocator); - BM_REGISTER_ALLOCATOR(RawMallocAllocator, TestRawMallocAllocator); - BM_REGISTER_ALLOCATOR(MallocSchemaAllocator, TestMallocSchemaAllocator); - BM_REGISTER_ALLOCATOR(HphaSchemaAllocator, TestHphaSchemaAllocator); + BM_REGISTER_ALLOCATOR(RawMallocAllocator, RawMallocAllocator); + BM_REGISTER_ALLOCATOR(MallocSchemaAllocator, MallocSchemaAllocator); + BM_REGISTER_ALLOCATOR(HphaSchemaAllocator, HphaSchemaAllocator); BM_REGISTER_ALLOCATOR(SystemAllocator, TestSystemAllocator); - + + //BM_REGISTER_ALLOCATOR(BestFitExternalMapAllocator, BestFitExternalMapAllocator); // Requires to pre-allocate blocks and cannot work as a general-purpose allocator //BM_REGISTER_ALLOCATOR(HeapSchemaAllocator, TestHeapSchemaAllocator); // Requires to pre-allocate blocks and cannot work as a general-purpose allocator - //BM_REGISTER_SCHEMA(BestFitExternalMapSchema); // Requires to implement AZ::IAllocatorAllocate //BM_REGISTER_SCHEMA(PoolSchema); // Requires special alignment requests while allocating #undef BM_REGISTER_ALLOCATOR From 947adc0248d9be1bac2565d1a67d081b0d1677c7 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 9 Dec 2021 17:13:09 -0800 Subject: [PATCH 016/284] Removal of OverrideShim, AP seems to be crashing Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../AzCore/Component/ComponentApplication.cpp | 38 +-- .../AzCore/Component/ComponentApplication.h | 8 +- .../AzCore/AzCore/Compression/Compression.h | 4 +- .../AzCore/AzCore/Compression/compression.cpp | 6 +- .../AzCore/Compression/zstd_compression.cpp | 6 +- .../AzCore/Compression/zstd_compression.h | 5 +- .../AzCore/AzCore/IO/CompressorZStd.h | 2 +- .../AzCore/AzCore/IO/IStreamerTypes.cpp | 2 +- .../AzCore/AzCore/IO/IStreamerTypes.h | 4 +- .../AzCore/AzCore/Memory/AllocatorBase.cpp | 31 +- .../AzCore/AzCore/Memory/AllocatorBase.h | 9 +- .../AzCore/AzCore/Memory/AllocatorManager.cpp | 264 +----------------- .../AzCore/AzCore/Memory/AllocatorManager.h | 21 +- .../AzCore/Memory/AllocatorOverrideShim.cpp | 227 --------------- .../AzCore/Memory/AllocatorOverrideShim.h | 102 ------- .../Memory/BestFitExternalMapAllocator.cpp | 13 +- .../Memory/BestFitExternalMapAllocator.h | 7 +- .../Memory/BestFitExternalMapSchema.cpp | 20 +- .../AzCore/Memory/BestFitExternalMapSchema.h | 25 +- .../AzCore/AzCore/Memory/HeapSchema.cpp | 1 - .../AzCore/AzCore/Memory/HeapSchema.h | 5 +- .../AzCore/AzCore/Memory/HphaSchema.cpp | 2 +- .../AzCore/AzCore/Memory/HphaSchema.h | 5 +- .../AzCore/AzCore/Memory/IAllocator.cpp | 15 +- .../AzCore/AzCore/Memory/IAllocator.h | 65 +---- .../AzCore/AzCore/Memory/MallocSchema.cpp | 31 +- .../AzCore/AzCore/Memory/MallocSchema.h | 20 +- Code/Framework/AzCore/AzCore/Memory/Memory.h | 32 +-- .../AzCore/AzCore/Memory/OSAllocator.cpp | 1 - .../AzCore/AzCore/Memory/OSAllocator.h | 8 +- .../Memory/OverrunDetectionAllocator.cpp | 11 - .../AzCore/Memory/OverrunDetectionAllocator.h | 5 +- .../AzCore/AzCore/Memory/PoolAllocator.h | 2 +- .../AzCore/AzCore/Memory/PoolSchema.cpp | 25 +- .../AzCore/AzCore/Memory/PoolSchema.h | 8 +- .../AzCore/Memory/SimpleSchemaAllocator.h | 25 +- .../AzCore/AzCore/Memory/SystemAllocator.cpp | 40 ++- .../AzCore/AzCore/Memory/SystemAllocator.h | 24 +- .../AzCore/AzCore/Script/ScriptContext.cpp | 6 +- .../AzCore/AzCore/Script/ScriptContext.h | 2 +- .../AzCore/Serialization/AZStdContainers.inl | 4 +- .../AzCore/Serialization/SerializeContext.cpp | 2 +- .../AzCore/Serialization/SerializeContext.h | 18 +- .../Serialization/std/VariantReflection.inl | 4 +- .../AzCore/AzCore/azcore_files.cmake | 2 - Code/Framework/AzCore/Tests/AZStd/Hashed.cpp | 4 +- Code/Framework/AzCore/Tests/AZStd/Ordered.cpp | 4 +- Code/Framework/AzCore/Tests/Memory.cpp | 199 +++++++------ .../Tests/Memory/AllocatorBenchmarks.cpp | 2 +- .../AzCore/Tests/Memory/AllocatorManager.cpp | 85 +----- .../AzFramework/Archive/Archive.cpp | 2 +- .../AzFramework/Archive/IArchive.h | 2 +- .../AzFramework/Archive/ZipDirCache.cpp | 6 +- .../AzFramework/Archive/ZipDirCache.h | 4 +- .../AzFramework/Archive/ZipDirList.cpp | 2 +- .../AzFramework/Archive/ZipDirList.h | 4 +- .../AzFramework/Archive/ZipDirStructures.cpp | 8 +- Code/LauncherUnified/Launcher.h | 2 +- Code/Legacy/CryCommon/CryLegacyAllocator.h | 28 +- .../RHI/Code/Include/Atom/RHI/DrawPacket.h | 4 +- .../Code/Include/Atom/RHI/DrawPacketBuilder.h | 6 +- .../RHI/Code/Source/RHI/DrawPacketBuilder.cpp | 2 +- 62 files changed, 299 insertions(+), 1222 deletions(-) delete mode 100644 Code/Framework/AzCore/AzCore/Memory/AllocatorOverrideShim.cpp delete mode 100644 Code/Framework/AzCore/AzCore/Memory/AllocatorOverrideShim.h diff --git a/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp b/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp index 693b2f1648..a760061215 100644 --- a/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp +++ b/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp @@ -152,8 +152,6 @@ namespace AZ m_reservedDebug = 0; m_recordingMode = Debug::AllocationRecords::RECORD_STACK_IF_NO_FILE_LINE; m_stackRecordLevels = 5; - m_useOverrunDetection = false; - m_useMalloc = false; } bool AppDescriptorConverter(SerializeContext& serialize, SerializeContext::DataElementNode& node) @@ -323,9 +321,6 @@ namespace AZ ->Field("blockSize", &Descriptor::m_memoryBlocksByteSize) ->Field("reservedOS", &Descriptor::m_reservedOS) ->Field("reservedDebug", &Descriptor::m_reservedDebug) - ->Field("useOverrunDetection", &Descriptor::m_useOverrunDetection) - ->Field("useMalloc", &Descriptor::m_useMalloc) - ->Field("allocatorRemappings", &Descriptor::m_allocatorRemappings) ->Field("modules", &Descriptor::m_modules) ; @@ -361,8 +356,6 @@ namespace AZ ->Attribute(Edit::Attributes::Step, &Descriptor::m_pageSize) ->DataElement(Edit::UIHandlers::SpinBox, &Descriptor::m_reservedOS, "OS reserved memory", "System memory reserved for OS (used only when 'Allocate all memory at startup' is true)") ->DataElement(Edit::UIHandlers::SpinBox, &Descriptor::m_reservedDebug, "Memory reserved for debugger", "System memory reserved for Debug allocator, like memory tracking (used only when 'Allocate all memory at startup' is true)") - ->DataElement(Edit::UIHandlers::CheckBox, &Descriptor::m_useOverrunDetection, "Use Overrun Detection", "Use the overrun detection memory manager (only available on some platforms, ignored in Release builds)") - ->DataElement(Edit::UIHandlers::CheckBox, &Descriptor::m_useMalloc, "Use Malloc", "Use malloc for memory allocations (for memory debugging only, ignored in Release builds)") ; } } @@ -879,7 +872,7 @@ namespace AZ AZ::AllocatorInstance::Create(desc); AZ::Debug::Trace::Instance().Init(); - AZ::Debug::AllocationRecords* records = AllocatorInstance::GetAllocator().GetRecords(); + AZ::Debug::AllocationRecords* records = AllocatorInstance::Get().GetRecords(); if (records) { records->SetMode(m_descriptor.m_recordingMode); @@ -891,35 +884,6 @@ namespace AZ m_isSystemAllocatorOwner = true; } - -#ifndef RELEASE - if (m_descriptor.m_useOverrunDetection) - { - OverrunDetectionSchema::Descriptor overrunDesc(false); - s_overrunDetectionSchema = Environment::CreateVariable(AzTypeInfo::Name(), overrunDesc); - OverrunDetectionSchema* schemaPtr = &s_overrunDetectionSchema.Get(); - - AZ::AllocatorManager::Instance().SetOverrideAllocatorSource(schemaPtr); - } - - if (m_descriptor.m_useMalloc) - { - AZ_Printf("Malloc", "WARNING: Malloc override is enabled. Registered allocators will use malloc instead of their normal allocation schemas."); - s_mallocSchema = Environment::CreateVariable(AzTypeInfo::Name()); - MallocSchema* schemaPtr = &s_mallocSchema.Get(); - - AZ::AllocatorManager::Instance().SetOverrideAllocatorSource(schemaPtr); - } -#endif - - AllocatorManager& allocatorManager = AZ::AllocatorManager::Instance(); - - for (const auto& remapping : m_descriptor.m_allocatorRemappings) - { - allocatorManager.AddAllocatorRemapping(remapping.m_from.c_str(), remapping.m_to.c_str()); - } - - allocatorManager.FinalizeConfiguration(); } void ComponentApplication::MergeSettingsToRegistry(SettingsRegistryInterface& registry) diff --git a/Code/Framework/AzCore/AzCore/Component/ComponentApplication.h b/Code/Framework/AzCore/AzCore/Component/ComponentApplication.h index d53b8e1a4e..a28c58ac6b 100644 --- a/Code/Framework/AzCore/AzCore/Component/ComponentApplication.h +++ b/Code/Framework/AzCore/AzCore/Component/ComponentApplication.h @@ -142,10 +142,6 @@ namespace AZ AZ::u64 m_reservedDebug; //!< Reserved memory for Debugging (allocation,etc.). Used only when m_grabAllMemory is set to true. (default: 0) Debug::AllocationRecords::Mode m_recordingMode; //!< When to record stack traces (default: AZ::Debug::AllocationRecords::RECORD_STACK_IF_NO_FILE_LINE) AZ::u64 m_stackRecordLevels; //!< If stack recording is enabled, how many stack levels to record. (default: 5) - bool m_useOverrunDetection; //!< True to use the overrun detection memory management scheme. Only available on some platforms; greatly increases memory consumption. - bool m_useMalloc; //!< True to use malloc instead of the internal memory manager. Intended for debugging purposes only. - - AllocatorRemappings m_allocatorRemappings; //!< List of remappings of allocators to perform, so that they can alias each other. ModuleDescriptorList m_modules; //!< Dynamic modules used by the application. //!< These will be loaded on startup. @@ -159,7 +155,7 @@ namespace AZ //! If set, this allocator is used to allocate the temporary bootstrap memory, as well as the main \ref SystemAllocator heap. //! If it's left nullptr (default), the \ref OSAllocator will be used. - IAllocatorAllocate* m_allocator = nullptr; + IAllocator* m_allocator = nullptr; //! Callback to create AZ::Modules for the static libraries linked by this application. //! Leave null if the application uses no static AZ::Modules. @@ -372,7 +368,7 @@ namespace AZ bool m_isOSAllocatorOwner{ false }; bool m_ownsConsole{}; void* m_fixedMemoryBlock{ nullptr }; //!< Pointer to the memory block allocator, so we can free it OnDestroy. - IAllocatorAllocate* m_osAllocator{ nullptr }; + IAllocator* m_osAllocator{ nullptr }; EntitySetType m_entities; AZ::SettingsRegistryInterface::NotifyEventHandler m_projectPathChangedHandler; diff --git a/Code/Framework/AzCore/AzCore/Compression/Compression.h b/Code/Framework/AzCore/AzCore/Compression/Compression.h index 855dcf9a6a..105fb9dbe6 100644 --- a/Code/Framework/AzCore/AzCore/Compression/Compression.h +++ b/Code/Framework/AzCore/AzCore/Compression/Compression.h @@ -15,7 +15,7 @@ struct z_stream_s; namespace AZ { class IAllocator; - class IAllocatorAllocate; + class IAllocatorSchema; /** * The most well known and used compression algorithm. It gives the best compression ratios even on level 1, @@ -90,7 +90,7 @@ namespace AZ z_stream_s* m_strDeflate; z_stream_s* m_strInflate; - IAllocatorAllocate* m_workMemoryAllocator; + IAllocatorSchema* m_workMemoryAllocator; }; } diff --git a/Code/Framework/AzCore/AzCore/Compression/compression.cpp b/Code/Framework/AzCore/AzCore/Compression/compression.cpp index 8b6f270b00..b5b775ef5e 100644 --- a/Code/Framework/AzCore/AzCore/Compression/compression.cpp +++ b/Code/Framework/AzCore/AzCore/Compression/compression.cpp @@ -26,7 +26,7 @@ ZLib::ZLib(IAllocator* workMemAllocator) : m_strDeflate(nullptr) , m_strInflate(nullptr) { - m_workMemoryAllocator = workMemAllocator ? workMemAllocator->GetAllocationSource() : nullptr; + m_workMemoryAllocator = workMemAllocator->GetSchema(); if (!m_workMemoryAllocator) { m_workMemoryAllocator = &AllocatorInstance::Get(); @@ -55,7 +55,7 @@ ZLib::~ZLib() //========================================================================= void* ZLib::AllocateMem(void* userData, unsigned int items, unsigned int size) { - IAllocatorAllocate* allocator = reinterpret_cast(userData); + IAllocator* allocator = reinterpret_cast(userData); return allocator->Allocate(items * size, 4, 0, "ZLib", __FILE__, __LINE__); } @@ -65,7 +65,7 @@ void* ZLib::AllocateMem(void* userData, unsigned int items, unsigned int size) //========================================================================= void ZLib::FreeMem(void* userData, void* address) { - IAllocatorAllocate* allocator = reinterpret_cast(userData); + IAllocator* allocator = reinterpret_cast(userData); allocator->DeAllocate(address); } diff --git a/Code/Framework/AzCore/AzCore/Compression/zstd_compression.cpp b/Code/Framework/AzCore/AzCore/Compression/zstd_compression.cpp index ecab62d123..95576a275b 100644 --- a/Code/Framework/AzCore/AzCore/Compression/zstd_compression.cpp +++ b/Code/Framework/AzCore/AzCore/Compression/zstd_compression.cpp @@ -16,7 +16,7 @@ using namespace AZ; -ZStd::ZStd(IAllocatorAllocate* workMemAllocator) +ZStd::ZStd(IAllocator* workMemAllocator) { m_workMemoryAllocator = workMemAllocator; if (!m_workMemoryAllocator) @@ -41,13 +41,13 @@ ZStd::~ZStd() void* ZStd::AllocateMem(void* userData, size_t size) { - IAllocatorAllocate* allocator = reinterpret_cast(userData); + IAllocator* allocator = reinterpret_cast(userData); return allocator->Allocate(size, 4, 0, "ZStandard", __FILE__, __LINE__); } void ZStd::FreeMem(void* userData, void* address) { - IAllocatorAllocate* allocator = reinterpret_cast(userData); + IAllocator* allocator = reinterpret_cast(userData); allocator->DeAllocate(address); } diff --git a/Code/Framework/AzCore/AzCore/Compression/zstd_compression.h b/Code/Framework/AzCore/AzCore/Compression/zstd_compression.h index 3fe6677fff..70d8c37831 100644 --- a/Code/Framework/AzCore/AzCore/Compression/zstd_compression.h +++ b/Code/Framework/AzCore/AzCore/Compression/zstd_compression.h @@ -17,12 +17,11 @@ namespace AZ { class IAllocator; - class IAllocatorAllocate; class ZStd { public: - ZStd(IAllocatorAllocate* workMemAllocator = 0); + ZStd(IAllocator* workMemAllocator = 0); ~ZStd(); enum FlushType @@ -77,7 +76,7 @@ namespace AZ ZSTD_CStream* m_streamCompression; ZSTD_DStream* m_streamDecompression; - IAllocatorAllocate* m_workMemoryAllocator; + IAllocator* m_workMemoryAllocator; ZSTD_inBuffer m_inBuffer; ZSTD_outBuffer m_outBuffer; size_t m_nextBlockSize; diff --git a/Code/Framework/AzCore/AzCore/IO/CompressorZStd.h b/Code/Framework/AzCore/AzCore/IO/CompressorZStd.h index ed6b94fffa..9503f22665 100644 --- a/Code/Framework/AzCore/AzCore/IO/CompressorZStd.h +++ b/Code/Framework/AzCore/AzCore/IO/CompressorZStd.h @@ -48,7 +48,7 @@ namespace AZ public: AZ_CLASS_ALLOCATOR(CompressorZStdData, AZ::SystemAllocator, 0); - CompressorZStdData(IAllocatorAllocate* zstdMemAllocator = 0) + CompressorZStdData(IAllocator* zstdMemAllocator = 0) { m_zstd = zstdMemAllocator; } diff --git a/Code/Framework/AzCore/AzCore/IO/IStreamerTypes.cpp b/Code/Framework/AzCore/AzCore/IO/IStreamerTypes.cpp index 4c8272cfc8..4126d7457d 100644 --- a/Code/Framework/AzCore/AzCore/IO/IStreamerTypes.cpp +++ b/Code/Framework/AzCore/AzCore/IO/IStreamerTypes.cpp @@ -21,7 +21,7 @@ namespace AZ::IO::IStreamerTypes : m_allocator(AZ::AllocatorInstance::Get()) {} - DefaultRequestMemoryAllocator::DefaultRequestMemoryAllocator(AZ::IAllocatorAllocate& allocator) + DefaultRequestMemoryAllocator::DefaultRequestMemoryAllocator(AZ::IAllocator& allocator) : m_allocator(allocator) {} diff --git a/Code/Framework/AzCore/AzCore/IO/IStreamerTypes.h b/Code/Framework/AzCore/AzCore/IO/IStreamerTypes.h index 901fc5e594..2c4dc28518 100644 --- a/Code/Framework/AzCore/AzCore/IO/IStreamerTypes.h +++ b/Code/Framework/AzCore/AzCore/IO/IStreamerTypes.h @@ -137,7 +137,7 @@ namespace AZ::IO::IStreamerTypes public: //! DefaultRequestMemoryAllocator wraps around the AZ::SystemAllocator by default. DefaultRequestMemoryAllocator(); - explicit DefaultRequestMemoryAllocator(AZ::IAllocatorAllocate& allocator); + explicit DefaultRequestMemoryAllocator(AZ::IAllocator& allocator); ~DefaultRequestMemoryAllocator() override; void LockAllocator() override; @@ -151,7 +151,7 @@ namespace AZ::IO::IStreamerTypes private: AZStd::atomic_int m_lockCounter{ 0 }; AZStd::atomic_int m_allocationCounter{ 0 }; - AZ::IAllocatorAllocate& m_allocator; + AZ::IAllocator& m_allocator; }; // The following alignment functions are put here until they're available in AzCore's math library. diff --git a/Code/Framework/AzCore/AzCore/Memory/AllocatorBase.cpp b/Code/Framework/AzCore/AzCore/Memory/AllocatorBase.cpp index 48994c4eef..4da9ab384f 100644 --- a/Code/Framework/AzCore/AzCore/Memory/AllocatorBase.cpp +++ b/Code/Framework/AzCore/AzCore/Memory/AllocatorBase.cpp @@ -158,10 +158,10 @@ namespace } #endif -AllocatorBase::AllocatorBase(IAllocatorAllocate* allocationSource, const char* name, const char* desc) : - IAllocator(allocationSource), - m_name(name), - m_desc(desc) +AllocatorBase::AllocatorBase(IAllocatorSchema* allocationSchema, const char* name, const char* desc) + : IAllocator(allocationSchema) + , m_name(name) + , m_desc(desc) { } @@ -180,11 +180,6 @@ const char* AllocatorBase::GetDescription() const return m_desc; } -IAllocatorAllocate* AllocatorBase::GetSchema() -{ - return nullptr; -} - Debug::AllocationRecords* AllocatorBase::GetRecords() { return m_records; @@ -201,11 +196,6 @@ bool AllocatorBase::IsReady() const return m_isReady; } -bool AllocatorBase::CanBeOverridden() const -{ - return m_canBeOverridden; -} - void AllocatorBase::PostCreate() { if (m_registrationEnabled) @@ -266,11 +256,6 @@ bool AllocatorBase::IsProfilingActive() const return m_isProfilingActive; } -void AllocatorBase::DisableOverriding() -{ - m_canBeOverridden = false; -} - void AllocatorBase::DisableRegistration() { m_registrationEnabled = false; @@ -278,12 +263,12 @@ void AllocatorBase::DisableRegistration() void AllocatorBase::ProfileAllocation(void* ptr, size_t byteSize, size_t alignment, const char* name, const char* fileName, int lineNum, int suppressStackRecord) { -#if defined(AZ_HAS_VARIADIC_TEMPLATES) && defined(AZ_DEBUG_BUILD) - ++suppressStackRecord; // one more for the fact the ebus is a function -#endif // AZ_HAS_VARIADIC_TEMPLATES - if (m_isProfilingActive) { +#if defined(AZ_HAS_VARIADIC_TEMPLATES) && defined(AZ_DEBUG_BUILD) + ++suppressStackRecord; // one more for the fact the ebus is a function +#endif // AZ_HAS_VARIADIC_TEMPLATES + auto records = GetRecords(); if (records) { diff --git a/Code/Framework/AzCore/AzCore/Memory/AllocatorBase.h b/Code/Framework/AzCore/AzCore/Memory/AllocatorBase.h index 8f8a17e470..f2521087b3 100644 --- a/Code/Framework/AzCore/AzCore/Memory/AllocatorBase.h +++ b/Code/Framework/AzCore/AzCore/Memory/AllocatorBase.h @@ -22,7 +22,7 @@ namespace AZ class AllocatorBase : public IAllocator { protected: - AllocatorBase(IAllocatorAllocate* allocationSource, const char* name, const char* desc); + AllocatorBase(IAllocatorSchema* allocationSchema, const char* name, const char* desc); ~AllocatorBase(); public: @@ -32,11 +32,9 @@ namespace AZ //--------------------------------------------------------------------- const char* GetName() const override; const char* GetDescription() const override; - IAllocatorAllocate* GetSchema() override; Debug::AllocationRecords* GetRecords() final; void SetRecords(Debug::AllocationRecords* records) final; bool IsReady() const final; - bool CanBeOverridden() const final; void PostCreate() override; void PreDestroy() final; void SetLazilyCreated(bool lazy) final; @@ -68,10 +66,6 @@ namespace AZ return byteSize; } - /// Call to disallow this allocator from being overridden. - /// Only kernel-level allocators where it would be especially problematic for them to be overridden should do this. - void DisableOverriding(); - /// Call to disallow this allocator from being registered with the AllocatorManager. /// Only kernel-level allocators where it would be especially problematic for them to be registered with the AllocatorManager should do this. void DisableRegistration(); @@ -107,7 +101,6 @@ namespace AZ bool m_isLazilyCreated = false; bool m_isProfilingActive = false; bool m_isReady = false; - bool m_canBeOverridden = true; bool m_registrationEnabled = true; }; diff --git a/Code/Framework/AzCore/AzCore/Memory/AllocatorManager.cpp b/Code/Framework/AzCore/AzCore/Memory/AllocatorManager.cpp index 70ac813972..758fa222fe 100644 --- a/Code/Framework/AzCore/AzCore/Memory/AllocatorManager.cpp +++ b/Code/Framework/AzCore/AzCore/Memory/AllocatorManager.cpp @@ -12,17 +12,12 @@ #include #include -#include #include #include #include #include -#if !defined(RELEASE) && !defined(AZCORE_MEMORY_ENABLE_OVERRIDES) -# define AZCORE_MEMORY_ENABLE_OVERRIDES -#endif - namespace AZ::Internal { struct AMStringHasher @@ -54,18 +49,6 @@ namespace AZ::Internal namespace AZ { -struct AllocatorManager::InternalData -{ - explicit InternalData(const AZStdIAllocator& alloc) - : m_allocatorMap(alloc) - , m_remappings(alloc) - , m_remappingsReverse(alloc) - {} - Internal::AllocatorNameMap m_allocatorMap; - Internal::AllocatorRemappings m_remappings; - Internal::AllocatorRemappings m_remappingsReverse; -}; - static EnvironmentVariable s_allocManager = nullptr; static AllocatorManager* s_allocManagerDebug = nullptr; // For easier viewing in crash dumps @@ -81,16 +64,6 @@ static Internal::PreEnvironmentAttachData& GetPreEnvironmentAttachData() void AllocatorManager::PreRegisterAllocator(IAllocator* allocator) { auto& data = GetPreEnvironmentAttachData(); - -#ifdef AZCORE_MEMORY_ENABLE_OVERRIDES - // All allocators must switch to an OverrideEnabledAllocationSource proxy if they are to support allocator overriding. - if (allocator->CanBeOverridden()) - { - auto shim = Internal::AllocatorOverrideShim::Create(allocator, &data.m_mallocSchema); - allocator->SetAllocationSource(shim); - } -#endif - { AZStd::lock_guard lock(data.m_mutex); AZ_Assert(data.m_unregisteredAllocatorCount < Internal::PreEnvironmentAttachData::MAX_UNREGISTERED_ALLOCATORS, "Too many allocators trying to register before environment attached!"); @@ -175,12 +148,9 @@ AllocatorManager::AllocatorManager() } ) { - m_overrideSource = nullptr; m_numAllocators = 0; m_isAllocatorLeaking = false; - m_configurationFinalized = false; m_defaultTrackingRecordMode = Debug::AllocationRecords::RECORD_NO_RECORDS; - m_data = new (m_mallocSchema->Allocate(sizeof(InternalData), AZStd::alignment_of::value, 0)) InternalData(AZStdIAllocator(m_mallocSchema.get())); } //========================================================================= @@ -210,10 +180,6 @@ AllocatorManager::RegisterAllocator(class IAllocator* alloc) alloc->SetProfilingActive(m_profilingRefcount.load() > 0); m_allocators[m_numAllocators++] = alloc; - -#ifdef AZCORE_MEMORY_ENABLE_OVERRIDES - ConfigureAllocatorOverrides(alloc); -#endif } //========================================================================= @@ -232,81 +198,12 @@ AllocatorManager::InternalDestroy() // Do not actually destroy the lazy allocator as it may have work to do during non-deterministic shutdown } - if (m_data) - { - m_data->~InternalData(); - m_mallocSchema->DeAllocate(m_data); - m_data = nullptr; - } - if (!m_isAllocatorLeaking) { AZ_Assert(m_numAllocators == 0, "There are still %d registered allocators!", m_numAllocators); } } -//========================================================================= -// ConfigureAllocatorOverrides -// [10/14/2018] -//========================================================================= -void -AllocatorManager::ConfigureAllocatorOverrides(IAllocator* alloc) -{ - auto record = m_data->m_allocatorMap.emplace(AZStd::piecewise_construct, AZStd::forward_as_tuple(alloc->GetName(), AZStdIAllocator(m_mallocSchema.get())), AZStd::forward_as_tuple(alloc)); - - // We only need to keep going if the allocator supports overrides. - if (!alloc->CanBeOverridden()) - { - return; - } - - if (!alloc->IsAllocationSourceChanged()) - { - // All allocators must switch to an OverrideEnabledAllocationSource proxy if they are to support allocator overriding. - auto overrideEnabled = Internal::AllocatorOverrideShim::Create(alloc, m_mallocSchema.get()); - alloc->SetAllocationSource(overrideEnabled); - } - - auto itr = m_data->m_remappings.find(record.first->first); - - if (itr != m_data->m_remappings.end()) - { - auto remapTo = m_data->m_allocatorMap.find(itr->second); - - if (remapTo != m_data->m_allocatorMap.end()) - { - static_cast(alloc->GetAllocationSource())->SetOverride(remapTo->second->GetOriginalAllocationSource()); - } - } - - itr = m_data->m_remappingsReverse.find(record.first->first); - - if (itr != m_data->m_remappingsReverse.end()) - { - auto remapFrom = m_data->m_allocatorMap.find(itr->second); - - if (remapFrom != m_data->m_allocatorMap.end()) - { - AZ_Assert(!m_configurationFinalized, "Allocators may only remap to allocators that have been created before configuration finalization"); - static_cast(remapFrom->second->GetAllocationSource())->SetOverride(alloc->GetOriginalAllocationSource()); - } - } - - if (m_overrideSource) - { - static_cast(alloc->GetAllocationSource())->SetOverride(m_overrideSource); - } - - if (m_configurationFinalized) - { - // We can get rid of the intermediary if configuration won't be changing any further. - // (The creation of it at the top of this function was superflous, but it made it easier to set things up going through a single code path.) - auto shim = static_cast(alloc->GetAllocationSource()); - alloc->SetAllocationSource(shim->GetOverride()); - Internal::AllocatorOverrideShim::Destroy(shim); - } -} - //========================================================================= // UnRegisterAllocator // [9/17/2009] @@ -365,7 +262,7 @@ AllocatorManager::GarbageCollect() for (int i = 0; i < m_numAllocators; ++i) { - m_allocators[i]->GetAllocationSource()->GarbageCollect(); + m_allocators[i]->GetSchema()->GarbageCollect(); } } @@ -414,94 +311,6 @@ AllocatorManager::SetTrackingMode(Debug::AllocationRecords::Mode mode) } } -//========================================================================= -// SetOverrideSchema -// [8/17/2018] -//========================================================================= -void -AllocatorManager::SetOverrideAllocatorSource(IAllocatorAllocate* source, bool overrideExistingAllocators) -{ - (void)source; - (void)overrideExistingAllocators; - -#ifdef AZCORE_MEMORY_ENABLE_OVERRIDES - AZ_Assert(!m_configurationFinalized, "You cannot set an allocator source after FinalizeConfiguration() has been called."); - m_overrideSource = source; - - if (overrideExistingAllocators) - { - AZStd::lock_guard lock(m_allocatorListMutex); - for (int i = 0; i < m_numAllocators; ++i) - { - if (m_allocators[i]->CanBeOverridden()) - { - auto shim = static_cast(m_allocators[i]->GetAllocationSource()); - shim->SetOverride(source); - } - } - } -#endif -} - -//========================================================================= -// AddAllocatorRemapping -// [8/27/2018] -//========================================================================= -void -AllocatorManager::AddAllocatorRemapping(const char* fromName, const char* toName) -{ - (void)fromName; - (void)toName; - -#ifdef AZCORE_MEMORY_ENABLE_OVERRIDES - AZ_Assert(!m_configurationFinalized, "You cannot set an allocator remapping after FinalizeConfiguration() has been called."); - m_data->m_remappings.emplace(AZStd::piecewise_construct, AZStd::forward_as_tuple(fromName, m_mallocSchema.get()), AZStd::forward_as_tuple(toName, m_mallocSchema.get())); - m_data->m_remappingsReverse.emplace(AZStd::piecewise_construct, AZStd::forward_as_tuple(toName, m_mallocSchema.get()), AZStd::forward_as_tuple(fromName, m_mallocSchema.get())); -#endif -} - -void -AllocatorManager::FinalizeConfiguration() -{ - if (m_configurationFinalized) - { - return; - } - -#ifdef AZCORE_MEMORY_ENABLE_OVERRIDES - { - AZStd::lock_guard lock(m_allocatorListMutex); - - for (int i = 0; i < m_numAllocators; ++i) - { - if (!m_allocators[i]->CanBeOverridden()) - { - continue; - } - - auto shim = static_cast(m_allocators[i]->GetAllocationSource()); - - if (!shim->IsOverridden()) - { - m_allocators[i]->ResetAllocationSource(); - Internal::AllocatorOverrideShim::Destroy(shim); - } - else if (!shim->HasOrphanedAllocations()) - { - m_allocators[i]->SetAllocationSource(shim->GetOverride()); - Internal::AllocatorOverrideShim::Destroy(shim); - } - else - { - shim->SetFinalizedConfiguration(); - } - } - } -#endif - - m_configurationFinalized = true; -} - void AllocatorManager::EnterProfilingMode() { @@ -545,27 +354,18 @@ AllocatorManager::DumpAllocators() size_t totalConsumedBytes = 0; memset(m_dumpInfo, 0, sizeof(m_dumpInfo)); - void* sourceList[m_maxNumAllocators]; AZ_Printf(TAG, "%d allocators active\n", m_numAllocators); AZ_Printf(TAG, "Index,Name,Used kb,Reserved kb,Consumed kb\n"); for (int i = 0; i < m_numAllocators; i++) { - auto allocator = m_allocators[i]; - auto source = allocator->GetAllocationSource(); + IAllocator* allocator = GetAllocator(i); const char* name = allocator->GetName(); - size_t usedBytes = source->NumAllocatedBytes(); - size_t reservedBytes = source->Capacity(); + size_t usedBytes = allocator->NumAllocatedBytes(); + size_t reservedBytes = allocator->Capacity(); size_t consumedBytes = reservedBytes; - // Very hacky and inefficient check to see if this allocator obtains its memory from another allocator - sourceList[i] = source; - if (AZStd::find(sourceList, sourceList + i, allocator->GetSchema()) != sourceList + i) - { - consumedBytes = 0; - } - totalUsedBytes += usedBytes; totalReservedBytes += reservedBytes; totalConsumedBytes += consumedBytes; @@ -585,61 +385,21 @@ void AllocatorManager::GetAllocatorStats(size_t& allocatedBytes, size_t& capacit AZStd::lock_guard lock(m_allocatorListMutex); const int allocatorCount = GetNumAllocators(); - AZStd::unordered_map existingAllocators; - AZStd::unordered_map sourcesToAllocators; // Build a mapping of original allocator sources to their allocators for (int i = 0; i < allocatorCount; ++i) { IAllocator* allocator = GetAllocator(i); - sourcesToAllocators.emplace(allocator->GetOriginalAllocationSource(), allocator); - } - - for (int i = 0; i < allocatorCount; ++i) - { - IAllocator* allocator = GetAllocator(i); - IAllocatorAllocate* source = allocator->GetAllocationSource(); - IAllocatorAllocate* originalSource = allocator->GetOriginalAllocationSource(); - IAllocatorAllocate* schema = allocator->GetSchema(); - IAllocator* alias = (source != originalSource) ? sourcesToAllocators[source] : nullptr; - - if (schema && !alias) - { - // Check to see if this allocator's source maps to another allocator - // Need to check both the schema and the allocator itself, as either one might be used as the alias depending on how it's implemented - AZStd::array checkAllocators = { { schema, allocator->GetAllocationSource() } }; - - for (IAllocatorAllocate* check : checkAllocators) - { - auto existing = existingAllocators.emplace(check, allocator); - - if (!existing.second) - { - alias = existing.first->second; - // Do not break out of the loop as we need to add to the map for all entries - } - } - } - - static const IAllocator* OS_ALLOCATOR = &AllocatorInstance::GetAllocator(); - size_t sourceAllocatedBytes = source->NumAllocatedBytes(); - size_t sourceCapacityBytes = source->Capacity(); - - if (allocator == OS_ALLOCATOR) - { - // Need to special case the OS allocator because its capacity is a made-up number. Better to just use the allocated amount, it will hopefully be small anyway. - sourceCapacityBytes = sourceAllocatedBytes; - } - + allocatedBytes += allocator->NumAllocatedBytes(); + capacityBytes += allocator->Capacity(); + if (outStats) { - outStats->emplace(outStats->end(), allocator->GetName(), alias ? alias->GetName() : allocator->GetDescription(), sourceAllocatedBytes, sourceCapacityBytes, alias != nullptr); - } - - if (!alias) - { - allocatedBytes += sourceAllocatedBytes; - capacityBytes += sourceCapacityBytes; + outStats->emplace(outStats->end(), + allocator->GetName(), + allocator->GetDescription(), + allocator->NumAllocatedBytes(), + allocator->Capacity()); } } } diff --git a/Code/Framework/AzCore/AzCore/Memory/AllocatorManager.h b/Code/Framework/AzCore/AzCore/Memory/AllocatorManager.h index 14dec68ad1..0e8be07013 100644 --- a/Code/Framework/AzCore/AzCore/Memory/AllocatorManager.h +++ b/Code/Framework/AzCore/AzCore/Memory/AllocatorManager.h @@ -84,17 +84,6 @@ namespace AZ /// Especially for great code and engines... void SetAllocatorLeaking(bool allowLeaking) { m_isAllocatorLeaking = allowLeaking; } - /// Set an override allocator - /// All allocators registered with the AllocatorManager will automatically redirect to this allocator - /// if set. - void SetOverrideAllocatorSource(IAllocatorAllocate* source, bool overrideExistingAllocators = true); - - /// Retrieve the override schema - IAllocatorAllocate* GetOverrideAllocatorSource() const { return m_overrideSource; } - - void AddAllocatorRemapping(const char* fromName, const char* toName); - void FinalizeConfiguration(); - /// Enter or exit profiling mode; calls to Enter must be matched with calls to Exit void EnterProfilingMode(); void ExitProfilingMode(); @@ -113,19 +102,17 @@ namespace AZ struct AllocatorStats { - AllocatorStats(const char* name, const char* aliasOrDescription, size_t allocatedBytes, size_t capacityBytes, bool isAlias) + AllocatorStats(const char* name, const char* aliasOrDescription, size_t allocatedBytes, size_t capacityBytes) : m_name(name) , m_aliasOrDescription(aliasOrDescription) , m_allocatedBytes(allocatedBytes) , m_capacityBytes(capacityBytes) - , m_isAlias(isAlias) {} AZStd::string m_name; AZStd::string m_aliasOrDescription; size_t m_allocatedBytes; size_t m_capacityBytes; - bool m_isAlias; }; void GetAllocatorStats(size_t& usedBytes, size_t& reservedBytes, AZStd::vector* outStats = nullptr); @@ -157,7 +144,6 @@ namespace AZ private: void InternalDestroy(); - void ConfigureAllocatorOverrides(IAllocator* alloc); void DebugBreak(void* address, const Debug::AllocationInfo& info); AZ::MallocSchema* CreateMallocSchema(); @@ -172,14 +158,9 @@ namespace AZ MemoryBreak m_memoryBreak[MaxNumMemoryBreaks]; char m_activeBreaks; AZStd::mutex m_allocatorListMutex; - IAllocatorAllocate* m_overrideSource; DumpInfo m_dumpInfo[m_maxNumAllocators]; - struct InternalData; - - InternalData* m_data; - bool m_configurationFinalized; AZStd::atomic m_profilingRefcount; AZ::Debug::AllocationRecords::Mode m_defaultTrackingRecordMode; diff --git a/Code/Framework/AzCore/AzCore/Memory/AllocatorOverrideShim.cpp b/Code/Framework/AzCore/AzCore/Memory/AllocatorOverrideShim.cpp deleted file mode 100644 index e4928e83c5..0000000000 --- a/Code/Framework/AzCore/AzCore/Memory/AllocatorOverrideShim.cpp +++ /dev/null @@ -1,227 +0,0 @@ -/* - * 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 - -namespace AZ::Internal -{ - AllocatorOverrideShim* AllocatorOverrideShim::Create(IAllocator* owningAllocator, IAllocatorAllocate* shimAllocationSource) - { - void* memory = shimAllocationSource->Allocate(sizeof(AllocatorOverrideShim), AZStd::alignment_of::value, 0); - auto result = new (memory) AllocatorOverrideShim(owningAllocator, shimAllocationSource); - return result; - } - - void AllocatorOverrideShim::Destroy(AllocatorOverrideShim* source) - { - auto shimAllocationSource = source->m_shimAllocationSource; - source->~AllocatorOverrideShim(); - shimAllocationSource->DeAllocate(source); - } - - AllocatorOverrideShim::AllocatorOverrideShim(IAllocator* owningAllocator, IAllocatorAllocate* shimAllocationSource) - : m_owningAllocator(owningAllocator) - , m_source(owningAllocator->GetOriginalAllocationSource()) - , m_overridingSource(owningAllocator->GetOriginalAllocationSource()) - , m_shimAllocationSource(shimAllocationSource) - , m_records(typename AllocationSet::hasher(), typename AllocationSet::key_eq(), StdAllocationSrc(shimAllocationSource)) - { - } - - void AllocatorOverrideShim::SetOverride(IAllocatorAllocate* source) - { - m_overridingSource = source; - } - - IAllocatorAllocate* AllocatorOverrideShim::GetOverride() const - { - return m_overridingSource; - } - - bool AllocatorOverrideShim::IsOverridden() const - { - return m_source != m_overridingSource; - } - - bool AllocatorOverrideShim::HasOrphanedAllocations() const - { - return !m_records.empty(); - } - - void AllocatorOverrideShim::SetFinalizedConfiguration() - { - m_finalizedConfiguration = true; - } - - typename AllocatorOverrideShim::pointer_type AllocatorOverrideShim::Allocate(size_type byteSize, size_type alignment, int flags, const char* name, const char* fileName, int lineNum, unsigned int suppressStackRecord) - { - pointer_type ptr = m_overridingSource->Allocate(byteSize, alignment, flags, name, fileName, lineNum, suppressStackRecord); - - if (!IsOverridden()) - { - lock_type lock(m_mutex); - m_records.insert(ptr); // Record in case we need to orphan this allocation later - } - - return ptr; - } - - void AllocatorOverrideShim::DeAllocate(pointer_type ptr, size_type byteSize, size_type alignment) - { - IAllocatorAllocate* source = m_overridingSource; - bool destroy = false; - - { - lock_type lock(m_mutex); - - // Check to see if this came from a prior allocation source - if (m_records.erase(ptr) && IsOverridden()) - { - source = m_source; - - if (m_records.empty() && m_finalizedConfiguration) - { - // All orphaned records are gone; we are no longer needed - m_owningAllocator->SetAllocationSource(m_overridingSource); - destroy = true; // Must destroy outside the lock - } - } - } - - source->DeAllocate(ptr, byteSize, alignment); - - if (destroy) - { - Destroy(this); - } - } - - typename AllocatorOverrideShim::size_type AllocatorOverrideShim::Resize(pointer_type ptr, size_type newSize) - { - IAllocatorAllocate* source = m_overridingSource; - - if (IsOverridden()) - { - // Determine who owns the allocation - lock_type lock(m_mutex); - - if (m_records.count(ptr)) - { - source = m_source; - } - } - - size_t result = source->Resize(ptr, newSize); - - return result; - } - - typename AllocatorOverrideShim::pointer_type AllocatorOverrideShim::ReAllocate(pointer_type ptr, size_type newSize, size_type newAlignment) - { - pointer_type newPtr = nullptr; - bool useOverride = true; - bool destroy = false; - - if (IsOverridden()) - { - lock_type lock(m_mutex); - - if (m_records.erase(ptr)) - { - // An old allocation needs to be transferred to the new, overriding allocator. - useOverride = false; // We'll do the reallocation here - size_t oldSize = m_source->AllocationSize(ptr); - - if (newSize) - { - newPtr = m_overridingSource->Allocate(newSize, newAlignment, 0); - memcpy(newPtr, ptr, AZStd::min(newSize, oldSize)); - } - - m_source->DeAllocate(ptr, oldSize); - - if (m_records.empty() && m_finalizedConfiguration) - { - // All orphaned records are gone; we are no longer needed - m_owningAllocator->SetAllocationSource(m_overridingSource); - destroy = true; // Must destroy outside the lock - } - } - } - - if (useOverride) - { - // Default behavior, we weren't deleting an old allocation - newPtr = m_overridingSource->ReAllocate(ptr, newSize, newAlignment); - - if (!IsOverridden()) - { - // Still need to do bookkeeping if we haven't been overridden yet - lock_type lock(m_mutex); - m_records.erase(ptr); - m_records.insert(newPtr); - } - } - - if (destroy) - { - Destroy(this); - } - - return newPtr; - } - - typename AllocatorOverrideShim::size_type AllocatorOverrideShim::AllocationSize(pointer_type ptr) - { - IAllocatorAllocate* source = m_overridingSource; - - if (IsOverridden()) - { - // Determine who owns the allocation - lock_type lock(m_mutex); - - if (m_records.count(ptr)) - { - source = m_source; - } - } - - return source->AllocationSize(ptr); - } - - void AllocatorOverrideShim::GarbageCollect() - { - m_source->GarbageCollect(); - } - - typename AllocatorOverrideShim::size_type AllocatorOverrideShim::NumAllocatedBytes() const - { - return m_source->NumAllocatedBytes(); - } - - typename AllocatorOverrideShim::size_type AllocatorOverrideShim::Capacity() const - { - return m_source->Capacity(); - } - - typename AllocatorOverrideShim::size_type AllocatorOverrideShim::GetMaxAllocationSize() const - { - return m_source->GetMaxAllocationSize(); - } - - auto AllocatorOverrideShim::GetMaxContiguousAllocationSize() const -> size_type - { - return m_source->GetMaxContiguousAllocationSize(); - } - - IAllocatorAllocate* AllocatorOverrideShim::GetSubAllocator() - { - return m_source->GetSubAllocator(); - } - -} // namespace AZ::Internal diff --git a/Code/Framework/AzCore/AzCore/Memory/AllocatorOverrideShim.h b/Code/Framework/AzCore/AzCore/Memory/AllocatorOverrideShim.h deleted file mode 100644 index 3b45b9953e..0000000000 --- a/Code/Framework/AzCore/AzCore/Memory/AllocatorOverrideShim.h +++ /dev/null @@ -1,102 +0,0 @@ -/* - * 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 - -#include -#include -#include - -namespace AZ -{ - class AllocatorManager; - - namespace Internal - { - /** - * A shim schema that solves the problem of overriding lazily-created allocators especially, that perform allocations before the override happens. - * - * Any allocator that *might* be overridden at some point must have this shim installed as its allocation source. This is done automatically by - * the AllocationManager; you generally do not have to interact with this shim directly at all. - * - * The shim will keep track of any allocations that occur, and if the allocator gets overridden it will ensure that prior allocations are - * deallocated with the old schema rather than the new one. - * - * There is some performance cost to this intrusion, however, in most cases it's only temporary: - * * Once the application calls FinalizeConfiguration(), any non-overridden allocators will have their shims destroyed. - * * Any overridden allocators that do not have prior allocations will have their shims destroyed. - * * Any overridden allocator will automatically destroy its shim once the last of the prior allocations has been deallocated. - * - * Note that an allocator that gets overridden but has prior allocations that it never intends to deallocate (such as file-level statics that never - * get changed) will keep its shim indefinitely. This is an unfortunate cost but only affects those allocators if they are being overridden. - */ - class AllocatorOverrideShim - : public IAllocatorAllocate - { - friend AllocatorManager; - - public: - //--------------------------------------------------------------------- - // IAllocator implementation - //--------------------------------------------------------------------- - pointer_type Allocate(size_type byteSize, size_type alignment, int flags = 0, const char* name = nullptr, const char* fileName = nullptr, int lineNum = 0, unsigned int suppressStackRecord = 0) override; - void DeAllocate(pointer_type ptr, size_type byteSize = 0, size_type alignment = 0) override; - size_type Resize(pointer_type ptr, size_type newSize) override; - pointer_type ReAllocate(pointer_type ptr, size_type newSize, size_type newAlignment) override; - size_type AllocationSize(pointer_type ptr) override; - void GarbageCollect() override; - size_type NumAllocatedBytes() const override; - size_type Capacity() const override; - size_type GetMaxAllocationSize() const override; - size_type GetMaxContiguousAllocationSize() const override; - IAllocatorAllocate* GetSubAllocator() override; - - private: - /// Creates a shim using a custom memory source - static AllocatorOverrideShim* Create(IAllocator* owningAllocator, IAllocatorAllocate* shimAllocationSource); - static void Destroy(AllocatorOverrideShim* source); - - AllocatorOverrideShim(IAllocator* owningAllocator, IAllocatorAllocate* shimAllocationSource); - - /// Overrides the shim's memory source with a different memory source. - void SetOverride(IAllocatorAllocate* source); - - /// Returns the override source. - IAllocatorAllocate* GetOverride() const; - - /// Returns true if the shim has an override source set on it. - bool IsOverridden() const; - - /// Returns true if there are orphaned allocations from before the shim had its override set. - bool HasOrphanedAllocations() const; - - /// Called by the AllocatorManager to signify that the configuration has been finalized by the application. - void SetFinalizedConfiguration(); - - private: - class StdAllocationSrc : public AZStdIAllocator - { - public: - StdAllocationSrc(IAllocatorAllocate* schema = nullptr) : AZStdIAllocator(schema) - { - } - }; - - typedef AZStd::mutex mutex_type; - typedef AZStd::lock_guard lock_type; - typedef AZStd::unordered_set, AZStd::equal_to, StdAllocationSrc> AllocationSet; - - IAllocator* m_owningAllocator; - IAllocatorAllocate* m_source; - IAllocatorAllocate* m_overridingSource; - IAllocatorAllocate* m_shimAllocationSource; - AllocationSet m_records; - mutex_type m_mutex; - bool m_finalizedConfiguration = false; - }; - } -} diff --git a/Code/Framework/AzCore/AzCore/Memory/BestFitExternalMapAllocator.cpp b/Code/Framework/AzCore/AzCore/Memory/BestFitExternalMapAllocator.cpp index 30b0b78fe5..da960ce3f3 100644 --- a/Code/Framework/AzCore/AzCore/Memory/BestFitExternalMapAllocator.cpp +++ b/Code/Framework/AzCore/AzCore/Memory/BestFitExternalMapAllocator.cpp @@ -20,8 +20,7 @@ using namespace AZ; // [1/28/2011] //========================================================================= BestFitExternalMapAllocator::BestFitExternalMapAllocator() - : AllocatorBase(this, "BestFitExternalMapAllocator", "Best fit allocator with external tracking storage!") - , m_schema(nullptr) + : AllocatorBase(nullptr, "BestFitExternalMapAllocator", "Best fit allocator with external tracking storage!") {} //========================================================================= @@ -186,13 +185,3 @@ auto BestFitExternalMapAllocator::GetMaxContiguousAllocationSize() const -> size { return m_schema->GetMaxContiguousAllocationSize(); } - -//========================================================================= -// GetSubAllocator -// [1/28/2011] -//========================================================================= -IAllocatorAllocate* -BestFitExternalMapAllocator::GetSubAllocator() -{ - return m_schema->GetSubAllocator(); -} diff --git a/Code/Framework/AzCore/AzCore/Memory/BestFitExternalMapAllocator.h b/Code/Framework/AzCore/AzCore/Memory/BestFitExternalMapAllocator.h index 17425625b7..2cad404cd0 100644 --- a/Code/Framework/AzCore/AzCore/Memory/BestFitExternalMapAllocator.h +++ b/Code/Framework/AzCore/AzCore/Memory/BestFitExternalMapAllocator.h @@ -20,7 +20,6 @@ namespace AZ */ class BestFitExternalMapAllocator : public AllocatorBase - , public IAllocatorAllocate { public: AZ_TYPE_INFO(BestFitExternalMapAllocator, "{36266C8B-9A2C-4E3E-9812-3DB260868A2B}") @@ -38,7 +37,7 @@ namespace AZ static const int m_memoryBlockAlignment = 16; void* m_memoryBlock; ///< Pointer to memory to allocate from. Can be uncached. unsigned int m_memoryBlockByteSize; ///< Sizes if the memory block. - IAllocatorAllocate* m_mapAllocator; ///< Allocator for the free chunks map. If null the SystemAllocator will be used. + IAllocator* m_mapAllocator; ///< Allocator for the free chunks map. If null the SystemAllocator will be used. bool m_allocationRecords; ///< True if we want to track memory allocations, otherwise false. unsigned char m_stackRecordLevels; ///< If stack recording is enabled, how many stack levels to record. @@ -53,7 +52,7 @@ namespace AZ AllocatorDebugConfig GetDebugConfig() override; ////////////////////////////////////////////////////////////////////////// - // IAllocatorAllocate + // IAllocatorSchema pointer_type Allocate(size_type byteSize, size_type alignment, int flags = 0, const char* name = 0, const char* fileName = 0, int lineNum = 0, unsigned int suppressStackRecord = 0) override; void DeAllocate(pointer_type ptr, size_type byteSize = 0, size_type alignment = 0) override; size_type Resize(pointer_type ptr, size_type newSize) override; @@ -64,7 +63,6 @@ namespace AZ size_type Capacity() const override; size_type GetMaxAllocationSize() const override; size_type GetMaxContiguousAllocationSize() const override; - IAllocatorAllocate* GetSubAllocator() override; ////////////////////////////////////////////////////////////////////////// protected: @@ -72,7 +70,6 @@ namespace AZ BestFitExternalMapAllocator& operator=(const BestFitExternalMapAllocator&); Descriptor m_desc; - BestFitExternalMapSchema* m_schema; }; } diff --git a/Code/Framework/AzCore/AzCore/Memory/BestFitExternalMapSchema.cpp b/Code/Framework/AzCore/AzCore/Memory/BestFitExternalMapSchema.cpp index 715ecd221e..75356e85f3 100644 --- a/Code/Framework/AzCore/AzCore/Memory/BestFitExternalMapSchema.cpp +++ b/Code/Framework/AzCore/AzCore/Memory/BestFitExternalMapSchema.cpp @@ -30,6 +30,7 @@ BestFitExternalMapSchema::BestFitExternalMapSchema(const Descriptor& desc) //if( m_desc.m_memoryBlock == NULL) there is no point to automate this cause we need to flag this memory special, otherwise there is no point to use this allocator at all // m_desc.m_memoryBlock = azmalloc(SystemAllocator,m_desc.m_memoryBlockByteSize,16); m_freeChunksMap.insert(AZStd::make_pair(m_desc.m_memoryBlockByteSize, reinterpret_cast(m_desc.m_memoryBlock))); + } //========================================================================= @@ -37,7 +38,7 @@ BestFitExternalMapSchema::BestFitExternalMapSchema(const Descriptor& desc) // [1/28/2011] //========================================================================= BestFitExternalMapSchema::pointer_type -BestFitExternalMapSchema::Allocate(size_type byteSize, size_type alignment, int flags) +BestFitExternalMapSchema::Allocate(size_type byteSize, size_type alignment, int flags, const char*, const char*, int, unsigned int) { (void)flags; char* address = nullptr; @@ -91,8 +92,7 @@ BestFitExternalMapSchema::Allocate(size_type byteSize, size_type alignment, int // DeAllocate // [1/28/2011] //========================================================================= -void -BestFitExternalMapSchema::DeAllocate(pointer_type ptr) +void BestFitExternalMapSchema::DeAllocate(pointer_type ptr, size_type, size_type) { if (ptr == nullptr) { @@ -122,6 +122,20 @@ BestFitExternalMapSchema::AllocationSize(pointer_type ptr) return 0; } +BestFitExternalMapSchema::size_type +BestFitExternalMapSchema::Resize(pointer_type, size_type) +{ + AZ_Assert(false, AZ_FUNCTION_SIGNATURE " unsupported"); + return 0; +} + +BestFitExternalMapSchema::pointer_type +BestFitExternalMapSchema::ReAllocate(pointer_type, size_type, size_type) +{ + AZ_Assert(false, AZ_FUNCTION_SIGNATURE " unsupported"); + return nullptr; +} + //========================================================================= // GetMaxAllocationSize // [1/28/2011] diff --git a/Code/Framework/AzCore/AzCore/Memory/BestFitExternalMapSchema.h b/Code/Framework/AzCore/AzCore/Memory/BestFitExternalMapSchema.h index eaab614593..63e9027dd2 100644 --- a/Code/Framework/AzCore/AzCore/Memory/BestFitExternalMapSchema.h +++ b/Code/Framework/AzCore/AzCore/Memory/BestFitExternalMapSchema.h @@ -21,7 +21,7 @@ namespace AZ * External map allows us to use this allocator with uncached memory, * because the tracking node is stored outside the main chunk. */ - class BestFitExternalMapSchema + class BestFitExternalMapSchema : public IAllocatorSchema { public: typedef void* pointer_type; @@ -45,26 +45,27 @@ namespace AZ static const int m_memoryBlockAlignment = 16; void* m_memoryBlock; ///< Pointer to memory to allocate from. Can be uncached. unsigned int m_memoryBlockByteSize; ///< Sizes if the memory block. - IAllocatorAllocate* m_mapAllocator; ///< Allocator for the free chunks map. If null the SystemAllocator will be used. + IAllocator* m_mapAllocator; ///< Allocator for the free chunks map. If null the SystemAllocator will be used. }; BestFitExternalMapSchema(const Descriptor& desc); - pointer_type Allocate(size_type byteSize, size_type alignment, int flags); - void DeAllocate(pointer_type ptr); - size_type AllocationSize(pointer_type ptr); + pointer_type Allocate(size_type byteSize, size_type alignment, int flags = 0, const char* name = 0, const char* fileName = 0, int lineNum = 0, unsigned int suppressStackRecord = 0) override; + void DeAllocate(pointer_type ptr, size_type byteSize = 0, size_type alignment = 0) override; + size_type Resize(pointer_type ptr, size_type newSize) override; + pointer_type ReAllocate(pointer_type ptr, size_type newSize, size_type newAlignment) override; + size_type AllocationSize(pointer_type ptr) override; - AZ_FORCE_INLINE size_type NumAllocatedBytes() const { return m_used; } - AZ_FORCE_INLINE size_type Capacity() const { return m_desc.m_memoryBlockByteSize; } - size_type GetMaxAllocationSize() const; - size_type GetMaxContiguousAllocationSize() const; - AZ_FORCE_INLINE IAllocatorAllocate* GetSubAllocator() const { return m_desc.m_mapAllocator; } + AZ_FORCE_INLINE size_type NumAllocatedBytes() const override { return m_used; } + AZ_FORCE_INLINE size_type Capacity() const override { return m_desc.m_memoryBlockByteSize; } + size_type GetMaxAllocationSize() const override; + size_type GetMaxContiguousAllocationSize() const override; /** - * Since we don't consolidate chucnks at free time (too expensive) we will do it as we need or when we can't + * Since we don't consolidate chunks at free time (too expensive) we will do it as we need or when we can't * allocate memory. This function is at least O(nlogn) where 'n' are the free chunks. */ - void GarbageCollect(); + void GarbageCollect() override; private: AZ_FORCE_INLINE size_type ChunckSize(pointer_type ptr); diff --git a/Code/Framework/AzCore/AzCore/Memory/HeapSchema.cpp b/Code/Framework/AzCore/AzCore/Memory/HeapSchema.cpp index 1f0fc59a97..98ca1f87ed 100644 --- a/Code/Framework/AzCore/AzCore/Memory/HeapSchema.cpp +++ b/Code/Framework/AzCore/AzCore/Memory/HeapSchema.cpp @@ -107,7 +107,6 @@ namespace AZ m_used = 0; m_desc = desc; - m_subAllocator = nullptr; for (int i = 0; i < Descriptor::m_maxNumBlocks; ++i) { diff --git a/Code/Framework/AzCore/AzCore/Memory/HeapSchema.h b/Code/Framework/AzCore/AzCore/Memory/HeapSchema.h index 3a7716a127..ea4a4ebdc6 100644 --- a/Code/Framework/AzCore/AzCore/Memory/HeapSchema.h +++ b/Code/Framework/AzCore/AzCore/Memory/HeapSchema.h @@ -17,7 +17,7 @@ namespace AZ * Internally uses use dlmalloc or version of it (nedmalloc, ptmalloc3). */ class HeapSchema - : public IAllocatorAllocate + : public IAllocatorSchema { public: typedef void* pointer_type; @@ -52,7 +52,6 @@ namespace AZ size_type Capacity() const override { return m_capacity; } size_type GetMaxAllocationSize() const override; size_type GetMaxContiguousAllocationSize() const override; - IAllocatorAllocate* GetSubAllocator() override { return m_subAllocator; } void GarbageCollect() override {} private: @@ -62,7 +61,7 @@ namespace AZ Descriptor m_desc; size_type m_capacity; ///< Capacity in bytes. size_type m_used; ///< Number of bytes in use. - IAllocatorAllocate* m_subAllocator; + IAllocatorSchema* m_subAllocator; bool m_ownMemoryBlock[Descriptor::m_maxNumBlocks]; }; } diff --git a/Code/Framework/AzCore/AzCore/Memory/HphaSchema.cpp b/Code/Framework/AzCore/AzCore/Memory/HphaSchema.cpp index 6e40ccd8cd..6891eb4248 100644 --- a/Code/Framework/AzCore/AzCore/Memory/HphaSchema.cpp +++ b/Code/Framework/AzCore/AzCore/Memory/HphaSchema.cpp @@ -1081,7 +1081,7 @@ namespace AZ { const size_t m_treePageAlignment; const size_t m_poolPageSize; bool m_isPoolAllocations; - IAllocatorAllocate* m_subAllocator; + IAllocatorSchema* m_subAllocator; #if !defined (USE_MUTEX_PER_BUCKET) mutable AZStd::mutex m_mutex; diff --git a/Code/Framework/AzCore/AzCore/Memory/HphaSchema.h b/Code/Framework/AzCore/AzCore/Memory/HphaSchema.h index 5ee0205196..27dbd321d2 100644 --- a/Code/Framework/AzCore/AzCore/Memory/HphaSchema.h +++ b/Code/Framework/AzCore/AzCore/Memory/HphaSchema.h @@ -19,7 +19,7 @@ namespace AZ * Heap allocator schema, based on Dimitar Lazarov "High Performance Heap Allocator". */ class HphaSchema - : public IAllocatorAllocate + : public IAllocatorSchema { public: /** @@ -47,7 +47,7 @@ namespace AZ unsigned int m_isPoolAllocations : 1; ///< True to allow allocations from pools, otherwise false. size_t m_fixedMemoryBlockByteSize; ///< Memory block size, if 0 we use the OS memory allocation functions. void* m_fixedMemoryBlock; ///< Can be NULL if so the we will allocate memory from the subAllocator if m_memoryBlocksByteSize is != 0. - IAllocatorAllocate* m_subAllocator; ///< Allocator that m_memoryBlocks memory was allocated from or should be allocated (if NULL). + IAllocatorSchema* m_subAllocator; ///< Allocator that m_memoryBlocks memory was allocated from or should be allocated (if NULL). size_t m_systemChunkSize; ///< Size of chunk to request from the OS when more memory is needed (defaults to m_pageSize) size_t m_capacity; ///< Max size this allocator can grow to }; @@ -68,7 +68,6 @@ namespace AZ size_type GetMaxAllocationSize() const override; size_type GetMaxContiguousAllocationSize() const override; size_type GetUnAllocatedMemory(bool isPrint = false) const override; - IAllocatorAllocate* GetSubAllocator() override { return m_desc.m_subAllocator; } /// Return unused memory to the OS (if we don't use fixed block). Don't call this unless you really need free memory, it is slow. void GarbageCollect() override; diff --git a/Code/Framework/AzCore/AzCore/Memory/IAllocator.cpp b/Code/Framework/AzCore/AzCore/Memory/IAllocator.cpp index 08c567bf84..2d561b45ef 100644 --- a/Code/Framework/AzCore/AzCore/Memory/IAllocator.cpp +++ b/Code/Framework/AzCore/AzCore/Memory/IAllocator.cpp @@ -9,23 +9,12 @@ namespace AZ { - IAllocator::IAllocator(IAllocatorAllocate* allocationSource) - : m_allocationSource(allocationSource) - , m_originalAllocationSource(allocationSource) + IAllocator::IAllocator(IAllocatorSchema* schema) + : m_schema(schema) { } IAllocator::~IAllocator() { } - - void IAllocator::SetAllocationSource(IAllocatorAllocate* allocationSource) - { - m_allocationSource = allocationSource; - } - - void IAllocator::ResetAllocationSource() - { - m_allocationSource = m_originalAllocationSource; - } } diff --git a/Code/Framework/AzCore/AzCore/Memory/IAllocator.h b/Code/Framework/AzCore/AzCore/Memory/IAllocator.h index 532335e50b..319175f9ee 100644 --- a/Code/Framework/AzCore/AzCore/Memory/IAllocator.h +++ b/Code/Framework/AzCore/AzCore/Memory/IAllocator.h @@ -28,17 +28,16 @@ namespace AZ class AllocatorManager; /** - * Allocator alloc/free basic interface. It is separate because it can be used - * for user provided allocators overrides + * Allocator schema interface */ - class IAllocatorAllocate + class IAllocatorSchema { public: typedef void* pointer_type; typedef size_t size_type; typedef ptrdiff_t difference_type; - virtual ~IAllocatorAllocate() {} + virtual ~IAllocatorSchema() {} virtual pointer_type Allocate(size_type byteSize, size_type alignment, int flags = 0, const char* name = 0, const char* fileName = 0, int lineNum = 0, unsigned int suppressStackRecord = 0) = 0; virtual void DeAllocate(pointer_type ptr, size_type byteSize = 0, size_type alignment = 0) = 0; @@ -70,8 +69,6 @@ namespace AZ * that will be reported. */ virtual size_type GetUnAllocatedMemory(bool isPrint = false) const { (void)isPrint; return 0; } - /// Returns a pointer to a sub-allocator or NULL. - virtual IAllocatorAllocate* GetSubAllocator() = 0; }; /** @@ -100,56 +97,19 @@ namespace AZ /** * Interface class for all allocators. */ - class IAllocator + class IAllocator : public IAllocatorSchema { public: - IAllocator(IAllocatorAllocate* allocationSource); + IAllocator(IAllocatorSchema* schema = nullptr); virtual ~IAllocator(); - // @{ Every system allocator is required to provide name this is how + // Every system allocator is required to provide name this is how // it will be registered with the allocator manager. virtual const char* GetName() const = 0; virtual const char* GetDescription() const = 0; - // @} - //--------------------------------------------------------------------- - // Code releating to the allocation source is made concrete within this - // interface as a performance optimization. - //--------------------------------------------------------------------- - - /// Returns the current allocation source, which may be used to perform memory allocations. - AZ_FORCE_INLINE IAllocatorAllocate* GetAllocationSource() const - { - return m_allocationSource; - } - - /// Returns the original allocation source. Generally only used for debugging purposes. - AZ_FORCE_INLINE IAllocatorAllocate* GetOriginalAllocationSource() const - { - return m_originalAllocationSource; - } - - /// Returns true if the allocation source has changed from its original value. - AZ_FORCE_INLINE bool IsAllocationSourceChanged() const - { - return m_allocationSource != m_originalAllocationSource; - } - - /// Sets the allocation source, effectively overriding the allocator. - /// Be very careful doing this, as existing allocations will be deallocated through the new source, - /// typically leading to unwanted effects (such as crashes). - void SetAllocationSource(IAllocatorAllocate* allocationSource); - - /// Restores the allocation source to its original value. - /// Be very careful doing this, as allocations that came from the new source will now be deallocated - /// through the original source, typically leading to unwanted effects (such as crashes). - void ResetAllocationSource(); - - //--------------------------------------------------------------------- - - /// Returns the schema, if the allocator uses one. Returns nullptr if the allocator does not use a schema. - /// This is mainly used when debugging to determine if allocators alias each other under the hood. - virtual IAllocatorAllocate* GetSchema() = 0; + /// Returns the schema + AZ_FORCE_INLINE IAllocatorSchema* GetSchema() const { return m_schema; }; /// Returns the debug configuration for this allocator. virtual AllocatorDebugConfig GetDebugConfig() = 0; @@ -163,11 +123,6 @@ namespace AZ /// Returns true if this allocator is ready to use. virtual bool IsReady() const = 0; - /// Returns true if this allocator can be overridden with a different source. - /// Almost all allocators should return true. There are very few minor exceptions, such as the OS Allocator, that are required for direct - /// interfacing with the kernel and must never be overridden under any circumstances. - virtual bool CanBeOverridden() const = 0; - /// Returns true if the allocator was lazily created. Exposed primarily for testing systems that need to verify the state of allocators. virtual bool IsLazilyCreated() const = 0; @@ -195,9 +150,7 @@ namespace AZ virtual void Destroy() = 0; protected: - // The allocation source is made a direct member of the interface as a performance optimization. - IAllocatorAllocate * m_allocationSource; - IAllocatorAllocate* m_originalAllocationSource; + IAllocatorSchema* m_schema; template friend class AllocatorStorage::StoragePolicyBase; diff --git a/Code/Framework/AzCore/AzCore/Memory/MallocSchema.cpp b/Code/Framework/AzCore/AzCore/Memory/MallocSchema.cpp index 9aa31cd8b6..37fa277fab 100644 --- a/Code/Framework/AzCore/AzCore/Memory/MallocSchema.cpp +++ b/Code/Framework/AzCore/AzCore/Memory/MallocSchema.cpp @@ -22,31 +22,15 @@ namespace AZ::Internal namespace AZ { + static constexpr size_t DEFAULT_ALIGNMENT = sizeof(void*) * 2; // Default malloc alignment + //--------------------------------------------------------------------- // MallocSchema methods //--------------------------------------------------------------------- - MallocSchema::MallocSchema(const Descriptor& desc) + MallocSchema::MallocSchema(const Descriptor&) : m_bytesAllocated(0) { - if (desc.m_useAZMalloc) - { - static const int DEFAULT_ALIGNMENT = sizeof(void*) * 2; // Default malloc alignment - - m_mallocFn = [](size_t byteSize) - { - return AZ_OS_MALLOC(byteSize, DEFAULT_ALIGNMENT); - }; - m_freeFn = [](void* ptr) - { - AZ_OS_FREE(ptr); - }; - } - else - { - m_mallocFn = &malloc; - m_freeFn = &free; - } } MallocSchema::~MallocSchema() @@ -84,7 +68,7 @@ namespace AZ ((alignment > sizeof(double)) ? alignment : 0); // Malloc will align to a minimum boundary for native objects, so we only pad if aligning to a large value - void* data = (*m_mallocFn)(required); + void* data = AZ_OS_MALLOC(required, DEFAULT_ALIGNMENT); void* result = PointerAlignUp(reinterpret_cast(reinterpret_cast(data) + sizeof(Internal::Header)), alignment); Internal::Header* header = PointerAlignDown( (Internal::Header*)(reinterpret_cast(result) - sizeof(Internal::Header)), AZStd::alignment_of::value); @@ -112,7 +96,7 @@ namespace AZ void* freePtr = reinterpret_cast(reinterpret_cast(ptr) - static_cast(header->offset)); m_bytesAllocated -= header->size; - (*m_freeFn)(freePtr); + AZ_OS_FREE(freePtr); } MallocSchema::pointer_type MallocSchema::ReAllocate(pointer_type ptr, size_type newSize, size_type newAlignment) @@ -166,11 +150,6 @@ namespace AZ return AZ_CORE_MAX_ALLOCATOR_SIZE; } - IAllocatorAllocate* MallocSchema::GetSubAllocator() - { - return nullptr; - } - void MallocSchema::GarbageCollect() { } diff --git a/Code/Framework/AzCore/AzCore/Memory/MallocSchema.h b/Code/Framework/AzCore/AzCore/Memory/MallocSchema.h index 7a8c4a0366..02559fdb57 100644 --- a/Code/Framework/AzCore/AzCore/Memory/MallocSchema.h +++ b/Code/Framework/AzCore/AzCore/Memory/MallocSchema.h @@ -16,7 +16,7 @@ namespace AZ * Uses malloc internally. Mainly intended for debugging using host operating system features. */ class MallocSchema - : public IAllocatorAllocate + : public IAllocatorSchema { public: AZ_TYPE_INFO("MallocSchema", "{2A21D120-A42A-484C-997C-5735DCCA5FE9}"); @@ -25,21 +25,13 @@ namespace AZ typedef size_t size_type; typedef ptrdiff_t difference_type; - struct Descriptor - { - Descriptor(bool useAZMalloc = true) - : m_useAZMalloc(useAZMalloc) - { - } - - bool m_useAZMalloc; - }; + struct Descriptor {}; MallocSchema(const Descriptor& desc = Descriptor()); virtual ~MallocSchema(); //--------------------------------------------------------------------- - // IAllocatorAllocate + // IAllocatorSchema //--------------------------------------------------------------------- pointer_type Allocate(size_type byteSize, size_type alignment, int flags, const char* name = 0, const char* fileName = 0, int lineNum = 0, unsigned int suppressStackRecord = 0) override; void DeAllocate(pointer_type ptr, size_type byteSize = 0, size_type alignment = 0) override; @@ -51,15 +43,9 @@ namespace AZ size_type Capacity() const override; size_type GetMaxAllocationSize() const override; size_type GetMaxContiguousAllocationSize() const override; - IAllocatorAllocate* GetSubAllocator() override; void GarbageCollect() override; private: - typedef void* (*MallocFn)(size_t); - typedef void (*FreeFn)(void*); - AZStd::atomic m_bytesAllocated; - MallocFn m_mallocFn; - FreeFn m_freeFn; }; } diff --git a/Code/Framework/AzCore/AzCore/Memory/Memory.h b/Code/Framework/AzCore/AzCore/Memory/Memory.h index 2e08ec1b15..2ecba6ebff 100644 --- a/Code/Framework/AzCore/AzCore/Memory/Memory.h +++ b/Code/Framework/AzCore/AzCore/Memory/Memory.h @@ -141,9 +141,9 @@ void* operator new[](std::size_t, const AZ::Internal::AllocatorDummy*); */ #define azfree(...) AZ_MACRO_SPECIALIZE(azfree_, AZ_VA_NUM_ARGS(__VA_ARGS__), (__VA_ARGS__)) -/// Returns allocation size, based on it's pointer \ref AZ::IAllocatorAllocate::AllocationSize. +/// Returns allocation size, based on it's pointer \ref AZ::IAllocatorSchema::AllocationSize. #define azallocsize(_Ptr, _Allocator) AZ::AllocatorInstance< _Allocator >::Get().AllocationSize(_Ptr) -/// Returns the new expanded size or 0 if NOT supported by the allocator \ref AZ::IAllocatorAllocate::Resize. +/// Returns the new expanded size or 0 if NOT supported by the allocator \ref AZ::IAllocatorSchema::Resize. #define azallocresize(_Ptr, _NewSize, _Allocator) AZ::AllocatorInstance< _Allocator >::Get().Resize(_Ptr, _NewSize) namespace AZ { @@ -734,12 +734,15 @@ namespace AZ public: typedef typename Allocator::Descriptor Descriptor; - AZ_FORCE_INLINE static IAllocatorAllocate& Get() + // Maintained for backwards compatibility, prefer to use Get() instead. + // Get was previously used to get the the schema, however, that bypases what the allocators are doing. + // If the schema is needed, call Get().GetSchema() + AZ_FORCE_INLINE static IAllocator& GetAllocator() { - return *GetAllocator().GetAllocationSource(); + return StoragePolicy::GetAllocator(); } - AZ_FORCE_INLINE static IAllocator& GetAllocator() + AZ_FORCE_INLINE static IAllocator& Get() { return StoragePolicy::GetAllocator(); } @@ -781,7 +784,7 @@ namespace AZ // structure of another allocator template class ChildAllocatorSchema - : public IAllocatorAllocate + : public IAllocatorSchema { public: // No descriptor is necessary, as the parent allocator is expected to already @@ -792,7 +795,7 @@ namespace AZ ChildAllocatorSchema(const Descriptor&) {} //--------------------------------------------------------------------- - // IAllocatorAllocate + // IAllocatorSchema //--------------------------------------------------------------------- pointer_type Allocate(size_type byteSize, size_type alignment, int flags = 0, const char* name = 0, const char* fileName = 0, int lineNum = 0, unsigned int suppressStackRecord = 0) override { @@ -848,11 +851,6 @@ namespace AZ { return AZ::AllocatorInstance::Get().GetUnAllocatedMemory(isPrint); } - - IAllocatorAllocate* GetSubAllocator() override - { - return AZ::AllocatorInstance::Get().GetSubAllocator(); - } }; /** @@ -873,7 +871,7 @@ namespace AZ { if (AllocatorInstance::IsReady()) { - m_name = AllocatorInstance::GetAllocator().GetName(); + m_name = AllocatorInstance::Get().GetName(); } else { @@ -932,7 +930,7 @@ namespace AZ typedef AZStd::ptrdiff_t difference_type; typedef AZStd::false_type allow_memory_leaks; ///< Regular allocators should not leak. - AZ_FORCE_INLINE AZStdIAllocator(IAllocatorAllocate* allocator, const char* name = "AZ::AZStdIAllocator") + AZ_FORCE_INLINE AZStdIAllocator(IAllocator* allocator, const char* name = "AZ::AZStdIAllocator") : m_allocator(allocator) , m_name(name) { @@ -965,7 +963,7 @@ namespace AZ AZ_FORCE_INLINE bool operator==(const AZStdIAllocator& rhs) const { return m_allocator == rhs.m_allocator; } AZ_FORCE_INLINE bool operator!=(const AZStdIAllocator& rhs) const { return m_allocator != rhs.m_allocator; } private: - IAllocatorAllocate* m_allocator; + IAllocator* m_allocator; const char* m_name; }; @@ -982,8 +980,8 @@ namespace AZ using size_type = AZStd::size_t; using difference_type = AZStd::ptrdiff_t; using allow_memory_leaks = AZStd::false_type; ///< Regular allocators should not leak. - using functor_type = IAllocatorAllocate&(*)(); ///< Function Pointer must return IAllocatorAllocate&. - ///< function pointers do not support covariant return types + using functor_type = IAllocator&(*)(); ///< Function Pointer must return IAllocator&. + ///< function pointers do not support covariant return types constexpr AZStdFunctorAllocator(functor_type allocatorFunctor, const char* name = "AZ::AZStdFunctorAllocator") : m_allocatorFunctor(allocatorFunctor) diff --git a/Code/Framework/AzCore/AzCore/Memory/OSAllocator.cpp b/Code/Framework/AzCore/AzCore/Memory/OSAllocator.cpp index 317df214d6..293cd92354 100644 --- a/Code/Framework/AzCore/AzCore/Memory/OSAllocator.cpp +++ b/Code/Framework/AzCore/AzCore/Memory/OSAllocator.cpp @@ -19,7 +19,6 @@ namespace AZ , m_custom(nullptr) , m_numAllocatedBytes(0) { - DisableOverriding(); } //========================================================================= diff --git a/Code/Framework/AzCore/AzCore/Memory/OSAllocator.h b/Code/Framework/AzCore/AzCore/Memory/OSAllocator.h index 3a8080483b..0bdf7d9fed 100644 --- a/Code/Framework/AzCore/AzCore/Memory/OSAllocator.h +++ b/Code/Framework/AzCore/AzCore/Memory/OSAllocator.h @@ -24,7 +24,6 @@ namespace AZ */ class OSAllocator : public AllocatorBase - , public IAllocatorAllocate { public: AZ_TYPE_INFO(OSAllocator, "{9F835EE3-F23C-454E-B4E3-011E2F3C8118}") @@ -39,7 +38,7 @@ namespace AZ { Descriptor() : m_custom(0) {} - IAllocatorAllocate* m_custom; ///< You can provide our own allocation scheme. If NULL a HeapScheme will be used with the provided Descriptor. + IAllocatorSchema* m_custom; ///< You can provide our own allocation scheme. If NULL a HeapScheme will be used with the provided Descriptor. }; bool Create(const Descriptor& desc); @@ -51,7 +50,7 @@ namespace AZ AllocatorDebugConfig GetDebugConfig() override; ////////////////////////////////////////////////////////////////////////// - // IAllocatorAllocate + // IAllocatorSchema pointer_type Allocate(size_type byteSize, size_type alignment, int flags = 0, const char* name = 0, const char* fileName = 0, int lineNum = 0, unsigned int suppressStackRecord = 0) override; void DeAllocate(pointer_type ptr, size_type byteSize = 0, size_type alignment = 0) override; size_type Resize(pointer_type ptr, size_type newSize) override { return m_custom ? m_custom->Resize(ptr, newSize) : 0; } @@ -62,13 +61,12 @@ namespace AZ size_type Capacity() const override { return m_custom ? m_custom->Capacity() : AZ_CORE_MAX_ALLOCATOR_SIZE; } // custom size or unlimited size_type GetMaxAllocationSize() const override { return m_custom ? m_custom->GetMaxAllocationSize() : AZ_CORE_MAX_ALLOCATOR_SIZE; } // custom size or unlimited size_type GetMaxContiguousAllocationSize() const override { return m_custom ? m_custom->GetMaxContiguousAllocationSize() : AZ_CORE_MAX_ALLOCATOR_SIZE; } // custom size or unlimited - IAllocatorAllocate* GetSubAllocator() override { return m_custom ? m_custom : NULL; } protected: OSAllocator(const OSAllocator&); OSAllocator& operator=(const OSAllocator&); - IAllocatorAllocate* m_custom; + IAllocatorSchema* m_custom; size_type m_numAllocatedBytes; }; diff --git a/Code/Framework/AzCore/AzCore/Memory/OverrunDetectionAllocator.cpp b/Code/Framework/AzCore/AzCore/Memory/OverrunDetectionAllocator.cpp index ed5e0febc2..096fbbac95 100644 --- a/Code/Framework/AzCore/AzCore/Memory/OverrunDetectionAllocator.cpp +++ b/Code/Framework/AzCore/AzCore/Memory/OverrunDetectionAllocator.cpp @@ -233,7 +233,6 @@ namespace AZ size_type Capacity() const; size_type GetMaxAllocationSize() const; size_type GetMaxContiguousAllocationSize() const; - IAllocatorAllocate* GetSubAllocator(); void GarbageCollect(); private: @@ -680,11 +679,6 @@ auto AZ::OverrunDetectionSchemaImpl::GetMaxContiguousAllocationSize() const -> s return 0; } -AZ::IAllocatorAllocate* AZ::OverrunDetectionSchemaImpl::GetSubAllocator() -{ - return nullptr; -} - void AZ::OverrunDetectionSchemaImpl::GarbageCollect() { } @@ -810,11 +804,6 @@ auto AZ::OverrunDetectionSchema::GetMaxContiguousAllocationSize() const -> size_ return m_impl->GetMaxContiguousAllocationSize(); } -AZ::IAllocatorAllocate* AZ::OverrunDetectionSchema::GetSubAllocator() -{ - return m_impl->GetSubAllocator(); -} - void AZ::OverrunDetectionSchema::GarbageCollect() { m_impl->GarbageCollect(); diff --git a/Code/Framework/AzCore/AzCore/Memory/OverrunDetectionAllocator.h b/Code/Framework/AzCore/AzCore/Memory/OverrunDetectionAllocator.h index 9895a5f84f..073b54160b 100644 --- a/Code/Framework/AzCore/AzCore/Memory/OverrunDetectionAllocator.h +++ b/Code/Framework/AzCore/AzCore/Memory/OverrunDetectionAllocator.h @@ -27,7 +27,7 @@ namespace AZ * the requested memory, plus the trap page). On most platforms this is 8kb (4kb * 2 pages). */ class OverrunDetectionSchema - : public IAllocatorAllocate + : public IAllocatorSchema { public: AZ_TYPE_INFO("OverrunDetectionSchema", "{0DF781AC-1615-40AE-81F7-6CA5841E2914}"); @@ -75,7 +75,7 @@ namespace AZ virtual ~OverrunDetectionSchema(); //--------------------------------------------------------------------- - // IAllocatorAllocate + // IAllocatorSchema //--------------------------------------------------------------------- pointer_type Allocate(size_type byteSize, size_type alignment, int flags, const char* name = 0, const char* fileName = 0, int lineNum = 0, unsigned int suppressStackRecord = 0) override; void DeAllocate(pointer_type ptr, size_type byteSize = 0, size_type alignment = 0) override; @@ -87,7 +87,6 @@ namespace AZ size_type Capacity() const override; size_type GetMaxAllocationSize() const override; size_type GetMaxContiguousAllocationSize() const override; - IAllocatorAllocate* GetSubAllocator() override; void GarbageCollect() override; private: diff --git a/Code/Framework/AzCore/AzCore/Memory/PoolAllocator.h b/Code/Framework/AzCore/AzCore/Memory/PoolAllocator.h index a03f7b5b92..f55c6251bf 100644 --- a/Code/Framework/AzCore/AzCore/Memory/PoolAllocator.h +++ b/Code/Framework/AzCore/AzCore/Memory/PoolAllocator.h @@ -102,7 +102,7 @@ namespace AZ } ////////////////////////////////////////////////////////////////////////// - // IAllocatorAllocate + // IAllocatorSchema pointer_type ReAllocate(pointer_type ptr, size_type newSize, size_type newAlignment) override { (void)ptr; diff --git a/Code/Framework/AzCore/AzCore/Memory/PoolSchema.cpp b/Code/Framework/AzCore/AzCore/Memory/PoolSchema.cpp index 9167864450..60f4f34f1d 100644 --- a/Code/Framework/AzCore/AzCore/Memory/PoolSchema.cpp +++ b/Code/Framework/AzCore/AzCore/Memory/PoolSchema.cpp @@ -163,7 +163,7 @@ namespace AZ } using AllocatorType = PoolAllocation; - IAllocatorAllocate* m_pageAllocator; + IAllocatorSchema* m_pageAllocator; AllocatorType m_allocator; void* m_staticDataBlock; unsigned int m_numStaticPages; @@ -295,7 +295,7 @@ namespace AZ FreePagesType m_freePages; AZStd::vector m_threads; ///< Array with all separate thread data. Used to traverse end free elements. - IAllocatorAllocate* m_pageAllocator; + IAllocatorSchema* m_pageAllocator; void* m_staticDataBlock; size_t m_numStaticPages; size_t m_pageSize; @@ -732,17 +732,6 @@ PoolSchema::Capacity() const return m_impl->m_numStaticPages * m_impl->m_pageSize; } -//========================================================================= -// GetPageAllocator -// [11/17/2010] -//========================================================================= -IAllocatorAllocate* -PoolSchema::GetSubAllocator() -{ - return m_impl->m_pageAllocator; -} - - ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// // PollAllocator Implementation @@ -1090,16 +1079,6 @@ ThreadPoolSchema::Capacity() const return m_impl->m_numStaticPages * m_impl->m_pageSize; } -//========================================================================= -// GetPageAllocator -// [11/17/2010] -//========================================================================= -IAllocatorAllocate* -ThreadPoolSchema::GetSubAllocator() -{ - return m_impl->m_pageAllocator; -} - //========================================================================= // ThreadPoolSchemaImpl diff --git a/Code/Framework/AzCore/AzCore/Memory/PoolSchema.h b/Code/Framework/AzCore/AzCore/Memory/PoolSchema.h index cfc5e3ea07..d9faf976b3 100644 --- a/Code/Framework/AzCore/AzCore/Memory/PoolSchema.h +++ b/Code/Framework/AzCore/AzCore/Memory/PoolSchema.h @@ -22,7 +22,7 @@ namespace AZ * use ThreadPool Schema or do the sync yourself. */ class PoolSchema - : public IAllocatorAllocate + : public IAllocatorSchema { public: /** @@ -52,7 +52,7 @@ namespace AZ * this is the minimum number of pages we will have allocated at all times, otherwise the total number of pages supported. */ unsigned int m_numStaticPages; - IAllocatorAllocate* m_pageAllocator; ///< If you provide this interface we will use it for page allocations, otherwise SystemAllocator will be used. + IAllocatorSchema* m_pageAllocator; ///< If you provide this interface we will use it for page allocations, otherwise SystemAllocator will be used. }; PoolSchema(const Descriptor& desc = Descriptor()); @@ -73,7 +73,6 @@ namespace AZ size_type GetMaxContiguousAllocationSize() const override; size_type NumAllocatedBytes() const override; size_type Capacity() const override; - IAllocatorAllocate* GetSubAllocator() override; protected: PoolSchema(const PoolSchema&); @@ -90,7 +89,7 @@ namespace AZ * for each thread. So there will be some memory overhead, especially if you use fixed pool sizes. */ class ThreadPoolSchema - : public IAllocatorAllocate + : public IAllocatorSchema { public: // Functions for getting an instance of a ThreadPoolData when using thread local storage @@ -119,7 +118,6 @@ namespace AZ size_type GetMaxContiguousAllocationSize() const override; size_type NumAllocatedBytes() const override; size_type Capacity() const override; - IAllocatorAllocate* GetSubAllocator() override; protected: ThreadPoolSchema(const ThreadPoolSchema&); diff --git a/Code/Framework/AzCore/AzCore/Memory/SimpleSchemaAllocator.h b/Code/Framework/AzCore/AzCore/Memory/SimpleSchemaAllocator.h index 5fbc890203..76be66786e 100644 --- a/Code/Framework/AzCore/AzCore/Memory/SimpleSchemaAllocator.h +++ b/Code/Framework/AzCore/AzCore/Memory/SimpleSchemaAllocator.h @@ -22,17 +22,15 @@ namespace AZ template class SimpleSchemaAllocator : public AllocatorBase - , public IAllocatorAllocate { public: using Descriptor = DescriptorType; - using pointer_type = typename IAllocatorAllocate::pointer_type; - using size_type = typename IAllocatorAllocate::size_type; - using difference_type = typename IAllocatorAllocate::difference_type; + using pointer_type = typename Schema::pointer_type; + using size_type = typename Schema::size_type; + using difference_type = typename Schema::difference_type; SimpleSchemaAllocator(const char* name, const char* desc) - : AllocatorBase(this, name, desc) - , m_schema(nullptr) + : AllocatorBase(nullptr, name, desc) { } @@ -65,13 +63,8 @@ namespace AZ return AllocatorDebugConfig(); } - IAllocatorAllocate* GetSchema() override - { - return m_schema; - } - //--------------------------------------------------------------------- - // IAllocatorAllocate + // IAllocatorSchema //--------------------------------------------------------------------- pointer_type Allocate(size_type byteSize, size_type alignment, int flags = 0, const char* name = nullptr, const char* fileName = nullptr, int lineNum = 0, unsigned int suppressStackRecord = 0) override { @@ -188,14 +181,6 @@ namespace AZ { return m_schema->GetUnAllocatedMemory(isPrint); } - - IAllocatorAllocate* GetSubAllocator() override - { - return m_schema->GetSubAllocator(); - } - - protected: - IAllocatorAllocate* m_schema; private: typename AZStd::aligned_storage::value>::type m_schemaStorage; diff --git a/Code/Framework/AzCore/AzCore/Memory/SystemAllocator.cpp b/Code/Framework/AzCore/AzCore/Memory/SystemAllocator.cpp index e56f4f045d..c403df0ed6 100644 --- a/Code/Framework/AzCore/AzCore/Memory/SystemAllocator.cpp +++ b/Code/Framework/AzCore/AzCore/Memory/SystemAllocator.cpp @@ -51,9 +51,8 @@ static bool g_isSystemSchemaUsed = false; // [9/2/2009] //========================================================================= SystemAllocator::SystemAllocator() - : AllocatorBase(this, "SystemAllocator", "Fundamental generic memory allocator") + : AllocatorBase(nullptr, "SystemAllocator", "Fundamental generic memory allocator") , m_isCustom(false) - , m_allocator(nullptr) , m_ownsOSAllocator(false) { } @@ -93,7 +92,7 @@ SystemAllocator::Create(const Descriptor& desc) if (desc.m_custom) { m_isCustom = true; - m_allocator = desc.m_custom; + m_schema = desc.m_custom; isReady = true; } else @@ -121,9 +120,9 @@ SystemAllocator::Create(const Descriptor& desc) AZ_Assert(!g_isSystemSchemaUsed, "AZ::SystemAllocator MUST be created first! It's the source of all allocations!"); #if AZCORE_SYSTEM_ALLOCATOR == AZCORE_SYSTEM_ALLOCATOR_HPHA - m_allocator = new(&g_systemSchema)HphaSchema(heapDesc); + m_schema = new (&g_systemSchema) HphaSchema(heapDesc); #elif AZCORE_SYSTEM_ALLOCATOR == AZCORE_SYSTEM_ALLOCATOR_MALLOC - m_allocator = new(&g_systemSchema)MallocSchema(heapDesc); + m_schema = new (&g_systemSchema) MallocSchema(heapDesc); #endif g_isSystemSchemaUsed = true; isReady = true; @@ -134,11 +133,11 @@ SystemAllocator::Create(const Descriptor& desc) AZ_Assert(AllocatorInstance::IsReady(), "System allocator must be created before any other allocator! They allocate from it."); #if AZCORE_SYSTEM_ALLOCATOR == AZCORE_SYSTEM_ALLOCATOR_HPHA - m_allocator = azcreate(HphaSchema, (heapDesc), SystemAllocator); + m_schema = azcreate(HphaSchema, (heapDesc), SystemAllocator); #elif AZCORE_SYSTEM_ALLOCATOR == AZCORE_SYSTEM_ALLOCATOR_MALLOC - m_allocator = azcreate(MallocSchema, (heapDesc), SystemAllocator); + m_schema = azcreate(MallocSchema, (heapDesc), SystemAllocator); #endif - if (m_allocator == nullptr) + if (m_schema == nullptr) { isReady = false; } @@ -167,18 +166,18 @@ SystemAllocator::Destroy() if (!m_isCustom) { - if ((void*)m_allocator == (void*)&g_systemSchema) + if ((void*)m_schema == (void*)&g_systemSchema) { #if AZCORE_SYSTEM_ALLOCATOR == AZCORE_SYSTEM_ALLOCATOR_HPHA - static_cast(m_allocator)->~HphaSchema(); + static_cast(m_schema)->~HphaSchema(); #elif AZCORE_SYSTEM_ALLOCATOR == AZCORE_SYSTEM_ALLOCATOR_MALLOC - static_cast(m_allocator)->~MallocSchema(); + static_cast(m_schema)->~MallocSchema(); #endif g_isSystemSchemaUsed = false; } else { - azdestroy(m_allocator); + azdestroy(m_schema); } } @@ -198,11 +197,6 @@ AllocatorDebugConfig SystemAllocator::GetDebugConfig() .ExcludeFromDebugging(!m_desc.m_allocationRecords); } -IAllocatorAllocate* SystemAllocator::GetSchema() -{ - return m_allocator; -} - //========================================================================= // Allocate // [9/2/2009] @@ -218,14 +212,14 @@ SystemAllocator::Allocate(size_type byteSize, size_type alignment, int flags, co AZ_Assert((alignment & (alignment - 1)) == 0, "Alignment must be power of 2!"); byteSize = MemorySizeAdjustedUp(byteSize); - SystemAllocator::pointer_type address = m_allocator->Allocate(byteSize, alignment, flags, name, fileName, lineNum, suppressStackRecord + 1); + SystemAllocator::pointer_type address = m_schema->Allocate(byteSize, alignment, flags, name, fileName, lineNum, suppressStackRecord + 1); if (address == nullptr) { // Free all memory we can and try again! AllocatorManager::Instance().GarbageCollect(); - address = m_allocator->Allocate(byteSize, alignment, flags, name, fileName, lineNum, suppressStackRecord + 1); + address = m_schema->Allocate(byteSize, alignment, flags, name, fileName, lineNum, suppressStackRecord + 1); } if (address == nullptr) @@ -251,7 +245,7 @@ SystemAllocator::DeAllocate(pointer_type ptr, size_type byteSize, size_type alig byteSize = MemorySizeAdjustedUp(byteSize); AZ_PROFILE_MEMORY_FREE(MemoryReserved, ptr); AZ_MEMORY_PROFILE(ProfileDeallocation(ptr, byteSize, alignment, nullptr)); - m_allocator->DeAllocate(ptr, byteSize, alignment); + m_schema->DeAllocate(ptr, byteSize, alignment); } //========================================================================= @@ -265,7 +259,7 @@ SystemAllocator::ReAllocate(pointer_type ptr, size_type newSize, size_type newAl AZ_MEMORY_PROFILE(ProfileReallocationBegin(ptr, newSize)); AZ_PROFILE_MEMORY_FREE(MemoryReserved, ptr); - pointer_type newAddress = m_allocator->ReAllocate(ptr, newSize, newAlignment); + pointer_type newAddress = m_schema->ReAllocate(ptr, newSize, newAlignment); AZ_PROFILE_MEMORY_ALLOC(MemoryReserved, newAddress, newSize, "SystemAllocator realloc"); AZ_MEMORY_PROFILE(ProfileReallocationEnd(ptr, newAddress, newSize, newAlignment)); @@ -280,7 +274,7 @@ SystemAllocator::size_type SystemAllocator::Resize(pointer_type ptr, size_type newSize) { newSize = MemorySizeAdjustedUp(newSize); - size_type resizedSize = m_allocator->Resize(ptr, newSize); + size_type resizedSize = m_schema->Resize(ptr, newSize); AZ_MEMORY_PROFILE(ProfileResize(ptr, resizedSize)); @@ -294,7 +288,7 @@ SystemAllocator::Resize(pointer_type ptr, size_type newSize) SystemAllocator::size_type SystemAllocator::AllocationSize(pointer_type ptr) { - size_type allocSize = MemorySizeAdjustedDown(m_allocator->AllocationSize(ptr)); + size_type allocSize = MemorySizeAdjustedDown(m_schema->AllocationSize(ptr)); return allocSize; } diff --git a/Code/Framework/AzCore/AzCore/Memory/SystemAllocator.h b/Code/Framework/AzCore/AzCore/Memory/SystemAllocator.h index c02ada5843..0ea4251b8a 100644 --- a/Code/Framework/AzCore/AzCore/Memory/SystemAllocator.h +++ b/Code/Framework/AzCore/AzCore/Memory/SystemAllocator.h @@ -26,7 +26,6 @@ namespace AZ */ class SystemAllocator : public AllocatorBase - , public IAllocatorAllocate { public: AZ_TYPE_INFO(SystemAllocator, "{424C94D8-85CF-4E89-8CD6-AB5EC173E875}") @@ -39,7 +38,7 @@ namespace AZ * we will allocate system memory using system calls. You can * provide arenas (spaces) with pre-allocated memory, and use the * flag to specify which arena you want to allocate from. - * You are also allowed to supply IAllocatorAllocate, but if you do + * You are also allowed to supply IAllocatorSchema, but if you do * so you will need to take care of all allocations, we will not use * the default HeapSchema. * \ref HeapSchema::Descriptor @@ -51,7 +50,7 @@ namespace AZ , m_allocationRecords(true) , m_stackRecordLevels(5) {} - IAllocatorAllocate* m_custom; ///< You can provide our own allocation scheme. If NULL a HeapScheme will be used with the provided Descriptor. + IAllocatorSchema* m_custom; ///< You can provide our own allocation scheme. If NULL a HeapScheme will be used with the provided Descriptor. struct Heap { @@ -73,7 +72,7 @@ namespace AZ int m_numFixedMemoryBlocks; ///< Number of memory blocks to use. void* m_fixedMemoryBlocks[m_maxNumFixedBlocks]; ///< Pointers to provided memory blocks or NULL if you want the system to allocate them for you with the System Allocator. size_t m_fixedMemoryBlocksByteSize[m_maxNumFixedBlocks]; ///< Sizes of different memory blocks (MUST be multiple of m_pageSize), if m_memoryBlock is 0 the block will be allocated for you with the System Allocator. - IAllocatorAllocate* m_subAllocator; ///< Allocator that m_memoryBlocks memory was allocated from or should be allocated (if NULL). + IAllocatorSchema* m_subAllocator; ///< Allocator that m_memoryBlocks memory was allocated from or should be allocated (if NULL). size_t m_systemChunkSize; ///< Size of chunk to request from the OS when more memory is needed (defaults to m_pageSize) } m_heap; bool m_allocationRecords; ///< True if we want to track memory allocations, otherwise false. @@ -87,25 +86,23 @@ namespace AZ ////////////////////////////////////////////////////////////////////////// // IAllocator AllocatorDebugConfig GetDebugConfig() override; - IAllocatorAllocate* GetSchema() override; ////////////////////////////////////////////////////////////////////////// - // IAllocatorAllocate + // IAllocatorSchema pointer_type Allocate(size_type byteSize, size_type alignment, int flags = 0, const char* name = 0, const char* fileName = 0, int lineNum = 0, unsigned int suppressStackRecord = 0) override; void DeAllocate(pointer_type ptr, size_type byteSize = 0, size_type alignment = 0) override; pointer_type ReAllocate(pointer_type ptr, size_type newSize, size_type newAlignment) override; size_type Resize(pointer_type ptr, size_type newSize) override; size_type AllocationSize(pointer_type ptr) override; - void GarbageCollect() override { m_allocator->GarbageCollect(); } + void GarbageCollect() override { GetSchema()->GarbageCollect(); } - size_type NumAllocatedBytes() const override { return m_allocator->NumAllocatedBytes(); } - size_type Capacity() const override { return m_allocator->Capacity(); } + size_type NumAllocatedBytes() const override { return GetSchema()->NumAllocatedBytes(); } + size_type Capacity() const override { return GetSchema()->Capacity(); } /// Keep in mind this operation will execute GarbageCollect to make sure it returns, max allocation. This function WILL be slow. - size_type GetMaxAllocationSize() const override { return m_allocator->GetMaxAllocationSize(); } - size_type GetMaxContiguousAllocationSize() const override { return m_allocator->GetMaxContiguousAllocationSize(); } - size_type GetUnAllocatedMemory(bool isPrint = false) const override { return m_allocator->GetUnAllocatedMemory(isPrint); } - IAllocatorAllocate* GetSubAllocator() override { return m_isCustom ? m_allocator : m_allocator->GetSubAllocator(); } + size_type GetMaxAllocationSize() const override { return GetSchema()->GetMaxAllocationSize(); } + size_type GetMaxContiguousAllocationSize() const override { return GetSchema()->GetMaxContiguousAllocationSize(); } + size_type GetUnAllocatedMemory(bool isPrint = false) const override { return GetSchema()->GetUnAllocatedMemory(isPrint); } ////////////////////////////////////////////////////////////////////////// @@ -115,7 +112,6 @@ namespace AZ Descriptor m_desc; bool m_isCustom; - IAllocatorAllocate* m_allocator; bool m_ownsOSAllocator; }; } diff --git a/Code/Framework/AzCore/AzCore/Script/ScriptContext.cpp b/Code/Framework/AzCore/AzCore/Script/ScriptContext.cpp index 841387f14d..b6f42e79ec 100644 --- a/Code/Framework/AzCore/AzCore/Script/ScriptContext.cpp +++ b/Code/Framework/AzCore/AzCore/Script/ScriptContext.cpp @@ -1456,7 +1456,7 @@ using namespace AZ; static void* LuaMemoryHook(void* userData, void* ptr, size_t osize, size_t nsize) { (void)osize; - IAllocatorAllocate* allocator = reinterpret_cast(userData); + IAllocator* allocator = reinterpret_cast(userData); if (nsize == 0) { if (ptr) @@ -4274,7 +4274,7 @@ LUA_API const Node* lua_getDummyNode() AZ_CLASS_ALLOCATOR(ScriptContextImpl, AZ::SystemAllocator, 0); ////////////////////////////////////////////////////////////////////////// - ScriptContextImpl(ScriptContext* owner, IAllocatorAllocate* allocator, lua_State* nativeContext) + ScriptContextImpl(ScriptContext* owner, IAllocator* allocator, lua_State* nativeContext) : m_owner(owner) , m_context(nullptr) , m_debug(nullptr) @@ -5827,7 +5827,7 @@ LUA_API const Node* lua_getDummyNode() }; } // namespace AZ - ScriptContext::ScriptContext(ScriptContextId id, IAllocatorAllocate* allocator, lua_State* nativeContext) + ScriptContext::ScriptContext(ScriptContextId id, IAllocator* allocator, lua_State* nativeContext) { m_id = id; m_impl = aznew ScriptContextImpl(this, allocator, nativeContext); diff --git a/Code/Framework/AzCore/AzCore/Script/ScriptContext.h b/Code/Framework/AzCore/AzCore/Script/ScriptContext.h index bb63a9368d..8784bf7ca7 100644 --- a/Code/Framework/AzCore/AzCore/Script/ScriptContext.h +++ b/Code/Framework/AzCore/AzCore/Script/ScriptContext.h @@ -822,7 +822,7 @@ namespace AZ CustomFromLua m_fromLua; }; - ScriptContext(ScriptContextId id = ScriptContextIds::DefaultScriptContextId, IAllocatorAllocate* allocator = nullptr, lua_State* nativeContext = nullptr); + ScriptContext(ScriptContextId id = ScriptContextIds::DefaultScriptContextId, IAllocator* allocator = nullptr, lua_State* nativeContext = nullptr); ~ScriptContext(); /// Bind LUA context (VM) a specific behaviorContext diff --git a/Code/Framework/AzCore/AzCore/Serialization/AZStdContainers.inl b/Code/Framework/AzCore/AzCore/Serialization/AZStdContainers.inl index a633af22da..c1ecd3634a 100644 --- a/Code/Framework/AzCore/AzCore/Serialization/AZStdContainers.inl +++ b/Code/Framework/AzCore/AzCore/Serialization/AZStdContainers.inl @@ -74,7 +74,7 @@ namespace AZ * But as the AZStdAssociativeContainer instance will not be accessed outside of the module it was * created within then this will return this .dll/.exe module allocator */ - classElement.m_attributes.set_allocator(AZStdFunctorAllocator([]() -> IAllocatorAllocate& { return GetCurrentSerializeContextModule().GetAllocator(); })); + classElement.m_attributes.set_allocator(AZStdFunctorAllocator([]() -> IAllocator& { return GetCurrentSerializeContextModule().GetAllocator(); })); // Flag the field with the EnumType attribute if we're an enumeration type aliased by RemoveEnum const bool isSpecializedEnum = AZStd::is_enum::value && !AzTypeInfo::Uuid().IsNull(); @@ -650,7 +650,7 @@ namespace AZ * But as the AZStdAssociativeContainer instance will not be accessed outside of the module it was * created within then this will return this .dll/.exe module allocator */ - m_classElement.m_attributes.set_allocator(AZStdFunctorAllocator([]() -> IAllocatorAllocate& { return GetCurrentSerializeContextModule().GetAllocator(); })); + m_classElement.m_attributes.set_allocator(AZStdFunctorAllocator([]() -> IAllocator& { return GetCurrentSerializeContextModule().GetAllocator(); })); m_classElement.m_attributes.emplace_back(AZ_CRC("KeyType", 0x15bc5303), CreateModuleAttribute(AZStd::move(uuid))); } diff --git a/Code/Framework/AzCore/AzCore/Serialization/SerializeContext.cpp b/Code/Framework/AzCore/AzCore/Serialization/SerializeContext.cpp index ff0ad571f7..227ba3dc75 100644 --- a/Code/Framework/AzCore/AzCore/Serialization/SerializeContext.cpp +++ b/Code/Framework/AzCore/AzCore/Serialization/SerializeContext.cpp @@ -3245,7 +3245,7 @@ namespace AZ return genericClassInfoFoundIt != m_moduleLocalGenericClassInfos.end() ? genericClassInfoFoundIt->second : nullptr; } - AZ::IAllocatorAllocate& SerializeContext::PerModuleGenericClassInfo::GetAllocator() + AZ::IAllocator& SerializeContext::PerModuleGenericClassInfo::GetAllocator() { return m_moduleOSAllocator; } diff --git a/Code/Framework/AzCore/AzCore/Serialization/SerializeContext.h b/Code/Framework/AzCore/AzCore/Serialization/SerializeContext.h index bf96bcdb9a..f8daa8c328 100644 --- a/Code/Framework/AzCore/AzCore/Serialization/SerializeContext.h +++ b/Code/Framework/AzCore/AzCore/Serialization/SerializeContext.h @@ -574,10 +574,10 @@ namespace AZ GenericClassInfo* m_genericClassInfo = nullptr; ///< Valid when the generic class is set. So you don't search for the actual type in the class register. Edit::ElementData* m_editData{}; ///< Pointer to edit data (generated by EditContext). AZStd::vector m_attributes{ - AZStdFunctorAllocator([]() -> IAllocatorAllocate& { return AZ::AllocatorInstance::Get(); }) + AZStdFunctorAllocator([]() -> IAllocator& { return AZ::AllocatorInstance::Get(); }) }; ///< Attributes attached to ClassElement. Lambda is required here as AZStdFunctorAllocator expects a function pointer - ///< that returns an IAllocatorAllocate& and the AZ::AllocatorInstance::Get returns an AZ::SystemAllocator& - /// which while it inherits from IAllocatorAllocate, does not work as function pointers do not support covariant return types + ///< that returns an IAllocator& and the AZ::AllocatorInstance::Get returns an AZ::SystemAllocator& + /// which while it inherits from IAllocator, does not work as function pointers do not support covariant return types AttributeOwnership m_attributeOwnership = AttributeOwnership::Parent; int m_flags{}; ///< }; @@ -639,12 +639,12 @@ namespace AZ DataPatchUpgradeHandler m_dataPatchUpgrader; ///< Attributes for this class type. Lambda is required here as AZStdFunctorAllocator expects a function pointer - ///< that returns an IAllocatorAllocate& and the AZ::AllocatorInstance::Get returns an AZ::SystemAllocator& - /// which while it inherits from IAllocatorAllocate, does not work as function pointers do not support covariant return types + ///< that returns an IAllocator& and the AZ::AllocatorInstance::Get returns an AZ::SystemAllocator& + /// which while it inherits from IAllocator, does not work as function pointers do not support covariant return types AZStd::vector m_attributes{AZStdFunctorAllocator(&GetSystemAllocator) }; private: - static IAllocatorAllocate& GetSystemAllocator() + static IAllocator& GetSystemAllocator() { return AZ::AllocatorInstance::Get(); } @@ -2483,7 +2483,7 @@ namespace AZ PerModuleGenericClassInfo(); ~PerModuleGenericClassInfo(); - AZ::IAllocatorAllocate& GetAllocator(); + AZ::IAllocator& GetAllocator(); void AddGenericClassInfo(AZ::GenericClassInfo* genericClassInfo); void RemoveGenericClassInfo(const AZ::TypeId& canonicalTypeId); @@ -2546,12 +2546,12 @@ namespace AZ template AttributePtr CreateModuleAttribute(T&& attrValue) { - IAllocatorAllocate& moduleAllocator = GetCurrentSerializeContextModule().GetAllocator(); + IAllocator& moduleAllocator = GetCurrentSerializeContextModule().GetAllocator(); void* rawMemory = moduleAllocator.Allocate(sizeof(ContainerType), alignof(ContainerType)); new (rawMemory) ContainerType{ AZStd::forward(attrValue) }; auto attributeDeleter = [](Attribute* attribute) { - IAllocatorAllocate& moduleAllocator = GetCurrentSerializeContextModule().GetAllocator(); + IAllocator& moduleAllocator = GetCurrentSerializeContextModule().GetAllocator(); attribute->~Attribute(); moduleAllocator.DeAllocate(attribute); }; diff --git a/Code/Framework/AzCore/AzCore/Serialization/std/VariantReflection.inl b/Code/Framework/AzCore/AzCore/Serialization/std/VariantReflection.inl index 06d4f76c80..2712baa859 100644 --- a/Code/Framework/AzCore/AzCore/Serialization/std/VariantReflection.inl +++ b/Code/Framework/AzCore/AzCore/Serialization/std/VariantReflection.inl @@ -32,7 +32,7 @@ namespace AZ * But as the AZStdAssociativeContainer instance will not be accessed outside of the module it was * created within then this will return this .dll/.exe module allocator */ - classElement.m_attributes.set_allocator(AZStdFunctorAllocator([]() -> IAllocatorAllocate& { return GetCurrentSerializeContextModule().GetAllocator(); })); + classElement.m_attributes.set_allocator(AZStdFunctorAllocator([]() -> IAllocator& { return GetCurrentSerializeContextModule().GetAllocator(); })); } template @@ -429,7 +429,7 @@ namespace AZ // the serialize context dll module allocator has to be used to manage the lifetime of the ClassData attributes within a module // If a module which reflects a variant is unloaded, then the dll module allocator will properly unreflect the variant type from the serialize context // for this particular module - AZStdFunctorAllocator dllAllocator([]() -> IAllocatorAllocate& { return GetCurrentSerializeContextModule().GetAllocator(); }); + AZStdFunctorAllocator dllAllocator([]() -> IAllocator& { return GetCurrentSerializeContextModule().GetAllocator(); }); m_classData.m_attributes.set_allocator(AZStd::move(dllAllocator)); // Create the ObjectStreamWriteOverrideCB in the current module diff --git a/Code/Framework/AzCore/AzCore/azcore_files.cmake b/Code/Framework/AzCore/AzCore/azcore_files.cmake index e8001f7215..b8ea9d3f39 100644 --- a/Code/Framework/AzCore/AzCore/azcore_files.cmake +++ b/Code/Framework/AzCore/AzCore/azcore_files.cmake @@ -362,8 +362,6 @@ set(FILES Memory/AllocatorBase.h Memory/AllocatorManager.cpp Memory/AllocatorManager.h - Memory/AllocatorOverrideShim.cpp - Memory/AllocatorOverrideShim.h Memory/AllocatorWrapper.h Memory/AllocatorScope.h Memory/BestFitExternalMapAllocator.cpp diff --git a/Code/Framework/AzCore/Tests/AZStd/Hashed.cpp b/Code/Framework/AzCore/Tests/AZStd/Hashed.cpp index c982868c4f..dd2597334d 100644 --- a/Code/Framework/AzCore/Tests/AZStd/Hashed.cpp +++ b/Code/Framework/AzCore/Tests/AZStd/Hashed.cpp @@ -1400,7 +1400,7 @@ namespace UnitTest { using ContainerType = ContainerTemplate, AZStd::equal_to, AZ::AZStdIAllocator>; - static ContainerType Create(std::initializer_list intList, AZ::IAllocatorAllocate* allocatorInstance) + static ContainerType Create(std::initializer_list intList, AZ::IAllocator* allocatorInstance) { ContainerType allocatorSet(intList, AZStd::hash{}, AZStd::equal_to{}, AZ::AZStdIAllocator{ allocatorInstance }); return allocatorSet; @@ -1798,7 +1798,7 @@ namespace UnitTest { using ContainerType = ContainerTemplate, AZStd::equal_to, AZ::AZStdIAllocator>; - static ContainerType Create(std::initializer_list intList, AZ::IAllocatorAllocate* allocatorInstance) + static ContainerType Create(std::initializer_list intList, AZ::IAllocator* allocatorInstance) { ContainerType allocatorMap(intList, AZStd::hash{}, AZStd::equal_to{}, AZ::AZStdIAllocator{ allocatorInstance }); return allocatorMap; diff --git a/Code/Framework/AzCore/Tests/AZStd/Ordered.cpp b/Code/Framework/AzCore/Tests/AZStd/Ordered.cpp index 26838eeb63..3f3bc86ed6 100644 --- a/Code/Framework/AzCore/Tests/AZStd/Ordered.cpp +++ b/Code/Framework/AzCore/Tests/AZStd/Ordered.cpp @@ -1082,7 +1082,7 @@ namespace UnitTest { using ContainerType = ContainerTemplate, AZ::AZStdIAllocator>; - static ContainerType Create(std::initializer_list intList, AZ::IAllocatorAllocate* allocatorInstance) + static ContainerType Create(std::initializer_list intList, AZ::IAllocator* allocatorInstance) { ContainerType allocatorSet(intList, AZStd::less{}, AZ::AZStdIAllocator{ allocatorInstance }); return allocatorSet; @@ -1503,7 +1503,7 @@ namespace UnitTest { using ContainerType = ContainerTemplate, AZ::AZStdIAllocator>; - static ContainerType Create(std::initializer_list intList, AZ::IAllocatorAllocate* allocatorInstance) + static ContainerType Create(std::initializer_list intList, AZ::IAllocator* allocatorInstance) { ContainerType allocatorMap(intList, AZStd::less{}, AZ::AZStdIAllocator{ allocatorInstance }); return allocatorMap; diff --git a/Code/Framework/AzCore/Tests/Memory.cpp b/Code/Framework/AzCore/Tests/Memory.cpp index 5287167c8b..0e0103d162 100644 --- a/Code/Framework/AzCore/Tests/Memory.cpp +++ b/Code/Framework/AzCore/Tests/Memory.cpp @@ -87,7 +87,7 @@ namespace UnitTest #endif void* addresses[numAllocations] = {nullptr}; - IAllocatorAllocate& sysAlloc = AllocatorInstance::Get(); + IAllocator& sysAllocator = AllocatorInstance::Get(); ////////////////////////////////////////////////////////////////////////// // Allocate @@ -96,19 +96,19 @@ namespace UnitTest { AZStd::size_t size = AZStd::GetMax(rand() % 256, 1); // supply all debug info, so we don't need to record the stack. - addresses[i] = sysAlloc.Allocate(size, 8, 0, "Test Alloc", __FILE__, __LINE__); + addresses[i] = sysAllocator.Allocate(size, 8, 0, "Test Alloc", __FILE__, __LINE__); memset(addresses[i], 1, size); totalAllocSize += size; } ////////////////////////////////////////////////////////////////////////// - EXPECT_GE(sysAlloc.NumAllocatedBytes(), totalAllocSize); + EXPECT_GE(sysAllocator.NumAllocatedBytes(), totalAllocSize); ////////////////////////////////////////////////////////////////////////// // Deallocate for (int i = numAllocations-1; i >=0; --i) { - sysAlloc.DeAllocate(addresses[i]); + sysAllocator.DeAllocate(addresses[i]); } ////////////////////////////////////////////////////////////////////////// } @@ -122,21 +122,21 @@ namespace UnitTest { AllocatorInstance::Create(); - IAllocatorAllocate& sysAlloc = AllocatorInstance::Get(); + IAllocator& sysAllocator = AllocatorInstance::Get(); for (int i = 0; i < 100; ++i) { - address[i] = sysAlloc.Allocate(1000, 32, 0); + address[i] = sysAllocator.Allocate(1000, 32, 0); EXPECT_NE(nullptr, address[i]); EXPECT_EQ(0, ((size_t)address[i] & 31)); // check alignment - EXPECT_GE(sysAlloc.AllocationSize(address[i]), 1000); // check allocation size + EXPECT_GE(sysAllocator.AllocationSize(address[i]), 1000); // check allocation size } - EXPECT_GE(sysAlloc.NumAllocatedBytes(), 100000); // we requested 100 * 1000 so we should have at least this much allocated + EXPECT_GE(sysAllocator.NumAllocatedBytes(), 100000); // we requested 100 * 1000 so we should have at least this much allocated for (int i = 0; i < 100; ++i) { - sysAlloc.DeAllocate(address[i]); + sysAllocator.DeAllocate(address[i]); } //////////////////////////////////////////////////////////////////////// @@ -168,18 +168,17 @@ namespace UnitTest SystemAllocator::Descriptor descriptor; descriptor.m_stackRecordLevels = 20; AllocatorInstance::Create(descriptor); - IAllocator& sysAllocator = AllocatorInstance::GetAllocator(); - IAllocatorAllocate& sysAlloc = *sysAllocator.GetAllocationSource(); + IAllocator& sysAllocator = AllocatorInstance::Get(); for (int i = 0; i < 100; ++i) { - address[i] = sysAlloc.Allocate(1000, 32, 0); + address[i] = sysAllocator.Allocate(1000, 32, 0); EXPECT_NE(nullptr, address[i]); EXPECT_EQ(0, ((size_t)address[i] & 31)); // check alignment - EXPECT_GE(sysAlloc.AllocationSize(address[i]), 1000); // check allocation size + EXPECT_GE(sysAllocator.AllocationSize(address[i]), 1000); // check allocation size } - EXPECT_TRUE(sysAlloc.NumAllocatedBytes() >= 100000); // we requested 100 * 1000 so we should have at least this much allocated + EXPECT_TRUE(sysAllocator.NumAllocatedBytes() >= 100000); // we requested 100 * 1000 so we should have at least this much allocated // If tracking and recording is enabled, we can verify that the alloc info is valid #if defined(AZ_DEBUG_BUILD) @@ -192,7 +191,7 @@ namespace UnitTest const Debug::AllocationInfo& ai = iter->second; EXPECT_EQ(32, ai.m_alignment); EXPECT_EQ(1000, ai.m_byteSize); - EXPECT_EQ(nullptr, ai.m_fileName); // We did not pass fileName or lineNum to sysAlloc.Allocate() + EXPECT_EQ(nullptr, ai.m_fileName); // We did not pass fileName or lineNum to sysAllocator.Allocate() EXPECT_EQ(0, ai.m_lineNum); // -- " -- # if defined(AZ_PLATFORM_WINDOWS) // if our hardware support stack traces make sure we have them, since we did not provide fileName,lineNum @@ -229,47 +228,47 @@ namespace UnitTest // Free all memory for (int i = 0; i < 100; ++i) { - sysAlloc.DeAllocate(address[i]); + sysAllocator.DeAllocate(address[i]); } - sysAlloc.GarbageCollect(); - EXPECT_LT(sysAlloc.NumAllocatedBytes(), 1024); // We freed everything from a memspace, we should have only a very minor chunk of data + sysAllocator.GarbageCollect(); + EXPECT_LT(sysAllocator.NumAllocatedBytes(), 1024); // We freed everything from a memspace, we should have only a very minor chunk of data ////////////////////////////////////////////////////////////////////////// // realloc test address[0] = nullptr; static const unsigned int checkValue = 0x0badbabe; // create tree (non pool) allocation (we usually pool < 256 bytes) - address[0] = sysAlloc.Allocate(2048, 16); + address[0] = sysAllocator.Allocate(2048, 16); *(unsigned*)(address[0]) = checkValue; // set check value - AZ_TEST_ASSERT_CLOSE(sysAlloc.AllocationSize(address[0]), 2048, 16); - address[0] = sysAlloc.ReAllocate(address[0], 1024, 16); // test tree big -> tree small + AZ_TEST_ASSERT_CLOSE(sysAllocator.AllocationSize(address[0]), 2048, 16); + address[0] = sysAllocator.ReAllocate(address[0], 1024, 16); // test tree big -> tree small EXPECT_EQ(checkValue, *(unsigned*)address[0]); - AZ_TEST_ASSERT_CLOSE(sysAlloc.AllocationSize(address[0]), 1024, 16); - address[0] = sysAlloc.ReAllocate(address[0], 4096, 16); // test tree small -> tree big - AZ_TEST_ASSERT_CLOSE(sysAlloc.AllocationSize(address[0]), 4096, 16); + AZ_TEST_ASSERT_CLOSE(sysAllocator.AllocationSize(address[0]), 1024, 16); + address[0] = sysAllocator.ReAllocate(address[0], 4096, 16); // test tree small -> tree big + AZ_TEST_ASSERT_CLOSE(sysAllocator.AllocationSize(address[0]), 4096, 16); EXPECT_EQ(checkValue, *(unsigned*)address[0]); - address[0] = sysAlloc.ReAllocate(address[0], 128, 16); // test tree -> pool, - AZ_TEST_ASSERT_CLOSE(sysAlloc.AllocationSize(address[0]), 128, 16); + address[0] = sysAllocator.ReAllocate(address[0], 128, 16); // test tree -> pool, + AZ_TEST_ASSERT_CLOSE(sysAllocator.AllocationSize(address[0]), 128, 16); EXPECT_EQ(checkValue, *(unsigned*)address[0]); - address[0] = sysAlloc.ReAllocate(address[0], 64, 16); // pool big -> pool small - AZ_TEST_ASSERT_CLOSE(sysAlloc.AllocationSize(address[0]), 64, 16); + address[0] = sysAllocator.ReAllocate(address[0], 64, 16); // pool big -> pool small + AZ_TEST_ASSERT_CLOSE(sysAllocator.AllocationSize(address[0]), 64, 16); EXPECT_EQ(checkValue, *(unsigned*)address[0]); - address[0] = sysAlloc.ReAllocate(address[0], 64, 16); // pool sanity check - AZ_TEST_ASSERT_CLOSE(sysAlloc.AllocationSize(address[0]), 64, 16); + address[0] = sysAllocator.ReAllocate(address[0], 64, 16); // pool sanity check + AZ_TEST_ASSERT_CLOSE(sysAllocator.AllocationSize(address[0]), 64, 16); EXPECT_EQ(checkValue, *(unsigned*)address[0]); - address[0] = sysAlloc.ReAllocate(address[0], 192, 16); // pool small -> pool big - AZ_TEST_ASSERT_CLOSE(sysAlloc.AllocationSize(address[0]), 192, 16); + address[0] = sysAllocator.ReAllocate(address[0], 192, 16); // pool small -> pool big + AZ_TEST_ASSERT_CLOSE(sysAllocator.AllocationSize(address[0]), 192, 16); EXPECT_EQ(checkValue, *(unsigned*)address[0]); - address[0] = sysAlloc.ReAllocate(address[0], 2048, 16); // pool -> tree - AZ_TEST_ASSERT_CLOSE(sysAlloc.AllocationSize(address[0]), 2048, 16); + address[0] = sysAllocator.ReAllocate(address[0], 2048, 16); // pool -> tree + AZ_TEST_ASSERT_CLOSE(sysAllocator.AllocationSize(address[0]), 2048, 16); ; EXPECT_EQ(checkValue, *(unsigned*)address[0]); - address[0] = sysAlloc.ReAllocate(address[0], 2048, 16); // tree sanity check - AZ_TEST_ASSERT_CLOSE(sysAlloc.AllocationSize(address[0]), 2048, 16); + address[0] = sysAllocator.ReAllocate(address[0], 2048, 16); // tree sanity check + AZ_TEST_ASSERT_CLOSE(sysAllocator.AllocationSize(address[0]), 2048, 16); ; EXPECT_EQ(checkValue, *(unsigned*)address[0]); - sysAlloc.DeAllocate(address[0], 2048, 16); + sysAllocator.DeAllocate(address[0], 2048, 16); // TODO realloc with different alignment tests ////////////////////////////////////////////////////////////////////////// @@ -340,8 +339,7 @@ namespace UnitTest void run() { - IAllocatorAllocate& poolAlloc = AllocatorInstance::Get(); - IAllocator& poolAllocator = AllocatorInstance::GetAllocator(); + IAllocator& poolAllocator = AllocatorInstance::Get(); // 64 should be the max number of different pool sizes we can allocate. void* address[64]; ////////////////////////////////////////////////////////////////////////// @@ -352,12 +350,12 @@ namespace UnitTest int i = 0; for (int size = 8; size <= 256; ++i, size += 8) { - address[i] = poolAlloc.Allocate(size, 8); - EXPECT_GE(poolAlloc.AllocationSize(address[i]), (AZStd::size_t)size); + address[i] = poolAllocator.Allocate(size, 8); + EXPECT_GE(poolAllocator.AllocationSize(address[i]), (AZStd::size_t)size); memset(address[i], 1, size); } - EXPECT_GE(poolAlloc.NumAllocatedBytes(), 4126); + EXPECT_GE(poolAllocator.NumAllocatedBytes(), 4126); if (poolAllocator.GetRecords()) { @@ -369,11 +367,11 @@ namespace UnitTest for (i = 0; address[i] != nullptr; ++i) { - poolAlloc.DeAllocate(address[i]); + poolAllocator.DeAllocate(address[i]); } ////////////////////////////////////////////////////////////////////////// - EXPECT_EQ(0, poolAlloc.NumAllocatedBytes()); + EXPECT_EQ(0, poolAllocator.NumAllocatedBytes()); if (poolAllocator.GetRecords()) { @@ -393,13 +391,13 @@ namespace UnitTest memset(address, 0, AZ_ARRAY_SIZE(address)*sizeof(void*)); for (unsigned int j = 0; j < AZ_ARRAY_SIZE(address); ++j) { - address[j] = poolAlloc.Allocate(256, 8, 0, "Pool Alloc", "This File", 123); - EXPECT_GE(poolAlloc.AllocationSize(address[j]), 256); + address[j] = poolAllocator.Allocate(256, 8, 0, "Pool Alloc", "This File", 123); + EXPECT_GE(poolAllocator.AllocationSize(address[j]), 256); memset(address[j], 1, 256); } // AllocatorManager::Instance().ResetMemoryBreak(0); - EXPECT_GE(poolAlloc.NumAllocatedBytes(), AZ_ARRAY_SIZE(address)*256); + EXPECT_GE(poolAllocator.NumAllocatedBytes(), AZ_ARRAY_SIZE(address)*256); if (poolAllocator.GetRecords()) { @@ -411,11 +409,11 @@ namespace UnitTest for (unsigned int j = 0; j < AZ_ARRAY_SIZE(address); ++j) { - poolAlloc.DeAllocate(address[j]); + poolAllocator.DeAllocate(address[j]); } ////////////////////////////////////////////////////////////////////////// - EXPECT_EQ(0, poolAlloc.NumAllocatedBytes()); + EXPECT_EQ(0, poolAllocator.NumAllocatedBytes()); if (poolAllocator.GetRecords()) { @@ -541,14 +539,14 @@ namespace UnitTest #endif void* addresses[numAllocations] = {nullptr}; - IAllocatorAllocate& poolAlloc = AllocatorInstance::Get(); + IAllocator& poolAllocator = AllocatorInstance::Get(); ////////////////////////////////////////////////////////////////////////// // Allocate for (int i = 0; i < numAllocations; ++i) { AZStd::size_t size = AZStd::GetMax(1, ((i + 1) * 2) % 256); - addresses[i] = poolAlloc.Allocate(size, 8, 0, "Test Alloc", __FILE__, __LINE__); + addresses[i] = poolAllocator.Allocate(size, 8, 0, "Test Alloc", __FILE__, __LINE__); EXPECT_NE(addresses[i], nullptr); memset(addresses[i], 1, size); } @@ -558,7 +556,7 @@ namespace UnitTest // Deallocate for (int i = numAllocations-1; i >=0; --i) { - poolAlloc.DeAllocate(addresses[i]); + poolAllocator.DeAllocate(addresses[i]); } ////////////////////////////////////////////////////////////////////////// } @@ -568,12 +566,12 @@ namespace UnitTest */ void SharedAlloc() { - IAllocatorAllocate& poolAlloc = AllocatorInstance::Get(); + IAllocator& poolAllocator = AllocatorInstance::Get(); for (int i = 0; i < m_numSharedAlloc; ++i) { AZStd::size_t minSize = sizeof(AllocClass); AZStd::size_t size = AZStd::GetMax((AZStd::size_t)(rand() % 256), minSize); - AllocClass* ac = reinterpret_cast(poolAlloc.Allocate(size, AZStd::alignment_of::value, 0, "Shared Alloc", __FILE__, __LINE__)); + AllocClass* ac = reinterpret_cast(poolAllocator.Allocate(size, AZStd::alignment_of::value, 0, "Shared Alloc", __FILE__, __LINE__)); AZStd::lock_guard lock(m_mutex); m_sharedAlloc.push_back(*ac); } @@ -584,7 +582,7 @@ namespace UnitTest */ void SharedDeAlloc() { - IAllocatorAllocate& poolAlloc = AllocatorInstance::Get(); + IAllocator& poolAllocator = AllocatorInstance::Get(); AllocClass* ac; int isDone = 0; while (isDone!=2) @@ -594,7 +592,7 @@ namespace UnitTest { ac = &m_sharedAlloc.front(); m_sharedAlloc.pop_front(); - poolAlloc.DeAllocate(ac); + poolAllocator.DeAllocate(ac); } if (m_doneSharedAlloc) // once we know we don't add more elements, make one last check and exit. @@ -633,8 +631,7 @@ namespace UnitTest void run() { - IAllocatorAllocate& poolAlloc = AllocatorInstance::Get(); - IAllocator& poolAllocator = AllocatorInstance::GetAllocator(); + IAllocator& poolAllocator = AllocatorInstance::Get(); // 64 should be the max number of different pool sizes we can allocate. void* address[64]; ////////////////////////////////////////////////////////////////////////// @@ -645,12 +642,12 @@ namespace UnitTest int j = 0; for (int size = 8; size <= 256; ++j, size += 8) { - address[j] = poolAlloc.Allocate(size, 8); - EXPECT_GE(poolAlloc.AllocationSize(address[j]), (AZStd::size_t)size); + address[j] = poolAllocator.Allocate(size, 8); + EXPECT_GE(poolAllocator.AllocationSize(address[j]), (AZStd::size_t)size); memset(address[j], 1, size); } - EXPECT_GE(poolAlloc.NumAllocatedBytes(), 4126); + EXPECT_GE(poolAllocator.NumAllocatedBytes(), 4126); if (poolAllocator.GetRecords()) { @@ -662,11 +659,11 @@ namespace UnitTest for (int i = 0; address[i] != nullptr; ++i) { - poolAlloc.DeAllocate(address[i]); + poolAllocator.DeAllocate(address[i]); } ////////////////////////////////////////////////////////////////////////// - EXPECT_EQ(0, poolAlloc.NumAllocatedBytes()); + EXPECT_EQ(0, poolAllocator.NumAllocatedBytes()); if (poolAllocator.GetRecords()) { @@ -681,12 +678,12 @@ namespace UnitTest memset(address, 0, AZ_ARRAY_SIZE(address)*sizeof(void*)); for (unsigned int i = 0; i < AZ_ARRAY_SIZE(address); ++i) { - address[i] = poolAlloc.Allocate(256, 8); - EXPECT_GE(poolAlloc.AllocationSize(address[i]), 256); + address[i] = poolAllocator.Allocate(256, 8); + EXPECT_GE(poolAllocator.AllocationSize(address[i]), 256); memset(address[i], 1, 256); } - EXPECT_GE(poolAlloc.NumAllocatedBytes(), AZ_ARRAY_SIZE(address)*256); + EXPECT_GE(poolAllocator.NumAllocatedBytes(), AZ_ARRAY_SIZE(address)*256); if (poolAllocator.GetRecords()) { @@ -698,11 +695,11 @@ namespace UnitTest for (unsigned int i = 0; i < AZ_ARRAY_SIZE(address); ++i) { - poolAlloc.DeAllocate(address[i]); + poolAllocator.DeAllocate(address[i]); } ////////////////////////////////////////////////////////////////////////// - EXPECT_EQ(0, poolAlloc.NumAllocatedBytes()); + EXPECT_EQ(0, poolAllocator.NumAllocatedBytes()); if (poolAllocator.GetRecords()) { @@ -820,7 +817,7 @@ namespace UnitTest desc.m_memoryBlock = azmalloc(desc.m_memoryBlockByteSize, desc.m_memoryBlockAlignment); AllocatorInstance::Create(desc); - IAllocatorAllocate& bfAlloc = AllocatorInstance::Get(); + IAllocator& bfAlloc = AllocatorInstance::Get(); EXPECT_EQ( desc.m_memoryBlockByteSize, bfAlloc.Capacity() ); EXPECT_EQ( 0, bfAlloc.NumAllocatedBytes() ); @@ -882,8 +879,8 @@ namespace UnitTest void run() { - IAllocator& sysAllocator = AllocatorInstance::GetAllocator(); - IAllocator& poolAllocator = AllocatorInstance::GetAllocator(); + IAllocator& sysAllocator = AllocatorInstance::Get(); + IAllocator& poolAllocator = AllocatorInstance::Get(); void* ptr = azmalloc(16*1024, 32, SystemAllocator); EXPECT_EQ(0, ((size_t)ptr & 31)); // check alignment @@ -1010,27 +1007,27 @@ namespace UnitTest void run() { - IAllocator& sysAlloc = AllocatorInstance::GetAllocator(); - IAllocator& poolAlloc = AllocatorInstance::GetAllocator(); + IAllocator& sysAllocator = AllocatorInstance::Get(); + IAllocator& poolAllocator = AllocatorInstance::Get(); MyClass* ptr = aznew MyClass(202); /// this should allocate memory from the pool allocator EXPECT_EQ(0, ((size_t)ptr & 31)); // check alignment EXPECT_EQ(202, ptr->m_data); // check value - if (poolAlloc.GetRecords()) + if (poolAllocator.GetRecords()) { - AZStd::lock_guard lock(*poolAlloc.GetRecords()); - const Debug::AllocationRecordsType& records = poolAlloc.GetRecords()->GetMap(); + AZStd::lock_guard lock(*poolAllocator.GetRecords()); + const Debug::AllocationRecordsType& records = poolAllocator.GetRecords()->GetMap(); Debug::AllocationRecordsType::const_iterator iter = records.find(ptr); EXPECT_TRUE(iter!=records.end()); // our allocation is in the list EXPECT_STREQ(iter->second.m_name, "MyClass"); } delete ptr; - if (poolAlloc.GetRecords()) + if (poolAllocator.GetRecords()) { - AZStd::lock_guard lock(*poolAlloc.GetRecords()); - const Debug::AllocationRecordsType& records = poolAlloc.GetRecords()->GetMap(); + AZStd::lock_guard lock(*poolAllocator.GetRecords()); + const Debug::AllocationRecordsType& records = poolAllocator.GetRecords()->GetMap(); EXPECT_TRUE(records.find(ptr)==records.end()); // our allocation is NOT in the list } @@ -1038,19 +1035,19 @@ namespace UnitTest ptr = azcreate(MyClass, (101), SystemAllocator); EXPECT_EQ(0, ((size_t)ptr & 31)); // check alignment EXPECT_EQ(101, ptr->m_data); // check value - if (sysAlloc.GetRecords()) + if (sysAllocator.GetRecords()) { - AZStd::lock_guard lock(*sysAlloc.GetRecords()); - const Debug::AllocationRecordsType& records = sysAlloc.GetRecords()->GetMap(); + AZStd::lock_guard lock(*sysAllocator.GetRecords()); + const Debug::AllocationRecordsType& records = sysAllocator.GetRecords()->GetMap(); Debug::AllocationRecordsType::const_iterator iter = records.find(ptr); EXPECT_TRUE(iter!=records.end()); // our allocation is in the list EXPECT_STREQ(iter->second.m_name, "MyClass"); } azdestroy(ptr, SystemAllocator); - if (sysAlloc.GetRecords()) + if (sysAllocator.GetRecords()) { - AZStd::lock_guard lock(*sysAlloc.GetRecords()); - const Debug::AllocationRecordsType& records = sysAlloc.GetRecords()->GetMap(); + AZStd::lock_guard lock(*sysAllocator.GetRecords()); + const Debug::AllocationRecordsType& records = sysAllocator.GetRecords()->GetMap(); EXPECT_TRUE(records.find(ptr)==records.end()); // our allocation is NOT in the list } @@ -1059,19 +1056,19 @@ namespace UnitTest ptr = azcreate(MyClass, (505), SystemAllocator, "MyClassNamed"); EXPECT_EQ(0, ((size_t)ptr & 31)); // check alignment EXPECT_EQ(505, ptr->m_data); // check value - if (sysAlloc.GetRecords()) + if (sysAllocator.GetRecords()) { - AZStd::lock_guard lock(*sysAlloc.GetRecords()); - const Debug::AllocationRecordsType& records = sysAlloc.GetRecords()->GetMap(); + AZStd::lock_guard lock(*sysAllocator.GetRecords()); + const Debug::AllocationRecordsType& records = sysAllocator.GetRecords()->GetMap(); Debug::AllocationRecordsType::const_iterator iter = records.find(ptr); EXPECT_TRUE(iter!=records.end()); // our allocation is in the list EXPECT_STREQ(iter->second.m_name, "MyClassNamed"); } azdestroy(ptr); // imply SystemAllocator - if (sysAlloc.GetRecords()) + if (sysAllocator.GetRecords()) { - AZStd::lock_guard lock(*sysAlloc.GetRecords()); - const Debug::AllocationRecordsType& records = sysAlloc.GetRecords()->GetMap(); + AZStd::lock_guard lock(*sysAllocator.GetRecords()); + const Debug::AllocationRecordsType& records = sysAllocator.GetRecords()->GetMap(); EXPECT_TRUE(records.find(ptr)==records.end()); // our allocation is NOT in the list } @@ -1080,20 +1077,20 @@ namespace UnitTest EXPECT_EQ(0, ((size_t)ptr & 31)); // check alignment EXPECT_EQ(303, ptr->m_data); // check value - if (poolAlloc.GetRecords()) + if (poolAllocator.GetRecords()) { - AZStd::lock_guard lock(*poolAlloc.GetRecords()); - const Debug::AllocationRecordsType& records = poolAlloc.GetRecords()->GetMap(); + AZStd::lock_guard lock(*poolAllocator.GetRecords()); + const Debug::AllocationRecordsType& records = poolAllocator.GetRecords()->GetMap(); Debug::AllocationRecordsType::const_iterator iter = records.find(ptr); EXPECT_TRUE(iter != records.end()); // our allocation is in the list EXPECT_STREQ(iter->second.m_name, "MyClass"); } delete ptr; - if (poolAlloc.GetRecords()) + if (poolAllocator.GetRecords()) { - AZStd::lock_guard lock(*poolAlloc.GetRecords()); - const Debug::AllocationRecordsType& records = poolAlloc.GetRecords()->GetMap(); + AZStd::lock_guard lock(*poolAllocator.GetRecords()); + const Debug::AllocationRecordsType& records = poolAllocator.GetRecords()->GetMap(); EXPECT_TRUE(records.find(ptr) == records.end()); // our allocation is NOT in the list } } @@ -1140,8 +1137,8 @@ namespace UnitTest return (size_t)1 << (size_t)(MAX_ALIGNMENT_LOG2 * r); } - class DebugSysAlloc - : public AZ::IAllocatorAllocate + class DebugSysAllocSchema + : public AZ::IAllocatorSchema { pointer_type Allocate(size_type byteSize, size_type alignment, int flags, const char* name = 0, const char* fileName = 0, int lineNum = 0, unsigned int suppressStackRecord = 0) override { @@ -1176,8 +1173,6 @@ namespace UnitTest size_type GetMaxAllocationSize() const override { return 1 * 1024 * 1024 * 1024; } /// Returns max allocation size of a single contiguous allocation size_type GetMaxContiguousAllocationSize() const override { return 1 * 1024 * 1024 * 1024; } - /// Returns a pointer to a sub-allocator or NULL. - IAllocatorAllocate* GetSubAllocator() override { return NULL; } }; public: void SetUp() override @@ -2565,7 +2560,7 @@ namespace UnitTest printf("\n\t\t\t=======================\n"); printf("\t\t\tSchemas Benchmark Test!\n"); printf("\t\t\t=======================\n"); - DebugSysAlloc da; + DebugSysAllocSchema da; { HphaSchema::Descriptor hphaDesc; hphaDesc.m_fixedMemoryBlockByteSize = AZ_TRAIT_OS_HPHA_MEMORYBLOCKBYTESIZE; diff --git a/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp b/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp index 5cf5176308..7870749d24 100644 --- a/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp +++ b/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp @@ -112,7 +112,6 @@ namespace Benchmark { } - // IAllocatorAllocate static void* Allocate(size_t byteSize, size_t) { s_numAllocatedBytes += byteSize; @@ -580,6 +579,7 @@ namespace Benchmark //BM_REGISTER_ALLOCATOR(BestFitExternalMapAllocator, BestFitExternalMapAllocator); // Requires to pre-allocate blocks and cannot work as a general-purpose allocator //BM_REGISTER_ALLOCATOR(HeapSchemaAllocator, TestHeapSchemaAllocator); // Requires to pre-allocate blocks and cannot work as a general-purpose allocator //BM_REGISTER_SCHEMA(PoolSchema); // Requires special alignment requests while allocating + // BM_REGISTER_ALLOCATOR(OSAllocator, OSAllocator); // Requires special treatment to initialize since it will be already initialized, maybe creating a different instance? #undef BM_REGISTER_ALLOCATOR #undef BM_REGISTER_SIZE_FIXTURES diff --git a/Code/Framework/AzCore/Tests/Memory/AllocatorManager.cpp b/Code/Framework/AzCore/Tests/Memory/AllocatorManager.cpp index dc8ac033c1..bc758c1544 100644 --- a/Code/Framework/AzCore/Tests/Memory/AllocatorManager.cpp +++ b/Code/Framework/AzCore/Tests/Memory/AllocatorManager.cpp @@ -7,7 +7,6 @@ */ #include -#include #include #include @@ -47,9 +46,6 @@ namespace UnitTest void RunTests() { - TestAllocatorShimWithDeallocateAfter(); - TestAllocatorShimRemovedAfterFinalization(); - TestAllocatorShimUsedForRealloc(); TearDownAllocatorManagerTest(); } @@ -64,7 +60,7 @@ namespace UnitTest EXPECT_EQ(m_manager->GetNumAllocators(), 0); AllocatorInstance::Create(); EXPECT_EQ(m_manager->GetNumAllocators(), 2); // SystemAllocator creates the OSAllocator if it doesn't exist - m_systemAllocator = &AllocatorInstance::GetAllocator(); + m_systemAllocator = &AllocatorInstance::Get(); } void TearDownAllocatorManagerTest() @@ -83,85 +79,6 @@ namespace UnitTest m_systemAllocator = nullptr; } - void TestAllocatorShimWithDeallocateAfter() - { - SetUpAllocatorManagerTest(); - - // Should begin with a shim installed. If this fails, check that AZCORE_MEMORY_ENABLE_OVERRIDES is enabled in AllocatorManager.cpp. - EXPECT_NE(m_systemAllocator->GetAllocationSource(), m_systemAllocator->GetOriginalAllocationSource()); - - const int testAllocBytes = TEST_ALLOC_BYTES; - - // Allocate from the shim, which should take from the allocator's original source - void* p = m_systemAllocator->GetAllocationSource()->Allocate(testAllocBytes, 0, 0); - EXPECT_NE(p, nullptr); - EXPECT_EQ(m_systemAllocator->GetOriginalAllocationSource()->NumAllocatedBytes(), testAllocBytes); - - // Add the override schema - m_manager->SetOverrideAllocatorSource(&m_mallocSchema); - - // Allocations should go through malloc schema instead of the allocator's regular schema - void* q = m_systemAllocator->GetAllocationSource()->Allocate(testAllocBytes, 0, 0); - EXPECT_NE(q, nullptr); - EXPECT_EQ(m_mallocSchema.NumAllocatedBytes(), testAllocBytes); - EXPECT_EQ(m_systemAllocator->GetOriginalAllocationSource()->NumAllocatedBytes(), testAllocBytes); - - // Finalize configuration, no more shims should be created after this point - m_manager->FinalizeConfiguration(); - - // Deallocating the original orphaned allocation from the SystemAllocator should remove the shim - EXPECT_NE(m_systemAllocator->GetAllocationSource(), &m_mallocSchema); - m_systemAllocator->GetAllocationSource()->DeAllocate(p); - EXPECT_EQ(m_systemAllocator->GetAllocationSource(), &m_mallocSchema); - - // Clean up - m_systemAllocator->GetAllocationSource()->DeAllocate(q); - } - - void TestAllocatorShimRemovedAfterFinalization() - { - SetUpAllocatorManagerTest(); - - // Should begin with a shim installed - EXPECT_NE(m_systemAllocator->GetAllocationSource(), m_systemAllocator->GetOriginalAllocationSource()); - - // Finalizing the configuration should remove the shim if it was unused - m_manager->FinalizeConfiguration(); - EXPECT_EQ(m_systemAllocator->GetAllocationSource(), m_systemAllocator->GetOriginalAllocationSource()); - } - - void TestAllocatorShimUsedForRealloc() - { - SetUpAllocatorManagerTest(); - - // Should begin with a shim installed - EXPECT_NE(m_systemAllocator->GetAllocationSource(), m_systemAllocator->GetOriginalAllocationSource()); - - const int testAllocBytes = TEST_ALLOC_BYTES; - - // Allocate from the shim, which should take from the allocator's original source - void* p = m_systemAllocator->GetAllocationSource()->Allocate(testAllocBytes, 0, 0); - EXPECT_NE(p, nullptr); - EXPECT_EQ(m_systemAllocator->GetOriginalAllocationSource()->NumAllocatedBytes(), testAllocBytes); - - // Add the override schema and finalize - m_manager->SetOverrideAllocatorSource(&m_mallocSchema); - m_manager->FinalizeConfiguration(); - - // Shim should still be present - EXPECT_NE(m_systemAllocator->GetAllocationSource(), &m_mallocSchema); - - // Reallocation should move allocation from the old source to the new source - EXPECT_EQ(m_mallocSchema.NumAllocatedBytes(), 0); - void* q = m_systemAllocator->GetAllocationSource()->ReAllocate(p, testAllocBytes * 2, 0); - EXPECT_NE(p, q); - EXPECT_EQ(m_mallocSchema.NumAllocatedBytes(), testAllocBytes * 2); - EXPECT_EQ(m_systemAllocator->GetOriginalAllocationSource()->NumAllocatedBytes(), 0); - - // Reallocation should also have removed the shim as it was no longer necessary - EXPECT_EQ(m_systemAllocator->GetAllocationSource(), &m_mallocSchema); - } - MallocSchema m_mallocSchema; AllocatorManager* m_manager = nullptr; IAllocator* m_systemAllocator = nullptr; diff --git a/Code/Framework/AzFramework/AzFramework/Archive/Archive.cpp b/Code/Framework/AzFramework/AzFramework/Archive/Archive.cpp index 04802a8d0e..c2fba5c5a3 100644 --- a/Code/Framework/AzFramework/AzFramework/Archive/Archive.cpp +++ b/Code/Framework/AzFramework/AzFramework/Archive/Archive.cpp @@ -1975,7 +1975,7 @@ namespace AZ::IO AZ_Error("Archive", false, "OSAllocator is not ready. It cannot be used to allocate a MemoryBlock"); return {}; } - AZ::IAllocatorAllocate* allocator = &AZ::AllocatorInstance::Get(); + AZ::IAllocator* allocator = &AZ::AllocatorInstance::Get(); AZStd::intrusive_ptr memoryBlock{ new (allocator->Allocate(sizeof(AZ::IO::MemoryBlock), alignof(AZ::IO::MemoryBlock))) AZ::IO::MemoryBlock{AZ::IO::MemoryBlockDeleter{ &AZ::AllocatorInstance::Get() }} }; auto CreateFunc = [](size_t byteSize, size_t byteAlignment, const char* name) { diff --git a/Code/Framework/AzFramework/AzFramework/Archive/IArchive.h b/Code/Framework/AzFramework/AzFramework/Archive/IArchive.h index d7eaee6e24..0bbc5aaaab 100644 --- a/Code/Framework/AzFramework/AzFramework/Archive/IArchive.h +++ b/Code/Framework/AzFramework/AzFramework/Archive/IArchive.h @@ -36,7 +36,7 @@ namespace AZ::IO struct MemoryBlockDeleter { void operator()(const AZStd::intrusive_refcount* ptr) const; - AZ::IAllocatorAllocate* m_allocator{}; + AZ::IAllocator* m_allocator{}; }; struct MemoryBlock : AZStd::intrusive_refcount diff --git a/Code/Framework/AzFramework/AzFramework/Archive/ZipDirCache.cpp b/Code/Framework/AzFramework/AzFramework/Archive/ZipDirCache.cpp index 13d5b0f723..05c773f056 100644 --- a/Code/Framework/AzFramework/AzFramework/Archive/ZipDirCache.cpp +++ b/Code/Framework/AzFramework/AzFramework/Archive/ZipDirCache.cpp @@ -42,7 +42,7 @@ namespace AZ::IO::ZipDir AZ_Error("Archive", false, "OSAllocator is not ready. It cannot be used to allocate a MemoryBlock"); return {}; } - AZ::IAllocatorAllocate* allocator = &AZ::AllocatorInstance::Get(); + AZ::IAllocator* allocator = &AZ::AllocatorInstance::Get(); AZStd::intrusive_ptr memoryBlock{ new (allocator->Allocate(sizeof(AZ::IO::MemoryBlock), alignof(AZ::IO::MemoryBlock))) AZ::IO::MemoryBlock{AZ::IO::MemoryBlockDeleter{ &AZ::AllocatorInstance::Get() }} }; auto CreateFunc = [](size_t byteSize, size_t byteAlignment, const char* name) { @@ -142,14 +142,14 @@ namespace AZ::IO::ZipDir { } - Cache::Cache(AZ::IAllocatorAllocate* allocator) + Cache::Cache(AZ::IAllocator* allocator) : m_fileHandle(AZ::IO::InvalidHandle) , m_nFlags(0) , m_lCDROffset(0) , m_encryptedHeaders(ZipFile::HEADERS_NOT_ENCRYPTED) , m_allocator{ allocator } { - AZ_Assert(allocator, "IAllocatorAllocate object is required in order to allocated memory for the ZipDir Cache operations"); + AZ_Assert(allocator, "IAllocator object is required in order to allocated memory for the ZipDir Cache operations"); } void Cache::Close() diff --git a/Code/Framework/AzFramework/AzFramework/Archive/ZipDirCache.h b/Code/Framework/AzFramework/AzFramework/Archive/ZipDirCache.h index ae1e3dfa9c..c8b19ebf33 100644 --- a/Code/Framework/AzFramework/AzFramework/Archive/ZipDirCache.h +++ b/Code/Framework/AzFramework/AzFramework/Archive/ZipDirCache.h @@ -40,7 +40,7 @@ namespace AZ::IO::ZipDir inline static constexpr int compressedBlockHeaderSizeInBytes = 4; //number of bytes we need in front of the compressed block to indicate which compressor was used Cache(); - explicit Cache(AZ::IAllocatorAllocate* allocator); + explicit Cache(AZ::IAllocator* allocator); ~Cache() { @@ -133,7 +133,7 @@ namespace AZ::IO::ZipDir friend class FileEntryTransactionAdd; FileEntryTree m_treeDir; AZ::IO::HandleType m_fileHandle; - AZ::IAllocatorAllocate* m_allocator; + AZ::IAllocator* m_allocator; AZ::IO::Path m_strFilePath; // String Pool for persistently storing paths as long as they reside in the cache diff --git a/Code/Framework/AzFramework/AzFramework/Archive/ZipDirList.cpp b/Code/Framework/AzFramework/AzFramework/Archive/ZipDirList.cpp index ab9c356d7f..9ad58443a0 100644 --- a/Code/Framework/AzFramework/AzFramework/Archive/ZipDirList.cpp +++ b/Code/Framework/AzFramework/AzFramework/Archive/ZipDirList.cpp @@ -39,7 +39,7 @@ namespace AZ::IO::ZipDir { } - auto FileDataRecord::New(const FileRecord& rThat, AZ::IAllocatorAllocate* allocator) -> AZStd::intrusive_ptr + auto FileDataRecord::New(const FileRecord& rThat, AZ::IAllocator* allocator) -> AZStd::intrusive_ptr { auto fileDataRecordAlloc = reinterpret_cast(allocator->Allocate( sizeof(FileDataRecord) + rThat.pFileEntryBase->desc.lSizeCompressed, diff --git a/Code/Framework/AzFramework/AzFramework/Archive/ZipDirList.h b/Code/Framework/AzFramework/AzFramework/Archive/ZipDirList.h index 1183dbf384..2a4df44f2d 100644 --- a/Code/Framework/AzFramework/AzFramework/Archive/ZipDirList.h +++ b/Code/Framework/AzFramework/AzFramework/Archive/ZipDirList.h @@ -28,7 +28,7 @@ namespace AZ::IO::ZipDir { void operator()(const AZStd::intrusive_refcount* ptr) const; - AZ::IAllocatorAllocate* m_allocator{}; + AZ::IAllocator* m_allocator{}; }; struct FileDataRecord : public FileRecord @@ -36,7 +36,7 @@ namespace AZ::IO::ZipDir { FileDataRecord(); - static auto New(const FileRecord& rThat, AZ::IAllocatorAllocate* allocator) ->AZStd::intrusive_ptr; + static auto New(const FileRecord& rThat, AZ::IAllocator* allocator) ->AZStd::intrusive_ptr; void* GetData() {return this + 1; } }; diff --git a/Code/Framework/AzFramework/AzFramework/Archive/ZipDirStructures.cpp b/Code/Framework/AzFramework/AzFramework/Archive/ZipDirStructures.cpp index cea517decd..1ac0906c94 100644 --- a/Code/Framework/AzFramework/AzFramework/Archive/ZipDirStructures.cpp +++ b/Code/Framework/AzFramework/AzFramework/Archive/ZipDirStructures.cpp @@ -25,13 +25,13 @@ namespace AZ::IO::ZipDir::ZipDirStructuresInternal { static void* ZlibAlloc(void* userData, uint32_t item, uint32_t size) { - auto allocator = reinterpret_cast(userData); + auto allocator = reinterpret_cast(userData); return allocator->Allocate(item * size, alignof(uint8_t), 0, "ZLibAlloc"); } static void ZlibFree(void* userData, void* ptr) { - auto allocator = reinterpret_cast(userData); + auto allocator = reinterpret_cast(userData); allocator->DeAllocate(ptr); } @@ -296,7 +296,7 @@ namespace AZ::IO::ZipDir::ZipDirStructuresInternal return {}; } - AZ::IAllocatorAllocate* allocator = &AZ::AllocatorInstance::Get(); + AZ::IAllocator* allocator = &AZ::AllocatorInstance::Get(); AZStd::intrusive_ptr memoryBlock{ new (allocator->Allocate(sizeof(AZ::IO::MemoryBlock), alignof(AZ::IO::MemoryBlock))) AZ::IO::MemoryBlock{AZ::IO::MemoryBlockDeleter{ &AZ::AllocatorInstance::Get() }} }; auto CreateFunc = [](size_t byteSize, size_t byteAlignment, const char* name) { @@ -451,7 +451,7 @@ namespace AZ::IO::ZipDir if (GetDiskFreeSpaceA(drive.c_str(),nullptr, &bytesPerSector, nullptr, nullptr)) { m_nSectorSize = bytesPerSector; - AZ::IAllocatorAllocate& allocator = AZ::AllocatorInstance::Get(); + AZ::IAllocator& allocator = AZ::AllocatorInstance::Get(); if (m_pReadTarget) { allocator.DeAllocate(m_pReadTarget); diff --git a/Code/LauncherUnified/Launcher.h b/Code/LauncherUnified/Launcher.h index 7c4c09c19f..eb1cf6479e 100644 --- a/Code/LauncherUnified/Launcher.h +++ b/Code/LauncherUnified/Launcher.h @@ -62,7 +62,7 @@ namespace O3DELauncher ResourceLimitUpdater m_updateResourceLimits = nullptr; //!< callback for updating system resources, if necessary OnPostApplicationStart m_onPostAppStart = nullptr; //!< callback notifying the platform specific entry point that AzGameFramework::GameApplication::Start has been called - AZ::IAllocatorAllocate* m_allocator = nullptr; //!< Used to allocate the temporary bootstrap memory, as well as the main \ref SystemAllocator heap. If null, OSAllocator will be used + AZ::IAllocator* m_allocator = nullptr; //!< Used to allocate the temporary bootstrap memory, as well as the main \ref SystemAllocator heap. If null, OSAllocator will be used const char* m_appResourcesPath = "."; //!< Path to the device specific assets, default is equivalent to blank path in ParseEngineConfig const char* m_appWriteStoragePath = nullptr; //!< Path to writeable storage if different than assets path, used to override userPath and logPath diff --git a/Code/Legacy/CryCommon/CryLegacyAllocator.h b/Code/Legacy/CryCommon/CryLegacyAllocator.h index b0e1e29657..e96c2a9347 100644 --- a/Code/Legacy/CryCommon/CryLegacyAllocator.h +++ b/Code/Legacy/CryCommon/CryLegacyAllocator.h @@ -23,19 +23,9 @@ inline void* CryModuleMallocImpl(size_t size, const char* file, const int line) #define CryModuleFree(ptr) CryModuleFreeImpl(ptr, __FILE__, __LINE__) #define CryModuleMemalignFree(ptr) CryModuleFreeImpl(ptr, __FILE__, __LINE__) -inline void CryModuleFreeImpl(void* ptr, const char* file, const int line) +inline void CryModuleFreeImpl(void* ptr, const char*, const int) { - - AZ::IAllocator& allocator = AZ::AllocatorInstance::GetAllocator(); - - if (allocator.IsAllocationSourceChanged()) - { - allocator.GetAllocationSource()->DeAllocate(ptr); - } - else - { - static_cast(allocator).DeAllocate(ptr, file, line); - } + AZ::AllocatorInstance::Get().DeAllocate(ptr, 0, 0); } #define CryModuleMemalign(size, alignment) CryModuleMemalignImpl(size, alignment, __FILE__, __LINE__) @@ -79,17 +69,5 @@ inline void* CryModuleReallocAlignImpl(void* prev, size_t size, size_t alignment } #endif - AZ::IAllocator& allocator = AZ::AllocatorInstance::GetAllocator(); - void *ptr; - - if (allocator.IsAllocationSourceChanged()) - { - ptr = allocator.GetAllocationSource()->ReAllocate(prev, size, 0); - } - else - { - ptr = static_cast(allocator).ReAllocate(prev, size, 0, file, line); - } - - return ptr; + return AZ::AllocatorInstance::Get().ReAllocate(prev, size, 0); } diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI/DrawPacket.h b/Gems/Atom/RHI/Code/Include/Atom/RHI/DrawPacket.h index d66a3ea1bb..7995002a39 100644 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI/DrawPacket.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI/DrawPacket.h @@ -13,7 +13,7 @@ namespace AZ { - class IAllocatorAllocate; + class IAllocator; namespace RHI { @@ -66,7 +66,7 @@ namespace AZ DrawPacket() = default; // The allocator used to release the memory when Release() is called. - IAllocatorAllocate* m_allocator = nullptr; + IAllocator* m_allocator = nullptr; // The bit-mask of all active filter tags. DrawListMask m_drawListMask = 0; diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI/DrawPacketBuilder.h b/Gems/Atom/RHI/Code/Include/Atom/RHI/DrawPacketBuilder.h index 021125312b..30e013d486 100644 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI/DrawPacketBuilder.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI/DrawPacketBuilder.h @@ -14,7 +14,7 @@ namespace AZ { - class IAllocatorAllocate; + class IAllocator; namespace RHI { @@ -50,7 +50,7 @@ namespace AZ // NOTE: This is configurable; just used to control the amount of memory held by the builder. static const size_t DrawItemCountMax = 16; - void Begin(IAllocatorAllocate* allocator); + void Begin(IAllocator* allocator); void SetDrawArguments(const DrawArguments& drawArguments); @@ -77,7 +77,7 @@ namespace AZ private: void ClearData(); - IAllocatorAllocate* m_allocator = nullptr; + IAllocator* m_allocator = nullptr; DrawArguments m_drawArguments; DrawListMask m_drawListMask = 0; DrawFilterMask m_drawFilterMask = DrawFilterMaskDefaultValue; diff --git a/Gems/Atom/RHI/Code/Source/RHI/DrawPacketBuilder.cpp b/Gems/Atom/RHI/Code/Source/RHI/DrawPacketBuilder.cpp index ebda9732df..ec9dd1a14f 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/DrawPacketBuilder.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/DrawPacketBuilder.cpp @@ -18,7 +18,7 @@ namespace AZ { namespace RHI { - void DrawPacketBuilder::Begin(IAllocatorAllocate* allocator) + void DrawPacketBuilder::Begin(IAllocator* allocator) { m_allocator = allocator ? allocator : &AllocatorInstance::Get(); } From d108fe4804071e1f22612e897021d6653f6bea53 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 16 Dec 2021 18:31:19 -0800 Subject: [PATCH 017/284] Addresses PR comments Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../AzCore/AzCore/Memory/AllocatorBase.cpp | 345 +++++++++--------- .../AzCore/Memory/BestFitExternalMapSchema.h | 2 +- .../AzCore/AzCore/Memory/IAllocator.h | 4 +- Code/Framework/AzCore/AzCore/Memory/Memory.h | 2 +- .../Tests/Memory/AllocatorBenchmarks.cpp | 4 +- 5 files changed, 181 insertions(+), 176 deletions(-) diff --git a/Code/Framework/AzCore/AzCore/Memory/AllocatorBase.cpp b/Code/Framework/AzCore/AzCore/Memory/AllocatorBase.cpp index 4da9ab384f..e877739e29 100644 --- a/Code/Framework/AzCore/AzCore/Memory/AllocatorBase.cpp +++ b/Code/Framework/AzCore/AzCore/Memory/AllocatorBase.cpp @@ -9,11 +9,10 @@ #include #include -using namespace AZ; +// Only used to create recordings of memory operations to use for memory benchmarks +#define O3DE_RECORDING_ENABLED 0 -#define RECORDING_ENABLED 0 - -#if RECORDING_ENABLED +#if O3DE_RECORDING_ENABLED #include #include @@ -25,10 +24,10 @@ namespace class DebugAllocator { public: - typedef void* pointer_type; - typedef AZStd::size_t size_type; - typedef AZStd::ptrdiff_t difference_type; - typedef AZStd::false_type allow_memory_leaks; ///< Regular allocators should not leak. + using pointer_type = void*; + using size_type = AZStd::size_t; + using difference_type = AZStd::ptrdiff_t; + using allow_memory_leaks = AZStd::false_type; ///< Regular allocators should not leak. AZ_FORCE_INLINE pointer_type allocate(size_t byteSize, size_t alignment, int = 0) { @@ -64,7 +63,7 @@ namespace static constexpr size_t s_maxNumberOfAllocationsToRecord = 16384; static size_t s_numberOfAllocationsRecorded = 0; - static constexpr size_t s_allocationOperationCount = 5 * 1024; + static constexpr size_t s_allocationOperationCount = 8 * 1024; static AZStd::array s_operations = {}; static uint64_t s_operationCounter = 0; @@ -76,11 +75,12 @@ namespace void RecordAllocatorOperation(AllocatorOperation::OperationType type, void* ptr, size_t size = 0, size_t alignment = 0) { - AZStd::scoped_lock lock(s_operationsMutex); + AZStd::scoped_lock lock(s_operationsMutex); if (s_operationCounter == s_allocationOperationCount) { AZ::IO::SystemFile file; int mode = AZ::IO::SystemFile::OpenMode::SF_OPEN_APPEND | AZ::IO::SystemFile::OpenMode::SF_OPEN_WRITE_ONLY; + // memoryrecordings.bin is being output to the current working directory if (!file.Exists("memoryrecordings.bin")) { mode |= AZ::IO::SystemFile::OpenMode::SF_OPEN_CREATE; @@ -158,188 +158,195 @@ namespace } #endif -AllocatorBase::AllocatorBase(IAllocatorSchema* allocationSchema, const char* name, const char* desc) - : IAllocator(allocationSchema) - , m_name(name) - , m_desc(desc) +namespace AZ { -} - -AllocatorBase::~AllocatorBase() -{ - AZ_Assert(!m_isReady, "Allocator %s (%s) is being destructed without first having gone through proper calls to PreDestroy() and Destroy(). Use AllocatorInstance<> for global allocators or AllocatorWrapper<> for local allocators.", m_name, m_desc); -} - -const char* AllocatorBase::GetName() const -{ - return m_name; -} - -const char* AllocatorBase::GetDescription() const -{ - return m_desc; -} - -Debug::AllocationRecords* AllocatorBase::GetRecords() -{ - return m_records; -} - -void AllocatorBase::SetRecords(Debug::AllocationRecords* records) -{ - m_records = records; - m_memoryGuardSize = records ? records->MemoryGuardSize() : 0; -} - -bool AllocatorBase::IsReady() const -{ - return m_isReady; -} - -void AllocatorBase::PostCreate() -{ - if (m_registrationEnabled) + AllocatorBase::AllocatorBase(IAllocatorSchema* allocationSchema, const char* name, const char* desc) + : IAllocator(allocationSchema) + , m_name(name) + , m_desc(desc) { - if (AZ::Environment::IsReady()) + } + + AllocatorBase::~AllocatorBase() + { + AZ_Assert( + !m_isReady, + "Allocator %s (%s) is being destructed without first having gone through proper calls to PreDestroy() and Destroy(). Use " + "AllocatorInstance<> for global allocators or AllocatorWrapper<> for local allocators.", + m_name, m_desc); + } + + const char* AllocatorBase::GetName() const + { + return m_name; + } + + const char* AllocatorBase::GetDescription() const + { + return m_desc; + } + + Debug::AllocationRecords* AllocatorBase::GetRecords() + { + return m_records; + } + + void AllocatorBase::SetRecords(Debug::AllocationRecords* records) + { + m_records = records; + m_memoryGuardSize = records ? records->MemoryGuardSize() : 0; + } + + bool AllocatorBase::IsReady() const + { + return m_isReady; + } + + void AllocatorBase::PostCreate() + { + if (m_registrationEnabled) { - AllocatorManager::Instance().RegisterAllocator(this); + if (AZ::Environment::IsReady()) + { + AllocatorManager::Instance().RegisterAllocator(this); + } + else + { + AllocatorManager::PreRegisterAllocator(this); + } } - else + + const auto debugConfig = GetDebugConfig(); + if (!debugConfig.m_excludeFromDebugging) { - AllocatorManager::PreRegisterAllocator(this); + SetRecords(aznew Debug::AllocationRecords( + (unsigned char)debugConfig.m_stackRecordLevels, debugConfig.m_usesMemoryGuards, debugConfig.m_marksUnallocatedMemory, + GetName())); } + + m_isReady = true; } - const auto debugConfig = GetDebugConfig(); - if (!debugConfig.m_excludeFromDebugging) + void AllocatorBase::PreDestroy() { - SetRecords(aznew Debug::AllocationRecords((unsigned char)debugConfig.m_stackRecordLevels, debugConfig.m_usesMemoryGuards, debugConfig.m_marksUnallocatedMemory, GetName())); - } - - m_isReady = true; -} - -void AllocatorBase::PreDestroy() -{ - Debug::AllocationRecords* allocatorRecords = GetRecords(); - if(allocatorRecords) - { - delete allocatorRecords; - SetRecords(nullptr); - } - - if (m_registrationEnabled && AZ::AllocatorManager::IsReady()) - { - AllocatorManager::Instance().UnRegisterAllocator(this); - } - - m_isReady = false; -} - -void AllocatorBase::SetLazilyCreated(bool lazy) -{ - m_isLazilyCreated = lazy; -} - -bool AllocatorBase::IsLazilyCreated() const -{ - return m_isLazilyCreated; -} - -void AllocatorBase::SetProfilingActive(bool active) -{ - m_isProfilingActive = active; -} - -bool AllocatorBase::IsProfilingActive() const -{ - return m_isProfilingActive; -} - -void AllocatorBase::DisableRegistration() -{ - m_registrationEnabled = false; -} - -void AllocatorBase::ProfileAllocation(void* ptr, size_t byteSize, size_t alignment, const char* name, const char* fileName, int lineNum, int suppressStackRecord) -{ - if (m_isProfilingActive) - { -#if defined(AZ_HAS_VARIADIC_TEMPLATES) && defined(AZ_DEBUG_BUILD) - ++suppressStackRecord; // one more for the fact the ebus is a function -#endif // AZ_HAS_VARIADIC_TEMPLATES - - auto records = GetRecords(); - if (records) + Debug::AllocationRecords* allocatorRecords = GetRecords(); + if (allocatorRecords) { - records->RegisterAllocation(ptr, byteSize, alignment, name, fileName, lineNum, suppressStackRecord + 1); + delete allocatorRecords; + SetRecords(nullptr); } + + if (m_registrationEnabled && AZ::AllocatorManager::IsReady()) + { + AllocatorManager::Instance().UnRegisterAllocator(this); + } + + m_isReady = false; } -#if RECORDING_ENABLED - RecordAllocatorOperation(AllocatorOperation::ALLOCATE, ptr, byteSize, alignment); + void AllocatorBase::SetLazilyCreated(bool lazy) + { + m_isLazilyCreated = lazy; + } + + bool AllocatorBase::IsLazilyCreated() const + { + return m_isLazilyCreated; + } + + void AllocatorBase::SetProfilingActive(bool active) + { + m_isProfilingActive = active; + } + + bool AllocatorBase::IsProfilingActive() const + { + return m_isProfilingActive; + } + + void AllocatorBase::DisableRegistration() + { + m_registrationEnabled = false; + } + + void AllocatorBase::ProfileAllocation( + void* ptr, size_t byteSize, size_t alignment, const char* name, const char* fileName, int lineNum, int suppressStackRecord) + { + if (m_isProfilingActive) + { + auto records = GetRecords(); + if (records) + { + records->RegisterAllocation(ptr, byteSize, alignment, name, fileName, lineNum, suppressStackRecord + 1); + } + } + +#if O3DE_RECORDING_ENABLED + RecordAllocatorOperation(AllocatorOperation::ALLOCATE, ptr, byteSize, alignment); #endif -} + } -void AllocatorBase::ProfileDeallocation(void* ptr, size_t byteSize, size_t alignment, Debug::AllocationInfo* info) -{ - if (m_isProfilingActive) + void AllocatorBase::ProfileDeallocation(void* ptr, size_t byteSize, size_t alignment, Debug::AllocationInfo* info) { - auto records = GetRecords(); - if (records) + if (m_isProfilingActive) { - records->UnregisterAllocation(ptr, byteSize, alignment, info); + auto records = GetRecords(); + if (records) + { + records->UnregisterAllocation(ptr, byteSize, alignment, info); + } } - } -#if RECORDING_ENABLED - RecordAllocatorOperation(AllocatorOperation::DEALLOCATE, ptr, byteSize, alignment); +#if O3DE_RECORDING_ENABLED + RecordAllocatorOperation(AllocatorOperation::DEALLOCATE, ptr, byteSize, alignment); #endif -} - -void AllocatorBase::ProfileReallocationBegin([[maybe_unused]] void* ptr, [[maybe_unused]] size_t newSize) -{ -} - -void AllocatorBase::ProfileReallocationEnd(void* ptr, void* newPtr, size_t newSize, size_t newAlignment) -{ - if (m_isProfilingActive) - { - Debug::AllocationInfo info; - ProfileDeallocation(ptr, 0, 0, &info); - ProfileAllocation(newPtr, newSize, newAlignment, info.m_name, info.m_fileName, info.m_lineNum, 0); } -#if RECORDING_ENABLED - RecordAllocatorOperation(AllocatorOperation::DEALLOCATE, ptr); - RecordAllocatorOperation(AllocatorOperation::ALLOCATE, newPtr, newSize, newAlignment); -#endif -} -void AllocatorBase::ProfileReallocation(void* ptr, void* newPtr, size_t newSize, size_t newAlignment) -{ - ProfileReallocationEnd(ptr, newPtr, newSize, newAlignment); -} - -void AllocatorBase::ProfileResize(void* ptr, size_t newSize) -{ - if (newSize && m_isProfilingActive) + void AllocatorBase::ProfileReallocationBegin([[maybe_unused]] void* ptr, [[maybe_unused]] size_t newSize) { - auto records = GetRecords(); - if (records) + } + + void AllocatorBase::ProfileReallocationEnd(void* ptr, void* newPtr, size_t newSize, size_t newAlignment) + { + if (m_isProfilingActive) { - records->ResizeAllocation(ptr, newSize); + Debug::AllocationInfo info; + ProfileDeallocation(ptr, 0, 0, &info); + ProfileAllocation(newPtr, newSize, newAlignment, info.m_name, info.m_fileName, info.m_lineNum, 0); } - } -#if RECORDING_ENABLED - RecordAllocatorOperation(AllocatorOperation::ALLOCATE, ptr, newSize); +#if O3DE_RECORDING_ENABLED + RecordAllocatorOperation(AllocatorOperation::DEALLOCATE, ptr); + RecordAllocatorOperation(AllocatorOperation::ALLOCATE, newPtr, newSize, newAlignment); #endif -} - -bool AllocatorBase::OnOutOfMemory(size_t byteSize, size_t alignment, int flags, const char* name, const char* fileName, int lineNum) -{ - if (AllocatorManager::IsReady() && AllocatorManager::Instance().m_outOfMemoryListener) - { - AllocatorManager::Instance().m_outOfMemoryListener(this, byteSize, alignment, flags, name, fileName, lineNum); - return true; } - return false; -} + + void AllocatorBase::ProfileReallocation(void* ptr, void* newPtr, size_t newSize, size_t newAlignment) + { + ProfileReallocationEnd(ptr, newPtr, newSize, newAlignment); + } + + void AllocatorBase::ProfileResize(void* ptr, size_t newSize) + { + if (newSize && m_isProfilingActive) + { + auto records = GetRecords(); + if (records) + { + records->ResizeAllocation(ptr, newSize); + } + } +#if O3DE_RECORDING_ENABLED + RecordAllocatorOperation(AllocatorOperation::ALLOCATE, ptr, newSize); +#endif + } + + bool AllocatorBase::OnOutOfMemory(size_t byteSize, size_t alignment, int flags, const char* name, const char* fileName, int lineNum) + { + if (AllocatorManager::IsReady() && AllocatorManager::Instance().m_outOfMemoryListener) + { + AllocatorManager::Instance().m_outOfMemoryListener(this, byteSize, alignment, flags, name, fileName, lineNum); + return true; + } + return false; + } + +} // namespace AZ diff --git a/Code/Framework/AzCore/AzCore/Memory/BestFitExternalMapSchema.h b/Code/Framework/AzCore/AzCore/Memory/BestFitExternalMapSchema.h index 63e9027dd2..21ce34eb80 100644 --- a/Code/Framework/AzCore/AzCore/Memory/BestFitExternalMapSchema.h +++ b/Code/Framework/AzCore/AzCore/Memory/BestFitExternalMapSchema.h @@ -50,7 +50,7 @@ namespace AZ BestFitExternalMapSchema(const Descriptor& desc); - pointer_type Allocate(size_type byteSize, size_type alignment, int flags = 0, const char* name = 0, const char* fileName = 0, int lineNum = 0, unsigned int suppressStackRecord = 0) override; + pointer_type Allocate(size_type byteSize, size_type alignment, int flags = 0, const char* name = nullptr, const char* fileName = nullptr, int lineNum = 0, unsigned int suppressStackRecord = 0) override; void DeAllocate(pointer_type ptr, size_type byteSize = 0, size_type alignment = 0) override; size_type Resize(pointer_type ptr, size_type newSize) override; pointer_type ReAllocate(pointer_type ptr, size_type newSize, size_type newAlignment) override; diff --git a/Code/Framework/AzCore/AzCore/Memory/IAllocator.h b/Code/Framework/AzCore/AzCore/Memory/IAllocator.h index 319175f9ee..4612b27249 100644 --- a/Code/Framework/AzCore/AzCore/Memory/IAllocator.h +++ b/Code/Framework/AzCore/AzCore/Memory/IAllocator.h @@ -37,9 +37,9 @@ namespace AZ typedef size_t size_type; typedef ptrdiff_t difference_type; - virtual ~IAllocatorSchema() {} + virtual ~IAllocatorSchema() = default; - virtual pointer_type Allocate(size_type byteSize, size_type alignment, int flags = 0, const char* name = 0, const char* fileName = 0, int lineNum = 0, unsigned int suppressStackRecord = 0) = 0; + virtual pointer_type Allocate(size_type byteSize, size_type alignment, int flags = 0, const char* name = nullptr, const char* fileName = nullptr, int lineNum = 0, unsigned int suppressStackRecord = 0) = 0; virtual void DeAllocate(pointer_type ptr, size_type byteSize = 0, size_type alignment = 0) = 0; /// Resize an allocated memory block. Returns the new adjusted size (as close as possible or equal to the requested one) or 0 (if you don't support resize at all). virtual size_type Resize(pointer_type ptr, size_type newSize) = 0; diff --git a/Code/Framework/AzCore/AzCore/Memory/Memory.h b/Code/Framework/AzCore/AzCore/Memory/Memory.h index 2ecba6ebff..c87c9cd303 100644 --- a/Code/Framework/AzCore/AzCore/Memory/Memory.h +++ b/Code/Framework/AzCore/AzCore/Memory/Memory.h @@ -735,7 +735,7 @@ namespace AZ typedef typename Allocator::Descriptor Descriptor; // Maintained for backwards compatibility, prefer to use Get() instead. - // Get was previously used to get the the schema, however, that bypases what the allocators are doing. + // Get was previously used to get the the schema, however, that bypasses what the allocators are doing. // If the schema is needed, call Get().GetSchema() AZ_FORCE_INLINE static IAllocator& GetAllocator() { diff --git a/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp b/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp index 7870749d24..0599038006 100644 --- a/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp +++ b/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp @@ -155,11 +155,9 @@ namespace Benchmark } private: - static size_t s_numAllocatedBytes; + inline static size_t s_numAllocatedBytes = 0; }; - size_t TestAllocatorWrapper::s_numAllocatedBytes = 0; - // Some allocator are not fully declared, those we simply setup from the schema class MallocSchemaAllocator : public AZ::SimpleSchemaAllocator { From af6af93dffe2764ccf5160436e64931775cc18ce Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 5 Jan 2022 14:23:32 -0800 Subject: [PATCH 018/284] Fixes Linux builds Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../AzCore/AzCore/Memory/BestFitExternalMapSchema.cpp | 4 ++-- Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Code/Framework/AzCore/AzCore/Memory/BestFitExternalMapSchema.cpp b/Code/Framework/AzCore/AzCore/Memory/BestFitExternalMapSchema.cpp index 9561d1019c..5029e6349f 100644 --- a/Code/Framework/AzCore/AzCore/Memory/BestFitExternalMapSchema.cpp +++ b/Code/Framework/AzCore/AzCore/Memory/BestFitExternalMapSchema.cpp @@ -133,13 +133,13 @@ namespace AZ BestFitExternalMapSchema::size_type BestFitExternalMapSchema::Resize(pointer_type, size_type) { - AZ_Assert(false, AZ_FUNCTION_SIGNATURE " unsupported"); + AZ_Assert(false, "%s unsupported", AZ_FUNCTION_SIGNATURE); return 0; } BestFitExternalMapSchema::pointer_type BestFitExternalMapSchema::ReAllocate(pointer_type, size_type, size_type) { - AZ_Assert(false, AZ_FUNCTION_SIGNATURE " unsupported"); + AZ_Assert(false, "%s unsupported", AZ_FUNCTION_SIGNATURE); return nullptr; } diff --git a/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp b/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp index 0599038006..e027b03a49 100644 --- a/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp +++ b/Code/Framework/AzCore/Tests/Memory/AllocatorBenchmarks.cpp @@ -20,6 +20,7 @@ #include #include #include +#include #include #include From 8510bdbfa756100b98a0db6f6f726c03e067f5dc Mon Sep 17 00:00:00 2001 From: Chris Galvan Date: Fri, 7 Jan 2022 14:27:43 -0600 Subject: [PATCH 019/284] (Draft) WIP adding pixel retrieval API to StreamingImageAsset Signed-off-by: Chris Galvan --- .../Code/Source/Processing/Utils.cpp | 4 + .../RPI.Reflect/Image/StreamingImageAsset.h | 4 + .../RPI.Reflect/Image/StreamingImageAsset.cpp | 129 ++++++++++++++++++ Gems/GradientSignal/Code/CMakeLists.txt | 1 + .../Components/ImageGradientComponent.h | 4 + .../Code/Include/GradientSignal/ImageAsset.h | 3 +- .../GradientSignal/Code/Source/ImageAsset.cpp | 28 ++-- 7 files changed, 157 insertions(+), 16 deletions(-) diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/Utils.cpp b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/Utils.cpp index 20e1b18e77..44539ad33c 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/Utils.cpp +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/Utils.cpp @@ -242,6 +242,10 @@ namespace ImageProcessingAtom } } + // Should we actually put the GetSubImagePixelValue API in this Utils file instead, since it already has + // some conversion logic, and has the helper method for retrieving an entire image (LoadImageFromImageAsset) + // whereas this is a helper for retrieving a specific pixel from the image? + IImageObjectPtr LoadImageFromImageAsset(const AZ::Data::Asset& imageAsset) { if (!imageAsset.IsReady()) diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Image/StreamingImageAsset.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Image/StreamingImageAsset.h index 73af8370cb..1db2a63b1c 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Image/StreamingImageAsset.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Image/StreamingImageAsset.h @@ -85,6 +85,10 @@ namespace AZ //! Get image data for specified mip and slice. It may return empty array if its mipchain assets are not loaded AZStd::array_view GetSubImageData(uint32_t mip, uint32_t slice); + //! Get image pixel value for specified mip and slice + template + T GetSubImagePixelValue(uint32_t mip, uint32_t slice, uint32_t x, uint32_t y, uint32_t componentIndex = 0); + //! Returns streaming image pool asset id of the pool that will be used to create the streaming image. const Data::AssetId& GetPoolAssetId() const; diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp index 59f359e474..f1d9b1782b 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp @@ -13,6 +13,95 @@ namespace AZ { + namespace Internal + { + template + float RetrieveFloatValue(const AZ::u8* mem, size_t index) + { + AZ_Assert(false, "Unsupported pixel format"); + } + + template + AZ::u32 RetrieveUintValue(const AZ::u8* mem, size_t index) + { + AZ_Assert(false, "Unsupported pixel format"); + } + + template <> + float RetrieveFloatValue([[maybe_unused]] const AZ::u8* mem, [[maybe_unused]] size_t index) + { + return 0.0f; + } + + template <> + AZ::u32 RetrieveUintValue([[maybe_unused]] const AZ::u8* mem, [[maybe_unused]] size_t index) + { + return 0; + } + + template <> + AZ::u32 RetrieveUintValue(const AZ::u8* mem, size_t index) + { + return mem[index] / static_cast(std::numeric_limits::max()); + } + + template <> + AZ::u32 RetrieveUintValue(const AZ::u8* mem, size_t index) + { + // 16 bits per channel + auto actualMem = reinterpret_cast(mem); + actualMem += index; + + return *actualMem / static_cast(std::numeric_limits::max()); + } + + template <> + AZ::u32 RetrieveUintValue(const AZ::u8* mem, size_t index) + { + // 32 bits per channel + auto actualMem = reinterpret_cast(mem); + actualMem += index; + + return *actualMem / static_cast(std::numeric_limits::max()); + } + + template <> + float RetrieveFloatValue(const AZ::u8* mem, size_t index) + { + // 32 bits per channel + auto actualMem = reinterpret_cast(mem); + actualMem += index; + + return *actualMem; + } + + float RetrieveFloatValue(const AZ::u8* mem, size_t index, AZ::RHI::Format format) + { + switch (format) + { + case AZ::RHI::Format::R32_FLOAT: + return RetrieveFloatValue(mem, index); + default: + return RetrieveFloatValue(mem, index); + } + } + + AZ::u32 RetrieveUintValue(const AZ::u8* mem, size_t index, AZ::RHI::Format format) + { + switch (format) + { + case AZ::RHI::Format::R8_UNORM: + return RetrieveUintValue(mem, index); + case AZ::RHI::Format::R16_UNORM: + return RetrieveUintValue(mem, index); + case AZ::RHI::Format::R32_UINT: + return RetrieveUintValue(mem, index); + default: + return RetrieveUintValue(mem, index); + } + } + } + namespace RPI { const char* StreamingImageAsset::DisplayName = "StreamingImage"; @@ -124,5 +213,45 @@ namespace AZ return mipChainAsset->GetSubImageData(mip - mipChain.m_mipOffset, slice); } + + template<> + float StreamingImageAsset::GetSubImagePixelValue(uint32_t mip, uint32_t slice, uint32_t x, uint32_t y, uint32_t componentIndex) + { + // TODO: Use the component index + (void)componentIndex; + + auto imageData = GetSubImageData(mip, slice); + + if (!imageData.empty()) + { + const AZ::RHI::ImageDescriptor imageDescriptor = GetImageDescriptor(); + auto width = imageDescriptor.m_size.m_width; + size_t index = (y * width) + x; + + return Internal::RetrieveFloatValue(imageData.data(), index, imageDescriptor.m_format); + } + + return 0.0f; + } + + template<> + AZ::u32 StreamingImageAsset::GetSubImagePixelValue(uint32_t mip, uint32_t slice, uint32_t x, uint32_t y, uint32_t componentIndex) + { + // TODO: Use the component index + (void)componentIndex; + + auto imageData = GetSubImageData(mip, slice); + + if (!imageData.empty()) + { + const AZ::RHI::ImageDescriptor imageDescriptor = GetImageDescriptor(); + auto width = imageDescriptor.m_size.m_width; + size_t index = (y * width) + x; + + return Internal::RetrieveUintValue(imageData.data(), index, imageDescriptor.m_format); + } + + return 0; + } } } diff --git a/Gems/GradientSignal/Code/CMakeLists.txt b/Gems/GradientSignal/Code/CMakeLists.txt index 657a88db47..fda04ceb82 100644 --- a/Gems/GradientSignal/Code/CMakeLists.txt +++ b/Gems/GradientSignal/Code/CMakeLists.txt @@ -21,6 +21,7 @@ ly_add_target( AZ::AzCore AZ::AtomCore AZ::AzFramework + Gem::Atom_RPI.Public Gem::SurfaceData Gem::ImageProcessingAtom.Headers Gem::LmbrCentral diff --git a/Gems/GradientSignal/Code/Include/GradientSignal/Components/ImageGradientComponent.h b/Gems/GradientSignal/Code/Include/GradientSignal/Components/ImageGradientComponent.h index 8214436f83..bbb22a061d 100644 --- a/Gems/GradientSignal/Code/Include/GradientSignal/Components/ImageGradientComponent.h +++ b/Gems/GradientSignal/Code/Include/GradientSignal/Components/ImageGradientComponent.h @@ -10,6 +10,9 @@ #include #include + +#include + #include #include #include @@ -33,6 +36,7 @@ namespace GradientSignal AZ_RTTI(ImageGradientConfig, "{1BDB5DA4-A4A8-452B-BE6D-6BD451D4E7CD}", AZ::ComponentConfig); static void Reflect(AZ::ReflectContext* context); AZ::Data::Asset m_imageAsset = { AZ::Data::AssetLoadBehavior::QueueLoad }; + AZ::Data::Asset m_streamingImageAsset = { AZ::Data::AssetLoadBehavior::QueueLoad }; float m_tilingX = 1.0f; float m_tilingY = 1.0f; }; diff --git a/Gems/GradientSignal/Code/Include/GradientSignal/ImageAsset.h b/Gems/GradientSignal/Code/Include/GradientSignal/ImageAsset.h index 4ffab0b4b4..811d74082d 100644 --- a/Gems/GradientSignal/Code/Include/GradientSignal/ImageAsset.h +++ b/Gems/GradientSignal/Code/Include/GradientSignal/ImageAsset.h @@ -12,6 +12,7 @@ #include #include #include +#include namespace AZ { @@ -61,6 +62,6 @@ namespace GradientSignal } }; - float GetValueFromImageAsset(const AZ::Data::Asset& imageAsset, const AZ::Vector3& uvw, float tilingX, float tilingY, float defaultValue); + float GetValueFromImageAsset(const AZ::Data::Asset& imageAsset, const AZ::Vector3& uvw, float tilingX, float tilingY, float defaultValue); } // namespace GradientSignal diff --git a/Gems/GradientSignal/Code/Source/ImageAsset.cpp b/Gems/GradientSignal/Code/Source/ImageAsset.cpp index 7e73dc32d6..afa233e5cb 100644 --- a/Gems/GradientSignal/Code/Source/ImageAsset.cpp +++ b/Gems/GradientSignal/Code/Source/ImageAsset.cpp @@ -20,6 +20,7 @@ namespace { + // Could (should) move these RetrieveValue helper methods over to where our new API lives template float RetrieveValue(const AZ::u8* mem, size_t index) { @@ -151,17 +152,17 @@ namespace GradientSignal return true; } - float GetValueFromImageAsset(const AZ::Data::Asset& imageAsset, const AZ::Vector3& uvw, float tilingX, float tilingY, float defaultValue) + float GetValueFromImageAsset(const AZ::Data::Asset& imageAsset, const AZ::Vector3& uvw, float tilingX, float tilingY, float defaultValue) { if (imageAsset.IsReady()) { - const auto& image = imageAsset.Get(); - AZStd::size_t imageSize = image->m_imageWidth * image->m_imageHeight * - static_cast(image->m_bytesPerPixel); + const AZ::RHI::ImageDescriptor imageDescriptor = imageAsset->GetImageDescriptor(); + auto width = imageDescriptor.m_size.m_width; + auto height = imageDescriptor.m_size.m_height; - if (image->m_imageWidth > 0 && - image->m_imageHeight > 0 && - image->m_imageData.size() == imageSize) + if (width > 0 + && height > 0 + ) { // When "rasterizing" from uvs, a range of 0-1 has slightly different meanings depending on the sampler state. // For repeating states (Unbounded/None, Repeat), a uv value of 1 should wrap around back to our 0th pixel. @@ -184,8 +185,8 @@ namespace GradientSignal // A 16x16 pixel image and tilingX = tilingY = 1 maps the uv range of 0-1 to 0-16 pixels. // A 16x16 pixel image and tilingX = tilingY = 1.5 maps the uv range of 0-1 to 0-24 pixels. - const AZ::Vector3 tiledDimensions((image->m_imageWidth * tilingX), - (image->m_imageHeight * tilingY), + const AZ::Vector3 tiledDimensions((width * tilingX), + (height * tilingY), 0.0f); // Convert from uv space back to pixel space @@ -194,13 +195,10 @@ namespace GradientSignal // UVs outside the 0-1 range are treated as infinitely tiling, so that we behave the same as the // other gradient generators. As mentioned above, if clamping is desired, we expect it to be applied // outside of this function. - size_t x = static_cast(pixelLookup.GetX()) % image->m_imageWidth; - size_t y = static_cast(pixelLookup.GetY()) % image->m_imageHeight; + uint32_t x = static_cast(pixelLookup.GetX()) % width; + uint32_t y = static_cast(pixelLookup.GetY()) % height; - // Flip the y because images are stored in reverse of our world axes - size_t index = ((image->m_imageHeight - 1) - y) * image->m_imageWidth + x; - - return RetrieveValue(image->m_imageData.data(), index, image->m_imageFormat); + return imageAsset->GetSubImagePixelValue(0, 0, x, y, 0); } } From 708eabe5de5205dbfb4fa016c40f6cc7e7f23d12 Mon Sep 17 00:00:00 2001 From: Chris Galvan Date: Tue, 11 Jan 2022 10:32:03 -0600 Subject: [PATCH 020/284] Removed comment question Signed-off-by: Chris Galvan --- .../ImageProcessingAtom/Code/Source/Processing/Utils.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/Utils.cpp b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/Utils.cpp index 44539ad33c..20e1b18e77 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/Utils.cpp +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/Utils.cpp @@ -242,10 +242,6 @@ namespace ImageProcessingAtom } } - // Should we actually put the GetSubImagePixelValue API in this Utils file instead, since it already has - // some conversion logic, and has the helper method for retrieving an entire image (LoadImageFromImageAsset) - // whereas this is a helper for retrieving a specific pixel from the image? - IImageObjectPtr LoadImageFromImageAsset(const AZ::Data::Asset& imageAsset) { if (!imageAsset.IsReady()) From 16bad281aeeda76b8d097c486f0154767fe5f635 Mon Sep 17 00:00:00 2001 From: Chris Galvan Date: Tue, 11 Jan 2022 10:40:59 -0600 Subject: [PATCH 021/284] Changed GetSubImagePixelValue parameter order so x,y are first Signed-off-by: Chris Galvan --- .../Code/Include/Atom/RPI.Reflect/Image/StreamingImageAsset.h | 2 +- .../RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp | 4 ++-- Gems/GradientSignal/Code/Source/ImageAsset.cpp | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Image/StreamingImageAsset.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Image/StreamingImageAsset.h index 1db2a63b1c..bdb68601a9 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Image/StreamingImageAsset.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Image/StreamingImageAsset.h @@ -87,7 +87,7 @@ namespace AZ //! Get image pixel value for specified mip and slice template - T GetSubImagePixelValue(uint32_t mip, uint32_t slice, uint32_t x, uint32_t y, uint32_t componentIndex = 0); + T GetSubImagePixelValue(uint32_t x, uint32_t y, uint32_t componentIndex = 0, uint32_t mip = 0, uint32_t slice = 0); //! Returns streaming image pool asset id of the pool that will be used to create the streaming image. const Data::AssetId& GetPoolAssetId() const; diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp index f1d9b1782b..37f0e04116 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp @@ -215,7 +215,7 @@ namespace AZ } template<> - float StreamingImageAsset::GetSubImagePixelValue(uint32_t mip, uint32_t slice, uint32_t x, uint32_t y, uint32_t componentIndex) + float StreamingImageAsset::GetSubImagePixelValue(uint32_t x, uint32_t y, uint32_t componentIndex, uint32_t mip, uint32_t slice) { // TODO: Use the component index (void)componentIndex; @@ -235,7 +235,7 @@ namespace AZ } template<> - AZ::u32 StreamingImageAsset::GetSubImagePixelValue(uint32_t mip, uint32_t slice, uint32_t x, uint32_t y, uint32_t componentIndex) + AZ::u32 StreamingImageAsset::GetSubImagePixelValue(uint32_t x, uint32_t y, uint32_t componentIndex, uint32_t mip, uint32_t slice) { // TODO: Use the component index (void)componentIndex; diff --git a/Gems/GradientSignal/Code/Source/ImageAsset.cpp b/Gems/GradientSignal/Code/Source/ImageAsset.cpp index afa233e5cb..e88a574768 100644 --- a/Gems/GradientSignal/Code/Source/ImageAsset.cpp +++ b/Gems/GradientSignal/Code/Source/ImageAsset.cpp @@ -198,7 +198,7 @@ namespace GradientSignal uint32_t x = static_cast(pixelLookup.GetX()) % width; uint32_t y = static_cast(pixelLookup.GetY()) % height; - return imageAsset->GetSubImagePixelValue(0, 0, x, y, 0); + return imageAsset->GetSubImagePixelValue(x, y); } } From 010e8a5df1a1c10f42de01f25d071a68cdcdb381 Mon Sep 17 00:00:00 2001 From: Chris Galvan Date: Wed, 12 Jan 2022 12:28:52 -0600 Subject: [PATCH 022/284] Reverted changes to image gradient asset (will put in separate PR) Signed-off-by: Chris Galvan --- Gems/GradientSignal/Code/CMakeLists.txt | 1 - .../Components/ImageGradientComponent.h | 3 -- .../Code/Include/GradientSignal/ImageAsset.h | 3 +- .../GradientSignal/Code/Source/ImageAsset.cpp | 28 ++++++++++--------- 4 files changed, 16 insertions(+), 19 deletions(-) diff --git a/Gems/GradientSignal/Code/CMakeLists.txt b/Gems/GradientSignal/Code/CMakeLists.txt index 08d6c82926..d4cf666630 100644 --- a/Gems/GradientSignal/Code/CMakeLists.txt +++ b/Gems/GradientSignal/Code/CMakeLists.txt @@ -21,7 +21,6 @@ ly_add_target( AZ::AzCore AZ::AtomCore AZ::AzFramework - Gem::Atom_RPI.Public Gem::SurfaceData Gem::ImageProcessingAtom.Headers Gem::LmbrCentral diff --git a/Gems/GradientSignal/Code/Include/GradientSignal/Components/ImageGradientComponent.h b/Gems/GradientSignal/Code/Include/GradientSignal/Components/ImageGradientComponent.h index bbb22a061d..85aa33137b 100644 --- a/Gems/GradientSignal/Code/Include/GradientSignal/Components/ImageGradientComponent.h +++ b/Gems/GradientSignal/Code/Include/GradientSignal/Components/ImageGradientComponent.h @@ -11,8 +11,6 @@ #include #include -#include - #include #include #include @@ -36,7 +34,6 @@ namespace GradientSignal AZ_RTTI(ImageGradientConfig, "{1BDB5DA4-A4A8-452B-BE6D-6BD451D4E7CD}", AZ::ComponentConfig); static void Reflect(AZ::ReflectContext* context); AZ::Data::Asset m_imageAsset = { AZ::Data::AssetLoadBehavior::QueueLoad }; - AZ::Data::Asset m_streamingImageAsset = { AZ::Data::AssetLoadBehavior::QueueLoad }; float m_tilingX = 1.0f; float m_tilingY = 1.0f; }; diff --git a/Gems/GradientSignal/Code/Include/GradientSignal/ImageAsset.h b/Gems/GradientSignal/Code/Include/GradientSignal/ImageAsset.h index 811d74082d..4ffab0b4b4 100644 --- a/Gems/GradientSignal/Code/Include/GradientSignal/ImageAsset.h +++ b/Gems/GradientSignal/Code/Include/GradientSignal/ImageAsset.h @@ -12,7 +12,6 @@ #include #include #include -#include namespace AZ { @@ -62,6 +61,6 @@ namespace GradientSignal } }; - float GetValueFromImageAsset(const AZ::Data::Asset& imageAsset, const AZ::Vector3& uvw, float tilingX, float tilingY, float defaultValue); + float GetValueFromImageAsset(const AZ::Data::Asset& imageAsset, const AZ::Vector3& uvw, float tilingX, float tilingY, float defaultValue); } // namespace GradientSignal diff --git a/Gems/GradientSignal/Code/Source/ImageAsset.cpp b/Gems/GradientSignal/Code/Source/ImageAsset.cpp index e88a574768..95d32fced1 100644 --- a/Gems/GradientSignal/Code/Source/ImageAsset.cpp +++ b/Gems/GradientSignal/Code/Source/ImageAsset.cpp @@ -20,7 +20,6 @@ namespace { - // Could (should) move these RetrieveValue helper methods over to where our new API lives template float RetrieveValue(const AZ::u8* mem, size_t index) { @@ -152,17 +151,17 @@ namespace GradientSignal return true; } - float GetValueFromImageAsset(const AZ::Data::Asset& imageAsset, const AZ::Vector3& uvw, float tilingX, float tilingY, float defaultValue) + float GetValueFromImageAsset(const AZ::Data::Asset& imageAsset, const AZ::Vector3& uvw, float tilingX, float tilingY, float defaultValue) { if (imageAsset.IsReady()) { - const AZ::RHI::ImageDescriptor imageDescriptor = imageAsset->GetImageDescriptor(); - auto width = imageDescriptor.m_size.m_width; - auto height = imageDescriptor.m_size.m_height; + const auto& image = imageAsset.Get(); + AZStd::size_t imageSize = image->m_imageWidth * image->m_imageHeight * + static_cast(image->m_bytesPerPixel); - if (width > 0 - && height > 0 - ) + if (image->m_imageWidth > 0 && + image->m_imageHeight > 0 && + image->m_imageData.size() == imageSize) { // When "rasterizing" from uvs, a range of 0-1 has slightly different meanings depending on the sampler state. // For repeating states (Unbounded/None, Repeat), a uv value of 1 should wrap around back to our 0th pixel. @@ -185,8 +184,8 @@ namespace GradientSignal // A 16x16 pixel image and tilingX = tilingY = 1 maps the uv range of 0-1 to 0-16 pixels. // A 16x16 pixel image and tilingX = tilingY = 1.5 maps the uv range of 0-1 to 0-24 pixels. - const AZ::Vector3 tiledDimensions((width * tilingX), - (height * tilingY), + const AZ::Vector3 tiledDimensions((image->m_imageWidth * tilingX), + (image->m_imageHeight * tilingY), 0.0f); // Convert from uv space back to pixel space @@ -195,10 +194,13 @@ namespace GradientSignal // UVs outside the 0-1 range are treated as infinitely tiling, so that we behave the same as the // other gradient generators. As mentioned above, if clamping is desired, we expect it to be applied // outside of this function. - uint32_t x = static_cast(pixelLookup.GetX()) % width; - uint32_t y = static_cast(pixelLookup.GetY()) % height; + size_t x = static_cast(pixelLookup.GetX()) % image->m_imageWidth; + size_t y = static_cast(pixelLookup.GetY()) % image->m_imageHeight; - return imageAsset->GetSubImagePixelValue(x, y); + // Flip the y because images are stored in reverse of our world axes + size_t index = ((image->m_imageHeight - 1) - y) * image->m_imageWidth + x; + + return RetrieveValue(image->m_imageData.data(), index, image->m_imageFormat); } } From 830c55dd7c3e0597bbba2479143ef44b45508b9a Mon Sep 17 00:00:00 2001 From: Chris Galvan Date: Wed, 12 Jan 2022 12:30:48 -0600 Subject: [PATCH 023/284] Reverted two other small changes I missed Signed-off-by: Chris Galvan --- .../Include/GradientSignal/Components/ImageGradientComponent.h | 1 - Gems/GradientSignal/Code/Source/ImageAsset.cpp | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/Gems/GradientSignal/Code/Include/GradientSignal/Components/ImageGradientComponent.h b/Gems/GradientSignal/Code/Include/GradientSignal/Components/ImageGradientComponent.h index 85aa33137b..8214436f83 100644 --- a/Gems/GradientSignal/Code/Include/GradientSignal/Components/ImageGradientComponent.h +++ b/Gems/GradientSignal/Code/Include/GradientSignal/Components/ImageGradientComponent.h @@ -10,7 +10,6 @@ #include #include - #include #include #include diff --git a/Gems/GradientSignal/Code/Source/ImageAsset.cpp b/Gems/GradientSignal/Code/Source/ImageAsset.cpp index 95d32fced1..7e73dc32d6 100644 --- a/Gems/GradientSignal/Code/Source/ImageAsset.cpp +++ b/Gems/GradientSignal/Code/Source/ImageAsset.cpp @@ -184,7 +184,7 @@ namespace GradientSignal // A 16x16 pixel image and tilingX = tilingY = 1 maps the uv range of 0-1 to 0-16 pixels. // A 16x16 pixel image and tilingX = tilingY = 1.5 maps the uv range of 0-1 to 0-24 pixels. - const AZ::Vector3 tiledDimensions((image->m_imageWidth * tilingX), + const AZ::Vector3 tiledDimensions((image->m_imageWidth * tilingX), (image->m_imageHeight * tilingY), 0.0f); From 1ed81ae973df283765def13b6f86cdbf5ec6ee52 Mon Sep 17 00:00:00 2001 From: Chris Galvan Date: Thu, 13 Jan 2022 10:27:19 -0600 Subject: [PATCH 024/284] Added API for retrieving region of streaming image asset pixel values Signed-off-by: Chris Galvan --- .../RPI.Reflect/Image/StreamingImageAsset.h | 5 +- .../RPI.Reflect/Image/StreamingImageAsset.cpp | 50 +++++++++++++++---- 2 files changed, 43 insertions(+), 12 deletions(-) diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Image/StreamingImageAsset.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Image/StreamingImageAsset.h index bdb68601a9..e934ac8bcf 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Image/StreamingImageAsset.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Image/StreamingImageAsset.h @@ -85,10 +85,13 @@ namespace AZ //! Get image data for specified mip and slice. It may return empty array if its mipchain assets are not loaded AZStd::array_view GetSubImageData(uint32_t mip, uint32_t slice); - //! Get image pixel value for specified mip and slice + //! Get single image pixel value for specified mip and slice template T GetSubImagePixelValue(uint32_t x, uint32_t y, uint32_t componentIndex = 0, uint32_t mip = 0, uint32_t slice = 0); + //! Retrieve a region of image pixel values (float) for specified mip and slice + void GetSubImagePixelValues(AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::array_view outValues, uint32_t componentIndex = 0, uint32_t mip = 0, uint32_t slice = 0); + //! Returns streaming image pool asset id of the pool that will be used to create the streaming image. const Data::AssetId& GetPoolAssetId() const; diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp index 37f0e04116..e005fb7f9e 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp @@ -18,13 +18,19 @@ namespace AZ template float RetrieveFloatValue(const AZ::u8* mem, size_t index) { - AZ_Assert(false, "Unsupported pixel format"); + static_assert(false, "Unsupported pixel format"); } template AZ::u32 RetrieveUintValue(const AZ::u8* mem, size_t index) { - AZ_Assert(false, "Unsupported pixel format"); + static_assert(false, "Unsupported pixel format"); + } + + template + AZ::s32 RetrieveIntValue(const AZ::u8* mem, size_t index) + { + static_assert(false, "Unsupported pixel format"); } template <> @@ -217,18 +223,14 @@ namespace AZ template<> float StreamingImageAsset::GetSubImagePixelValue(uint32_t x, uint32_t y, uint32_t componentIndex, uint32_t mip, uint32_t slice) { - // TODO: Use the component index - (void)componentIndex; + AZStd::vector values; + auto position = AZStd::make_pair(x, y); - auto imageData = GetSubImageData(mip, slice); + GetSubImagePixelValues(position, position, values, componentIndex, mip, slice); - if (!imageData.empty()) + if (values.size() == 1) { - const AZ::RHI::ImageDescriptor imageDescriptor = GetImageDescriptor(); - auto width = imageDescriptor.m_size.m_width; - size_t index = (y * width) + x; - - return Internal::RetrieveFloatValue(imageData.data(), index, imageDescriptor.m_format); + return values[0]; } return 0.0f; @@ -253,5 +255,31 @@ namespace AZ return 0; } + + void StreamingImageAsset::GetSubImagePixelValues(AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::array_view outValues, uint32_t componentIndex, uint32_t mip, uint32_t slice) + { + // TODO: Use the component index + (void)componentIndex; + + auto imageData = GetSubImageData(mip, slice); + + if (!imageData.empty()) + { + const AZ::RHI::ImageDescriptor imageDescriptor = GetImageDescriptor(); + auto width = imageDescriptor.m_size.m_width; + + size_t outValuesIndex = 0; + for (uint32_t x = topLeft.first; x < bottomRight.first; ++x) + { + for (uint32_t y = topLeft.second; y < bottomRight.second; ++y) + { + size_t imageDataIndex = (y * width) + x; + + auto& outValue = const_cast(outValues[outValuesIndex++]); + outValue = Internal::RetrieveFloatValue(imageData.data(), imageDataIndex, imageDescriptor.m_format); + } + } + } + } } } From 2048d8c05c7e34d6ad5823640ab29ed4a5498449 Mon Sep 17 00:00:00 2001 From: Chris Galvan Date: Thu, 13 Jan 2022 11:38:16 -0600 Subject: [PATCH 025/284] Added region-based APIs for uint and int Signed-off-by: Chris Galvan --- .../RPI.Reflect/Image/StreamingImageAsset.h | 9 ++ .../RPI.Reflect/Image/StreamingImageAsset.cpp | 125 ++++++++++++++---- 2 files changed, 109 insertions(+), 25 deletions(-) diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Image/StreamingImageAsset.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Image/StreamingImageAsset.h index e934ac8bcf..f4dc891ff2 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Image/StreamingImageAsset.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Image/StreamingImageAsset.h @@ -92,6 +92,12 @@ namespace AZ //! Retrieve a region of image pixel values (float) for specified mip and slice void GetSubImagePixelValues(AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::array_view outValues, uint32_t componentIndex = 0, uint32_t mip = 0, uint32_t slice = 0); + //! Retrieve a region of image pixel values (uint) for specified mip and slice + void GetSubImagePixelValues(AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::array_view outValues, uint32_t componentIndex = 0, uint32_t mip = 0, uint32_t slice = 0); + + //! Retrieve a region of image pixel values (int) for specified mip and slice + void GetSubImagePixelValues(AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::array_view outValues, uint32_t componentIndex = 0, uint32_t mip = 0, uint32_t slice = 0); + //! Returns streaming image pool asset id of the pool that will be used to create the streaming image. const Data::AssetId& GetPoolAssetId() const; @@ -134,6 +140,9 @@ namespace AZ uint32_t m_totalImageDataSize = 0; StreamingImageFlags m_flags = StreamingImageFlags::None; + + template + T GetSubImagePixelValueInternal(uint32_t x, uint32_t y, uint32_t componentIndex = 0, uint32_t mip = 0, uint32_t slice = 0); }; } } diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp index e005fb7f9e..e21dd1f2c5 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp @@ -45,6 +45,12 @@ namespace AZ return 0; } + template <> + AZ::s32 RetrieveIntValue([[maybe_unused]] const AZ::u8* mem, [[maybe_unused]] size_t index) + { + return 0; + } + template <> AZ::u32 RetrieveUintValue(const AZ::u8* mem, size_t index) { @@ -56,19 +62,27 @@ namespace AZ { // 16 bits per channel auto actualMem = reinterpret_cast(mem); - actualMem += index; - return *actualMem / static_cast(std::numeric_limits::max()); + return actualMem[index] / static_cast(std::numeric_limits::max()); } template <> - AZ::u32 RetrieveUintValue(const AZ::u8* mem, size_t index) + AZ::s32 RetrieveIntValue(const AZ::u8* mem, size_t index) + { + // 16 bits per channel + auto actualMem = reinterpret_cast(mem); + + return actualMem[index] / static_cast(std::numeric_limits::max()); + } + + template <> + float RetrieveFloatValue(const AZ::u8* mem, size_t index) { // 32 bits per channel - auto actualMem = reinterpret_cast(mem); + auto actualMem = reinterpret_cast(mem); actualMem += index; - return *actualMem / static_cast(std::numeric_limits::max()); + return *actualMem; } template <> @@ -85,6 +99,8 @@ namespace AZ { switch (format) { + case AZ::RHI::Format::R32_UINT: + return RetrieveFloatValue(mem, index); case AZ::RHI::Format::R32_FLOAT: return RetrieveFloatValue(mem, index); default: @@ -100,12 +116,21 @@ namespace AZ return RetrieveUintValue(mem, index); case AZ::RHI::Format::R16_UNORM: return RetrieveUintValue(mem, index); - case AZ::RHI::Format::R32_UINT: - return RetrieveUintValue(mem, index); default: return RetrieveUintValue(mem, index); } } + + AZ::s32 RetrieveIntValue(const AZ::u8* mem, size_t index, AZ::RHI::Format format) + { + switch (format) + { + case AZ::RHI::Format::R16_SINT: + return RetrieveIntValue(mem, index); + default: + return RetrieveIntValue(mem, index); + } + } } namespace RPI @@ -220,10 +245,10 @@ namespace AZ return mipChainAsset->GetSubImageData(mip - mipChain.m_mipOffset, slice); } - template<> - float StreamingImageAsset::GetSubImagePixelValue(uint32_t x, uint32_t y, uint32_t componentIndex, uint32_t mip, uint32_t slice) + template + T StreamingImageAsset::GetSubImagePixelValueInternal(uint32_t x, uint32_t y, uint32_t componentIndex, uint32_t mip, uint32_t slice) { - AZStd::vector values; + AZStd::vector values; auto position = AZStd::make_pair(x, y); GetSubImagePixelValues(position, position, values, componentIndex, mip, slice); @@ -233,27 +258,25 @@ namespace AZ return values[0]; } - return 0.0f; + return aznumeric_cast(0); + } + + template<> + float StreamingImageAsset::GetSubImagePixelValue(uint32_t x, uint32_t y, uint32_t componentIndex, uint32_t mip, uint32_t slice) + { + return GetSubImagePixelValueInternal(x, y, componentIndex, mip, slice); } template<> AZ::u32 StreamingImageAsset::GetSubImagePixelValue(uint32_t x, uint32_t y, uint32_t componentIndex, uint32_t mip, uint32_t slice) { - // TODO: Use the component index - (void)componentIndex; + return GetSubImagePixelValueInternal(x, y, componentIndex, mip, slice); + } - auto imageData = GetSubImageData(mip, slice); - - if (!imageData.empty()) - { - const AZ::RHI::ImageDescriptor imageDescriptor = GetImageDescriptor(); - auto width = imageDescriptor.m_size.m_width; - size_t index = (y * width) + x; - - return Internal::RetrieveUintValue(imageData.data(), index, imageDescriptor.m_format); - } - - return 0; + template<> + AZ::s32 StreamingImageAsset::GetSubImagePixelValue(uint32_t x, uint32_t y, uint32_t componentIndex, uint32_t mip, uint32_t slice) + { + return GetSubImagePixelValueInternal(x, y, componentIndex, mip, slice); } void StreamingImageAsset::GetSubImagePixelValues(AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::array_view outValues, uint32_t componentIndex, uint32_t mip, uint32_t slice) @@ -281,5 +304,57 @@ namespace AZ } } } + + void StreamingImageAsset::GetSubImagePixelValues(AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::array_view outValues, uint32_t componentIndex, uint32_t mip, uint32_t slice) + { + // TODO: Use the component index + (void)componentIndex; + + auto imageData = GetSubImageData(mip, slice); + + if (!imageData.empty()) + { + const AZ::RHI::ImageDescriptor imageDescriptor = GetImageDescriptor(); + auto width = imageDescriptor.m_size.m_width; + + size_t outValuesIndex = 0; + for (uint32_t x = topLeft.first; x < bottomRight.first; ++x) + { + for (uint32_t y = topLeft.second; y < bottomRight.second; ++y) + { + size_t imageDataIndex = (y * width) + x; + + auto& outValue = const_cast(outValues[outValuesIndex++]); + outValue = Internal::RetrieveUintValue(imageData.data(), imageDataIndex, imageDescriptor.m_format); + } + } + } + } + + void StreamingImageAsset::GetSubImagePixelValues(AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::array_view outValues, uint32_t componentIndex, uint32_t mip, uint32_t slice) + { + // TODO: Use the component index + (void)componentIndex; + + auto imageData = GetSubImageData(mip, slice); + + if (!imageData.empty()) + { + const AZ::RHI::ImageDescriptor imageDescriptor = GetImageDescriptor(); + auto width = imageDescriptor.m_size.m_width; + + size_t outValuesIndex = 0; + for (uint32_t x = topLeft.first; x < bottomRight.first; ++x) + { + for (uint32_t y = topLeft.second; y < bottomRight.second; ++y) + { + size_t imageDataIndex = (y * width) + x; + + auto& outValue = const_cast(outValues[outValuesIndex++]); + outValue = Internal::RetrieveIntValue(imageData.data(), imageDataIndex, imageDescriptor.m_format); + } + } + } + } } } From 56837f48d9c75e3f5e0a8b3e7fa560b0e71287f7 Mon Sep 17 00:00:00 2001 From: sphrose <82213493+sphrose@users.noreply.github.com> Date: Fri, 14 Jan 2022 16:29:00 +0000 Subject: [PATCH 026/284] Remove error state when user attempts to save empty script event. Signed-off-by: sphrose <82213493+sphrose@users.noreply.github.com> --- .../Code/Include/ScriptEvents/ScriptEventDefinition.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Gems/ScriptEvents/Code/Include/ScriptEvents/ScriptEventDefinition.cpp b/Gems/ScriptEvents/Code/Include/ScriptEvents/ScriptEventDefinition.cpp index e6c40cf789..3a6a411611 100644 --- a/Gems/ScriptEvents/Code/Include/ScriptEvents/ScriptEventDefinition.cpp +++ b/Gems/ScriptEvents/Code/Include/ScriptEvents/ScriptEventDefinition.cpp @@ -131,10 +131,7 @@ namespace ScriptEvents return AZ::Failure(AZStd::string::format("%s, invalid name specified, event name must only have alpha numeric characters, may not start with a number and may not have white space", name.c_str())); } - if (m_methods.empty()) - { - return AZ::Failure(AZStd::string::format("Script Events (%s) must provide at least one event otherwise they are unusable, be sure to add an event before saving.", name.c_str())); - } + AZ_Warning("Script Events", !m_methods.empty(), AZStd::string::format("Script Events (%s) must provide at least one event, otherwise they are unusable.", name.c_str()).c_str()); // Validate each method AZStd::string methodName; From 798f6ea5bbda00574531de8fce30b277cb42c727 Mon Sep 17 00:00:00 2001 From: Chris Galvan Date: Tue, 18 Jan 2022 15:41:37 -0600 Subject: [PATCH 027/284] Added support for additional formats Signed-off-by: Chris Galvan --- .../RPI.Reflect/Image/StreamingImageAsset.cpp | 109 ++++++++---------- 1 file changed, 51 insertions(+), 58 deletions(-) diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp index e21dd1f2c5..4e664ad3e2 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp @@ -51,58 +51,29 @@ namespace AZ return 0; } - template <> - AZ::u32 RetrieveUintValue(const AZ::u8* mem, size_t index) - { - return mem[index] / static_cast(std::numeric_limits::max()); - } - - template <> - AZ::u32 RetrieveUintValue(const AZ::u8* mem, size_t index) - { - // 16 bits per channel - auto actualMem = reinterpret_cast(mem); - - return actualMem[index] / static_cast(std::numeric_limits::max()); - } - - template <> - AZ::s32 RetrieveIntValue(const AZ::u8* mem, size_t index) - { - // 16 bits per channel - auto actualMem = reinterpret_cast(mem); - - return actualMem[index] / static_cast(std::numeric_limits::max()); - } - - template <> - float RetrieveFloatValue(const AZ::u8* mem, size_t index) - { - // 32 bits per channel - auto actualMem = reinterpret_cast(mem); - actualMem += index; - - return *actualMem; - } - - template <> - float RetrieveFloatValue(const AZ::u8* mem, size_t index) - { - // 32 bits per channel - auto actualMem = reinterpret_cast(mem); - actualMem += index; - - return *actualMem; - } - float RetrieveFloatValue(const AZ::u8* mem, size_t index, AZ::RHI::Format format) { switch (format) { - case AZ::RHI::Format::R32_UINT: - return RetrieveFloatValue(mem, index); + case AZ::RHI::Format::R8_UNORM: + case AZ::RHI::Format::R8_SNORM: + case AZ::RHI::Format::A8_UNORM: + { + return mem[index] / static_cast(std::numeric_limits::max()); + } + case AZ::RHI::Format::R16_FLOAT: + case AZ::RHI::Format::D16_UNORM: + case AZ::RHI::Format::R16_UNORM: + case AZ::RHI::Format::R16_SNORM: + { + return mem[index] / static_cast(std::numeric_limits::max()); + } + case AZ::RHI::Format::D32_FLOAT: case AZ::RHI::Format::R32_FLOAT: - return RetrieveFloatValue(mem, index); + { + auto actualMem = reinterpret_cast(mem); + return actualMem[index]; + } default: return RetrieveFloatValue(mem, index); } @@ -112,10 +83,20 @@ namespace AZ { switch (format) { - case AZ::RHI::Format::R8_UNORM: - return RetrieveUintValue(mem, index); - case AZ::RHI::Format::R16_UNORM: - return RetrieveUintValue(mem, index); + case AZ::RHI::Format::R8_UINT: + { + return mem[index] / static_cast(std::numeric_limits::max()); + } + case AZ::RHI::Format::R16_UINT: + { + auto actualMem = reinterpret_cast(mem); + return actualMem[index] / static_cast(std::numeric_limits::max()); + } + case AZ::RHI::Format::R32_UINT: + { + auto actualMem = reinterpret_cast(mem); + return actualMem[index]; + } default: return RetrieveUintValue(mem, index); } @@ -125,8 +106,20 @@ namespace AZ { switch (format) { + case AZ::RHI::Format::R8_SINT: + { + return mem[index] / static_cast(std::numeric_limits::max()); + } case AZ::RHI::Format::R16_SINT: - return RetrieveIntValue(mem, index); + { + auto actualMem = reinterpret_cast(mem); + return actualMem[index] / static_cast(std::numeric_limits::max()); + } + case AZ::RHI::Format::R32_SINT: + { + auto actualMem = reinterpret_cast(mem); + return actualMem[index]; + } default: return RetrieveIntValue(mem, index); } @@ -292,9 +285,9 @@ namespace AZ auto width = imageDescriptor.m_size.m_width; size_t outValuesIndex = 0; - for (uint32_t x = topLeft.first; x < bottomRight.first; ++x) + for (uint32_t x = topLeft.first; x <= bottomRight.first; ++x) { - for (uint32_t y = topLeft.second; y < bottomRight.second; ++y) + for (uint32_t y = topLeft.second; y <= bottomRight.second; ++y) { size_t imageDataIndex = (y * width) + x; @@ -318,9 +311,9 @@ namespace AZ auto width = imageDescriptor.m_size.m_width; size_t outValuesIndex = 0; - for (uint32_t x = topLeft.first; x < bottomRight.first; ++x) + for (uint32_t x = topLeft.first; x <= bottomRight.first; ++x) { - for (uint32_t y = topLeft.second; y < bottomRight.second; ++y) + for (uint32_t y = topLeft.second; y <= bottomRight.second; ++y) { size_t imageDataIndex = (y * width) + x; @@ -344,9 +337,9 @@ namespace AZ auto width = imageDescriptor.m_size.m_width; size_t outValuesIndex = 0; - for (uint32_t x = topLeft.first; x < bottomRight.first; ++x) + for (uint32_t x = topLeft.first; x <= bottomRight.first; ++x) { - for (uint32_t y = topLeft.second; y < bottomRight.second; ++y) + for (uint32_t y = topLeft.second; y <= bottomRight.second; ++y) { size_t imageDataIndex = (y * width) + x; From 948d72e079eba67ca2b12e21e987ab2a373eab92 Mon Sep 17 00:00:00 2001 From: Chris Galvan Date: Tue, 18 Jan 2022 16:22:25 -0600 Subject: [PATCH 028/284] Fixed logic error for iterating through the image data by region Signed-off-by: Chris Galvan --- .../Source/RPI.Reflect/Image/StreamingImageAsset.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp index 4e664ad3e2..d9aa2f1c23 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp @@ -285,9 +285,9 @@ namespace AZ auto width = imageDescriptor.m_size.m_width; size_t outValuesIndex = 0; - for (uint32_t x = topLeft.first; x <= bottomRight.first; ++x) + for (uint32_t y = topLeft.second; y <= bottomRight.second; ++y) { - for (uint32_t y = topLeft.second; y <= bottomRight.second; ++y) + for (uint32_t x = topLeft.first; x <= bottomRight.first; ++x) { size_t imageDataIndex = (y * width) + x; @@ -311,9 +311,9 @@ namespace AZ auto width = imageDescriptor.m_size.m_width; size_t outValuesIndex = 0; - for (uint32_t x = topLeft.first; x <= bottomRight.first; ++x) + for (uint32_t y = topLeft.second; y <= bottomRight.second; ++y) { - for (uint32_t y = topLeft.second; y <= bottomRight.second; ++y) + for (uint32_t x = topLeft.first; x <= bottomRight.first; ++x) { size_t imageDataIndex = (y * width) + x; @@ -337,9 +337,9 @@ namespace AZ auto width = imageDescriptor.m_size.m_width; size_t outValuesIndex = 0; - for (uint32_t x = topLeft.first; x <= bottomRight.first; ++x) + for (uint32_t y = topLeft.second; y <= bottomRight.second; ++y) { - for (uint32_t y = topLeft.second; y <= bottomRight.second; ++y) + for (uint32_t x = topLeft.first; x <= bottomRight.first; ++x) { size_t imageDataIndex = (y * width) + x; From c2b1cd1be2152718c5e1b7ae74f9b887232a4cd0 Mon Sep 17 00:00:00 2001 From: Chris Galvan Date: Wed, 19 Jan 2022 09:56:54 -0600 Subject: [PATCH 029/284] Fixed bug when retrieving single pixel value Signed-off-by: Chris Galvan --- .../RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp index d9aa2f1c23..80fabc9230 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp @@ -242,6 +242,8 @@ namespace AZ T StreamingImageAsset::GetSubImagePixelValueInternal(uint32_t x, uint32_t y, uint32_t componentIndex, uint32_t mip, uint32_t slice) { AZStd::vector values; + values.resize(1); + auto position = AZStd::make_pair(x, y); GetSubImagePixelValues(position, position, values, componentIndex, mip, slice); From b6b8b464d0e2ad9f5edb4b568fe5ff2c1f5f7689 Mon Sep 17 00:00:00 2001 From: Chris Galvan Date: Wed, 19 Jan 2022 16:53:59 -0600 Subject: [PATCH 030/284] Use AZStd::array instead of AZStd::vector when retrieving a single pixel Signed-off-by: Chris Galvan --- .../Source/RPI.Reflect/Image/StreamingImageAsset.cpp | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp index 80fabc9230..3d810c4c8f 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp @@ -241,19 +241,12 @@ namespace AZ template T StreamingImageAsset::GetSubImagePixelValueInternal(uint32_t x, uint32_t y, uint32_t componentIndex, uint32_t mip, uint32_t slice) { - AZStd::vector values; - values.resize(1); + AZStd::array values = { aznumeric_cast(0) }; auto position = AZStd::make_pair(x, y); - GetSubImagePixelValues(position, position, values, componentIndex, mip, slice); - if (values.size() == 1) - { - return values[0]; - } - - return aznumeric_cast(0); + return values[0]; } template<> From 0bd2083c48335127bc27ac34af2e1741f72a1efd Mon Sep 17 00:00:00 2001 From: Chris Galvan Date: Thu, 20 Jan 2022 10:35:22 -0600 Subject: [PATCH 031/284] Replaced array_view usage with span Signed-off-by: Chris Galvan --- .../Include/Atom/RPI.Reflect/Image/StreamingImageAsset.h | 7 ++++--- .../Source/RPI.Reflect/Image/StreamingImageAsset.cpp | 9 +++++---- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Image/StreamingImageAsset.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Image/StreamingImageAsset.h index f4dc891ff2..93d0392e38 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Image/StreamingImageAsset.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Image/StreamingImageAsset.h @@ -12,6 +12,7 @@ #include #include #include +#include namespace AZ { @@ -90,13 +91,13 @@ namespace AZ T GetSubImagePixelValue(uint32_t x, uint32_t y, uint32_t componentIndex = 0, uint32_t mip = 0, uint32_t slice = 0); //! Retrieve a region of image pixel values (float) for specified mip and slice - void GetSubImagePixelValues(AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::array_view outValues, uint32_t componentIndex = 0, uint32_t mip = 0, uint32_t slice = 0); + void GetSubImagePixelValues(AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::span outValues, uint32_t componentIndex = 0, uint32_t mip = 0, uint32_t slice = 0); //! Retrieve a region of image pixel values (uint) for specified mip and slice - void GetSubImagePixelValues(AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::array_view outValues, uint32_t componentIndex = 0, uint32_t mip = 0, uint32_t slice = 0); + void GetSubImagePixelValues(AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::span outValues, uint32_t componentIndex = 0, uint32_t mip = 0, uint32_t slice = 0); //! Retrieve a region of image pixel values (int) for specified mip and slice - void GetSubImagePixelValues(AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::array_view outValues, uint32_t componentIndex = 0, uint32_t mip = 0, uint32_t slice = 0); + void GetSubImagePixelValues(AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::span outValues, uint32_t componentIndex = 0, uint32_t mip = 0, uint32_t slice = 0); //! Returns streaming image pool asset id of the pool that will be used to create the streaming image. const Data::AssetId& GetPoolAssetId() const; diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp index 3d810c4c8f..099f9c3df9 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp @@ -244,7 +244,8 @@ namespace AZ AZStd::array values = { aznumeric_cast(0) }; auto position = AZStd::make_pair(x, y); - GetSubImagePixelValues(position, position, values, componentIndex, mip, slice); + AZStd::span valueSpan(values.begin(), values.size()); + GetSubImagePixelValues(position, position, valueSpan, componentIndex, mip, slice); return values[0]; } @@ -267,7 +268,7 @@ namespace AZ return GetSubImagePixelValueInternal(x, y, componentIndex, mip, slice); } - void StreamingImageAsset::GetSubImagePixelValues(AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::array_view outValues, uint32_t componentIndex, uint32_t mip, uint32_t slice) + void StreamingImageAsset::GetSubImagePixelValues(AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::span outValues, uint32_t componentIndex, uint32_t mip, uint32_t slice) { // TODO: Use the component index (void)componentIndex; @@ -293,7 +294,7 @@ namespace AZ } } - void StreamingImageAsset::GetSubImagePixelValues(AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::array_view outValues, uint32_t componentIndex, uint32_t mip, uint32_t slice) + void StreamingImageAsset::GetSubImagePixelValues(AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::span outValues, uint32_t componentIndex, uint32_t mip, uint32_t slice) { // TODO: Use the component index (void)componentIndex; @@ -319,7 +320,7 @@ namespace AZ } } - void StreamingImageAsset::GetSubImagePixelValues(AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::array_view outValues, uint32_t componentIndex, uint32_t mip, uint32_t slice) + void StreamingImageAsset::GetSubImagePixelValues(AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::span outValues, uint32_t componentIndex, uint32_t mip, uint32_t slice) { // TODO: Use the component index (void)componentIndex; From cdcf8defd03dbabbbd2d9538ed81eae068faf08a Mon Sep 17 00:00:00 2001 From: Chris Galvan Date: Thu, 20 Jan 2022 13:53:51 -0600 Subject: [PATCH 032/284] Added special case support for R8_SNORM, R16_SNORM, and R16_FLOAT Signed-off-by: Chris Galvan --- .../RPI.Reflect/Image/StreamingImageAsset.cpp | 103 +++++++++++++++++- 1 file changed, 100 insertions(+), 3 deletions(-) diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp index 099f9c3df9..aaf232d4f0 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp @@ -15,6 +15,84 @@ namespace AZ { namespace Internal { + // The original implementation was from cryhalf's CryConvertFloatToHalf and CryConvertHalfToFloat function + // Will be replaced with centralized half float API + struct SHalf + { + explicit SHalf(float floatValue) + { + AZ::u32 Result; + + AZ::u32 intValue = ((AZ::u32*)(&floatValue))[0]; + AZ::u32 Sign = (intValue & 0x80000000U) >> 16U; + intValue = intValue & 0x7FFFFFFFU; + + if (intValue > 0x47FFEFFFU) + { + // The number is too large to be represented as a half. Saturate to infinity. + Result = 0x7FFFU; + } + else + { + if (intValue < 0x38800000U) + { + // The number is too small to be represented as a normalized half. + // Convert it to a denormalized value. + AZ::u32 Shift = 113U - (intValue >> 23U); + intValue = (0x800000U | (intValue & 0x7FFFFFU)) >> Shift; + } + else + { + // Rebias the exponent to represent the value as a normalized half. + intValue += 0xC8000000U; + } + + Result = ((intValue + 0x0FFFU + ((intValue >> 13U) & 1U)) >> 13U) & 0x7FFFU; + } + h = static_cast(Result | Sign); + } + + operator float() const + { + AZ::u32 Mantissa; + AZ::u32 Exponent; + AZ::u32 Result; + + Mantissa = h & 0x03FF; + + if ((h & 0x7C00) != 0) // The value is normalized + { + Exponent = ((h >> 10) & 0x1F); + } + else if (Mantissa != 0) // The value is denormalized + { + // Normalize the value in the resulting float + Exponent = 1; + + do + { + Exponent--; + Mantissa <<= 1; + } while ((Mantissa & 0x0400) == 0); + + Mantissa &= 0x03FF; + } + else // The value is zero + { + Exponent = static_cast(-112); + } + + Result = ((h & 0x8000) << 16) | // Sign + ((Exponent + 112) << 23) | // Exponent + (Mantissa << 13); // Mantissa + + return *(float*)&Result; + } + + private: + AZ::u16 h; + }; + template float RetrieveFloatValue(const AZ::u8* mem, size_t index) { @@ -51,23 +129,42 @@ namespace AZ return 0; } + float ScaleValue(float value, float origMin, float origMax, float scaledMin, float scaledMax) + { + return ((value - origMin) / (origMax - origMin)) * (scaledMax - scaledMin) + scaledMin; + } + float RetrieveFloatValue(const AZ::u8* mem, size_t index, AZ::RHI::Format format) { switch (format) { case AZ::RHI::Format::R8_UNORM: - case AZ::RHI::Format::R8_SNORM: case AZ::RHI::Format::A8_UNORM: { return mem[index] / static_cast(std::numeric_limits::max()); } - case AZ::RHI::Format::R16_FLOAT: + case AZ::RHI::Format::R8_SNORM: + { + // Scale the value from AZ::s8 min/max to -1 to 1 + auto actualMem = reinterpret_cast(mem); + return ScaleValue(actualMem[index], std::numeric_limits::min(), std::numeric_limits::max(), -1, 1); + } case AZ::RHI::Format::D16_UNORM: case AZ::RHI::Format::R16_UNORM: - case AZ::RHI::Format::R16_SNORM: { return mem[index] / static_cast(std::numeric_limits::max()); } + case AZ::RHI::Format::R16_SNORM: + { + // Scale the value from AZ::s16 min/max to -1 to 1 + auto actualMem = reinterpret_cast(mem); + return ScaleValue(actualMem[index], std::numeric_limits::min(), std::numeric_limits::max(), -1, 1); + } + case AZ::RHI::Format::R16_FLOAT: + { + auto actualMem = reinterpret_cast(mem); + return SHalf(actualMem[index]); + } case AZ::RHI::Format::D32_FLOAT: case AZ::RHI::Format::R32_FLOAT: { From 4a7e00f12534e2f4cbc2a5fc119d9166c4a06c3c Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 20 Jan 2022 14:02:57 -0800 Subject: [PATCH 033/284] Removes call to DisableOverride which was removed with the OverrideShim Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Framework/AzCore/AzCore/DOM/DomValue.h | 1 - 1 file changed, 1 deletion(-) diff --git a/Code/Framework/AzCore/AzCore/DOM/DomValue.h b/Code/Framework/AzCore/AzCore/DOM/DomValue.h index d1d3c1745d..ec0a5fb267 100644 --- a/Code/Framework/AzCore/AzCore/DOM/DomValue.h +++ b/Code/Framework/AzCore/AzCore/DOM/DomValue.h @@ -51,7 +51,6 @@ namespace AZ::Dom ValueAllocator() : Base("DomValueAllocator", "Allocator for AZ::Dom::Value") { - DisableOverriding(); } }; From c090ad6a5697f1ee58b08f744825d4d2d2fbb796 Mon Sep 17 00:00:00 2001 From: Chris Galvan Date: Thu, 20 Jan 2022 16:10:42 -0600 Subject: [PATCH 034/284] Account for the pixel size when computing the image data index Signed-off-by: Chris Galvan --- .../Source/RPI.Reflect/Image/StreamingImageAsset.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp index aaf232d4f0..e2268dbdd8 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp @@ -376,13 +376,14 @@ namespace AZ { const AZ::RHI::ImageDescriptor imageDescriptor = GetImageDescriptor(); auto width = imageDescriptor.m_size.m_width; + const uint32_t pixelSize = AZ::RHI::GetFormatSize(imageDescriptor.m_format); size_t outValuesIndex = 0; for (uint32_t y = topLeft.second; y <= bottomRight.second; ++y) { for (uint32_t x = topLeft.first; x <= bottomRight.first; ++x) { - size_t imageDataIndex = (y * width) + x; + size_t imageDataIndex = (y * width * pixelSize) + (x * pixelSize); auto& outValue = const_cast(outValues[outValuesIndex++]); outValue = Internal::RetrieveFloatValue(imageData.data(), imageDataIndex, imageDescriptor.m_format); @@ -402,13 +403,14 @@ namespace AZ { const AZ::RHI::ImageDescriptor imageDescriptor = GetImageDescriptor(); auto width = imageDescriptor.m_size.m_width; + const uint32_t pixelSize = AZ::RHI::GetFormatSize(imageDescriptor.m_format); size_t outValuesIndex = 0; for (uint32_t y = topLeft.second; y <= bottomRight.second; ++y) { for (uint32_t x = topLeft.first; x <= bottomRight.first; ++x) { - size_t imageDataIndex = (y * width) + x; + size_t imageDataIndex = (y * width * pixelSize) + (x * pixelSize); auto& outValue = const_cast(outValues[outValuesIndex++]); outValue = Internal::RetrieveUintValue(imageData.data(), imageDataIndex, imageDescriptor.m_format); @@ -428,13 +430,14 @@ namespace AZ { const AZ::RHI::ImageDescriptor imageDescriptor = GetImageDescriptor(); auto width = imageDescriptor.m_size.m_width; + const uint32_t pixelSize = AZ::RHI::GetFormatSize(imageDescriptor.m_format); size_t outValuesIndex = 0; for (uint32_t y = topLeft.second; y <= bottomRight.second; ++y) { for (uint32_t x = topLeft.first; x <= bottomRight.first; ++x) { - size_t imageDataIndex = (y * width) + x; + size_t imageDataIndex = (y * width * pixelSize) + (x * pixelSize); auto& outValue = const_cast(outValues[outValuesIndex++]); outValue = Internal::RetrieveIntValue(imageData.data(), imageDataIndex, imageDescriptor.m_format); From 6be0543fc16b9c5c019aac9bb256cd8ea7772f67 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 8 Nov 2021 14:02:26 -0800 Subject: [PATCH 035/284] Adds script to brute-force detect unused files Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- scripts/cleanup/unusued_compilation.py | 102 +++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 scripts/cleanup/unusued_compilation.py diff --git a/scripts/cleanup/unusued_compilation.py b/scripts/cleanup/unusued_compilation.py new file mode 100644 index 0000000000..25fa4ca3ce --- /dev/null +++ b/scripts/cleanup/unusued_compilation.py @@ -0,0 +1,102 @@ +# +# 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 argparse +import os +import shutil +import sys +sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), '../build')) +import ci_build + +EXTENSIONS_OF_INTEREST = ('.c', '.cc', '.cpp', '.cxx', '.h', '.hpp', '.hxx', '.inl') +EXCLUSIONS = ('AZ_DECLARE_MODULE_CLASS') + +def create_filelist(path): + filelist = set() + for input_file in path: + if os.path.isdir(input_file): + for dp, dn, filenames in os.walk(input_file): + if 'build\\windows_vs2019' in dp: + continue + for f in filenames: + extension = os.path.splitext(f)[1] + extension_lower = extension.lower() + if extension_lower in EXTENSIONS_OF_INTEREST: + filelist.add(os.path.join(dp, f)) + else: + extension = os.path.splitext(input_file)[1] + extension_lower = extension.lower() + if extension_lower in EXTENSIONS_OF_INTEREST: + filelist.add(os.path.join(os.getcwd(), input_file)) + else: + print(f'Error, file {input_file} does not have an extension of interest') + sys.exit(1) + return filelist + +def is_excluded(file): + normalized_file = os.path.normpath(file) + if '\\Platform\\' in normalized_file and not '\\Windows\\' in normalized_file: + return True + return False + +def filter_from_processed(filelist, filter_file_path): + if not os.path.exists(filter_file_path): + return # nothing to filter + + with open(filter_file_path, 'r') as filter_file: + try: + processed_files = [s.strip() for s in filter_file.readlines()] + except UnicodeDecodeError as err: + print('Error reading file {}, err: {}'.format(filter_file_path, err)) + sys.exit(1) + filelist -= set(processed_files) + filelist = [f for f in filelist if not is_excluded(f)] + +def cleanup_unused_compilation(path): + # 1. Create a list of all h/cpp files (consider multiple extensions) + filelist = create_filelist(path) + # 2. Remove files from "processed" list. This is needed because the process is a bruteforce approach and + # can take a while. If something is found in the middle, we want to be able to continue instead of + # starting over. Removing the "unusued_compilation_processed.txt" will start over. + filter_file_path = os.path.join(os.getcwd(), 'unusued_compilation_processed.txt') + filter_from_processed(filelist, filter_file_path) + # 3. For each file + total_files = len(filelist) + current_files = 1 + for file in filelist: + print(f"[{current_files}/{total_files}] Trying {file}") + # b. create backup + shutil.copy(file, file + '.bak') + # c. set the file contents as empty + with open(file, 'w') as source_file: + source_file.write('') + # d. build + ret = ci_build.build('build_config.json', 'Windows', 'profile_vs2019') + # e.1 if build succeeds, leave the file empty (leave backup) + # e.2 if build fails, restore backup + if ret != 0: + shutil.copy(file + '.bak', file) + print(f"\t[FAILED] restoring") + else: + print(f"\t[SUCCEED]") + # f. delete backup + os.remove(file + '.bak') + # add file to processed-list + with open(filter_file_path, 'a') as filter_file: + filter_file.write(file) + filter_file.write('\n') + current_files += 1 + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description='This script finds C++ files that do not affect compilation (and therefore can be potentially removed)', + formatter_class=argparse.RawTextHelpFormatter) + parser.add_argument('file_or_dir', type=str, nargs='+', default=os.getcwd(), + help='list of files or directories to search within for files to consider') + args = parser.parse_args() + ret = cleanup_unused_compilation(args.file_or_dir) + sys.exit(ret) From 7c77f211846762d1312f4f100e3324ca7d021692 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 8 Nov 2021 15:45:57 -0800 Subject: [PATCH 036/284] =?UTF-8?q?=EF=BB=BFremoves=20BaseLibrary/Item/Man?= =?UTF-8?q?ager=20unused=20code=20from=20Code/Editor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Editor/ErrorRecorder.h | 2 +- Code/Editor/IEditor.h | 7 +------ 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/Code/Editor/ErrorRecorder.h b/Code/Editor/ErrorRecorder.h index beacc3f0e5..9a0bad7d91 100644 --- a/Code/Editor/ErrorRecorder.h +++ b/Code/Editor/ErrorRecorder.h @@ -14,7 +14,7 @@ #define CRYINCLUDE_EDITOR_CORE_ERRORRECORDER_H #pragma once -#include "Include/EditorCoreAPI.h" +#include ////////////////////////////////////////////////////////////////////////// //! Automatic class to record and display error. diff --git a/Code/Editor/IEditor.h b/Code/Editor/IEditor.h index 90f1b63f55..df7d8d8dd3 100644 --- a/Code/Editor/IEditor.h +++ b/Code/Editor/IEditor.h @@ -326,12 +326,7 @@ enum MouseCallbackFlags //! Types of database items enum EDataBaseItemType { - EDB_TYPE_MATERIAL, - EDB_TYPE_PARTICLE, - EDB_TYPE_MUSIC, - EDB_TYPE_EAXPRESET, - EDB_TYPE_SOUNDMOOD, - EDB_TYPE_FLARE + EDB_TYPE_UNUSED }; enum EEditorPathName From 412cf851a01d6aa50ea694c6bbb6806cbe3ac109 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 8 Nov 2021 16:02:28 -0800 Subject: [PATCH 037/284] =?UTF-8?q?=EF=BB=BFRemoves=20DataBaseItem/Library?= =?UTF-8?q?/Manager=20from=20Code/Editor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Editor/IEditor.h | 6 ------ 1 file changed, 6 deletions(-) diff --git a/Code/Editor/IEditor.h b/Code/Editor/IEditor.h index df7d8d8dd3..fa20481192 100644 --- a/Code/Editor/IEditor.h +++ b/Code/Editor/IEditor.h @@ -323,12 +323,6 @@ enum MouseCallbackFlags MK_CALLBACK_FLAGS = 0x100 }; -//! Types of database items -enum EDataBaseItemType -{ - EDB_TYPE_UNUSED -}; - enum EEditorPathName { EDITOR_PATH_OBJECTS, From b3bd293390f59e282ea1a1f4ab6771982a032866 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 8 Nov 2021 16:41:46 -0800 Subject: [PATCH 038/284] =?UTF-8?q?=EF=BB=BFRemoves=20ConfigGroup=20from?= =?UTF-8?q?=20Code/Editor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Editor/ConfigGroup.cpp | 195 ----------------------------- Code/Editor/ConfigGroup.h | 113 ----------------- Code/Editor/editor_lib_files.cmake | 2 - 3 files changed, 310 deletions(-) delete mode 100644 Code/Editor/ConfigGroup.cpp delete mode 100644 Code/Editor/ConfigGroup.h diff --git a/Code/Editor/ConfigGroup.cpp b/Code/Editor/ConfigGroup.cpp deleted file mode 100644 index 42236e43dd..0000000000 --- a/Code/Editor/ConfigGroup.cpp +++ /dev/null @@ -1,195 +0,0 @@ -/* - * 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 "EditorDefs.h" - -#include "ConfigGroup.h" - -namespace Config -{ - CConfigGroup::CConfigGroup() - { - } - - CConfigGroup::~CConfigGroup() - { - for (IConfigVar* var : m_vars) - { - delete var; - } - } - - void CConfigGroup::AddVar(IConfigVar* var) - { - m_vars.push_back(var); - } - - AZ::u32 CConfigGroup::GetVarCount() - { - return aznumeric_cast(m_vars.size()); - } - - IConfigVar* CConfigGroup::GetVar(const char* szName) - { - for (IConfigVar* var : m_vars) - { - if (0 == _stricmp(szName, var->GetName().c_str())) - { - return var; - } - } - - return nullptr; - } - - const IConfigVar* CConfigGroup::GetVar(const char* szName) const - { - for (const IConfigVar* var : m_vars) - { - if (0 == _stricmp(szName, var->GetName().c_str())) - { - return var; - } - - } - - return nullptr; - } - - IConfigVar* CConfigGroup::GetVar(AZ::u32 index) - { - if (index < m_vars.size()) - { - return m_vars[index]; - } - - return nullptr; - } - - const IConfigVar* CConfigGroup::GetVar(AZ::u32 index) const - { - if (index < m_vars.size()) - { - return m_vars[index]; - } - - return nullptr; - } - - void CConfigGroup::SaveToXML(XmlNodeRef node) - { - // save only values that don't have default values - for (const IConfigVar* var : m_vars) - { - if (var->IsFlagSet(IConfigVar::eFlag_DoNotSave) || var->IsDefault()) - { - continue; - } - - const char* szName = var->GetName().c_str(); - - switch (var->GetType()) - { - case IConfigVar::eType_BOOL: - { - bool currentValue = false; - var->Get(¤tValue); - node->setAttr(szName, currentValue); - break; - } - - case IConfigVar::eType_INT: - { - int currentValue = 0; - var->Get(¤tValue); - node->setAttr(szName, currentValue); - break; - } - - case IConfigVar::eType_FLOAT: - { - float currentValue = 0; - var->Get(¤tValue); - node->setAttr(szName, currentValue); - break; - } - - case IConfigVar::eType_STRING: - { - AZStd::string currentValue; - var->Get(¤tValue); - node->setAttr(szName, currentValue.c_str()); - break; - } - } - } - } - - void CConfigGroup::LoadFromXML(XmlNodeRef node) - { - // load values that are save-able - for (IConfigVar* var : m_vars) - { - if (var->IsFlagSet(IConfigVar::eFlag_DoNotSave)) - { - continue; - } - const char* szName = var->GetName().c_str(); - - switch (var->GetType()) - { - case IConfigVar::eType_BOOL: - { - bool currentValue = false; - var->GetDefault(¤tValue); - if (node->getAttr(szName, currentValue)) - { - var->Set(¤tValue); - } - break; - } - - case IConfigVar::eType_INT: - { - int currentValue = 0; - var->GetDefault(¤tValue); - if (node->getAttr(szName, currentValue)) - { - var->Set(¤tValue); - } - break; - } - - case IConfigVar::eType_FLOAT: - { - float currentValue = 0; - var->GetDefault(¤tValue); - if (node->getAttr(szName, currentValue)) - { - var->Set(¤tValue); - } - break; - } - - case IConfigVar::eType_STRING: - { - AZStd::string currentValue; - var->GetDefault(¤tValue); - QString readValue(currentValue.c_str()); - if (node->getAttr(szName, readValue)) - { - currentValue = readValue.toUtf8().data(); - var->Set(¤tValue); - } - break; - } - } - } - } -} diff --git a/Code/Editor/ConfigGroup.h b/Code/Editor/ConfigGroup.h deleted file mode 100644 index 004725e32c..0000000000 --- a/Code/Editor/ConfigGroup.h +++ /dev/null @@ -1,113 +0,0 @@ -/* - * 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 -#include -#include -#include - -struct ICVar; -class XmlNodeRef; - -namespace Config -{ - // Abstract configurable variable - struct IConfigVar - { - public: - enum EType - { - eType_BOOL, - eType_INT, - eType_FLOAT, - eType_STRING, - }; - - enum EFlags - { - eFlag_NoUI = 1 << 0, - eFlag_NoCVar = 1 << 1, - eFlag_DoNotSave = 1 << 2, - }; - - IConfigVar(const char* szName, const char* szDescription, EType varType, AZ::u8 flags) - : m_name(szName) - , m_description(szDescription) - , m_type(varType) - , m_flags(flags) - , m_ptr(nullptr) - {}; - - virtual ~IConfigVar() = default; - - AZ_FORCE_INLINE EType GetType() const - { - return m_type; - } - - AZ_FORCE_INLINE const AZStd::string& GetName() const - { - return m_name; - } - - AZ_FORCE_INLINE const AZStd::string& GetDescription() const - { - return m_description; - } - - AZ_FORCE_INLINE bool IsFlagSet(EFlags flag) const - { - return 0 != (m_flags & flag); - } - - virtual void Get(void* outPtr) const = 0; - virtual void Set(const void* ptr) = 0; - virtual bool IsDefault() const = 0; - virtual void GetDefault(void* outPtr) const = 0; - virtual void Reset() = 0; - - static constexpr EType TranslateType(const bool&) { return eType_BOOL; } - static constexpr EType TranslateType(const int&) { return eType_INT; } - static constexpr EType TranslateType(const float&) { return eType_FLOAT; } - static constexpr EType TranslateType(const AZStd::string&) { return eType_STRING; } - - protected: - EType m_type; - AZ::u8 m_flags; - AZStd::string m_name; - AZStd::string m_description; - void* m_ptr; - ICVar* m_pCVar; - }; - - // Group of configuration variables with optional mapping to CVars - class CConfigGroup - { - private: - using TConfigVariables = AZStd::vector ; - TConfigVariables m_vars; - - using TConsoleVariables = AZStd::vector; - TConsoleVariables m_consoleVars; - - public: - CConfigGroup(); - virtual ~CConfigGroup(); - - void AddVar(IConfigVar* var); - AZ::u32 GetVarCount(); - IConfigVar* GetVar(const char* szName); - IConfigVar* GetVar(AZ::u32 index); - const IConfigVar* GetVar(const char* szName) const; - const IConfigVar* GetVar(AZ::u32 index) const; - - void SaveToXML(XmlNodeRef node); - void LoadFromXML(XmlNodeRef node); - }; -}; diff --git a/Code/Editor/editor_lib_files.cmake b/Code/Editor/editor_lib_files.cmake index 5d45bbd853..698fa65e9c 100644 --- a/Code/Editor/editor_lib_files.cmake +++ b/Code/Editor/editor_lib_files.cmake @@ -631,8 +631,6 @@ set(FILES TrackView/TrackViewSequence.h TrackView/TrackViewNodeFactories.h TrackView/TrackViewEventNode.h - ConfigGroup.cpp - ConfigGroup.h Util/AffineParts.h Util/AutoLogTime.cpp Util/AutoLogTime.h From 51ecbbca818eebbdbbdb94c66dee46eb3c2a45c9 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 8 Nov 2021 16:50:49 -0800 Subject: [PATCH 039/284] =?UTF-8?q?=EF=BB=BFRemoves=20ResizeResolutionDial?= =?UTF-8?q?og=20from=20Code/Editor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Editor/ResizeResolutionDialog.cpp | 119 ------------------------- Code/Editor/ResizeResolutionDialog.h | 46 ---------- Code/Editor/ResizeResolutionDialog.ui | 58 ------------ Code/Editor/editor_lib_files.cmake | 3 - 4 files changed, 226 deletions(-) delete mode 100644 Code/Editor/ResizeResolutionDialog.cpp delete mode 100644 Code/Editor/ResizeResolutionDialog.h delete mode 100644 Code/Editor/ResizeResolutionDialog.ui diff --git a/Code/Editor/ResizeResolutionDialog.cpp b/Code/Editor/ResizeResolutionDialog.cpp deleted file mode 100644 index f2a03fb1b2..0000000000 --- a/Code/Editor/ResizeResolutionDialog.cpp +++ /dev/null @@ -1,119 +0,0 @@ -/* - * 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 "EditorDefs.h" - -#include "ResizeResolutionDialog.h" - -AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING -#include -AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING - -class ResizeResolutionModel - : public QAbstractListModel -{ -public: - ResizeResolutionModel(QObject* parent = nullptr); - - int rowCount(const QModelIndex& parent = {}) const override; - int columnCount(const QModelIndex& parent = {}) const override; - QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; - - int SizeRow(uint32 dwSize) const; - -private: - static const int kNumSizes = 6; -}; - -ResizeResolutionModel::ResizeResolutionModel(QObject* parent) - : QAbstractListModel(parent) -{ -} - -int ResizeResolutionModel::rowCount(const QModelIndex& parent) const -{ - return parent.isValid() ? 0 : kNumSizes; -} - -int ResizeResolutionModel::columnCount(const QModelIndex& parent) const -{ - return parent.isValid() ? 0 : 1; -} - -QVariant ResizeResolutionModel::data(const QModelIndex& index, int role) const -{ - if (!index.isValid() || index.column() > 0 || index.row() >= kNumSizes) - { - return {}; - } - - const int size = 64 * (1 << index.row()); - - switch (role) - { - case Qt::DisplayRole: - return QStringLiteral("%1x%2").arg(size).arg(size); - - case Qt::UserRole: - return size; - } - - return {}; -} - -int ResizeResolutionModel::SizeRow(uint32 dwSize) const -{ - // not a power of 2? - if (dwSize & (dwSize - 1)) - { - return 0; - } - - int row = 0; - - for (auto i = dwSize / 64; i > 1; i >>= 1) - { - ++row; - } - - return row; -} - -///////////////////////////////////////////////////////////////////////////// -// CResizeResolutionDialog dialog - - -CResizeResolutionDialog::CResizeResolutionDialog(QWidget* pParent /*=nullptr*/) - : QDialog(pParent) - , m_model(new ResizeResolutionModel(this)) - , ui(new Ui::CResizeResolutionDialog) -{ - ui->setupUi(this); - - ui->m_resolution->setModel(m_model); - - connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept); - connect(ui->buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject); -} - -CResizeResolutionDialog::~CResizeResolutionDialog() -{ -} - -///////////////////////////////////////////////////////////////////////////// -void CResizeResolutionDialog::SetSize(uint32 dwSize) -{ - ui->m_resolution->setCurrentIndex(m_model->SizeRow(dwSize)); -} - -///////////////////////////////////////////////////////////////////////////// -uint32 CResizeResolutionDialog::GetSize() -{ - return ui->m_resolution->itemData(ui->m_resolution->currentIndex()).toInt(); -} diff --git a/Code/Editor/ResizeResolutionDialog.h b/Code/Editor/ResizeResolutionDialog.h deleted file mode 100644 index 123075688f..0000000000 --- a/Code/Editor/ResizeResolutionDialog.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * 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 - * - */ - - -#ifndef CRYINCLUDE_EDITOR_RESIZERESOLUTIONDIALOG_H -#define CRYINCLUDE_EDITOR_RESIZERESOLUTIONDIALOG_H - -#pragma once -// ResizeResolutionDialog.h : header file -// - -#if !defined(Q_MOC_RUN) -#include -#endif - -namespace Ui { - class CResizeResolutionDialog; -} - -class ResizeResolutionModel; - -///////////////////////////////////////////////////////////////////////////// -// CResizeResolutionDialog dialog - -class CResizeResolutionDialog - : public QDialog -{ - // Construction -public: - CResizeResolutionDialog(QWidget* pParent = nullptr); // standard constructor - ~CResizeResolutionDialog(); - - void SetSize(uint32 dwSize); - uint32 GetSize(); - -private: - ResizeResolutionModel* m_model; - QScopedPointer ui; -}; - -#endif // CRYINCLUDE_EDITOR_RESIZERESOLUTIONDIALOG_H diff --git a/Code/Editor/ResizeResolutionDialog.ui b/Code/Editor/ResizeResolutionDialog.ui deleted file mode 100644 index c958e6acaf..0000000000 --- a/Code/Editor/ResizeResolutionDialog.ui +++ /dev/null @@ -1,58 +0,0 @@ - - - CResizeResolutionDialog - - - - 0 - 0 - 250 - 96 - - - - - - - - - - 0 - 0 - - - - Select resolution: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - - - - QFrame::HLine - - - QFrame::Sunken - - - - - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - - - - - diff --git a/Code/Editor/editor_lib_files.cmake b/Code/Editor/editor_lib_files.cmake index 698fa65e9c..36a45905bd 100644 --- a/Code/Editor/editor_lib_files.cmake +++ b/Code/Editor/editor_lib_files.cmake @@ -392,9 +392,6 @@ set(FILES QuickAccessBar.cpp QuickAccessBar.h QuickAccessBar.ui - ResizeResolutionDialog.cpp - ResizeResolutionDialog.h - ResizeResolutionDialog.ui SelectLightAnimationDialog.cpp SelectLightAnimationDialog.h SelectSequenceDialog.cpp From 37a1b8d8202d5a5d2623813f64bb112ceeaa55e0 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 8 Nov 2021 16:59:22 -0800 Subject: [PATCH 040/284] Removes AssetBrowserWindow unused files Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../AzAssetBrowser/AssetBrowserWindow.cpp | 73 ------------------- .../AzAssetBrowser/AssetBrowserWindow.h | 57 --------------- 2 files changed, 130 deletions(-) delete mode 100644 Code/Editor/AzAssetBrowser/AssetBrowserWindow.cpp delete mode 100644 Code/Editor/AzAssetBrowser/AssetBrowserWindow.h diff --git a/Code/Editor/AzAssetBrowser/AssetBrowserWindow.cpp b/Code/Editor/AzAssetBrowser/AssetBrowserWindow.cpp deleted file mode 100644 index 1a45d1e391..0000000000 --- a/Code/Editor/AzAssetBrowser/AssetBrowserWindow.cpp +++ /dev/null @@ -1,73 +0,0 @@ -/* - * 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 "AzAssetBrowserWindow.h" -#include "AzAssetBrowser/ui_AssetBrowserWindow.h" - -#include -#include -#include -#include -#include - -const char* ASSET_BROWSER_PREVIEW_NAME = "Asset Browser (PREVIEW)"; - -AzAssetBrowserWindow::AzAssetBrowserWindow(const QString& name, QWidget* parent) - : QDialog(parent) - , m_ui(new Ui::AssetBrowserWindowClass()) - , m_assetDatabaseSortFilterProxyModel(new AssetBrowser::UI::SortFilterProxyModel(parent)) - , m_name(name) - , m_assetBrowser(new AssetBrowser::UI::AssetTreeView(name, this)) - { - EBUS_EVENT_RESULT(m_assetBrowserModel, AssetBrowser::AssetCache::AssetCacheRequestsBus, GetAssetBrowserModel); - AZ_Assert(m_assetBrowserModel, "Failed to get filebrowser model"); - m_assetDatabaseSortFilterProxyModel->setSourceModel(m_assetBrowserModel); - - m_ui->setupUi(this); - - connect(m_ui->searchCriteriaWidget, - &AzToolsFramework::SearchCriteriaWidget::SearchCriteriaChanged, - m_assetDatabaseSortFilterProxyModel.data(), - &AssetBrowser::UI::SortFilterProxyModel::OnSearchCriteriaChanged); - - connect(m_assetBrowser, &QTreeView::customContextMenuRequested, this, &AzAssetBrowserWindow::OnContextMenu); - } - - AzAssetBrowserWindow::~AzAssetBrowserWindow() - { - m_assetBrowser->SaveState(); - } - - ////////////////////////////////////////////////////////////////////////// - const AZ::Uuid& AzAssetBrowserWindow::GetClassID() - { - return AZ::AzTypeInfo::Uuid(); - } - - void AzAssetBrowserWindow::OnContextMenu(const QPoint& point) - { - (void)point; - //get the selected entries - QModelIndexList sourceIndexes; - for (const auto& index : m_assetBrowser->selectedIndexes()) - { - sourceIndexes.push_back(m_assetDatabaseSortFilterProxyModel->mapToSource(index)); - } - AZStd::vector entries; - m_assetBrowserModel->SourceIndexesToAssetDatabaseEntries(sourceIndexes, entries); - - if (entries.empty() || entries.size() > 1) - { - return; - } - auto entry = entries.front(); - - EBUS_EVENT(AssetBrowser::AssetBrowserRequestBus::Bus, OnItemContextMenu, this, entry); - } - -#include - diff --git a/Code/Editor/AzAssetBrowser/AssetBrowserWindow.h b/Code/Editor/AzAssetBrowser/AssetBrowserWindow.h deleted file mode 100644 index a16cc4b494..0000000000 --- a/Code/Editor/AzAssetBrowser/AssetBrowserWindow.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * 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 - -#if !defined(Q_MOC_RUN) -#include -#include - -#include -#endif - -namespace Ui -{ - class AssetBrowserWindowClass; -} - -namespace AssetBrowser -{ - namespace UI - { - class AssetTreeView; - class SortFilterProxyModel; - class AssetBrowserModel; - } -} - -class AzAssetBrowserWindow - : public QDialog -{ - Q_OBJECT -public: - AZ_CLASS_ALLOCATOR(AzAssetBrowserWindow, AZ::SystemAllocator, 0); - AZ_TYPE_INFO(AzAssetBrowserWindow, "{20238D23-2670-44BC-9110-A51374C18B5A}"); - - explicit AzAssetBrowserWindow(const QString& name = "default", QWidget* parent = nullptr); - virtual ~AzAssetBrowserWindow(); - - static const AZ::Uuid& GetClassID(); - -protected Q_SLOTS: - void OnContextMenu(const QPoint& point); - -private: - QScopedPointer m_ui; - QScopedPointer m_assetDatabaseModel; - QScopedPointer m_assetDatabaseSortFilterProxyModel; - QString m_name; - AssetBrowser::UI::AssetTreeView* m_assetBrowser; - AssetBrowser::UI::AssetBrowserModel* m_assetBrowserModel; -}; - -extern const char* ASSET_BROWSER_PREVIEW_NAME; From b3c2a716adc6c9f325def37b1469d627d899e228 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 8 Nov 2021 18:19:53 -0800 Subject: [PATCH 041/284] Removes PropertyAnimationCtrl from Code/Editor Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../PropertyAnimationCtrl.cpp | 131 ------------------ .../PropertyAnimationCtrl.h | 78 ----------- 2 files changed, 209 deletions(-) delete mode 100644 Code/Editor/Controls/ReflectedPropertyControl/PropertyAnimationCtrl.cpp delete mode 100644 Code/Editor/Controls/ReflectedPropertyControl/PropertyAnimationCtrl.h diff --git a/Code/Editor/Controls/ReflectedPropertyControl/PropertyAnimationCtrl.cpp b/Code/Editor/Controls/ReflectedPropertyControl/PropertyAnimationCtrl.cpp deleted file mode 100644 index 4fb18e438c..0000000000 --- a/Code/Editor/Controls/ReflectedPropertyControl/PropertyAnimationCtrl.cpp +++ /dev/null @@ -1,131 +0,0 @@ -/* - * 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 "EditorDefs.h" - -#include "PropertyAnimationCtrl.h" - -// Qt -#include -#include -#include - -// Editor -#include "Util/UIEnumerations.h" -#include "IResourceSelectorHost.h" - -AnimationPropertyCtrl::AnimationPropertyCtrl(QWidget *pParent) - : QWidget(pParent) -{ - m_animationLabel = new QLabel; - - m_pApplyButton = new QToolButton; - m_pApplyButton->setIcon(QIcon(":/reflectedPropertyCtrl/img/apply.png")); - - m_pApplyButton->setFocusPolicy(Qt::StrongFocus); - - QHBoxLayout *pLayout = new QHBoxLayout(this); - pLayout->setContentsMargins(0, 0, 0, 0); - pLayout->addWidget(m_animationLabel, 1); - pLayout->addWidget(m_pApplyButton); - - connect(m_pApplyButton, &QAbstractButton::clicked, this, &AnimationPropertyCtrl::OnApplyClicked); -}; - -AnimationPropertyCtrl::~AnimationPropertyCtrl() -{ -} - - -void AnimationPropertyCtrl::SetValue(const CReflectedVarAnimation &animation) -{ - m_animation = animation; - m_animationLabel->setText(animation.m_animation.c_str()); -} - -CReflectedVarAnimation AnimationPropertyCtrl::value() const -{ - return m_animation; -} - -void AnimationPropertyCtrl::OnApplyClicked() -{ - QStringList cSelectedAnimations; - int nTotalAnimations(0); - int nCurrentAnimation(0); - - QString combinedString = GetIEditor()->GetResourceSelectorHost()->GetGlobalSelection("animation"); - SplitString(combinedString, cSelectedAnimations, ','); - - nTotalAnimations = cSelectedAnimations.size(); - for (nCurrentAnimation = 0; nCurrentAnimation < nTotalAnimations; ++nCurrentAnimation) - { - QString& rstrCurrentAnimAction = cSelectedAnimations[nCurrentAnimation]; - if (!rstrCurrentAnimAction.isEmpty()) - { - m_animation.m_animation = rstrCurrentAnimAction.toUtf8().data(); - m_animationLabel->setText(m_animation.m_animation.c_str()); - emit ValueChanged(m_animation); - } - } -} - -QWidget* AnimationPropertyCtrl::GetFirstInTabOrder() -{ - return m_pApplyButton; -} -QWidget* AnimationPropertyCtrl::GetLastInTabOrder() -{ - return m_pApplyButton; -} - -void AnimationPropertyCtrl::UpdateTabOrder() -{ - setTabOrder(m_pApplyButton, m_pApplyButton); -} - - -QWidget* AnimationPropertyWidgetHandler::CreateGUI(QWidget *pParent) -{ - AnimationPropertyCtrl* newCtrl = aznew AnimationPropertyCtrl(pParent); - connect(newCtrl, &AnimationPropertyCtrl::ValueChanged, newCtrl, [newCtrl]() - { - EBUS_EVENT(AzToolsFramework::PropertyEditorGUIMessages::Bus, RequestWrite, newCtrl); - }); - return newCtrl; -} - - -void AnimationPropertyWidgetHandler::ConsumeAttribute(AnimationPropertyCtrl* GUI, AZ::u32 attrib, AzToolsFramework::PropertyAttributeReader* attrValue, const char* debugName) -{ - Q_UNUSED(GUI); - Q_UNUSED(attrib); - Q_UNUSED(attrValue); - Q_UNUSED(debugName); -} - -void AnimationPropertyWidgetHandler::WriteGUIValuesIntoProperty(size_t index, AnimationPropertyCtrl* GUI, property_t& instance, AzToolsFramework::InstanceDataNode* node) -{ - Q_UNUSED(index); - Q_UNUSED(node); - CReflectedVarAnimation val = GUI->value(); - instance = static_cast(val); -} - -bool AnimationPropertyWidgetHandler::ReadValuesIntoGUI(size_t index, AnimationPropertyCtrl* GUI, const property_t& instance, AzToolsFramework::InstanceDataNode* node) -{ - Q_UNUSED(index); - Q_UNUSED(node); - CReflectedVarAnimation val = instance; - GUI->SetValue(val); - return false; -} - - -#include - diff --git a/Code/Editor/Controls/ReflectedPropertyControl/PropertyAnimationCtrl.h b/Code/Editor/Controls/ReflectedPropertyControl/PropertyAnimationCtrl.h deleted file mode 100644 index 6f3e5b44f3..0000000000 --- a/Code/Editor/Controls/ReflectedPropertyControl/PropertyAnimationCtrl.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - * 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 - * - */ - -#ifndef CRYINCLUDE_EDITOR_UTILS_PROPERTYANIMATIONCTRL_H -#define CRYINCLUDE_EDITOR_UTILS_PROPERTYANIMATIONCTRL_H -#pragma once - -#if !defined(Q_MOC_RUN) -#include -#include -#include -#include "ReflectedVar.h" -#include -#include -#endif - -class QToolButton; -class QLabel; -class QHBoxLayout; - -class AnimationPropertyCtrl - : public QWidget -{ - Q_OBJECT -public: - AZ_CLASS_ALLOCATOR(AnimationPropertyCtrl, AZ::SystemAllocator, 0); - - AnimationPropertyCtrl(QWidget* pParent = nullptr); - virtual ~AnimationPropertyCtrl(); - - CReflectedVarAnimation value() const; - - QWidget* GetFirstInTabOrder(); - QWidget* GetLastInTabOrder(); - void UpdateTabOrder(); - -signals: - void ValueChanged(CReflectedVarAnimation value); - -public slots: - void SetValue(const CReflectedVarAnimation& animation); - -protected slots: - void OnApplyClicked(); - -private: - QToolButton* m_pApplyButton; - QLabel* m_animationLabel; - - CReflectedVarAnimation m_animation; -}; - -class AnimationPropertyWidgetHandler - : QObject - , public AzToolsFramework::PropertyHandler < CReflectedVarAnimation, AnimationPropertyCtrl > -{ -public: - AZ_CLASS_ALLOCATOR(AnimationPropertyWidgetHandler, AZ::SystemAllocator, 0); - - virtual AZ::u32 GetHandlerName(void) const override { return AZ_CRC("Animation", 0x8d5284dc); } - virtual bool IsDefaultHandler() const override { return true; } - virtual QWidget* GetFirstInTabOrder(AnimationPropertyCtrl* widget) override { return widget->GetFirstInTabOrder(); } - virtual QWidget* GetLastInTabOrder(AnimationPropertyCtrl* widget) override { return widget->GetLastInTabOrder(); } - virtual void UpdateWidgetInternalTabbing(AnimationPropertyCtrl* widget) override { widget->UpdateTabOrder(); } - - virtual QWidget* CreateGUI(QWidget* pParent) override; - virtual void ConsumeAttribute(AnimationPropertyCtrl* GUI, AZ::u32 attrib, AzToolsFramework::PropertyAttributeReader* attrValue, const char* debugName) override; - virtual void WriteGUIValuesIntoProperty(size_t index, AnimationPropertyCtrl* GUI, property_t& instance, AzToolsFramework::InstanceDataNode* node) override; - virtual bool ReadValuesIntoGUI(size_t index, AnimationPropertyCtrl* GUI, const property_t& instance, AzToolsFramework::InstanceDataNode* node) override; -}; - - -#endif // CRYINCLUDE_EDITOR_UTILS_PROPERTYANIMATIONCTRL_H From f4ae72ab347441d6a667d71f016c92d15265964e Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 8 Nov 2021 18:39:52 -0800 Subject: [PATCH 042/284] Removes InformationPanel from Code/Editor/Plugins/ComponentEntityEditorPlugin Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../UI/ComponentPalette/InformationPanel.cpp | 12 ------------ .../UI/ComponentPalette/InformationPanel.h | 11 ----------- .../componententityeditorplugin_files.cmake | 2 -- 3 files changed, 25 deletions(-) delete mode 100644 Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/InformationPanel.cpp delete mode 100644 Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/InformationPanel.h diff --git a/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/InformationPanel.cpp b/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/InformationPanel.cpp deleted file mode 100644 index dd6a53f3ac..0000000000 --- a/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/InformationPanel.cpp +++ /dev/null @@ -1,12 +0,0 @@ -/* - * 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 "InformationPanel.h" - -// TODO: LMBR-28174 - diff --git a/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/InformationPanel.h b/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/InformationPanel.h deleted file mode 100644 index 13be58cccf..0000000000 --- a/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/InformationPanel.h +++ /dev/null @@ -1,11 +0,0 @@ -/* - * 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 - -// TODO: LMBR-28174 diff --git a/Code/Editor/Plugins/ComponentEntityEditorPlugin/componententityeditorplugin_files.cmake b/Code/Editor/Plugins/ComponentEntityEditorPlugin/componententityeditorplugin_files.cmake index c663926618..1cb4e25304 100644 --- a/Code/Editor/Plugins/ComponentEntityEditorPlugin/componententityeditorplugin_files.cmake +++ b/Code/Editor/Plugins/ComponentEntityEditorPlugin/componententityeditorplugin_files.cmake @@ -31,8 +31,6 @@ set(FILES UI/ComponentPalette/FavoriteComponentList.cpp UI/ComponentPalette/FilteredComponentList.h UI/ComponentPalette/FilteredComponentList.cpp - UI/ComponentPalette/InformationPanel.h - UI/ComponentPalette/InformationPanel.cpp UI/Outliner/OutlinerDisplayOptionsMenu.h UI/Outliner/OutlinerDisplayOptionsMenu.cpp UI/Outliner/OutlinerTreeView.hxx From 0d88b9d892038c2c6d9593c716cdc91e4054db40 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 8 Nov 2021 18:45:13 -0800 Subject: [PATCH 043/284] Removes DeepFilterProxyModel from Code/Editor/Plugins/EditorCommon Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../EditorCommon/DeepFilterProxyModel.cpp | 172 ------------------ .../EditorCommon/DeepFilterProxyModel.h | 48 ----- .../EditorCommon/editorcommon_files.cmake | 2 - 3 files changed, 222 deletions(-) delete mode 100644 Code/Editor/Plugins/EditorCommon/DeepFilterProxyModel.cpp delete mode 100644 Code/Editor/Plugins/EditorCommon/DeepFilterProxyModel.h diff --git a/Code/Editor/Plugins/EditorCommon/DeepFilterProxyModel.cpp b/Code/Editor/Plugins/EditorCommon/DeepFilterProxyModel.cpp deleted file mode 100644 index d4bcabdfbe..0000000000 --- a/Code/Editor/Plugins/EditorCommon/DeepFilterProxyModel.cpp +++ /dev/null @@ -1,172 +0,0 @@ -/* - * 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 "DeepFilterProxyModel.h" -#include - -DeepFilterProxyModel::DeepFilterProxyModel(QObject* parent) - : QSortFilterProxyModel(parent) -{ -} - -void DeepFilterProxyModel::setFilterString(const QString& filter) -{ - m_filter = filter; - m_filterParts = m_filter.split(' ', Qt::SkipEmptyParts); - m_acceptCache.clear(); -} - -void DeepFilterProxyModel::invalidate() -{ - QSortFilterProxyModel::invalidate(); - m_acceptCache.clear(); -} - -QVariant DeepFilterProxyModel::data(const QModelIndex& index, int role) const -{ - if (role == Qt::ForegroundRole) - { - QModelIndex sourceIndex = mapToSource(index); - if (matchFilter(sourceIndex.row(), sourceIndex.parent())) - { - return QSortFilterProxyModel::data(index, role); - } - else - { - return QPalette().color(QPalette::Disabled, QPalette::Text); - } - } - else - { - return QSortFilterProxyModel::data(index, role); - } -} - - -void DeepFilterProxyModel::setFilterWildcard(const QString& pattern) -{ - m_acceptCache.clear(); - QSortFilterProxyModel::setFilterWildcard(pattern); -} - -bool DeepFilterProxyModel::matchFilter(int sourceRow, const QModelIndex& sourceParent) const -{ - int columnCount = sourceModel()->columnCount(sourceParent); - for (int i = 0; i < m_filterParts.size(); ++i) - { - bool atLeastOneContains = false; - for (int j = 0; j < columnCount; ++j) - { - QModelIndex index = sourceModel()->index(sourceRow, j, sourceParent); - QVariant data = sourceModel()->data(index, Qt::DisplayRole); - QString str(data.toString()); - if (str.isEmpty()) - { - if (m_filterParts.empty()) - { - atLeastOneContains = true; - } - } - else if (str.contains(m_filterParts[i], Qt::CaseInsensitive)) - { - atLeastOneContains = true; - } - } - if (!atLeastOneContains) - { - return false; - } - } - return true; -} - -bool DeepFilterProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex& sourceParent) const -{ - if (matchFilter(sourceRow, sourceParent)) - { - return true; - } - - if (hasAcceptedChildrenCached(sourceRow, sourceParent)) - { - return true; - } - - return false; -} - -bool DeepFilterProxyModel::hasAcceptedChildrenCached(int sourceRow, const QModelIndex& sourceParent) const -{ - std::pair indexId = std::make_pair(sourceParent, sourceRow); - TAcceptCache::iterator it = m_acceptCache.find(indexId); - if (it == m_acceptCache.end()) - { - bool result = hasAcceptedChildren(sourceRow, sourceParent); - m_acceptCache[indexId] = result; - return result; - } - else - { - return it->second; - } -} - -bool DeepFilterProxyModel::hasAcceptedChildren(int sourceRow, const QModelIndex& sourceParent) const -{ - QModelIndex item = sourceModel()->index(sourceRow, 0, sourceParent); - if (!item.isValid()) - { - return false; - } - - int childCount = item.model()->rowCount(item); - if (childCount == 0) - { - return false; - } - - for (int i = 0; i < childCount; ++i) - { - if (filterAcceptsRow(i, item)) - { - return true; - } - } - - return false; -} - -QModelIndex DeepFilterProxyModel::findFirstMatchingIndex(const QModelIndex& root) -{ - int rowCount = this->rowCount(root); - for (int i = 0; i < rowCount; ++i) - { - QModelIndex index = this->index(i, 0, root); - if (!index.isValid()) - { - continue; - } - QModelIndex sourceIndex = mapToSource(index); - if (!sourceIndex.isValid()) - { - continue; - } - if (matchFilter(sourceIndex.row(), sourceIndex.parent())) - { - return index; - } - - QModelIndex child = findFirstMatchingIndex(index); - if (child.isValid()) - { - return child; - } - } - return QModelIndex(); -} diff --git a/Code/Editor/Plugins/EditorCommon/DeepFilterProxyModel.h b/Code/Editor/Plugins/EditorCommon/DeepFilterProxyModel.h deleted file mode 100644 index c7373ef18c..0000000000 --- a/Code/Editor/Plugins/EditorCommon/DeepFilterProxyModel.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * 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 - * - */ - - -#ifndef CRYINCLUDE_EDITORCOMMON_DEEPFILTERPROXYMODEL_H -#define CRYINCLUDE_EDITORCOMMON_DEEPFILTERPROXYMODEL_H -#pragma once - -#include -#include -#include -#include "EditorCommonAPI.h" - -class EDITOR_COMMON_API DeepFilterProxyModel - : public QSortFilterProxyModel -{ -public: - DeepFilterProxyModel(QObject* parent); - - void setFilterString(const QString& filter); - void invalidate(); - - QVariant data(const QModelIndex& index, int role) const override; - - void setFilterWildcard(const QString& pattern); - - bool matchFilter(int source_row, const QModelIndex& source_parent) const; - bool filterAcceptsRow(int source_row, const QModelIndex& source_parent) const override; - bool hasAcceptedChildrenCached(int source_row, const QModelIndex& source_parent) const; - bool hasAcceptedChildren(int source_row, const QModelIndex& source_parent) const; - - QModelIndex findFirstMatchingIndex(const QModelIndex& root); - -private: - QString m_filter; - AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING - QStringList m_filterParts; - typedef std::map, bool> TAcceptCache; - mutable TAcceptCache m_acceptCache; - AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING -}; - -#endif // CRYINCLUDE_EDITORCOMMON_DEEPFILTERPROXYMODEL_H diff --git a/Code/Editor/Plugins/EditorCommon/editorcommon_files.cmake b/Code/Editor/Plugins/EditorCommon/editorcommon_files.cmake index 1c6efbdf2c..d07ab71acf 100644 --- a/Code/Editor/Plugins/EditorCommon/editorcommon_files.cmake +++ b/Code/Editor/Plugins/EditorCommon/editorcommon_files.cmake @@ -19,8 +19,6 @@ set(FILES SaveUtilities/AsyncSaveRunner.cpp AxisHelper.cpp DisplayContext.cpp - DeepFilterProxyModel.cpp - DeepFilterProxyModel.h Resource.h DrawingPrimitives/Ruler.cpp DrawingPrimitives/Ruler.h From 2f6d416df420db11a254e7416a27cb3182ae6501 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 8 Nov 2021 18:49:02 -0800 Subject: [PATCH 044/284] Removes QtViewPane.cpp which is not being compiled Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Plugins/EditorCommon/QtViewPane.cpp | 39 ------------------- 1 file changed, 39 deletions(-) delete mode 100644 Code/Editor/Plugins/EditorCommon/QtViewPane.cpp diff --git a/Code/Editor/Plugins/EditorCommon/QtViewPane.cpp b/Code/Editor/Plugins/EditorCommon/QtViewPane.cpp deleted file mode 100644 index 3deef7e503..0000000000 --- a/Code/Editor/Plugins/EditorCommon/QtViewPane.cpp +++ /dev/null @@ -1,39 +0,0 @@ -/* - * 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 "platform.h" - -#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS -#include -#include - -#include "QtViewPane.h" - -#include "Include/IViewPane.h" -#include "Util/RefCountBase.h" -#include "QtWinMigrate/qwinwidget.h" - -#include -#include -#include -#include -#include - -#include "QtUtil.h" - -// ugly dependencies: -#include "Functor.h" -class CXmlArchive; -#include -#include "Util/PathUtil.h" -// ^^^ - -// --------------------------------------------------------------------------- -// --------------------------------------------------------------------------- - From e791655cc4db41a7d391147730082af4c46be0bc Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 8 Nov 2021 18:58:49 -0800 Subject: [PATCH 045/284] Removes DrawingPrimitives from Code/Editor/Plugins/EditorCommon Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../EditorCommon/DrawingPrimitives/Ruler.cpp | 192 ------------------ .../EditorCommon/DrawingPrimitives/Ruler.h | 52 ----- .../DrawingPrimitives/TimeSlider.cpp | 48 ----- .../DrawingPrimitives/TimeSlider.h | 31 --- .../EditorCommon/editorcommon_files.cmake | 4 - 5 files changed, 327 deletions(-) delete mode 100644 Code/Editor/Plugins/EditorCommon/DrawingPrimitives/Ruler.cpp delete mode 100644 Code/Editor/Plugins/EditorCommon/DrawingPrimitives/Ruler.h delete mode 100644 Code/Editor/Plugins/EditorCommon/DrawingPrimitives/TimeSlider.cpp delete mode 100644 Code/Editor/Plugins/EditorCommon/DrawingPrimitives/TimeSlider.h diff --git a/Code/Editor/Plugins/EditorCommon/DrawingPrimitives/Ruler.cpp b/Code/Editor/Plugins/EditorCommon/DrawingPrimitives/Ruler.cpp deleted file mode 100644 index 1f0bd9ad88..0000000000 --- a/Code/Editor/Plugins/EditorCommon/DrawingPrimitives/Ruler.cpp +++ /dev/null @@ -1,192 +0,0 @@ -/* - * 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 "Ruler.h" - -#include -#include -#include -#include - -namespace DrawingPrimitives -{ - enum - { - RULER_MIN_PIXELS_PER_TICK = 3, - }; - - std::vector CalculateTicks(uint size, Range visibleRange, Range rulerRange, int* pRulerPrecision, Range* pScreenRulerRange) - { - std::vector ticks; - - if (size == 0) - { - if (pRulerPrecision) - { - *pRulerPrecision = 0; - } - - return ticks; - } - - const float pixelsPerUnit = visibleRange.Length() > 0.0f ? (float)size / visibleRange.Length() : 1.0f; - - const float startTime = rulerRange.start; - const float endTime = rulerRange.end; - const float totalDuration = endTime - startTime; - - const float ticksMinPower = log10f(RULER_MIN_PIXELS_PER_TICK); - const float ticksPowerDelta = ticksMinPower - log10f(pixelsPerUnit); - - const int digitsAfterPoint = AZStd::max(-int(ceil(ticksPowerDelta)) - 1, 0); - if (pRulerPrecision) - { - *pRulerPrecision = digitsAfterPoint; - } - - const float scaleStep = powf(10.0f, ceil(ticksPowerDelta)); - const float scaleStepPixels = scaleStep * pixelsPerUnit; - const int numMarkers = int(totalDuration / scaleStep) + 1; - - const float startTimeRound = int(startTime / scaleStep) * scaleStep; - const int startOffsetMod = int(startTime / scaleStep) % 10; - const int scaleOffsetPixels = aznumeric_cast((startTime - startTimeRound) * pixelsPerUnit); - - const int startX = aznumeric_cast((rulerRange.start - visibleRange.start) * pixelsPerUnit); - const int endX = aznumeric_cast(startX + (numMarkers - 1) * scaleStepPixels - scaleOffsetPixels); - - if (pScreenRulerRange) - { - *pScreenRulerRange = Range(aznumeric_cast(startX), aznumeric_cast(endX)); - } - - const int startLoop = std::max((int)((scaleOffsetPixels - startX) / scaleStepPixels) - 1, 0); - const int endLoop = std::min((int)((size + scaleOffsetPixels - startX) / scaleStepPixels) + 1, numMarkers); - - for (int i = startLoop; i < endLoop; ++i) - { - STick tick; - - const int x = aznumeric_cast(startX + i * scaleStepPixels - scaleOffsetPixels); - const float value = startTimeRound + i * scaleStep; - - tick.m_bTenth = (startOffsetMod + i) % 10 != 0; - tick.m_position = x; - tick.m_value = value; - - ticks.push_back(tick); - } - - return ticks; - } - - QColor Interpolate(const QColor& a, const QColor& b, float k) - { - float mk = 1.0f - k; - return QColor(aznumeric_cast(a.red() * mk + b.red() * k), - aznumeric_cast(a.green() * mk + b.green() * k), - aznumeric_cast(a.blue() * mk + b.blue() * k), - aznumeric_cast(a.alpha() * mk + b.alpha() * k)); - } - - void DrawTicks(const std::vector& ticks, QPainter& painter, const QPalette& palette, const STickOptions& options) - { - QColor midDark = DrawingPrimitives::Interpolate(palette.color(QPalette::Dark), palette.color(QPalette::Button), 0.5f); - painter.setPen(QPen(midDark)); - - const int height = options.m_rect.height(); - const int top = options.m_rect.top(); - - for (const STick& tick : ticks) - { - const int x = tick.m_position + options.m_rect.left(); - - if (tick.m_bTenth) - { - painter.drawLine(QPoint(x, top + height - options.m_markHeight / 2), QPoint(x, top + height)); - } - else - { - painter.drawLine(QPoint(x, top + height - options.m_markHeight), QPoint(x, top + height)); - } - } - } - - void DrawTicks(QPainter& painter, const QPalette& palette, const SRulerOptions& options) - { - const std::vector ticks = CalculateTicks(options.m_rect.width(), options.m_visibleRange, options.m_rulerRange, nullptr, nullptr); - DrawTicks(ticks, painter, palette, options); - } - - void DrawRuler(QPainter& painter, const QPalette& palette, const SRulerOptions& options, int* pRulerPrecision) - { - int rulerPrecision; - Range screenRulerRange; - const std::vector ticks = CalculateTicks(options.m_rect.width(), options.m_visibleRange, options.m_rulerRange, &rulerPrecision, &screenRulerRange); - - if (pRulerPrecision) - { - *pRulerPrecision = rulerPrecision; - } - - if (options.m_shadowSize > 0) - { - QRect shadowRect = QRect(options.m_rect.left(), options.m_rect.height(), options.m_rect.width(), options.m_shadowSize); - QLinearGradient upperGradient(shadowRect.left(), shadowRect.top(), shadowRect.left(), shadowRect.bottom()); - upperGradient.setColorAt(0.0f, QColor(0, 0, 0, 128)); - upperGradient.setColorAt(1.0f, QColor(0, 0, 0, 0)); - QBrush upperBrush(upperGradient); - painter.fillRect(shadowRect, upperBrush); - } - - painter.fillRect(options.m_rect, DrawingPrimitives::Interpolate(palette.color(QPalette::Button), palette.color(QPalette::Midlight), 0.25f)); - if (options.m_drawBackgroundCallback) - { - options.m_drawBackgroundCallback(); - } - - QColor midDark = DrawingPrimitives::Interpolate(palette.color(QPalette::Dark), palette.color(QPalette::Button), 0.5f); - painter.setPen(QPen(midDark)); - - QFont font; - font.setPixelSize(10); - painter.setFont(font); - - - char format[16] = ""; - azsprintf(format, "%%.%df", rulerPrecision); - - const int height = options.m_rect.height(); - const int top = options.m_rect.top(); - - QString str; - for (const STick& tick : ticks) - { - const int x = tick.m_position + options.m_rect.left(); - const float value = tick.m_value; - - if (tick.m_bTenth) - { - painter.drawLine(QPoint(x, top + height - options.m_markHeight / 2), QPoint(x, top + height)); - } - else - { - painter.drawLine(QPoint(x, top + height - options.m_markHeight), QPoint(x, top + height)); - painter.setPen(palette.color(QPalette::Disabled, QPalette::Text)); - str.asprintf(format, value); - painter.drawText(QPoint(x + 2, top + height - options.m_markHeight + 1), str); - painter.setPen(midDark); - } - } - - painter.setPen(QPen(palette.color(QPalette::Dark))); - painter.drawLine(QPoint(aznumeric_cast(options.m_rect.left() + screenRulerRange.start), 0), QPoint(aznumeric_cast(options.m_rect.left() + screenRulerRange.start), options.m_rect.top() + height)); - painter.drawLine(QPoint(aznumeric_cast(options.m_rect.left() + screenRulerRange.end), 0), QPoint(aznumeric_cast(options.m_rect.left() + screenRulerRange.end), options.m_rect.top() + height)); - } -} diff --git a/Code/Editor/Plugins/EditorCommon/DrawingPrimitives/Ruler.h b/Code/Editor/Plugins/EditorCommon/DrawingPrimitives/Ruler.h deleted file mode 100644 index fd8bc62ff7..0000000000 --- a/Code/Editor/Plugins/EditorCommon/DrawingPrimitives/Ruler.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * 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 - -#include "Range.h" - -#include -#include -#include - -class QPainter; -class QPalette; - -namespace DrawingPrimitives -{ - struct SRulerOptions; - typedef std::function TDrawCallback; - - struct SRulerOptions - { - QRect m_rect; - Range m_visibleRange; - Range m_rulerRange; - int m_textXOffset; - int m_textYOffset; - int m_markHeight; - int m_shadowSize; - - TDrawCallback m_drawBackgroundCallback; - }; - - struct STick - { - bool m_bTenth; - int m_position; - float m_value; - }; - - typedef SRulerOptions STickOptions; - - std::vector CalculateTicks(uint size, Range visibleRange, Range rulerRange, int* pRulerPrecision, Range* pScreenRulerRange); - void DrawTicks(const std::vector& ticks, QPainter& painter, const QPalette& palette, const STickOptions& options); - void DrawTicks(QPainter& painter, const QPalette& palette, const STickOptions& options); - void DrawRuler(QPainter& painter, const QPalette& palette, const SRulerOptions& options, int* pRulerPrecision); -} diff --git a/Code/Editor/Plugins/EditorCommon/DrawingPrimitives/TimeSlider.cpp b/Code/Editor/Plugins/EditorCommon/DrawingPrimitives/TimeSlider.cpp deleted file mode 100644 index 291723ff6b..0000000000 --- a/Code/Editor/Plugins/EditorCommon/DrawingPrimitives/TimeSlider.cpp +++ /dev/null @@ -1,48 +0,0 @@ -/* - * 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 "TimeSlider.h" - -#include -#include - -#include - -namespace DrawingPrimitives -{ - void DrawTimeSlider(QPainter& painter, const QPalette& palette, const STimeSliderOptions& options) - { - QString text = QString::number(options.m_time, 'f', options.m_precision + 1); - - QFontMetrics fm(painter.font()); - const int textWidth = fm.horizontalAdvance(text) + fm.height(); - const int markerHeight = fm.height(); - - const int thumbX = options.m_position; - const bool fits = thumbX + textWidth < options.m_rect.right(); - - const QRect timeRect(fits ? thumbX : thumbX - textWidth, 3, textWidth, fm.height()); - painter.fillRect(timeRect.adjusted(fits ? 0 : -1, 0, fits ? 1 : 0, 0), options.m_bHasFocus ? palette.highlight() : palette.shadow()); - painter.setPen(palette.color(QPalette::HighlightedText)); - painter.drawText(timeRect.adjusted(fits ? 0 : aznumeric_cast(markerHeight * 0.2f), -1, fits ? aznumeric_cast(-markerHeight * 0.2f) : 0, 0), text, QTextOption(fits ? Qt::AlignRight : Qt::AlignLeft)); - - painter.setPen(palette.color(QPalette::Text)); - painter.drawLine(QPointF(thumbX, 0), QPointF(thumbX, options.m_rect.height())); - QPointF points[3] = - { - QPointF(thumbX, markerHeight), - QPointF(thumbX - markerHeight * 0.66f, 0), - QPointF(thumbX + markerHeight * 0.66f, 0) - }; - - painter.setBrush(palette.base()); - painter.setPen(palette.color(QPalette::Text)); - painter.drawPolygon(points, 3); - } -} diff --git a/Code/Editor/Plugins/EditorCommon/DrawingPrimitives/TimeSlider.h b/Code/Editor/Plugins/EditorCommon/DrawingPrimitives/TimeSlider.h deleted file mode 100644 index 4553b106e2..0000000000 --- a/Code/Editor/Plugins/EditorCommon/DrawingPrimitives/TimeSlider.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * 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 - -#include "Range.h" - -#include - -class QPainter; -class QPalette; - -namespace DrawingPrimitives -{ - struct STimeSliderOptions - { - QRect m_rect; - int m_precision; - int m_position; - float m_time; - bool m_bHasFocus; - }; - - void DrawTimeSlider(QPainter& painter, const QPalette& palette, const STimeSliderOptions& options); -} diff --git a/Code/Editor/Plugins/EditorCommon/editorcommon_files.cmake b/Code/Editor/Plugins/EditorCommon/editorcommon_files.cmake index d07ab71acf..7a380bc6ea 100644 --- a/Code/Editor/Plugins/EditorCommon/editorcommon_files.cmake +++ b/Code/Editor/Plugins/EditorCommon/editorcommon_files.cmake @@ -20,10 +20,6 @@ set(FILES AxisHelper.cpp DisplayContext.cpp Resource.h - DrawingPrimitives/Ruler.cpp - DrawingPrimitives/Ruler.h - DrawingPrimitives/TimeSlider.cpp - DrawingPrimitives/TimeSlider.h WinWidget/WinWidget.h WinWidget/WinWidgetManager.h WinWidget/WinWidgetManager.cpp From bc8bdd1db4eb73500195ca379e110d22ebdf9c42 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 8 Nov 2021 19:06:08 -0800 Subject: [PATCH 046/284] Removes resource and rc file from FFMPEGPlugin Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Plugins/FFMPEGPlugin/FFMPEGPlugin.rc | 61 ------------------- .../FFMPEGPlugin/ffmpegplugin_files.cmake | 1 - Code/Editor/Plugins/FFMPEGPlugin/resource.h | 22 ------- 3 files changed, 84 deletions(-) delete mode 100644 Code/Editor/Plugins/FFMPEGPlugin/FFMPEGPlugin.rc delete mode 100644 Code/Editor/Plugins/FFMPEGPlugin/resource.h diff --git a/Code/Editor/Plugins/FFMPEGPlugin/FFMPEGPlugin.rc b/Code/Editor/Plugins/FFMPEGPlugin/FFMPEGPlugin.rc deleted file mode 100644 index 404387a244..0000000000 --- a/Code/Editor/Plugins/FFMPEGPlugin/FFMPEGPlugin.rc +++ /dev/null @@ -1,61 +0,0 @@ -// Microsoft Visual C++ generated resource script. -// -#include "resource.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#include "winres.h" - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// English (U.S.) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -LANGUAGE 9, 1 -#pragma code_page(1252) - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE -BEGIN - "resource.h\0" -END - -2 TEXTINCLUDE -BEGIN - "#include ""winres.h""\r\n" - "\0" -END - -3 TEXTINCLUDE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - -#endif // English (U.S.) resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED - diff --git a/Code/Editor/Plugins/FFMPEGPlugin/ffmpegplugin_files.cmake b/Code/Editor/Plugins/FFMPEGPlugin/ffmpegplugin_files.cmake index 779fc816f4..6d63e3a8f8 100644 --- a/Code/Editor/Plugins/FFMPEGPlugin/ffmpegplugin_files.cmake +++ b/Code/Editor/Plugins/FFMPEGPlugin/ffmpegplugin_files.cmake @@ -7,7 +7,6 @@ # set(FILES - FFMPEGPlugin.rc main.cpp FFMPEGPlugin.cpp FFMPEGPlugin.h diff --git a/Code/Editor/Plugins/FFMPEGPlugin/resource.h b/Code/Editor/Plugins/FFMPEGPlugin/resource.h deleted file mode 100644 index dcf269a2b4..0000000000 --- a/Code/Editor/Plugins/FFMPEGPlugin/resource.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * 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 - * - */ - -//{{NO_DEPENDENCIES}} -// Microsoft Visual C++ generated include file. -// Used by FFMPEGPlugin.rc - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 101 -#define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 1001 -#define _APS_NEXT_SYMED_VALUE 101 -#endif -#endif From 43b35add368232529b86d1331e34f58e315e4684 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 8 Nov 2021 19:08:06 -0800 Subject: [PATCH 047/284] Removes ImagePainter and some Terrain leftovers from Code/Editor Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Editor/Util/ImagePainter.cpp | 350 ------------------ Code/Editor/Util/ImagePainter.h | 76 ---- Code/Editor/editor_lib_terrain_files.cmake | 84 ----- .../editor_lib_test_terrain_files.cmake | 17 - 4 files changed, 527 deletions(-) delete mode 100644 Code/Editor/Util/ImagePainter.cpp delete mode 100644 Code/Editor/Util/ImagePainter.h delete mode 100644 Code/Editor/editor_lib_terrain_files.cmake delete mode 100644 Code/Editor/editor_lib_test_terrain_files.cmake diff --git a/Code/Editor/Util/ImagePainter.cpp b/Code/Editor/Util/ImagePainter.cpp deleted file mode 100644 index 37cf5d000c..0000000000 --- a/Code/Editor/Util/ImagePainter.cpp +++ /dev/null @@ -1,350 +0,0 @@ -/* - * 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 "EditorDefs.h" - -#include "ImagePainter.h" - -// Editor -#include "Terrain/Heightmap.h" -#include "Terrain/Layer.h" - -SEditorPaintBrush::SEditorPaintBrush(CHeightmap& rHeightmap, CLayer& rLayer, - const bool bMaskByLayerSettings, const uint32 dwLayerIdMask, const bool bFlood) - : bBlended(true) - , m_rHeightmap(rHeightmap) - , m_rLayer(rLayer) - , m_cFilterColor(1, 1, 1) - , m_dwLayerIdMask(dwLayerIdMask) - , m_bFlood(bFlood) -{ - if (bMaskByLayerSettings) - { - m_fMinAltitude = m_rLayer.GetLayerStart(); - m_fMaxAltitude = m_rLayer.GetLayerEnd(); - m_fMinSlope = tan(m_rLayer.GetLayerMinSlopeAngle() / 90.1f * g_PI / 2.0f); // 0..90 -> 0..~1/0 - m_fMaxSlope = tan(m_rLayer.GetLayerMaxSlopeAngle() / 90.1f * g_PI / 2.0f); // 0..90 -> 0..~1/0 - } - else - { - m_fMinAltitude = -FLT_MAX; - m_fMaxAltitude = FLT_MAX; - m_fMinSlope = 0; - m_fMaxSlope = FLT_MAX; - } -} - -float SEditorPaintBrush::GetMask(const float fX, const float fY) const -{ - // Our expectation is that fX and fY are values of [0, 1) (i.e. includes 0, excludes 1). - // We're mapping this back to an int range where the width & height are generally powers of 2. So for example, we're mapping to 0 - 1023. - // To preserve maximum precision in our floats, and for ease of understanding, we're going to expect that our floats actually represent - // the 0 - 1024 range (i.e. 1 is 1024, not 1023), so that way each increment of a float is 1/1024 instead of 1/1023. This means that a value - // of 1 that's passed in is off the right edge of our range and technically invalid, so we'll just clamp if that happens. - int iX = AZStd::clamp(static_cast(fX * m_rHeightmap.GetWidth()), static_cast(0), static_cast(m_rHeightmap.GetWidth() - 1)); - int iY = AZStd::clamp(static_cast(fY * m_rHeightmap.GetHeight()), static_cast(0), static_cast(m_rHeightmap.GetHeight() - 1)); - - float fAltitude = m_rHeightmap.GetZInterpolated(fX * m_rHeightmap.GetWidth(), fY * m_rHeightmap.GetHeight()); - - // Check if altitude is within brush min/max altitude - if (fAltitude < m_fMinAltitude || fAltitude > m_fMaxAltitude) - { - return 0; - } - - float fSlope = m_rHeightmap.GetAccurateSlope(fX * m_rHeightmap.GetWidth(), fY * m_rHeightmap.GetHeight()); - - // Check if slope is within brush min/max slope - if (fSlope < m_fMinSlope || fSlope > m_fMaxSlope) - { - return 0; - } - - // Soft slope test - // float fSlopeAplha = 1.f; - // fSlopeAplha *= CLAMP((m_fMaxSlope-fSlope)*4 + 0.25f,0,1); - // fSlopeAplha *= CLAMP((fSlope-m_fMinSlope)*4 + 0.25f,0,1); - - if (m_dwLayerIdMask != 0xffffffff) - { - LayerWeight weight = m_rHeightmap.GetLayerWeightAt(iX, iY); - - if ((weight.PrimaryId() & CLayer::e_undefined) != m_dwLayerIdMask) - { - return 0; - } - } - - return 1; -} - - -////////////////////////////////////////////////////////////////////////// -void CImagePainter::PaintBrush(const float fpx, const float fpy, TImage& image, const SEditorPaintBrush& brush) -{ - float fX = fpx * image.GetWidth(), fY = fpy * image.GetHeight(); - - // By using 1/width and 1/height as our scale, this means we're expecting to generate values of [0, 1). - // i.e. we're expecting to generate 0/width to (width-1)/width, and 0/height to (height-1)/height. - // This aligns with the expectations of how GetMask() will use these values. - const float fScaleX = 1.0f / image.GetWidth(); - const float fScaleY = 1.0f / image.GetHeight(); - - //////////////////////////////////////////////////////////////////////// - // Draw an attenuated spot on the map - //////////////////////////////////////////////////////////////////////// - float fMaxDist, fAttenuation, fYSquared; - float fHardness = brush.hardness; - - unsigned int pos; - - LayerWeight* sourceData = image.GetData(); - - // Calculate the maximum distance - fMaxDist = brush.fRadius * image.GetWidth(); - - assert(image.GetWidth() == image.GetHeight()); - - int width = image.GetWidth(); - int height = image.GetHeight(); - - int iMinX = (int)floor(fX - fMaxDist), iMinY = (int)floor(fY - fMaxDist); - int iMaxX = (int)ceil(fX + fMaxDist), iMaxY = (int)ceil(fY + fMaxDist); - - for (int iPosY = iMinY; iPosY <= iMaxY; iPosY++) - { - // Skip invalid locations - if (iPosY < 0 || iPosY > height - 1) - { - continue; - } - - float fy = (float)iPosY - fY; - - // Precalculate - fYSquared = (float)(fy * fy); - - for (int iPosX = iMinX; iPosX <= iMaxX; iPosX++) - { - float fx = (float)iPosX - fX; - - // Skip invalid locations - if (iPosX < 0 || iPosX > width - 1) - { - continue; - } - - // Only circle. - float dist = sqrtf(fYSquared + fx * fx); - if (!brush.m_bFlood && dist > fMaxDist) - { - continue; - } - - float fMask = brush.GetMask(iPosX * fScaleX, iPosY * fScaleY); - - if (fMask < 0.5f) - { - continue; - } - - - // Calculate the array index - pos = iPosX + iPosY * width; - - // Calculate attenuation factor - fAttenuation = brush.m_bFlood ? 1.0f : 1.0f - __min(1.0f, dist / fMaxDist); - - float h = static_cast(sourceData[pos].GetWeight(brush.color) / 255.0f); - float dh = 1.0f - h; - float fh = clamp_tpl((fAttenuation) * dh * fHardness + h, 0.0f, 1.0f); - - // A non-zero distance between our weight sample and the center point of the brush - // can cause fAttenuation to be ~0.999, so if h (the current weight) is 254, any - // value less than 1 * dh will give us a value between 254 and 255. - // As we convert from 0-1 back to 0-255 number ranges, it's important to round - // instead of truncating so that we don't have to have an exact distance of 0 - // to reach a value of 255. - uint8 weight = static_cast(clamp_tpl(round(fh * 255.0f), 0.0f, 255.0f)); - - sourceData[pos].SetWeight(brush.color, weight); - } - } -} - - -void CImagePainter::PaintBrushWithPattern(const float fpx, const float fpy, CImageEx& outImageBGR, - const uint32 dwOffsetX, const uint32 dwOffsetY, const float fScaleX, const float fScaleY, - const SEditorPaintBrush& brush, const CImageEx& imgPattern) -{ - float fX = fpx * fScaleX, fY = fpy * fScaleY; - - //////////////////////////////////////////////////////////////////////// - // Draw an attenuated spot on the map - //////////////////////////////////////////////////////////////////////// - float fMaxDist, fAttenuation, fYSquared; - float fHardness = brush.hardness; - - unsigned int pos; - - uint32* srcBGR = outImageBGR.GetData(); - uint32* pat = imgPattern.GetData(); - - int value = brush.color; - - // Calculate the maximum distance - fMaxDist = brush.fRadius; - - int width = outImageBGR.GetWidth(); - int height = outImageBGR.GetHeight(); - - int patwidth = imgPattern.GetWidth(); - int patheight = imgPattern.GetHeight(); - - int iMinX = (int)floor(fX - fMaxDist), iMinY = (int)floor(fY - fMaxDist); - int iMaxX = (int)ceil(fX + fMaxDist), iMaxY = (int)ceil(fY + fMaxDist); - - bool bSRGB = imgPattern.GetSRGB(); - - for (int iPosY = iMinY; iPosY < iMaxY; iPosY++) - { - // Skip invalid locations - if (iPosY - dwOffsetY < 0 || iPosY - dwOffsetY > height - 1) - { - continue; - } - - float fy = (float)iPosY - fY; - - // Precalculate - fYSquared = (float)(fy * fy); - - int32 iPatY = ((uint32)iPosY) % patheight; - assert(iPatY >= 0 && iPatY < patheight); - - for (int iPosX = iMinX; iPosX < iMaxX; iPosX++) - { - float fx = (float)iPosX - fX; - - // Skip invalid locations - if (iPosX - dwOffsetX < 0 || iPosX - dwOffsetX > width - 1) - { - continue; - } - - // Only circle. - float dist = sqrtf(fYSquared + fx * fx); - - if (!brush.m_bFlood && dist > fMaxDist) - { - continue; - } - - // Calculate the array index - pos = (iPosX - dwOffsetX) + (iPosY - dwOffsetY) * width; - - // Calculate attenuation factor - fAttenuation = brush.m_bFlood ? 1.0f : 1.0f - __min(1.0f, dist / fMaxDist); - assert(fAttenuation >= 0.0f && fAttenuation <= 1.0f); - - // Note that GetMask expects a range of [0, 1), so it's correct to divide by - // fScaleX and fScaleY instead of (fScaleX-1) and (fScaleY-1). - float fMask = brush.GetMask(iPosX / fScaleX, iPosY / fScaleY); - - uint32 cDstPixBGR = srcBGR[pos]; - - int32 iPatX = ((uint32)iPosX) % patwidth; - assert(iPatX >= 0 && iPatX < patwidth); - - uint32 cSrcPix = pat[iPatX + iPatY * patwidth]; - - float s = fAttenuation * fHardness * fMask; - assert(s >= 0.0f && s <= 1.0f); - if (fcmp(s, 0)) - { - // If the blend would be entirely biased to the pixel in outImage then don't modify anything - // (The logic below is susceptible to floating point inaccuracy and would change the pixel - // even though it is not supposed to) - continue; - } - - const float fRecip255 = 1.0f / 255.0f; - - // Convert Src to Linear Space (Src is pattern texture, can be in linear or gamma space) - ColorF cSrc = ColorF(GetRValue(cSrcPix), GetGValue(cSrcPix), GetBValue(cSrcPix)) * fRecip255; - if (bSRGB) - { - cSrc.srgb2rgb(); - } - - ColorF cMtl = brush.m_cFilterColor; - cMtl.srgb2rgb(); - - cSrc *= cMtl; - cSrc.clamp(0.0f, 1.0f); - - // Convert Dst to Linear Space ( Dst is always in gamma space ), and load from BGR -> RGB - ColorF cDst = ColorF(GetBValue(cDstPixBGR), GetGValue(cDstPixBGR), GetRValue(cDstPixBGR)) * fRecip255; - cDst.srgb2rgb(); - - // Linear space blend - ColorF cOut = cSrc * s + cDst * (1.0f - s); - - // Convert final result to gamma space and put back in [0..255] range - cOut.rgb2srgb(); - cOut *= 255.0f; - - // Save the blended result as BGR - // It's important to round as we go from float back to int. If we just truncate, - // we'll end up with consistently darker colors. - srcBGR[pos] = RGB(round(cOut.b), round(cOut.g), round(cOut.r)); - } - } -} - - -void CImagePainter::FillWithPattern(CImageEx& outImage, const uint32 dwOffsetX, const uint32 dwOffsetY, - const CImageEx& imgPattern) -{ - unsigned int pos; - - uint32* src = outImage.GetData(); - uint32* pat = imgPattern.GetData(); - - int width = outImage.GetWidth(); - int height = outImage.GetHeight(); - - int patwidth = imgPattern.GetWidth(); - int patheight = imgPattern.GetHeight(); - - if (patheight == 0 || patwidth == 0) - { - return; - } - - for (int iPosY = 0; iPosY < height; iPosY++) - { - int32 iPatY = ((uint32)iPosY + dwOffsetY) % patheight; - assert(iPatY >= 0 && iPatY < patheight); - - for (int iPosX = 0; iPosX < width; iPosX++) - { - // Calculate the array index - pos = iPosX + iPosY * width; - - int32 iPatX = ((uint32)iPosX + dwOffsetX) % patwidth; - assert(iPatX >= 0 && iPatX < patwidth); - - uint32 cSrc = pat[iPatX + iPatY * patwidth]; - - src[pos] = cSrc; - } - } -} - diff --git a/Code/Editor/Util/ImagePainter.h b/Code/Editor/Util/ImagePainter.h deleted file mode 100644 index 81d1450f06..0000000000 --- a/Code/Editor/Util/ImagePainter.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - * 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 - * - */ - - -#ifndef CRYINCLUDE_EDITOR_UTIL_IMAGEPAINTER_H -#define CRYINCLUDE_EDITOR_UTIL_IMAGEPAINTER_H -#pragma once - -#include "Util/Image.h" - -struct LayerWeight; - -// Brush structure used for painting. -struct SANDBOX_API SEditorPaintBrush -{ - // constructor - SEditorPaintBrush(class CHeightmap& rHeightmap, class CLayer& rLayer, - const bool bMaskByLayerSettings, const uint32 dwLayerIdMask, const bool bFlood); - - CHeightmap& m_rHeightmap; // for mask support - unsigned char color; // Painting color - float fRadius; // outer radius (0..1 for the whole terrain size) - float hardness; // 0-1 hardness of brush - bool bBlended; // true=shades of the value are stores, false=the value is either stored or not - bool m_bFlood; // true=fills square area without attenuation, false=fills circle area with attenuation - uint32 m_dwLayerIdMask;// reference Value for the mask, 0xffffffff if not used - CLayer& m_rLayer; // layer we paint with - AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING - ColorF m_cFilterColor; // (1,1,1) if not used, multiplied with brightness - AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING - - // Arguments: - // fX - 0..1 in the whole terrain - // fY - 0..1 in the whole terrain - // Return: - // 0=paint there 0% .. 1=paint there 100% - float GetMask(const float fX, const float fY) const; - -protected: // -------------------------------------------------------------------------- - - float m_fMinSlope; // in m per m - float m_fMaxSlope; // in m per me - float m_fMinAltitude; // in m - float m_fMaxAltitude; // in m -}; - -// Contains image painting functions. -class CImagePainter -{ -public: - - // Paint spot on image at position px,py with specified paint brush parameters (to a layer) - // Arguments: - // fpx - 0..1 in the whole terrain (used for the mask) - // fpy - 0..1 in the whole terrain (used for the mask) - SANDBOX_API void PaintBrush(const float fpx, const float fpy, TImage& image, const SEditorPaintBrush& brush); - - // Paint spot with pattern (to an RGB image) - // real spot is drawn to (fpx-dwOffsetX,fpy-dwOffsetY) - to get the pattern working we need this info split up like this - // Arguments: - // fpx - 0..1 in the whole terrain (used for the mask) - // fpy - 0..1 in the whole terrain (used for the mask) - void PaintBrushWithPattern(const float fpx, const float fpy, CImageEx& outImage, const uint32 dwOffsetX, const uint32 dwOffsetY, - const float fScaleX, const float fScaleY, const SEditorPaintBrush& brush, const CImageEx& imgPattern); - - // - void FillWithPattern(CImageEx& outImage, const uint32 dwOffsetX, const uint32 dwOffsetY, const CImageEx& imgPattern); -}; - - -#endif // CRYINCLUDE_EDITOR_UTIL_IMAGEPAINTER_H diff --git a/Code/Editor/editor_lib_terrain_files.cmake b/Code/Editor/editor_lib_terrain_files.cmake deleted file mode 100644 index 09b521ad39..0000000000 --- a/Code/Editor/editor_lib_terrain_files.cmake +++ /dev/null @@ -1,84 +0,0 @@ -# -# 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 - TerrainPainterPanel.cpp - TerrainPainterPanel.h - TerrainPainterPanel.ui - NewTerrainDialog.cpp - NewTerrainDialog.h - NewTerrainDialog.ui - TerrainTextureExport.cpp - TerrainTextureExport.h - TerrainTextureExport.ui - Terrain/Clouds.cpp - Terrain/GenerationParam.cpp - Terrain/GenerationParam.ui - Terrain/Heightmap.cpp - Terrain/Layer.cpp - Terrain/Noise.cpp - Terrain/PythonTerrainFuncs.cpp - Terrain/PythonTerrainLayerFuncs.cpp - Terrain/RGBLayer.cpp - Terrain/SurfaceType.cpp - Terrain/TerrainConverter.cpp - Terrain/TerrainGrid.cpp - Terrain/TerrainLayerTexGen.cpp - Terrain/TerrainLightGen.cpp - Terrain/TerrainManager.cpp - Terrain/TerrainTexGen.cpp - Terrain/TextureCompression.cpp - Terrain/MacroTextureExporter.cpp - Terrain/Clouds.h - Terrain/GenerationParam.h - Terrain/Heightmap.h - Terrain/Layer.h - Terrain/LayerWeight.h - Terrain/Noise.h - Terrain/RGBLayer.h - Terrain/SurfaceType.h - Terrain/TerrainConverter.h - Terrain/TerrainGrid.h - Terrain/TerrainLayerTexGen.h - Terrain/TerrainLightGen.h - Terrain/TerrainManager.h - Terrain/TerrainTexGen.h - Terrain/LayerWeight.cpp - Terrain/TextureCompression.h - Terrain/MacroTextureExporter.h - TerrainDialog.cpp - TerrainDialog.h - TerrainDialog.ui - TerrainTexture.cpp - TerrainTexture.h - TerrainTexture.ui - Terrain/SkyAccessibility/HeightmapAccessibility.h - Terrain/SkyAccessibility/HorizonTracker.h - TerrainHolePanel.cpp - TerrainHoleTool.cpp - TerrainHolePanel.h - TerrainHolePanel.ui - TerrainHoleTool.h - TerrainMiniMapTool.cpp - TerrainMiniMapTool.h - TerrainMiniMapPanel.ui - TerrainModifyPanel.cpp - TerrainModifyPanel.h - TerrainModifyPanel.ui - TerrainModifyTool.cpp - TerrainModifyTool.h - TerrainMoveTool.cpp - TerrainMoveToolPanel.cpp - TerrainMoveTool.h - TerrainMoveToolPanel.h - TerrainMoveToolPanel.ui - TerrainTexturePainter.cpp - TerrainTexturePainter.h - Util/ImagePainter.cpp - Util/ImagePainter.h -) diff --git a/Code/Editor/editor_lib_test_terrain_files.cmake b/Code/Editor/editor_lib_test_terrain_files.cmake deleted file mode 100644 index e0f4c99cdb..0000000000 --- a/Code/Editor/editor_lib_test_terrain_files.cmake +++ /dev/null @@ -1,17 +0,0 @@ -# -# 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 - Lib/Tests/test_TerrainModifyPythonBindings.cpp - Lib/Tests/test_TerrainPythonBindings.cpp - Lib/Tests/test_TerrainLayerPythonBindings.cpp - Lib/Tests/test_TerrainPainterPythonBindings.cpp - Lib/Tests/test_TerrainHoleToolPythonBindings.cpp - Lib/Tests/test_TerrainTexturePythonBindings.cpp - Terrain/Tests/test_Terrain.cpp -) From 6b7b8c45a776b2774dc3bcd070dfd470d93e394a Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 8 Nov 2021 19:26:15 -0800 Subject: [PATCH 048/284] Removes UIEnumerations from Code/Editor Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Editor/Util/UIEnumerations.cpp | 75 ----------------------------- Code/Editor/Util/UIEnumerations.h | 37 -------------- Code/Editor/editor_lib_files.cmake | 2 - 3 files changed, 114 deletions(-) delete mode 100644 Code/Editor/Util/UIEnumerations.cpp delete mode 100644 Code/Editor/Util/UIEnumerations.h diff --git a/Code/Editor/Util/UIEnumerations.cpp b/Code/Editor/Util/UIEnumerations.cpp deleted file mode 100644 index 2666a49f8e..0000000000 --- a/Code/Editor/Util/UIEnumerations.cpp +++ /dev/null @@ -1,75 +0,0 @@ -/* - * 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 - * - */ - - -// Description : This file implements the container for the assotiaon of -// enumeration name to enumeration values - - -#include "EditorDefs.h" - -#include "UIEnumerations.h" - -////////////////////////////////////////////////////////////////////////// -CUIEnumerations& CUIEnumerations::GetUIEnumerationsInstance() -{ - static CUIEnumerations oGeneralProxy; - return oGeneralProxy; -} - -////////////////////////////////////////////////////////////////////////// -CUIEnumerations::TDValuesContainer& CUIEnumerations::GetStandardNameContainer() -{ - static TDValuesContainer cValuesContainer; - static bool boInit(false); - - if (!boInit) - { - boInit = true; - - XmlNodeRef oRootNode; - XmlNodeRef oEnumaration; - XmlNodeRef oEnumerationItem; - - int nNumberOfEnumarations(0); - int nCurrentEnumaration(0); - - int nNumberOfEnumerationItems(0); - int nCurrentEnumarationItem(0); - - oRootNode = GetISystem()->GetXmlUtils()->LoadXmlFromFile("Editor\\PropertyEnumerations.xml"); - nNumberOfEnumarations = oRootNode ? oRootNode->getChildCount() : 0; - - for (nCurrentEnumaration = 0; nCurrentEnumaration < nNumberOfEnumarations; ++nCurrentEnumaration) - { - TDValues cValues; - oEnumaration = oRootNode->getChild(nCurrentEnumaration); - - nNumberOfEnumerationItems = oEnumaration->getChildCount(); - for (nCurrentEnumarationItem = 0; nCurrentEnumarationItem < nNumberOfEnumerationItems; ++nCurrentEnumarationItem) - { - oEnumerationItem = oEnumaration->getChild(nCurrentEnumarationItem); - - const char* szKey(nullptr); - const char* szValue(nullptr); - oEnumerationItem->getAttributeByIndex(0, &szKey, &szValue); - - cValues.push_back(szValue); - } - - const char* szKey(nullptr); - const char* szValue(nullptr); - oEnumaration->getAttributeByIndex(0, &szKey, &szValue); - - cValuesContainer.insert(TDValuesContainer::value_type(szValue, cValues)); - } - } - - return cValuesContainer; -} -////////////////////////////////////////////////////////////////////////// diff --git a/Code/Editor/Util/UIEnumerations.h b/Code/Editor/Util/UIEnumerations.h deleted file mode 100644 index f23ebf9604..0000000000 --- a/Code/Editor/Util/UIEnumerations.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * 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 - * - */ - - -// Description : This file declares the container for the assotiaon of -// enumeration name to enumeration values - - -#ifndef CRYINCLUDE_EDITOR_UTIL_UIENUMERATIONS_H -#define CRYINCLUDE_EDITOR_UTIL_UIENUMERATIONS_H -#pragma once - - -class CUIEnumerations -{ -public: - // For XML standard values. - typedef QStringList TDValues; - typedef std::map TDValuesContainer; -protected: -private: - -public: - static CUIEnumerations& GetUIEnumerationsInstance(); - - TDValuesContainer& GetStandardNameContainer(); -protected: -private: -}; - - -#endif // CRYINCLUDE_EDITOR_UTIL_UIENUMERATIONS_H diff --git a/Code/Editor/editor_lib_files.cmake b/Code/Editor/editor_lib_files.cmake index 36a45905bd..758143ac8d 100644 --- a/Code/Editor/editor_lib_files.cmake +++ b/Code/Editor/editor_lib_files.cmake @@ -708,8 +708,6 @@ set(FILES Util/ImageTIF.cpp Util/ImageTIF.h Util/Math.h - Util/UIEnumerations.cpp - Util/UIEnumerations.h WelcomeScreen/WelcomeScreenDialog.h WelcomeScreen/WelcomeScreenDialog.cpp WelcomeScreen/WelcomeScreenDialog.ui From 0374215c00f63ca30fb033e707aa4cfec3659b48 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Tue, 9 Nov 2021 10:21:35 -0800 Subject: [PATCH 049/284] Removes some old BuildInfo files Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Framework/AzCore/AzCore/BuildInfo.h | 11 ---------- Code/Framework/GridMate/GridMate/BuildInfo.h | 11 ---------- Code/Framework/GridMate/GridMate/GridMate.cpp | 1 - Code/Framework/GridMate/GridMate/Version.h | 20 ------------------- .../GridMate/GridMate/gridmate_files.cmake | 2 -- 5 files changed, 45 deletions(-) delete mode 100644 Code/Framework/AzCore/AzCore/BuildInfo.h delete mode 100644 Code/Framework/GridMate/GridMate/BuildInfo.h delete mode 100644 Code/Framework/GridMate/GridMate/Version.h diff --git a/Code/Framework/AzCore/AzCore/BuildInfo.h b/Code/Framework/AzCore/AzCore/BuildInfo.h deleted file mode 100644 index 7032b4b190..0000000000 --- a/Code/Framework/AzCore/AzCore/BuildInfo.h +++ /dev/null @@ -1,11 +0,0 @@ -/* - * 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 - * - */ -#define AZCORE_BUILD_NUMBER 368 -#define AZCORE_BUILD_DATE "Thu 10/10/2013" -#define AZCORE_BUILD_TIME "19:42:16.96" -#define AZCORE_SOURCE_CHANGELIST 2992189 diff --git a/Code/Framework/GridMate/GridMate/BuildInfo.h b/Code/Framework/GridMate/GridMate/BuildInfo.h deleted file mode 100644 index 5abeab249f..0000000000 --- a/Code/Framework/GridMate/GridMate/BuildInfo.h +++ /dev/null @@ -1,11 +0,0 @@ -/* - * 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 - * - */ -#define GM_BUILD_NUMBER 263 -#define GM_BUILD_DATE "Fri 10/11/2013" -#define GM_BUILD_TIME "11:42:40.81" -#define GM_SOURCE_CHANGELIST 2992328 diff --git a/Code/Framework/GridMate/GridMate/GridMate.cpp b/Code/Framework/GridMate/GridMate/GridMate.cpp index 22b4fd7af6..009aef7e83 100644 --- a/Code/Framework/GridMate/GridMate/GridMate.cpp +++ b/Code/Framework/GridMate/GridMate/GridMate.cpp @@ -13,7 +13,6 @@ #include #include #include -#include AZ_DEFINE_BUDGET(GridMate); diff --git a/Code/Framework/GridMate/GridMate/Version.h b/Code/Framework/GridMate/GridMate/Version.h deleted file mode 100644 index 0bebf6e1c1..0000000000 --- a/Code/Framework/GridMate/GridMate/Version.h +++ /dev/null @@ -1,20 +0,0 @@ -/* - * 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 - * - */ -#ifndef GRIDMATE_VERSION_H -#define GRIDMATE_VERSION_H 1 - -// buildversion.h is updated automatically when we release an SDK. -// It contians the folling defines (with example numbers) -// #define GM_BUILD_NUMBER 18 -// #define GM_BUILD_DATE "Tue 06/09/2009" -// #define GM_BUILD_TIME "14:10:34.72" -#include - -#define GM_BUILD_VERSION 001 // Hundreds is a major version, tens in a minor. For instance 155 is 1.55. - -#endif // GRIDMATE_VERSION_H diff --git a/Code/Framework/GridMate/GridMate/gridmate_files.cmake b/Code/Framework/GridMate/GridMate/gridmate_files.cmake index 99dc4257f6..7fac75a442 100644 --- a/Code/Framework/GridMate/GridMate/gridmate_files.cmake +++ b/Code/Framework/GridMate/GridMate/gridmate_files.cmake @@ -7,7 +7,6 @@ # set(FILES - BuildInfo.h EBus.h Docs.h GridMate.cpp @@ -17,7 +16,6 @@ set(FILES MathUtils.h Memory.h Types.h - Version.h Carrier/Carrier.cpp Carrier/Carrier.h Carrier/Compressor.h From 1de0e574f7f3629142964696539d0e59a2f3d3be Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Tue, 9 Nov 2021 19:12:18 -0800 Subject: [PATCH 050/284] Removes LegacyJobExecutor from AzCore Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../AzCore/AzCore/Jobs/LegacyJobExecutor.h | 197 ------------------ .../AzCore/AzCore/azcore_files.cmake | 1 - 2 files changed, 198 deletions(-) delete mode 100644 Code/Framework/AzCore/AzCore/Jobs/LegacyJobExecutor.h diff --git a/Code/Framework/AzCore/AzCore/Jobs/LegacyJobExecutor.h b/Code/Framework/AzCore/AzCore/Jobs/LegacyJobExecutor.h deleted file mode 100644 index 8018cf409f..0000000000 --- a/Code/Framework/AzCore/AzCore/Jobs/LegacyJobExecutor.h +++ /dev/null @@ -1,197 +0,0 @@ -/* - * 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 - * - */ -#ifndef AZCORE_JOBS_JOBEXECUTOR_H -#define AZCORE_JOBS_JOBEXECUTOR_H - -#pragma once - -#include -#include -#include -#include - -namespace AZ -{ - /** - * Helper for porting legacy jobs that allows Starting and Waiting for multiple jobs asynchronously - */ - class LegacyJobExecutor final - { - public: - LegacyJobExecutor() = default; - - LegacyJobExecutor(const LegacyJobExecutor&) = delete; - - ~LegacyJobExecutor() - { - WaitForCompletion(); - } - - template - inline void StartJob(const Function& processFunction, JobContext* context = nullptr) - { - Job * job = aznew JobFunctionExecutorHelper(processFunction, *this, context); - StartJobInternal(job); - } - - // SetPostJob - This API exists to support backwards compatibility and is not a recommended pattern to be copied. - // Instead, create AZ::Jobs with appropriate dependencies on each other - template - inline void SetPostJob(LegacyJobExecutor& postJobExecutor, const Function& processFunction, JobContext* context = nullptr) - { - AZStd::unique_ptr postJob(aznew JobFunctionExecutorHelper(processFunction, postJobExecutor, context)); // Allocate outside the lock - { - LockGuard lockGuard(m_conditionLock); - - AZ_Assert(!m_postJob, "Post already set"); - AZ_Assert(!m_running, "LegacyJobExecutor::SetPostJob() must be called before starting any jobs"); - m_postJob = std::move(postJob); - // Note: m_jobCount is not incremented until we push the post job - } - } - - inline void ClearPostJob() - { - LockGuard lockGuard(m_conditionLock); - m_postJob.reset(); - } - - inline void Reset() - { - AZ_Assert(!IsRunning(), "LegacyJobExecutor::Reset() called while jobs in flight"); - } - - inline void WaitForCompletion() - { - AZStd::unique_lock uniqueLock(m_conditionLock); - - while (m_running) - { - AZ_PROFILE_FUNCTION(AzCore); - m_completionCondition.wait(uniqueLock, [this] { return !this->m_running; }); - } - } - - // Push a logical fence that will cause WaitForCompletion to wait until PopCompletionFence is called and all jobs are complete. Analogue to the legacy API SJobState::SetStarted() - // Note: this does NOT fence execution of jobs in relation to each other - inline void PushCompletionFence() - { - IncJobCount(); - } - - // Pop a logical completion fence. Analogue to the legacy API SJobState::SetStopped() - inline void PopCompletionFence() - { - JobCompleteUpdate(); - } - - // Are there presently jobs in-flight (queued or running)? - inline bool IsRunning() - { - return m_running; - } - - private: - void JobCompleteUpdate() - { - AZ_Assert(m_jobCount, "Invalid LegacyJobExecutor::m_jobCount."); - if (--m_jobCount == 0) // note: m_jobCount is atomic, so only the last completing job will take the count to zero - { - JobExecutorHelper* postJob = nullptr; - { - // All state transitions to and from running must be serialized through the condition lock - LockGuard lockGuard(m_conditionLock); - - // Test count again as another job may have started before we got the lock - if (!m_jobCount) - { - m_running = false; - postJob = m_postJob.release(); - m_completionCondition.notify_all(); - } - } - - // outside the lock (this pointer is no longer valid)... - if (postJob) - { - postJob->StartOnExecutor(); - } - } - } - - void StartJobInternal(Job * job) - { - IncJobCount(); - job->Start(); - } - - void IncJobCount() - { - if (m_jobCount++ == 0) - { - // All state transitions to and from running must be serialized through the condition lock (Even though m_running is atomic) - LockGuard lockGuard(m_conditionLock); - m_running = true; - } - } - - class JobExecutorHelper - { - public: - virtual ~JobExecutorHelper() = default; - virtual void StartOnExecutor() = 0; - }; - - /** - * Private Job type that notifies the owning LegacyJobExecutor of completion - */ - template - class JobFunctionExecutorHelper : public JobFunction, public JobExecutorHelper - { - using Base = JobFunction; - public: - AZ_CLASS_ALLOCATOR(JobFunctionExecutorHelper, ThreadPoolAllocator, 0) - - JobFunctionExecutorHelper(typename JobFunction::FunctionCRef processFunction, LegacyJobExecutor& executor, JobContext* context) - : JobFunction(processFunction, true /* isAutoDelete */, context) - , m_executor(executor) - { - } - - void StartOnExecutor() override - { - m_executor.StartJobInternal(this); - } - - void Process() override - { - Base::Process(); - - m_executor.JobCompleteUpdate(); - } - - private: - LegacyJobExecutor& m_executor; - }; - - template - friend class JobFunctionExecutorHelper; // For JobCompleteUpdate, StartJobInternal - - using Lock = AZStd::mutex; - using LockGuard = AZStd::lock_guard; - - AZStd::condition_variable m_completionCondition; - Lock m_conditionLock; - AZStd::unique_ptr m_postJob; - - AZStd::atomic_uint m_jobCount{0}; - AZStd::atomic_bool m_running{false}; - }; -} - -#endif diff --git a/Code/Framework/AzCore/AzCore/azcore_files.cmake b/Code/Framework/AzCore/AzCore/azcore_files.cmake index 8b8a3b377a..7e3f501d6f 100644 --- a/Code/Framework/AzCore/AzCore/azcore_files.cmake +++ b/Code/Framework/AzCore/AzCore/azcore_files.cmake @@ -238,7 +238,6 @@ set(FILES Jobs/JobManagerComponent.cpp Jobs/JobManagerComponent.h Jobs/JobManagerDesc.h - Jobs/LegacyJobExecutor.h Jobs/MultipleDependentJob.h Jobs/task_group.h Math/Aabb.cpp From 495d40fa2016024b389d663f446b073e53eda690 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 10 Nov 2021 09:00:29 -0800 Subject: [PATCH 051/284] Removes unused ModuleStoragePolicy from Memory.h/cpp in AzCore Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Framework/AzCore/AzCore/Memory/Memory.cpp | 14 --- Code/Framework/AzCore/AzCore/Memory/Memory.h | 94 ------------------- 2 files changed, 108 deletions(-) diff --git a/Code/Framework/AzCore/AzCore/Memory/Memory.cpp b/Code/Framework/AzCore/AzCore/Memory/Memory.cpp index 6ec66f9e3d..6393e3138f 100644 --- a/Code/Framework/AzCore/AzCore/Memory/Memory.cpp +++ b/Code/Framework/AzCore/AzCore/Memory/Memory.cpp @@ -7,22 +7,8 @@ */ #include -#include #include -#include -#include - -AZ::AllocatorStorage::LazyAllocatorRef::~LazyAllocatorRef() -{ - m_destructor(*m_allocator); -} - -void AZ::AllocatorStorage::LazyAllocatorRef::Init(size_t size, size_t alignment, CreationFn creationFn, DestructionFn destructionFn) -{ - m_allocator = AZ::AllocatorManager::CreateLazyAllocator(size, alignment, creationFn); - m_destructor = destructionFn; -} ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// // New overloads diff --git a/Code/Framework/AzCore/AzCore/Memory/Memory.h b/Code/Framework/AzCore/AzCore/Memory/Memory.h index 2e08ec1b15..2e568a6cfb 100644 --- a/Code/Framework/AzCore/AzCore/Memory/Memory.h +++ b/Code/Framework/AzCore/AzCore/Memory/Memory.h @@ -521,19 +521,6 @@ namespace AZ { namespace AllocatorStorage { - /// A private structure to create heap-storage for an allocator that won't expire until other static module members are destructed. - struct LazyAllocatorRef - { - using CreationFn = IAllocator*(*)(void*); - using DestructionFn = void(*)(IAllocator&); - - ~LazyAllocatorRef(); - void Init(size_t size, size_t alignment, CreationFn creationFn, DestructionFn destructionFn); - - IAllocator* m_allocator = nullptr; - DestructionFn m_destructor = nullptr; - }; - /** * A base class for all storage policies. This exists to provide access to private IAllocator methods via template friends. */ @@ -640,87 +627,6 @@ namespace AZ template EnvironmentVariable EnvironmentStoragePolicy::s_allocator; - - /** - * ModuleStoragePolicy stores the allocator in a static variable that is local to the module using it. - * This forces separate instances of the allocator to exist in each module, and permits lazy instantiation. - * We only tolerate this for some special allocators, primarily to maintain backwards compatibility with CryEngine, - * since it still allocates outside of code in the data section. - * - * It has two ways of storing its allocator: either on the heap, which is the preferred way, since it guarantees - * the memory for the allocator won't be deallocated (such as in a DLL) before anyone that's using it. If disabled - * the allocator is stored in a static variable, which should only be used where this isn't a problem a shut-down - * time, such as on a console. - */ - template - struct ModuleStoragePolicyBase; - - template - struct ModuleStoragePolicyBase: public StoragePolicyBase - { - protected: - // Use a static instance to store the allocator. This is not recommended when the order of shut-down with the module matters, as the allocator could have its memory destroyed - // before the users of it are destroyed. The primary use case for this is allocators that need to support the CRT, as they cannot allocate from the heap. - static Allocator& GetModuleAllocatorInstance() - { - static Allocator* s_allocator = nullptr; - static typename AZStd::aligned_storage::value>::type s_storage; - - if (!s_allocator) - { - s_allocator = new (&s_storage) Allocator; - StoragePolicyBase::Create(*s_allocator, typename Allocator::Descriptor(), true); - } - - return *s_allocator; - } - }; - - template - struct ModuleStoragePolicyBase : public StoragePolicyBase - { - protected: - // Store-on-heap implementation uses the LazyAllocatorRef to create and destroy an allocator using heap-space so there isn't a problem with destruction order within the module. - static Allocator& GetModuleAllocatorInstance() - { - static LazyAllocatorRef s_allocator; - - if (!s_allocator.m_allocator) - { - s_allocator.Init(sizeof(Allocator), AZStd::alignment_of::value, [](void* mem) -> IAllocator* { return new (mem) Allocator; }, &StoragePolicyBase::Destroy); - StoragePolicyBase::Create(*static_cast(s_allocator.m_allocator), typename Allocator::Descriptor(), true); - } - - return *static_cast(s_allocator.m_allocator); - } - }; - - template - class ModuleStoragePolicy : public ModuleStoragePolicyBase - { - public: - using Base = ModuleStoragePolicyBase; - - static IAllocator& GetAllocator() - { - return Base::GetModuleAllocatorInstance(); - } - - static void Create(const typename Allocator::Descriptor& desc = typename Allocator::Descriptor()) - { - StoragePolicyBase::Create(Base::GetModuleAllocatorInstance(), desc, true); - } - - static void Destroy() - { - StoragePolicyBase::Destroy(Base::GetModuleAllocatorInstance()); - } - - static bool IsReady() - { - return Base::GetModuleAllocatorInstance().IsReady(); - } - }; } namespace Internal From db68078639a36fd677fd44a7edea85982d2742c5 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 10 Nov 2021 13:25:47 -0800 Subject: [PATCH 052/284] Removes TimeDataStatisticsManager from AzCore Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Statistics/TimeDataStatisticsManager.cpp | 49 ------------------ .../Statistics/TimeDataStatisticsManager.h | 51 ------------------- 2 files changed, 100 deletions(-) delete mode 100644 Code/Framework/AzCore/AzCore/Statistics/TimeDataStatisticsManager.cpp delete mode 100644 Code/Framework/AzCore/AzCore/Statistics/TimeDataStatisticsManager.h diff --git a/Code/Framework/AzCore/AzCore/Statistics/TimeDataStatisticsManager.cpp b/Code/Framework/AzCore/AzCore/Statistics/TimeDataStatisticsManager.cpp deleted file mode 100644 index 0e9b36a8b6..0000000000 --- a/Code/Framework/AzCore/AzCore/Statistics/TimeDataStatisticsManager.cpp +++ /dev/null @@ -1,49 +0,0 @@ -/* - * 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 "TimeDataStatisticsManager.h" - -namespace AZ -{ - namespace Statistics - { - void TimeDataStatisticsManager::PushTimeDataSample(const char * registerName, const AZ::Debug::ProfilerRegister::TimeData& timeData) - { - const AZStd::string statName(registerName); - NamedRunningStatistic* statistic = GetStatistic(statName); - if (!statistic) - { - const AZStd::string units("us"); - AddStatistic(statName, statName, units, false); - AZ::Debug::ProfilerRegister::TimeData zeroTimeData; - memset(&zeroTimeData, 0, sizeof(AZ::Debug::ProfilerRegister::TimeData)); - m_previousTimeData[statName] = zeroTimeData; - statistic = GetStatistic(statName); - AZ_Assert(statistic != nullptr, "Fatal error adding a new statistic object"); - } - - const AZ::u64 accumulatedTime = timeData.m_time; - const AZ::s64 totalNumCalls = timeData.m_calls; - const AZ::u64 previousAccumulatedTime = m_previousTimeData[statName].m_time; - const AZ::s64 previousTotalNumCalls = m_previousTimeData[statName].m_calls; - const AZ::u64 deltaTime = accumulatedTime - previousAccumulatedTime; - const AZ::s64 deltaCalls = totalNumCalls - previousTotalNumCalls; - - if (deltaCalls == 0) - { - //This is the same old data. Let's skip it - return; - } - - double newSample = static_cast(deltaTime) / deltaCalls; - - statistic->PushSample(newSample); - m_previousTimeData[statName] = timeData; - } - } //namespace Statistics -} //namespace AZ diff --git a/Code/Framework/AzCore/AzCore/Statistics/TimeDataStatisticsManager.h b/Code/Framework/AzCore/AzCore/Statistics/TimeDataStatisticsManager.h deleted file mode 100644 index c9adc4de2f..0000000000 --- a/Code/Framework/AzCore/AzCore/Statistics/TimeDataStatisticsManager.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * 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 - -#include -#include - -namespace AZ -{ - namespace Statistics - { - /** - * @brief Specialization useful for data generated with AZ::Debug::FrameProfileComponent - * - * Timer based data collection using AZ_PROFILE_TIMER(...), available in - * AzCore/Debug/Profiler.h can be collected when using AZ::Debug::FrameProfilerComponent - * and AZ::Debug::FrameProfilerBus. The method PushTimeDataSample(...) is a convenience - * to convert those Timer registers into a RunningStatistic. - * - * - */ - class TimeDataStatisticsManager : public StatisticsManager<> - { - public: - TimeDataStatisticsManager() = default; - virtual ~TimeDataStatisticsManager() = default; - - /** - * @brief Adds one sample data to a specific running stat by name. - * - * This method is specialized to work with ProfilerRegister::TimeData that can be intercepted - * during AZ::Debug::FrameProfilerBus::OnFrameProfilerData(). - * For each @param registerName a new RunningStat object is created if it doesn't exist. - * - * Adds the TimeData as one sample for its RunningStatistic. - */ - void PushTimeDataSample(const char * registerName, const AZ::Debug::ProfilerRegister::TimeData& timeData); - - protected: - ///We store here the previous value from the previous timer frame data. - ///This is necessary because AZ_PROFILER_TIMER is cumulative - ///and we need the time spent for each call. - AZStd::unordered_map m_previousTimeData; - }; - } //namespace Statistics -} //namespace AZ From f2ec19b5e7bf7898b63df1cc1f5d2c0d879711c7 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 10 Nov 2021 14:08:21 -0800 Subject: [PATCH 053/284] Remove MockComponentApplication reimplementation from Blast.Editor tests Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Gems/Blast/Code/CMakeLists.txt | 1 + .../Editor/EditorBlastChunksAssetHandlerTest.cpp | 12 ------------ 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/Gems/Blast/Code/CMakeLists.txt b/Gems/Blast/Code/CMakeLists.txt index 7f478054b8..a01c0d621a 100644 --- a/Gems/Blast/Code/CMakeLists.txt +++ b/Gems/Blast/Code/CMakeLists.txt @@ -162,6 +162,7 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED) 3rdParty::Qt::Test AZ::AzTestShared AZ::AzTest + AZ::AzCoreTestCommon AZ::AzToolsFrameworkTestCommon Gem::Blast.Editor.Static ) diff --git a/Gems/Blast/Code/Tests/Editor/EditorBlastChunksAssetHandlerTest.cpp b/Gems/Blast/Code/Tests/Editor/EditorBlastChunksAssetHandlerTest.cpp index 80a0587b1b..bb5d6160a7 100644 --- a/Gems/Blast/Code/Tests/Editor/EditorBlastChunksAssetHandlerTest.cpp +++ b/Gems/Blast/Code/Tests/Editor/EditorBlastChunksAssetHandlerTest.cpp @@ -16,18 +16,6 @@ namespace UnitTest { - MockComponentApplication::MockComponentApplication() - { - AZ::ComponentApplicationBus::Handler::BusConnect(); - AZ::Interface::Register(this); - } - - MockComponentApplication::~MockComponentApplication() - { - AZ::Interface::Unregister(this); - AZ::ComponentApplicationBus::Handler::BusDisconnect(); - } - class MockAssetCatalogRequestBusHandler final : public AZ::Data::AssetCatalogRequestBus::Handler { From 8cf499b6573ade44a24d77128df66917b497ac29 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 10 Nov 2021 14:23:32 -0800 Subject: [PATCH 054/284] Remove CfgFileAsset from AzFramework Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../AzFramework/Asset/CfgFileAsset.h | 24 ------------------- .../AzFramework/azframework_files.cmake | 1 - 2 files changed, 25 deletions(-) delete mode 100644 Code/Framework/AzFramework/AzFramework/Asset/CfgFileAsset.h diff --git a/Code/Framework/AzFramework/AzFramework/Asset/CfgFileAsset.h b/Code/Framework/AzFramework/AzFramework/Asset/CfgFileAsset.h deleted file mode 100644 index 2aadf9ae6c..0000000000 --- a/Code/Framework/AzFramework/AzFramework/Asset/CfgFileAsset.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * 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 - -#include -#include - -namespace AzFramework -{ - class CfgFileAsset - { - public: - AZ_TYPE_INFO(CfgFileAsset, "{117A80A5-206B-4D85-9445-33B446D94C35}") - static const char* GetFileFilter() - { - return "*.cfg"; - } - }; -} diff --git a/Code/Framework/AzFramework/AzFramework/azframework_files.cmake b/Code/Framework/AzFramework/AzFramework/azframework_files.cmake index 73608d6a85..87108040b2 100644 --- a/Code/Framework/AzFramework/AzFramework/azframework_files.cmake +++ b/Code/Framework/AzFramework/AzFramework/azframework_files.cmake @@ -59,7 +59,6 @@ set(FILES Asset/AssetSeedList.h Asset/AssetSystemComponent.cpp Asset/AssetSystemComponent.h - Asset/CfgFileAsset.h Asset/GenericAssetHandler.h Asset/AssetBundleManifest.cpp Asset/AssetBundleManifest.h From 1846077f71f7b183178bb921d3516dd253949add Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 10 Nov 2021 15:47:12 -0800 Subject: [PATCH 055/284] =?UTF-8?q?=EF=BB=BFunused=20DebugCameraBus=20ebus?= =?UTF-8?q?=20from=20AzFramework?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../AzFramework/Debug/DebugCameraBus.h | 68 ------------------- .../AzFramework/azframework_files.cmake | 2 - 2 files changed, 70 deletions(-) diff --git a/Code/Framework/AzFramework/AzFramework/Debug/DebugCameraBus.h b/Code/Framework/AzFramework/AzFramework/Debug/DebugCameraBus.h index 0f8ee60efd..e69de29bb2 100644 --- a/Code/Framework/AzFramework/AzFramework/Debug/DebugCameraBus.h +++ b/Code/Framework/AzFramework/AzFramework/Debug/DebugCameraBus.h @@ -1,68 +0,0 @@ -/* - * 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 - -#include - -namespace AZ -{ - class Transform; - class Matrix3x3; - class Vector3; -} - -namespace AzFramework -{ - //! The debug camera allows the user control over the view through mouse + keyboard and/or - //! controller while the game still uses the view camera for everything else. This can for - //! instance be used to debug occlusion culling as all occlusion calculates will be done - //! from the view camera, so the debug camera makes it possible to check if hidden objects - //! are correctly culled. - //! This class can be useful to validate a hypothetical camera-based look-ahead asset streaming system. - //! The developer can update the camera location using this EBus, without requiring to move the viewport camera. - class DebugCameraInterface - : public AZ::EBusTraits - { - public: - enum class Mode - { - FreeFloating, //< Controls move the debug camera through the world. - Fixed, //< The debug camera stays in the position it was navigated to and control is handed back to the game. - Disabled, //< Debug camera is disabled. - - Unknown - }; - - static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Single; - - //! Sets the debug camera in free floating, fixed or disabled mode. - virtual void SetMode(Mode mode) = 0; - //! Returns the current mode the debug camera is in. - virtual Mode GetMode() const = 0; - - //! Retrieves the world position of the debug camera. This is the same position that can be retrieved - //! from GetTransform. - virtual void GetPosition(AZ::Vector3& result) const = 0; - //! Retrieves the view orientation of the debub camera. This is the same orientation that can be retrieved - //! from GetTransform. - virtual void GetView(AZ::Matrix3x3& result) const = 0; - //! Get the world transform for the debug camera. - virtual void GetTransform(AZ::Transform& result) const = 0; - }; - using DebugCameraBus = AZ::EBus; - - //! The debug camera sends out notifications about some changes. This interface provides access to these. - class DebugCameraEventsInterface - : public AZ::EBusTraits - { - public: - //! Called when the debug camera moves, usually due to user interaction. - virtual void DebugCameraMoved(const AZ::Transform& world) {} - }; - using DebugCameraEventsBus = AZ::EBus; -} // namespace AzFramework diff --git a/Code/Framework/AzFramework/AzFramework/azframework_files.cmake b/Code/Framework/AzFramework/AzFramework/azframework_files.cmake index 87108040b2..9af049a7c1 100644 --- a/Code/Framework/AzFramework/AzFramework/azframework_files.cmake +++ b/Code/Framework/AzFramework/AzFramework/azframework_files.cmake @@ -77,8 +77,6 @@ set(FILES Asset/Benchmark/BenchmarkSettingsAsset.h CommandLine/CommandLine.h CommandLine/CommandRegistrationBus.h - Debug/DebugCameraBus.h - feature_options.cmake Viewport/ViewportBus.h Viewport/ViewportBus.cpp Viewport/ViewportColors.h From 02c0521a201ee4ec592982249ab16d196741afc8 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 10 Nov 2021 15:48:42 -0800 Subject: [PATCH 056/284] Removes PrefabEntityOwnershipService from AzFramework Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Entity/PrefabEntityOwnershipService.cpp | 13 ------------ .../Entity/PrefabEntityOwnershipService.h | 20 ------------------- .../AzFramework/azframework_files.cmake | 2 -- 3 files changed, 35 deletions(-) delete mode 100644 Code/Framework/AzFramework/AzFramework/Entity/PrefabEntityOwnershipService.cpp delete mode 100644 Code/Framework/AzFramework/AzFramework/Entity/PrefabEntityOwnershipService.h diff --git a/Code/Framework/AzFramework/AzFramework/Entity/PrefabEntityOwnershipService.cpp b/Code/Framework/AzFramework/AzFramework/Entity/PrefabEntityOwnershipService.cpp deleted file mode 100644 index 9b2c432332..0000000000 --- a/Code/Framework/AzFramework/AzFramework/Entity/PrefabEntityOwnershipService.cpp +++ /dev/null @@ -1,13 +0,0 @@ -/* - * 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 - -namespace AzFramework -{ -} diff --git a/Code/Framework/AzFramework/AzFramework/Entity/PrefabEntityOwnershipService.h b/Code/Framework/AzFramework/AzFramework/Entity/PrefabEntityOwnershipService.h deleted file mode 100644 index ac24af880a..0000000000 --- a/Code/Framework/AzFramework/AzFramework/Entity/PrefabEntityOwnershipService.h +++ /dev/null @@ -1,20 +0,0 @@ -/* - * 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 - -#include - -namespace AzFramework -{ - class PrefabEntityOwnershipService - : public EntityOwnershipService - { - - }; -} diff --git a/Code/Framework/AzFramework/AzFramework/azframework_files.cmake b/Code/Framework/AzFramework/AzFramework/azframework_files.cmake index 9af049a7c1..511439ab10 100644 --- a/Code/Framework/AzFramework/AzFramework/azframework_files.cmake +++ b/Code/Framework/AzFramework/AzFramework/azframework_files.cmake @@ -120,8 +120,6 @@ set(FILES Entity/SliceGameEntityOwnershipService.h Entity/SliceGameEntityOwnershipService.cpp Entity/SliceGameEntityOwnershipServiceBus.h - Entity/PrefabEntityOwnershipService.h - Entity/PrefabEntityOwnershipService.cpp Components/ComponentAdapter.h Components/ComponentAdapter.inl Components/ComponentAdapterHelpers.h From 53272d82c9622fa59ff4bef9c5b03ba08c3baae0 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 11 Nov 2021 13:47:13 -0800 Subject: [PATCH 057/284] Revert "Removes PrefabEntityOwnershipService from AzFramework" This reverts commit e2d2cb07a0a1431f8fcdd20ee07ff2788ed603c0. Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Entity/PrefabEntityOwnershipService.cpp | 13 ++++++++++++ .../Entity/PrefabEntityOwnershipService.h | 20 +++++++++++++++++++ .../AzFramework/azframework_files.cmake | 2 ++ 3 files changed, 35 insertions(+) create mode 100644 Code/Framework/AzFramework/AzFramework/Entity/PrefabEntityOwnershipService.cpp create mode 100644 Code/Framework/AzFramework/AzFramework/Entity/PrefabEntityOwnershipService.h diff --git a/Code/Framework/AzFramework/AzFramework/Entity/PrefabEntityOwnershipService.cpp b/Code/Framework/AzFramework/AzFramework/Entity/PrefabEntityOwnershipService.cpp new file mode 100644 index 0000000000..9b2c432332 --- /dev/null +++ b/Code/Framework/AzFramework/AzFramework/Entity/PrefabEntityOwnershipService.cpp @@ -0,0 +1,13 @@ +/* + * 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 + +namespace AzFramework +{ +} diff --git a/Code/Framework/AzFramework/AzFramework/Entity/PrefabEntityOwnershipService.h b/Code/Framework/AzFramework/AzFramework/Entity/PrefabEntityOwnershipService.h new file mode 100644 index 0000000000..ac24af880a --- /dev/null +++ b/Code/Framework/AzFramework/AzFramework/Entity/PrefabEntityOwnershipService.h @@ -0,0 +1,20 @@ +/* + * 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 + +#include + +namespace AzFramework +{ + class PrefabEntityOwnershipService + : public EntityOwnershipService + { + + }; +} diff --git a/Code/Framework/AzFramework/AzFramework/azframework_files.cmake b/Code/Framework/AzFramework/AzFramework/azframework_files.cmake index 511439ab10..9af049a7c1 100644 --- a/Code/Framework/AzFramework/AzFramework/azframework_files.cmake +++ b/Code/Framework/AzFramework/AzFramework/azframework_files.cmake @@ -120,6 +120,8 @@ set(FILES Entity/SliceGameEntityOwnershipService.h Entity/SliceGameEntityOwnershipService.cpp Entity/SliceGameEntityOwnershipServiceBus.h + Entity/PrefabEntityOwnershipService.h + Entity/PrefabEntityOwnershipService.cpp Components/ComponentAdapter.h Components/ComponentAdapter.inl Components/ComponentAdapterHelpers.h From 507a305f67a86f344d2c174bf0e6acf186369067 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Fri, 12 Nov 2021 12:25:29 -0800 Subject: [PATCH 058/284] Cleanup before merge Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Framework/AzCore/Tests/Jobs.cpp | 98 ------------------- .../Entity/PrefabEntityOwnershipService.cpp | 13 --- .../AzFramework/azframework_files.cmake | 1 - scripts/cleanup/unusued_compilation.py | 25 +++-- 4 files changed, 17 insertions(+), 120 deletions(-) delete mode 100644 Code/Framework/AzFramework/AzFramework/Entity/PrefabEntityOwnershipService.cpp diff --git a/Code/Framework/AzCore/Tests/Jobs.cpp b/Code/Framework/AzCore/Tests/Jobs.cpp index 041f4970d1..20c960535d 100644 --- a/Code/Framework/AzCore/Tests/Jobs.cpp +++ b/Code/Framework/AzCore/Tests/Jobs.cpp @@ -10,7 +10,6 @@ #include #include #include -#include #include #include #include @@ -1398,103 +1397,6 @@ namespace UnitTest run(); } - using JobLegacyJobExecutorIsRunning = DefaultJobManagerSetupFixture; - TEST_F(JobLegacyJobExecutorIsRunning, Test) - { - // Note: Legacy JobExecutor exists as an adapter to Legacy CryEngine jobs. - // When writing new jobs instead favor direct use of the AZ::Job type family - AZ::LegacyJobExecutor jobExecutor; - EXPECT_FALSE(jobExecutor.IsRunning()); - - // Completion fences and IsRunning() - { - jobExecutor.PushCompletionFence(); - EXPECT_TRUE(jobExecutor.IsRunning()); - jobExecutor.PopCompletionFence(); - EXPECT_FALSE(jobExecutor.IsRunning()); - } - - AZStd::atomic_bool jobExecuted{ false }; - AZStd::binary_semaphore jobSemaphore; - - jobExecutor.StartJob([&jobSemaphore, &jobExecuted] - { - // Wait until the test thread releases - jobExecuted = true; - jobSemaphore.acquire(); - } - ); - EXPECT_TRUE(jobExecutor.IsRunning()); - - // Allow the job to complete - jobSemaphore.release(); - - // Wait for completion - jobExecutor.WaitForCompletion(); - EXPECT_FALSE(jobExecutor.IsRunning()); - EXPECT_TRUE(jobExecuted); - } - - using JobLegacyJobExecutorWaitForCompletion = DefaultJobManagerSetupFixture; - TEST_F(JobLegacyJobExecutorWaitForCompletion, Test) - { - // Note: Legacy JobExecutor exists as an adapter to Legacy CryEngine jobs. - // When writing new jobs instead favor direct use of the AZ::Job type family - AZ::LegacyJobExecutor jobExecutor; - - // Semaphores used to park job threads until released - const AZ::u32 numParkJobs = AZ::JobContext::GetGlobalContext()->GetJobManager().GetNumWorkerThreads(); - AZStd::vector jobSemaphores(numParkJobs); - - // Data destination for workers - const AZ::u32 workJobCount = numParkJobs * 2; - AZStd::vector jobData(workJobCount, 0); - - // Touch completion multiple times as a test of correctly transitioning in and out of the all jobs completed state - AZ::u32 NumCompletionCycles = 5; - for (AZ::u32 completionItrIdx = 0; completionItrIdx < NumCompletionCycles; ++completionItrIdx) - { - // Intentionally park every job thread - for (auto& jobSemaphore : jobSemaphores) - { - jobExecutor.StartJob([&jobSemaphore] - { - jobSemaphore.acquire(); - } - ); - } - EXPECT_TRUE(jobExecutor.IsRunning()); - - // Kick off verifiable "work" jobs - for (AZ::u32 i = 0; i < workJobCount; ++i) - { - jobExecutor.StartJob([i, &jobData] - { - jobData[i] = i + 1; - } - ); - } - EXPECT_TRUE(jobExecutor.IsRunning()); - - // Now released our parked job threads - for (auto& jobSemaphore : jobSemaphores) - { - jobSemaphore.release(); - } - - // And wait for all jobs to finish - jobExecutor.WaitForCompletion(); - EXPECT_FALSE(jobExecutor.IsRunning()); - - // Verify our workers ran and clear data - for (size_t i = 0; i < workJobCount; ++i) - { - EXPECT_EQ(jobData[i], i + 1); - jobData[i] = 0; - } - } - } - class JobCompletionCompleteNotScheduled : public DefaultJobManagerSetupFixture { diff --git a/Code/Framework/AzFramework/AzFramework/Entity/PrefabEntityOwnershipService.cpp b/Code/Framework/AzFramework/AzFramework/Entity/PrefabEntityOwnershipService.cpp deleted file mode 100644 index 9b2c432332..0000000000 --- a/Code/Framework/AzFramework/AzFramework/Entity/PrefabEntityOwnershipService.cpp +++ /dev/null @@ -1,13 +0,0 @@ -/* - * 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 - -namespace AzFramework -{ -} diff --git a/Code/Framework/AzFramework/AzFramework/azframework_files.cmake b/Code/Framework/AzFramework/AzFramework/azframework_files.cmake index 9af049a7c1..9693d75b06 100644 --- a/Code/Framework/AzFramework/AzFramework/azframework_files.cmake +++ b/Code/Framework/AzFramework/AzFramework/azframework_files.cmake @@ -121,7 +121,6 @@ set(FILES Entity/SliceGameEntityOwnershipService.cpp Entity/SliceGameEntityOwnershipServiceBus.h Entity/PrefabEntityOwnershipService.h - Entity/PrefabEntityOwnershipService.cpp Components/ComponentAdapter.h Components/ComponentAdapter.inl Components/ComponentAdapterHelpers.h diff --git a/scripts/cleanup/unusued_compilation.py b/scripts/cleanup/unusued_compilation.py index 25fa4ca3ce..0d188aaa6f 100644 --- a/scripts/cleanup/unusued_compilation.py +++ b/scripts/cleanup/unusued_compilation.py @@ -14,7 +14,12 @@ sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), '../bui import ci_build EXTENSIONS_OF_INTEREST = ('.c', '.cc', '.cpp', '.cxx', '.h', '.hpp', '.hxx', '.inl') -EXCLUSIONS = ('AZ_DECLARE_MODULE_CLASS') +EXCLUSIONS = ( + 'AZ_DECLARE_MODULE_CLASS(', + 'REGISTER_QT_CLASS_DESC(', + 'TEST(', + 'TEST_F(' +) def create_filelist(path): filelist = set() @@ -42,6 +47,13 @@ def is_excluded(file): normalized_file = os.path.normpath(file) if '\\Platform\\' in normalized_file and not '\\Windows\\' in normalized_file: return True + if '\\Template\\' in normalized_file: + return True + with open(file, 'r') as file: + contents = file.readlines() + for exclusion_term in EXCLUSIONS: + if exclusion_term in contents: + return True return False def filter_from_processed(filelist, filter_file_path): @@ -49,11 +61,7 @@ def filter_from_processed(filelist, filter_file_path): return # nothing to filter with open(filter_file_path, 'r') as filter_file: - try: - processed_files = [s.strip() for s in filter_file.readlines()] - except UnicodeDecodeError as err: - print('Error reading file {}, err: {}'.format(filter_file_path, err)) - sys.exit(1) + processed_files = [s.strip() for s in filter_file.readlines()] filelist -= set(processed_files) filelist = [f for f in filelist if not is_excluded(f)] @@ -65,10 +73,11 @@ def cleanup_unused_compilation(path): # starting over. Removing the "unusued_compilation_processed.txt" will start over. filter_file_path = os.path.join(os.getcwd(), 'unusued_compilation_processed.txt') filter_from_processed(filelist, filter_file_path) + sorted_filelist = sorted(filelist) # 3. For each file - total_files = len(filelist) + total_files = len(sorted_filelist) current_files = 1 - for file in filelist: + for file in sorted_filelist: print(f"[{current_files}/{total_files}] Trying {file}") # b. create backup shutil.copy(file, file + '.bak') From 7c301ef762897fc82edd43783f23eec186a02cb0 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Fri, 12 Nov 2021 17:25:14 -0800 Subject: [PATCH 059/284] cleanup script updates Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- scripts/cleanup/unusued_compilation.py | 42 ++++++++++++++++---------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/scripts/cleanup/unusued_compilation.py b/scripts/cleanup/unusued_compilation.py index 0d188aaa6f..715ba1f6fa 100644 --- a/scripts/cleanup/unusued_compilation.py +++ b/scripts/cleanup/unusued_compilation.py @@ -7,6 +7,7 @@ # import argparse +import fnmatch import os import shutil import sys @@ -20,6 +21,17 @@ EXCLUSIONS = ( 'TEST(', 'TEST_F(' ) +PATH_EXCLUSIONS = ( + '*\\Platform\\Android\\*', + '*\\Platform\\Common\\*', + '*\\Platform\\iOS\\*', + '*\\Platform\\Linux\\*', + '*\\Platform\\Mac\\*', + 'Templates\\*', + 'python\\*', + 'build\\*', + 'install\\*' +) def create_filelist(path): filelist = set() @@ -32,38 +44,37 @@ def create_filelist(path): extension = os.path.splitext(f)[1] extension_lower = extension.lower() if extension_lower in EXTENSIONS_OF_INTEREST: - filelist.add(os.path.join(dp, f)) + normalized_file = os.path.normpath(os.path.join(dp, f)) + filelist.add(normalized_file) else: extension = os.path.splitext(input_file)[1] extension_lower = extension.lower() if extension_lower in EXTENSIONS_OF_INTEREST: - filelist.add(os.path.join(os.getcwd(), input_file)) + normalized_file = os.path.normpath(os.path.join(os.getcwd(), input_file)) + filelist.add(normalized_file) else: print(f'Error, file {input_file} does not have an extension of interest') sys.exit(1) return filelist def is_excluded(file): - normalized_file = os.path.normpath(file) - if '\\Platform\\' in normalized_file and not '\\Windows\\' in normalized_file: - return True - if '\\Template\\' in normalized_file: - return True + for path_exclusion in PATH_EXCLUSIONS: + if fnmatch.fnmatch(file, path_exclusion): + return True with open(file, 'r') as file: - contents = file.readlines() + contents = file.read() for exclusion_term in EXCLUSIONS: if exclusion_term in contents: return True return False def filter_from_processed(filelist, filter_file_path): - if not os.path.exists(filter_file_path): - return # nothing to filter - - with open(filter_file_path, 'r') as filter_file: - processed_files = [s.strip() for s in filter_file.readlines()] - filelist -= set(processed_files) filelist = [f for f in filelist if not is_excluded(f)] + if os.path.exists(filter_file_path): + with open(filter_file_path, 'r') as filter_file: + processed_files = [s.strip() for s in filter_file.readlines()] + filelist -= set(processed_files) + return filelist def cleanup_unused_compilation(path): # 1. Create a list of all h/cpp files (consider multiple extensions) @@ -72,8 +83,7 @@ def cleanup_unused_compilation(path): # can take a while. If something is found in the middle, we want to be able to continue instead of # starting over. Removing the "unusued_compilation_processed.txt" will start over. filter_file_path = os.path.join(os.getcwd(), 'unusued_compilation_processed.txt') - filter_from_processed(filelist, filter_file_path) - sorted_filelist = sorted(filelist) + filelist = filter_from_processed(filelist, filter_file_path) # 3. For each file total_files = len(sorted_filelist) current_files = 1 From 5f55815fca0d03bd006bf852abee33878b698970 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Fri, 12 Nov 2021 19:03:29 -0800 Subject: [PATCH 060/284] more filters/using reverse on this node Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- scripts/cleanup/unusued_compilation.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/cleanup/unusued_compilation.py b/scripts/cleanup/unusued_compilation.py index 715ba1f6fa..a162683460 100644 --- a/scripts/cleanup/unusued_compilation.py +++ b/scripts/cleanup/unusued_compilation.py @@ -19,7 +19,8 @@ EXCLUSIONS = ( 'AZ_DECLARE_MODULE_CLASS(', 'REGISTER_QT_CLASS_DESC(', 'TEST(', - 'TEST_F(' + 'TEST_F(', + 'INSTANTIATE_TEST_CASE_P(' ) PATH_EXCLUSIONS = ( '*\\Platform\\Android\\*', @@ -84,6 +85,7 @@ def cleanup_unused_compilation(path): # starting over. Removing the "unusued_compilation_processed.txt" will start over. filter_file_path = os.path.join(os.getcwd(), 'unusued_compilation_processed.txt') filelist = filter_from_processed(filelist, filter_file_path) + sorted_filelist = sorted(filelist, reverse=True) # 3. For each file total_files = len(sorted_filelist) current_files = 1 From 6876cfda30ffeac9af894315da5367c4f0ca9336 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Fri, 12 Nov 2021 19:02:07 -0800 Subject: [PATCH 061/284] =?UTF-8?q?=EF=BB=BFMore=20filters?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- scripts/cleanup/unusued_compilation.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/scripts/cleanup/unusued_compilation.py b/scripts/cleanup/unusued_compilation.py index a162683460..f209d5325b 100644 --- a/scripts/cleanup/unusued_compilation.py +++ b/scripts/cleanup/unusued_compilation.py @@ -20,7 +20,8 @@ EXCLUSIONS = ( 'REGISTER_QT_CLASS_DESC(', 'TEST(', 'TEST_F(', - 'INSTANTIATE_TEST_CASE_P(' + 'INSTANTIATE_TEST_CASE_P(', + 'AZ_UNIT_TEST_HOOK(' ) PATH_EXCLUSIONS = ( '*\\Platform\\Android\\*', @@ -85,7 +86,7 @@ def cleanup_unused_compilation(path): # starting over. Removing the "unusued_compilation_processed.txt" will start over. filter_file_path = os.path.join(os.getcwd(), 'unusued_compilation_processed.txt') filelist = filter_from_processed(filelist, filter_file_path) - sorted_filelist = sorted(filelist, reverse=True) + sorted_filelist = sorted(filelist) # 3. For each file total_files = len(sorted_filelist) current_files = 1 From bbec1b52421d7c379e791148f961a53f48fd7d73 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 15 Nov 2021 09:34:00 -0800 Subject: [PATCH 062/284] more exclusions for unused_compilation Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- scripts/cleanup/unusued_compilation.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/scripts/cleanup/unusued_compilation.py b/scripts/cleanup/unusued_compilation.py index f209d5325b..69ff6bc3cf 100644 --- a/scripts/cleanup/unusued_compilation.py +++ b/scripts/cleanup/unusued_compilation.py @@ -21,7 +21,10 @@ EXCLUSIONS = ( 'TEST(', 'TEST_F(', 'INSTANTIATE_TEST_CASE_P(', - 'AZ_UNIT_TEST_HOOK(' + 'AZ_UNIT_TEST_HOOK(', + 'IMPLEMENT_TEST_EXECUTABLE_MAIN(', + 'DllMain(', + 'CreatePluginInstance(' ) PATH_EXCLUSIONS = ( '*\\Platform\\Android\\*', @@ -32,7 +35,8 @@ PATH_EXCLUSIONS = ( 'Templates\\*', 'python\\*', 'build\\*', - 'install\\*' + 'install\\*', + 'Code\\Framework\\AzCore\\AzCore\\Android\\*' ) def create_filelist(path): From 2de27a6d08fc25126a2fd67beedc87175f234734 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 15 Nov 2021 14:04:05 -0800 Subject: [PATCH 063/284] some more exclussions Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- scripts/cleanup/unusued_compilation.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/cleanup/unusued_compilation.py b/scripts/cleanup/unusued_compilation.py index 69ff6bc3cf..1f1a9894c7 100644 --- a/scripts/cleanup/unusued_compilation.py +++ b/scripts/cleanup/unusued_compilation.py @@ -21,6 +21,7 @@ EXCLUSIONS = ( 'TEST(', 'TEST_F(', 'INSTANTIATE_TEST_CASE_P(', + 'INSTANTIATE_TYPED_TEST_CASE_P(', 'AZ_UNIT_TEST_HOOK(', 'IMPLEMENT_TEST_EXECUTABLE_MAIN(', 'DllMain(', @@ -75,7 +76,7 @@ def is_excluded(file): return False def filter_from_processed(filelist, filter_file_path): - filelist = [f for f in filelist if not is_excluded(f)] + filelist = set([f for f in filelist if not is_excluded(f)]) if os.path.exists(filter_file_path): with open(filter_file_path, 'r') as filter_file: processed_files = [s.strip() for s in filter_file.readlines()] From 8e1a3bc0731a23023eb308035d5c0fa80e05bc5d Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Tue, 16 Nov 2021 11:52:52 -0800 Subject: [PATCH 064/284] Removes CVarMenu from Code/Editor Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Editor/CVarMenu.cpp | 186 ----------------------------- Code/Editor/CVarMenu.h | 65 ---------- Code/Editor/MainWindow.cpp | 1 - Code/Editor/MainWindow.h | 1 - Code/Editor/editor_lib_files.cmake | 2 - 5 files changed, 255 deletions(-) delete mode 100644 Code/Editor/CVarMenu.cpp delete mode 100644 Code/Editor/CVarMenu.h diff --git a/Code/Editor/CVarMenu.cpp b/Code/Editor/CVarMenu.cpp deleted file mode 100644 index 6449be9b3c..0000000000 --- a/Code/Editor/CVarMenu.cpp +++ /dev/null @@ -1,186 +0,0 @@ -/* - * 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 "EditorDefs.h" - -#include "CVarMenu.h" - -CVarMenu::CVarMenu(QWidget* parent) - : QMenu(parent) -{ -} - -void CVarMenu::AddCVarToggleItem(CVarToggle cVarToggle) -{ - // Add CVar toggle action - QAction* action = addAction(cVarToggle.m_displayName); - connect(action, &QAction::triggered, [this, cVarToggle](bool checked) - { - // Update the CVar's value based on the action's new checked state - ICVar* cVar = gEnv->pConsole->GetCVar(cVarToggle.m_cVarName.toUtf8().data()); - if (cVar) - { - SetCVar(cVar, checked ? cVarToggle.m_onValue : cVarToggle.m_offValue); - } - }); - action->setCheckable(true); - - // Initialize the action's checked state based on the associated CVar's value - ICVar* cVar = gEnv->pConsole->GetCVar(cVarToggle.m_cVarName.toUtf8().data()); - bool checked = (cVar && cVar->GetFVal() == cVarToggle.m_onValue); - action->setChecked(checked); -} - -void CVarMenu::AddCVarValuesItem(QString cVarName, - QString displayName, - CVarDisplayNameValuePairs availableCVarValues, - float offValue) -{ - // Add a submenu offering multiple values for one CVar - QMenu* menu = addMenu(displayName); - QActionGroup* group = new QActionGroup(menu); - group->setExclusive(true); - - ICVar* cVar = gEnv->pConsole->GetCVar(cVarName.toUtf8().data()); - float cVarValue = cVar ? cVar->GetFVal() : 0.0f; - for (const auto& availableCVarValue : availableCVarValues) - { - QAction* action = menu->addAction(availableCVarValue.first); - action->setCheckable(true); - group->addAction(action); - - float availableOnValue = availableCVarValue.second; - connect(action, &QAction::triggered, [this, action, cVarName, availableOnValue, offValue](bool checked) - { - ICVar* cVar = gEnv->pConsole->GetCVar(cVarName.toUtf8().data()); - if (cVar) - { - if (!checked) - { - SetCVar(cVar, offValue); - } - else - { - // Toggle the CVar and update the action's checked state to - // allow none of the items to be checked in the exclusive group. - // Otherwise we could have just used the action's currently checked - // state and updated the CVar's value only - bool cVarOn = (cVar->GetFVal() == availableOnValue); - checked = !cVarOn; - SetCVar(cVar, checked ? availableOnValue : offValue); - action->setChecked(checked); - } - } - }); - - // Initialize the action's checked state based on the CVar's current value - bool checked = (cVarValue == availableOnValue); - action->setChecked(checked); - } -} - -void CVarMenu::AddUniqueCVarsItem(QString displayName, - AZStd::vector availableCVars) -{ - // Add a submenu of actions offering values for unique CVars - QMenu* menu = addMenu(displayName); - QActionGroup* group = new QActionGroup(menu); - group->setExclusive(true); - - for (const CVarToggle& availableCVar : availableCVars) - { - QAction* action = menu->addAction(availableCVar.m_displayName); - action->setCheckable(true); - group->addAction(action); - - connect(action, &QAction::triggered, [this, action, availableCVar, availableCVars](bool checked) - { - ICVar* cVar = gEnv->pConsole->GetCVar(availableCVar.m_cVarName.toUtf8().data()); - if (cVar) - { - if (!checked) - { - SetCVar(cVar, availableCVar.m_offValue); - } - else - { - // Toggle the CVar and update the action's checked state to - // allow none of the items to be checked in the exclusive group. - // Otherwise we could have just used the action's currently checked - // state and updated the CVar's value only - bool cVarOn = (cVar->GetFVal() == availableCVar.m_onValue); - bool cVarChecked = !cVarOn; - SetCVar(cVar, cVarChecked ? availableCVar.m_onValue : availableCVar.m_offValue); - action->setChecked(cVarChecked); - if (cVarChecked) - { - // Set the rest of the CVars in the group to their off values - SetCVarsToOffValue(availableCVars, availableCVar); - } - } - } - }); - - // Initialize the action's checked state based on its associated CVar's current value - ICVar* cVar = gEnv->pConsole->GetCVar(availableCVar.m_cVarName.toUtf8().data()); - bool cVarChecked = (cVar && cVar->GetFVal() == availableCVar.m_onValue); - action->setChecked(cVarChecked); - if (cVarChecked) - { - // Set the rest of the CVars in the group to their off values - SetCVarsToOffValue(availableCVars, availableCVar); - } - } -} - -void CVarMenu::AddResetCVarsItem() -{ - QAction* action = addAction(tr("Reset to Default")); - connect(action, &QAction::triggered, this, [this]() - { - for (auto it : m_originalCVarValues) - { - ICVar* cVar = gEnv->pConsole->GetCVar(it.first.c_str()); - if (cVar) - { - cVar->Set(it.second); - } - } - }); -} - -void CVarMenu::SetCVarsToOffValue(const AZStd::vector& cVarToggles, const CVarToggle& excludeCVarToggle) -{ - // Set all but the specified CVars to their off values - for (const CVarToggle& cVarToggle : cVarToggles) - { - if (cVarToggle.m_cVarName != excludeCVarToggle.m_cVarName - || cVarToggle.m_onValue != excludeCVarToggle.m_onValue) - { - ICVar* cVar = gEnv->pConsole->GetCVar(cVarToggle.m_cVarName.toUtf8().data()); - if (cVar) - { - SetCVar(cVar, cVarToggle.m_offValue); - } - } - } -} - -void CVarMenu::SetCVar(ICVar* cVar, float newValue) -{ - float oldValue = cVar->GetFVal(); - cVar->Set(newValue); - - // Store original value for CVar if not already in the list - m_originalCVarValues.emplace(AZStd::string(cVar->GetName()), oldValue); -} - -void CVarMenu::AddSeparator() -{ - addSeparator(); -} diff --git a/Code/Editor/CVarMenu.h b/Code/Editor/CVarMenu.h deleted file mode 100644 index 5195bd99d7..0000000000 --- a/Code/Editor/CVarMenu.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * 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 - -#include -#include - -#include -#include -#include -#include - -struct ICVar; - -class CVarMenu - : public QMenu -{ - Q_OBJECT -public: - // CVar that can be toggled on and off - struct CVarToggle - { - QString m_cVarName; - QString m_displayName; - float m_onValue; - float m_offValue; - }; - - // List of a CVar's available values and their descriptions - using CVarDisplayNameValuePairs = AZStd::vector>; - - CVarMenu(QWidget* parent = nullptr); - - // Add an action that turns a CVar on/off - void AddCVarToggleItem(CVarToggle cVarToggle); - - // Add a submenu of actions for a CVar that offers multiple values for exclusive selection - void AddCVarValuesItem(QString cVarName, - QString displayName, - CVarDisplayNameValuePairs availableCVarValues, - float offValue); - - // Add a submenu of actions for exclusively turning unique CVars on/off - void AddUniqueCVarsItem(QString displayName, - AZStd::vector availableCVars); - - // Add an action to reset all CVars to their original values before they - // were modified by this menu - void AddResetCVarsItem(); - - void AddSeparator(); - -private: - void SetCVarsToOffValue(const AZStd::vector& cVarToggles, const CVarToggle& excludeCVarToggle); - void SetCVar(ICVar* cVar, float newValue); - - // Original CVar values before they were modified by this menu - AZStd::unordered_map m_originalCVarValues; -}; diff --git a/Code/Editor/MainWindow.cpp b/Code/Editor/MainWindow.cpp index bbebac96a3..dca6de4fc3 100644 --- a/Code/Editor/MainWindow.cpp +++ b/Code/Editor/MainWindow.cpp @@ -77,7 +77,6 @@ AZ_POP_DISABLE_WARNING #include "ToolbarManager.h" #include "Core/QtEditorApplication.h" #include "UndoDropDown.h" -#include "CVarMenu.h" #include "EditorViewportSettings.h" #include "KeyboardCustomizationSettings.h" diff --git a/Code/Editor/MainWindow.h b/Code/Editor/MainWindow.h index 1e375b08f2..5adf9a8036 100644 --- a/Code/Editor/MainWindow.h +++ b/Code/Editor/MainWindow.h @@ -49,7 +49,6 @@ class ToolbarCustomizationDialog; class QWidgetAction; class ActionManager; class ShortcutDispatcher; -class CVarMenu; namespace AzQtComponents { diff --git a/Code/Editor/editor_lib_files.cmake b/Code/Editor/editor_lib_files.cmake index 758143ac8d..270c5293a7 100644 --- a/Code/Editor/editor_lib_files.cmake +++ b/Code/Editor/editor_lib_files.cmake @@ -249,8 +249,6 @@ set(FILES CryEditPy.cpp CryEdit.cpp CryEdit.h - CVarMenu.cpp - CVarMenu.h EditorToolsApplication.cpp EditorToolsApplication.h EditorToolsApplicationAPI.h From 328a5ddbd300876899c9f5a0a28a9d9714c55102 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Tue, 16 Nov 2021 11:54:24 -0800 Subject: [PATCH 065/284] duplicated bus that is in AzToolsFramework, this one is not used Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Editor/EditorPreferencesBus.h | 24 ------------------------ 1 file changed, 24 deletions(-) delete mode 100644 Code/Editor/EditorPreferencesBus.h diff --git a/Code/Editor/EditorPreferencesBus.h b/Code/Editor/EditorPreferencesBus.h deleted file mode 100644 index d6c9e3ed55..0000000000 --- a/Code/Editor/EditorPreferencesBus.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * 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 - -#include - -//! Allows handlers to be notified when settings are changed to refresh accordingly -class EditorPreferencesNotifications - : public AZ::EBusTraits -{ -public: - static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Multiple; - static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single; - - //! Notifies about changes in the Editor Preferences - virtual void OnEditorPreferencesChanged() {} -}; -using EditorPreferencesNotificationBus = AZ::EBus; From 9107af5af7a3bff45b8379e5dfc8c60b857c919b Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Tue, 16 Nov 2021 11:59:10 -0800 Subject: [PATCH 066/284] Removes IObservable/Observable from Code/Editor Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Editor/IObservable.h | 20 ------ Code/Editor/Util/IObservable.h | 20 ------ Code/Editor/Util/Observable.h | 103 ----------------------------- Code/Editor/editor_lib_files.cmake | 3 - 4 files changed, 146 deletions(-) delete mode 100644 Code/Editor/IObservable.h delete mode 100644 Code/Editor/Util/IObservable.h delete mode 100644 Code/Editor/Util/Observable.h diff --git a/Code/Editor/IObservable.h b/Code/Editor/IObservable.h deleted file mode 100644 index 9de78a7bc1..0000000000 --- a/Code/Editor/IObservable.h +++ /dev/null @@ -1,20 +0,0 @@ -/* - * 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 - * - */ - - -#ifndef CRYINCLUDE_EDITOR_IOBSERVABLE_H -#define CRYINCLUDE_EDITOR_IOBSERVABLE_H -#pragma once - -//! Observable macro to be used in pure interfaces -#define DEFINE_OBSERVABLE_PURE_METHODS(observerClassName) \ - virtual bool RegisterObserver(observerClassName * pObserver) = 0; \ - virtual bool UnregisterObserver(observerClassName * pObserver) = 0; \ - virtual void UnregisterAllObservers() = 0; - -#endif // CRYINCLUDE_EDITOR_IOBSERVABLE_H diff --git a/Code/Editor/Util/IObservable.h b/Code/Editor/Util/IObservable.h deleted file mode 100644 index 5fa7201c80..0000000000 --- a/Code/Editor/Util/IObservable.h +++ /dev/null @@ -1,20 +0,0 @@ -/* - * 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 - * - */ - - -// Description : Handy macro when working with observers in interfaces - - -#ifndef CRYINCLUDE_EDITOR_UTIL_IOBSERVABLE_H -#define CRYINCLUDE_EDITOR_UTIL_IOBSERVABLE_H -#pragma once -#define DEFINE_OBSERVABLE_PURE_METHODS(observerClassName) \ - virtual bool RegisterObserver(observerClassName * pObserver) = 0; \ - virtual bool UnregisterObserver(observerClassName * pObserver) = 0; \ - virtual void UnregisterAllObservers() = 0; -#endif // CRYINCLUDE_EDITOR_UTIL_IOBSERVABLE_H diff --git a/Code/Editor/Util/Observable.h b/Code/Editor/Util/Observable.h deleted file mode 100644 index e42fc2c94a..0000000000 --- a/Code/Editor/Util/Observable.h +++ /dev/null @@ -1,103 +0,0 @@ -/* - * 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 - * - */ - - -// Description : This file declares templates to be used when a class can -// have a list of observers to feed - - -#ifndef CRYINCLUDE_EDITOR_UTIL_OBSERVABLE_H -#define CRYINCLUDE_EDITOR_UTIL_OBSERVABLE_H -#pragma once - -#include - -//! Observable template class, holds a list of observers which can be called at once using the helper defines -template -class CObservable -{ -public: - // Description: - // Register a new observer for the class, will check if not already added - // Return: - // true - if the observer was successfully added to the list - // false - if the observer is already in the list - bool RegisterObserver(T* pObserver) - { - if (m_observers.end() != std::find(m_observers.begin(), m_observers.end(), pObserver)) - { - return false; - } - - m_observers.push_back(pObserver); - - return true; - } - - // Description: - // Unregister an observer from the list - // Return: - // true - if the observer was successfuly removed - // false - if the observer is not in the list - bool UnregisterObserver(T* pObserver) - { - typename std::vector::iterator iter; - - if (m_observers.end() == (iter = std::find(m_observers.begin(), m_observers.end(), pObserver))) - { - return false; - } - - m_observers.erase(iter); - - return true; - } - - // Description: - // Uregister all the observers - void UnregisterAllObservers() - { - m_observers.clear(); - } - -protected: - std::vector m_observers; -}; - -// -// Helper defines to ease the process of calling the methods of all observers in the list -// - -// Description: -// Call the method of the observers, this must be used inside the subject class -// Example: CALL_OBSERVERS_METHOD(OnStuffHappened(120, "NO!")) -#define CALL_OBSERVERS_METHOD(methodCall) \ - { for (size_t iObs = 0, iObsCount = m_observers.size(); iObs < iObsCount; ++iObs) { m_observers[iObs]->methodCall; } \ - } - -// Description: -// Call the method of the observers, this can be used outside the subject class -// Example: CALL_OBSERVERS_METHOD_OF(pSomeObservableSubject, OnStuffHappened(120, "NO!")) -#define CALL_OBSERVERS_METHOD_OF(pObservable, methodCall) \ - { for (size_t iObs = 0, iObsCount = pObservable->m_observers.size(); iObs < iObsCount; ++iObs) { pObservable->m_observers[iObs]->methodCall; } \ - } - -// Description: -// Call the method of the observers, this can be called using a custom vector of observers -// Example: CALL_SPECIFIED_OBSERVERS_LIST_METHOD(vMyPreciousSpecialObservers, OnStuffHappened(120, "NO!")) -#define CALL_SPECIFIED_OBSERVERS_LIST_METHOD(vObservers, methodCall) \ - { for (size_t iObs = 0, iObsCount = vObservers.size(); iObs < iObsCount; ++iObs) { vObservers[iObs]->methodCall; } \ - } - -// Description: -// Implement the observable methods when the user class is inheriting from a virtual interface using the observable methods -#define IMPLEMENT_OBSERVABLE_METHODS(observerClassName) \ - virtual bool RegisterObserver(observerClassName * pObserver) { return CObservable::RegisterObserver(pObserver); }; \ - virtual bool UnregisterObserver(observerClassName * pObserver) { return CObservable::UnregisterObserver(pObserver); }; \ - virtual void UnregisterAllObservers() { CObservable::UnregisterAllObservers(); }; -#endif // CRYINCLUDE_EDITOR_UTIL_OBSERVABLE_H diff --git a/Code/Editor/editor_lib_files.cmake b/Code/Editor/editor_lib_files.cmake index 270c5293a7..bcff55f40f 100644 --- a/Code/Editor/editor_lib_files.cmake +++ b/Code/Editor/editor_lib_files.cmake @@ -438,7 +438,6 @@ set(FILES FBXExporterDialog.h FileTypeUtils.h GridUtils.h - IObservable.h IPostRenderer.h ToolBox.h TrackViewNewSequenceDialog.h @@ -647,11 +646,9 @@ set(FILES Util/GeometryUtil.cpp Util/GuidUtil.cpp Util/GuidUtil.h - Util/IObservable.h Util/Mailer.h Util/NamedData.cpp Util/NamedData.h - Util/Observable.h Util/PakFile.cpp Util/PakFile.h Util/PredefinedAspectRatios.cpp From 06331dae37049067461e69bc5136ec2fb693450f Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Tue, 16 Nov 2021 12:04:41 -0800 Subject: [PATCH 067/284] =?UTF-8?q?=EF=BB=BFRemoves=20Report=20from=20Code?= =?UTF-8?q?/Editor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Editor/Report.h | 183 ----------------------------- Code/Editor/editor_lib_files.cmake | 1 - 2 files changed, 184 deletions(-) delete mode 100644 Code/Editor/Report.h diff --git a/Code/Editor/Report.h b/Code/Editor/Report.h deleted file mode 100644 index 1dbf3788cd..0000000000 --- a/Code/Editor/Report.h +++ /dev/null @@ -1,183 +0,0 @@ -/* - * 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 - * - */ - - -// Description : Generic report class, which contains arbitrary report entries. - -#ifndef CRYINCLUDE_EDITOR_REPORT_H -#define CRYINCLUDE_EDITOR_REPORT_H -#pragma once - - -class IReportField -{ -public: - virtual ~IReportField() {} - - virtual const char* GetDescription() const = 0; - virtual const char* GetText() const = 0; -}; - -template -class CReportField - : public IReportField -{ -public: - typedef T Object; - typedef G TextGetter; - - CReportField(Object& object, const char* description, TextGetter& getter); - virtual const char* GetDescription() const; - virtual const char* GetText() const; - -private: - TextGetter m_getter; - string m_text; - string m_description; -}; - -class IReportRecord -{ -public: - virtual ~IReportRecord() {} - virtual int GetFieldCount() const = 0; - virtual const char* GetFieldDescription(int fieldIndex) const = 0; - virtual const char* GetFieldText(int fieldIndex) const = 0; -}; - -template -class CReportRecord - : public IReportRecord -{ -public: - typedef T Object; - - CReportRecord(Object& object); - virtual ~CReportRecord(); - virtual int GetFieldCount() const; - virtual const char* GetFieldDescription(int fieldIndex) const; - virtual const char* GetFieldText(int fieldIndex) const; - template - CReportField* AddField(const char* description, G& getter); - -private: - Object m_object; - typedef std::vector FieldContainer; - FieldContainer m_fields; -}; - -class CReport -{ -public: - ~CReport(); - template - CReportRecord* AddRecord(T& object); - int GetRecordCount() const; - IReportRecord* GetRecord(int recordIndex); - void Clear(); - -private: - typedef std::vector RecordContainer; - RecordContainer m_records; -}; - -template -inline CReportField::CReportField(Object& object, const char* description, TextGetter& getter) - : m_getter(getter) - , m_description(description) -{ - m_text = m_getter(object); -} - -template -inline const char* CReportField::GetDescription() const -{ - return m_description.c_str(); -} - -template -inline const char* CReportField::GetText() const -{ - return m_text.c_str(); -} - -template -inline CReportRecord::CReportRecord(Object& object) - : m_object(object) -{ -} - -template -inline CReportRecord::~CReportRecord() -{ - for (FieldContainer::iterator it = m_fields.begin(); it != m_fields.end(); ++it) - { - delete (*it); - } -} - -template -inline int CReportRecord::GetFieldCount() const -{ - return m_fields.size(); -} - -template -inline const char* CReportRecord::GetFieldDescription(int fieldIndex) const -{ - return m_fields[fieldIndex]->GetDescription(); -} - -template -inline const char* CReportRecord::GetFieldText(int fieldIndex) const -{ - return m_fields[fieldIndex]->GetText(); -} - -template -template -inline CReportField* CReportRecord::AddField(const char* description, G& getter) -{ - CReportField* field = new CReportField(m_object, description, getter); - m_fields.push_back(field); - return field; -} - -inline CReport::~CReport() -{ - Clear(); -} - -template -inline CReportRecord* CReport::AddRecord(T& object) -{ - CReportRecord* record = new CReportRecord(object); - m_records.push_back(record); - return record; -} - -inline int CReport::GetRecordCount() const -{ - return m_records.size(); -} - -inline IReportRecord* CReport::GetRecord(int recordIndex) -{ - return m_records[recordIndex]; -} - -inline void CReport::Clear() -{ - for (RecordContainer::iterator it = m_records.begin(); it != m_records.end(); ++it) - { - delete (*it); - } - m_records.clear(); -} - -#endif // CRYINCLUDE_EDITOR_REPORT_H diff --git a/Code/Editor/editor_lib_files.cmake b/Code/Editor/editor_lib_files.cmake index bcff55f40f..4545bb5b44 100644 --- a/Code/Editor/editor_lib_files.cmake +++ b/Code/Editor/editor_lib_files.cmake @@ -546,7 +546,6 @@ set(FILES LevelInfo.h ProcessInfo.cpp ProcessInfo.h - Report.h TrackView/AtomOutputFrameCapture.cpp TrackView/AtomOutputFrameCapture.h TrackView/TrackViewDialog.qrc From d44d01c6a57e5d32c4efe11dbfbf6f99e58a7fff Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Tue, 16 Nov 2021 15:01:31 -0800 Subject: [PATCH 068/284] Removes CommandManagerBus from Code/Editor Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Editor/Commands/CommandManagerBus.h | 30 ------------------------ 1 file changed, 30 deletions(-) delete mode 100644 Code/Editor/Commands/CommandManagerBus.h diff --git a/Code/Editor/Commands/CommandManagerBus.h b/Code/Editor/Commands/CommandManagerBus.h deleted file mode 100644 index a5edceaee8..0000000000 --- a/Code/Editor/Commands/CommandManagerBus.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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 - -#include - -class CommandManagerRequests : public AZ::EBusTraits -{ -public: - - struct CommandDetails - { - AZStd::string m_name; - AZStd::vector m_arguments; - }; - - virtual AZStd::vector GetCommands() const = 0; - virtual void ExecuteCommand(const AZStd::string& commandLine) {} - - virtual void GetCommandDetails(AZStd::string commandName, CommandDetails& outArguments) const = 0; - -}; - -using CommandManagerRequestBus = AZ::EBus; From 28c40764e6e843e957071edb5806b22ec43c66bc Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Tue, 16 Nov 2021 16:26:36 -0800 Subject: [PATCH 069/284] Remove SubObjSelection from Code/Editor Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Editor/Objects/BaseObject.h | 1 - Code/Editor/Objects/SubObjSelection.cpp | 62 ----------------- Code/Editor/Objects/SubObjSelection.h | 91 ------------------------- Code/Editor/editor_lib_files.cmake | 2 - 4 files changed, 156 deletions(-) delete mode 100644 Code/Editor/Objects/SubObjSelection.cpp delete mode 100644 Code/Editor/Objects/SubObjSelection.h diff --git a/Code/Editor/Objects/BaseObject.h b/Code/Editor/Objects/BaseObject.h index fea248c7f7..666d9f3e1d 100644 --- a/Code/Editor/Objects/BaseObject.h +++ b/Code/Editor/Objects/BaseObject.h @@ -31,7 +31,6 @@ class CUndoBaseObject; class CObjectManager; class CGizmo; class CObjectArchive; -struct SSubObjSelectionModifyContext; struct SRayHitInfo; class CPopupMenuItem; class QMenu; diff --git a/Code/Editor/Objects/SubObjSelection.cpp b/Code/Editor/Objects/SubObjSelection.cpp deleted file mode 100644 index 3a67b8dfb7..0000000000 --- a/Code/Editor/Objects/SubObjSelection.cpp +++ /dev/null @@ -1,62 +0,0 @@ -/* - * 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 "EditorDefs.h" - -#include "SubObjSelection.h" - -SSubObjSelOptions g_SubObjSelOptions; - -/* - -////////////////////////////////////////////////////////////////////////// -bool CSubObjSelContext::IsEmpty() const -{ - if (GetCount() == 0) - return false; - for (int i = 0; i < GetCount(); i++) - { - CSubObjectSelection *pSel = GetSelection(i); - if (!pSel->IsEmpty()) - return true; - } - return false; -} - -////////////////////////////////////////////////////////////////////////// -void CSubObjSelContext::ModifySelection( SSubObjSelectionModifyContext &modCtx ) -{ - for (int n = 0; n < GetCount(); n++) - { - CSubObjectSelection *pSel = GetSelection(n); - if (pSel->IsEmpty()) - continue; - modCtx.pSubObjSelection = pSel; - pSel->pGeometry->SubObjSelectionModify( modCtx ); - } - if (modCtx.type == SO_MODIFY_MOVE) - { - OnSelectionChange(); - } -} - -////////////////////////////////////////////////////////////////////////// -void CSubObjSelContext::AcceptModifySelection() -{ - for (int n = 0; n < GetCount(); n++) - { - CSubObjectSelection *pSel = GetSelection(n); - if (pSel->IsEmpty()) - continue; - if (pSel->pGeometry) - pSel->pGeometry->Update(); - } -} - -*/ diff --git a/Code/Editor/Objects/SubObjSelection.h b/Code/Editor/Objects/SubObjSelection.h deleted file mode 100644 index 9e07bdc203..0000000000 --- a/Code/Editor/Objects/SubObjSelection.h +++ /dev/null @@ -1,91 +0,0 @@ -/* - * 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 - * - */ - - -#ifndef CRYINCLUDE_EDITOR_OBJECTS_SUBOBJSELECTION_H -#define CRYINCLUDE_EDITOR_OBJECTS_SUBOBJSELECTION_H -#pragma once - -////////////////////////////////////////////////////////////////////////// -// Sub Object element type. -////////////////////////////////////////////////////////////////////////// -enum ESubObjElementType -{ - SO_ELEM_NONE = 0, - SO_ELEM_VERTEX, - SO_ELEM_EDGE, - SO_ELEM_FACE, - SO_ELEM_POLYGON, - SO_ELEM_UV, -}; - -////////////////////////////////////////////////////////////////////////// -enum ESubObjDisplayType -{ - SO_DISPLAY_WIREFRAME, - SO_DISPLAY_FLAT, - SO_DISPLAY_GEOMETRY, -}; - -////////////////////////////////////////////////////////////////////////// -// Options for sub-object selection. -////////////////////////////////////////////////////////////////////////// -struct SSubObjSelOptions -{ - bool bSelectByVertex; - bool bIgnoreBackfacing; - int nMatID; - - bool bSoftSelection; - float fSoftSelFalloff; - - // Display options. - bool bDisplayBackfacing; - bool bDisplayNormals; - float fNormalsLength; - ESubObjDisplayType displayType; - - SSubObjSelOptions() - { - bSelectByVertex = false; - bIgnoreBackfacing = false; - bSoftSelection = false; - nMatID = 0; - fSoftSelFalloff = 1; - - bDisplayBackfacing = true; - bDisplayNormals = false; - displayType = SO_DISPLAY_FLAT; - fNormalsLength = 0.4f; - } -}; - -extern SSubObjSelOptions g_SubObjSelOptions; - - -////////////////////////////////////////////////////////////////////////// -enum ESubObjSelectionModifyType -{ - SO_MODIFY_UNSELECT, - SO_MODIFY_MOVE, - SO_MODIFY_ROTATE, - SO_MODIFY_SCALE, -}; - -////////////////////////////////////////////////////////////////////////// -// This structure is passed when user is dragging sub object selection. -////////////////////////////////////////////////////////////////////////// -struct SSubObjSelectionModifyContext -{ - CViewport* view; - ESubObjSelectionModifyType type; - Vec3 vValue; - Matrix34 worldRefFrame; -}; - -#endif // CRYINCLUDE_EDITOR_OBJECTS_SUBOBJSELECTION_H diff --git a/Code/Editor/editor_lib_files.cmake b/Code/Editor/editor_lib_files.cmake index 4545bb5b44..aa52b18b45 100644 --- a/Code/Editor/editor_lib_files.cmake +++ b/Code/Editor/editor_lib_files.cmake @@ -452,8 +452,6 @@ set(FILES Objects/DisplayContextShared.inl Objects/SelectionGroup.cpp Objects/SelectionGroup.h - Objects/SubObjSelection.cpp - Objects/SubObjSelection.h Objects/ObjectLoader.cpp Objects/ObjectLoader.h Objects/ObjectManager.cpp From 580027f75e919b3e45347f3f895c994d501af77a Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Tue, 16 Nov 2021 16:36:59 -0800 Subject: [PATCH 070/284] Removes ComponentPaletteWindow from Code/Editor/Plugins/ComponentEntityEditorPlugin Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../ComponentEntityEditorPlugin.cpp | 1 - .../ComponentPaletteWindow.cpp | 116 ------------------ .../ComponentPalette/ComponentPaletteWindow.h | 59 --------- .../componententityeditorplugin_files.cmake | 2 - 4 files changed, 178 deletions(-) delete mode 100644 Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/ComponentPaletteWindow.cpp delete mode 100644 Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/ComponentPaletteWindow.h diff --git a/Code/Editor/Plugins/ComponentEntityEditorPlugin/ComponentEntityEditorPlugin.cpp b/Code/Editor/Plugins/ComponentEntityEditorPlugin/ComponentEntityEditorPlugin.cpp index 50b315b9c3..9022341309 100644 --- a/Code/Editor/Plugins/ComponentEntityEditorPlugin/ComponentEntityEditorPlugin.cpp +++ b/Code/Editor/Plugins/ComponentEntityEditorPlugin/ComponentEntityEditorPlugin.cpp @@ -14,7 +14,6 @@ #include "UI/QComponentEntityEditorOutlinerWindow.h" #include "UI/QComponentLevelEntityEditorMainWindow.h" #include "UI/ComponentPalette/ComponentPaletteSettings.h" -#include "UI/ComponentPalette/ComponentPaletteWindow.h" #include #include diff --git a/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/ComponentPaletteWindow.cpp b/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/ComponentPaletteWindow.cpp deleted file mode 100644 index 1791301654..0000000000 --- a/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/ComponentPaletteWindow.cpp +++ /dev/null @@ -1,116 +0,0 @@ -/* - * 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 "ComponentPaletteWindow.h" -#include "ComponentDataModel.h" -#include "FavoriteComponentList.h" -#include "FilteredComponentList.h" -#include "CategoriesList.h" - -#include - -#include -#include -#include - -#include -#include -#include -#include -#include - -#include -#include - -ComponentPaletteWindow::ComponentPaletteWindow(QWidget* parent) - : QMainWindow(parent) -{ - Init(); -} - -void ComponentPaletteWindow::Init() -{ - layout()->setSizeConstraint(QLayout::SetMinimumSize); - - QVBoxLayout* layout = new QVBoxLayout(); - layout->setSizeConstraint(QLayout::SetMinimumSize); - layout->setContentsMargins(0, 0, 0, 0); - layout->setSpacing(0); - - QHBoxLayout* gridLayout = new QHBoxLayout(nullptr); - gridLayout->setSizeConstraint(QLayout::SetMaximumSize); - gridLayout->setContentsMargins(0, 0, 0, 0); - gridLayout->setSpacing(0); - - m_filterWidget = new AzToolsFramework::SearchCriteriaWidget(this); - - QStringList tags; - tags << tr("name"); - m_filterWidget->SetAcceptedTags(tags, tags[0]); - layout->addLayout(gridLayout, 1); - - // Left Panel - QVBoxLayout* leftPaneLayout = new QVBoxLayout(this); - - // Favorites - leftPaneLayout->addWidget(new QLabel(tr("Favorites"))); - leftPaneLayout->addWidget(new QLabel(tr("Drag components here to add favorites."))); - FavoritesList* favorites = new FavoritesList(); - favorites->Init(); - leftPaneLayout->addWidget(favorites); - - // Categories - m_categoryListWidget = new ComponentCategoryList(); - m_categoryListWidget->Init(); - leftPaneLayout->addWidget(m_categoryListWidget); - gridLayout->addLayout(leftPaneLayout); - - // Right Panel - QVBoxLayout* rightPanelLayout = new QVBoxLayout(this); - gridLayout->addLayout(rightPanelLayout); - - // Component list - m_componentListWidget = new FilteredComponentList(this); - m_componentListWidget->Init(); - - rightPanelLayout->addWidget(new QLabel(tr("Components"))); - rightPanelLayout->addWidget(m_filterWidget, 0, Qt::AlignTop); - rightPanelLayout->addWidget(m_componentListWidget); - - // The main window - QWidget* window = new QWidget(); - window->setLayout(layout); - setCentralWidget(window); - - connect(m_categoryListWidget, &ComponentCategoryList::OnCategoryChange, m_componentListWidget, &FilteredComponentList::SetCategory); - connect(m_filterWidget, &AzToolsFramework::SearchCriteriaWidget::SearchCriteriaChanged, m_componentListWidget, &FilteredComponentList::SearchCriteriaChanged); - -} - -void ComponentPaletteWindow::keyPressEvent(QKeyEvent* event) -{ - if (event->modifiers().testFlag(Qt::ControlModifier) && event->key() == Qt::Key_F) - { - m_filterWidget->SelectTextEntryBox(); - } - else - { - QMainWindow::keyPressEvent(event); - } -} - -void ComponentPaletteWindow::RegisterViewClass() -{ - using namespace AzToolsFramework; - - ViewPaneOptions options; - options.canHaveMultipleInstances = true; - RegisterViewPane("Component Palette", LyViewPane::CategoryOther, options); -} - -#include diff --git a/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/ComponentPaletteWindow.h b/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/ComponentPaletteWindow.h deleted file mode 100644 index f662f69342..0000000000 --- a/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/ComponentPaletteWindow.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * 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 - -#if !defined(Q_MOC_RUN) -#include -#include -#include -#endif - -namespace AzToolsFramework -{ - class SearchCriteriaWidget; -} - -class ComponentCategoryList; -class FilteredComponentList; -class ComponentDataModel; - -//! ComponentPaletteWindow -//! Provides a window with controls related to the Component Entity system. It provides an intuitive and organized -//! set of controls to display, sort, filter components. It provides mechanisms for creating entities by dragging -//! and dropping components into the viewport as well as from context menus. -class ComponentPaletteWindow - : public QMainWindow -{ - Q_OBJECT - -public: - - explicit ComponentPaletteWindow(QWidget* parent = 0); - - void Init(); - - static const GUID& GetClassID() - { - // {4236998F-1138-466D-9DF5-6533BFA1DFCA} - static const GUID guid = - { - 0x4236998F, 0x1138, 0x466D, { 0x9D, 0xF5, 0x65, 0x33, 0xBF, 0xA1, 0xDF, 0xCA } - }; - return guid; - } - - static void RegisterViewClass(); - -protected: - ComponentCategoryList* m_categoryListWidget; - FilteredComponentList* m_componentListWidget; - AzToolsFramework::SearchCriteriaWidget* m_filterWidget; - - void keyPressEvent(QKeyEvent* event) override; -}; diff --git a/Code/Editor/Plugins/ComponentEntityEditorPlugin/componententityeditorplugin_files.cmake b/Code/Editor/Plugins/ComponentEntityEditorPlugin/componententityeditorplugin_files.cmake index 1cb4e25304..a03c25e8f0 100644 --- a/Code/Editor/Plugins/ComponentEntityEditorPlugin/componententityeditorplugin_files.cmake +++ b/Code/Editor/Plugins/ComponentEntityEditorPlugin/componententityeditorplugin_files.cmake @@ -25,8 +25,6 @@ set(FILES UI/ComponentPalette/ComponentDataModel.h UI/ComponentPalette/ComponentDataModel.cpp UI/ComponentPalette/ComponentPaletteSettings.h - UI/ComponentPalette/ComponentPaletteWindow.h - UI/ComponentPalette/ComponentPaletteWindow.cpp UI/ComponentPalette/FavoriteComponentList.h UI/ComponentPalette/FavoriteComponentList.cpp UI/ComponentPalette/FilteredComponentList.h From 8ac886c2189ca4d55bcba5b7bca3b77eed52d1be Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Tue, 16 Nov 2021 17:25:11 -0800 Subject: [PATCH 071/284] Removes FavoriteComponentList from Code/Editor/Plugins/ComponentEntityEditorPlugin Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../FavoriteComponentList.cpp | 392 ------------------ .../ComponentPalette/FavoriteComponentList.h | 117 ------ .../componententityeditorplugin_files.cmake | 2 - 3 files changed, 511 deletions(-) delete mode 100644 Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/FavoriteComponentList.cpp delete mode 100644 Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/FavoriteComponentList.h diff --git a/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/FavoriteComponentList.cpp b/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/FavoriteComponentList.cpp deleted file mode 100644 index 41eed6f93f..0000000000 --- a/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/FavoriteComponentList.cpp +++ /dev/null @@ -1,392 +0,0 @@ -/* - * 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 "FavoriteComponentList.h" -#include -#include -#include - -#include -#include - -#include -#include - -// FavoritesList -////////////////////////////////////////////////////////////////////////// - -FavoritesList::FavoritesList(QWidget* parent /*= nullptr*/) - : FilteredComponentList(parent) -{ -} - -FavoritesList::~FavoritesList() -{ - FavoriteComponentListRequestBus::Handler::BusDisconnect(); -} - -void FavoritesList::Init() -{ - FavoriteComponentListRequestBus::Handler::BusConnect(); - - FavoritesDataModel* favoritesDataModel = new FavoritesDataModel(this); - - setModel(favoritesDataModel); - - horizontalHeader()->setSectionResizeMode(ComponentDataModel::ColumnIndex::Name, QHeaderView::Stretch); - - setShowGrid(false); - - setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - setSelectionMode(QAbstractItemView::SelectionMode::ExtendedSelection); - setStyleSheet("QTableView { selection-background-color: rgba(255,255,255,0.2); }"); - setGridStyle(Qt::PenStyle::NoPen); - verticalHeader()->hide(); - horizontalHeader()->hide(); - setSelectionBehavior(QAbstractItemView::SelectionBehavior::SelectRows); - setShowGrid(false); - setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel); - setVerticalScrollMode(QAbstractItemView::ScrollPerPixel); - - setColumnWidth(ComponentDataModel::ColumnIndex::Icon, 32); - hideColumn(ComponentDataModel::ColumnIndex::Category); - - setDragDropMode(QAbstractItemView::DragDrop); - setAcceptDrops(true); - - horizontalHeader()->setSectionResizeMode(ComponentDataModel::ColumnIndex::Icon, QHeaderView::ResizeToContents); - setColumnWidth(ComponentDataModel::ColumnIndex::Icon, 32); - - horizontalHeader()->setSectionResizeMode(ComponentDataModel::ColumnIndex::Category, QHeaderView::Stretch); - setColumnWidth(ComponentDataModel::ColumnIndex::Category, 90); - - // Context menu - setContextMenuPolicy(Qt::CustomContextMenu); - connect(this, &QWidget::customContextMenuRequested, this, &FavoritesList::ShowContextMenu); -} - -void FavoritesList::ShowContextMenu(const QPoint& pos) -{ - // Only show if a level is loaded - if (!GetIEditor() || GetIEditor()->IsInGameMode()) - { - return; - } - - if ( model()->rowCount() == 0) - { - return; - } - - QMenu contextMenu(tr("Context menu"), this); - - QAction actionNewEntity(tr("Make entity with selected favorites"), this); - QAction actionAddToSelection(this); - if (GetIEditor()->GetDocument()->IsDocumentReady()) - { - QObject::connect(&actionNewEntity, &QAction::triggered, this, [&] { ContextMenu_NewEntity(); }); - contextMenu.addAction(&actionNewEntity); - - AzToolsFramework::EntityIdList selectedEntities; - EBUS_EVENT_RESULT(selectedEntities, AzToolsFramework::ToolsApplicationRequests::Bus, GetSelectedEntities); - - if (!selectedEntities.empty()) - { - QString addToSelection = selectedEntities.size() > 1 ? tr("Add to selected entities") : tr("Add to selected entity"); - actionAddToSelection.setText(addToSelection); - - QObject::connect(&actionAddToSelection, &QAction::triggered, this, [&] { ContextMenu_AddToSelectedEntities(); }); - contextMenu.addAction(&actionAddToSelection); - } - - contextMenu.addSeparator(); - } - - QAction action(tr("Remove"), this); - QObject::connect(&action, &QAction::triggered, this, [&] { ContextMenu_RemoveSelectedFavorites(); }); - contextMenu.addAction(&action); - - contextMenu.exec(mapToGlobal(pos)); -} - -void FavoritesList::ContextMenu_RemoveSelectedFavorites() -{ - FavoritesDataModel* dataModel = qobject_cast(model()); - if (!selectedIndexes().empty()) - { - dataModel->Remove(selectedIndexes()); - } -} - -void FavoritesList::rowsInserted([[maybe_unused]] const QModelIndex& parent, [[maybe_unused]] int start, [[maybe_unused]] int end) -{ - resizeRowToContents(0); -} - -void FavoritesList::AddFavorites(const AZStd::vector& classDataContainer) -{ - for (const AZ::SerializeContext::ClassData* classData : classDataContainer) - { - if (classData) - { - FavoritesDataModel* dataModel = qobject_cast(model()); - dataModel->AddFavorite(classData); - } - } -} - -void FavoritesList::dragEnterEvent(QDragEnterEvent* event) -{ - if (event->mimeData()->hasFormat(AzToolsFramework::ComponentTypeMimeData::GetMimeType())) - { - event->acceptProposedAction(); - } -} - -void FavoritesList::dragMoveEvent(QDragMoveEvent* event) -{ - if (event->source() == this) - { - event->ignore(); - } - else - { - event->accept(); - } -} - -// FavoritesDataModel -////////////////////////////////////////////////////////////////////////// - -int FavoritesDataModel::rowCount([[maybe_unused]] const QModelIndex &parent /*= QModelIndex()*/) const -{ - return m_favorites.size(); -} - -int FavoritesDataModel::columnCount([[maybe_unused]] const QModelIndex &parent /*= QModelIndex()*/) const -{ - return ColumnIndex::Count; -} - -void FavoritesDataModel::SaveState() -{ - AZStd::vector favorites; - for (const AZ::SerializeContext::ClassData* classData : m_favorites) - { - favorites.push_back(classData->m_typeId); - } - m_settings->SetFavorites(AZStd::move(favorites)); - - - // Write the settings to file... - AZ::SerializeContext* serializeContext = nullptr; - EBUS_EVENT_RESULT(serializeContext, AZ::ComponentApplicationBus, GetSerializeContext); - AZ_Assert(serializeContext, "Serialize Context is null!"); - - char settingsPath[AZ_MAX_PATH_LEN] = { 0 }; - AZ::IO::FileIOBase::GetInstance()->ResolvePath(ComponentPaletteSettings::GetSettingsFile(), settingsPath, AZ_MAX_PATH_LEN); - - bool result = m_provider.Save(settingsPath, serializeContext); - (void)result; - AZ_Warning("ComponentPaletteSettings", result, "Failed to Save the Component Palette Settings!"); -} - -void FavoritesDataModel::LoadState() -{ - // It is necessary to Load the settings file *before* you call UserSettings::CreateFind! - AZ::SerializeContext* serializeContext = nullptr; - EBUS_EVENT_RESULT(serializeContext, AZ::ComponentApplicationBus, GetSerializeContext); - AZ_Assert(serializeContext, "Serialize Context is null!"); - - char settingsPath[AZ_MAX_PATH_LEN] = { 0 }; - AZ::IO::FileIOBase::GetInstance()->ResolvePath(ComponentPaletteSettings::GetSettingsFile(), settingsPath, AZ_MAX_PATH_LEN); - - bool result = m_provider.Load(settingsPath, serializeContext); - (void)result; - - - // Create (if no file was found) or find the settings, this will populate the m_settings->m_favorites list. - m_settings = AZ::UserSettings::CreateFind(AZ_CRC("ComponentPaletteSettings", 0x481d355b), m_providerId); - - // Add favorites to the data model from loaded settings - for (const AZ::Uuid& favorite : m_settings->m_favorites) - { - const AZ::SerializeContext::ClassData* classData = serializeContext->FindClassData(favorite); - if (classData) - { - AddFavorite(classData, false); - } - } -} - -void FavoritesDataModel::Remove(const QModelIndexList& indices) -{ - beginResetModel(); - - auto newFavorites = m_favorites; - - // swap here - for (auto index : indices) - { - // we're only dealing with columns and they're the only thing with class data anyways - if (index.column() == 0) - { - QVariant classDataVariant = index.data(ComponentDataModel::ClassDataRole); - if (classDataVariant.isValid()) - { - const AZ::SerializeContext::ClassData* classData = reinterpret_cast(classDataVariant.value()); - newFavorites.removeAll(classData); - - AZ_TracePrintf("Debug", "Removing: %s\n", classData->m_editData->m_name); - } - } - } - - m_favorites.swap(newFavorites); - - endResetModel(); - - SaveState(); -} - -QModelIndex FavoritesDataModel::index(int row, int column, const QModelIndex &parent) const -{ - if (!hasIndex(row, column, parent)) - { - return QModelIndex(); - } - - if (row >= rowCount(parent) || column >= columnCount(parent)) - { - return QModelIndex(); - } - - return createIndex(row, column, (void*)(m_favorites[row])); -} - -QVariant FavoritesDataModel::data(const QModelIndex &index, int role /*= Qt::DisplayRole*/) const -{ - if (!index.isValid()) - { - return QVariant(); - } - - const AZ::SerializeContext::ClassData* classData = m_favorites[index.row()]; - if (!classData) - { - return QVariant(); - } - - switch (role) - { - case Qt::DisplayRole: - { - if (index.column() == ComponentDataModel::ColumnIndex::Name) - { - if (m_favorites.empty()) - { - return QVariant(tr("You have 0 favorites.\nDrag some components here.")); - } - - return QVariant(classData->m_editData->m_name); - } - } - break; - - case Qt::DecorationRole: - { - if (index.column() == ColumnIndex::Icon) - { - const AZ::SerializeContext::ClassData* iconClassData = m_favorites[index.row()]; - auto iconIterator = m_componentIcons.find(iconClassData->m_typeId); - if (iconIterator != m_componentIcons.end()) - { - return iconIterator->second; - } - - return QVariant(); - } - } - break; - - case ClassDataRole: - if (index.column() == 0) // Only get data for one column - { - return QVariant::fromValue(reinterpret_cast(const_cast(classData))); - } - break; - - default: - break; - } - - return ComponentDataModel::data(index, role); - -} - -void FavoritesDataModel::SetSavedStateKey([[maybe_unused]] AZ::u32 key) -{ -} - -FavoritesDataModel::FavoritesDataModel(QWidget* parent /*= nullptr*/) - : ComponentDataModel(parent) - , m_providerId(AZ_CRC("ComponentPaletteSettingsProviderId")) -{ - m_provider.Activate(m_providerId); - LoadState(); -} - -FavoritesDataModel::~FavoritesDataModel() -{ - m_provider.Deactivate(); -} - -void FavoritesDataModel::AddFavorite(const AZ::SerializeContext::ClassData* classData, bool updateSettings) -{ - beginResetModel(); - - if (m_favorites.indexOf(classData) < 0) - { - m_favorites.push_back(classData); - } - - endResetModel(); - - if (updateSettings) - { - SaveState(); - } -} - -bool FavoritesDataModel::dropMimeData(const QMimeData *data, Qt::DropAction action, [[maybe_unused]] int row, [[maybe_unused]] int column, [[maybe_unused]] const QModelIndex &parent) -{ - if (action == Qt::IgnoreAction) - { - return true; - } - - if (data && data->hasFormat(AzToolsFramework::ComponentTypeMimeData::GetMimeType())) - { - AzToolsFramework::ComponentTypeMimeData::ClassDataContainer classDataContainer; - AzToolsFramework::ComponentTypeMimeData::Get(data, classDataContainer); - - for (const AZ::SerializeContext::ClassData* classData : classDataContainer) - { - if (classData) - { - AddFavorite(classData); - } - } - - return true; - } - - return false; -} - -#include diff --git a/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/FavoriteComponentList.h b/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/FavoriteComponentList.h deleted file mode 100644 index 2bd2d83e04..0000000000 --- a/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/FavoriteComponentList.h +++ /dev/null @@ -1,117 +0,0 @@ -/* - * 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 - -#if !defined(Q_MOC_RUN) -#include "ComponentDataModel.h" -#include "FilteredComponentList.h" -#include "ComponentPaletteSettings.h" - -#include -#include -#include -#include -#endif - -//! FavoriteComponentListRequest -//! Bus that provides a way for external features to record favorites -class FavoriteComponentListRequest : public AZ::EBusTraits -{ -public: - virtual void AddFavorites(const AZStd::vector&) = 0; -}; - -using FavoriteComponentListRequestBus = AZ::EBus; - - -//! FavoritesDataModel -//! Stores the list of component class data to display in the favorites control, offers persistence through user settings. -class FavoritesDataModel - : public ComponentDataModel -{ - Q_OBJECT - -public: - - AZ_CLASS_ALLOCATOR(FavoritesDataModel, AZ::SystemAllocator, 0); - - FavoritesDataModel(QWidget* parent = nullptr); - ~FavoritesDataModel() override; - - //! Add a favorite component - //! \param classData The ClassData information for the component to store as favorite - //! \param updateSettings Optional parameter used to determine if the persistent settings need to be updated. - void AddFavorite(const AZ::SerializeContext::ClassData* classData, bool updateSettings = true); - - //! Remove all the specified items from the table - //! \param indices List of indices to remove from favorites - void Remove(const QModelIndexList& indices); - - //! Save the list of favorite components to user settings - void SaveState(); - - //! Load the list of favorite components from user settings - void LoadState(); - -protected: - - void SetSavedStateKey(AZ::u32 key); - - // Qt handlers - QModelIndex index(int row, int column, const QModelIndex &parent) const override; - int rowCount(const QModelIndex &parent = QModelIndex()) const override; - int columnCount(const QModelIndex &parent = QModelIndex()) const override; - QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; - bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override; - - // List of component class data - QList m_favorites; - - // The Palette settings and provider information for saving out the Favorites list - AZStd::intrusive_ptr m_settings; - AZ::UserSettingsProvider m_provider; - AZ::u32 m_providerId; -}; - - -//! FavoritesList -//! User customized list of favorite components, provides persistence. -class FavoritesList - : public FilteredComponentList - , FavoriteComponentListRequestBus::Handler -{ - Q_OBJECT - -public: - - explicit FavoritesList(QWidget* parent = nullptr); - ~FavoritesList() override; - - void Init() override; - -protected: - - ////////////////////////////////////////////////////////////////////////// - // FavoriteComponentListRequestBus - void AddFavorites(const AZStd::vector& classDataContainer) override; - ////////////////////////////////////////////////////////////////////////// - - void rowsInserted(const QModelIndex& parent, int start, int end) override; - - // Context menu handlers - void ShowContextMenu(const QPoint&); - void ContextMenu_RemoveSelectedFavorites(); - - // Validate data being dragged in - void dragEnterEvent(QDragEnterEvent * event) override; - void dragMoveEvent(QDragMoveEvent* event) override; - - //! Handler used when dropping PaletteItems into the Viewport. - static void DragDropHandler(CViewport* viewport, int ptx, int pty, void* custom); -}; diff --git a/Code/Editor/Plugins/ComponentEntityEditorPlugin/componententityeditorplugin_files.cmake b/Code/Editor/Plugins/ComponentEntityEditorPlugin/componententityeditorplugin_files.cmake index a03c25e8f0..1aaa5abf4d 100644 --- a/Code/Editor/Plugins/ComponentEntityEditorPlugin/componententityeditorplugin_files.cmake +++ b/Code/Editor/Plugins/ComponentEntityEditorPlugin/componententityeditorplugin_files.cmake @@ -25,8 +25,6 @@ set(FILES UI/ComponentPalette/ComponentDataModel.h UI/ComponentPalette/ComponentDataModel.cpp UI/ComponentPalette/ComponentPaletteSettings.h - UI/ComponentPalette/FavoriteComponentList.h - UI/ComponentPalette/FavoriteComponentList.cpp UI/ComponentPalette/FilteredComponentList.h UI/ComponentPalette/FilteredComponentList.cpp UI/Outliner/OutlinerDisplayOptionsMenu.h From cd7c069fbbbdf5089435751b578a19d051a5a4dd Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Tue, 16 Nov 2021 17:30:33 -0800 Subject: [PATCH 072/284] Removes FilteredComponentList from Code/Editor/Plugins/ComponentEntityEditorPlugin Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../FilteredComponentList.cpp | 264 ------------------ .../ComponentPalette/FilteredComponentList.h | 68 ----- .../componententityeditorplugin_files.cmake | 2 - 3 files changed, 334 deletions(-) delete mode 100644 Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/FilteredComponentList.cpp delete mode 100644 Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/FilteredComponentList.h diff --git a/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/FilteredComponentList.cpp b/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/FilteredComponentList.cpp deleted file mode 100644 index 2431653e36..0000000000 --- a/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/FilteredComponentList.cpp +++ /dev/null @@ -1,264 +0,0 @@ -/* - * 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 "ComponentDataModel.h" -#include "FavoriteComponentList.h" -#include "FilteredComponentList.h" - -#include "CryCommon/MathConversion.h" -#include "Editor/IEditor.h" -#include "Editor/ViewManager.h" -#include - -#include - -#include - -void FilteredComponentList::Init() -{ - setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - setDragDropMode(QAbstractItemView::DragDropMode::DragOnly); - setDragEnabled(true); - - setSelectionMode(QAbstractItemView::SelectionMode::ExtendedSelection); - setStyleSheet("QTreeWidget { selection-background-color: rgba(255,255,255,0.2); }"); - setGridStyle(Qt::PenStyle::NoPen); - verticalHeader()->hide(); - horizontalHeader()->hide(); - setSelectionBehavior(QAbstractItemView::SelectionBehavior::SelectRows); - setAcceptDrops(false); - - m_componentDataModel = new ComponentDataModel(this); - ComponentDataProxyModel* componentDataProxyModel = new ComponentDataProxyModel(this); - componentDataProxyModel->setSourceModel(m_componentDataModel); - setModel(componentDataProxyModel); - - QHeaderView* horizontalHeaderView = horizontalHeader(); - horizontalHeaderView->setSectionResizeMode(ComponentDataModel::ColumnIndex::Icon, QHeaderView::ResizeToContents); - horizontalHeaderView->setSectionResizeMode(ComponentDataModel::ColumnIndex::Name, QHeaderView::Stretch); - - setColumnWidth(ComponentDataModel::ColumnIndex::Icon, 32); - setShowGrid(false); - - setColumnWidth(ComponentDataModel::ColumnIndex::Name, 90); - setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel); - - sortByColumn(ComponentDataModel::ColumnIndex::Name, Qt::AscendingOrder); - hideColumn(ComponentDataModel::ColumnIndex::Category); - - connect(model(), &QAbstractItemModel::rowsInserted, this, &FilteredComponentList::rowsInserted); - connect(model(), &QAbstractItemModel::rowsRemoved, this, &FilteredComponentList::rowsAboutToBeRemoved); - - connect(model(), SIGNAL(modelReset()), SLOT(modelReset())); - - - // Context menu - setContextMenuPolicy(Qt::CustomContextMenu); - connect(this, &QWidget::customContextMenuRequested, this, &FilteredComponentList::ShowContextMenu); -} - -void FilteredComponentList::ContextMenu_NewEntity() -{ - AZ::EntityId entityId; - - auto proxyDataModel = qobject_cast(model()); - if (proxyDataModel) - { - entityId = proxyDataModel->NewEntityFromSelection(selectedIndexes()); - } - else - { - auto dataModel = qobject_cast(model()); - if (dataModel) - { - entityId = dataModel->NewEntityFromSelection(selectedIndexes()); - } - } -} - - -void FilteredComponentList::ContextMenu_AddToFavorites() -{ - AZStd::vector componentsToAdd; - for (auto index : selectedIndexes()) - { - QVariant classDataVariant = index.data(ComponentDataModel::ClassDataRole); - if (classDataVariant.isValid()) - { - auto classData = reinterpret_cast(classDataVariant.value()); - componentsToAdd.push_back(classData); - } - } - - if (!componentsToAdd.empty()) - { - EBUS_EVENT(FavoriteComponentListRequestBus, AddFavorites, componentsToAdd); - } -} - -void FilteredComponentList::ContextMenu_AddToSelectedEntities() -{ - ComponentDataUtilities::AddComponentsToSelectedEntities(selectedIndexes(), model()); -} - -void FilteredComponentList::ShowContextMenu(const QPoint& pos) -{ - QMenu contextMenu(tr("Context menu"), this); - - QAction actionNewEntity(tr("Create new entity with selected components"), this); - if (GetIEditor()->GetDocument()->IsDocumentReady()) - { - QObject::connect(&actionNewEntity, &QAction::triggered, this, [this] { ContextMenu_NewEntity(); }); - contextMenu.addAction(&actionNewEntity); - } - - QAction actionAddFavorite(tr("Add to favorites"), this); - QObject::connect(&actionAddFavorite, &QAction::triggered, this, [this] { ContextMenu_AddToFavorites(); }); - contextMenu.addAction(&actionAddFavorite); - - QAction actionAddToSelection(this); - if (GetIEditor()->GetDocument()->IsDocumentReady()) - { - AzToolsFramework::EntityIdList selectedEntities; - EBUS_EVENT_RESULT(selectedEntities, AzToolsFramework::ToolsApplicationRequests::Bus, GetSelectedEntities); - - if (!selectedEntities.empty()) - { - QString addToSelection = selectedEntities.size() > 1 ? tr("Add to selected entities") : tr("Add to selected entity"); - - actionAddToSelection.setText(addToSelection); - QObject::connect(&actionAddToSelection, &QAction::triggered, this, [this] { ContextMenu_AddToSelectedEntities(); }); - contextMenu.addAction(&actionAddToSelection); - } - } - // TODO: Requires information panel implementation LMBR-28174 - //QAction actionHelp(tr("Help"), this); - //QObject::connect(&actionHelp, &QAction::triggered, this, [&] {}); - //contextMenu.addAction(&actionHelp); - - contextMenu.exec(mapToGlobal(pos)); -} - -void FilteredComponentList::modelReset() -{ - // Ensure that the category column is hidden - hideColumn(ComponentDataModel::ColumnIndex::Category); -} - -FilteredComponentList::FilteredComponentList(QWidget* parent /*= nullptr*/) - : QTableView(parent) -{ -} - -FilteredComponentList::~FilteredComponentList() -{ -} - -void FilteredComponentList::SearchCriteriaChanged(QStringList& criteriaList, AzToolsFramework::FilterOperatorType filterOperator) -{ - setUpdatesEnabled(false); - - auto dataModel = qobject_cast(model()); - if (dataModel) - { - // Go through the list of items and show/hide as needed due to filter. - QString filter; - for (const auto& criteria : criteriaList) - { - QString tag, text; - AzToolsFramework::SearchCriteriaButton::SplitTagAndText(criteria, tag, text); - AppendFilter(filter, text, filterOperator); - } - - dataModel->setFilterRegExp(QRegExp(filter, Qt::CaseSensitivity::CaseInsensitive)); - } - - setUpdatesEnabled(true); -} - -void FilteredComponentList::SetCategory(const char* category) -{ - auto dataModel = qobject_cast(model()); - if (dataModel) - { - if (!category || category[0] == 0 || azstricmp(category, "All") == 0) - { - dataModel->ClearSelectedCategory(); - } - else - { - dataModel->SetSelectedCategory(category); - } - } - - // Note: this ensures the category column remains hidden - hideColumn(ComponentDataModel::ColumnIndex::Category); -} - -void FilteredComponentList::BuildFilter(QStringList& criteriaList, AzToolsFramework::FilterOperatorType filterOperator) -{ - ClearFilterRegExp(); - - for (const auto& criteria : criteriaList) - { - QString tag, text; - AzToolsFramework::SearchCriteriaButton::SplitTagAndText(criteria, tag, text); - if (tag.isEmpty()) - { - tag = "null"; - } - - QString filter = m_filtersRegExp[tag.toStdString().c_str()].pattern(); - - AppendFilter(filter, text, filterOperator); - - SetFilterRegExp(tag.toStdString().c_str(), QRegExp(filter, Qt::CaseInsensitive)); - } -} - -void FilteredComponentList::AppendFilter(QString& filter, const QString& text, AzToolsFramework::FilterOperatorType filterOperator) -{ - if (filterOperator == AzToolsFramework::FilterOperatorType::Or) - { - if (filter.isEmpty()) - { - filter = text; - } - else - { - filter += "|" + text; - } - } - else if (filterOperator == AzToolsFramework::FilterOperatorType::And) - { - //using lookaheads to produce an "and" effect. - filter += "(?=.*" + text + ")"; - } -} - -void FilteredComponentList::SetFilterRegExp(const AZStd::string& filterType, const QRegExp& regExp) -{ - m_filtersRegExp[filterType] = regExp; -} - -void FilteredComponentList::ClearFilterRegExp(const AZStd::string& filterType /*= AZStd::string()*/) -{ - if (filterType.empty()) - { - for (auto& it : m_filtersRegExp) - { - it.second = QRegExp(); - } - } - else - { - m_filtersRegExp[filterType] = QRegExp(); - } -} - -#include diff --git a/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/FilteredComponentList.h b/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/FilteredComponentList.h deleted file mode 100644 index 113128fbcc..0000000000 --- a/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/FilteredComponentList.h +++ /dev/null @@ -1,68 +0,0 @@ -/* - * 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 - -#if !defined(Q_MOC_RUN) -#include -#include - -#include -#include -#include -#include "ComponentDataModel.h" -#endif - -namespace AZ -{ - class SerializeContext; - class ClassData; -} - -class ComponentDataModel; - -//! FilteredComponentList -//! Provides a list of components that can be filtered according to search criteria provided and/or from -//! a category selection control. -class FilteredComponentList - : public QTableView -{ - Q_OBJECT - -public: - - explicit FilteredComponentList(QWidget* parent = nullptr); - - ~FilteredComponentList() override; - - virtual void Init(); - - void SearchCriteriaChanged(QStringList& criteriaList, AzToolsFramework::FilterOperatorType filterOperator); - - void SetCategory(const char* category); - -protected: - - // Filtering support - void BuildFilter(QStringList& criteriaList, AzToolsFramework::FilterOperatorType filterOperator); - void AppendFilter(QString& filter, const QString& text, AzToolsFramework::FilterOperatorType filterOperator); - void SetFilterRegExp(const AZStd::string& filterType, const QRegExp& regExp); - void ClearFilterRegExp(const AZStd::string& filterType = AZStd::string()); - - // Context menu handlers - void ShowContextMenu(const QPoint&); - void ContextMenu_NewEntity(); - void ContextMenu_AddToFavorites(); - void ContextMenu_AddToSelectedEntities(); - - void modelReset(); - - AzToolsFramework::FilterByCategoryMap m_filtersRegExp; - ComponentDataModel* m_componentDataModel; - -}; diff --git a/Code/Editor/Plugins/ComponentEntityEditorPlugin/componententityeditorplugin_files.cmake b/Code/Editor/Plugins/ComponentEntityEditorPlugin/componententityeditorplugin_files.cmake index 1aaa5abf4d..b5a8b00855 100644 --- a/Code/Editor/Plugins/ComponentEntityEditorPlugin/componententityeditorplugin_files.cmake +++ b/Code/Editor/Plugins/ComponentEntityEditorPlugin/componententityeditorplugin_files.cmake @@ -25,8 +25,6 @@ set(FILES UI/ComponentPalette/ComponentDataModel.h UI/ComponentPalette/ComponentDataModel.cpp UI/ComponentPalette/ComponentPaletteSettings.h - UI/ComponentPalette/FilteredComponentList.h - UI/ComponentPalette/FilteredComponentList.cpp UI/Outliner/OutlinerDisplayOptionsMenu.h UI/Outliner/OutlinerDisplayOptionsMenu.cpp UI/Outliner/OutlinerTreeView.hxx From 43679d398f60681e3d8006df7795a5cb20df2aa1 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 17 Nov 2021 13:44:58 -0800 Subject: [PATCH 073/284] Remove AxisHelper from Code/Editor/Plugins/EditorCommon Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Editor/Plugins/EditorCommon/AxisHelper.cpp | 10 ---------- .../Plugins/EditorCommon/editorcommon_files.cmake | 1 - 2 files changed, 11 deletions(-) delete mode 100644 Code/Editor/Plugins/EditorCommon/AxisHelper.cpp diff --git a/Code/Editor/Plugins/EditorCommon/AxisHelper.cpp b/Code/Editor/Plugins/EditorCommon/AxisHelper.cpp deleted file mode 100644 index dab7511779..0000000000 --- a/Code/Editor/Plugins/EditorCommon/AxisHelper.cpp +++ /dev/null @@ -1,10 +0,0 @@ -/* - * 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 "../../Editor/RenderHelpers/AxisHelperShared.inl" diff --git a/Code/Editor/Plugins/EditorCommon/editorcommon_files.cmake b/Code/Editor/Plugins/EditorCommon/editorcommon_files.cmake index 7a380bc6ea..511418efc7 100644 --- a/Code/Editor/Plugins/EditorCommon/editorcommon_files.cmake +++ b/Code/Editor/Plugins/EditorCommon/editorcommon_files.cmake @@ -17,7 +17,6 @@ set(FILES DockTitleBarWidget.h SaveUtilities/AsyncSaveRunner.h SaveUtilities/AsyncSaveRunner.cpp - AxisHelper.cpp DisplayContext.cpp Resource.h WinWidget/WinWidget.h From fb3a4321ed2c440fe631f7e623273754c7de0b07 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 17 Nov 2021 13:45:54 -0800 Subject: [PATCH 074/284] Remove Cry_LegacyPhysUtils from Code/Editor/Plugins/EditorCommon Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../EditorCommon/Cry_LegacyPhysUtils.h | 700 ------------------ 1 file changed, 700 deletions(-) diff --git a/Code/Editor/Plugins/EditorCommon/Cry_LegacyPhysUtils.h b/Code/Editor/Plugins/EditorCommon/Cry_LegacyPhysUtils.h index b3735fa4b6..e69de29bb2 100644 --- a/Code/Editor/Plugins/EditorCommon/Cry_LegacyPhysUtils.h +++ b/Code/Editor/Plugins/EditorCommon/Cry_LegacyPhysUtils.h @@ -1,700 +0,0 @@ -/* - * 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 - * - */ - -// Copied utils functions from CryPhysics that are used by non-physics systems -// This functions will be eventually removed, DO *NOT* use these functions -// TO-DO: Re-implement users using new code -// LY-109806 - -#pragma once - -#include "Cry_Math.h" - -namespace LegacyCryPhysicsUtils -{ - namespace polynomial_tpl_IMPL - { - template - class polynomial_tpl - { - public: - explicit polynomial_tpl() { denom = (ftype)1; }; - explicit polynomial_tpl(ftype op) { zero(); data[degree] = op; } - AZ_FORCE_INLINE polynomial_tpl& zero() - { - for (int i = 0; i <= degree; i++) - { - data[i] = 0; - } - denom = (ftype)1; - return *this; - } - polynomial_tpl(const polynomial_tpl& src) { *this = src; } - polynomial_tpl& operator=(const polynomial_tpl& src) - { - denom = src.denom; - for (int i = 0; i <= degree; i++) - { - data[i] = src.data[i]; - } - return *this; - } - template - AZ_FORCE_INLINE polynomial_tpl& operator=(const polynomial_tpl& src) - { - int i; - denom = src.denom; - for (i = 0; i <= min(degree, degree1); i++) - { - data[i] = src.data[i]; - } - for (; i < degree; i++) - { - data[i] = 0; - } - return *this; - } - AZ_FORCE_INLINE polynomial_tpl& set(ftype* pdata) - { - for (int i = 0; i <= degree; i++) - { - data[degree - i] = pdata[i]; - } - return *this; - } - - AZ_FORCE_INLINE ftype& operator[](int idx) { return data[idx]; } - - void calc_deriviative(polynomial_tpl& deriv, int curdegree = degree) const; - - AZ_FORCE_INLINE polynomial_tpl& fixsign() - { - ftype sg = sgnnz(denom); - denom *= sg; - for (int i = 0; i <= degree; i++) - { - data[i] *= sg; - } - return *this; - } - - int findroots(ftype start, ftype end, ftype* proots, int nIters = 20, int curdegree = degree, bool noDegreeCheck = false) const; - int nroots(ftype start, ftype end) const; - - AZ_FORCE_INLINE ftype eval(ftype x) const - { - ftype res = 0; - for (int i = degree; i >= 0; i--) - { - res = res * x + data[i]; - } - return res; - } - AZ_FORCE_INLINE ftype eval(ftype x, int subdegree) const - { - ftype res = data[subdegree]; - for (int i = subdegree - 1; i >= 0; i--) - { - res = res * x + data[i]; - } - return res; - } - - AZ_FORCE_INLINE polynomial_tpl& operator+=(ftype op) { data[0] += op * denom; return *this; } - AZ_FORCE_INLINE polynomial_tpl& operator-=(ftype op) { data[0] -= op * denom; return *this; } - AZ_FORCE_INLINE polynomial_tpl operator*(ftype op) const - { - polynomial_tpl res; - res.denom = denom; - for (int i = 0; i <= degree; i++) - { - res.data[i] = data[i] * op; - } - return res; - } - AZ_FORCE_INLINE polynomial_tpl& operator*=(ftype op) - { - for (int i = 0; i <= degree; i++) - { - data[i] *= op; - } - return *this; - } - AZ_FORCE_INLINE polynomial_tpl operator/(ftype op) const - { - polynomial_tpl res = *this; - res.denom = denom * op; - return res; - } - AZ_FORCE_INLINE polynomial_tpl& operator/=(ftype op) { denom *= op; return *this; } - - AZ_FORCE_INLINE polynomial_tpl sqr() const { return *this * *this; } - - ftype denom; - ftype data[degree + 1]; - }; - - template - struct tagPolyE - { - inline static ftype polye() { return (ftype)1E-10; } - }; - - template<> - inline float tagPolyE::polye() { return 1e-6f; } - - template - inline ftype polye() { return tagPolyE::polye(); } - - // Don't use this macro; use AZStd::max instead. This is only here to make the template const arguments below readable - // and because Visual Studio 2013 doesn't have a const_expr version of std::max - #define deprecated_degmax(degree1, degree2) (((degree1) > (degree2)) ? (degree1) : (degree2)) - - template - AZ_FORCE_INLINE polynomial_tpl operator+(const polynomial_tpl& pn, ftype op) - { - polynomial_tpl res = pn; - res.data[0] += op * res.denom; - return res; - } - template - AZ_FORCE_INLINE polynomial_tpl operator-(const polynomial_tpl& pn, ftype op) - { - polynomial_tpl res = pn; - res.data[0] -= op * res.denom; - return res; - } - - template - AZ_FORCE_INLINE polynomial_tpl operator+(ftype op, const polynomial_tpl& pn) - { - polynomial_tpl res = pn; - res.data[0] += op * res.denom; - return res; - } - template - AZ_FORCE_INLINE polynomial_tpl operator-(ftype op, const polynomial_tpl& pn) - { - polynomial_tpl res = pn; - res.data[0] -= op * res.denom; - for (int i = 0; i <= degree; i++) - { - res.data[i] = -res.data[i]; - } - return res; - } - template - polynomial_tpl AZ_FORCE_INLINE psqr(const polynomial_tpl& op) { return op * op; } - - template - AZ_FORCE_INLINE polynomial_tpl operator+(const polynomial_tpl& op1, const polynomial_tpl& op2) - { - polynomial_tpl res; - int i; - for (i = 0; i <= min(degree1, degree2); i++) - { - res.data[i] = op1.data[i] * op2.denom + op2.data[i] * op1.denom; - } - for (; i <= degree1; i++) - { - res.data[i] = op1.data[i] * op2.denom; - } - for (; i <= degree2; i++) - { - res.data[i] = op2.data[i] * op1.denom; - } - res.denom = op1.denom * op2.denom; - return res; - } - template - AZ_FORCE_INLINE polynomial_tpl operator-(const polynomial_tpl& op1, const polynomial_tpl& op2) - { - polynomial_tpl res; - int i; - for (i = 0; i <= min(degree1, degree2); i++) - { - res.data[i] = op1.data[i] * op2.denom - op2.data[i] * op1.denom; - } - for (; i <= degree1; i++) - { - res.data[i] = op1.data[i] * op2.denom; - } - for (; i <= degree2; i++) - { - res.data[i] = op2.data[i] * op1.denom; - } - res.denom = op1.denom * op2.denom; - return res; - } - - template - AZ_FORCE_INLINE polynomial_tpl& operator+=(polynomial_tpl& op1, const polynomial_tpl& op2) - { - for (int i = 0; i < min(degree1, degree2); i++) - { - op1.data[i] = op1.data[i] * op2.denom + op2.data[i] * op1.denom; - } - op1.denom *= op2.denom; - return op1; - } - template - AZ_FORCE_INLINE polynomial_tpl& operator-=(polynomial_tpl& op1, const polynomial_tpl& op2) - { - for (int i = 0; i < min(degree1, degree2); i++) - { - op1.data[i] = op1.data[i] * op2.denom - op2.data[i] * op1.denom; - } - op1.denom *= op2.denom; - return op1; - } - - template - AZ_FORCE_INLINE polynomial_tpl operator*(const polynomial_tpl& op1, const polynomial_tpl& op2) - { - polynomial_tpl res; - res.zero(); - int j; - switch (degree1) - { - case 8: - for (j = 0; j <= degree2; j++) - { - res.data[8 + j] += op1.data[8] * op2.data[j]; - } - case 7: - for (j = 0; j <= degree2; j++) - { - res.data[7 + j] += op1.data[7] * op2.data[j]; - } - case 6: - for (j = 0; j <= degree2; j++) - { - res.data[6 + j] += op1.data[6] * op2.data[j]; - } - case 5: - for (j = 0; j <= degree2; j++) - { - res.data[5 + j] += op1.data[5] * op2.data[j]; - } - case 4: - for (j = 0; j <= degree2; j++) - { - res.data[4 + j] += op1.data[4] * op2.data[j]; - } - case 3: - for (j = 0; j <= degree2; j++) - { - res.data[3 + j] += op1.data[3] * op2.data[j]; - } - case 2: - for (j = 0; j <= degree2; j++) - { - res.data[2 + j] += op1.data[2] * op2.data[j]; - } - case 1: - for (j = 0; j <= degree2; j++) - { - res.data[1 + j] += op1.data[1] * op2.data[j]; - } - case 0: - for (j = 0; j <= degree2; j++) - { - res.data[0 + j] += op1.data[0] * op2.data[j]; - } - } - res.denom = op1.denom * op2.denom; - return res; - } - - - template - AZ_FORCE_INLINE void polynomial_divide(const polynomial_tpl& num, const polynomial_tpl& den, polynomial_tpl& quot, - polynomial_tpl& rem, int degree1, int degree2) - { - int i, j, k, l; - ftype maxel; - for (i = 0; i <= degree1; i++) - { - rem.data[i] = num.data[i]; - } - for (i = 0; i <= degree1 - degree2; i++) - { - quot.data[i] = 0; - } - for (i = 1, maxel = fabs_tpl(num.data[0]); i <= degree1; i++) - { - maxel = max(maxel, num.data[i]); - } - for (maxel *= polye(); degree1 >= 0 && fabs_tpl(num.data[degree1]) < maxel; degree1--) - { - ; - } - for (i = 1, maxel = fabs_tpl(den.data[0]); i <= degree2; i++) - { - maxel = max(maxel, den.data[i]); - } - for (maxel *= polye(); degree2 >= 0 && fabs_tpl(den.data[degree2]) < maxel; degree2--) - { - ; - } - rem.denom = num.denom; - quot.denom = (ftype)1; - if (degree1 < 0 || degree2 < 0) - { - return; - } - - for (k = degree1 - degree2, l = degree1; l >= degree2; l--, k--) - { - quot.data[k] = rem.data[l] * den.denom; - quot.denom *= den.data[degree2]; - for (i = degree1 - degree2; i > k; i--) - { - quot.data[i] *= den.data[degree2]; - } - for (i = degree2 - 1, j = l - 1; i >= 0; i--, j--) - { - rem.data[j] = rem.data[j] * den.data[degree2] - den.data[i] * rem.data[l]; - } - for (; j >= 0; j--) - { - rem.data[j] *= den.data[degree2]; - } - rem.denom *= den.data[degree2]; - } - } - - template - AZ_FORCE_INLINE polynomial_tpl operator/(const polynomial_tpl& num, const polynomial_tpl& den) - { - polynomial_tpl quot; - polynomial_tpl rem; - polynomial_divide((polynomial_tpl&)num, (polynomial_tpl&)den, (polynomial_tpl&)quot, - (polynomial_tpl&)rem, degree1, degree2); - return quot; - } - template - AZ_FORCE_INLINE polynomial_tpl operator%(const polynomial_tpl& num, const polynomial_tpl& den) - { - polynomial_tpl quot; - polynomial_tpl rem; - polynomial_divide((polynomial_tpl&)num, (polynomial_tpl&)den, (polynomial_tpl&)quot, - (polynomial_tpl&)rem, degree1, degree2); - return (polynomial_tpl&)rem; - } - - template - AZ_FORCE_INLINE void polynomial_tpl::calc_deriviative(polynomial_tpl& deriv, int curdegree) const - { - for (int i = 0; i < curdegree; i++) - { - deriv.data[i] = data[i + 1] * (i + 1); - } - deriv.denom = denom; - } - - template - to_t* convert_type(from_t* input) - { - typedef union - { - to_t* to; - from_t* from; - } convert_union; - convert_union u; - u.from = input; - return u.to; - } - - template - AZ_FORCE_INLINE int polynomial_tpl::nroots(ftype start, ftype end) const - { - polynomial_tpl f[degree + 1]; - int i, j, sg_a, sg_b; - ftype val, prevval; - - calc_deriviative(f[0]); - polynomial_divide(*convert_type >(this), *convert_type< polynomial_tpl >(&f[0]), *convert_type >(&f[degree]), - *convert_type >(&f[1]), degree, degree - 1); - f[1].denom = -f[1].denom; - for (i = 2; i < degree; i++) - { - polynomial_divide(*convert_type >(&f[i - 2]), *convert_type >(&f[i - 1]), *convert_type >(&f[degree]), - *convert_type >(&f[i]), degree + 1 - i, degree - i); - f[i].denom = -f[i].denom; - if (fabs_tpl(f[i].denom) > (ftype)1E10) - { - for (j = 0; j <= degree - 1 - i; j++) - { - f[i].data[j] *= (ftype)1E-10; - } - f[i].denom *= (ftype)1E-10; - } - } - - prevval = eval(start) * denom; - for (i = sg_a = 0; i < degree; i++, prevval = val) - { - val = f[i].eval(start, degree - 1 - i) * f[i].denom; - sg_a += isneg(val * prevval); - } - - prevval = eval(end) * denom; - for (i = sg_b = 0; i < degree; i++, prevval = val) - { - val = f[i].eval(end, degree - 1 - i) * f[i].denom; - sg_b += isneg(val * prevval); - } - - return fabs_tpl(sg_a - sg_b); - } - - template - AZ_FORCE_INLINE ftype cubert_tpl(ftype x) { return fabs_tpl(x) > (ftype)1E-20 ? exp_tpl(log_tpl(fabs_tpl(x)) * (ftype)(1.0 / 3)) * sgnnz(x) : x; } - template - AZ_FORCE_INLINE ftype pow_tpl(ftype x, ftype pow) { return fabs_tpl(x) > (ftype)1E-20 ? exp_tpl(log_tpl(fabs_tpl(x)) * pow) * sgnnz(x) : x; } - template - AZ_FORCE_INLINE void swap(ftype* ptr, int i, int j) { ftype t = ptr[i]; ptr[i] = ptr[j]; ptr[j] = t; } - - template - int polynomial_tpl::findroots(ftype start, ftype end, ftype* proots, [[maybe_unused]] int nIters, int degree, bool noDegreeCheck) const - { - AZ_UNUSED(nIters); - int i, j, nRoots = 0; - ftype maxel; - if (!noDegreeCheck) - { - for (i = 1, maxel = fabs_tpl(data[0]); i <= degree; i++) - { - maxel = max(maxel, data[i]); - } - for (maxel *= polye(); degree > 0 && fabs_tpl(data[degree]) <= maxel; degree--) - { - ; - } - } - - if constexpr (maxdegree >= 1) - { - if (degree == 1) - { - proots[0] = data[0] / data[1]; - nRoots = 1; - } - } - - if constexpr (maxdegree >= 2) - { - if (degree == 2) - { - ftype a, b, c, d, bound[2], sg; - - a = data[2]; - b = data[1]; - c = data[0]; - d = aznumeric_cast(sgnnz(a)); - a *= d; - b *= d; - c *= d; - d = b * b - a * c * 4; - bound[0] = start * a * 2 + b; - bound[1] = end * a * 2 + b; - sg = aznumeric_cast((sgnnz(bound[0] * bound[1]) + 1) >> 1); - bound[0] *= bound[0]; - bound[1] *= bound[1]; - bound[isneg(fabs_tpl(bound[1]) - fabs_tpl(bound[0]))] *= sg; - - if (isnonneg(d) & inrange(d, bound[0], bound[1])) - { - d = sqrt_tpl(d); - a = (ftype)0.5 / a; - proots[nRoots] = (-b - d) * a; - nRoots += inrange(proots[nRoots], start, end); - proots[nRoots] = (-b + d) * a; - nRoots += inrange(proots[nRoots], start, end); - } - } - } - - if constexpr (maxdegree >= 3) - { - if (degree == 3) - { - ftype t, a, b, c, a3, p, q, Q, Qr, Ar, Ai, phi; - - t = (ftype)1.0 / data[3]; - a = data[2] * t; - b = data[1] * t; - c = data[0] * t; - a3 = a * (ftype)(1.0 / 3); - p = b - a * a3; - q = (a3 * b - c) * (ftype)0.5 - cube(a3); - Q = cube(p * (ftype)(1.0 / 3)) + q * q; - Qr = sqrt_tpl(fabs_tpl(Q)); - - if (Q > 0) - { - proots[0] = cubert_tpl(q + Qr) + cubert_tpl(q - Qr) - a3; - nRoots = 1; - } - else - { - phi = atan2_tpl(Qr, q) * (ftype)(1.0 / 3); - t = pow_tpl(Qr * Qr + q * q, (ftype)(1.0 / 6)); - Ar = t * cos_tpl(phi); - Ai = t * sin_tpl(phi); - proots[0] = 2 * Ar - a3; - proots[1] = aznumeric_cast(-Ar + Ai * sqrt3 - a3); - proots[2] = aznumeric_cast(-Ar - Ai * sqrt3 - a3); - i = idxmax3(proots); - swap(proots, i, 2); - i = isneg(proots[0] - proots[1]); - swap(proots, i, 1); - nRoots = 3; - } - } - } - - if constexpr (maxdegree >= 4) - { - if (degree == 4) - { - ftype t, a3, a2, a1, a0, y, R, D, E, subroots[3]; - const ftype e = (ftype)1E-9; - - t = (ftype)1.0 / data[4]; - a3 = data[3] * t; - a2 = data[2] * t; - a1 = data[1] * t; - a0 = data[0] * t; - polynomial_tpl p3aux; - ftype kp3aux[] = { 1, -a2, a1 * a3 - 4 * a0, 4 * a2 * a0 - a1 * a1 - a3 * a3 * a0 }; - p3aux.set(kp3aux); - if (!p3aux.findroots((ftype)-1E20, (ftype)1E20, subroots)) - { - return 0; - } - R = a3 * a3 * (ftype)0.25 - a2 + (y = subroots[0]); - - if (R > -e) - { - if (R < e) - { - D = E = a3 * a3 * (ftype)(3.0 / 4) - 2 * a2; - t = y * y - 4 * a0; - if (t < -e) - { - return 0; - } - t = 2 * sqrt_tpl(max((ftype)0, t)); - } - else - { - R = sqrt_tpl(max((ftype)0, R)); - D = E = a3 * a3 * (ftype)(3.0 / 4) - R * R - 2 * a2; - t = (4 * a3 * a2 - 8 * a1 - a3 * a3 * a3) / R * (ftype)0.25; - } - if (D + t > -e) - { - D = sqrt_tpl(max((ftype)0, D + t)); - proots[nRoots++] = a3 * (ftype)-0.25 + (R - D) * (ftype)0.5; - proots[nRoots++] = a3 * (ftype)-0.25 + (R + D) * (ftype)0.5; - } - if (E - t > -e) - { - E = sqrt_tpl(max((ftype)0, E - t)); - proots[nRoots++] = a3 * (ftype)-0.25 - (R + E) * (ftype)0.5; - proots[nRoots++] = a3 * (ftype)-0.25 - (R - E) * (ftype)0.5; - } - if (nRoots == 4) - { - i = idxmax3(proots); - if (proots[3] < proots[i]) - { - swap(proots, i, 3); - } - i = idxmax3(proots); - swap(proots, i, 2); - i = isneg(proots[0] - proots[1]); - swap(proots, i, 1); - } - } - } - } - - if constexpr (maxdegree > 4) - { - if (degree > 4) - { - ftype roots[maxdegree + 1], prevroot, val, prevval[2], curval, bound[2], middle; - polynomial_tpl deriv; - int nExtremes, iter, iBound; - calc_deriviative(deriv); - - // find a subset of deriviative extremes between start and end - for (nExtremes = deriv.findroots(start, end, roots + 1, nIters, degree - 1) + 1; nExtremes > 1 && roots[nExtremes - 1] > end; nExtremes--) - { - ; - } - for (i = 1; i < nExtremes && roots[i] < start; i++) - { - ; - } - roots[i - 1] = start; - PREFAST_ASSUME(nExtremes < maxdegree + 1); - roots[nExtremes++] = end; - - for (prevroot = start, prevval[0] = eval(start, degree), nRoots = 0; i < nExtremes; prevval[0] = val, prevroot = roots[i++]) - { - val = eval(roots[i], degree); - if (val * prevval[0] < 0) - { - // we have exactly one root between prevroot and roots[i] - bound[0] = prevroot; - bound[1] = roots[i]; - iter = 0; - do - { - middle = (bound[0] + bound[1]) * (ftype)0.5; - curval = eval(middle, degree); - iBound = isneg(prevval[0] * curval); - bound[iBound] = middle; - prevval[iBound] = curval; - } while (++iter < nIters); - proots[nRoots++] = middle; - } - } - } - } - - for (i = 0; i < nRoots && proots[i] < start; i++) - { - ; - } - for (; nRoots > i&& proots[nRoots - 1] > end; nRoots--) - { - ; - } - for (j = i; j < nRoots; j++) - { - proots[j - i] = proots[j]; - } - - return nRoots - i; - } - } // namespace polynomial_tpl_IMPL - template - using polynomial_tpl = polynomial_tpl_IMPL::polynomial_tpl; - - typedef polynomial_tpl P3; - typedef polynomial_tpl P2; - typedef polynomial_tpl P1; - typedef polynomial_tpl P3f; - typedef polynomial_tpl P2f; - typedef polynomial_tpl P1f; -} // namespace LegacyCryPhysicsUtils From 28adecf8b37557a5d2e0e40654e2519899b43ed5 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 17 Nov 2021 19:22:19 -0800 Subject: [PATCH 075/284] Removes DisplayContext.cpp and Cry_Legacy_PhysUtils.h from Code/Editor/Plugins/EditorCommon Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Editor/Plugins/EditorCommon/Cry_LegacyPhysUtils.h | 0 Code/Editor/Plugins/EditorCommon/DisplayContext.cpp | 9 --------- .../Editor/Plugins/EditorCommon/editorcommon_files.cmake | 1 - 3 files changed, 10 deletions(-) delete mode 100644 Code/Editor/Plugins/EditorCommon/Cry_LegacyPhysUtils.h delete mode 100644 Code/Editor/Plugins/EditorCommon/DisplayContext.cpp diff --git a/Code/Editor/Plugins/EditorCommon/Cry_LegacyPhysUtils.h b/Code/Editor/Plugins/EditorCommon/Cry_LegacyPhysUtils.h deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/Code/Editor/Plugins/EditorCommon/DisplayContext.cpp b/Code/Editor/Plugins/EditorCommon/DisplayContext.cpp deleted file mode 100644 index f0a82ba13c..0000000000 --- a/Code/Editor/Plugins/EditorCommon/DisplayContext.cpp +++ /dev/null @@ -1,9 +0,0 @@ -/* - * 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 "../../Editor/Objects/DisplayContextShared.inl" diff --git a/Code/Editor/Plugins/EditorCommon/editorcommon_files.cmake b/Code/Editor/Plugins/EditorCommon/editorcommon_files.cmake index 511418efc7..a198bb0b4d 100644 --- a/Code/Editor/Plugins/EditorCommon/editorcommon_files.cmake +++ b/Code/Editor/Plugins/EditorCommon/editorcommon_files.cmake @@ -17,7 +17,6 @@ set(FILES DockTitleBarWidget.h SaveUtilities/AsyncSaveRunner.h SaveUtilities/AsyncSaveRunner.cpp - DisplayContext.cpp Resource.h WinWidget/WinWidget.h WinWidget/WinWidgetManager.h From 3f5b17b7925780a8ce6fa25593b96918ee6420e7 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 18 Nov 2021 13:59:43 -0800 Subject: [PATCH 076/284] =?UTF-8?q?=EF=BB=BFRemoves=20WinWidget=20from=20C?= =?UTF-8?q?ode/Editor/Plugins/EditorCommon?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Editor/IEditor.h | 9 --- Code/Editor/IEditorImpl.cpp | 19 ----- Code/Editor/IEditorImpl.h | 9 --- Code/Editor/Lib/Tests/IEditorMock.h | 2 - Code/Editor/Plugins/EditorCommon/Resource.h | 26 ------- .../EditorCommon/WinWidget/WinWidget.h | 59 ---------------- .../WinWidget/WinWidgetManager.cpp | 70 ------------------- .../EditorCommon/WinWidget/WinWidgetManager.h | 41 ----------- .../EditorCommon/editorcommon_files.cmake | 4 -- 9 files changed, 239 deletions(-) delete mode 100644 Code/Editor/Plugins/EditorCommon/Resource.h delete mode 100644 Code/Editor/Plugins/EditorCommon/WinWidget/WinWidget.h delete mode 100644 Code/Editor/Plugins/EditorCommon/WinWidget/WinWidgetManager.cpp delete mode 100644 Code/Editor/Plugins/EditorCommon/WinWidget/WinWidgetManager.h diff --git a/Code/Editor/IEditor.h b/Code/Editor/IEditor.h index fa20481192..0ba24ac46a 100644 --- a/Code/Editor/IEditor.h +++ b/Code/Editor/IEditor.h @@ -66,11 +66,6 @@ struct SEditorSettings; class CGameExporter; class IAWSResourceManager; -namespace WinWidget -{ - class WinWidgetManager; -} - struct ISystem; struct IRenderer; struct AABB; @@ -586,10 +581,6 @@ struct IEditor virtual bool SetViewFocus(const char* sViewClassName) = 0; virtual void CloseView(const GUID& classId) = 0; // close ALL panels related to classId, used when unloading plugins. - // We want to open a view object but not wrap it in a view pane) - virtual QWidget* OpenWinWidget(WinWidgetId openId) = 0; - virtual WinWidget::WinWidgetManager* GetWinWidgetManager() const = 0; - //! Opens standard color selection dialog. //! Initialized with the color specified in color parameter. //! Returns true if selection is made and false if selection is canceled. diff --git a/Code/Editor/IEditorImpl.cpp b/Code/Editor/IEditorImpl.cpp index 38006c6fca..fc18e1f4c3 100644 --- a/Code/Editor/IEditorImpl.cpp +++ b/Code/Editor/IEditorImpl.cpp @@ -75,9 +75,6 @@ AZ_POP_DISABLE_WARNING #include "Editor/AzAssetBrowser/AzAssetBrowserRequestHandler.h" #include "Editor/AssetEditor/AssetEditorRequestsHandler.h" -// EditorCommon -#include - // AWSNativeSDK #include @@ -177,8 +174,6 @@ CEditorImpl::CEditorImpl() DetectVersion(); RegisterTools(); - m_winWidgetManager.reset(new WinWidget::WinWidgetManager); - m_pAssetDatabaseLocationListener = nullptr; m_pAssetBrowserRequestHandler = nullptr; m_assetEditorRequestsHandler = nullptr; @@ -847,20 +842,6 @@ const QtViewPane* CEditorImpl::OpenView(QString sViewClassName, bool reuseOpened return QtViewPaneManager::instance()->OpenPane(sViewClassName, openMode); } -QWidget* CEditorImpl::OpenWinWidget(WinWidgetId openId) -{ - if (m_winWidgetManager) - { - return m_winWidgetManager->OpenWinWidget(openId); - } - return nullptr; -} - -WinWidget::WinWidgetManager* CEditorImpl::GetWinWidgetManager() const -{ - return m_winWidgetManager.get(); -} - QWidget* CEditorImpl::FindView(QString viewClassName) { return QtViewPaneManager::instance()->GetView(viewClassName); diff --git a/Code/Editor/IEditorImpl.h b/Code/Editor/IEditorImpl.h index 7867912941..f53b1b84d5 100644 --- a/Code/Editor/IEditorImpl.h +++ b/Code/Editor/IEditorImpl.h @@ -53,11 +53,6 @@ namespace Editor class EditorQtApplication; } -namespace WinWidget -{ - class WinWidgetManager; -} - namespace AssetDatabase { class AssetDatabaseLocationListener; @@ -221,9 +216,6 @@ public: bool CloseView(const char* sViewClassName) override; bool SetViewFocus(const char* sViewClassName) override; - QWidget* OpenWinWidget(WinWidgetId openId) override; - WinWidget::WinWidgetManager* GetWinWidgetManager() const override; - // close ALL panels related to classId, used when unloading plugins. void CloseView(const GUID& classId) override; bool SelectColor(QColor &color, QWidget *parent = 0) override; @@ -370,7 +362,6 @@ protected: QString m_levelNameBuffer; IAWSResourceManager* m_awsResourceManager; - std::unique_ptr m_winWidgetManager; //! True if the editor is in material edit mode. Fast preview of materials. //! In this mode only very limited functionality is available. diff --git a/Code/Editor/Lib/Tests/IEditorMock.h b/Code/Editor/Lib/Tests/IEditorMock.h index aaee34c2c6..b2f7e2627f 100644 --- a/Code/Editor/Lib/Tests/IEditorMock.h +++ b/Code/Editor/Lib/Tests/IEditorMock.h @@ -128,8 +128,6 @@ public: MOCK_METHOD1(CloseView, bool(const char* )); MOCK_METHOD1(SetViewFocus, bool(const char* )); MOCK_METHOD1(CloseView, void(const GUID& )); - MOCK_METHOD1(OpenWinWidget, QWidget* (WinWidgetId )); - MOCK_CONST_METHOD0(GetWinWidgetManager, WinWidget::WinWidgetManager* ()); MOCK_METHOD2(SelectColor, bool(QColor &, QWidget *)); MOCK_METHOD0(GetUndoManager, class CUndoManager* ()); MOCK_METHOD0(BeginUndo, void()); diff --git a/Code/Editor/Plugins/EditorCommon/Resource.h b/Code/Editor/Plugins/EditorCommon/Resource.h deleted file mode 100644 index d1acef6314..0000000000 --- a/Code/Editor/Plugins/EditorCommon/Resource.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * 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 - * - */ - - - -//{{NO_DEPENDENCIES}} -// Microsoft Visual C++ generated include file. -// Used by EditorCommon.rc -// - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS - -#define _APS_NEXT_RESOURCE_VALUE 1000 -#define _APS_NEXT_CONTROL_VALUE 1000 -#define _APS_NEXT_SYMED_VALUE 1000 -#define _APS_NEXT_COMMAND_VALUE 32771 -#endif -#endif diff --git a/Code/Editor/Plugins/EditorCommon/WinWidget/WinWidget.h b/Code/Editor/Plugins/EditorCommon/WinWidget/WinWidget.h deleted file mode 100644 index 06e84c1405..0000000000 --- a/Code/Editor/Plugins/EditorCommon/WinWidget/WinWidget.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * 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 - -#include "EditorCommonAPI.h" -#include "IEditor.h" - - -#include -#include -#include - -namespace WinWidget -{ - template - bool RegisterWinWidget() - { - static QWidget* winWidget {nullptr}; // Must declare outside of lambda - - WinWidget::WinWidgetManager::WinWidgetCreateCall createCall = []() -> QWidget* - { - if (!winWidget) - { - winWidget = new QWidget(GetIEditor()->GetEditorMainWindow()); - } - - // Ensure only one instance of each window type exists - QList existingWidgets = winWidget->findChildren(); - if (existingWidgets.size() > 0) // Note that the list should contain 0 or 1 entries - { - if (existingWidgets.first()->isVisible()) - { - return nullptr; // TWidget type already in use - continue using it and don't create another - } - delete existingWidgets.first(); // Closed TWidget - remove - } - - TWidget* createWidget = new TWidget(winWidget); - - createWidget->Display(); - return winWidget; - }; - - return GetIEditor()->GetWinWidgetManager()->RegisterWinWidget(TWidget::GetWWId(), createCall); - } - - template - void UnregisterWinWidget() - { - GetIEditor()->GetWinWidgetManager()->UnregisterWinWidget(TWidget::GetWWId()); - } -} diff --git a/Code/Editor/Plugins/EditorCommon/WinWidget/WinWidgetManager.cpp b/Code/Editor/Plugins/EditorCommon/WinWidget/WinWidgetManager.cpp deleted file mode 100644 index 3ffa1b1b99..0000000000 --- a/Code/Editor/Plugins/EditorCommon/WinWidget/WinWidgetManager.cpp +++ /dev/null @@ -1,70 +0,0 @@ -/* - * 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 - -namespace WinWidget -{ - WinWidgetManager::WinWidgetManager() - : m_createCalls(size_t(WinWidgetId::NUM_WIN_WIDGET_IDS) + 1) - { - } - - size_t WinWidgetManager::GetIndexForId(WinWidgetId thisId) const - { - size_t thisIndex = static_cast(thisId); - if (thisIndex >= m_createCalls.size()) - { - return 0; - } - return thisIndex; - } - - WinWidgetManager::WinWidgetCreateCall WinWidgetManager::GetCreateCall(WinWidgetId thisId) const - { - size_t thisIndex = GetIndexForId(thisId); - if (!thisIndex) - { - return nullptr; - } - return m_createCalls[thisIndex]; - } - - bool WinWidgetManager::RegisterWinWidget(WinWidgetId thisId, WinWidgetCreateCall createCall) - { - size_t thisIndex = GetIndexForId(thisId); - if (m_createCalls[thisIndex] != nullptr) - { - return false; - } - m_createCalls[thisIndex] = createCall; - return true; - } - - bool WinWidgetManager::UnregisterWinWidget(WinWidgetId thisId) - { - size_t thisIndex = GetIndexForId(thisId); - if (m_createCalls[thisIndex] == nullptr) - { - return false; - } - m_createCalls[thisIndex] = nullptr; - return true; - } - - - QWidget* WinWidgetManager::OpenWinWidget(WinWidgetId createId) const - { - WinWidgetManager::WinWidgetCreateCall createCall = GetCreateCall(createId); - if (!createCall) - { - return nullptr; - } - return createCall(); - } -} diff --git a/Code/Editor/Plugins/EditorCommon/WinWidget/WinWidgetManager.h b/Code/Editor/Plugins/EditorCommon/WinWidget/WinWidgetManager.h deleted file mode 100644 index 968f3ea6d2..0000000000 --- a/Code/Editor/Plugins/EditorCommon/WinWidget/WinWidgetManager.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * 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 - -#include -#include "EditorCommonAPI.h" - -#include -#include - -class QWidget; - -namespace WinWidget -{ - class EDITOR_COMMON_API WinWidgetManager - { - public: - using WinWidgetCreateCall = std::function; - - WinWidgetManager(); - ~WinWidgetManager() {} - - bool RegisterWinWidget(WinWidgetId thisId, WinWidgetCreateCall createCall); - bool UnregisterWinWidget(WinWidgetId thisId); - - QWidget* OpenWinWidget(WinWidgetId) const; - private: - WinWidgetCreateCall GetCreateCall(WinWidgetId thisId) const; - size_t GetIndexForId(WinWidgetId thisId) const; - - AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING - std::vector m_createCalls; - AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING - }; -} diff --git a/Code/Editor/Plugins/EditorCommon/editorcommon_files.cmake b/Code/Editor/Plugins/EditorCommon/editorcommon_files.cmake index a198bb0b4d..031d8765ff 100644 --- a/Code/Editor/Plugins/EditorCommon/editorcommon_files.cmake +++ b/Code/Editor/Plugins/EditorCommon/editorcommon_files.cmake @@ -17,8 +17,4 @@ set(FILES DockTitleBarWidget.h SaveUtilities/AsyncSaveRunner.h SaveUtilities/AsyncSaveRunner.cpp - Resource.h - WinWidget/WinWidget.h - WinWidget/WinWidgetManager.h - WinWidget/WinWidgetManager.cpp ) From ac4ce8983bf6d406ef26274737931ba7db0ca14e Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 18 Nov 2021 14:11:33 -0800 Subject: [PATCH 077/284] Removes unused resource files Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Editor/Launcher/editor_launcher.rc | 2 - Code/Editor/Launcher/resource.h | 9 --- .../ComponentEntityEditorPlugin.mf | 3 - .../Plugins/EditorCommon/EditorCommon.rc | Bin 2326 -> 0 bytes .../EditorCommon/Icons/CurveEditor/auto.png | 3 - .../EditorCommon/Icons/CurveEditor/break.png | 3 - .../Icons/CurveEditor/fit_horizontal.png | 3 - .../Icons/CurveEditor/fit_vertical.png | 3 - .../Icons/CurveEditor/linear_in.png | 3 - .../Icons/CurveEditor/linear_out.png | 3 - .../Icons/CurveEditor/step_in.png | 3 - .../Icons/CurveEditor/step_out.png | 3 - .../EditorCommon/Icons/CurveEditor/unify.png | 3 - .../Icons/CurveEditor/zero_in.png | 3 - .../Icons/CurveEditor/zero_out.png | 3 - .../EditorCommon/editorcommon_files.cmake | 1 - .../Plugins/PerforcePlugin/PerforcePlugin.qrc | 4 - .../Plugins/PerforcePlugin/PerforcePlugin.rc | 71 ------------------ .../PerforcePlugin/perforceplugin_files.cmake | 2 - Code/Editor/Plugins/PerforcePlugin/resource.h | 23 ------ 20 files changed, 148 deletions(-) delete mode 100644 Code/Editor/Launcher/editor_launcher.rc delete mode 100644 Code/Editor/Launcher/resource.h delete mode 100644 Code/Editor/Plugins/ComponentEntityEditorPlugin/ComponentEntityEditorPlugin.mf delete mode 100644 Code/Editor/Plugins/EditorCommon/EditorCommon.rc delete mode 100644 Code/Editor/Plugins/EditorCommon/Icons/CurveEditor/auto.png delete mode 100644 Code/Editor/Plugins/EditorCommon/Icons/CurveEditor/break.png delete mode 100644 Code/Editor/Plugins/EditorCommon/Icons/CurveEditor/fit_horizontal.png delete mode 100644 Code/Editor/Plugins/EditorCommon/Icons/CurveEditor/fit_vertical.png delete mode 100644 Code/Editor/Plugins/EditorCommon/Icons/CurveEditor/linear_in.png delete mode 100644 Code/Editor/Plugins/EditorCommon/Icons/CurveEditor/linear_out.png delete mode 100644 Code/Editor/Plugins/EditorCommon/Icons/CurveEditor/step_in.png delete mode 100644 Code/Editor/Plugins/EditorCommon/Icons/CurveEditor/step_out.png delete mode 100644 Code/Editor/Plugins/EditorCommon/Icons/CurveEditor/unify.png delete mode 100644 Code/Editor/Plugins/EditorCommon/Icons/CurveEditor/zero_in.png delete mode 100644 Code/Editor/Plugins/EditorCommon/Icons/CurveEditor/zero_out.png delete mode 100644 Code/Editor/Plugins/PerforcePlugin/PerforcePlugin.qrc delete mode 100644 Code/Editor/Plugins/PerforcePlugin/PerforcePlugin.rc delete mode 100644 Code/Editor/Plugins/PerforcePlugin/resource.h diff --git a/Code/Editor/Launcher/editor_launcher.rc b/Code/Editor/Launcher/editor_launcher.rc deleted file mode 100644 index 26dad7a3da..0000000000 --- a/Code/Editor/Launcher/editor_launcher.rc +++ /dev/null @@ -1,2 +0,0 @@ -IDI_ICON1 ICON DISCARDABLE "..\\res\\lyeditor.ico" - diff --git a/Code/Editor/Launcher/resource.h b/Code/Editor/Launcher/resource.h deleted file mode 100644 index 1be83bd298..0000000000 --- a/Code/Editor/Launcher/resource.h +++ /dev/null @@ -1,9 +0,0 @@ -/* - * 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 - * - */ - -#define IDI_ICON1 2 diff --git a/Code/Editor/Plugins/ComponentEntityEditorPlugin/ComponentEntityEditorPlugin.mf b/Code/Editor/Plugins/ComponentEntityEditorPlugin/ComponentEntityEditorPlugin.mf deleted file mode 100644 index 997209477a..0000000000 --- a/Code/Editor/Plugins/ComponentEntityEditorPlugin/ComponentEntityEditorPlugin.mf +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/Code/Editor/Plugins/EditorCommon/EditorCommon.rc b/Code/Editor/Plugins/EditorCommon/EditorCommon.rc deleted file mode 100644 index 77deebb598990e925cf97758d98877e71ec79872..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2326 zcmd6p%Wm306o${5r?8w&t5)2aO_n7#77Br=5TmXTL_`8MB~VS*=s3R0z3 z)_6Q~?*F;K?_VV;Ng%f}lcB6+A#2t|Hr%D$t>sAuGUs$HA9wXMDjn%Vi$SU*4QUf;pS>k@zJu4t z=Wz6bq1WMWqQU3c$?8`H#LC;Hxar*;Hro<`>$P-`Nbk!zYju;C1g~$&OGj?dXrrm) zdxI#BbJ|*&m@1hd*T;)kYIu?u-}WW*x_#~oaGite_^4!AeiC~Vy7FdNozVk|fwR-b zf3=`{AMCrldnOAJcRg-DN!63+%2)8yT1?TR{1Fz^#!hR8cxupm&MLh3*tlV-?iMmN zG$qEK&5UNJhPF1DQCvej*qDyX=+HX;&xxc#EEB3p`^jbdkft3iudytbpmN2!#8%nU zvXj{N%hBAPlKmzTDHb9AF65E9Fu=EGVjFN8bFcksso6G?Z%l~|+}aa?`O^0T+yQYf zO{M~Hk2uF@o0{pM)H`Gr@*R#L68Y$zPj2^pbGSuF<|ml#$h?n_c&%OfCr@HiOE!uC z3^pb+Gxld>ZAF~#pFb(AUoN7MPA-xyyDDcyuhpUxeZ{Ub-_MQJAA+=YhmFYQ(jrmh ze$I1xG)-(xjV0By1QGqkn37@5*{&XZN+9pZ>U+>rsee~1?X9=^i>7F~+R>A%=)Z}U zt?3axp*8L2CZr#<546Mb`8hoozV^fQbxLK$coyZR&D*m-vr@2Hy&`w+wDNnmizb~Z bYjUCgO!7Tz=ewO|_J2W@4k;h-)B5`YCMh&c diff --git a/Code/Editor/Plugins/EditorCommon/Icons/CurveEditor/auto.png b/Code/Editor/Plugins/EditorCommon/Icons/CurveEditor/auto.png deleted file mode 100644 index 4009c4110c..0000000000 --- a/Code/Editor/Plugins/EditorCommon/Icons/CurveEditor/auto.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3e60156229cc8677e0294d297486f04bd78867ef4e0922b35444c8b45f78584d -size 1090 diff --git a/Code/Editor/Plugins/EditorCommon/Icons/CurveEditor/break.png b/Code/Editor/Plugins/EditorCommon/Icons/CurveEditor/break.png deleted file mode 100644 index 75399a536a..0000000000 --- a/Code/Editor/Plugins/EditorCommon/Icons/CurveEditor/break.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fd29a16a1d1d9a363e4b154d51910c2cba2787fbbe1360cfd107b393053d2e49 -size 1226 diff --git a/Code/Editor/Plugins/EditorCommon/Icons/CurveEditor/fit_horizontal.png b/Code/Editor/Plugins/EditorCommon/Icons/CurveEditor/fit_horizontal.png deleted file mode 100644 index fee50a459c..0000000000 --- a/Code/Editor/Plugins/EditorCommon/Icons/CurveEditor/fit_horizontal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:244005cde119238bbfc2815f36a343c6135c3233d0b72a5c97a6080604568e8f -size 1160 diff --git a/Code/Editor/Plugins/EditorCommon/Icons/CurveEditor/fit_vertical.png b/Code/Editor/Plugins/EditorCommon/Icons/CurveEditor/fit_vertical.png deleted file mode 100644 index 9a067e6980..0000000000 --- a/Code/Editor/Plugins/EditorCommon/Icons/CurveEditor/fit_vertical.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:33176a8ea6b0798adf1114fdbea4b0f5c708f40c3d48a047b1cb0fa6ebcbbded -size 1181 diff --git a/Code/Editor/Plugins/EditorCommon/Icons/CurveEditor/linear_in.png b/Code/Editor/Plugins/EditorCommon/Icons/CurveEditor/linear_in.png deleted file mode 100644 index 1ba6d72859..0000000000 --- a/Code/Editor/Plugins/EditorCommon/Icons/CurveEditor/linear_in.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c122557745cc377768491ce59c5b5b17e54671aa59f7f87101766aa61758959e -size 939 diff --git a/Code/Editor/Plugins/EditorCommon/Icons/CurveEditor/linear_out.png b/Code/Editor/Plugins/EditorCommon/Icons/CurveEditor/linear_out.png deleted file mode 100644 index 58694e0c4f..0000000000 --- a/Code/Editor/Plugins/EditorCommon/Icons/CurveEditor/linear_out.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3c2a360a56a37bfae2bea16b495f5b6ee482caa28d0949e8eadea48fdaae654f -size 845 diff --git a/Code/Editor/Plugins/EditorCommon/Icons/CurveEditor/step_in.png b/Code/Editor/Plugins/EditorCommon/Icons/CurveEditor/step_in.png deleted file mode 100644 index d1a2238790..0000000000 --- a/Code/Editor/Plugins/EditorCommon/Icons/CurveEditor/step_in.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:eb0f43228bdb5246ea3bfde0726f07e0df0468279610ba4c801b21e264b33123 -size 765 diff --git a/Code/Editor/Plugins/EditorCommon/Icons/CurveEditor/step_out.png b/Code/Editor/Plugins/EditorCommon/Icons/CurveEditor/step_out.png deleted file mode 100644 index 910db1aeb3..0000000000 --- a/Code/Editor/Plugins/EditorCommon/Icons/CurveEditor/step_out.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:97a2e879222323bc70787efbe2cbc1c47bbabb7b10df8465857e600a9084abb2 -size 795 diff --git a/Code/Editor/Plugins/EditorCommon/Icons/CurveEditor/unify.png b/Code/Editor/Plugins/EditorCommon/Icons/CurveEditor/unify.png deleted file mode 100644 index 5a8a5105d7..0000000000 --- a/Code/Editor/Plugins/EditorCommon/Icons/CurveEditor/unify.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:58e8476b7bec1ed8eddfde3d5228f58fcfba11329318f5dfef3d98eb99f3a897 -size 1113 diff --git a/Code/Editor/Plugins/EditorCommon/Icons/CurveEditor/zero_in.png b/Code/Editor/Plugins/EditorCommon/Icons/CurveEditor/zero_in.png deleted file mode 100644 index d43d881d45..0000000000 --- a/Code/Editor/Plugins/EditorCommon/Icons/CurveEditor/zero_in.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a7847e8b7f3dd76395d893888916e4bd97ddf3f678d37d19836da04c2923791e -size 871 diff --git a/Code/Editor/Plugins/EditorCommon/Icons/CurveEditor/zero_out.png b/Code/Editor/Plugins/EditorCommon/Icons/CurveEditor/zero_out.png deleted file mode 100644 index f287d1c7af..0000000000 --- a/Code/Editor/Plugins/EditorCommon/Icons/CurveEditor/zero_out.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:470266956c6911690299f29539c400122ae707f88d9b6ba3516faf196a8fd571 -size 877 diff --git a/Code/Editor/Plugins/EditorCommon/editorcommon_files.cmake b/Code/Editor/Plugins/EditorCommon/editorcommon_files.cmake index 031d8765ff..1ae1f51632 100644 --- a/Code/Editor/Plugins/EditorCommon/editorcommon_files.cmake +++ b/Code/Editor/Plugins/EditorCommon/editorcommon_files.cmake @@ -9,7 +9,6 @@ set(FILES EditorCommon.h EditorCommon.cpp - EditorCommon.rc EditorCommonAPI.h ActionOutput.h ActionOutput.cpp diff --git a/Code/Editor/Plugins/PerforcePlugin/PerforcePlugin.qrc b/Code/Editor/Plugins/PerforcePlugin/PerforcePlugin.qrc deleted file mode 100644 index d378e6b5e4..0000000000 --- a/Code/Editor/Plugins/PerforcePlugin/PerforcePlugin.qrc +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/Code/Editor/Plugins/PerforcePlugin/PerforcePlugin.rc b/Code/Editor/Plugins/PerforcePlugin/PerforcePlugin.rc deleted file mode 100644 index 26e4bbda6b..0000000000 --- a/Code/Editor/Plugins/PerforcePlugin/PerforcePlugin.rc +++ /dev/null @@ -1,71 +0,0 @@ -// Microsoft Visual C++ generated resource script. -// -#include "resource.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#include "winres.h" - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// English (United States) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -#pragma code_page(1252) - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE -BEGIN - "resource.h\0" -END - -2 TEXTINCLUDE -BEGIN - "#include ""winres.h""\r\n" - "\0" -END - -3 TEXTINCLUDE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// Icon -// - -// Icon with lowest ID value placed first to ensure application icon -// remains consistent on all systems. -IDI_P4 ICON "res\\p4.ico" -IDI_P4_ERROR ICON "res\\p4_error.ico" -#endif // English (United States) resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED - diff --git a/Code/Editor/Plugins/PerforcePlugin/perforceplugin_files.cmake b/Code/Editor/Plugins/PerforcePlugin/perforceplugin_files.cmake index 7932c01015..5302a9f718 100644 --- a/Code/Editor/Plugins/PerforcePlugin/perforceplugin_files.cmake +++ b/Code/Editor/Plugins/PerforcePlugin/perforceplugin_files.cmake @@ -13,8 +13,6 @@ set(FILES PasswordDlg.h PerforcePlugin.cpp PerforcePlugin.h - PerforcePlugin.qrc PerforceSourceControl.cpp PerforceSourceControl.h - resource.h ) diff --git a/Code/Editor/Plugins/PerforcePlugin/resource.h b/Code/Editor/Plugins/PerforcePlugin/resource.h deleted file mode 100644 index bb41c2b1bd..0000000000 --- a/Code/Editor/Plugins/PerforcePlugin/resource.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * 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 - * - */ - - -#define IDI_P4 104 -#define IDI_P4_ERROR 106 -#define IDC_ERROR 1004 - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 107 -#define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 1010 -#define _APS_NEXT_SYMED_VALUE 101 -#endif -#endif From 0d94e5cb0def09dfcd7e707e060ab12ba36c9d83 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 18 Nov 2021 14:21:32 -0800 Subject: [PATCH 078/284] Removes bitarray.h from Code/Editor Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Editor/EditorDefs.h | 1 - Code/Editor/Util/bitarray.h | 335 ----------------------------- Code/Editor/editor_lib_files.cmake | 1 - 3 files changed, 337 deletions(-) delete mode 100644 Code/Editor/Util/bitarray.h diff --git a/Code/Editor/EditorDefs.h b/Code/Editor/EditorDefs.h index 97c03b2b45..3abc3eb53c 100644 --- a/Code/Editor/EditorDefs.h +++ b/Code/Editor/EditorDefs.h @@ -123,7 +123,6 @@ #include "Util/XmlTemplate.h" // Utility classes. -#include "Util/bitarray.h" #include "Util/RefCountBase.h" #include "Util/TRefCountBase.h" #include "Util/MemoryBlock.h" diff --git a/Code/Editor/Util/bitarray.h b/Code/Editor/Util/bitarray.h deleted file mode 100644 index 5a887b02d5..0000000000 --- a/Code/Editor/Util/bitarray.h +++ /dev/null @@ -1,335 +0,0 @@ -/* - * 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 - * - */ - - -// Description : Array of m_bits. - - -#ifndef CRYINCLUDE_EDITOR_UTIL_BITARRAY_H -#define CRYINCLUDE_EDITOR_UTIL_BITARRAY_H -#pragma once - - -////////////////////////////////////////////////////////////////////////// -// -// CBitArray is similar to std::vector but faster to clear. -// -////////////////////////////////////////////////////////////////////////// -class CBitArray -{ -public: - struct BitReference - { - uint32* p; - uint32 mask; - BitReference(uint32* __x, uint32 __y) - : p(__x) - , mask(__y) {} - - - public: - BitReference() - : p(0) - , mask(0) {} - - operator bool() const { - return !(!(*p & mask)); - } - BitReference& operator=(bool __x) - { - if (__x) - { - * p |= mask; - } - else - { - * p &= ~mask; - } - return *this; - } - BitReference& operator=(const BitReference& __x) { return *this = bool(__x); } - bool operator==(const BitReference& __x) const { return bool(*this) == bool(__x); } - bool operator<(const BitReference& __x) const { return !bool(*this) && bool(__x); } - BitReference& operator |= (bool __x) - { - if (__x) - { - * p |= mask; - } - return *this; - } - BitReference& operator &= (bool __x) - { - if (!__x) - { - * p &= ~mask; - } - return *this; - } - void flip() {* p ^= mask; } - }; - - CBitArray() { m_base = nullptr; m_bits = nullptr; m_size = 0; m_numBits = 0; }; - CBitArray(int numBits) { resize(numBits); }; - ~CBitArray() - { - if (m_base) - { - free(m_base); - } - }; - - void resize(int c) - { - m_numBits = c; - int newSize = ((c + 63) & (~63)) >> 5; - if (newSize > m_size) - { - Alloc(newSize); - } - } - int size() const { return m_numBits; }; - bool empty() const { return m_numBits == 0; }; - - ////////////////////////////////////////////////////////////////////////// - void set() - { - memset(m_bits, 0xFFFFFFFF, m_size * sizeof(uint32)); // Set all bits. - } - ////////////////////////////////////////////////////////////////////////// - void set(int numBits) - { - int num = (numBits >> 3) + 1; - if (num > (m_size * sizeof(uint32))) - { - num = m_size * sizeof(uint32); - } - memset(m_bits, 0xFFFFFFFF, num); // Reset num bits. - } - - ////////////////////////////////////////////////////////////////////////// - void clear() - { - memset(m_bits, 0, m_size * sizeof(uint32)); // Reset all bits. - } - - ////////////////////////////////////////////////////////////////////////// - void clear(int numBits) - { - int num = (numBits >> 3) + 1; - if (num > (m_size * sizeof(uint32))) - { - num = m_size * sizeof(uint32); - } - memset(m_bits, 0, num); // Reset num bits. - } - - ////////////////////////////////////////////////////////////////////////// - // Check if all bits are 0. - bool is_zero() const - { - for (int i = 0; i < m_size; i++) - { - if (m_bits[i] != 0) - { - return false; - } - } - return true; - } - - // Count number of set bits. - int count_bits() const - { - int c = 0; - for (int i = 0; i < m_size; i++) - { - uint32 v = m_bits[i]; - for (int j = 0; j < 32; j++) - { - if (v & (1 << (j & 0x1F))) - { - c++; // if bit set increase bit count. - } - } - } - return c; - } - - BitReference operator[](int pos) { return BitReference(&m_bits[index(pos)], shift(pos)); } - const BitReference operator[](int pos) const { return BitReference(&m_bits[index(pos)], shift(pos)); } - - ////////////////////////////////////////////////////////////////////////// - void swap(CBitArray& bitarr) - { - std::swap(m_base, bitarr.m_base); - std::swap(m_bits, bitarr.m_bits); - std::swap(m_size, bitarr.m_size); - } - - CBitArray& operator =(const CBitArray& b) - { - if (m_size != b.m_size) - { - Alloc(b.m_size); - } - memcpy(m_bits, b.m_bits, m_size * sizeof(uint32)); - return *this; - } - - bool checkByte(int pos) const { return reinterpret_cast(m_bits)[pos] != 0; }; - - ////////////////////////////////////////////////////////////////////////// - // Compresses this bit array into the specified one. - // Uses run length encoding compression. - void compress(CBitArray& b) const - { - int i, countz, compsize, bsize; - char* out; - char* in; - - bsize = m_size * 4; - compsize = 0; - in = (char*)m_bits; - for (i = 0; i < bsize; i++) - { - compsize++; - if (in[i] == 0) - { - countz = 1; - while (++i < bsize) - { - if (in[i] == 0 && countz != 255) - { - countz++; - } - else - { - break; - } - } - i--; - compsize++; - } - } - b.resize((compsize + 1) << 3); - out = (char*)b.m_bits; - in = (char*)m_bits; - *out++ = static_cast(bsize); - for (i = 0; i < bsize; i++) - { - *out++ = in[i]; - if (in[i] == 0) - { - countz = 1; - while (++i < bsize) - { - if (in[i] == 0 && countz != 255) - { - countz++; - } - else - { - break; - } - } - i--; - *out++ = static_cast(countz); - } - } - } - - ////////////////////////////////////////////////////////////////////////// - // Decompress specified bit array in to this one. - // Uses run length encoding compression. - void decompress(CBitArray& b) - { - int raw, decompressed, c; - char* out, * in; - - in = (char*)m_bits; - out = (char*)b.m_bits; - decompressed = 0; - raw = *in++; - while (decompressed < raw) - { - if (*in != 0) - { - *out++ = *in++; - decompressed++; - } - else - { - in++; - c = *in++; - decompressed += c; - while (c) - { - *out++ = 0; - c--; - } - ; - } - } - m_numBits = decompressed; - } - - void CopyFromMem(const char* src, int size) - { - Alloc(size); - memcpy(m_bits, src, size); - } - int CopyToMem(char* trg) - { - memcpy(trg, m_bits, m_size); - return m_size; - } - -private: - void* m_base; - uint32* m_bits; - int m_size; - int m_numBits; - - void Alloc(int s) - { - if (m_base) - { - free(m_base); - } - m_size = s; - m_base = (char*)malloc(m_size * sizeof(uint32) + 32); - m_bits = (uint32*)(((UINT_PTR)m_base + 31) & (~31)); // align by 32. - memset(m_bits, 0, m_size * sizeof(uint32)); // Reset all bits. - } - uint32 shift(int pos) const - { - return (1 << (pos & 0x1F)); - } - uint32 index(int pos) const - { - return pos >> 5; - } - - friend int concatBitarray(CBitArray& b1, CBitArray& b2, CBitArray& test, CBitArray& res); -}; - -inline int concatBitarray(CBitArray& b1, CBitArray& b2, CBitArray& test, CBitArray& res) -{ - unsigned int b, any; - any = 0; - for (int i = 0; i < b1.size(); i++) - { - b = b1.m_bits[i] & b2.m_bits[i]; - any |= (b & (~test.m_bits[i])); // test if any different from test(i) bit set. - res.m_bits[i] = b; - } - return any; -} - -#endif // CRYINCLUDE_EDITOR_UTIL_BITARRAY_H diff --git a/Code/Editor/editor_lib_files.cmake b/Code/Editor/editor_lib_files.cmake index aa52b18b45..3bdd85beee 100644 --- a/Code/Editor/editor_lib_files.cmake +++ b/Code/Editor/editor_lib_files.cmake @@ -660,7 +660,6 @@ set(FILES Util/XmlArchive.h Util/XmlTemplate.cpp Util/XmlTemplate.h - Util/bitarray.h Util/fastlib.h Util/smartptr.h WaitProgress.cpp From 63aaa0cba452770aa1962dec967dc08170c00149 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 18 Nov 2021 14:37:25 -0800 Subject: [PATCH 079/284] Removes DynamicArray2D from Code/Editor Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Editor/Util/DynamicArray2D.cpp | 150 ---------------------------- Code/Editor/Util/DynamicArray2D.h | 37 ------- Code/Editor/editor_lib_files.cmake | 2 - 3 files changed, 189 deletions(-) delete mode 100644 Code/Editor/Util/DynamicArray2D.cpp delete mode 100644 Code/Editor/Util/DynamicArray2D.h diff --git a/Code/Editor/Util/DynamicArray2D.cpp b/Code/Editor/Util/DynamicArray2D.cpp deleted file mode 100644 index 3f09c557de..0000000000 --- a/Code/Editor/Util/DynamicArray2D.cpp +++ /dev/null @@ -1,150 +0,0 @@ -/* - * 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 "EditorDefs.h" - -#include "DynamicArray2D.h" - -// Editor -#include "Util/fastlib.h" - -////////////////////////////////////////////////////////////////////// -// Construction / destruction -////////////////////////////////////////////////////////////////////// - -CDynamicArray2D::CDynamicArray2D(unsigned int iDimension1, unsigned int iDimension2) -{ - //////////////////////////////////////////////////////////////////////// - // Declare a 2D array on the free store - //////////////////////////////////////////////////////////////////////// - - unsigned int i; - - // Save the position of the array dimensions - m_Dimension1 = iDimension1; - m_Dimension2 = iDimension2; - - // First dimension - m_Array = new float* [m_Dimension1]; - assert(m_Array); - - // Second dimension - for (i = 0; i < m_Dimension1; ++i) - { - m_Array[i] = new float[m_Dimension2]; - - // Init all fields with 0 - memset(&m_Array[i][0], 0, m_Dimension2 * sizeof(float)); - } -} - -CDynamicArray2D::~CDynamicArray2D() -{ - //////////////////////////////////////////////////////////////////////// - // Remove the 2D array and all its sub arrays from the free store - //////////////////////////////////////////////////////////////////////// - - unsigned int i; - - for (i = 0; i < m_Dimension1; ++i) - { - delete [] m_Array[i]; - } - - delete [] m_Array; - m_Array = nullptr; -} - - -void CDynamicArray2D::ScaleImage(CDynamicArray2D* pDestination) -{ - //////////////////////////////////////////////////////////////////////// - // Scale an image stored (in an array class) to a new size - //////////////////////////////////////////////////////////////////////// - - unsigned int i, j, iOldWidth; - int iXSrcFl, iXSrcCe, iYSrcFl, iYSrcCe; - float fXSrc, fYSrc; - float fHeight[4]; - float fHeightWeight[4]; - float fHeightBottom; - float fHeightTop; - - assert(pDestination); - assert(pDestination->m_Dimension1 > 1); - - // Width has to be zero based, not a count - iOldWidth = m_Dimension1 - 1; - - // Loop trough each field of the new image and interpolate the value - // from the source heightmap - for (i = 0; i < pDestination->m_Dimension1; i++) - { - // Calculate the average source array position - fXSrc = i / (float) pDestination->m_Dimension1 * iOldWidth; - assert(fXSrc >= 0.0f && fXSrc <= iOldWidth); - - // Precalculate floor and ceiling values. Use fast asm integer floor and - // fast asm float / integer conversion - iXSrcFl = ifloor(fXSrc); - iXSrcCe = FloatToIntRet((float) ceil(fXSrc)); - - // Distribution between left and right height values - fHeightWeight[0] = (float) iXSrcCe - fXSrc; - fHeightWeight[1] = fXSrc - (float) iXSrcFl; - - // Avoid error when floor() and ceil() return the same value - if (fHeightWeight[0] == 0.0f && fHeightWeight[1] == 0.0f) - { - fHeightWeight[0] = 0.5f; - fHeightWeight[1] = 0.5f; - } - - for (j = 0; j < pDestination->m_Dimension1; j++) - { - // Calculate the average source array position - fYSrc = j / (float) pDestination->m_Dimension1 * iOldWidth; - assert(fYSrc >= 0.0f && fYSrc <= iOldWidth); - - // Precalculate floor and ceiling values. Use fast asm integer floor and - // fast asm float / integer conversion - iYSrcFl = ifloor(fYSrc); - iYSrcCe = FloatToIntRet((float) ceil(fYSrc)); - - // Get the four nearest height values - fHeight[0] = m_Array[iXSrcFl][iYSrcFl]; - fHeight[1] = m_Array[iXSrcCe][iYSrcFl]; - fHeight[2] = m_Array[iXSrcFl][iYSrcCe]; - fHeight[3] = m_Array[iXSrcCe][iYSrcCe]; - - // Calculate how much weight each height value has - - // Distribution between top and bottom height values - fHeightWeight[2] = (float) iYSrcCe - fYSrc; - fHeightWeight[3] = fYSrc - (float) iYSrcFl; - - // Avoid error when floor() and ceil() return the same value - if (fHeightWeight[2] == 0.0f && fHeightWeight[3] == 0.0f) - { - fHeightWeight[2] = 0.5f; - fHeightWeight[3] = 0.5f; - } - - // Interpolate between the four nearest height values - - // Get the height for the given X position trough interpolation between - // the left and the right height - fHeightBottom = (fHeight[0] * fHeightWeight[0] + fHeight[1] * fHeightWeight[1]); - fHeightTop = (fHeight[2] * fHeightWeight[0] + fHeight[3] * fHeightWeight[1]); - - // Set the new value in the destination heightmap - pDestination->m_Array[i][j] = fHeightBottom * fHeightWeight[2] + fHeightTop * fHeightWeight[3]; - } - } -} diff --git a/Code/Editor/Util/DynamicArray2D.h b/Code/Editor/Util/DynamicArray2D.h deleted file mode 100644 index 20d26d2d87..0000000000 --- a/Code/Editor/Util/DynamicArray2D.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * 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 - * - */ - - -// Description : Interface of the class CDynamicArray. - - -#ifndef CRYINCLUDE_EDITOR_UTIL_DYNAMICARRAY2D_H -#define CRYINCLUDE_EDITOR_UTIL_DYNAMICARRAY2D_H -#pragma once - - -class CDynamicArray2D -{ -public: - // constructor - CDynamicArray2D(unsigned int iDimension1, unsigned int iDimension2); - // destructor - virtual ~CDynamicArray2D(); - // - void ScaleImage(CDynamicArray2D* pDestination); - - - float** m_Array; // - -private: - - unsigned int m_Dimension1; // - unsigned int m_Dimension2; // -}; - -#endif // CRYINCLUDE_EDITOR_UTIL_DYNAMICARRAY2D_H diff --git a/Code/Editor/editor_lib_files.cmake b/Code/Editor/editor_lib_files.cmake index 3bdd85beee..82cfe545b6 100644 --- a/Code/Editor/editor_lib_files.cmake +++ b/Code/Editor/editor_lib_files.cmake @@ -628,8 +628,6 @@ set(FILES Util/AutoDirectoryRestoreFileDialog.h Util/AutoDirectoryRestoreFileDialog.cpp Util/CryMemFile.h - Util/DynamicArray2D.cpp - Util/DynamicArray2D.h Util/EditorAutoLevelLoadTest.cpp Util/EditorAutoLevelLoadTest.h Util/EditorUtils.cpp From 821c352e6a83234b9feb8c280fc666bcb836967b Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 18 Nov 2021 17:17:39 -0800 Subject: [PATCH 080/284] Removes GdiUtil and cleanups GuidUtil from Code/Editor Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Editor/Plugin.h | 39 ------- Code/Editor/Util/GdiUtil.cpp | 179 ----------------------------- Code/Editor/Util/GdiUtil.h | 54 --------- Code/Editor/Util/GuidUtil.cpp | 35 +++++- Code/Editor/Util/GuidUtil.h | 41 ------- Code/Editor/editor_lib_files.cmake | 2 - 6 files changed, 29 insertions(+), 321 deletions(-) delete mode 100644 Code/Editor/Util/GdiUtil.cpp delete mode 100644 Code/Editor/Util/GdiUtil.h diff --git a/Code/Editor/Plugin.h b/Code/Editor/Plugin.h index 5fa45ac140..dd2637f0e9 100644 --- a/Code/Editor/Plugin.h +++ b/Code/Editor/Plugin.h @@ -15,45 +15,6 @@ #include "Util/GuidUtil.h" #include -//! Derive from this class to decrease the amount of work for creating a new class description -//! Provides standard reference counter implementation for IUnknown -class CRefCountClassDesc - : public IClassDesc -{ -public: - virtual ~CRefCountClassDesc() { } - HRESULT STDMETHODCALLTYPE QueryInterface([[maybe_unused]] const IID& riid, [[maybe_unused]] void** ppvObj) - { - return E_NOINTERFACE; - } - - ULONG STDMETHODCALLTYPE AddRef() - { - ++m_nRefCount; - return m_nRefCount; - } - - ULONG STDMETHODCALLTYPE Release() - { - int refs = m_nRefCount; - - if (--m_nRefCount <= 0) - { - delete this; - } - - return refs; - } - -private: - int m_nRefCount; -}; - - -// Use this for debugging unregistration problems. -//#define DEBUG_CLASS_NAME_REGISTRATION - - //! Class factory is a common repository of all registered plugin classes, //! Classes here can found by their class ID or all classes of given system class retrieved class CRYEDIT_API CClassFactory diff --git a/Code/Editor/Util/GdiUtil.cpp b/Code/Editor/Util/GdiUtil.cpp deleted file mode 100644 index 72e5e28605..0000000000 --- a/Code/Editor/Util/GdiUtil.cpp +++ /dev/null @@ -1,179 +0,0 @@ -/* - * 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 "EditorDefs.h" - -#include "GdiUtil.h" - -// Qt -#include -#include - -QColor ScaleColor(const QColor& c, float aScale) -{ - QColor aColor = c; - if (!aColor.isValid()) - { - // help out scaling, by starting at very low black - aColor = QColor(1, 1, 1); - } - - const float r = static_cast(aColor.red()) * aScale; - const float g = static_cast(aColor.green()) * aScale; - const float b = static_cast(aColor.blue()) * aScale; - - return QColor(AZStd::clamp(static_cast(r), 0, 255), AZStd::clamp(static_cast(g), 0, 255), AZStd::clamp(static_cast(b), 0, 255)); -} - -CAlphaBitmap::CAlphaBitmap() -{ - m_width = m_height = 0; -} - -CAlphaBitmap::~CAlphaBitmap() -{ - Free(); -} - -bool CAlphaBitmap::Create(void* pData, UINT aWidth, UINT aHeight, bool bVerticalFlip, bool bPremultiplyAlpha) -{ - if (!aWidth || !aHeight) - { - return false; - } - - m_bmp = QImage(aWidth, aHeight, QImage::Format_RGBA8888); - if (m_bmp.isNull()) - { - return false; - } - - std::vector vBuffer; - - if (pData) - { - // copy over the raw 32bpp data - bVerticalFlip = !bVerticalFlip; // in Qt, the flip is not required. Still, keep the API behaving the same - if (bVerticalFlip) - { - UINT nBufLen = aWidth * aHeight; - vBuffer.resize(nBufLen); - - if (IsBadReadPtr(pData, nBufLen * 4)) - { - //TODO: remove after testing alot the browser, it doesnt happen anymore - QMessageBox::critical(QApplication::activeWindow(), QString(), QObject::tr("Bad image data ptr!")); - Free(); - return false; - } - - assert(!vBuffer.empty()); - - if (vBuffer.empty()) - { - Free(); - return false; - } - - UINT scanlineSize = aWidth * 4; - - for (UINT i = 0, iCount = aHeight; i < iCount; ++i) - { - // top scanline position - UINT* pTopScanPos = (UINT*)&vBuffer[0] + i * aWidth; - // bottom scanline position - UINT* pBottomScanPos = (UINT*)pData + (aHeight - i - 1) * aWidth; - - // save a scanline from top - memcpy(pTopScanPos, pBottomScanPos, scanlineSize); - } - - pData = &vBuffer[0]; - } - - // premultiply alpha, AlphaBlend GDI expects it - if (bPremultiplyAlpha) - { - for (UINT y = 0; y < aHeight; ++y) - { - BYTE* pPixel = (BYTE*) pData + aWidth * 4 * y; - - for (UINT x = 0; x < aWidth; ++x) - { - pPixel[0] = ((int)pPixel[0] * pPixel[3] + 127) >> 8; - pPixel[1] = ((int)pPixel[1] * pPixel[3] + 127) >> 8; - pPixel[2] = ((int)pPixel[2] * pPixel[3] + 127) >> 8; - pPixel += 4; - } - } - } - - memcpy(m_bmp.bits(), pData, aWidth * aHeight * 4); - - if (m_bmp.isNull()) - { - return false; - } - } - else - { - m_bmp.fill(Qt::transparent); - } - - // we dont need this screen DC anymore - m_width = aWidth; - m_height = aHeight; - - return true; -} - -QImage& CAlphaBitmap::GetBitmap() -{ - return m_bmp; -} - -void CAlphaBitmap::Free() -{ - -} - -UINT CAlphaBitmap::GetWidth() -{ - return m_width; -} - -UINT CAlphaBitmap::GetHeight() -{ - return m_height; -} - -void CheckerboardFillRect(QPainter* pGraphics, const QRect& rRect, int checkDiameter, const QColor& aColor1, const QColor& aColor2) -{ - pGraphics->save(); - pGraphics->setClipRect(rRect); - // Create a checkerboard background for easier readability - pGraphics->fillRect(rRect, aColor1); - QBrush lightBrush(aColor2); - - // QRect bottom/right methods are short one unit for legacy reasons. Compute bottomr/right of the rectange ourselves to get the full size. - const int rectRight = rRect.x() + rRect.width(); - const int rectBottom = rRect.y() + rRect.height(); - - for (int i = rRect.left(); i < rectRight; i += checkDiameter) - { - for (int j = rRect.top(); j < rectBottom; j += checkDiameter) - { - if ((i / checkDiameter) % 2 ^ (j / checkDiameter) % 2) - { - pGraphics->fillRect(QRect(i, j, checkDiameter, checkDiameter), lightBrush); - } - } - } - pGraphics->restore(); -} diff --git a/Code/Editor/Util/GdiUtil.h b/Code/Editor/Util/GdiUtil.h deleted file mode 100644 index f38cbc0c0e..0000000000 --- a/Code/Editor/Util/GdiUtil.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * 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 - * - */ - - -// Description : Utilitarian classes for double buffer GDI rendering and 32bit bitmaps - - -#ifndef CRYINCLUDE_EDITOR_UTIL_GDIUTIL_H -#define CRYINCLUDE_EDITOR_UTIL_GDIUTIL_H -#pragma once - -QColor ScaleColor(const QColor& coor, float aScale); - -//! This class loads alpha-channel bitmaps and holds a DC for use with AlphaBlend function -class CRYEDIT_API CAlphaBitmap -{ -public: - - CAlphaBitmap(); - ~CAlphaBitmap(); - - //! creates the bitmap from raw 32bpp data - //! \param pData the 32bpp raw image data, RGBA, can be nullptr and it would create just an empty bitmap - //! \param aWidth the bitmap width - //! \param aHeight the bitmap height - bool Create(void* pData, UINT aWidth, UINT aHeight, bool bVerticalFlip = false, bool bPremultiplyAlpha = false); - //! \return the actual bitmap - QImage& GetBitmap(); - //! free the bitmap and DC - void Free(); - //! \return bitmap width - UINT GetWidth(); - //! \return bitmap height - UINT GetHeight(); - -protected: - - QImage m_bmp; - UINT m_width, m_height; -}; - -//! Fill a rectangle with a checkerboard pattern. -//! \param pGraphics The Graphics object used for drawing -//! \param rRect The rectangle to be filled -//! \param checkDiameter the diameter of the check squares -//! \param aColor1 the color that starts in the top left corner check square -//! \param aColor2 the second color used for check squares -void CheckerboardFillRect(QPainter* pGraphics, const QRect& rRect, int checkDiameter, const QColor& aColor1, const QColor& aColor2); -#endif // CRYINCLUDE_EDITOR_UTIL_GDIUTIL_H diff --git a/Code/Editor/Util/GuidUtil.cpp b/Code/Editor/Util/GuidUtil.cpp index 5f81eac88e..e8ea6fd3f8 100644 --- a/Code/Editor/Util/GuidUtil.cpp +++ b/Code/Editor/Util/GuidUtil.cpp @@ -6,12 +6,35 @@ * */ - -#include "EditorDefs.h" - #include "GuidUtil.h" +const char* GuidUtil::ToString(REFGUID guid) +{ + static char guidString[64]; + sprintf_s(guidString, "{%.8" GUID_FORMAT_DATA1 "-%.4X-%.4X-%.2X%.2X-%.2X%.2X%.2X%.2X%.2X%.2X}", guid.Data1, guid.Data2, guid.Data3, guid.Data4[0], guid.Data4[1], + guid.Data4[2], guid.Data4[3], guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7]); + return guidString; +} + ////////////////////////////////////////////////////////////////////////// -const GUID GuidUtil::NullGuid = { - 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0 } -}; +GUID GuidUtil::FromString(const char* guidString) +{ + GUID guid; + unsigned int d[8]; + memset(&d, 0, sizeof(guid)); + guid.Data1 = 0; + guid.Data2 = 0; + guid.Data3 = 0; + azsscanf(guidString, "{%8" GUID_FORMAT_DATA1 "-%4hX-%4hX-%2X%2X-%2X%2X%2X%2X%2X%2X}", + &guid.Data1, &guid.Data2, &guid.Data3, &d[0], &d[1], &d[2], &d[3], &d[4], &d[5], &d[6], &d[7]); + guid.Data4[0] = static_cast(d[0]); + guid.Data4[1] = static_cast(d[1]); + guid.Data4[2] = static_cast(d[2]); + guid.Data4[3] = static_cast(d[3]); + guid.Data4[4] = static_cast(d[4]); + guid.Data4[5] = static_cast(d[5]); + guid.Data4[6] = static_cast(d[6]); + guid.Data4[7] = static_cast(d[7]); + + return guid; +} diff --git a/Code/Editor/Util/GuidUtil.h b/Code/Editor/Util/GuidUtil.h index de2bad8759..f42021ae2a 100644 --- a/Code/Editor/Util/GuidUtil.h +++ b/Code/Editor/Util/GuidUtil.h @@ -23,9 +23,6 @@ struct GuidUtil static const char* ToString(REFGUID guid); //! Convert from guid string in valid format to GUID class. static GUID FromString(const char* guidString); - static bool IsEmpty(REFGUID guid); - - static const GUID NullGuid; }; /** Used to compare GUID keys. @@ -38,42 +35,4 @@ struct guid_less_predicate } }; -////////////////////////////////////////////////////////////////////////// -inline bool GuidUtil::IsEmpty(REFGUID guid) -{ - return guid == NullGuid; -} - -////////////////////////////////////////////////////////////////////////// -inline const char* GuidUtil::ToString(REFGUID guid) -{ - static char guidString[64]; - sprintf_s(guidString, "{%.8" GUID_FORMAT_DATA1 "-%.4X-%.4X-%.2X%.2X-%.2X%.2X%.2X%.2X%.2X%.2X}", guid.Data1, guid.Data2, guid.Data3, guid.Data4[0], guid.Data4[1], - guid.Data4[2], guid.Data4[3], guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7]); - return guidString; -} - -////////////////////////////////////////////////////////////////////////// -inline GUID GuidUtil::FromString(const char* guidString) -{ - GUID guid; - unsigned int d[8]; - memset(&d, 0, sizeof(guid)); - guid.Data1 = 0; - guid.Data2 = 0; - guid.Data3 = 0; - azsscanf(guidString, "{%8" GUID_FORMAT_DATA1 "-%4hX-%4hX-%2X%2X-%2X%2X%2X%2X%2X%2X}", - &guid.Data1, &guid.Data2, &guid.Data3, &d[0], &d[1], &d[2], &d[3], &d[4], &d[5], &d[6], &d[7]); - guid.Data4[0] = static_cast(d[0]); - guid.Data4[1] = static_cast(d[1]); - guid.Data4[2] = static_cast(d[2]); - guid.Data4[3] = static_cast(d[3]); - guid.Data4[4] = static_cast(d[4]); - guid.Data4[5] = static_cast(d[5]); - guid.Data4[6] = static_cast(d[6]); - guid.Data4[7] = static_cast(d[7]); - - return guid; -} - #endif // CRYINCLUDE_EDITOR_UTIL_GUIDUTIL_H diff --git a/Code/Editor/editor_lib_files.cmake b/Code/Editor/editor_lib_files.cmake index 82cfe545b6..8064d56184 100644 --- a/Code/Editor/editor_lib_files.cmake +++ b/Code/Editor/editor_lib_files.cmake @@ -636,8 +636,6 @@ set(FILES Util/FileEnum.h Util/FileUtil.cpp Util/FileUtil.h - Util/GdiUtil.cpp - Util/GdiUtil.h Util/GeometryUtil.cpp Util/GuidUtil.cpp Util/GuidUtil.h From 796780af11c1c39aade6bb0cefe54f18148d4e5e Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 18 Nov 2021 17:23:44 -0800 Subject: [PATCH 081/284] Removes ImageASC from Code/Editor Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Editor/Util/ImageASC.cpp | 190 ----------------------------- Code/Editor/Util/ImageASC.h | 23 ---- Code/Editor/editor_lib_files.cmake | 2 - 3 files changed, 215 deletions(-) delete mode 100644 Code/Editor/Util/ImageASC.cpp delete mode 100644 Code/Editor/Util/ImageASC.h diff --git a/Code/Editor/Util/ImageASC.cpp b/Code/Editor/Util/ImageASC.cpp deleted file mode 100644 index 1c4a8acf73..0000000000 --- a/Code/Editor/Util/ImageASC.cpp +++ /dev/null @@ -1,190 +0,0 @@ -/* - * 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 "EditorDefs.h" - -#include "ImageASC.h" - -// Editor -#include "Util/Image.h" - -//--------------------------------------------------------------------------- - -bool CImageASC::Save(const QString& fileName, const CFloatImage& image) -{ - // There are two types of ARCGrid file formats - binary (ADF) and ASCII (ASC). - // See here: https://en.wikipedia.org/wiki/Esri_grid - - uint32 width = image.GetWidth(); - uint32 height = image.GetHeight(); - float* pixels = image.GetData(); - - AZStd::string fileHeader = AZStd::string::format( - // Number of columns and rows in the data - "ncols %d\n" - "nrows %d\n" - - // The coordinates of the bottom-left corner. - // These numbers represent coordinates on a globe, so this choice of values is arbitrary. - "xllcorner 0.0\n" - "yllcorner 0.0\n" - - // The size of each grid square. - // The problem is that cellsize represents the size of a square on a grid being projected onto a globe. - // This number can be used to convert size to degrees, based on where on the globe it appears. - // We don't have a real-world location associated with our data, so this size choice is arbitrary. - "cellsize 0.0003\n" - - // The value used for missing data. Since we shouldn't have any missing data, we'll choose a value that can't appear below. - "nodata_value -1\n" - , width, height); - - FILE* file = nullptr; - azfopen(&file, fileName.toUtf8().data(), "wt"); - if (!file) - { - return false; - } - - // First print the file header - fprintf(file, "%s", fileHeader.c_str()); - - // Then print all the pixels. - for (uint32 y = 0; y < height; y++) - { - for (uint32 x = 0; x < width; x++) - { - fprintf(file, "%.7f ", pixels[x + y * width]); - } - fprintf(file, "\n"); - } - - fclose(file); - return true; -} - -//--------------------------------------------------------------------------- - -bool CImageASC::Load(const QString& fileName, CFloatImage& image) -{ - FILE* file = nullptr; - azfopen(&file, fileName.toUtf8().data(), "rt"); - if (!file) - { - return false; - } - - const char seps[] = " \r\n\t"; - char* token; - - int32 width = 0; - int32 height = 0; - float nodataValue = 0.0f; - - bool validData = true; - - // Read the file into memory - - fseek(file, 0, SEEK_END); - int fileSize = ftell(file); - fseek(file, 0, SEEK_SET); - - char* str = new char[fileSize]; - fread(str, fileSize, 1, file); - - // Break all of the values in the file apart into tokens. - - [[maybe_unused]] char* nextToken = nullptr; - token = azstrtok(str, 0, seps, &nextToken); - - // ncols = grid width - validData = validData && (azstricmp(token, "ncols") == 0); - token = azstrtok(nullptr, 0, seps, &nextToken); - width = atoi(token); - - // nrows = grid height - token = azstrtok(nullptr, 0, seps, &nextToken); - validData = validData && (azstricmp(token, "nrows") == 0); - token = azstrtok(nullptr, 0, seps, &nextToken); - height = atoi(token); - - // xllcorner = leftmost coordinate. (Skip, we don't care about it) - token = azstrtok(nullptr, 0, seps, &nextToken); - validData = validData && (azstricmp(token, "xllcorner") == 0); - token = azstrtok(nullptr, 0, seps, &nextToken); - - // yllcorner = bottommost coordinate. (Skip, we don't care about it) - token = azstrtok(nullptr, 0, seps, &nextToken); - validData = validData && (azstricmp(token, "yllcorner") == 0); - token = azstrtok(nullptr, 0, seps, &nextToken); - - // cellsize = size of each grid cell. (Skip, we don't care about it) - token = azstrtok(nullptr, 0, seps, &nextToken); - validData = validData && (azstricmp(token, "cellsize") == 0); - token = azstrtok(nullptr, 0, seps, &nextToken); - - // nodata_value = the value used for missing data. We'll replace these with 0 height. - token = azstrtok(nullptr, 0, seps, &nextToken); - validData = validData && (azstricmp(token, "nodata_value") == 0); - token = azstrtok(nullptr, 0, seps, &nextToken); - nodataValue = static_cast(atof(token)); - - if (!validData) - { - // Bad file. not supported asc. - delete[]str; - fclose(file); - return false; - } - - image.Allocate(width, height); - - // Read in the pixel data - - float* p = image.GetData(); - int size = width * height; - int i = 0; - float pixelValue; - float maxPixel = 0.0f; - while (token != nullptr && i < size) - { - token = azstrtok(nullptr, 0, seps, &nextToken); - if (token != nullptr) - { - // Negative heights aren't supported, clamp to 0. - pixelValue = max(0.0f, static_cast(atof(token))); - - // If this is a location we specifically don't have data for, set it to 0. - if (pixelValue == nodataValue) - { - pixelValue = 0.0f; - } - - *p++ = pixelValue; - maxPixel = max(maxPixel, pixelValue); - i++; - } - } - - if (maxPixel > 0.0f) - { - // Scale our range down to 0 - 1 - float* pp = image.GetData(); - for (i = 0; i < size; i++) - { - pp[i] = clamp_tpl(pp[i] / maxPixel, 0.0f, 1.0f); - } - } - - delete[]str; - - fclose(file); - - return true; -} - diff --git a/Code/Editor/Util/ImageASC.h b/Code/Editor/Util/ImageASC.h deleted file mode 100644 index 4570145dcf..0000000000 --- a/Code/Editor/Util/ImageASC.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * 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 - * - */ - -#ifndef CRYINCLUDE_EDITOR_UTIL_IMAGEASC_H -#define CRYINCLUDE_EDITOR_UTIL_IMAGEASC_H -#pragma once - -#include "Util/Image.h" - -class SANDBOX_API CImageASC -{ -public: - bool Load(const QString& fileName, CFloatImage& outImage); - bool Save(const QString& fileName, const CFloatImage& image); -}; - - -#endif // CRYINCLUDE_EDITOR_UTIL_IMAGEASC_H diff --git a/Code/Editor/editor_lib_files.cmake b/Code/Editor/editor_lib_files.cmake index 8064d56184..66d1a544db 100644 --- a/Code/Editor/editor_lib_files.cmake +++ b/Code/Editor/editor_lib_files.cmake @@ -686,8 +686,6 @@ set(FILES Util/FileChangeMonitor.h Util/ImageUtil.cpp Util/ImageUtil.h - Util/ImageASC.cpp - Util/ImageASC.h Util/ImageBT.cpp Util/ImageBT.h Util/ImageGif.cpp From 53f7594ab62a0b3d4366f6f3f44b8b1325132d28 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 18 Nov 2021 17:31:31 -0800 Subject: [PATCH 082/284] Removes ImageBT from Code/Editor Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Editor/Util/ImageBT.cpp | 207 ----------------------------- Code/Editor/Util/ImageBT.h | 23 ---- Code/Editor/editor_lib_files.cmake | 2 - 3 files changed, 232 deletions(-) delete mode 100644 Code/Editor/Util/ImageBT.cpp delete mode 100644 Code/Editor/Util/ImageBT.h diff --git a/Code/Editor/Util/ImageBT.cpp b/Code/Editor/Util/ImageBT.cpp deleted file mode 100644 index eb54213cf1..0000000000 --- a/Code/Editor/Util/ImageBT.cpp +++ /dev/null @@ -1,207 +0,0 @@ -/* - * 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 "EditorDefs.h" - -#include "ImageBT.h" - -//--------------------------------------------------------------------------- -// Load and save the VTP Binary Terrain (BT) format, documented here: -// http://vterrain.org/Implementation/Formats/BT.html - -// This structure represents a binary layout in the file. To direct load & save it, we need to remove all structure memory padding -#pragma pack(push,1) -struct BtHeader -{ - char headerTag[7]; // Should be "binterr" - char headerTagVersion[3]; // Should be "1.3" - int32 columns; // # of columns in the heightfield - int32 rows; // # of rows in the heightfield - int16 bytesPerPoint; // bytes per height value, either 2 for signed ints or 4 for floats - int16 isFloatingPointData; // 1 if height values are floats, 0 for 16-bit signed ints - int16 horizUnits; // 0 if degrees, 1 if meters, 2 if international feet, 3 if US survey feet - int16 utmZone; // UTM projection zone 1 to 60 or -1 to -60 (see https://en.wikipedia.org/wiki/Universal_Transverse_Mercator_coordinate_system ) - int16 datum; // Datum value (6001 to 6094), see http://www.epsg.org/ - double leftExtent; // left coordinate projection of the file - double rightExtent; // right coordinate projection of the file - double bottomExtent; // bottom coordinate projection of the file - double topExtent; // top coordinate projection of the file - int16 externalProjection; // 1 if projection is in an external .prj file, 0 if it's contained in the header - float scale; // vertical units in meters. 0.0 should be treated as 1.0 - char unused[190]; -}; -#pragma pack(pop) - -bool CImageBT::Save(const QString& fileName, const CFloatImage& image) -{ - int width = image.GetWidth(); - int height = image.GetHeight(); - - float *pixels = image.GetData(); - - // Create a header with reasonable default values. - BtHeader header = - { - {'b', 'i', 'n', 't', 'e', 'r', 'r'}, - {'1', '.', '3' }, - width, - height, - sizeof(float), // we'll use floats to make sure we can capture the full potential range of heightfield values - 1, // use floats - 1, // units are meters - 0, // no UTM projection zone - 6326, // WGS84 Datum value. Recommended by VTP as the default if you don't care about Datum values. - 0.0, // set the left extent to 0? - double(width), // set the right extent to the width? (assumes 1 m per pixel) - double(height), // set the bottom extent to the height? (assumes 1 m per pixel) - 0.0, // set the top extent to 0? - 0, // no external prj file - 1.0f - }; - - memset(header.unused, 0, sizeof(header.unused)); - - FILE* file = nullptr; - azfopen(&file, fileName.toUtf8().data(), "wb"); - if (!file) - { - return false; - } - - fwrite(&header, sizeof(header), 1, file); - for (int32 y = 0; y < height; y++) - { - for (int32 x = 0; x < width; x++) - { - float heightmapValue = pixels[(y * width) + x]; - fwrite(&heightmapValue, sizeof(float), 1, file); - } - } - - fclose(file); - return true; -} - -//--------------------------------------------------------------------------- - -bool CImageBT::Load(const QString& fileName, CFloatImage& image) -{ - FILE* file = nullptr; - azfopen(&file, fileName.toUtf8().data(), "rb"); - if (!file) - { - return false; - } - - // Get the file size - - fseek(file, 0, SEEK_END); - int fileSize = ftell(file); - fseek(file, 0, SEEK_SET); - - // Our file needs to be at least as big as the BT file header. - if (fileSize < sizeof(BtHeader)) - { - return false; - } - - // Get the BT header data - BtHeader header; - memset(&header, 0, sizeof(BtHeader)); // C4701 potentially uninitialized local variable 'header' used - bool validData = true; - validData = validData && (fread(&header, sizeof(BtHeader), 1, file) != 0); - - // Do some quick error-checking on the header to make sure it meets our expectations - - // Does the header have the right header tag? (binterr1.0 - binterr1.3) - validData = validData && (memcmp(header.headerTag, "binterr", sizeof(header.headerTag)) == 0); - validData = validData && (header.headerTagVersion[0] == '1') && (header.headerTagVersion[1] == '.') && (header.headerTagVersion[2] >= '0') && (header.headerTagVersion[2] <= '3'); - - // Will the grid fit into a reasonable image size? - validData = validData && (header.columns >= 0) && (header.columns < 65536); - validData = validData && (header.rows >= 0) && (header.rows < 65536); - - // Do we either have 32-bit floats or 16-bit ints? - validData = validData && (((header.isFloatingPointData == 1) && (header.bytesPerPoint == 4)) || ((header.isFloatingPointData == 0) && (header.bytesPerPoint == 2))); - - // Is the remaining data exactly the size needed to fill our image? - validData = validData && ((fileSize - sizeof(BtHeader)) == (header.columns * header.rows * header.bytesPerPoint)); - - if (!validData) - { - fclose(file); - return false; - } - - if (header.scale == 0.0f) - { - header.scale = 1.0f; - } - - // The BT format defines the data as stored in column-first order, from bottom to top. - // However, some BT files store the data in row-first order, from top to bottom. - // There isn't anything that clearly specifies which type of file it is. If you load it the wrong way, - // the data will look like a bunch of wavy stripes. - // The only difference I've found in test files is datum values above 8000, which appears to be an invalid value for datum - // (it should be 6001-6904 according to the BT definition) - const int invalidDatumValueDenotingColumnFirstData = 8000; - bool isColumnFirstData = (header.datum >= invalidDatumValueDenotingColumnFirstData) ? true : false; - float height = 0.0f; - int imageWidth, imageHeight; - - if (isColumnFirstData) - { - imageWidth = header.rows; - imageHeight = header.columns; - } - else - { - imageWidth = header.columns; - imageHeight = header.rows; - } - - - image.Allocate(imageWidth, imageHeight); - float* p = image.GetData(); - float maxPixel = 0.0f; - - // Read in the pixel data - for (int32 y = 0; y < imageHeight; y++) - { - for (int32 x = 0; x < imageWidth; x++) - { - if (header.isFloatingPointData) - { - fread(&height, sizeof(float), 1, file); - } - else - { - int16 intHeight = 0; - fread(&intHeight, sizeof(int16), 1, file); - height = static_cast(intHeight); - } - // Scale based on what our header defines, and clamp the values to positive range, negatives not supported - p[(y * imageWidth) + x] = max((height * header.scale), 0.0f); - maxPixel = max(maxPixel, p[(y * imageWidth) + x]); - } - } - - // Scale our range down to 0 - 1 - if (maxPixel > 0.0f) - { - p = image.GetData(); - for (int32 i = 0; i < (imageWidth * imageHeight); i++) - { - p[i] = clamp_tpl(p[i] / maxPixel, 0.0f, 1.0f); - } - } - - fclose(file); - return true; -} - diff --git a/Code/Editor/Util/ImageBT.h b/Code/Editor/Util/ImageBT.h deleted file mode 100644 index dc7061527a..0000000000 --- a/Code/Editor/Util/ImageBT.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * 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 - * - */ - -#ifndef CRYINCLUDE_EDITOR_UTIL_IMAGEBT_H -#define CRYINCLUDE_EDITOR_UTIL_IMAGEBT_H -#pragma once - -#include "Util/Image.h" - -class SANDBOX_API CImageBT -{ -public: - bool Load(const QString& fileName, CFloatImage& outImage); - bool Save(const QString& fileName, const CFloatImage& image); -}; - - -#endif // CRYINCLUDE_EDITOR_UTIL_IMAGEBT_H diff --git a/Code/Editor/editor_lib_files.cmake b/Code/Editor/editor_lib_files.cmake index 66d1a544db..171a9527d4 100644 --- a/Code/Editor/editor_lib_files.cmake +++ b/Code/Editor/editor_lib_files.cmake @@ -686,8 +686,6 @@ set(FILES Util/FileChangeMonitor.h Util/ImageUtil.cpp Util/ImageUtil.h - Util/ImageBT.cpp - Util/ImageBT.h Util/ImageGif.cpp Util/ImageGif.h Util/ImageTIF.cpp From 46cc160d8ce768026518828956f202232ebb4a95 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 18 Nov 2021 18:03:08 -0800 Subject: [PATCH 083/284] Removes smartptr and TRefCountBase from Code/Editor Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Editor/EditorDefs.h | 1 - Code/Editor/Util/TRefCountBase.h | 56 ------------------- Code/Editor/Util/smartptr.h | 29 ---------- Code/Editor/editor_lib_files.cmake | 2 - .../Animation/UiAnimViewSequenceManager.h | 2 - 5 files changed, 90 deletions(-) delete mode 100644 Code/Editor/Util/TRefCountBase.h delete mode 100644 Code/Editor/Util/smartptr.h diff --git a/Code/Editor/EditorDefs.h b/Code/Editor/EditorDefs.h index 3abc3eb53c..5dd653679b 100644 --- a/Code/Editor/EditorDefs.h +++ b/Code/Editor/EditorDefs.h @@ -124,7 +124,6 @@ // Utility classes. #include "Util/RefCountBase.h" -#include "Util/TRefCountBase.h" #include "Util/MemoryBlock.h" #include "Util/PathUtil.h" diff --git a/Code/Editor/Util/TRefCountBase.h b/Code/Editor/Util/TRefCountBase.h deleted file mode 100644 index aeedda9d16..0000000000 --- a/Code/Editor/Util/TRefCountBase.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * 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 - * - */ - - -// Description : Reference counted base object. - - -#ifndef CRYINCLUDE_EDITOR_UTIL_TREFCOUNTBASE_H -#define CRYINCLUDE_EDITOR_UTIL_TREFCOUNTBASE_H -#pragma once - -AZ_PUSH_DISABLE_DLL_EXPORT_BASECLASS_WARNING -////////////////////////////////////////////////////////////////////////// -//! Derive from this class to get reference counting for your class. -////////////////////////////////////////////////////////////////////////// -template -class CRYEDIT_API TRefCountBase - : public ParentClass -{ -AZ_POP_DISABLE_DLL_EXPORT_BASECLASS_WARNING -public: - TRefCountBase() { m_nRefCount = 0; }; - - //! Add new refrence to this object. - unsigned long AddRef() - { - m_nRefCount++; - return m_nRefCount; - }; - - //! Release refrence to this object. - //! when reference count reaches zero, object is deleted. - unsigned long Release() - { - int refs = --m_nRefCount; - if (m_nRefCount <= 0) - { - delete this; - } - return refs; - } - -protected: - virtual ~TRefCountBase() {}; - -private: - int m_nRefCount; -}; - - -#endif // CRYINCLUDE_EDITOR_UTIL_TREFCOUNTBASE_H diff --git a/Code/Editor/Util/smartptr.h b/Code/Editor/Util/smartptr.h deleted file mode 100644 index d9e656ef24..0000000000 --- a/Code/Editor/Util/smartptr.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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 - * - */ - - -#ifndef CRYINCLUDE_EDITOR_UTIL_SMARTPTR_H -#define CRYINCLUDE_EDITOR_UTIL_SMARTPTR_H -#pragma once - -#include - -#define TSmartPtr _smart_ptr - -/** Use this to define smart pointers of classes. - For example: - class CNode : public CRefCountBase {}; - SMARTPTRTypeYPEDEF( CNode ); - { - CNodePtr node; // Smart pointer. - } -*/ - -#define SMARTPTR_TYPEDEF(Class) typedef TSmartPtr Class##Ptr - -#endif // CRYINCLUDE_EDITOR_UTIL_SMARTPTR_H diff --git a/Code/Editor/editor_lib_files.cmake b/Code/Editor/editor_lib_files.cmake index 171a9527d4..28950c9fa9 100644 --- a/Code/Editor/editor_lib_files.cmake +++ b/Code/Editor/editor_lib_files.cmake @@ -648,7 +648,6 @@ set(FILES Util/PredefinedAspectRatios.h Util/StringHelpers.cpp Util/StringHelpers.h - Util/TRefCountBase.h Util/Triangulate.cpp Util/Triangulate.h Util/Util.h @@ -657,7 +656,6 @@ set(FILES Util/XmlTemplate.cpp Util/XmlTemplate.h Util/fastlib.h - Util/smartptr.h WaitProgress.cpp WaitProgress.h Util/FileUtil_impl.h diff --git a/Gems/LyShine/Code/Editor/Animation/UiAnimViewSequenceManager.h b/Gems/LyShine/Code/Editor/Animation/UiAnimViewSequenceManager.h index 1fe9d96f85..6844a8272b 100644 --- a/Gems/LyShine/Code/Editor/Animation/UiAnimViewSequenceManager.h +++ b/Gems/LyShine/Code/Editor/Animation/UiAnimViewSequenceManager.h @@ -9,8 +9,6 @@ #pragma once -#include "Util/smartptr.h" - #include "UiAnimViewSequence.h" #include #include "UiEditorAnimationBus.h" From 3d1b30dedaaf3587f8b6d8a12d33db7d448fa866 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 18 Nov 2021 18:09:56 -0800 Subject: [PATCH 084/284] Removes Triangulate from Code/Editor Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Editor/Util/Triangulate.cpp | 69 ------------------------------ Code/Editor/Util/Triangulate.h | 26 ----------- Code/Editor/editor_lib_files.cmake | 2 - 3 files changed, 97 deletions(-) delete mode 100644 Code/Editor/Util/Triangulate.cpp delete mode 100644 Code/Editor/Util/Triangulate.h diff --git a/Code/Editor/Util/Triangulate.cpp b/Code/Editor/Util/Triangulate.cpp deleted file mode 100644 index c8160a375a..0000000000 --- a/Code/Editor/Util/Triangulate.cpp +++ /dev/null @@ -1,69 +0,0 @@ -/* - * 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 "EditorDefs.h" - -#include "Triangulate.h" - -// this file is essentially a wrapper for a portion of the MIT-licenced -// ConvexDecomposition library by John W. Ratcliff mailto:jratcliffscarab@gmail.com. -// it contains no code from that library, it just provides it with the required types, then includes the -// portion we need. - -static const float TRIANGULATION_EPSILON = 0.0000000001f; - -#define MEMALLOC_MALLOC malloc -#define MEMALLOC_FREE free - -namespace TriInternal -{ - class TVec; - typedef double NxF64; - typedef float NxF32; - typedef unsigned char NxU8; - typedef unsigned int NxU32; - typedef int NxI32; - typedef unsigned int TU32; - - typedef std::vector< TVec > TVecVector; - typedef std::vector< NxU32 > TU32Vector; - #include "Contrib/NvFloatMath.inl" -} - -#undef MEMALLOC_MALLOC -#undef MEMALLOC_FREE - -namespace Triangulator -{ - // given the contour of a triangle, triangulate it, and return the result - // as a set of triangles - // return false if you fail to triangulate it. - bool Triangulate(const VectorOfVectors& contour, VectorOfVectors& result) - { - TriInternal::CTriangulator tri; - for (auto pt : contour) - { - tri.addPoint(pt.x, pt.y, pt.z); - } - TriInternal::NxU32 tricount = 0; - TriInternal::NxU32* indices = tri.triangulate(tricount, TRIANGULATION_EPSILON); - if (!indices) - { - return false; - } - - for (TriInternal::NxU32 currentIdx = 0; currentIdx < tricount * 3; ++currentIdx) - { - TriInternal::NxU32 indexValue = *indices++; - result.push_back(contour[indexValue]); - } - - return result.size() > 2; - } -} diff --git a/Code/Editor/Util/Triangulate.h b/Code/Editor/Util/Triangulate.h deleted file mode 100644 index dad3a14de1..0000000000 --- a/Code/Editor/Util/Triangulate.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * 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 - * - */ - - -#ifndef CRYINCLUDE_EDITOR_UTIL_TRIANGULATE_H -#define CRYINCLUDE_EDITOR_UTIL_TRIANGULATE_H -#pragma once - -#include -#include "Cry_Vector3.h" - -// you pass in a vector of vec3 (the contour of a shape) and it outputs a vector of vec3 (being the triangles) - -namespace Triangulator -{ - typedef std::vector< Vec3 > VectorOfVectors; - bool Triangulate(const VectorOfVectors& contour, VectorOfVectors& result); -}; - - -#endif diff --git a/Code/Editor/editor_lib_files.cmake b/Code/Editor/editor_lib_files.cmake index 28950c9fa9..d1c903eb72 100644 --- a/Code/Editor/editor_lib_files.cmake +++ b/Code/Editor/editor_lib_files.cmake @@ -648,8 +648,6 @@ set(FILES Util/PredefinedAspectRatios.h Util/StringHelpers.cpp Util/StringHelpers.h - Util/Triangulate.cpp - Util/Triangulate.h Util/Util.h Util/XmlArchive.cpp Util/XmlArchive.h From cc796476548f24597c78d182a090294bc8a3613a Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Fri, 19 Nov 2021 16:33:19 -0800 Subject: [PATCH 085/284] Removes WinWidgetId from Code/Editor Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Editor/IEditor.h | 2 -- Code/Editor/WinWidgetId.h | 20 -------------------- Code/Editor/editor_core_files.cmake | 1 - 3 files changed, 23 deletions(-) delete mode 100644 Code/Editor/WinWidgetId.h diff --git a/Code/Editor/IEditor.h b/Code/Editor/IEditor.h index 0ba24ac46a..52f8c1ac6f 100644 --- a/Code/Editor/IEditor.h +++ b/Code/Editor/IEditor.h @@ -19,8 +19,6 @@ #include "Util/UndoUtil.h" #include -#include - #include #include diff --git a/Code/Editor/WinWidgetId.h b/Code/Editor/WinWidgetId.h deleted file mode 100644 index dc8daa43c6..0000000000 --- a/Code/Editor/WinWidgetId.h +++ /dev/null @@ -1,20 +0,0 @@ -/* - * 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 - -enum class WinWidgetId -{ - NONE = 0, - ACTIVE_DEPLOYMENT, - PROFILE_SELECTOR, - ADD_PROFILE, - INITIALIZE_PROJECT, - // ALL VALIDS ABOVE HERE - NUM_WIN_WIDGET_IDS -}; diff --git a/Code/Editor/editor_core_files.cmake b/Code/Editor/editor_core_files.cmake index 1f0a5a3618..60fe18ec65 100644 --- a/Code/Editor/editor_core_files.cmake +++ b/Code/Editor/editor_core_files.cmake @@ -64,7 +64,6 @@ set(FILES Undo/IUndoObject.h Undo/Undo.h Undo/UndoVariableChange.h - WinWidgetId.h QtUI/ColorButton.cpp QtUI/ColorButton.h QtUtil.h From fba00b0b2beb675ce9df71828b739257108defa1 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Fri, 19 Nov 2021 16:43:37 -0800 Subject: [PATCH 086/284] Removes ComponentPalette/CategoriesList and ComponentPalette/ComponentDataModel from Code/Editor/Plugins/ComponentEntityEditorPlugin Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../UI/ComponentPalette/CategoriesList.cpp | 97 ---- .../UI/ComponentPalette/CategoriesList.h | 39 -- .../ComponentPalette/ComponentDataModel.cpp | 547 ------------------ .../UI/ComponentPalette/ComponentDataModel.h | 128 ---- .../componententityeditorplugin_files.cmake | 4 - Code/Editor/Util/Contrib/NvFloatMath.inl | 455 --------------- 6 files changed, 1270 deletions(-) delete mode 100644 Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/CategoriesList.cpp delete mode 100644 Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/CategoriesList.h delete mode 100644 Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/ComponentDataModel.cpp delete mode 100644 Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/ComponentDataModel.h delete mode 100644 Code/Editor/Util/Contrib/NvFloatMath.inl diff --git a/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/CategoriesList.cpp b/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/CategoriesList.cpp deleted file mode 100644 index cd157fe838..0000000000 --- a/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/CategoriesList.cpp +++ /dev/null @@ -1,97 +0,0 @@ -/* - * 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 "CategoriesList.h" - -ComponentCategoryList::ComponentCategoryList(QWidget* parent /*= nullptr*/) - : QTreeWidget(parent) -{ -} - -void ComponentCategoryList::Init() -{ - setColumnCount(1); - setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - setDragDropMode(QAbstractItemView::DragDropMode::DragOnly); - setDragEnabled(true); - setSelectionMode(QAbstractItemView::ExtendedSelection); - setAllColumnsShowFocus(true); - setStyleSheet("QTreeWidget { selection-background-color: rgba(255,255,255,0.2); }"); - - QStringList headers; - headers << tr("Categories"); - setHeaderLabels(headers); - - const QString parentCategoryIconPath = QString("Icons/PropertyEditor/Browse_on.png"); - const QString categoryIconPath = QString("Icons/PropertyEditor/Browse.png"); - - QTreeWidgetItem* allCategory = new QTreeWidgetItem(this); - allCategory->setText(0, "All"); - allCategory->setIcon(0, QIcon(categoryIconPath)); - - // Need this briefly to collect the list of available categories. - ComponentDataModel dataModel(this); - for (const auto& cat : dataModel.GetCategories()) - { - QString categoryString = QString(cat.c_str()); - QStringList categories = categoryString.split('/', Qt::SkipEmptyParts); - - QTreeWidgetItem* parent = nullptr; - QTreeWidgetItem* categoryWidget = nullptr; - - for (const auto& categoryName : categories) - { - if (parent) - { - categoryWidget = new QTreeWidgetItem(parent); - categoryWidget->setIcon(0, QIcon(categoryIconPath)); - - // Store the full category path in a user role because we'll need it to locate the actual category - categoryWidget->setData(0, Qt::UserRole, QVariant::fromValue(categoryString)); - } - else - { - auto existingCategory = findItems(categoryName, Qt::MatchExactly); - if (existingCategory.empty()) - { - categoryWidget = new QTreeWidgetItem(this); - categoryWidget->setIcon(0, QIcon(parentCategoryIconPath)); - } - else - { - categoryWidget = static_cast(existingCategory.first()); - categoryWidget->setIcon(0, QIcon(parentCategoryIconPath)); - } - } - - parent = categoryWidget; - - categoryWidget->setText(0, categoryName); - } - } - - expandAll(); - - connect(this, &QTreeWidget::itemClicked, this, &ComponentCategoryList::OnItemClicked); -} - -void ComponentCategoryList::OnItemClicked(QTreeWidgetItem* item, int /*column*/) -{ - QVariant userData = item->data(0, Qt::UserRole); - if (userData.isValid()) - { - // Send in the full category path, not just the child category name - emit OnCategoryChange(userData.value().toStdString().c_str()); - } - else - { - emit OnCategoryChange(item->text(0).toStdString().c_str()); - } -} - -#include diff --git a/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/CategoriesList.h b/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/CategoriesList.h deleted file mode 100644 index 76a955ea76..0000000000 --- a/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/CategoriesList.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * 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 - -#if !defined(Q_MOC_RUN) -#include "ComponentDataModel.h" -#include -#endif - -//! ComponentCategoryList -//! Provides a list of all reflected categories that users can select for quick -//! filtering the filtered component list. -class ComponentCategoryList : public QTreeWidget -{ - Q_OBJECT - -public: - - AZ_CLASS_ALLOCATOR(ComponentCategoryList, AZ::SystemAllocator, 0); - - explicit ComponentCategoryList(QWidget* parent = nullptr); - - void Init(); - -Q_SIGNALS: - void OnCategoryChange(const char* category); - -protected: - - // Will emit OnCategoryChange signal - void OnItemClicked(QTreeWidgetItem* item, int column); - -}; diff --git a/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/ComponentDataModel.cpp b/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/ComponentDataModel.cpp deleted file mode 100644 index dcae6abfeb..0000000000 --- a/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/ComponentDataModel.cpp +++ /dev/null @@ -1,547 +0,0 @@ -/* - * 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 "ComponentDataModel.h" - -#include "Include/IObjectManager.h" -#include "Objects/SelectionGroup.h" - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include - -#include - -namespace -{ - // This is a helper function that given an object that derives from QAbstractItemModel, - // it will request the model's "ClassDataRole" class data for an entry and use that - // information to create a new entity with the selected components. - AZ::EntityId CreateEntityFromSelection(const QModelIndexList& selection, QAbstractItemModel* model) - { - AZ::Vector3 position = AZ::Vector3::CreateZero(); - CViewport *view = GetIEditor()->GetViewManager()->GetGameViewport(); - int width, height; - view->GetDimensions(&width, &height); - position = LYVec3ToAZVec3(view->ViewToWorld(QPoint(width / 2, height / 2))); - - AZ::EntityId newEntityId; - EBUS_EVENT_RESULT(newEntityId, AzToolsFramework::EditorRequests::Bus, CreateNewEntityAtPosition, position, AZ::EntityId()); - if (newEntityId.IsValid()) - { - // Add all the selected components. - AZ::ComponentTypeList componentsToAdd; - for (auto index : selection) - { - // We only need to consider the first column, it's important that the data() function that - // returns ComponentDataModel::ClassDataRole also does so for the first column. - if (index.column() != 0) - { - continue; - } - - QVariant classDataVariant = model->data(index, ComponentDataModel::ClassDataRole); - if (classDataVariant.isValid()) - { - const AZ::SerializeContext::ClassData* classData = reinterpret_cast(classDataVariant.value()); - componentsToAdd.push_back(classData->m_typeId); - } - } - - AzToolsFramework::EntityCompositionRequestBus::Broadcast(&AzToolsFramework::EntityCompositionRequests::AddComponentsToEntities, AzToolsFramework::EntityIdList{ newEntityId }, componentsToAdd); - - return newEntityId; - } - - return AZ::EntityId(); - } -} - -namespace ComponentDataUtilities -{ - // This is a helper function to add the specified components to the selected entities, it relies on the provided - // QAbstractItemModel to determine the appropriate ClassData to use to create the components (given that some widgets - // may provide proxy models that alter the order). - void AddComponentsToSelectedEntities(const QModelIndexList& selectedComponents, QAbstractItemModel* model) - { - AzToolsFramework::EntityIdList selectedEntities; - AzToolsFramework::ToolsApplicationRequestBus::BroadcastResult(selectedEntities, &AzToolsFramework::ToolsApplicationRequests::GetSelectedEntities); - if (selectedEntities.empty()) - { - return; - } - - // Add all the selected components. - AZ::ComponentTypeList componentsToAdd; - for (auto index : selectedComponents) - { - // We only need to consider the first column, it's important that the data() function that - // returns ComponentDataModel::ClassDataRole also does so for the first column. - if (index.column() != 0) - { - continue; - } - - QVariant classDataVariant = model->data(index, ComponentDataModel::ClassDataRole); - if (classDataVariant.isValid()) - { - const AZ::SerializeContext::ClassData* classData = reinterpret_cast(classDataVariant.value()); - componentsToAdd.push_back(classData->m_typeId); - } - } - - AzToolsFramework::EntityCompositionRequestBus::Broadcast(&AzToolsFramework::EntityCompositionRequests::AddComponentsToEntities, selectedEntities, componentsToAdd); - } -} - - -// ComponentDataModel -////////////////////////////////////////////////////////////////////////// - -ComponentDataModel::ComponentDataModel(QObject* parent) - : QAbstractTableModel(parent) -{ - AZ::SerializeContext* serializeContext = nullptr; - EBUS_EVENT_RESULT(serializeContext, AZ::ComponentApplicationBus, GetSerializeContext); - AZ_Assert(serializeContext, "Failed to acquire application serialize context."); - - serializeContext->EnumerateDerived([this](const AZ::SerializeContext::ClassData* classData, const AZ::Uuid&) -> bool - { - bool allowed = false; - bool hidden = false; - AZStd::string category = "Miscellaneous"; - - if (classData->m_editData) - { - for (const AZ::Edit::ElementData& element : classData->m_editData->m_elements) - { - if (element.m_elementId == AZ::Edit::ClassElements::EditorData) - { - AZStd::string iconPath; - AzToolsFramework::EditorRequestBus::BroadcastResult(iconPath, &AzToolsFramework::EditorRequests::GetComponentTypeEditorIcon, classData->m_typeId); - if (!iconPath.empty()) - { - m_componentIcons[classData->m_typeId] = QIcon(iconPath.c_str()); - } - - for (const AZ::Edit::AttributePair& attribPair : element.m_attributes) - { - if (attribPair.first == AZ::Edit::Attributes::AppearsInAddComponentMenu) - { - if (auto data = azdynamic_cast*>(attribPair.second)) - { - if (data->Get(nullptr) == AZ_CRC("Game")) - { - allowed = true; - } - } - } - else if (attribPair.first == AZ::Edit::Attributes::AddableByUser) - { - // skip this component if user is not allowed to add it directly - if (auto data = azdynamic_cast*>(attribPair.second)) - { - if (!data->Get(nullptr)) - { - hidden = true; - } - } - } - else if (attribPair.first == AZ::Edit::Attributes::Category) - { - if (auto data = azdynamic_cast*>(attribPair.second)) - { - category = data->Get(nullptr); - } - } - } - - break; - } - } - } - - if (allowed && !hidden) - { - m_componentList.push_back(classData); - m_componentMap[category].push_back(classData); - m_categories.insert(category); - } - - return true; - }); - - // we'd like viewport events - AzQtComponents::DragAndDropEventsBus::Handler::BusConnect(AzQtComponents::DragAndDropContexts::EditorViewport); -} - -ComponentDataModel::~ComponentDataModel() -{ - AzQtComponents::DragAndDropEventsBus::Handler::BusDisconnect(); -} - -Qt::ItemFlags ComponentDataModel::flags([[maybe_unused]] const QModelIndex &index) const -{ - return Qt::ItemFlags( - Qt::ItemIsEnabled | - Qt::ItemIsDragEnabled | - Qt::ItemIsDropEnabled | - Qt::ItemIsSelectable); -} - -const AZ::SerializeContext::ClassData* ComponentDataModel::GetClassData(const QModelIndex& index) const -{ - int row = index.row(); - if (row < 0 || row >= m_componentList.size()) - { - return nullptr; - } - - return m_componentList[row]; -} - -const char* ComponentDataModel::GetCategory(const AZ::SerializeContext::ClassData* classData) -{ - if (classData) - { - if (auto editorDataElement = classData->m_editData->FindElementData(AZ::Edit::ClassElements::EditorData)) - { - if (auto categoryAttribute = editorDataElement->FindAttribute(AZ::Edit::Attributes::Category)) - { - if (auto categoryData = azdynamic_cast*>(categoryAttribute)) - { - const char* result = categoryData->Get(nullptr); - if (result) - { - return result; - } - } - } - } - } - - return ""; -} - - -QModelIndex ComponentDataModel::index(int row, int column, const QModelIndex &parent /*= QModelIndex()*/) const -{ - if (row >= rowCount(parent) || column >= columnCount(parent)) - { - return QModelIndex(); - } - - return createIndex(row, column, (void*)(m_componentList[row])); -} - -QModelIndex ComponentDataModel::parent([[maybe_unused]] const QModelIndex &child) const -{ - return QModelIndex(); -} - -int ComponentDataModel::rowCount([[maybe_unused]] const QModelIndex &parent /*= QModelIndex()*/) const -{ - return static_cast(m_componentList.size()); -} - -int ComponentDataModel::columnCount([[maybe_unused]] const QModelIndex &parent /*= QModelIndex()*/) const -{ - return ColumnIndex::Count; -} - -QVariant ComponentDataModel::data(const QModelIndex &index, int role /*= Qt::DisplayRole*/) const -{ - if (index.isValid()) - { - const AZ::SerializeContext::ClassData* classData = m_componentList[index.row()]; - if (!classData) - { - return QVariant(); - } - - switch (role) - { - case ClassDataRole: - if (index.column() == 0) // Only get data for one column - { - return QVariant::fromValue(reinterpret_cast(const_cast(classData))); - } - break; - - case Qt::DisplayRole: - { - if (index.column() == ColumnIndex::Name) - { - return QVariant(classData->m_editData->m_name); - } - else - if (index.column() == ColumnIndex::Category) - { - if (auto editorDataElement = classData->m_editData->FindElementData(AZ::Edit::ClassElements::EditorData)) - { - if (auto categoryAttribute = editorDataElement->FindAttribute(AZ::Edit::Attributes::Category)) - { - if (auto categoryData = azdynamic_cast*>(categoryAttribute)) - { - return QVariant(categoryData->Get(nullptr)); - } - } - } - } - - } - break; - - case Qt::ToolTipRole: - { - return QVariant(classData->m_editData->m_description); - } - - case Qt::DecorationRole: - { - if (index.column() == ColumnIndex::Icon) - { - auto iconIterator = m_componentIcons.find(classData->m_typeId); - if (iconIterator != m_componentIcons.end()) - { - return iconIterator->second; - } - } - } - break; - - default: - break; - } - } - - return QVariant(); -} - -QMimeData* ComponentDataModel::mimeData(const QModelIndexList& indices) const -{ - QModelIndexList list; - - // Filter out columns we are not interested in. - for (const QModelIndex& index : indices) - { - if (index.column() == 0) - { - list.push_back(index); - } - } - - AZStd::vector sortedList; - for (QModelIndex index : list) - { - QVariant classDataVariant = index.data(ComponentDataModel::ClassDataRole); - if (classDataVariant.isValid()) - { - const AZ::SerializeContext::ClassData* classData = reinterpret_cast(classDataVariant.value()); - sortedList.push_back(classData); - } - } - - QMimeData* mimeData = nullptr; - if (!sortedList.empty()) - { - mimeData = AzToolsFramework::ComponentTypeMimeData::Create(sortedList).release(); - } - - return mimeData; -} - -bool ComponentDataModel::CanAcceptDragAndDropEvent(QDropEvent* event, AzQtComponents::DragAndDropContextBase& context) const -{ - using namespace AzToolsFramework; - using namespace AzQtComponents; - - // if a listener with a higher priority already claimed this event, do not touch it. - if ((!event) || (event->isAccepted()) || (!event->mimeData())) - { - return false; - } - - ViewportDragContext* contextVP = azrtti_cast(&context); - if (!contextVP) - { - // not a viewport event. This is for some other GUI such as the main window itself. - return false; - } - - AZStd::vector componentClassDataList; - return AzToolsFramework::ComponentTypeMimeData::Get(event->mimeData(), componentClassDataList); -} - -void ComponentDataModel::DragEnter(QDragEnterEvent* event, AzQtComponents::DragAndDropContextBase& context) -{ - if (CanAcceptDragAndDropEvent(event, context)) - { - event->setDropAction(Qt::CopyAction); - event->setAccepted(true); - // opportunities to show special highlights, or ghosted entities or previews here. - } -} - -void ComponentDataModel::DragMove(QDragMoveEvent* event, AzQtComponents::DragAndDropContextBase& context) -{ - if (CanAcceptDragAndDropEvent(event, context)) - { - event->setDropAction(Qt::CopyAction); - event->setAccepted(true); - // opportunities to update special highlights, or ghosted entities or previews here. - } -} - -void ComponentDataModel::DragLeave(QDragLeaveEvent* /*event*/) -{ - // opportunities to remove ghosted entities or previews here. -} - -void ComponentDataModel::Drop(QDropEvent* event, AzQtComponents::DragAndDropContextBase& context) -{ - using namespace AzToolsFramework; - using namespace AzQtComponents; - - // ALWAYS CHECK - you are not the only one connected to this bus, and someone else may have already - // handled the event or accepted the drop - it might not contain types relevant to you. - // you still get informed about the drop event in case you did some stuff in your gui and need to clean it up. - if (!CanAcceptDragAndDropEvent(event, context)) - { - return; - } - - // note that the above call already checks all the pointers such as event, or whether context is a VP context, mimetype, etc - ViewportDragContext* contextVP = azrtti_cast(&context); - - // we don't get given this action by Qt unless we already returned accepted from one of the other ones (such as drag move of drag enter) - event->setDropAction(Qt::CopyAction); - event->setAccepted(true); - - AzToolsFramework::ScopedUndoBatch undo("Create entity from components"); - const AZStd::string name = AZStd::string::format("Entity%d", GetIEditor()->GetObjectManager()->GetObjectCount()); - - AZ::Entity* newEntity = aznew AZ::Entity(name.c_str()); - if (newEntity) - { - AzToolsFramework::EditorEntityContextRequestBus::Broadcast(&AzToolsFramework::EditorEntityContextRequests::AddRequiredComponents, *newEntity); - auto* transformComponent = newEntity->FindComponent(); - if (transformComponent) - { - transformComponent->SetWorldTM(AZ::Transform::CreateTranslation(contextVP->m_hitLocation)); - } - - // Add the entity to the editor context, which activates it and creates the sandbox object. - AzToolsFramework::EditorEntityContextRequestBus::Broadcast(&AzToolsFramework::EditorEntityContextRequests::AddEditorEntity, newEntity); - - // Prepare undo command last so it captures the final state of the entity. - AzToolsFramework::EntityCreateCommand* command = aznew AzToolsFramework::EntityCreateCommand(static_cast(newEntity->GetId())); - command->Capture(newEntity); - command->SetParent(undo.GetUndoBatch()); - - // Only need to add components to the new entity - AzToolsFramework::EntityIdList entities = { newEntity->GetId() }; - - AZStd::vector componentClassDataList; - AzToolsFramework::ComponentTypeMimeData::Get(event->mimeData(), componentClassDataList); - - AZ::ComponentTypeList componentsToAdd; - for (auto classData : componentClassDataList) - { - if (!classData) - { - continue; - } - - componentsToAdd.push_back(classData->m_typeId); - } - - AzToolsFramework::EntityCompositionRequests::AddComponentsOutcome addedComponentsResult = AZ::Failure(AZStd::string("Failed to call AddComponentsToEntities on EntityCompositionRequestBus")); - AzToolsFramework::EntityCompositionRequestBus::BroadcastResult(addedComponentsResult, &AzToolsFramework::EntityCompositionRequests::AddComponentsToEntities, entities, componentsToAdd); - - ToolsApplicationRequests::Bus::Broadcast(&ToolsApplicationRequests::AddDirtyEntity, newEntity->GetId()); - AzToolsFramework::ToolsApplicationRequestBus::Broadcast(&AzToolsFramework::ToolsApplicationRequests::SetSelectedEntities, entities); - } -} - -AZ::EntityId ComponentDataProxyModel::NewEntityFromSelection(const QModelIndexList& selection) -{ - return CreateEntityFromSelection(selection, this); -} - -AZ::EntityId ComponentDataModel::NewEntityFromSelection(const QModelIndexList& selection) -{ - return CreateEntityFromSelection(selection, this); -} - -bool ComponentDataProxyModel::filterAcceptsRow(int sourceRow, [[maybe_unused]] const QModelIndex &sourceParent) const -{ - if (m_selectedCategory.empty() && !filterRegExp().isValid()) - return true; - - ComponentDataModel* dataModel = static_cast(sourceModel()); - if (sourceRow < 0 || sourceRow >= dataModel->GetComponents().size()) - { - return false; - } - - const AZ::SerializeContext::ClassData* classData = dataModel->GetComponents()[sourceRow]; - if (!classData) - { - return false; - } - - // Get Category - if (!m_selectedCategory.empty()) - { - AZStd::string currentCateogry = ComponentDataModel::GetCategory(classData); - - if (AzFramework::StringFunc::Find(currentCateogry.c_str(), m_selectedCategory.c_str())) - { - return false; - } - } - - if (filterRegExp().isValid()) - { - QString componentName = QString::fromUtf8(classData->m_editData->m_name); - return componentName.contains(filterRegExp()); - } - - return true; -} - -void ComponentDataProxyModel::SetSelectedCategory(const AZStd::string& category) -{ - m_selectedCategory = category; - invalidate(); -} - -void ComponentDataProxyModel::ClearSelectedCategory() -{ - m_selectedCategory.clear(); - invalidate(); -} - -#include "UI/ComponentPalette/moc_ComponentDataModel.cpp" diff --git a/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/ComponentDataModel.h b/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/ComponentDataModel.h deleted file mode 100644 index 2c9cd27a5f..0000000000 --- a/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/ComponentPalette/ComponentDataModel.h +++ /dev/null @@ -1,128 +0,0 @@ -/* - * 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 - -#if !defined(Q_MOC_RUN) -#include -#include - -#include -#include - -#include -#include -#include - -#include -#endif - -namespace ComponentDataUtilities -{ - // Given a list of selected components, use the provided model to get the components to add to any selected entities. - void AddComponentsToSelectedEntities(const QModelIndexList& selectedComponents, QAbstractItemModel* model); -} - -class CViewport; - -//! ComponentDataModel -//! Holds the data required to display components in a table, this includes component name, categories, icons. -class ComponentDataModel - : public QAbstractTableModel - , protected AzQtComponents::DragAndDropEventsBus::Handler // its okay if more than one of these is installed, the first one gets it. -{ - Q_OBJECT - -public: - AZ_CLASS_ALLOCATOR(ComponentDataModel, AZ::SystemAllocator, 0); - - using ComponentClassList = AZStd::vector; - using ComponentCategorySet = AZStd::set; - using ComponentClassMap = AZStd::unordered_map>; - using ComponentIconMap = AZStd::unordered_map; - - enum ColumnIndex - { - Icon, - Category, - Name, - Count - }; - - enum CustomRoles - { - ClassDataRole = Qt::UserRole + 1 - }; - - ComponentDataModel(QObject* parent = nullptr); - ~ComponentDataModel() override; - - QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override; - QModelIndex parent(const QModelIndex &child) const override; - int rowCount(const QModelIndex &parent = QModelIndex()) const override; - int columnCount(const QModelIndex &parent = QModelIndex()) const override; - QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; - - Qt::ItemFlags flags(const QModelIndex &index) const override; - - QMimeData* mimeData(const QModelIndexList& indexes) const override; - - const AZ::SerializeContext::ClassData* GetClassData(const QModelIndex&) const; - - AZ::EntityId NewEntityFromSelection(const QModelIndexList& selection); - - static const char* GetCategory(const AZ::SerializeContext::ClassData* classData); - - ComponentClassList& GetComponents() { return m_componentList; } - ComponentCategorySet& GetCategories() { return m_categories; } - -protected: - ////////////////////////////////////////////////////////////////////////// - // AzQtComponents::DragAndDropEventsBus::Handler - ////////////////////////////////////////////////////////////////////////// - void DragEnter(QDragEnterEvent* event, AzQtComponents::DragAndDropContextBase& context) override; - void DragMove(QDragMoveEvent* event, AzQtComponents::DragAndDropContextBase& context) override; - void DragLeave(QDragLeaveEvent* event) override; - void Drop(QDropEvent* event, AzQtComponents::DragAndDropContextBase& context) override; - bool CanAcceptDragAndDropEvent(QDropEvent* event, AzQtComponents::DragAndDropContextBase& context) const; - - ComponentClassList m_componentList; - ComponentClassMap m_componentMap; - ComponentIconMap m_componentIcons; - ComponentCategorySet m_categories; -}; - -//! ComponentDataProxyModel -//! FilterProxy for the ComponentDataModel is used along with the search criteria to filter the -//! list of components based on tags and/or selected category. -class ComponentDataProxyModel : public QSortFilterProxyModel -{ - Q_OBJECT - -public: - AZ_CLASS_ALLOCATOR(ComponentDataProxyModel, AZ::SystemAllocator, 0); - - ComponentDataProxyModel(QObject* parent = nullptr) - : QSortFilterProxyModel(parent) - {} - - // Creates a new entity and adds the selected components to it. - // It is specialized here to ensure it uses the correct indices according to the sorted data. - AZ::EntityId NewEntityFromSelection(const QModelIndexList& selection); - - // Filters rows according to the specifed tags and/or selected category - bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override; - - // Set the category to filter by. - void SetSelectedCategory(const AZStd::string& category); - void ClearSelectedCategory(); - -protected: - - AZStd::string m_selectedCategory; -}; diff --git a/Code/Editor/Plugins/ComponentEntityEditorPlugin/componententityeditorplugin_files.cmake b/Code/Editor/Plugins/ComponentEntityEditorPlugin/componententityeditorplugin_files.cmake index b5a8b00855..28f96de862 100644 --- a/Code/Editor/Plugins/ComponentEntityEditorPlugin/componententityeditorplugin_files.cmake +++ b/Code/Editor/Plugins/ComponentEntityEditorPlugin/componententityeditorplugin_files.cmake @@ -20,10 +20,6 @@ set(FILES UI/QComponentEntityEditorOutlinerWindow.cpp UI/AssetCatalogModel.h UI/AssetCatalogModel.cpp - UI/ComponentPalette/CategoriesList.h - UI/ComponentPalette/CategoriesList.cpp - UI/ComponentPalette/ComponentDataModel.h - UI/ComponentPalette/ComponentDataModel.cpp UI/ComponentPalette/ComponentPaletteSettings.h UI/Outliner/OutlinerDisplayOptionsMenu.h UI/Outliner/OutlinerDisplayOptionsMenu.cpp diff --git a/Code/Editor/Util/Contrib/NvFloatMath.inl b/Code/Editor/Util/Contrib/NvFloatMath.inl deleted file mode 100644 index 6bd3b9f7c5..0000000000 --- a/Code/Editor/Util/Contrib/NvFloatMath.inl +++ /dev/null @@ -1,455 +0,0 @@ -/* - * 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 - * - */ -/* BEGIN CONTENTS OF README.TXT ------------------------------------- -The ConvexDecomposition library was written by John W. Ratcliff mailto:jratcliffscarab@gmail.com - -What is Convex Decomposition? - -Convex Decomposition is when you take an arbitrarily complex triangle mesh and sub-divide it into -a collection of discrete compound pieces (each represented as a convex hull) to approximate -the original shape of the objet. - -This is required since few physics engines can treat aribtrary triangle mesh objects as dynamic -objects. Even those engines which can handle this use case incurr a huge performance and memory -penalty to do so. - -By breaking a complex triangle mesh up into a discrete number of convex components you can greatly -improve performance for dynamic simulations. - --------------------------------------------------------------------------------- - -This code is released under the MIT license. - -The code is functional but could use the following improvements: - -(1) The convex hull generator, originally written by Stan Melax, could use some major code cleanup. - -(2) The code to remove T-junctions appears to have a bug in it. This code was working fine before, -but I haven't had time to debug why it stopped working. - -(3) Island generation once the mesh has been split is currently disabled due to the fact that the -Remove Tjunctions functionality has a bug in it. - -(4) The code to perform a raycast against a triangle mesh does not currently use any acceleration -data structures. - -(5) When a split is performed, the surface that got split is not 'capped'. This causes a problem -if you use a high recursion depth on your convex decomposition. It will cause the object to -be modelled as if it had a hollow interior. A lot of work was done to solve this problem, but -it hasn't been integrated into this code drop yet. - - -*/// ---------- END CONTENTS OF README.TXT ---------------------------- - - -// a set of routines that let you do common 3d math -// operations without any vector, matrix, or quaternion -// classes or templates. -// -// a vector (or point) is a 'NxF32 *' to 3 floating point numbers. -// a matrix is a 'NxF32 *' to an array of 16 floating point numbers representing a 4x4 transformation matrix compatible with D3D or OGL -// a quaternion is a 'NxF32 *' to 4 floats representing a quaternion x,y,z,w -// -// -/*! -** -** Copyright (c) 2009 by John W. Ratcliff mailto:jratcliffscarab@gmail.com -** -** Portions of this source has been released with the PhysXViewer application, as well as -** Rocket, CreateDynamics, ODF, and as a number of sample code snippets. -** -** If you find this code useful or you are feeling particularily generous I would -** ask that you please go to http://www.amillionpixels.us and make a donation -** to Troy DeMolay. -** -** DeMolay is a youth group for young men between the ages of 12 and 21. -** It teaches strong moral principles, as well as leadership skills and -** public speaking. The donations page uses the 'pay for pixels' paradigm -** where, in this case, a pixel is only a single penny. Donations can be -** made for as small as $4 or as high as a $100 block. Each person who donates -** will get a link to their own site as well as acknowledgement on the -** donations blog located here http://www.amillionpixels.blogspot.com/ -** -** If you wish to contact me you can use the following methods: -** -** Skype ID: jratcliff63367 -** Yahoo: jratcliff63367 -** AOL: jratcliff1961 -** email: jratcliffscarab@gmail.com -** -** -** The MIT license: -** -** Permission is hereby granted, free of charge, to any person obtaining a copy -** of this software and associated documentation files (the "Software"), to deal -** in the Software without restriction, including without limitation the rights -** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -** copies of the Software, and to permit persons to whom the Software is furnished -** to do so, subject to the following conditions: -** -** The above copyright notice and this permission notice shall be included in all -** copies or substantial portions of the Software. - -** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -** WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -** CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -*/ - -class TVec -{ -public: - TVec(NxF64 _x, NxF64 _y, NxF64 _z) { x = _x; y = _y; z = _z; }; - TVec(void) { }; - - NxF64 x; - NxF64 y; - NxF64 z; -}; - - -class CTriangulator -{ -public: - /// Default constructor - CTriangulator(); - - /// Default destructor - virtual ~CTriangulator(); - - /// Returns the given point in the triangulator array - inline TVec get(const TU32 id) { return mPoints[id]; } - - virtual void reset(void) - { - mInputPoints.clear(); - mPoints.clear(); - mIndices.clear(); - } - - virtual void addPoint(NxF64 x, NxF64 y, NxF64 z) - { - TVec v(x, y, z); - // update bounding box... - if (mInputPoints.empty()) - { - mMin = v; - mMax = v; - } - else - { - if (x < mMin.x) - { - mMin.x = x; - } - if (y < mMin.y) - { - mMin.y = y; - } - if (z < mMin.z) - { - mMin.z = z; - } - - if (x > mMax.x) - { - mMax.x = x; - } - if (y > mMax.y) - { - mMax.y = y; - } - if (z > mMax.z) - { - mMax.z = z; - } - } - mInputPoints.push_back(v); - } - - // Triangulation happens in 2d. We could inverse transform the polygon around the normal direction, or we just use the two most signficant axes - // Here we find the two longest axes and use them to triangulate. Inverse transforming them would introduce more doubleing point error and isn't worth it. - virtual NxU32* triangulate(NxU32& tcount, NxF64 epsilon) - { - NxU32* ret = 0; - tcount = 0; - mEpsilon = epsilon; - - if (!mInputPoints.empty()) - { - mPoints.clear(); - - NxF64 dx = mMax.x - mMin.x; // locate the first, second and third longest edges and store them in i1, i2, i3 - NxF64 dy = mMax.y - mMin.y; - NxF64 dz = mMax.z - mMin.z; - - NxU32 i1, i2, i3; - - if (dx > dy && dx > dz) - { - i1 = 0; - if (dy > dz) - { - i2 = 1; - i3 = 2; - } - else - { - i2 = 2; - i3 = 1; - } - } - else if (dy > dx && dy > dz) - { - i1 = 1; - if (dx > dz) - { - i2 = 0; - i3 = 2; - } - else - { - i2 = 2; - i3 = 0; - } - } - else - { - i1 = 2; - if (dx > dy) - { - i2 = 0; - i3 = 1; - } - else - { - i2 = 1; - i3 = 0; - } - } - - NxU32 pcount = (NxU32)mInputPoints.size(); - const NxF64* points = &mInputPoints[0].x; - for (NxU32 i = 0; i < pcount; i++) - { - TVec v(points[i1], points[i2], points[i3]); - mPoints.push_back(v); - points += 3; - } - - mIndices.clear(); - triangulate(mIndices); - tcount = (NxU32)mIndices.size() / 3; - if (tcount) - { - ret = &mIndices[0]; - } - } - return ret; - } - - virtual const NxF64* getPoint(NxU32 index) - { - return &mInputPoints[index].x; - } - - -private: - NxF64 mEpsilon; - TVec mMin; - TVec mMax; - TVecVector mInputPoints; - TVecVector mPoints; - TU32Vector mIndices; - - /// Tests if a point is inside the given triangle - bool _insideTriangle(const TVec& A, const TVec& B, const TVec& C, const TVec& P); - - /// Returns the area of the contour - NxF64 _area(); - - bool _snip(NxI32 u, NxI32 v, NxI32 w, NxI32 n, NxI32* V); - - /// Processes the triangulation - void _process(TU32Vector& indices); - /// Triangulates the contour - void triangulate(TU32Vector& indices); -}; - -/// Default constructor -CTriangulator::CTriangulator(void) -{ -} - -/// Default destructor -CTriangulator::~CTriangulator() -{ -} - -/// Triangulates the contour -void CTriangulator::triangulate(TU32Vector& indices) -{ - _process(indices); -} - -/// Processes the triangulation -void CTriangulator::_process(TU32Vector& indices) -{ - const NxI32 n = (const NxI32)mPoints.size(); - if (n < 3) - { - return; - } - NxI32* V = (NxI32*)MEMALLOC_MALLOC(sizeof(NxI32) * n); - - bool flipped = false; - - if (0.0f < _area()) - { - for (NxI32 v = 0; v < n; v++) - { - V[v] = v; - } - } - else - { - flipped = true; - for (NxI32 v = 0; v < n; v++) - { - V[v] = (n - 1) - v; - } - } - - NxI32 nv = n; - NxI32 count = 2 * nv; - for (NxI32 m = 0, v = nv - 1; nv > 2; ) - { - if (0 >= (count--)) - { - return; - } - - NxI32 u = v; - if (nv <= u) - { - u = 0; - } - v = u + 1; - if (nv <= v) - { - v = 0; - } - NxI32 w = v + 1; - if (nv <= w) - { - w = 0; - } - - if (_snip(u, v, w, nv, V)) - { - NxI32 a, b, c, s, t; - a = V[u]; - b = V[v]; - c = V[w]; - if (flipped) - { - indices.push_back(a); - indices.push_back(b); - indices.push_back(c); - } - else - { - indices.push_back(c); - indices.push_back(b); - indices.push_back(a); - } - m++; - for (s = v, t = v + 1; t < nv; s++, t++) - { - V[s] = V[t]; - } - nv--; - count = 2 * nv; - } - } - - MEMALLOC_FREE(V); -} - -/// Returns the area of the contour -NxF64 CTriangulator::_area() -{ - NxI32 n = (NxU32)mPoints.size(); - NxF64 A = 0.0f; - for (NxI32 p = n - 1, q = 0; q < n; p = q++) - { - const TVec& pval = mPoints[p]; - const TVec& qval = mPoints[q]; - A += pval.x * qval.y - qval.x * pval.y; - } - A *= 0.5f; - return A; -} - -bool CTriangulator::_snip(NxI32 u, NxI32 v, NxI32 w, NxI32 n, NxI32* V) -{ - NxI32 p; - - const TVec& A = mPoints[V[u]]; - const TVec& B = mPoints[V[v]]; - const TVec& C = mPoints[V[w]]; - - if (mEpsilon > (((B.x - A.x) * (C.y - A.y)) - ((B.y - A.y) * (C.x - A.x)))) - { - return false; - } - - for (p = 0; p < n; p++) - { - if ((p == u) || (p == v) || (p == w)) - { - continue; - } - const TVec& P = mPoints[V[p]]; - if (_insideTriangle(A, B, C, P)) - { - return false; - } - } - return true; -} - -/// Tests if a point is inside the given triangle -bool CTriangulator::_insideTriangle(const TVec& A, const TVec& B, const TVec& C, const TVec& P) -{ - NxF64 ax, ay, bx, by, cx, cy, apx, apy, bpx, bpy, cpx, cpy; - NxF64 cCROSSap, bCROSScp, aCROSSbp; - - ax = C.x - B.x; - ay = C.y - B.y; - bx = A.x - C.x; - by = A.y - C.y; - cx = B.x - A.x; - cy = B.y - A.y; - apx = P.x - A.x; - apy = P.y - A.y; - bpx = P.x - B.x; - bpy = P.y - B.y; - cpx = P.x - C.x; - cpy = P.y - C.y; - - aCROSSbp = ax * bpy - ay * bpx; - cCROSSap = cx * apy - cy * apx; - bCROSScp = bx * cpy - by * cpx; - - return ((aCROSSbp >= 0.0f) && (bCROSScp >= 0.0f) && (cCROSSap >= 0.0f)); -} - From 03543a9e8eb6047b8fbf912d933759ade5887300 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Fri, 19 Nov 2021 16:52:26 -0800 Subject: [PATCH 087/284] Removes ColorUtils from Code/Editor Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Editor/Util/ColorUtils.h | 22 ---------------------- Code/Editor/editor_core_files.cmake | 1 - 2 files changed, 23 deletions(-) delete mode 100644 Code/Editor/Util/ColorUtils.h diff --git a/Code/Editor/Util/ColorUtils.h b/Code/Editor/Util/ColorUtils.h deleted file mode 100644 index 9993238e10..0000000000 --- a/Code/Editor/Util/ColorUtils.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * 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 - * - */ - - -// Description : Utility classes used by Editor. - - -#pragma once - -#include - -class QColor; - -QColor ColorLinearToGamma(ColorF col); -ColorF ColorGammaToLinear(const QColor& col); -QColor ColorToQColor(uint32 color); - diff --git a/Code/Editor/editor_core_files.cmake b/Code/Editor/editor_core_files.cmake index 60fe18ec65..7cb40927a4 100644 --- a/Code/Editor/editor_core_files.cmake +++ b/Code/Editor/editor_core_files.cmake @@ -58,7 +58,6 @@ set(FILES Util/ImageHistogram.h Util/Image.h Util/ColorUtils.cpp - Util/ColorUtils.h Undo/Undo.cpp Undo/IUndoManagerListener.h Undo/IUndoObject.h From c00d3105c6eb31588edd787c91ff2910566d4657 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Fri, 19 Nov 2021 19:00:25 -0800 Subject: [PATCH 088/284] =?UTF-8?q?=EF=BB=BFRemoves=20some=20CryAssert=20m?= =?UTF-8?q?ethods=20that=20are=20not=20being=20used=20because=20we=20redir?= =?UTF-8?q?ected=20it=20all=20to=20AZ=5FAssert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Editor/EditorDefs.h | 15 - Code/Editor/StartupTraceHandler.cpp | 16 - Code/Editor/Util/ColorUtils.cpp | 3 - Code/Editor/Util/MemoryBlock.cpp | 7 +- Code/Legacy/CryCommon/CryAssert.h | 90 +--- Code/Legacy/CryCommon/CryAssert_Android.h | 101 ---- Code/Legacy/CryCommon/CryAssert_Linux.h | 132 ----- Code/Legacy/CryCommon/CryAssert_Mac.h | 107 ---- Code/Legacy/CryCommon/CryAssert_iOS.h | 99 ---- Code/Legacy/CryCommon/CryAssert_impl.h | 468 ------------------ Code/Legacy/CryCommon/ISystem.h | 8 - Code/Legacy/CryCommon/WinBase.cpp | 10 - Code/Legacy/CryCommon/crycommon_files.cmake | 5 - Code/Legacy/CryCommon/platform.h | 6 - Code/Legacy/CryCommon/platform_impl.cpp | 6 - Code/Legacy/CrySystem/AZCoreLogSink.h | 53 -- Code/Legacy/CrySystem/System.cpp | 5 +- Code/Legacy/CrySystem/System.h | 7 - Gems/Maestro/Code/Source/Cinematics/Movie.cpp | 2 +- 19 files changed, 10 insertions(+), 1130 deletions(-) delete mode 100644 Code/Legacy/CryCommon/CryAssert_Android.h delete mode 100644 Code/Legacy/CryCommon/CryAssert_Linux.h delete mode 100644 Code/Legacy/CryCommon/CryAssert_Mac.h delete mode 100644 Code/Legacy/CryCommon/CryAssert_iOS.h delete mode 100644 Code/Legacy/CryCommon/CryAssert_impl.h diff --git a/Code/Editor/EditorDefs.h b/Code/Editor/EditorDefs.h index 5dd653679b..e86f007604 100644 --- a/Code/Editor/EditorDefs.h +++ b/Code/Editor/EditorDefs.h @@ -166,18 +166,3 @@ #ifdef LoadCursor #undef LoadCursor #endif - - -#ifdef _DEBUG -#if !defined(AZ_PLATFORM_LINUX) -#ifdef assert -#undef assert -#if defined(USE_AZ_ASSERT) -#define assert(condition) AZ_Assert(condition, "") -#else -#define assert CRY_ASSERT -#endif -#endif // !defined(AZ_PLATFORM_LINUX) -#endif -#endif - diff --git a/Code/Editor/StartupTraceHandler.cpp b/Code/Editor/StartupTraceHandler.cpp index 498bf10e31..407b030e9a 100644 --- a/Code/Editor/StartupTraceHandler.cpp +++ b/Code/Editor/StartupTraceHandler.cpp @@ -37,26 +37,10 @@ namespace SandboxEditor bool StartupTraceHandler::OnPreAssert(const char* fileName, int line, const char* func, const char* message) { - // Asserts are more fatal than errors, and need to be displayed right away. - // After the assert occurs, nothing else may be functional enough to collect and display messages. - - // Only use Cry message boxes if we aren't using native dialog boxes -#ifndef USE_AZ_ASSERT - if (message == nullptr || message[0] == 0) - { - AZStd::string emptyText = AZStd::string::format("Assertion failed in %s %s:%i", func, fileName, line); - OnMessage(emptyText.c_str(), nullptr, MessageDisplayBehavior::AlwaysShow); - } - else - { - OnMessage(message, nullptr, MessageDisplayBehavior::AlwaysShow); - } -#else AZ_UNUSED(fileName); AZ_UNUSED(line); AZ_UNUSED(func); AZ_UNUSED(message); -#endif // !USE_AZ_ASSERT // Return false so other listeners can handle this. The StartupTraceHandler won't report messages // will probably crash before that occurs, because this is an assert. diff --git a/Code/Editor/Util/ColorUtils.cpp b/Code/Editor/Util/ColorUtils.cpp index 02e3c9b615..3ca715e021 100644 --- a/Code/Editor/Util/ColorUtils.cpp +++ b/Code/Editor/Util/ColorUtils.cpp @@ -6,9 +6,6 @@ * */ - -#include "ColorUtils.h" - // Qt #include diff --git a/Code/Editor/Util/MemoryBlock.cpp b/Code/Editor/Util/MemoryBlock.cpp index b7ae017113..6b57557f6f 100644 --- a/Code/Editor/Util/MemoryBlock.cpp +++ b/Code/Editor/Util/MemoryBlock.cpp @@ -169,13 +169,12 @@ void CMemoryBlock::Uncompress(CMemoryBlock& toBlock) const assert(this != &toBlock); toBlock.Allocate(m_uncompressedSize); toBlock.m_uncompressedSize = 0; - unsigned long destSize = m_uncompressedSize; #if !defined(NDEBUG) - int result = -#endif - uncompress((unsigned char*)toBlock.GetBuffer(), &destSize, (unsigned char*)GetBuffer(), GetSize()); + unsigned long destSize = m_uncompressedSize; + int result = uncompress((unsigned char*)toBlock.GetBuffer(), &destSize, (unsigned char*)GetBuffer(), GetSize()); assert(result == Z_OK); assert(destSize == static_cast(m_uncompressedSize)); +#endif } ////////////////////////////////////////////////////////////////////////// diff --git a/Code/Legacy/CryCommon/CryAssert.h b/Code/Legacy/CryCommon/CryAssert.h index 1494654d87..c401dacb00 100644 --- a/Code/Legacy/CryCommon/CryAssert.h +++ b/Code/Legacy/CryCommon/CryAssert.h @@ -13,92 +13,12 @@ #include -//----------------------------------------------------------------------------------------------------- -// Just undef this if you want to use the standard assert function -//----------------------------------------------------------------------------------------------------- - -// if AZ_ENABLE_TRACING is enabled, then calls to AZ_Assert(...) will flow in. This is the case -// even in Profile mode - thus if you want to manage what happens, USE_CRY_ASSERT also needs to be enabled in those cases. -// if USE_CRY_ASSERT is not enabled, but AZ_ENABLE_TRACING is enabled, then the default behavior for assets will occur instead -// which is to throw the DEBUG BREAK exception / signal, which tends to end with application shutdown. -#if defined(AZ_ENABLE_TRACE_ASSERTS) -#define USE_AZ_ASSERT -#endif - -#if !defined (USE_AZ_ASSERT) && defined(AZ_ENABLE_TRACING) -#undef USE_CRY_ASSERT -#define USE_CRY_ASSERT -#endif - -// you can undefine this. It will cause the assert message box to appear anywhere that USE_CRY_ASSERT is enabled -// instead of it only appearing in debug. -// if this is DEFINED then only in debug builds will you see the message box. In other builds, CRY_ASSERTS become CryWarning instead of -// instead (showing no message box, only a warning). -#define CRY_ASSERT_DIALOG_ONLY_IN_DEBUG - -#if defined(FORCE_STANDARD_ASSERT) || defined(USE_AZ_ASSERT) -#undef USE_CRY_ASSERT -#undef CRY_ASSERT_DIALOG_ONLY_IN_DEBUG -#endif - // Using AZ_Assert for all assert kinds (assert =, CRY_ASSERT, AZ_Assert). // see Trace::Assert for implementation -#if defined(USE_AZ_ASSERT) - #undef assert - #if !defined(NDEBUG) - #define assert(condition) AZ_Assert(condition, "%s", #condition) - #else - #define assert(condition) - #endif -#endif //defined(USE_AZ_ASSERT) +#undef assert +#define assert(condition) AZ_Assert(condition, "%s", #condition) -//----------------------------------------------------------------------------------------------------- -// Use like this: -// CRY_ASSERT(expression); -// CRY_ASSERT_MESSAGE(expression,"Useful message"); -// CRY_ASSERT_TRACE(expression,("This should never happen because parameter n%d named %s is %f",iParameter,szParam,fValue)); -//----------------------------------------------------------------------------------------------------- +#define CRY_ASSERT(condition) AZ_Assert(condition, "%s", #condition) +#define CRY_ASSERT_MESSAGE(condition, message) AZ_Assert(condition, message) +#define CRY_ASSERT_TRACE(condition, parenthese_message) AZ_Assert(condition, parenthese_message) -#if defined(AZ_RESTRICTED_PLATFORM) - #include AZ_RESTRICTED_FILE(CryAssert_h) -#endif -#if defined(AZ_RESTRICTED_SECTION_IMPLEMENTED) - #undef AZ_RESTRICTED_SECTION_IMPLEMENTED -#elif defined(WIN32) || defined(APPLE) || defined(LINUX) - #define CRYASSERT_H_TRAIT_USE_CRY_ASSERT_MESSAGE 1 -#endif - -#if defined(USE_CRY_ASSERT) && CRYASSERT_H_TRAIT_USE_CRY_ASSERT_MESSAGE -void CryAssertTrace(const char*, ...); -bool CryAssert(const char*, const char*, unsigned int, bool*); - - #define CRY_ASSERT(condition) CRY_ASSERT_MESSAGE(condition, NULL) - - #define CRY_ASSERT_MESSAGE(condition, message) CRY_ASSERT_TRACE(condition, (message)) - - #define CRY_ASSERT_TRACE(condition, parenthese_message) \ - do \ - { \ - static bool s_bIgnoreAssert = false; \ - if (!s_bIgnoreAssert && !(condition)) \ - { \ - CryAssertTrace parenthese_message; \ - if (CryAssert(#condition, __FILE__, __LINE__, &s_bIgnoreAssert)) \ - { \ - AZ::Debug::Trace::Break(); \ - } \ - } \ - } while (0) - - #undef assert - #define assert CRY_ASSERT -#elif !defined(CRY_ASSERT) -#ifndef USE_AZ_ASSERT - #include -#endif //USE_AZ_ASSERT - #define CRY_ASSERT(condition) assert(condition) - #define CRY_ASSERT_MESSAGE(condition, message) assert(condition) - #define CRY_ASSERT_TRACE(condition, parenthese_message) assert(condition) -#endif - -//----------------------------------------------------------------------------------------------------- diff --git a/Code/Legacy/CryCommon/CryAssert_Android.h b/Code/Legacy/CryCommon/CryAssert_Android.h deleted file mode 100644 index e6c285dc9d..0000000000 --- a/Code/Legacy/CryCommon/CryAssert_Android.h +++ /dev/null @@ -1,101 +0,0 @@ -/* - * 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 - * - */ - - -// Description : Assert dialog box for android - - -#ifndef CRYINCLUDE_CRYCOMMON_CRYASSERT_ANDROID_H -#define CRYINCLUDE_CRYCOMMON_CRYASSERT_ANDROID_H -#pragma once - -#if defined(USE_CRY_ASSERT) && defined(ANDROID) - -#include - -static char gs_szMessage[MAX_PATH]; - -void CryAssertTrace(const char* szFormat, ...) -{ - if (gEnv == 0) - { - return; - } - - if (!gEnv->bIgnoreAllAsserts) - { - if (szFormat == NULL) - { - gs_szMessage[0] = '\0'; - } - else - { - va_list args; - va_start(args, szFormat); - vsnprintf(gs_szMessage, sizeof(gs_szMessage), szFormat, args); - va_end(args); - } - } -} - -bool CryAssert(const char* szCondition, const char* szFile, unsigned int line, bool* pIgnore) -{ - if (!gEnv) - { - return true; - } - -#if defined(CRY_ASSERT_DIALOG_ONLY_IN_DEBUG) && !defined(AZ_DEBUG_BUILD) - // we are in a non-debug build, so we should turn this into a warning instead. - if ((gEnv) && (gEnv->pLog)) - { - if (!gEnv->bIgnoreAllAsserts) - { - gEnv->pLog->LogWarning("%s(%u): Assertion failed - \"%s\"", szFile, line, szCondition); - } - } - - if (pIgnore) - { - // avoid showing the same one repeatedly. - *pIgnore = true; - } - return false; -#endif - - gEnv->pSystem->OnAssert(szCondition, gs_szMessage, szFile, line); - - if (!gEnv->bNoAssertDialog && !gEnv->bIgnoreAllAsserts) - { - AZ::NativeUI::AssertAction result; - EBUS_EVENT_RESULT(result, AZ::NativeUI::NativeUIRequestBus, DisplayAssertDialog, gs_szMessage); - - switch (result) - { - case AZ::NativeUI::AssertAction::IGNORE_ASSERT: - return false; - case AZ::NativeUI::AssertAction::IGNORE_ALL_ASSERTS: - gEnv->bNoAssertDialog = true; - gEnv->bIgnoreAllAsserts = true; - return false; - case AZ::NativeUI::AssertAction::BREAK: - return true; - default: - break; - } - - return true; - } - else - { - return false; - } -} - -#endif -#endif // CRYINCLUDE_CRYCOMMON_CRYASSERT_ANDROID_H diff --git a/Code/Legacy/CryCommon/CryAssert_Linux.h b/Code/Legacy/CryCommon/CryAssert_Linux.h deleted file mode 100644 index 112c60a80c..0000000000 --- a/Code/Legacy/CryCommon/CryAssert_Linux.h +++ /dev/null @@ -1,132 +0,0 @@ -/* - * 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 - * - */ - - - -// Description : -// Assert dialog box for LINUX. The linux assert dialog is based on a -// small ncurses application which writes the choice to a file. This -// was chosen since there is no default UI system on Linux. X11 wasn't -// used due to the possibility of the system running another display -// protocol (e.g.: WayLand, Mir) - -#ifndef CRYINCLUDE_CRYCOMMON_CRYASSERT_LINUX_H -#define CRYINCLUDE_CRYCOMMON_CRYASSERT_LINUX_H -#pragma once - -#if defined(USE_CRY_ASSERT) && defined(LINUX) && !defined(ANDROID) - -static char gs_szMessage[MAX_PATH]; - -void CryAssertTrace(const char* szFormat, ...) -{ - if (gEnv == 0) - { - return; - } - - if (!gEnv->bIgnoreAllAsserts) - { - if (szFormat == NULL) - { - gs_szMessage[0] = '\0'; - } - else - { - va_list args; - va_start(args, szFormat); - vsnprintf(gs_szMessage, sizeof(gs_szMessage), szFormat, args); - va_end(args); - } - } -} - -bool CryAssert(const char* szCondition, const char* szFile, unsigned int line, bool* pIgnore) -{ - if (!gEnv) - { - return false; - } - -#if defined(CRY_ASSERT_DIALOG_ONLY_IN_DEBUG) && !defined(AZ_DEBUG_BUILD) - // we are in a non-debug build, so we should turn this into a warning instead. - if (gEnv->pLog) - { - if (!gEnv->bIgnoreAllAsserts) - { - gEnv->pLog->LogWarning("%s(%u): Assertion failed - \"%s\"", szFile, line, szCondition); - } - } - if (pIgnore) - { - // avoid showing the same one repeatedly. - *pIgnore = true; - } - return false; -#endif - - static const int max_len = 4096; - static char gs_command_str[4096]; - static AZStd::recursive_mutex lock; - - gEnv->pSystem->OnAssert(szCondition, gs_szMessage, szFile, line); - - size_t file_len = strlen(szFile); - - if (!gEnv->bNoAssertDialog && !gEnv->bIgnoreAllAsserts) - { - AZStd::scoped_lock lk(lock); - snprintf(gs_command_str, max_len, "xterm -geometry 100x20 -n 'Assert Dialog [Linux Launcher]' -T 'Assert Dialog [Linux Launcher]' -e 'BinLinux/assert_term \"%s\" \"%s\" %d \"%s\"; echo \"$?\" > .assert_return'", - szCondition, (file_len > 60) ? szFile + (file_len - 61) : szFile, line, gs_szMessage); - int ret = system(gs_command_str); - if (ret != 0) - { - CryLogAlways(" Terminal failed to execute"); - return false; - } - - FILE* assert_file = fopen(".assert_return", "r"); - if (!assert_file) - { - CryLogAlways(" Couldn't open assert file"); - return false; - } - int result = -1; - fscanf(assert_file, "%d", &result); - fclose(assert_file); - - switch (result) - { - case 0: - break; - case 1: - *pIgnore = true; - break; - case 2: - gEnv->bIgnoreAllAsserts = true; - break; - case 3: - return true; - break; - case 4: - raise(SIGABRT); - exit(-1); - break; - default: - CryLogAlways(" Unknown result in assert file: %d", result); - return false; - } - } - - - return false; -} - -#endif - -#endif // CRYINCLUDE_CRYCOMMON_CRYASSERT_LINUX_H diff --git a/Code/Legacy/CryCommon/CryAssert_Mac.h b/Code/Legacy/CryCommon/CryAssert_Mac.h deleted file mode 100644 index f0a893630e..0000000000 --- a/Code/Legacy/CryCommon/CryAssert_Mac.h +++ /dev/null @@ -1,107 +0,0 @@ -/* - * 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 - * - */ - - -// Description : Assert dialog box for Mac OS X - - -#ifndef CRYINCLUDE_CRYCOMMON_CRYASSERT_MAC_H -#define CRYINCLUDE_CRYCOMMON_CRYASSERT_MAC_H -#pragma once - -#if defined(USE_CRY_ASSERT) && defined(MAC) -#include - -static char gs_szMessage[MAX_PATH]; - -void CryAssertTrace(const char* szFormat, ...) -{ - if (gEnv == 0) - { - return; - } - - if (!gEnv->bIgnoreAllAsserts) - { - if (szFormat == NULL) - { - gs_szMessage[0] = '\0'; - } - else - { - va_list args; - va_start(args, szFormat); - vsnprintf(gs_szMessage, sizeof(gs_szMessage), szFormat, args); - va_end(args); - } - } -} - -bool CryAssert(const char* szCondition, const char* szFile, unsigned int line, bool* pIgnore) -{ - if (!gEnv) - { - return false; - } - -#if defined(CRY_ASSERT_DIALOG_ONLY_IN_DEBUG) && !defined(AZ_DEBUG_BUILD) - // we are in a non-debug build, so we should turn this into a warning instead. - if ((gEnv) && (gEnv->pLog)) - { - if (!gEnv->bIgnoreAllAsserts) - { - gEnv->pLog->LogWarning("%s(%u): Assertion failed - \"%s\"", szFile, line, szCondition); - } - } - - if (pIgnore) - { - // avoid showing the same one repeatedly. - *pIgnore = true; - } - return false; -#endif - - static const int max_len = 4096; - static char gs_command_str[4096]; - - gEnv->pSystem->OnAssert(szCondition, gs_szMessage, szFile, line); - - size_t file_len = strlen(szFile); - - if (!gEnv->bNoAssertDialog && !gEnv->bIgnoreAllAsserts) - { - AZ::NativeUI::AssertAction result; - EBUS_EVENT_RESULT(result, AZ::NativeUI::NativeUIRequestBus, DisplayAssertDialog, gs_szMessage); - - switch(result) - { - case AZ::NativeUI::AssertAction::IGNORE_ASSERT: - return false; - case AZ::NativeUI::AssertAction::IGNORE_ALL_ASSERTS: - gEnv->bNoAssertDialog = true; - gEnv->bIgnoreAllAsserts = true; - return false; - case AZ::NativeUI::AssertAction::BREAK: - return true; - default: - break; - } - - // For asserts on the Mac always trigger a debug break. Annoying but at least it does not kill the thread like assert() does. - __asm__("int $3"); - } - - - return false; -} - - -#endif - -#endif // CRYINCLUDE_CRYCOMMON_CRYASSERT_MAC_H diff --git a/Code/Legacy/CryCommon/CryAssert_iOS.h b/Code/Legacy/CryCommon/CryAssert_iOS.h deleted file mode 100644 index e7f07eba9b..0000000000 --- a/Code/Legacy/CryCommon/CryAssert_iOS.h +++ /dev/null @@ -1,99 +0,0 @@ -/* - * 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 - * - */ - - -// Description : Assert dialog box for Mac OS X - - -#ifndef CRYINCLUDE_CRYCOMMON_CRYASSERT_IOS_H -#define CRYINCLUDE_CRYCOMMON_CRYASSERT_IOS_H -#pragma once - -#if defined(USE_CRY_ASSERT) && (defined(IOS) - -#include - -static char gs_szMessage[MAX_PATH]; - -void CryAssertTrace(const char* szFormat, ...) -{ - if (gEnv == 0) - { - return; - } - - if (!gEnv->bIgnoreAllAsserts) - { - if (szFormat == NULL) - { - gs_szMessage[0] = '\0'; - } - else - { - va_list args; - va_start(args, szFormat); - vsnprintf(gs_szMessage, sizeof(gs_szMessage), szFormat, args); - va_end(args); - } - } -} - -bool CryAssert(const char* szCondition, const char* szFile, unsigned int line, bool* pIgnore) -{ - if (!gEnv) - { - return false; - } - -#if defined(CRY_ASSERT_DIALOG_ONLY_IN_DEBUG) && !defined(AZ_DEBUG_BUILD) - // we are in a non-debug build, so we should turn this into a warning instead. - if ((gEnv) && (gEnv->pLog)) - { - if (!gEnv->bIgnoreAllAsserts) - { - gEnv->pLog->LogWarning("%s(%u): Assertion failed - \"%s\"", szFile, line, szCondition); - } - } - - if (pIgnore) - { - // avoid showing the same one repeatedly. - *pIgnore = true; - } - return false; -#endif - - gEnv->pSystem->OnAssert(szCondition, gs_szMessage, szFile, line); - - if (!gEnv->bNoAssertDialog && !gEnv->bIgnoreAllAsserts) - { - printf("!!ASSERT!!\n\tCondition: %s\n\tMessage : %s\n\tFile : %s\n\tLine : %d", szCondition, gs_szMessage, szFile, line); - - AZ::NativeUI::AssertAction result; - EBUS_EVENT_RESULT(result, AZ::NativeUI::NativeUIRequestBus, DisplayAssertDialog, gs_szMessage); - - switch(result) - { - case AZ::NativeUI::AssertAction::IGNORE_ASSERT: - return false; - case AZ::NativeUI::AssertAction::IGNORE_ALL_ASSERTS: - gEnv->bNoAssertDialog = true; - gEnv->bIgnoreAllAsserts = true; - return false; - case AZ::NativeUI::AssertAction::BREAK: - return true; - default: - break; - } - } - return false; -} - -#endif - -#endif // CRYINCLUDE_CRYCOMMON_CRYASSERT_IOS_H diff --git a/Code/Legacy/CryCommon/CryAssert_impl.h b/Code/Legacy/CryCommon/CryAssert_impl.h deleted file mode 100644 index 27c4024d42..0000000000 --- a/Code/Legacy/CryCommon/CryAssert_impl.h +++ /dev/null @@ -1,468 +0,0 @@ -/* - * 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 - * - */ - - -// Description : Assert dialog box - -#pragma once - -#if defined(AZ_RESTRICTED_PLATFORM) -#undef AZ_RESTRICTED_SECTION -#define CRYASSERT_IMPL_H_SECTION_1 1 -#define CRYASSERT_IMPL_H_SECTION_2 2 -#endif - -#if defined(USE_CRY_ASSERT) -#if defined(AZ_RESTRICTED_PLATFORM) - #define AZ_RESTRICTED_SECTION CRYASSERT_IMPL_H_SECTION_1 - #include AZ_RESTRICTED_FILE(CryAssert_impl_h) -#endif - -#if defined(APPLE) -#if defined(MAC) -#include "CryAssert_Mac.h" -#else -#include "CryAssert_iOS.h" -#endif -#endif - -#if defined(LINUX) -#if defined(ANDROID) -#include "CryAssert_Android.h" -#else -#include "CryAssert_Linux.h" -#endif -#endif - -#if defined(AZ_RESTRICTED_PLATFORM) - #define AZ_RESTRICTED_SECTION CRYASSERT_IMPL_H_SECTION_2 - #include AZ_RESTRICTED_FILE(CryAssert_impl_h) -#elif defined(WIN32) - -//----------------------------------------------------------------------------------------------------- - -#include - -#include - -//----------------------------------------------------------------------------------------------------- - -#define IDD_DIALOG_ASSERT 101 -#define IDC_CRYASSERT_EDIT_LINE 1000 -#define IDC_CRYASSERT_EDIT_FILE 1001 -#define IDC_CRYASSERT_EDIT_CONDITION 1002 -#define IDC_CRYASSERT_BUTTON_CONTINUE 1003 -#define IDC_CRYASSERT_EDIT_REASON 1004 -#define IDC_CRYASSERT_BUTTON_IGNORE 1005 -#define IDC_CRYASSERT_BUTTON_STOP 1007 -#define IDC_CRYASSERT_BUTTON_BREAK 1008 -#define IDC_CRYASSERT_BUTTON_IGNORE_ALL 1009 - -#define IDC_CRYASSERT_STATIC_TEXT 0 - -#define DLG_TITLE L"Assertion Failed" -#define DLG_FONT L"MS Sans Serif" -#define DLG_ITEM_TEXT_0 L"Continue" -#define DLG_ITEM_TEXT_1 L"Stop" -#define DLG_ITEM_TEXT_2 L"Info" -#define DLG_ITEM_TEXT_3 L"" -#define DLG_ITEM_TEXT_4 L"Line" -#define DLG_ITEM_TEXT_5 L"" -#define DLG_ITEM_TEXT_6 L"File" -#define DLG_ITEM_TEXT_7 L"Condition" -#define DLG_ITEM_TEXT_8 L"" -#define DLG_ITEM_TEXT_9 L"failed" -#define DLG_ITEM_TEXT_10 L"" -#define DLG_ITEM_TEXT_11 L"Reason" -#define DLG_ITEM_TEXT_12 L"Ignore" - -#define DLG_ITEM_TEXT_14 L"Break" -#define DLG_ITEM_TEXT_15 L"Ignore All" - -#define DLG_NB_ITEM 15 - - -template -struct SDlgItem -{ - // If use my struct instead of DLGTEMPLATE, or else (for some strange reason) it is not DWORD aligned !! - DWORD style; - DWORD dwExtendedStyle; - short x; - short y; - short cx; - short cy; - WORD id; - WORD ch; - WORD c; - WCHAR t[iTitleSize]; - WORD dummy; -}; -#define SDLGITEM(TEXT, V) SDlgItem V; - -struct SDlgData -{ - DLGTEMPLATE dlt; - WORD _menu; - WORD _class; - WCHAR _title[sizeof(DLG_TITLE) / 2]; - WORD pointSize; - WCHAR _font[sizeof(DLG_FONT) / 2]; - - SDLGITEM(DLG_ITEM_TEXT_0, i0); - SDLGITEM(DLG_ITEM_TEXT_12, i12); - SDLGITEM(DLG_ITEM_TEXT_15, i15); - SDLGITEM(DLG_ITEM_TEXT_14, i14); - SDLGITEM(DLG_ITEM_TEXT_1, i1); - SDLGITEM(DLG_ITEM_TEXT_2, i2); - SDLGITEM(DLG_ITEM_TEXT_3, i3); - SDLGITEM(DLG_ITEM_TEXT_4, i4); - SDLGITEM(DLG_ITEM_TEXT_5, i5); - SDLGITEM(DLG_ITEM_TEXT_6, i6); - SDLGITEM(DLG_ITEM_TEXT_7, i7); - SDLGITEM(DLG_ITEM_TEXT_8, i8); - SDLGITEM(DLG_ITEM_TEXT_9, i9); - SDLGITEM(DLG_ITEM_TEXT_10, i10); - SDLGITEM(DLG_ITEM_TEXT_11, i11); -}; - -//----------------------------------------------------------------------------------------------------- - -static SDlgData g_dialogRC = -{ - {DS_SETFOREGROUND | DS_MODALFRAME | DS_3DLOOK | DS_SETFONT | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE, 0, DLG_NB_ITEM, 0, 0, 330, 134}, 0, 0, DLG_TITLE, 8, DLG_FONT, - {BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 0, 12, 113, 50, 14, IDC_CRYASSERT_BUTTON_CONTINUE, 0xFFFF, 0x0080, DLG_ITEM_TEXT_0, 0}, - {BS_DEFPUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 0, 66, 113, 50, 14, IDC_CRYASSERT_BUTTON_IGNORE, 0xFFFF, 0x0080, DLG_ITEM_TEXT_12, 0}, - {BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 0, 120, 113, 50, 14, IDC_CRYASSERT_BUTTON_IGNORE_ALL, 0xFFFF, 0x0080, DLG_ITEM_TEXT_15, 0}, - {BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 0, 214, 113, 50, 14, IDC_CRYASSERT_BUTTON_BREAK, 0xFFFF, 0x0080, DLG_ITEM_TEXT_14, 0}, - {BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 0, 268, 113, 50, 14, IDC_CRYASSERT_BUTTON_STOP, 0xFFFF, 0x0080, DLG_ITEM_TEXT_1, 0}, - {BS_GROUPBOX | WS_CHILD | WS_VISIBLE, 0, 7, 7, 316, 100, IDC_CRYASSERT_STATIC_TEXT, 0xFFFF, 0x0080, DLG_ITEM_TEXT_2, 0}, - {ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_BORDER | WS_CHILD | WS_VISIBLE, 0, 50, 48, 25, 13, IDC_CRYASSERT_EDIT_LINE, 0xFFFF, 0x0081, DLG_ITEM_TEXT_3, 0}, - {WS_CHILD | WS_VISIBLE, 0, 14, 50, 14, 8, IDC_CRYASSERT_STATIC_TEXT, 0xFFFF, 0x0082, DLG_ITEM_TEXT_4, 0}, - {ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_BORDER | WS_CHILD | WS_VISIBLE, 0, 50, 32, 240, 13, IDC_CRYASSERT_EDIT_FILE, 0xFFFF, 0x0081, DLG_ITEM_TEXT_5, 0}, - {WS_CHILD | WS_VISIBLE, 0, 14, 34, 12, 8, IDC_CRYASSERT_STATIC_TEXT, 0xFFFF, 0x0082, DLG_ITEM_TEXT_6, 0}, - {WS_CHILD | WS_VISIBLE, 0, 13, 18, 30, 8, IDC_CRYASSERT_STATIC_TEXT, 0xFFFF, 0x0082, DLG_ITEM_TEXT_7, 0}, - {ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_BORDER | WS_CHILD | WS_VISIBLE, 0, 50, 16, 240, 13, IDC_CRYASSERT_EDIT_CONDITION, 0xFFFF, 0x0081, DLG_ITEM_TEXT_8, 0}, - {WS_CHILD | WS_VISIBLE, 0, 298, 19, 18, 8, IDC_CRYASSERT_STATIC_TEXT, 0xFFFF, 0x0082, DLG_ITEM_TEXT_9, 0}, - {ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_BORDER | WS_CHILD | WS_VISIBLE, 0, 50, 67, 240, 13, IDC_CRYASSERT_EDIT_REASON, 0xFFFF, 0x0081, DLG_ITEM_TEXT_10, 0}, - {WS_CHILD | WS_VISIBLE, 0, 15, 69, 26, 8, IDC_CRYASSERT_STATIC_TEXT, 0xFFFF, 0x0082, DLG_ITEM_TEXT_11, 0}, -}; - -//----------------------------------------------------------------------------------------------------- - -struct SCryAssertInfo -{ - const char* pszCondition; - const char* pszFile; - const char* pszMessage; - - unsigned int uiLine; - - enum - { - BUTTON_CONTINUE, - BUTTON_IGNORE, - BUTTON_IGNORE_ALL, - BUTTON_BREAK, - BUTTON_STOP, - BUTTON_REPORT_AS_BUG, - } btnChosen; - - unsigned int uiX; - unsigned int uiY; -}; - -//----------------------------------------------------------------------------------------------------- - -static INT_PTR CALLBACK DlgProc(HWND _hDlg, UINT _uiMsg, WPARAM _wParam, LPARAM _lParam) -{ - static SCryAssertInfo* pAssertInfo = NULL; - - const UINT WM_USER_SHOWFILE_MESSAGE = (WM_USER + 0x4000); - - switch (_uiMsg) - { - case WM_INITDIALOG: - { - pAssertInfo = (SCryAssertInfo*) _lParam; - - SetWindowText(GetDlgItem(_hDlg, IDC_CRYASSERT_EDIT_CONDITION), pAssertInfo->pszCondition); - SetWindowText(GetDlgItem(_hDlg, IDC_CRYASSERT_EDIT_FILE), pAssertInfo->pszFile); - - // Want to move the cursor on the file text, so that the end of the file is the first thing visible, - // instead of the beginning, which will be the user's depot, and the same for pretty much every file. - // Have to do this delayed, because if it's done in WM_INITDIALOG, it doesn't work. - // PostMessage will add this to the end of the message queue. - PostMessage(_hDlg, WM_USER_SHOWFILE_MESSAGE, 0, 0); - - char szLine[MAX_PATH]; - sprintf_s(szLine, "%d", pAssertInfo->uiLine); - SetWindowText(GetDlgItem(_hDlg, IDC_CRYASSERT_EDIT_LINE), szLine); - - if (pAssertInfo->pszMessage && pAssertInfo->pszMessage[0] != '\0') - { - SetWindowText(GetDlgItem(_hDlg, IDC_CRYASSERT_EDIT_REASON), pAssertInfo->pszMessage); - } - else - { - SetWindowText(GetDlgItem(_hDlg, IDC_CRYASSERT_EDIT_REASON), "No Reason"); - } - - SetWindowPos(_hDlg, HWND_TOPMOST, pAssertInfo->uiX, pAssertInfo->uiY, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE); - - break; - } - - case WM_USER_SHOWFILE_MESSAGE: - { - // Still have to delay sending this message, or it won't work for some reason. - // Windows does a whole bunch of stuff behind the scenes. Using PostMessage here seems to work better. - PostMessage(GetDlgItem(_hDlg, IDC_CRYASSERT_EDIT_FILE), EM_SETSEL, strlen(pAssertInfo->pszFile), -1); - break; - } - - case WM_COMMAND: - { - switch (LOWORD(_wParam)) - { - case IDCANCEL: - case IDC_CRYASSERT_BUTTON_CONTINUE: - { - pAssertInfo->btnChosen = SCryAssertInfo::BUTTON_CONTINUE; - EndDialog(_hDlg, 0); - break; - } - case IDC_CRYASSERT_BUTTON_IGNORE: - { - pAssertInfo->btnChosen = SCryAssertInfo::BUTTON_IGNORE; - EndDialog(_hDlg, 0); - break; - } - case IDC_CRYASSERT_BUTTON_IGNORE_ALL: - { - pAssertInfo->btnChosen = SCryAssertInfo::BUTTON_IGNORE_ALL; - EndDialog(_hDlg, 0); - break; - } - case IDC_CRYASSERT_BUTTON_BREAK: - { - pAssertInfo->btnChosen = SCryAssertInfo::BUTTON_BREAK; - EndDialog(_hDlg, 0); - break; - } - case IDC_CRYASSERT_BUTTON_STOP: - { - pAssertInfo->btnChosen = SCryAssertInfo::BUTTON_STOP; - EndDialog(_hDlg, 1); - break; - } - default: - break; - } - ; - break; - } - - case WM_DESTROY: - { - if (pAssertInfo) - { - RECT rcWindowBounds; - GetWindowRect(_hDlg, &rcWindowBounds); - pAssertInfo->uiX = rcWindowBounds.left; - pAssertInfo->uiY = rcWindowBounds.top; - } - break; - } - - default: - return FALSE; - } - ; - - return TRUE; -} - -//----------------------------------------------------------------------------------------------------- - -static char gs_szMessage[MAX_PATH]; - -//----------------------------------------------------------------------------------------------------- - -void CryAssertTrace(const char* _pszFormat, ...) -{ - if (gEnv == 0) - { - return; - } - if (!gEnv->bIgnoreAllAsserts) - { - if (NULL == _pszFormat) - { - gs_szMessage[0] = '\0'; - } - else - { - va_list args; - va_start(args, _pszFormat); - vsnprintf_s(gs_szMessage, sizeof(gs_szMessage), _TRUNCATE, _pszFormat, args); - va_end(args); - } - } -} - -//----------------------------------------------------------------------------------------------------- - -static const char* gs_strRegSubKey = "Software\\O3DE\\AssertWindow"; -static const char* gs_strRegXValue = "AssertInfoX"; -static const char* gs_strRegYValue = "AssertInfoY"; - -//----------------------------------------------------------------------------------------------------- - -void RegistryReadUInt32(const char* _strSubKey, const char* _strRegName, unsigned int* _puiValue, unsigned int _uiDefault) -{ - HKEY hKey; - RegCreateKeyEx(HKEY_CURRENT_USER, _strSubKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL); - - DWORD dwType; - DWORD dwLength = sizeof(DWORD); - - if (ERROR_SUCCESS != RegQueryValueEx(hKey, _strRegName, 0, &dwType, (BYTE*) _puiValue, &dwLength)) - { - *_puiValue = _uiDefault; - } - - RegCloseKey(hKey); -} - -//----------------------------------------------------------------------------------------------------- - -void RegistryWriteUInt32(const char* _strSubKey, const char* _strRegName, unsigned int _uiValue) -{ - HKEY hKey; - RegCreateKeyEx(HKEY_CURRENT_USER, _strSubKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL); - RegSetValueEx (hKey, _strRegName, 0, REG_DWORD, (BYTE*) &_uiValue, sizeof(DWORD)); - RegCloseKey (hKey); -} - -//----------------------------------------------------------------------------------------------------- - -class CCursorShowerWithStack -{ -public: - void StoreCurrentAndShow() - { - m_numberOfShows = 1; - - while (ShowCursor(TRUE) < 0) - { - ++m_numberOfShows; - } - } - - void RevertToPrevious() - { - while (m_numberOfShows > 0) - { - ShowCursor(FALSE); - --m_numberOfShows; - } - } - -private: - int m_numberOfShows; -}; - -bool CryAssert(const char* _pszCondition, const char* _pszFile, unsigned int _uiLine, bool* _pbIgnore) -{ - if (!gEnv) - { - return false; - } - -#if defined(CRY_ASSERT_DIALOG_ONLY_IN_DEBUG) && !defined(AZ_DEBUG_BUILD) - // we are in a non-debug build, so we should turn this into a warning instead. - if ((gEnv) && (gEnv->pLog)) - { - if (!gEnv->bIgnoreAllAsserts) - { - gEnv->pLog->LogWarning("%s(%u): Assertion failed - \"%s\"", _pszFile, _uiLine, _pszCondition); - } - } - - if (_pbIgnore) - { - // avoid showing the same one repeatedly. - *_pbIgnore = true; - } - return false; -#endif - - if (!gEnv->bNoAssertDialog && !gEnv->bIgnoreAllAsserts) - { - SCryAssertInfo assertInfo; - - assertInfo.pszCondition = _pszCondition; - assertInfo.pszFile = _pszFile; - assertInfo.pszMessage = gs_szMessage; - assertInfo.uiLine = _uiLine; - assertInfo.btnChosen = SCryAssertInfo::BUTTON_CONTINUE; - - gEnv->pSystem->SetAssertVisible(true); - RegistryReadUInt32(gs_strRegSubKey, gs_strRegXValue, &assertInfo.uiX, 10); - RegistryReadUInt32(gs_strRegSubKey, gs_strRegYValue, &assertInfo.uiY, 10); - - CCursorShowerWithStack cursorShowerWithStack; - cursorShowerWithStack.StoreCurrentAndShow(); - - DialogBoxIndirectParam(GetModuleHandle(NULL), (DLGTEMPLATE*) &g_dialogRC, GetDesktopWindow(), DlgProc, (LPARAM) &assertInfo); - - cursorShowerWithStack.RevertToPrevious(); - - RegistryWriteUInt32(gs_strRegSubKey, gs_strRegXValue, assertInfo.uiX); - RegistryWriteUInt32(gs_strRegSubKey, gs_strRegYValue, assertInfo.uiY); - gEnv->pSystem->SetAssertVisible(false); - - switch (assertInfo.btnChosen) - { - case SCryAssertInfo::BUTTON_IGNORE: - *_pbIgnore = true; - break; - case SCryAssertInfo::BUTTON_IGNORE_ALL: - gEnv->bIgnoreAllAsserts = true; - break; - case SCryAssertInfo::BUTTON_BREAK: - return true; - case SCryAssertInfo::BUTTON_STOP: - raise(SIGABRT); - exit(-1); - case SCryAssertInfo::BUTTON_REPORT_AS_BUG: - if (gEnv && gEnv->pSystem) - { - const char* pszSafeMessage = (assertInfo.pszMessage && assertInfo.pszMessage[0]) ? assertInfo.pszMessage : ""; - gEnv->pSystem->ReportBug("Assert: %s - %s", assertInfo.pszCondition, pszSafeMessage); - } - break; - } - } - - if (gEnv && gEnv->pSystem) - { - // this also can cause fatal / shutdown behavior: - gEnv->pSystem->OnAssert(_pszCondition, gs_szMessage, _pszFile, _uiLine); - } - - return false; -} - -//----------------------------------------------------------------------------------------------------- - -#endif -#endif - -//----------------------------------------------------------------------------------------------------- diff --git a/Code/Legacy/CryCommon/ISystem.h b/Code/Legacy/CryCommon/ISystem.h index 6fdc8b52fe..50f7fccfcb 100644 --- a/Code/Legacy/CryCommon/ISystem.h +++ b/Code/Legacy/CryCommon/ISystem.h @@ -1295,15 +1295,7 @@ namespace Detail #endif -#if defined(USE_CRY_ASSERT) -static void AssertConsoleExists(void) -{ - CRY_ASSERT(gEnv->pConsole != NULL); -} -#define ASSERT_CONSOLE_EXISTS AssertConsoleExists() -#else #define ASSERT_CONSOLE_EXISTS 0 -#endif // defined(USE_CRY_ASSERT) // the following macros allow the help text to be easily stripped out diff --git a/Code/Legacy/CryCommon/WinBase.cpp b/Code/Legacy/CryCommon/WinBase.cpp index 3445637d28..771cde324e 100644 --- a/Code/Legacy/CryCommon/WinBase.cpp +++ b/Code/Legacy/CryCommon/WinBase.cpp @@ -712,16 +712,6 @@ DWORD Sleep(DWORD dwMilliseconds) #endif } -////////////////////////////////////////////////////////////////////////// -DWORD SleepEx(DWORD dwMilliseconds, BOOL /*bAlertable*/) -{ - //TODO: implement - // CRY_ASSERT_MESSAGE(0, "SleepEx not implemented yet"); - printf("SleepEx not properly implemented yet\n"); - Sleep(dwMilliseconds); - return 0; -} - #if defined(LINUX) || defined(APPLE) BOOL GetComputerName(LPSTR lpBuffer, LPDWORD lpnSize) { diff --git a/Code/Legacy/CryCommon/crycommon_files.cmake b/Code/Legacy/CryCommon/crycommon_files.cmake index a4d87c207a..e1117b6f52 100644 --- a/Code/Legacy/CryCommon/crycommon_files.cmake +++ b/Code/Legacy/CryCommon/crycommon_files.cmake @@ -85,11 +85,6 @@ set(FILES MathConversion.h AndroidSpecific.h AppleSpecific.h - CryAssert_Android.h - CryAssert_impl.h - CryAssert_iOS.h - CryAssert_Linux.h - CryAssert_Mac.h Linux32Specific.h Linux64Specific.h Linux_Win32Wrapper.h diff --git a/Code/Legacy/CryCommon/platform.h b/Code/Legacy/CryCommon/platform.h index d67c0b902c..d2251c7091 100644 --- a/Code/Legacy/CryCommon/platform.h +++ b/Code/Legacy/CryCommon/platform.h @@ -238,12 +238,6 @@ ILINE DestinationType alias_cast(SourceType pPtr) // Assert dialog box macros #include "CryAssert.h" -// Replace standard assert calls by our custom one -// Works only ifdef USE_CRY_ASSERT && _DEBUG && WIN32 -#ifndef assert -#define assert CRY_ASSERT -#endif - ////////////////////////////////////////////////////////////////////////// // Platform dependent functions that emulate Win32 API. // Mostly used only for debugging! diff --git a/Code/Legacy/CryCommon/platform_impl.cpp b/Code/Legacy/CryCommon/platform_impl.cpp index 64aa7ce1ca..8cbc58ad95 100644 --- a/Code/Legacy/CryCommon/platform_impl.cpp +++ b/Code/Legacy/CryCommon/platform_impl.cpp @@ -157,10 +157,6 @@ void __stl_debug_message(const char* format_str, ...) #include #endif -#if defined(APPLE) || defined(LINUX) -#include "CryAssert_impl.h" -#endif - #if defined(AZ_RESTRICTED_PLATFORM) #define AZ_RESTRICTED_SECTION PLATFORM_IMPL_H_SECTION_CRY_SYSTEM_FUNCTIONS #include AZ_RESTRICTED_FILE(platform_impl_h) @@ -168,8 +164,6 @@ void __stl_debug_message(const char* format_str, ...) #if defined (_WIN32) -#include "CryAssert_impl.h" - ////////////////////////////////////////////////////////////////////////// void CrySleep(unsigned int dwMilliseconds) { diff --git a/Code/Legacy/CrySystem/AZCoreLogSink.h b/Code/Legacy/CrySystem/AZCoreLogSink.h index 9d732b3dd4..6146de7560 100644 --- a/Code/Legacy/CrySystem/AZCoreLogSink.h +++ b/Code/Legacy/CrySystem/AZCoreLogSink.h @@ -77,64 +77,11 @@ public: bool OnPreAssert(const char* fileName, int line, const char* func, const char* message) override { -#if defined(USE_CRY_ASSERT) && AZ_LEGACY_CRYSYSTEM_TRAIT_DO_PREASSERT - AZ::Crc32 crc; - crc.Add(&line, sizeof(line)); - if (fileName) - { - crc.Add(fileName, strlen(fileName)); - } - - bool* ignore = nullptr; - auto foundIter = m_ignoredAsserts->find(crc); - if (foundIter == m_ignoredAsserts->end()) - { - ignore = &((*m_ignoredAsserts)[crc]); - *ignore = false; - } - else - { - ignore = &((*m_ignoredAsserts)[crc]); - } - - if (!(*ignore)) - { - using namespace AZ::Debug; - - Trace::Output(nullptr, "\n==================================================================\n"); - AZ::OSString outputMsg = AZ::OSString::format("Trace::Assert\n %s(%d): '%s'\n%s\n", fileName, line, func, message); - Trace::Output(nullptr, outputMsg.c_str()); - - // Suppress 3 in stack depth - this function, the bus broadcast that got us here, and Trace::Assert - Trace::Output(nullptr, "------------------------------------------------\n"); - Trace::PrintCallstack(nullptr, 3); - Trace::Output(nullptr, "\n==================================================================\n"); - - AZ::EnvironmentVariable inEditorBatchMode = AZ::Environment::FindVariable("InEditorBatchMode"); - if (!inEditorBatchMode.IsConstructed() || !inEditorBatchMode.Get()) - { - // Note - CryAssertTrace doesn't actually print any info to logging - // it just stores the message internally for the message box in CryAssert to use - CryAssertTrace("%s", message); - if (CryAssert("Assertion failed", fileName, line, ignore) || Trace::IsDebuggerPresent()) - { - Trace::Break(); - } - } - } - else - { - CryLogAlways("%s", message); - } - - return m_suppressSystemOutput; -#else AZ_UNUSED(fileName); AZ_UNUSED(line); AZ_UNUSED(func); AZ_UNUSED(message); return false; // allow AZCore to do its default behavior. This usually results in an application shutdown. -#endif } bool OnPreError(const char* window, const char* fileName, int line, const char* func, const char* message) override diff --git a/Code/Legacy/CrySystem/System.cpp b/Code/Legacy/CrySystem/System.cpp index 7cf066f72e..47a9cbd5ef 100644 --- a/Code/Legacy/CrySystem/System.cpp +++ b/Code/Legacy/CrySystem/System.cpp @@ -1280,10 +1280,7 @@ void CSystem::RegisterWindowMessageHandler(IWindowMessageHandler* pHandler) void CSystem::UnregisterWindowMessageHandler(IWindowMessageHandler* pHandler) { #if AZ_LEGACY_CRYSYSTEM_TRAIT_USE_MESSAGE_HANDLER -#if !defined(NDEBUG) - bool bRemoved = -#endif - stl::find_and_erase(m_windowMessageHandlers, pHandler); + [[maybe_unused]] bool bRemoved = stl::find_and_erase(m_windowMessageHandlers, pHandler); assert(pHandler && bRemoved && "This IWindowMessageHandler was not registered"); #else CRY_ASSERT(false && "This platform does not support window message handlers"); diff --git a/Code/Legacy/CrySystem/System.h b/Code/Legacy/CrySystem/System.h index 664f5385fa..9b76e94eb4 100644 --- a/Code/Legacy/CrySystem/System.h +++ b/Code/Legacy/CrySystem/System.h @@ -53,11 +53,6 @@ class CWatchdogThread; #define AZ_LEGACY_CRYSYSTEM_TRAIT_ALLOW_CREATE_BACKUP_LOG_FILE 1 #endif -////////////////////////////////////////////////////////////////////////// -#if defined(WIN32) || defined(APPLE) || defined(LINUX) -#define AZ_LEGACY_CRYSYSTEM_TRAIT_DO_PREASSERT 1 -#endif - #if defined(LINUX) || defined(APPLE) #define AZ_LEGACY_CRYSYSTEM_TRAIT_FORWARD_EXCEPTION_POINTERS 1 #endif @@ -72,9 +67,7 @@ class CWatchdogThread; #define AZ_LEGACY_CRYSYSTEM_TRAIT_DEBUGCALLSTACK_APPEND_MODULENAME 1 #endif -#if 1 #define AZ_LEGACY_CRYSYSTEM_TRAIT_USE_EXCLUDEUPDATE_ON_CONSOLE 0 -#endif #if defined(WIN32) #define AZ_LEGACY_CRYSYSTEM_TRAIT_USE_MESSAGE_HANDLER 1 #endif diff --git a/Gems/Maestro/Code/Source/Cinematics/Movie.cpp b/Gems/Maestro/Code/Source/Cinematics/Movie.cpp index 51be8a4c24..800b95a2e4 100644 --- a/Gems/Maestro/Code/Source/Cinematics/Movie.cpp +++ b/Gems/Maestro/Code/Source/Cinematics/Movie.cpp @@ -1554,8 +1554,8 @@ void CMovieSystem::ControlCapture() { #if !defined(NDEBUG) bool bBothStartAndEnd = m_bStartCapture && m_bEndCapture; -#endif assert(!bBothStartAndEnd); +#endif bool bAllCVarsReady = m_cvar_capture_frame_once && m_cvar_capture_folder && m_cvar_capture_frames; From e7683fa0f899699bc254ac3be30a6c4d75f5be4a Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 8 Nov 2021 15:45:57 -0800 Subject: [PATCH 089/284] =?UTF-8?q?=EF=BB=BFremoves=20BaseLibrary/Item/Man?= =?UTF-8?q?ager=20unused=20code=20from=20Code/Editor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Editor/ErrorReport.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Code/Editor/ErrorReport.h b/Code/Editor/ErrorReport.h index 98d230e383..2ede92a8fe 100644 --- a/Code/Editor/ErrorReport.h +++ b/Code/Editor/ErrorReport.h @@ -17,7 +17,7 @@ // forward declarations. class CParticleItem; -#include +#include "BaseLibraryItem.h" #include #include "Objects/BaseObject.h" From 4ec420e62aac234f14f557d9a2fee08e6792608c Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 10 Nov 2021 15:48:42 -0800 Subject: [PATCH 090/284] =?UTF-8?q?=EF=BB=BFRemoves=20PrefabEntityOwnershi?= =?UTF-8?q?pService=20from=20AzFramework?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Entity/PrefabEntityOwnershipService.h | 20 ------------------- .../AzFramework/azframework_files.cmake | 1 - 2 files changed, 21 deletions(-) delete mode 100644 Code/Framework/AzFramework/AzFramework/Entity/PrefabEntityOwnershipService.h diff --git a/Code/Framework/AzFramework/AzFramework/Entity/PrefabEntityOwnershipService.h b/Code/Framework/AzFramework/AzFramework/Entity/PrefabEntityOwnershipService.h deleted file mode 100644 index ac24af880a..0000000000 --- a/Code/Framework/AzFramework/AzFramework/Entity/PrefabEntityOwnershipService.h +++ /dev/null @@ -1,20 +0,0 @@ -/* - * 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 - -#include - -namespace AzFramework -{ - class PrefabEntityOwnershipService - : public EntityOwnershipService - { - - }; -} diff --git a/Code/Framework/AzFramework/AzFramework/azframework_files.cmake b/Code/Framework/AzFramework/AzFramework/azframework_files.cmake index 9693d75b06..511439ab10 100644 --- a/Code/Framework/AzFramework/AzFramework/azframework_files.cmake +++ b/Code/Framework/AzFramework/AzFramework/azframework_files.cmake @@ -120,7 +120,6 @@ set(FILES Entity/SliceGameEntityOwnershipService.h Entity/SliceGameEntityOwnershipService.cpp Entity/SliceGameEntityOwnershipServiceBus.h - Entity/PrefabEntityOwnershipService.h Components/ComponentAdapter.h Components/ComponentAdapter.inl Components/ComponentAdapterHelpers.h From 1d93290a1c3df1a2060f5b4beadcb90a0761410c Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 11 Nov 2021 13:47:13 -0800 Subject: [PATCH 091/284] Revert "Removes PrefabEntityOwnershipService from AzFramework" This reverts commit e2d2cb07a0a1431f8fcdd20ee07ff2788ed603c0. Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Entity/PrefabEntityOwnershipService.cpp | 13 ++++++++++++ .../Entity/PrefabEntityOwnershipService.h | 20 +++++++++++++++++++ .../AzFramework/azframework_files.cmake | 2 ++ 3 files changed, 35 insertions(+) create mode 100644 Code/Framework/AzFramework/AzFramework/Entity/PrefabEntityOwnershipService.cpp create mode 100644 Code/Framework/AzFramework/AzFramework/Entity/PrefabEntityOwnershipService.h diff --git a/Code/Framework/AzFramework/AzFramework/Entity/PrefabEntityOwnershipService.cpp b/Code/Framework/AzFramework/AzFramework/Entity/PrefabEntityOwnershipService.cpp new file mode 100644 index 0000000000..9b2c432332 --- /dev/null +++ b/Code/Framework/AzFramework/AzFramework/Entity/PrefabEntityOwnershipService.cpp @@ -0,0 +1,13 @@ +/* + * 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 + +namespace AzFramework +{ +} diff --git a/Code/Framework/AzFramework/AzFramework/Entity/PrefabEntityOwnershipService.h b/Code/Framework/AzFramework/AzFramework/Entity/PrefabEntityOwnershipService.h new file mode 100644 index 0000000000..ac24af880a --- /dev/null +++ b/Code/Framework/AzFramework/AzFramework/Entity/PrefabEntityOwnershipService.h @@ -0,0 +1,20 @@ +/* + * 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 + +#include + +namespace AzFramework +{ + class PrefabEntityOwnershipService + : public EntityOwnershipService + { + + }; +} diff --git a/Code/Framework/AzFramework/AzFramework/azframework_files.cmake b/Code/Framework/AzFramework/AzFramework/azframework_files.cmake index 511439ab10..9af049a7c1 100644 --- a/Code/Framework/AzFramework/AzFramework/azframework_files.cmake +++ b/Code/Framework/AzFramework/AzFramework/azframework_files.cmake @@ -120,6 +120,8 @@ set(FILES Entity/SliceGameEntityOwnershipService.h Entity/SliceGameEntityOwnershipService.cpp Entity/SliceGameEntityOwnershipServiceBus.h + Entity/PrefabEntityOwnershipService.h + Entity/PrefabEntityOwnershipService.cpp Components/ComponentAdapter.h Components/ComponentAdapter.inl Components/ComponentAdapterHelpers.h From 4cc54941c71976f5c388311243ec5bab81141e18 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Fri, 12 Nov 2021 12:25:29 -0800 Subject: [PATCH 092/284] =?UTF-8?q?=EF=BB=BFCleanup=20before=20merge?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Entity/PrefabEntityOwnershipService.cpp | 13 ------------- .../AzFramework/AzFramework/azframework_files.cmake | 1 - scripts/cleanup/unusued_compilation.py | 2 ++ 3 files changed, 2 insertions(+), 14 deletions(-) delete mode 100644 Code/Framework/AzFramework/AzFramework/Entity/PrefabEntityOwnershipService.cpp diff --git a/Code/Framework/AzFramework/AzFramework/Entity/PrefabEntityOwnershipService.cpp b/Code/Framework/AzFramework/AzFramework/Entity/PrefabEntityOwnershipService.cpp deleted file mode 100644 index 9b2c432332..0000000000 --- a/Code/Framework/AzFramework/AzFramework/Entity/PrefabEntityOwnershipService.cpp +++ /dev/null @@ -1,13 +0,0 @@ -/* - * 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 - -namespace AzFramework -{ -} diff --git a/Code/Framework/AzFramework/AzFramework/azframework_files.cmake b/Code/Framework/AzFramework/AzFramework/azframework_files.cmake index 9af049a7c1..9693d75b06 100644 --- a/Code/Framework/AzFramework/AzFramework/azframework_files.cmake +++ b/Code/Framework/AzFramework/AzFramework/azframework_files.cmake @@ -121,7 +121,6 @@ set(FILES Entity/SliceGameEntityOwnershipService.cpp Entity/SliceGameEntityOwnershipServiceBus.h Entity/PrefabEntityOwnershipService.h - Entity/PrefabEntityOwnershipService.cpp Components/ComponentAdapter.h Components/ComponentAdapter.inl Components/ComponentAdapterHelpers.h diff --git a/scripts/cleanup/unusued_compilation.py b/scripts/cleanup/unusued_compilation.py index 1f1a9894c7..65f4626a8c 100644 --- a/scripts/cleanup/unusued_compilation.py +++ b/scripts/cleanup/unusued_compilation.py @@ -68,6 +68,8 @@ def is_excluded(file): for path_exclusion in PATH_EXCLUSIONS: if fnmatch.fnmatch(file, path_exclusion): return True + if '\\Template\\' in normalized_file: + return True with open(file, 'r') as file: contents = file.read() for exclusion_term in EXCLUSIONS: From f0b86ab1df5d4f6c47631c194c7c625290cbdd94 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Fri, 12 Nov 2021 17:25:14 -0800 Subject: [PATCH 093/284] =?UTF-8?q?=EF=BB=BFcleanup=20script=20updates?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- scripts/cleanup/unusued_compilation.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/scripts/cleanup/unusued_compilation.py b/scripts/cleanup/unusued_compilation.py index 65f4626a8c..ee46d98b91 100644 --- a/scripts/cleanup/unusued_compilation.py +++ b/scripts/cleanup/unusued_compilation.py @@ -68,8 +68,6 @@ def is_excluded(file): for path_exclusion in PATH_EXCLUSIONS: if fnmatch.fnmatch(file, path_exclusion): return True - if '\\Template\\' in normalized_file: - return True with open(file, 'r') as file: contents = file.read() for exclusion_term in EXCLUSIONS: @@ -78,7 +76,7 @@ def is_excluded(file): return False def filter_from_processed(filelist, filter_file_path): - filelist = set([f for f in filelist if not is_excluded(f)]) + filelist = [f for f in filelist if not is_excluded(f)] if os.path.exists(filter_file_path): with open(filter_file_path, 'r') as filter_file: processed_files = [s.strip() for s in filter_file.readlines()] @@ -93,7 +91,6 @@ def cleanup_unused_compilation(path): # starting over. Removing the "unusued_compilation_processed.txt" will start over. filter_file_path = os.path.join(os.getcwd(), 'unusued_compilation_processed.txt') filelist = filter_from_processed(filelist, filter_file_path) - sorted_filelist = sorted(filelist) # 3. For each file total_files = len(sorted_filelist) current_files = 1 From 893f50355f9350917cc18a195e73f1e593573233 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Fri, 12 Nov 2021 17:25:14 -0800 Subject: [PATCH 094/284] cleanup script updates Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- scripts/cleanup/unusued_compilation.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/scripts/cleanup/unusued_compilation.py b/scripts/cleanup/unusued_compilation.py index ee46d98b91..29a5a69648 100644 --- a/scripts/cleanup/unusued_compilation.py +++ b/scripts/cleanup/unusued_compilation.py @@ -39,6 +39,17 @@ PATH_EXCLUSIONS = ( 'install\\*', 'Code\\Framework\\AzCore\\AzCore\\Android\\*' ) +PATH_EXCLUSIONS = ( + '*\\Platform\\Android\\*', + '*\\Platform\\Common\\*', + '*\\Platform\\iOS\\*', + '*\\Platform\\Linux\\*', + '*\\Platform\\Mac\\*', + 'Templates\\*', + 'python\\*', + 'build\\*', + 'install\\*' +) def create_filelist(path): filelist = set() From 7ee0a0454ec6decb97f614f71b78272103a4bb4a Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Fri, 12 Nov 2021 19:03:29 -0800 Subject: [PATCH 095/284] =?UTF-8?q?=EF=BB=BFmore=20filters/using=20reverse?= =?UTF-8?q?=20on=20this=20node?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- scripts/cleanup/unusued_compilation.py | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/scripts/cleanup/unusued_compilation.py b/scripts/cleanup/unusued_compilation.py index 29a5a69648..aa582d59ab 100644 --- a/scripts/cleanup/unusued_compilation.py +++ b/scripts/cleanup/unusued_compilation.py @@ -39,17 +39,7 @@ PATH_EXCLUSIONS = ( 'install\\*', 'Code\\Framework\\AzCore\\AzCore\\Android\\*' ) -PATH_EXCLUSIONS = ( - '*\\Platform\\Android\\*', - '*\\Platform\\Common\\*', - '*\\Platform\\iOS\\*', - '*\\Platform\\Linux\\*', - '*\\Platform\\Mac\\*', - 'Templates\\*', - 'python\\*', - 'build\\*', - 'install\\*' -) + def create_filelist(path): filelist = set() @@ -102,6 +92,7 @@ def cleanup_unused_compilation(path): # starting over. Removing the "unusued_compilation_processed.txt" will start over. filter_file_path = os.path.join(os.getcwd(), 'unusued_compilation_processed.txt') filelist = filter_from_processed(filelist, filter_file_path) + sorted_filelist = sorted(filelist, reverse=True) # 3. For each file total_files = len(sorted_filelist) current_files = 1 From b4cbffed068198ac5b574428779b06277caa98a3 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Fri, 12 Nov 2021 19:02:07 -0800 Subject: [PATCH 096/284] =?UTF-8?q?=EF=BB=BFMore=20filters?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- scripts/cleanup/unusued_compilation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/cleanup/unusued_compilation.py b/scripts/cleanup/unusued_compilation.py index aa582d59ab..6ad1e2da4d 100644 --- a/scripts/cleanup/unusued_compilation.py +++ b/scripts/cleanup/unusued_compilation.py @@ -92,7 +92,7 @@ def cleanup_unused_compilation(path): # starting over. Removing the "unusued_compilation_processed.txt" will start over. filter_file_path = os.path.join(os.getcwd(), 'unusued_compilation_processed.txt') filelist = filter_from_processed(filelist, filter_file_path) - sorted_filelist = sorted(filelist, reverse=True) + sorted_filelist = sorted(filelist) # 3. For each file total_files = len(sorted_filelist) current_files = 1 From 4ca4bb3618487ec8e5fb260d3f59d327b1488bb6 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 15 Nov 2021 14:04:05 -0800 Subject: [PATCH 097/284] some more exclussions Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- scripts/cleanup/unusued_compilation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/cleanup/unusued_compilation.py b/scripts/cleanup/unusued_compilation.py index 6ad1e2da4d..4515a663af 100644 --- a/scripts/cleanup/unusued_compilation.py +++ b/scripts/cleanup/unusued_compilation.py @@ -77,7 +77,7 @@ def is_excluded(file): return False def filter_from_processed(filelist, filter_file_path): - filelist = [f for f in filelist if not is_excluded(f)] + filelist = set([f for f in filelist if not is_excluded(f)]) if os.path.exists(filter_file_path): with open(filter_file_path, 'r') as filter_file: processed_files = [s.strip() for s in filter_file.readlines()] From 61948fdc995ec1d651ebc60b132e09acd3580a2b Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 22 Nov 2021 15:21:33 -0800 Subject: [PATCH 098/284] Removes TitleBarPage from AzQtComponents/Gallery Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Gallery/ComponentDemoWidget.cpp | 2 - .../AzQtComponents/Gallery/TitleBarPage.cpp | 74 -------- .../AzQtComponents/Gallery/TitleBarPage.h | 29 ---- .../AzQtComponents/Gallery/TitleBarPage.ui | 162 ------------------ .../azqtcomponents_gallery_files.cmake | 3 - 5 files changed, 270 deletions(-) delete mode 100644 Code/Framework/AzQtComponents/AzQtComponents/Gallery/TitleBarPage.cpp delete mode 100644 Code/Framework/AzQtComponents/AzQtComponents/Gallery/TitleBarPage.h delete mode 100644 Code/Framework/AzQtComponents/AzQtComponents/Gallery/TitleBarPage.ui diff --git a/Code/Framework/AzQtComponents/AzQtComponents/Gallery/ComponentDemoWidget.cpp b/Code/Framework/AzQtComponents/AzQtComponents/Gallery/ComponentDemoWidget.cpp index 485803f9ae..fb775dfb88 100644 --- a/Code/Framework/AzQtComponents/AzQtComponents/Gallery/ComponentDemoWidget.cpp +++ b/Code/Framework/AzQtComponents/AzQtComponents/Gallery/ComponentDemoWidget.cpp @@ -37,7 +37,6 @@ #include "SvgLabelPage.h" #include "TableViewPage.h" #include "TabWidgetPage.h" -#include "TitleBarPage.h" #include "ToggleSwitchPage.h" #include "ToolBarPage.h" #include "TreeViewPage.h" @@ -101,7 +100,6 @@ ComponentDemoWidget::ComponentDemoWidget(QWidget* parent) // Pages hidden in 1.25 release - unused components, still need work before being made public, or not interesting for external devs //sortedPages.insert("AssetBrowserFolder", new AssetBrowserFolderPage(this)); - //sortedPages.insert("Titlebar", new TitleBarPage(this)); for (const auto& title : sortedPages.keys()) { diff --git a/Code/Framework/AzQtComponents/AzQtComponents/Gallery/TitleBarPage.cpp b/Code/Framework/AzQtComponents/AzQtComponents/Gallery/TitleBarPage.cpp deleted file mode 100644 index 58ca3c101b..0000000000 --- a/Code/Framework/AzQtComponents/AzQtComponents/Gallery/TitleBarPage.cpp +++ /dev/null @@ -1,74 +0,0 @@ -/* - * 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 "TitleBarPage.h" -#include - -TitleBarPage::TitleBarPage(QWidget* parent) - : QWidget(parent) - , ui(new Ui::TitleBarPage) -{ - using namespace AzQtComponents; - - ui->setupUi(this); - - ui->activeSimpleTitleBar->setDrawSimple(true); - ui->activeSimpleButtonsTitleBar->setDrawSimple(true); - ui->inactiveSimpleTitleBar->setDrawSimple(true); - ui->inactiveSimpleButtonsTitleBar->setDrawSimple(true); - - ui->activeTearTitleBar->setTearEnabled(true); - ui->activeTearButtonsTitleBar->setTearEnabled(true); - ui->inactiveTearTitleBar->setTearEnabled(true); - ui->inactiveTearButtonsTitleBar->setTearEnabled(true); - - ui->inactiveTitleBar->setForceInactive(true); - ui->inactiveButtonsTitleBar->setForceInactive(true); - ui->inactiveSimpleTitleBar->setForceInactive(true); - ui->inactiveSimpleButtonsTitleBar->setForceInactive(true); - ui->inactiveTearTitleBar->setForceInactive(true); - ui->inactiveTearButtonsTitleBar->setForceInactive(true); - - ui->activeButtonsTitleBar->setButtons( - { DockBarButton::DividerButton, DockBarButton::MinimizeButton, - DockBarButton::DividerButton, DockBarButton::MaximizeButton, - DockBarButton::DividerButton, DockBarButton::CloseButton}); - ui->activeSimpleButtonsTitleBar->setButtons( - { DockBarButton::DividerButton, DockBarButton::MinimizeButton, - DockBarButton::DividerButton, DockBarButton::MaximizeButton, - DockBarButton::DividerButton, DockBarButton::CloseButton}); - ui->activeTearButtonsTitleBar->setButtons( - { DockBarButton::DividerButton, DockBarButton::MinimizeButton, - DockBarButton::DividerButton, DockBarButton::MaximizeButton, - DockBarButton::DividerButton, DockBarButton::CloseButton}); - ui->inactiveButtonsTitleBar->setButtons( - { DockBarButton::DividerButton, DockBarButton::MinimizeButton, - DockBarButton::DividerButton, DockBarButton::MaximizeButton, - DockBarButton::DividerButton, DockBarButton::CloseButton}); - ui->inactiveSimpleButtonsTitleBar->setButtons( - { DockBarButton::DividerButton, DockBarButton::MinimizeButton, - DockBarButton::DividerButton, DockBarButton::MaximizeButton, - DockBarButton::DividerButton, DockBarButton::CloseButton}); - ui->inactiveTearButtonsTitleBar->setButtons( - { DockBarButton::DividerButton, DockBarButton::MinimizeButton, - DockBarButton::DividerButton, DockBarButton::MaximizeButton, - DockBarButton::DividerButton, DockBarButton::CloseButton}); - - QString exampleText = R"( -
-    
- )"; - - ui->exampleText->setHtml(exampleText); -} - -TitleBarPage::~TitleBarPage() -{ -} - -#include "Gallery/moc_TitleBarPage.cpp" diff --git a/Code/Framework/AzQtComponents/AzQtComponents/Gallery/TitleBarPage.h b/Code/Framework/AzQtComponents/AzQtComponents/Gallery/TitleBarPage.h deleted file mode 100644 index 3cc5a2741c..0000000000 --- a/Code/Framework/AzQtComponents/AzQtComponents/Gallery/TitleBarPage.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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 - -#if !defined(Q_MOC_RUN) -#include -#include -#endif - -namespace Ui { - class TitleBarPage; -} - -class TitleBarPage : public QWidget -{ - Q_OBJECT - -public: - explicit TitleBarPage(QWidget* parent = nullptr); - ~TitleBarPage() override; - -private: - QScopedPointer ui; -}; diff --git a/Code/Framework/AzQtComponents/AzQtComponents/Gallery/TitleBarPage.ui b/Code/Framework/AzQtComponents/AzQtComponents/Gallery/TitleBarPage.ui deleted file mode 100644 index 00fb8cd7f3..0000000000 --- a/Code/Framework/AzQtComponents/AzQtComponents/Gallery/TitleBarPage.ui +++ /dev/null @@ -1,162 +0,0 @@ - - - TitleBarPage - - - - 0 - 0 - 827 - 716 - - - - - 0 - 0 - - - - - - - false - - - true - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - Normal - - - Qt::AlignCenter - - - - - - - Simple - - - Qt::AlignCenter - - - - - - - Tear - - - Qt::AlignCenter - - - - - - - Active - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - Inactive - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - AzQtComponents::TitleBar - QWidget -
AzQtComponents/Components/Titlebar.h
- 1 -
-
- - -
diff --git a/Code/Framework/AzQtComponents/AzQtComponents/azqtcomponents_gallery_files.cmake b/Code/Framework/AzQtComponents/AzQtComponents/azqtcomponents_gallery_files.cmake index 05eee70f06..c309e60e29 100644 --- a/Code/Framework/AzQtComponents/AzQtComponents/azqtcomponents_gallery_files.cmake +++ b/Code/Framework/AzQtComponents/AzQtComponents/azqtcomponents_gallery_files.cmake @@ -106,9 +106,6 @@ set(FILES Gallery/TabWidgetPage.ui Gallery/TabWidgetPage.cpp Gallery/TabWidgetPage.h - Gallery/TitleBarPage.ui - Gallery/TitleBarPage.cpp - Gallery/TitleBarPage.h Gallery/ToggleSwitchPage.ui Gallery/ToggleSwitchPage.cpp Gallery/ToggleSwitchPage.h From 8a2cfedf3468b0aadb8c06094f0491020679178d Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 22 Nov 2021 13:51:05 -0800 Subject: [PATCH 099/284] =?UTF-8?q?=EF=BB=BFRemoves=20IProcess=20from=20Cr?= =?UTF-8?q?yCommon?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Legacy/CryCommon/IProcess.h | 35 ------------------- Code/Legacy/CryCommon/ISystem.h | 1 - Code/Legacy/CryCommon/crycommon_files.cmake | 1 - Code/Legacy/CrySystem/CrySystem_precompiled.h | 1 - Code/Legacy/CrySystem/System.cpp | 4 --- Code/Legacy/CrySystem/SystemInit.cpp | 1 - 6 files changed, 43 deletions(-) delete mode 100644 Code/Legacy/CryCommon/IProcess.h diff --git a/Code/Legacy/CryCommon/IProcess.h b/Code/Legacy/CryCommon/IProcess.h deleted file mode 100644 index 098c0d80c9..0000000000 --- a/Code/Legacy/CryCommon/IProcess.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * 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 - * - */ - - -// Description : Process common interface - - -#ifndef CRYINCLUDE_CRYCOMMON_IPROCESS_H -#define CRYINCLUDE_CRYCOMMON_IPROCESS_H -#pragma once - - -// forward declaration -struct SRenderingPassInfo; -//////////////////////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////////////////////// -struct IProcess -{ - // - virtual ~IProcess(){} - virtual bool Init() = 0; - virtual void Update() = 0; - virtual void RenderWorld(int nRenderFlags, const SRenderingPassInfo& passInfo, const char* szDebugName) = 0; - virtual void ShutDown() = 0; - virtual void SetFlags(int flags) = 0; - virtual int GetFlags(void) = 0; - // -}; - -#endif // CRYINCLUDE_CRYCOMMON_IPROCESS_H diff --git a/Code/Legacy/CryCommon/ISystem.h b/Code/Legacy/CryCommon/ISystem.h index 50f7fccfcb..e0d84ae689 100644 --- a/Code/Legacy/CryCommon/ISystem.h +++ b/Code/Legacy/CryCommon/ISystem.h @@ -46,7 +46,6 @@ namespace AZ::IO struct IConsole; struct IRemoteConsole; struct IRenderer; -struct IProcess; struct ICryFont; struct IMovieSystem; namespace Audio diff --git a/Code/Legacy/CryCommon/crycommon_files.cmake b/Code/Legacy/CryCommon/crycommon_files.cmake index e1117b6f52..412be4c746 100644 --- a/Code/Legacy/CryCommon/crycommon_files.cmake +++ b/Code/Legacy/CryCommon/crycommon_files.cmake @@ -22,7 +22,6 @@ set(FILES IMaterial.h IMiniLog.h IMovieSystem.h - IProcess.h IRenderAuxGeom.h IRenderer.h ISerialize.h diff --git a/Code/Legacy/CrySystem/CrySystem_precompiled.h b/Code/Legacy/CrySystem/CrySystem_precompiled.h index 41090ff321..ba212f2972 100644 --- a/Code/Legacy/CrySystem/CrySystem_precompiled.h +++ b/Code/Legacy/CrySystem/CrySystem_precompiled.h @@ -104,7 +104,6 @@ struct ITimer; struct IFFont; struct ICVar; struct IConsole; -struct IProcess; namespace AZ::IO { struct IArchive; diff --git a/Code/Legacy/CrySystem/System.cpp b/Code/Legacy/CrySystem/System.cpp index 47a9cbd5ef..a5cee3a6b6 100644 --- a/Code/Legacy/CrySystem/System.cpp +++ b/Code/Legacy/CrySystem/System.cpp @@ -116,7 +116,6 @@ LRESULT WINAPI WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) #include #include #include -#include #include @@ -462,9 +461,6 @@ bool CSystem::IsQuitting() const bool wasExitMainLoopRequested = false; AzFramework::ApplicationRequests::Bus::BroadcastResult(wasExitMainLoopRequested, &AzFramework::ApplicationRequests::WasExitMainLoopRequested); return wasExitMainLoopRequested; -} - -////////////////////////////////////////////////////////////////////////// ISystem* CSystem::GetCrySystem() { return this; diff --git a/Code/Legacy/CrySystem/SystemInit.cpp b/Code/Legacy/CrySystem/SystemInit.cpp index f3f9442322..19d94ba6ec 100644 --- a/Code/Legacy/CrySystem/SystemInit.cpp +++ b/Code/Legacy/CrySystem/SystemInit.cpp @@ -75,7 +75,6 @@ #include #include #include -#include #include #include "XConsole.h" From 9bc498775c9fe6966430a8a798eeef2b1ca1e5e2 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 22 Nov 2021 13:57:33 -0800 Subject: [PATCH 100/284] Removes Synchronization from CryCommon Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Legacy/CryCommon/Synchronization.h | 25 ------------------------- 1 file changed, 25 deletions(-) delete mode 100644 Code/Legacy/CryCommon/Synchronization.h diff --git a/Code/Legacy/CryCommon/Synchronization.h b/Code/Legacy/CryCommon/Synchronization.h deleted file mode 100644 index ddd020ffde..0000000000 --- a/Code/Legacy/CryCommon/Synchronization.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * 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 - - -//--------------------------------------------------------------------------- -// Synchronization policies, for classes (e.g. containers, allocators) that may -// or may not be multithread-safe. -// -// Policies should be used as a template argument to such classes, -// and these class implementations should then utilise the policy, as a base-class or member. -// -//--------------------------------------------------------------------------- - -#include - -namespace stl -{ -}; From 1cc1681ff00520d64a4ff8829e3cabd04c91b5f4 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 22 Nov 2021 13:59:42 -0800 Subject: [PATCH 101/284] Removes Win32Specific.h from CryCommon Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Legacy/CryCommon/Win32specific.h | 111 -------------------------- 1 file changed, 111 deletions(-) delete mode 100644 Code/Legacy/CryCommon/Win32specific.h diff --git a/Code/Legacy/CryCommon/Win32specific.h b/Code/Legacy/CryCommon/Win32specific.h deleted file mode 100644 index 4fa116166b..0000000000 --- a/Code/Legacy/CryCommon/Win32specific.h +++ /dev/null @@ -1,111 +0,0 @@ -/* - * 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 - * - */ - - -// Description : Specific to Win32 declarations, inline functions etc. - - -#ifndef CRYINCLUDE_CRYCOMMON_WIN32SPECIFIC_H -#define CRYINCLUDE_CRYCOMMON_WIN32SPECIFIC_H -#pragma once - - -#define _CPU_X86 -#define _CPU_SSE -#ifdef _DEBUG -#define ILINE _inline -#else -#define ILINE __forceinline -#endif - -#define DEPRECATED __declspec(deprecated) - -#ifndef _WIN32_WINNT -# define _WIN32_WINNT 0x501 -#endif - -////////////////////////////////////////////////////////////////////////// -// Standard includes. -////////////////////////////////////////////////////////////////////////// -#include -#include -#include -#include -#include -#include -#include -#include -////////////////////////////////////////////////////////////////////////// - -// Special intrinsics -#include // moved here to prevent assert from being redefined when included elsewhere - - -////////////////////////////////////////////////////////////////////////// -// Define platform independent types. -////////////////////////////////////////////////////////////////////////// -#include "BaseTypes.h" - -typedef unsigned char BYTE; -typedef unsigned int threadID; -typedef unsigned long DWORD; -typedef double real; // biggest float-type on this machine -typedef long LONG; - -#if defined(_WIN64) -typedef __int64 INT_PTR, * PINT_PTR; -typedef unsigned __int64 UINT_PTR, * PUINT_PTR; - -typedef __int64 LONG_PTR, * PLONG_PTR; -typedef unsigned __int64 ULONG_PTR, * PULONG_PTR; - -typedef ULONG_PTR DWORD_PTR, * PDWORD_PTR; -#else -typedef __w64 int INT_PTR, * PINT_PTR; -typedef __w64 unsigned int UINT_PTR, * PUINT_PTR; - -typedef __w64 long LONG_PTR, * PLONG_PTR; -typedef __w64 unsigned long ULONG_PTR, * PULONG_PTR; - -typedef ULONG_PTR DWORD_PTR, * PDWORD_PTR; -#endif - -typedef void* THREAD_HANDLE; -typedef void* EVENT_HANDLE; - -////////////////////////////////////////////////////////////////////////// -// Multi platform Hi resolution ticks function, should only be used for profiling. -////////////////////////////////////////////////////////////////////////// - - -int64 CryGetTicks(); -int64 CryGetTicksPerSec(); - -#ifndef SAFE_DELETE -#define SAFE_DELETE(p) { if (p) { delete (p); (p) = NULL; } \ -} -#endif - -#ifndef SAFE_DELETE_ARRAY -#define SAFE_DELETE_ARRAY(p) { if (p) { delete [] (p); (p) = NULL; } \ -} -#endif - -#ifndef SAFE_RELEASE -#define SAFE_RELEASE(p) { if (p) { (p)->Release(); (p) = NULL; } \ -} -#endif - -#ifndef FILE_ATTRIBUTE_NORMAL - #define FILE_ATTRIBUTE_NORMAL 0x00000080 -#endif - -#define TARGET_DEFAULT_ALIGN (0x4U) - - -#endif // CRYINCLUDE_CRYCOMMON_WIN32SPECIFIC_H From f6a72f80534982eb96ec40ce91145170a674aa74 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 22 Nov 2021 15:26:13 -0800 Subject: [PATCH 102/284] Removes Win32Specific.h from CryCommon cmake file Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Legacy/CryCommon/crycommon_files.cmake | 1 - 1 file changed, 1 deletion(-) diff --git a/Code/Legacy/CryCommon/crycommon_files.cmake b/Code/Legacy/CryCommon/crycommon_files.cmake index 412be4c746..384dd98ecc 100644 --- a/Code/Legacy/CryCommon/crycommon_files.cmake +++ b/Code/Legacy/CryCommon/crycommon_files.cmake @@ -92,7 +92,6 @@ set(FILES MacSpecific.h platform.h platform_impl.cpp - Win32specific.h Win64specific.h LyShine/UiAssetTypes.h LyShine/Bus/UiCursorBus.h From 0af1adbf2fe55ac6e173e9a7b819d36bb3a25879 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 22 Nov 2021 15:34:45 -0800 Subject: [PATCH 103/284] Removes newoverride.inl from AzToolsFramework Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../AzToolsFramework/newoverride.inl | 165 ------------------ 1 file changed, 165 deletions(-) delete mode 100644 Code/Framework/AzToolsFramework/AzToolsFramework/newoverride.inl diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/newoverride.inl b/Code/Framework/AzToolsFramework/AzToolsFramework/newoverride.inl deleted file mode 100644 index 39cfa6aaa0..0000000000 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/newoverride.inl +++ /dev/null @@ -1,165 +0,0 @@ -/* - * 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 - * - */ -// overrides all new and delete and forwards them to the AZ allocator system -// for tracking purposes. - -#include -#include -#include -#include - -void* operator new(std::size_t size, const AZ::Internal::AllocatorDummy*) -{ - if (!AZ::AllocatorInstance::IsReady()) - { - AZ_Warning("MEMORY", false, "Memory is being allocated at static startup!"); - return malloc(size); - } - - return AZ::AllocatorInstance::Get().Allocate(size, AZCORE_GLOBAL_NEW_ALIGNMENT, 0, "global operator aznew", 0, 0); -} -void* operator new[](std::size_t size, const AZ::Internal::AllocatorDummy*) -{ - if (!AZ::AllocatorInstance::IsReady()) - { - AZ_Warning("MEMORY", false, "Memory is being allocated at static startup!"); - return malloc(size); - } - return AZ::AllocatorInstance::Get().Allocate(size, AZCORE_GLOBAL_NEW_ALIGNMENT, 0, "global operator aznew[]", 0, 0); -} -void* operator new(std::size_t size, const char* fileName, int lineNum, const char* name, const AZ::Internal::AllocatorDummy*) -{ - if (!AZ::AllocatorInstance::IsReady()) - { - AZ_Warning("MEMORY", false, "Memory is being allocated at static startup!"); - return malloc(size); - } - return AZ::AllocatorInstance::Get().Allocate(size, AZCORE_GLOBAL_NEW_ALIGNMENT, 0, name ? name : "global operator aznew", fileName, lineNum); -} -void* operator new[](std::size_t size, const char* fileName, int lineNum, const char* name, const AZ::Internal::AllocatorDummy*) -{ - if (!AZ::AllocatorInstance::IsReady()) - { - AZ_Warning("MEMORY", false, "Memory is being allocated at static startup!"); - return malloc(size); - } - return AZ::AllocatorInstance::Get().Allocate(size, AZCORE_GLOBAL_NEW_ALIGNMENT, 0, name ? name : "global operator aznew[]", fileName, lineNum); -} - -void* operator new(std::size_t size) -{ - if (size == 0) - { - size = 1; - } - - if (!AZ::AllocatorInstance::IsReady()) - { - AZ_Warning("MEMORY", false, "Memory is being allocated at static startup!"); - return malloc(size); - } - return AZ::AllocatorInstance::Get().Allocate(size, AZCORE_GLOBAL_NEW_ALIGNMENT, 0, "global operator new", 0, 0); -} - -//----------------------------------- -void* operator new[](std::size_t size) -//----------------------------------- -{ - if (size == 0) - { - size = 1; - } - - if (!AZ::AllocatorInstance::IsReady()) - { - AZ_Warning("MEMORY", false, "Memory is being allocated at static startup!"); - return _aligned_malloc(size, AZCORE_GLOBAL_NEW_ALIGNMENT); - } - - return AZ::AllocatorInstance::Get().Allocate(size, AZCORE_GLOBAL_NEW_ALIGNMENT, 0, "global operator new[]", 0, 0); -} - -//----------------------------------- -void* operator new(std::size_t size, std::nothrow_t const&) -//----------------------------------- -{ - return operator new(size); -} - -//----------------------------------- -void* operator new[](std::size_t size, std::nothrow_t const&) -//----------------------------------- -{ - return operator new[](size); -} - -// these deletes have to be created to match the new() -// and will only happen during exception handling when allocation fails. -void operator delete(void* ptr, const AZ::Internal::AllocatorDummy*) -{ - if (ptr == 0) - { - return; - } - AZ::AllocatorInstance::Get().DeAllocate(ptr); -} - -void operator delete[](void* ptr, const AZ::Internal::AllocatorDummy*) -{ - if (ptr == 0) - { - return; - } - AZ::AllocatorInstance::Get().DeAllocate(ptr); -} - -void operator delete(void* ptr, const char* fileName, int lineNum, const char* name, const AZ::Internal::AllocatorDummy*) -{ - (void)fileName; - (void)lineNum; - (void)name; - if (ptr == 0) - { - return; - } - AZ::AllocatorInstance::Get().DeAllocate(ptr); -} - -void operator delete[](void* ptr, const char* fileName, int lineNum, const char* name, const AZ::Internal::AllocatorDummy*) -{ - (void)fileName; - (void)lineNum; - (void)name; - if (ptr == 0) - { - return; - } - AZ::AllocatorInstance::Get().DeAllocate(ptr); -} - -void operator delete(void* ptr) -{ - if (ptr == 0) - { - return; - } - - AZ::AllocatorInstance::Get().DeAllocate(ptr); -} - -//----------------------------------- -void operator delete[](void* ptr) -//----------------------------------- -{ - if (ptr == 0) - { - return; - } - AZ::AllocatorInstance::Get().DeAllocate(ptr); -} - From 223fe64d2568a1883547052f764a2249b26e0e32 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 22 Nov 2021 15:37:40 -0800 Subject: [PATCH 104/284] =?UTF-8?q?=EF=BB=BFRemoves=20EditorVegetationRequ?= =?UTF-8?q?estsBus=20from=20AzToolsFramework?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../API/EditorVegetationRequestsBus.h | 43 ------------------- .../aztoolsframework_files.cmake | 1 - 2 files changed, 44 deletions(-) delete mode 100644 Code/Framework/AzToolsFramework/AzToolsFramework/API/EditorVegetationRequestsBus.h diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/API/EditorVegetationRequestsBus.h b/Code/Framework/AzToolsFramework/AzToolsFramework/API/EditorVegetationRequestsBus.h deleted file mode 100644 index 7bfc891476..0000000000 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/API/EditorVegetationRequestsBus.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * 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 - -#include -#include -#include - -class CVegetationMap; -struct CVegetationInstance; - -namespace AzToolsFramework -{ - namespace EditorVegetation - { - /** - * Bus used to talk to VegetationMap across the application - */ - class EditorVegetationRequests - : public AZ::EBusTraits - { - public: - using Bus = AZ::EBus; - - static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::ById; - static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Single; - typedef CVegetationMap* BusIdType; - - virtual ~EditorVegetationRequests() {} - - virtual AZStd::vector GetObjectInstances(const AZ::Vector2& min, const AZ::Vector2& max) = 0; - virtual void DeleteObjectInstance(CVegetationInstance* instance) = 0; - }; - - using EditorVegetationRequestsBus = AZ::EBus; - } -} diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake b/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake index 0d7bf05211..746fb6a445 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake @@ -38,7 +38,6 @@ set(FILES API/EditorLevelNotificationBus.h API/ViewportEditorModeTrackerNotificationBus.h API/ViewportEditorModeTrackerNotificationBus.cpp - API/EditorVegetationRequestsBus.h API/EditorPythonConsoleBus.h API/EditorPythonRunnerRequestsBus.h API/EditorPythonScriptNotificationsBus.h From 3c0fa8cb5cd987171e5f9ace8b39272d3ad04495 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 22 Nov 2021 16:00:29 -0800 Subject: [PATCH 105/284] Removes NullArchiveComponent from AzToolsFramework Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Archive/NullArchiveComponent.cpp | 86 ------------------- .../Archive/NullArchiveComponent.h | 62 ------------- .../aztoolsframework_files.cmake | 2 - 3 files changed, 150 deletions(-) delete mode 100644 Code/Framework/AzToolsFramework/AzToolsFramework/Archive/NullArchiveComponent.cpp delete mode 100644 Code/Framework/AzToolsFramework/AzToolsFramework/Archive/NullArchiveComponent.h diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Archive/NullArchiveComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Archive/NullArchiveComponent.cpp deleted file mode 100644 index 972e9d588f..0000000000 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Archive/NullArchiveComponent.cpp +++ /dev/null @@ -1,86 +0,0 @@ -/* - * 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 "NullArchiveComponent.h" - -#include -#include - -namespace AzToolsFramework -{ - - void NullArchiveComponent::Activate() - { - ArchiveCommandsBus::Handler::BusConnect(); - } - - void NullArchiveComponent::Deactivate() - { - ArchiveCommandsBus::Handler::BusDisconnect(); - } - - std::future DefaultFuture() - { - std::promise p; - p.set_value(false); - return p.get_future(); - } - - std::future NullArchiveComponent::CreateArchive( - const AZStd::string& /*archivePath*/, - const AZStd::string& /*dirToArchive*/) - { - return DefaultFuture(); - } - - std::future NullArchiveComponent::ExtractArchive( - const AZStd::string& /*archivePath*/, - const AZStd::string& /*destinationPath*/) - { - return DefaultFuture(); - } - - std::future NullArchiveComponent::ExtractFile( - const AZStd::string& /*archivePath*/, - const AZStd::string& /*fileInArchive*/, - const AZStd::string& /*destinationPath*/) - { - return DefaultFuture(); - } - - bool NullArchiveComponent::ListFilesInArchive(const AZStd::string& /*archivePath*/, AZStd::vector& /*outFileEntries*/) - { - return false; - } - - std::future NullArchiveComponent::AddFileToArchive( - const AZStd::string& /*archivePath*/, - const AZStd::string& /*fileToAdd*/, - const AZStd::string& /*pathInArchive*/) - { - return DefaultFuture(); - } - - std::future NullArchiveComponent::AddFilesToArchive( - const AZStd::string& /*archivePath*/, - const AZStd::string& /*workingDirectory*/, - const AZStd::string& /*listFilePath*/) - { - return DefaultFuture(); - } - - void NullArchiveComponent::Reflect(AZ::ReflectContext* context) - { - AZ::SerializeContext* serialize = azrtti_cast(context); - if (serialize) - { - serialize->Class() - ; - } - } -} // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Archive/NullArchiveComponent.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Archive/NullArchiveComponent.h deleted file mode 100644 index 9ce33d0c85..0000000000 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Archive/NullArchiveComponent.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * 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 - -#include -#include - -namespace AzToolsFramework -{ - class NullArchiveComponent - : public AZ::Component - , private ArchiveCommandsBus::Handler - { - public: - AZ_COMPONENT(NullArchiveComponent, "{D665B6B1-5FF4-4203-B19F-BBDB82587129}") - - NullArchiveComponent() = default; - ~NullArchiveComponent() override = default; - - ////////////////////////////////////////////////////////////////////////// - // AZ::Component overrides - void Activate() override; - void Deactivate() override; - ////////////////////////////////////////////////////////////////////////// - private: - static void Reflect(AZ::ReflectContext* context); - - ////////////////////////////////////////////////////////////////////////// - // ArchiveCommandsBus::Handler overrides - [[nodiscard]] std::future CreateArchive( - const AZStd::string& archivePath, - const AZStd::string& dirToArchive) override; - - [[nodiscard]] std::future ExtractArchive( - const AZStd::string& archivePath, - const AZStd::string& destinationPath) override; - - [[nodiscard]] std::future ExtractFile( - const AZStd::string& archivePath, - const AZStd::string& fileInArchive, - const AZStd::string& destinationPath) override; - - bool ListFilesInArchive(const AZStd::string& archivePath, AZStd::vector& outFileEntries) override; - - [[nodiscard]] std::future AddFileToArchive( - const AZStd::string& archivePath, - const AZStd::string& workingDirectory, - const AZStd::string& fileToAdd) override; - - [[nodiscard]] std::future AddFilesToArchive( - const AZStd::string& archivePath, - const AZStd::string& workingDirectory, - const AZStd::string& listFilePath) override; - ////////////////////////////////////////////////////////////////////////// - }; -} // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake b/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake index 746fb6a445..497c64a638 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake @@ -642,8 +642,6 @@ set(FILES AssetBrowser/Previewer/PreviewerFrame.h Archive/ArchiveComponent.h Archive/ArchiveComponent.cpp - Archive/NullArchiveComponent.h - Archive/NullArchiveComponent.cpp Archive/ArchiveAPI.h UI/PropertyEditor/Model/AssetCompleterModel.h UI/PropertyEditor/Model/AssetCompleterModel.cpp From 7029135daa0174f451af172b5d17a1d0b9e80447 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 22 Nov 2021 16:07:20 -0800 Subject: [PATCH 106/284] Removes AssetBrowserBus.inl from AzToolsFramework Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../AssetBrowser/AssetBrowserBus.inl | 41 ------------------- 1 file changed, 41 deletions(-) delete mode 100644 Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserBus.inl diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserBus.inl b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserBus.inl deleted file mode 100644 index 0e56a1fdeb..0000000000 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserBus.inl +++ /dev/null @@ -1,41 +0,0 @@ -/* - * 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 - -#include -#include -#include - -#include - -class QImage; - -namespace AzToolsFramework -{ - namespace AssetBrowser - { - class AssetBrowserModel; - - //! Sends requests to output preview image for texture assets. Used for internal only! - class AssetBrowserTexturePreviewRequests - : public AZ::EBusTraits - { - public: - - // Only a single handler is allowed - static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Single; - - //! Request to get a preview image for texture product - //@return whether the output image is valid or not - virtual bool GetProductTexturePreview(const char* /*fullProductFileName*/, QImage& /*previewImage*/, AZStd::string& /*productInfo*/, AZStd::string& /*productAlphaInfo*/) { return false; } - }; - - using AssetBrowserTexturePreviewRequestsBus = AZ::EBus; - } // namespace AssetBrowser -} // namespace AzToolsFramework From 30f7f711113f7d14708579322d7dbbde945962e4 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 22 Nov 2021 16:08:08 -0800 Subject: [PATCH 107/284] Remves AssetBrowserBus.inl from AzToolsFramework Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../AzToolsFramework/AssetBrowser/AssetBrowserBus.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserBus.h b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserBus.h index 54fd142e76..7f0eb18fe3 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserBus.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/AssetBrowserBus.h @@ -286,5 +286,3 @@ namespace AzToolsFramework } // namespace AssetBrowser } // namespace AzToolsFramework - -#include From c62c63295ff4cc889235e13ffe2b372d9b08260b Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 22 Nov 2021 16:10:39 -0800 Subject: [PATCH 108/284] Removes SortFilterProxyModel from AzToolsFramework Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../AssetBrowser/SortFilterProxyModel.cpp | 186 ------------------ 1 file changed, 186 deletions(-) delete mode 100644 Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/SortFilterProxyModel.cpp diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/SortFilterProxyModel.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/SortFilterProxyModel.cpp deleted file mode 100644 index d41bfe6e3b..0000000000 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/SortFilterProxyModel.cpp +++ /dev/null @@ -1,186 +0,0 @@ -/* - * 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 "SortFilterProxyModel.hxx" - -namespace AzToolsFramework -{ - namespace AssetBrowser - { - ////////////////////////////////////////////////////////////////////////// - //SortFilterProxyModel - SortFilterProxyModel::SortFilterProxyModel(QObject* parent) - : QSortFilterProxyModel(parent) - , m_assetMatchFiltersOperator(AzToolsFramework::FilterOperatorType::And) - { - //uncomment any column you want to see in the view - m_showColumn.insert(AssetBrowserEntry::Column::Name); - //m_showColumn.insert( Entry::Column_SourceID ); - //m_showColumn.insert( Entry::Column_FingerprintValue ); - //m_showColumn.insert( Entry::Colbumn_Guid ); - //m_showColumn.insert( Entry::Column_ScanFolderID ); - //m_showColumn.insert( Entry::Column_ProductID ); - //m_showColumn.insert( Entry::Column_JobID ); - //m_showColumn.insert( Entry::Column_JobKey ); - //m_showColumn.insert( Entry::Column_SubID ); - //m_showColumn.insert( Entry::Column_AssetType ); - //m_showColumn.insert( Entry::Column_Platform ); - //m_showColumn.insert( Entry::Column_ClassID ); - } - - void SortFilterProxyModel::OnSearchCriteriaChanged(QStringList& criteriaList, AzToolsFramework::FilterOperatorType filterOperator) - { - removeAllAssetMatchFilters(); - setAssetMatchFilterOperator(filterOperator); - - for (QString criteria : criteriaList) - { - auto parts = criteria.split(": ", QString::SkipEmptyParts); - addAssetMatchFilter(parts.last().toUtf8().constData()); - } - } - - void SortFilterProxyModel::addAssetTypeFilter(AZ::Data::AssetType assetType) - { - m_assetTypeFilters.push_back(assetType); - invalidateFilter(); - } - - void SortFilterProxyModel::addAssetPathFilter(const char* assetPathFilter) - { - m_assetPathFilters.push_back(assetPathFilter); - invalidateFilter(); - } - - void SortFilterProxyModel::removeAllAssetPathFilters() - { - m_assetPathFilters.clear(); - invalidateFilter(); - } - - void SortFilterProxyModel::setAssetMatchSubDirFilter(bool val) - { - m_includeSubdir = val; - invalidateFilter(); - } - - void SortFilterProxyModel::removeAllAssetMatchFilters() - { - m_assetMatchFilters.clear(); - invalidateFilter(); - } - - void SortFilterProxyModel::addAssetMatchFilter(const char* assetMatchFilter) - { - m_assetMatchFilters.push_back(assetMatchFilter); - invalidateFilter(); - } - - void SortFilterProxyModel::setAssetMatchFilterOperator(AzToolsFramework::FilterOperatorType type) - { - m_assetMatchFiltersOperator = type; - invalidateFilter(); - } - - bool SortFilterProxyModel::filterAcceptsRow(int source_row, const QModelIndex& source_parent) const - { - //get the source idx, if invalid early out - QModelIndex idx = sourceModel()->index(source_row, 0, source_parent); - if (!idx.isValid()) - { - return false; - } - - //the entry is the internal pointer of the index - auto entry = static_cast(idx.internalPointer()); - - if (!entry->isValid()) - { - return false; - } - - //////////////////////////////////////////////////////////////////////// - //we only want to see assets that have at least one child product that has a valid assetType - if (entry->GetEntryType() == AssetBrowserEntry::AssetEntryType::Source) - { - //we have a asset with at least one valid child product assetType - //we only want to see assets that have at least one child product that matches the assetType filter - if (!m_assetTypeFilters.empty()) - { - for (int i = 0; i < entry->GetChildCount(); ++i) - { - auto product = static_cast(entry->GetChild(i)); - if (product->isValid()) - { - if (AZStd::find(m_assetTypeFilters.begin(), m_assetTypeFilters.end(), product->GetAssetType()) == m_assetTypeFilters.end()) - { - return false; - } - } - } - } - } - - ////////////////////////////////////////////////////////////////////////// - //we only want to see assets that match all the match filters - if (!m_assetMatchFilters.empty()) - { - if (m_assetMatchFiltersOperator == AzToolsFramework::FilterOperatorType::And) - { - for (const auto& item : m_assetMatchFilters) - { - if (!entry->Match(item.c_str())) - { - return false; - } - } - } - else if (m_assetMatchFiltersOperator == AzToolsFramework::FilterOperatorType::Or) - { - for (const auto& item : m_assetMatchFilters) - { - if (entry->Match(item.c_str())) - { - return true; - } - } - return false; - } - } - //////////////////////////////////////////////////////////////////////// - - return true; - } - - bool SortFilterProxyModel::filterAcceptsColumn(int source_column, const QModelIndex& source_parent) const - { - (void)source_parent; - - //if the column is in the set we want to show it - return m_showColumn.find(static_cast(source_column)) != m_showColumn.end(); - } - - bool SortFilterProxyModel::lessThan(const QModelIndex& source_left, const QModelIndex& source_right) const - { - if (source_left.column() == source_right.column()) - { - QVariant leftData = sourceModel()->data(source_left); - QVariant rightData = sourceModel()->data(source_right); - if ((leftData.type() == QVariant::String) && - (rightData.type() == QVariant::String)) - { - QString leftString = leftData.toString(); - QString rightString = rightData.toString(); - return QString::compare(leftString, rightString, Qt::CaseInsensitive) > 0; - } - } - return QSortFilterProxyModel::lessThan(source_left, source_right); - } - } // namespace AssetBrowser -} // namespace AzToolsFramework// namespace AssetBrowser - -#include From 7f327324788db9e1ff2d7ca470907744605644cf Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 22 Nov 2021 16:47:46 -0800 Subject: [PATCH 109/284] Removes AnimValue from CryCommon/Maestro/Types Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../CryCommon/Maestro/Types/AnimValue.h | 39 ------------------- Code/Legacy/CryCommon/crycommon_files.cmake | 1 - 2 files changed, 40 deletions(-) delete mode 100644 Code/Legacy/CryCommon/Maestro/Types/AnimValue.h diff --git a/Code/Legacy/CryCommon/Maestro/Types/AnimValue.h b/Code/Legacy/CryCommon/Maestro/Types/AnimValue.h deleted file mode 100644 index 77748a6ced..0000000000 --- a/Code/Legacy/CryCommon/Maestro/Types/AnimValue.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * 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 - * - */ - - -#ifndef CRYINCLUDE_CRYCOMMON_MAESTRO_TYPES_ANIMVALUE_H -#define CRYINCLUDE_CRYCOMMON_MAESTRO_TYPES_ANIMVALUE_H -#pragma once - -//! Values that animation track can hold. -// Do not change values! they are serialized -// -// Attention: This should only be expanded if you add a completely new value type that tracks can control! -// If you just want to control a new parameter of an entity etc. extend EParamType -// -// Note: If the param type of a track is known and valid these can be derived from the node. -// These are serialized in case the parameter got invalid (for example for material nodes) -// -enum class AnimValue -{ - Float = 0, - Vector = 1, - Quat = 2, - Bool = 3, - Select = 5, - Vector4 = 15, - DiscreteFloat = 16, - RGB = 20, - CharacterAnim = 21, - - Unknown = static_cast(0xFFFFFFFF) -}; - - -#endif CRYINCLUDE_CRYCOMMON_MAESTRO_TYPES_ANIMVALUE_H diff --git a/Code/Legacy/CryCommon/crycommon_files.cmake b/Code/Legacy/CryCommon/crycommon_files.cmake index 384dd98ecc..7b2dc84807 100644 --- a/Code/Legacy/CryCommon/crycommon_files.cmake +++ b/Code/Legacy/CryCommon/crycommon_files.cmake @@ -102,7 +102,6 @@ set(FILES Maestro/Bus/SequenceAgentComponentBus.h Maestro/Types/AnimNodeType.h Maestro/Types/AnimParamType.h - Maestro/Types/AnimValue.h Maestro/Types/AnimValueType.h Maestro/Types/AssetBlendKey.h Maestro/Types/AssetBlends.h From 56802a3cfa81b182dabaf3f789b17c809f8b4db0 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 22 Nov 2021 16:40:33 -0800 Subject: [PATCH 110/284] removes LegacyCommand from AzToolsFramework Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../AzToolsFramework/Commands/LegacyCommand.h | 47 ------------------- .../aztoolsframework_files.cmake | 1 - 2 files changed, 48 deletions(-) delete mode 100644 Code/Framework/AzToolsFramework/AzToolsFramework/Commands/LegacyCommand.h diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Commands/LegacyCommand.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Commands/LegacyCommand.h deleted file mode 100644 index ca82b74265..0000000000 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Commands/LegacyCommand.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * 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 - -#include -#include -#include -#include -#include -#include - -namespace AzToolsFramework -{ - /** - * AzToolsFramework URSequencePoint wrapper around legacy IUndoObject - * Allows using IUndoObject with AzToolsFramework undo system - */ - template - class LegacyCommand - : public AzToolsFramework::UndoSystem::URSequencePoint - { - public: - AZ_RTTI(LegacyCommand, "{9ED33CB6-04D0-4924-A121-D8C27DC09066}", AzToolsFramework::UndoSystem::URSequencePoint); - AZ_CLASS_ALLOCATOR(LegacyCommand, AZ::SystemAllocator, 0); - - explicit LegacyCommand(const AZStd::string& friendlyName, AZStd::unique_ptr&& legacyUndo) - : AzToolsFramework::UndoSystem::URSequencePoint(friendlyName) - { - m_legacyUndo = AZStd::move(legacyUndo); - } - virtual ~LegacyCommand() = default; - - void Undo() override { m_legacyUndo->Undo(); } - void Redo() override { m_legacyUndo->Redo(); } - - bool Changed() const override { return true; } - - protected: - AZStd::unique_ptr m_legacyUndo; - }; -} // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake b/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake index 497c64a638..e0ab8d5b73 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake @@ -487,7 +487,6 @@ set(FILES Commands/EntityTransformCommand.h Commands/PreemptiveUndoCache.cpp Commands/PreemptiveUndoCache.h - Commands/LegacyCommand.h Commands/BaseSliceCommand.cpp Commands/BaseSliceCommand.h Commands/SliceDetachEntityCommand.cpp From 6a7553b6823451c8582cf31e07fab3123c9f6fbc Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 22 Nov 2021 16:44:20 -0800 Subject: [PATCH 111/284] Removes AssetBrowserProductThumbnail.cpp that is unused and duplicated by Code\Framework\AzToolsFramework\AzToolsFramework\AssetBrowser\Thumbnails\ProductThumbnail.cpp Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../AssetBrowserProductThumbnail.cpp | 124 ------------------ 1 file changed, 124 deletions(-) delete mode 100644 Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Thumbnails/AssetBrowserProductThumbnail.cpp diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Thumbnails/AssetBrowserProductThumbnail.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Thumbnails/AssetBrowserProductThumbnail.cpp deleted file mode 100644 index 8f042d2648..0000000000 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Thumbnails/AssetBrowserProductThumbnail.cpp +++ /dev/null @@ -1,124 +0,0 @@ -/* - * 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 -#include -#include -#include -#include -#include - -namespace AzToolsFramework -{ - namespace AssetBrowser - { - ////////////////////////////////////////////////////////////////////////// - // ProductThumbnailKey - ////////////////////////////////////////////////////////////////////////// - ProductThumbnailKey::ProductThumbnailKey(const AZ::Data::AssetId& assetId) - : ThumbnailKey() - , m_assetId(assetId) - { - AZ::Data::AssetInfo info; - AZ::Data::AssetCatalogRequestBus::BroadcastResult(info, &AZ::Data::AssetCatalogRequests::GetAssetInfoById, m_assetId); - m_assetType = info.m_assetType; - } - - const AZ::Data::AssetId& ProductThumbnailKey::GetAssetId() const { return m_assetId; } - - const AZ::Data::AssetType& ProductThumbnailKey::GetAssetType() const { return m_assetType; } - - size_t ProductThumbnailKey::GetHash() const - { - return m_assetType.GetHash(); - } - - bool ProductThumbnailKey::Equals(const ThumbnailKey* other) const - { - if (!ThumbnailKey::Equals(other)) - { - return false; - } - // products displayed in Asset Browser have icons based on asset type, so multiple different products with same asset type will have same thumbnail - return m_assetId == azrtti_cast(other)->GetAssetId(); - } - - ////////////////////////////////////////////////////////////////////////// - // ProductThumbnail - ////////////////////////////////////////////////////////////////////////// - static const char* DEFAULT_PRODUCT_ICON_PATH = "Editor/Icons/AssetBrowser/DefaultProduct_16.svg"; - - ProductThumbnail::ProductThumbnail(Thumbnailer::SharedThumbnailKey key, int thumbnailSize) - : Thumbnail(key, thumbnailSize) - {} - - void ProductThumbnail::LoadThread() - { - auto productKey = azrtti_cast(m_key.data()); - AZ_Assert(productKey, "Incorrect key type, excpected ProductThumbnailKey"); - - QString iconPath; - AZ::AssetTypeInfoBus::EventResult(iconPath, productKey->GetAssetType(), &AZ::AssetTypeInfo::GetBrowserIcon); - if (!iconPath.isEmpty()) - { - // is it an embedded resource or absolute path? - bool isUsablePath = (iconPath.startsWith(":") || (!AzFramework::StringFunc::Path::IsRelative(iconPath.toUtf8().constData()))); - - if (!isUsablePath) - { - // getting here means it needs resolution. Can we find the real path of the file? This also searches in gems for sources. - bool foundIt = false; - AZStd::string watchFolder; - AZ::Data::AssetInfo assetInfo; - AzToolsFramework::AssetSystemRequestBus::BroadcastResult(foundIt, &AzToolsFramework::AssetSystemRequestBus::Events::GetSourceInfoBySourcePath, iconPath.toUtf8().constData(), assetInfo, watchFolder); - - if (foundIt) - { - // the absolute path is join(watchfolder, relativepath); // since its relative to the watch folder. - AZStd::string finalPath; - AzFramework::StringFunc::Path::Join(watchFolder.c_str(), assetInfo.m_relativePath.c_str(), finalPath); - iconPath = QString::fromUtf8(finalPath.c_str()); - } - } - } - else - { - // no pixmap specified - use default. - iconPath = QString::fromUtf8(DEFAULT_PRODUCT_ICON_PATH); - } - - m_icon = QIcon(iconPath); - - if (m_icon.isNull()) - { - m_state = State::Failed; - } - } - - ////////////////////////////////////////////////////////////////////////// - // ProductThumbnailCache - ////////////////////////////////////////////////////////////////////////// - ProductThumbnailCache::ProductThumbnailCache() - : ThumbnailCache() {} - - ProductThumbnailCache::~ProductThumbnailCache() = default; - - const char* ProductThumbnailCache::GetProviderName() const - { - return ProviderName; - } - - bool ProductThumbnailCache::IsSupportedThumbnail(Thumbnailer::SharedThumbnailKey key) const - { - return azrtti_istypeof(key.data()); - } - - } // namespace AssetBrowser -} // namespace AzToolsFramework - -#include "AssetBrowser/Thumbnails/moc_AssetBrowserProductThumbnail.cpp" From 3d1560e5585bfdc2685be9e01f3a52169693e0b3 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 22 Nov 2021 16:51:56 -0800 Subject: [PATCH 112/284] removes Commands/EntityTransformCommand from AzToolsFramework Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Commands/EntityTransformCommand.cpp | 88 ------------------- .../Commands/EntityTransformCommand.h | 66 -------------- .../aztoolsframework_files.cmake | 2 - 3 files changed, 156 deletions(-) delete mode 100644 Code/Framework/AzToolsFramework/AzToolsFramework/Commands/EntityTransformCommand.cpp delete mode 100644 Code/Framework/AzToolsFramework/AzToolsFramework/Commands/EntityTransformCommand.h diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Commands/EntityTransformCommand.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Commands/EntityTransformCommand.cpp deleted file mode 100644 index 72719a1bf3..0000000000 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Commands/EntityTransformCommand.cpp +++ /dev/null @@ -1,88 +0,0 @@ -/* - * 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 0 - -#include "EntityTransformCommand.h" -#include -#include -#include - -namespace AzToolsFramework -{ - TransformCommand::TransformCommand(const AZ::u64& contextId, const AZStd::string& friendlyName, const EntityList& captureEntities) - : UndoSystem::URSequencePoint(friendlyName) - , m_contextId(contextId) - { - for (auto it = captureEntities.begin(); it != captureEntities.end(); ++it) - { - SRT current; - EBUS_EVENT_ID_RESULT(current, *it, TransformComponentMessages::Bus, GetLocalSRT); - m_priorTransforms[*it] = current; - m_nextTransforms[*it] = current; - } - - m_undoCacheInterface = AZ::Interface::Get(); - AZ_Assert(m_undoCacheInterface, "Could not get UndoCacheInterface on TransformCommand construction."); - } - - void TransformCommand::Post() - { - // add to undo stack - UndoSystem::UndoStack* undoStack = NULL; - EBUS_EVENT_ID_RESULT(undoStack, m_contextId, SelectionMessages::Bus, GetUndoStack); - - if (undoStack) - { - undoStack->Post(this); - } - - for (auto it = m_priorTransforms.begin(); it != m_priorTransforms.end(); ++it) - { - m_undoCacheInterface->UpdateCache(it->first); - } - } - - void TransformCommand::Undo() - { - for (auto it = m_priorTransforms.begin(); it != m_priorTransforms.end(); ++it) - { - EBUS_EVENT_ID(it->first, TransformComponentMessages::Bus, SetLocalSRT, it->second); - m_undoCacheInterface->UpdateCache(it->first); - } - } - - void TransformCommand::Redo() - { - for (auto it = m_nextTransforms.begin(); it != m_nextTransforms.end(); ++it) - { - EBUS_EVENT_ID(it->first, TransformComponentMessages::Bus, SetLocalSRT, it->second); - m_undoCacheInterface->UpdateCache(it->first); - } - } - - void TransformCommand::CaptureNewTransform(const AZ::EntityId entityId) - { - AZ_Assert(m_priorTransforms.find(entityId) != m_priorTransforms.end(), "You can't add new transforms during an operation"); - AZ_Assert(m_nextTransforms.find(entityId) != m_nextTransforms.end(), "You can't add new transforms during an operation"); - - SRT current; - EBUS_EVENT_ID_RESULT(current, entityId, TransformComponentMessages::Bus, GetLocalSRT); - m_nextTransforms[entityId] = current; - } - - void TransformCommand::RevertToPriorTransform(const AZ::EntityId entityId) - { - AZ_Assert(m_priorTransforms.find(entityId) != m_priorTransforms.end(), "No such entity!"); - - m_nextTransforms[entityId] = m_priorTransforms[entityId]; - EBUS_EVENT_ID(entityId, TransformComponentMessages::Bus, SetLocalSRT, m_priorTransforms[entityId]); - } -} - -#endif diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Commands/EntityTransformCommand.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Commands/EntityTransformCommand.h deleted file mode 100644 index 7448b2cac5..0000000000 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Commands/EntityTransformCommand.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * 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 - * - */ -#ifndef TRANSFORM_COMMAND_H -#define TRANSFORM_COMMAND_H - -#if 0 - -#include -#include -#include -#include -#include -#include - -#pragma once - -namespace AzToolsFramework -{ - namespace UndoSystem - { - class UndoCacheInterface; - } - - typedef AZStd::vector EntityList; - - // transform command specializes undo to just care about the transform of an entity instead of the entire thing, for performance. - class TransformCommand - : public UndoSystem::URSequencePoint - { - public: - AZ_CLASS_ALLOCATOR(TransformCommand, AZ::SystemAllocator, 0); - AZ_RTTI(TransformCommand); - - TransformCommand(const AZ::u64& contextId, const AZStd::string& friendlyName, const EditorFramework::EntityList& captureEntities); - virtual ~TransformCommand() {} - - // the default will work for selections with out an undo stack(maybe move the undo stack here too - void CaptureNewTransform(const AZ::EntityId entityId); - void RevertToPriorTransform(const AZ::EntityId entityID); - - virtual void Undo(); - virtual void Redo(); - - virtual void Post(); - - protected: - AZ::u64 m_contextId; - - typedef AZStd::unordered_map CapturedTransforms; - - CapturedTransforms m_priorTransforms; - CapturedTransforms m_nextTransforms; - - private: - UndoCacheInterface* m_undoCacheInterface; - }; -} - -#endif // disabled - -#endif diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake b/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake index e0ab8d5b73..dc2ceabfcc 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake @@ -483,8 +483,6 @@ set(FILES Commands/EntityStateCommand.h Commands/SelectionCommand.cpp Commands/SelectionCommand.h - Commands/EntityTransformCommand.cpp - Commands/EntityTransformCommand.h Commands/PreemptiveUndoCache.cpp Commands/PreemptiveUndoCache.h Commands/BaseSliceCommand.cpp From bb129c3cd140cb850eb62b82fd9a7033c309357b Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 22 Nov 2021 16:56:44 -0800 Subject: [PATCH 113/284] Removes TraceContextBufferedFormatter from AzToolsFramework Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Debug/TraceContextBufferedFormatter.cpp | 149 ------------------ .../Debug/TraceContextBufferedFormatter.h | 66 -------- .../Debug/TraceContextBufferedFormatter.inl | 19 --- .../aztoolsframework_files.cmake | 3 - 4 files changed, 237 deletions(-) delete mode 100644 Code/Framework/AzToolsFramework/AzToolsFramework/Debug/TraceContextBufferedFormatter.cpp delete mode 100644 Code/Framework/AzToolsFramework/AzToolsFramework/Debug/TraceContextBufferedFormatter.h delete mode 100644 Code/Framework/AzToolsFramework/AzToolsFramework/Debug/TraceContextBufferedFormatter.inl diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Debug/TraceContextBufferedFormatter.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Debug/TraceContextBufferedFormatter.cpp deleted file mode 100644 index 305d4a8b1e..0000000000 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Debug/TraceContextBufferedFormatter.cpp +++ /dev/null @@ -1,149 +0,0 @@ -/* - * 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 -#include - -#ifdef AZ_ENABLE_TRACE_CONTEXT - -#include -#include -#include - -#include - -#endif // AZ_ENABLE_TRACE_CONTEXT - -namespace AzToolsFramework -{ - namespace Debug - { - -#ifdef AZ_ENABLE_TRACE_CONTEXT - - int TraceContextBufferedFormatter::Print(char* buffer, size_t bufferSize, const TraceContextStackInterface& stack, bool printUuids, size_t startIndex) - { - if (bufferSize == 0) - { - return -1; - } - - // Make sure there's always a terminator, even if nothing has been written. - buffer[0] = 0; - - size_t stackSize = stack.GetStackCount(); - for (size_t i = startIndex; i < stackSize; ++i) - { - int written = 0; - switch (stack.GetType(i)) - { - case TraceContextStackInterface::ContentType::StringType: - written = azsnprintf(buffer, bufferSize, "%s=%s\n", stack.GetKey(i), stack.GetStringValue(i)); - break; - case TraceContextStackInterface::ContentType::BoolType: - written = azsnprintf(buffer, bufferSize, "%s=%c\n", stack.GetKey(i), (stack.GetBoolValue(i) ? '1' : '0')); - break; - case TraceContextStackInterface::ContentType::IntType: - written = azsnprintf(buffer, bufferSize, "%s=%" PRIi64 "\n", stack.GetKey(i), stack.GetIntValue(i)); - break; - case TraceContextStackInterface::ContentType::UintType: - written = azsnprintf(buffer, bufferSize, "%s=%" PRIu64 "\n", stack.GetKey(i), stack.GetUIntValue(i)); - break; - case TraceContextStackInterface::ContentType::FloatType: - written = azsnprintf(buffer, bufferSize, "%s=%f\n", stack.GetKey(i), stack.GetFloatValue(i)); - break; - case TraceContextStackInterface::ContentType::DoubleType: - written = azsnprintf(buffer, bufferSize, "%s=%f\n", stack.GetKey(i), stack.GetDoubleValue(i)); - break; - case TraceContextStackInterface::ContentType::UuidType: - if (printUuids) - { - written = azsnprintf(buffer, bufferSize, "%s=", stack.GetKey(i)); - if (written > 0) - { - int uuidWritten = PrintUuid(buffer + written, bufferSize - written, stack.GetUuidValue(i)); - written = (uuidWritten < 0 ? -1 : (written + uuidWritten)); - } - break; - } - else - { - continue; - } - case TraceContextStackInterface::ContentType::Undefined: - written = azsnprintf(buffer, bufferSize, "\n"); - break; - default: - written = azsnprintf(buffer, bufferSize, "\n"); - break; - } - - // If successful azsnprintf will return the number of characters that were - // written, so move the buffer forward and reduce the available space. - // Otherwise see if there's anything written that needs to be recovered - // or to simply move to the next entry upon re-entry. - if (written > 0) - { - buffer += written; - bufferSize -= written; - } - else - { - // If the startIndex is the same as the current index, this is the first - // entry to be written. It means this is the largest the buffer will - // ever get, so leave whatever has been written in place. Do however - // add a newline. - if (startIndex == i) - { - if (bufferSize >= 2) - { - buffer[bufferSize - 2] = '\n'; - buffer[bufferSize - 1] = 0; - } - return aznumeric_caster(i + 1); - } - else - { - if (bufferSize > 0) - { - // Remove whatever part has been written as it's not complete. - *buffer = 0; - } - } - return aznumeric_caster(i); - } - } - return -1; - } - - int TraceContextBufferedFormatter::PrintUuid(char* buffer, size_t bufferSize, const AZ::Uuid& uuid) - { - int written = uuid.ToString(buffer, aznumeric_caster(bufferSize), false); - if (written > 0) - { - if (bufferSize > written) - { - buffer[written - 1] = '\n'; - buffer[written] = 0; - return written + 1; - } - } - return -1; - } - -#else // AZ_ENABLE_TRACE_CONTEXT - - int TraceContextBufferedFormatter::Print(char* /*buffer*/, size_t /*bufferSize*/, - const TraceContextStackInterface& /*stack*/, bool /*printUuids*/, size_t /*startIndex*/) - { - return -1; - } - -#endif // AZ_ENABLE_TRACE_CONTEXT - } // Debug -} // AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Debug/TraceContextBufferedFormatter.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Debug/TraceContextBufferedFormatter.h deleted file mode 100644 index 7de1ccfadb..0000000000 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Debug/TraceContextBufferedFormatter.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * 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 - -#include - -namespace AZ -{ - struct Uuid; -} - -namespace AzToolsFramework -{ - namespace Debug - { - class TraceContextStackInterface; - - // TraceContexBufferedFormatter takes a trace context stack and prints it to the given buffer. - // It's aimed to be used with small to micro sized character buffers. (At least 50-100 - // characters is advised.) If the entire context couldn't be written to the buffer, Build - // can be called repeatedly with the returned index to continue printing the buffer. If a - // single context entry doesn't fit in the buffer, TraceContexBufferedFormatter will attempt - // to write as much data as can be fitted in the buffer. - // - // Typical usage looks like: - // TraceContextSingleStackHandler stackHandler; - // ... - // TraceContexBufferedFormatter buffered; - // char buffer[64]; - // int index = 0; - // do - // { - // index = buffered.Build(buffer, stackHandler.GetStack(), true, index); - // Print(buffer); - // } while (index >= 0); - // - // Example output: - // String=text - // Integer=42 - // Float=3.141500 - // Uuid=E2C7EEFA-B1CA-465F-A4BC-30514F76B7B5 - - class TraceContextBufferedFormatter - { - public: - // Prints the trace context to the given buffer, tags. - // If printUuids is true, the uuid of objects and tags is printed as well. - // Use startIndex to continue from a specific entry. - // Returns the index of the next entry to be written or -1 if no entries are left. - static int Print(char* buffer, size_t bufferSize, const TraceContextStackInterface& stack, bool printUuids, size_t startIndex = 0); - - template - static inline int Print(char(&buffer)[size], const TraceContextStackInterface& stack, bool printUuids, size_t startIndex = 0); - - private: - static int PrintUuid(char* buffer, size_t bufferSize, const AZ::Uuid& uuid); - }; - } // Debug -} // AzToolsFramework - -#include diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Debug/TraceContextBufferedFormatter.inl b/Code/Framework/AzToolsFramework/AzToolsFramework/Debug/TraceContextBufferedFormatter.inl deleted file mode 100644 index 8b4ebcbd48..0000000000 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Debug/TraceContextBufferedFormatter.inl +++ /dev/null @@ -1,19 +0,0 @@ -/* - * 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 - * - */ - -namespace AzToolsFramework -{ - namespace Debug - { - template - inline int TraceContextBufferedFormatter::Print(char(&buffer)[size], const TraceContextStackInterface& stack, bool printUuids, size_t startIndex) - { - return Print(buffer, size, stack, printUuids, startIndex); - } - } // Debug -} // AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake b/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake index dc2ceabfcc..b96eccad18 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake @@ -105,9 +105,6 @@ set(FILES Debug/TraceContextSingleStackHandler.cpp Debug/TraceContextMultiStackHandler.h Debug/TraceContextMultiStackHandler.cpp - Debug/TraceContextBufferedFormatter.cpp - Debug/TraceContextBufferedFormatter.inl - Debug/TraceContextBufferedFormatter.h Debug/TraceContextLogFormatter.cpp Debug/TraceContextLogFormatter.h Component/EditorComponentAPIBus.h From c13ceea767aeb5e72e35cd62e6fdabfc96c7a064 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Tue, 23 Nov 2021 16:12:16 -0800 Subject: [PATCH 114/284] Some fixes for Windows non-unity builds Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Editor/Util/ColorUtils.cpp | 1 + Code/Editor/Util/GuidUtil.h | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Code/Editor/Util/ColorUtils.cpp b/Code/Editor/Util/ColorUtils.cpp index 3ca715e021..eaaea8a2ef 100644 --- a/Code/Editor/Util/ColorUtils.cpp +++ b/Code/Editor/Util/ColorUtils.cpp @@ -8,6 +8,7 @@ // Qt #include +#include ////////////////////////////////////////////////////////////////////////// QColor ColorLinearToGamma(ColorF col) diff --git a/Code/Editor/Util/GuidUtil.h b/Code/Editor/Util/GuidUtil.h index f42021ae2a..762b556f44 100644 --- a/Code/Editor/Util/GuidUtil.h +++ b/Code/Editor/Util/GuidUtil.h @@ -14,7 +14,12 @@ #define CRYINCLUDE_EDITOR_UTIL_GUIDUTIL_H #pragma once -#include "AzCore/Math/Uuid.h" +#include + +#ifndef _REFGUID_DEFINED +#define _REFGUID_DEFINED +typedef const GUID& REFGUID; +#endif struct GuidUtil { From b3ba73db3bd562f30e7e7e11b77ac16d2243c956 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Tue, 23 Nov 2021 16:12:46 -0800 Subject: [PATCH 115/284] Removing unneded include form multiple files Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Plugins/EditorAssetImporter/AssetImporterDocument.cpp | 1 - .../AzToolsFramework/AssetDatabase/AssetDatabaseConnection.cpp | 1 - .../AzToolsFramework/UI/PropertyEditor/GrowTextEdit.cpp | 2 +- .../UI/PropertyEditor/ThumbnailPropertyCtrl.cpp | 2 +- Code/Tools/SceneAPI/SceneCore/Events/AssetImportRequest.cpp | 1 - .../SceneData/Behaviors/ScriptProcessorRuleBehavior.cpp | 1 - Code/Tools/SceneAPI/SceneUI/RowWidgets/HeaderHandler.cpp | 1 - .../Code/Source/Editor/CommonFiles/GlobalBuildOptions.cpp | 1 - .../Asset/Shader/Code/Source/Editor/ShaderBuilderUtility.cpp | 1 - .../Source/RPI.Builders/Model/MaterialAssetBuilderComponent.cpp | 1 - .../Code/EMotionFX/Pipeline/RCExt/Actor/MorphTargetExporter.cpp | 1 - .../Pipeline/SceneAPIExt/Behaviors/MorphTargetRuleBehavior.cpp | 1 - .../EMotionFX/Pipeline/SceneAPIExt/Rules/ExternalToolRule.inl | 1 - .../Source/Editor/PropertyWidgets/LODTreeSelectionHandler.cpp | 1 - .../Components/TangentGenerator/TangentGenerateComponent.cpp | 2 -- 15 files changed, 2 insertions(+), 16 deletions(-) diff --git a/Code/Editor/Plugins/EditorAssetImporter/AssetImporterDocument.cpp b/Code/Editor/Plugins/EditorAssetImporter/AssetImporterDocument.cpp index 105a5b4954..4c65affd83 100644 --- a/Code/Editor/Plugins/EditorAssetImporter/AssetImporterDocument.cpp +++ b/Code/Editor/Plugins/EditorAssetImporter/AssetImporterDocument.cpp @@ -7,7 +7,6 @@ */ #include -#include #include #include #include diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetDatabase/AssetDatabaseConnection.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetDatabase/AssetDatabaseConnection.cpp index 2e8e4ef639..37d0c62206 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetDatabase/AssetDatabaseConnection.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetDatabase/AssetDatabaseConnection.cpp @@ -14,7 +14,6 @@ #include #include #include -#include #include #include #include diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/GrowTextEdit.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/GrowTextEdit.cpp index 3aac294fe6..ef78543ea4 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/GrowTextEdit.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/GrowTextEdit.cpp @@ -6,7 +6,7 @@ * */ -#include +#include AZ_PUSH_DISABLE_WARNING(4251 4800, "-Wunknown-warning-option") // 4251: 'QRawFont::d': class 'QExplicitlySharedDataPointer' needs to have dll-interface to be used by clients of class 'QRawFont' // 4800: 'QTextEngine *const ': forcing value to bool 'true' or 'false' (performance warning) #include diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/ThumbnailPropertyCtrl.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/ThumbnailPropertyCtrl.cpp index 0bbb898196..ec817f4ae1 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/ThumbnailPropertyCtrl.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/ThumbnailPropertyCtrl.cpp @@ -6,7 +6,7 @@ * */ -#include +#include // 4251: 'QRawFont::d': class 'QExplicitlySharedDataPointer' needs to have dll-interface to be used by clients of class // 'QRawFont' 4800: 'QTextEngine *const ': forcing value to bool 'true' or 'false' (performance warning) diff --git a/Code/Tools/SceneAPI/SceneCore/Events/AssetImportRequest.cpp b/Code/Tools/SceneAPI/SceneCore/Events/AssetImportRequest.cpp index c98fa63916..c3b4ac2889 100644 --- a/Code/Tools/SceneAPI/SceneCore/Events/AssetImportRequest.cpp +++ b/Code/Tools/SceneAPI/SceneCore/Events/AssetImportRequest.cpp @@ -10,7 +10,6 @@ #include #include #include -#include #include #include #include diff --git a/Code/Tools/SceneAPI/SceneData/Behaviors/ScriptProcessorRuleBehavior.cpp b/Code/Tools/SceneAPI/SceneData/Behaviors/ScriptProcessorRuleBehavior.cpp index 6046bfa620..5fd4dcd387 100644 --- a/Code/Tools/SceneAPI/SceneData/Behaviors/ScriptProcessorRuleBehavior.cpp +++ b/Code/Tools/SceneAPI/SceneData/Behaviors/ScriptProcessorRuleBehavior.cpp @@ -18,7 +18,6 @@ #include #include #include -#include #include #include #include diff --git a/Code/Tools/SceneAPI/SceneUI/RowWidgets/HeaderHandler.cpp b/Code/Tools/SceneAPI/SceneUI/RowWidgets/HeaderHandler.cpp index 0a9fc06286..9aa9f8d1b6 100644 --- a/Code/Tools/SceneAPI/SceneUI/RowWidgets/HeaderHandler.cpp +++ b/Code/Tools/SceneAPI/SceneUI/RowWidgets/HeaderHandler.cpp @@ -7,7 +7,6 @@ */ #include -#include #include namespace AZ diff --git a/Gems/Atom/Asset/Shader/Code/Source/Editor/CommonFiles/GlobalBuildOptions.cpp b/Gems/Atom/Asset/Shader/Code/Source/Editor/CommonFiles/GlobalBuildOptions.cpp index da77df898b..2adab92d0d 100644 --- a/Gems/Atom/Asset/Shader/Code/Source/Editor/CommonFiles/GlobalBuildOptions.cpp +++ b/Gems/Atom/Asset/Shader/Code/Source/Editor/CommonFiles/GlobalBuildOptions.cpp @@ -12,7 +12,6 @@ #include #include -#include #include diff --git a/Gems/Atom/Asset/Shader/Code/Source/Editor/ShaderBuilderUtility.cpp b/Gems/Atom/Asset/Shader/Code/Source/Editor/ShaderBuilderUtility.cpp index 911981142b..ae1088e662 100644 --- a/Gems/Atom/Asset/Shader/Code/Source/Editor/ShaderBuilderUtility.cpp +++ b/Gems/Atom/Asset/Shader/Code/Source/Editor/ShaderBuilderUtility.cpp @@ -12,7 +12,6 @@ #include #include -#include #include #include diff --git a/Gems/Atom/RPI/Code/Source/RPI.Builders/Model/MaterialAssetBuilderComponent.cpp b/Gems/Atom/RPI/Code/Source/RPI.Builders/Model/MaterialAssetBuilderComponent.cpp index 35a903dac0..07b48a78f1 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Builders/Model/MaterialAssetBuilderComponent.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Builders/Model/MaterialAssetBuilderComponent.cpp @@ -13,7 +13,6 @@ #include #include -#include #include #include diff --git a/Gems/EMotionFX/Code/EMotionFX/Pipeline/RCExt/Actor/MorphTargetExporter.cpp b/Gems/EMotionFX/Code/EMotionFX/Pipeline/RCExt/Actor/MorphTargetExporter.cpp index e4ae782782..265b003090 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Pipeline/RCExt/Actor/MorphTargetExporter.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Pipeline/RCExt/Actor/MorphTargetExporter.cpp @@ -11,7 +11,6 @@ #include #include #include -#include #include #include #include diff --git a/Gems/EMotionFX/Code/EMotionFX/Pipeline/SceneAPIExt/Behaviors/MorphTargetRuleBehavior.cpp b/Gems/EMotionFX/Code/EMotionFX/Pipeline/SceneAPIExt/Behaviors/MorphTargetRuleBehavior.cpp index f6a11e3004..70abe37817 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Pipeline/SceneAPIExt/Behaviors/MorphTargetRuleBehavior.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Pipeline/SceneAPIExt/Behaviors/MorphTargetRuleBehavior.cpp @@ -8,7 +8,6 @@ #include #include -#include #include #include #include diff --git a/Gems/EMotionFX/Code/EMotionFX/Pipeline/SceneAPIExt/Rules/ExternalToolRule.inl b/Gems/EMotionFX/Code/EMotionFX/Pipeline/SceneAPIExt/Rules/ExternalToolRule.inl index 511bab83d1..6aca774f62 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Pipeline/SceneAPIExt/Rules/ExternalToolRule.inl +++ b/Gems/EMotionFX/Code/EMotionFX/Pipeline/SceneAPIExt/Rules/ExternalToolRule.inl @@ -9,7 +9,6 @@ #include #include #include -#include #include #include #include diff --git a/Gems/EMotionFX/Code/Source/Editor/PropertyWidgets/LODTreeSelectionHandler.cpp b/Gems/EMotionFX/Code/Source/Editor/PropertyWidgets/LODTreeSelectionHandler.cpp index be916c8e3a..7c1e45e5ac 100644 --- a/Gems/EMotionFX/Code/Source/Editor/PropertyWidgets/LODTreeSelectionHandler.cpp +++ b/Gems/EMotionFX/Code/Source/Editor/PropertyWidgets/LODTreeSelectionHandler.cpp @@ -7,7 +7,6 @@ */ #include -#include #include #include #include diff --git a/Gems/SceneProcessing/Code/Source/Generation/Components/TangentGenerator/TangentGenerateComponent.cpp b/Gems/SceneProcessing/Code/Source/Generation/Components/TangentGenerator/TangentGenerateComponent.cpp index fdf58f2502..144638a351 100644 --- a/Gems/SceneProcessing/Code/Source/Generation/Components/TangentGenerator/TangentGenerateComponent.cpp +++ b/Gems/SceneProcessing/Code/Source/Generation/Components/TangentGenerator/TangentGenerateComponent.cpp @@ -27,8 +27,6 @@ #include #include -#include - #include #include From 8eebbd53a427e0744de4409c7094d10890be3afd Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 22 Nov 2021 17:03:35 -0800 Subject: [PATCH 116/284] Removes IAudioSystemMock from CryCommon Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Legacy/CryCommon/Mocks/IAudioSystemMock.h | 59 ------------------- .../CryCommon/crycommon_testing_files.cmake | 1 - .../Code/Tests/AudioSystemTest.cpp | 1 - 3 files changed, 61 deletions(-) delete mode 100644 Code/Legacy/CryCommon/Mocks/IAudioSystemMock.h diff --git a/Code/Legacy/CryCommon/Mocks/IAudioSystemMock.h b/Code/Legacy/CryCommon/Mocks/IAudioSystemMock.h deleted file mode 100644 index e93be4813f..0000000000 --- a/Code/Legacy/CryCommon/Mocks/IAudioSystemMock.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * 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 - -#include - -namespace Audio -{ - struct AudioProxyMock - : public IAudioProxy - { - MOCK_METHOD2(Initialize, void(const char* const sObjectName, bool bInitAsync /* = true */)); - MOCK_METHOD0(Release, void()); - MOCK_METHOD0(Reset, void()); - MOCK_METHOD1(StopTrigger, void(TAudioControlID nTriggerID)); - MOCK_METHOD2(SetSwitchState, void(TAudioControlID nSwitchID, TAudioSwitchStateID nStateID)); - MOCK_METHOD2(SetRtpcValue, void(TAudioControlID nRtpcID, float fValue)); - MOCK_METHOD1(SetObstructionCalcType, void(EAudioObjectObstructionCalcType eObstructionType)); - MOCK_METHOD1(SetPosition, void(const SATLWorldPosition& rPosition)); - MOCK_METHOD1(SetPosition, void(const AZ::Vector3& rPosition)); - MOCK_METHOD2(SetEnvironmentAmount, void(TAudioEnvironmentID nEnvironmentID, float fAmount)); - MOCK_METHOD0(SetCurrentEnvironments, void()); - MOCK_CONST_METHOD0(GetAudioObjectID, TAudioObjectID()); - }; - - struct AudioSystemMock - : public IAudioSystem - { - MOCK_METHOD0(Initialize, bool()); - MOCK_METHOD0(Release, void()); - MOCK_METHOD1(PushRequest, void(const SAudioRequest& rAudioRequestData)); - MOCK_METHOD4(AddRequestListener, void(AudioRequestCallbackType func, void* pObjectToListenTo, EAudioRequestType requestType /* = eART_AUDIO_ALL_REQUESTS */, TATLEnumFlagsType specificRequestMask /* = ALL_AUDIO_REQUEST_SPECIFIC_TYPE_FLAGS */)); - MOCK_METHOD2(RemoveRequestListener, void(AudioRequestCallbackType func, void* pObjectToListenTo)); - MOCK_METHOD0(ExternalUpdate, void()); - MOCK_CONST_METHOD1(GetAudioTriggerID, TAudioControlID(const char* sAudioTriggerName)); - MOCK_CONST_METHOD1(GetAudioRtpcID, TAudioControlID(const char* sAudioRtpcName)); - MOCK_CONST_METHOD1(GetAudioSwitchID, TAudioControlID(const char* sAudioSwitchName)); - MOCK_CONST_METHOD2(GetAudioSwitchStateID, TAudioSwitchStateID(const TAudioControlID nSwitchID, const char* sAudioStateName)); - MOCK_CONST_METHOD1(GetAudioPreloadRequestID, TAudioPreloadRequestID(const char* sAudioPreloadRequestName)); - MOCK_CONST_METHOD1(GetAudioEnvironmentID, TAudioEnvironmentID(const char* sAudioEnvironmentName)); - MOCK_METHOD1(ReserveAudioListenerID, bool(TAudioObjectID& rAudioListenerID)); - MOCK_METHOD1(ReleaseAudioListenerID, bool(TAudioObjectID nAudioObjectID)); - MOCK_METHOD1(OnCVarChanged, void(ICVar* const pCVar)); - MOCK_METHOD1(GetInfo, void(SAudioSystemInfo& rAudioSystemInfo)); - MOCK_CONST_METHOD0(GetControlsPath, const char*()); - MOCK_METHOD0(UpdateControlsPath, void()); - MOCK_METHOD0(GetFreeAudioProxy, IAudioProxy*()); - MOCK_METHOD1(FreeAudioProxy, void(IAudioProxy* pIAudioProxy)); - MOCK_CONST_METHOD2(GetAudioControlName, const char*(EAudioControlType eAudioEntityType, TATLIDType nAudioEntityID)); - MOCK_CONST_METHOD2(GetAudioSwitchStateName, const char*(TAudioControlID switchID, TAudioSwitchStateID stateID)); - }; - -} // namespace Audio diff --git a/Code/Legacy/CryCommon/crycommon_testing_files.cmake b/Code/Legacy/CryCommon/crycommon_testing_files.cmake index 42deecd576..de7a764330 100644 --- a/Code/Legacy/CryCommon/crycommon_testing_files.cmake +++ b/Code/Legacy/CryCommon/crycommon_testing_files.cmake @@ -7,7 +7,6 @@ # set(FILES - Mocks/IAudioSystemMock.h Mocks/IConsoleMock.h Mocks/ICryPakMock.h Mocks/ILogMock.h diff --git a/Gems/AudioSystem/Code/Tests/AudioSystemTest.cpp b/Gems/AudioSystem/Code/Tests/AudioSystemTest.cpp index 14e9f74fd2..1f03eec419 100644 --- a/Gems/AudioSystem/Code/Tests/AudioSystemTest.cpp +++ b/Gems/AudioSystem/Code/Tests/AudioSystemTest.cpp @@ -21,7 +21,6 @@ #include #include -#include #include #include From 4d2e4f437a6a1be91540e312609781c3c1988791 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 22 Nov 2021 17:27:23 -0800 Subject: [PATCH 117/284] Removes ILogMock from CryCommon/Mocks Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Lib/Tests/test_EditorPythonBindings.cpp | 1 - Code/Legacy/CryCommon/Mocks/ILogMock.h | 57 ------------------- .../CryCommon/crycommon_testing_files.cmake | 1 - 3 files changed, 59 deletions(-) delete mode 100644 Code/Legacy/CryCommon/Mocks/ILogMock.h diff --git a/Code/Editor/Lib/Tests/test_EditorPythonBindings.cpp b/Code/Editor/Lib/Tests/test_EditorPythonBindings.cpp index 49b65f7ffc..0c5e221d21 100644 --- a/Code/Editor/Lib/Tests/test_EditorPythonBindings.cpp +++ b/Code/Editor/Lib/Tests/test_EditorPythonBindings.cpp @@ -25,7 +25,6 @@ #include #include #include -#include #include #include "IEditorMock.h" diff --git a/Code/Legacy/CryCommon/Mocks/ILogMock.h b/Code/Legacy/CryCommon/Mocks/ILogMock.h deleted file mode 100644 index ac2ba7f32c..0000000000 --- a/Code/Legacy/CryCommon/Mocks/ILogMock.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * 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 -#include - -class LogMock - : public ILog -{ -public: - MOCK_METHOD3(LogV, - void(ELogType nType, const char* szFormat, va_list args)); - MOCK_METHOD4(LogV, - void(ELogType nType, int flags, const char* szFormat, va_list args)); - MOCK_METHOD0(Release, - void()); - MOCK_METHOD2(SetFileName, - bool(const char* fileNameOrFullPath, bool doBackups)); - MOCK_METHOD0(GetFileName, - const char*()); - MOCK_METHOD0(GetBackupFileName, - const char*()); - - virtual void Log([[maybe_unused]] const char* szCommand, ...) override {} - virtual void LogWarning([[maybe_unused]] const char* szCommand, ...) override {} - virtual void LogError([[maybe_unused]] const char* szCommand, ...) override {} - virtual void LogAlways([[maybe_unused]] const char* szCommand, ...) override {} - virtual void LogPlus([[maybe_unused]] const char* command, ...) override {} - virtual void LogToFile([[maybe_unused]] const char* command, ...) override {} - virtual void LogToFilePlus([[maybe_unused]] const char* command, ...) override {} - virtual void LogToConsole([[maybe_unused]] const char* command, ...) override {} - virtual void LogToConsolePlus([[maybe_unused]] const char* command, ...) override {} - virtual void UpdateLoadingScreen([[maybe_unused]] const char* command, ...) override {} - - MOCK_METHOD1(SetVerbosity, - void(int verbosity)); - MOCK_METHOD0(GetVerbosityLevel, - int()); - MOCK_METHOD1(AddCallback, - void(ILogCallback * pCallback)); - MOCK_METHOD1(RemoveCallback, - void(ILogCallback * pCallback)); - MOCK_METHOD0(Update, - void()); - MOCK_METHOD0(GetModuleFilter, - const char*()); - MOCK_METHOD1(Indent, - void(class CLogIndenter * indenter)); - MOCK_METHOD1(Unindent, - void(class CLogIndenter * indenter)); - MOCK_METHOD0(FlushAndClose, - void()); -}; diff --git a/Code/Legacy/CryCommon/crycommon_testing_files.cmake b/Code/Legacy/CryCommon/crycommon_testing_files.cmake index de7a764330..5131e162f6 100644 --- a/Code/Legacy/CryCommon/crycommon_testing_files.cmake +++ b/Code/Legacy/CryCommon/crycommon_testing_files.cmake @@ -9,7 +9,6 @@ set(FILES Mocks/IConsoleMock.h Mocks/ICryPakMock.h - Mocks/ILogMock.h Mocks/ISystemMock.h Mocks/ICVarMock.h ) From ef97c2d3b8327cc4391ebccfc738d367b37ab718 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 22 Nov 2021 17:46:22 -0800 Subject: [PATCH 118/284] Removes XMLBinaryWriter from CrySystem Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Legacy/CrySystem/XML/XMLBinaryWriter.cpp | 284 ------------------ Code/Legacy/CrySystem/XML/XMLBinaryWriter.h | 53 ---- Code/Legacy/CrySystem/XML/XmlUtils.cpp | 1 - .../XML/crysystem_xmlbinary_files.cmake | 2 - 4 files changed, 340 deletions(-) delete mode 100644 Code/Legacy/CrySystem/XML/XMLBinaryWriter.cpp delete mode 100644 Code/Legacy/CrySystem/XML/XMLBinaryWriter.h diff --git a/Code/Legacy/CrySystem/XML/XMLBinaryWriter.cpp b/Code/Legacy/CrySystem/XML/XMLBinaryWriter.cpp deleted file mode 100644 index 63bf4adef2..0000000000 --- a/Code/Legacy/CrySystem/XML/XMLBinaryWriter.cpp +++ /dev/null @@ -1,284 +0,0 @@ -/* - * 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 -#include "XMLBinaryWriter.h" -#include "CryEndian.h" -#include // memcpy() - -////////////////////////////////////////////////////////////////////////// -XMLBinary::CXMLBinaryWriter::CXMLBinaryWriter() -{ - m_nStringDataSize = 0; -} - -static void align(size_t& nPosition, const size_t nAlignment) -{ - const size_t nPadSize = ((nPosition + (nAlignment - 1)) & ~(nAlignment - 1)) - nPosition; - nPosition += nPadSize; -} - -static void alignWrite(XMLBinary::IDataWriter* const pFile, size_t& nPosition, const size_t nAlignment) -{ - size_t nPadSize = ((nPosition + (nAlignment - 1)) & ~(nAlignment - 1)) - nPosition; - - if (nPadSize > 0) - { - nPosition += nPadSize; - - static const char zeroes[32] = { 0 }; - - while (nPadSize > 0) - { - const size_t n = (nPadSize <= sizeof(zeroes)) ? nPadSize : sizeof(zeroes); - nPadSize -= n; - pFile->Write(zeroes, n); - } - } -} - -static void write(XMLBinary::IDataWriter* const pFile, size_t& nPosition, const void* const pData, const size_t nDataSize) -{ - pFile->Write(pData, nDataSize); - nPosition += nDataSize; -} - -////////////////////////////////////////////////////////////////////////// -bool XMLBinary::CXMLBinaryWriter::WriteNode(IDataWriter* pFile, XmlNodeRef node, XMLBinary::IFilter* pFilter, AZStd::string& error) -{ - error = ""; - - // Scan the node tree, building a flat node list, attribute list and string table. - m_nStringDataSize = 0; - - if (!CompileTables(node, pFilter, error)) - { - return false; - } - - static const uint nMaxNodeCount = (NodeIndex) ~0; - if (m_nodes.size() > nMaxNodeCount) - { - error = AZStd::string::format("XMLBinary: Too many nodes: %zu (max is %i)", m_nodes.size(), nMaxNodeCount); - return false; - } - - // Initialize the file header. - size_t nTheoreticalPosition = 0; - static const size_t nAlignment = sizeof(uint32); - - BinaryFileHeader header; - static const char signature[] = "CryXmlB"; - static_assert(sizeof(signature) == sizeof(header.szSignature)); - memcpy(header.szSignature, signature, sizeof(header.szSignature)); - nTheoreticalPosition += sizeof(header); - align(nTheoreticalPosition, nAlignment); - - header.nNodeTablePosition = static_cast(nTheoreticalPosition); - header.nNodeCount = int(m_nodes.size()); - nTheoreticalPosition += header.nNodeCount * sizeof(Node); - align(nTheoreticalPosition, nAlignment); - - header.nChildTablePosition = static_cast(nTheoreticalPosition); - header.nChildCount = int(m_childs.size()); - nTheoreticalPosition += header.nChildCount * sizeof(NodeIndex); - align(nTheoreticalPosition, nAlignment); - - header.nAttributeTablePosition = static_cast(nTheoreticalPosition); - header.nAttributeCount = int(m_attributes.size()); - nTheoreticalPosition += header.nAttributeCount * sizeof(Attribute); - align(nTheoreticalPosition, nAlignment); - - header.nStringDataPosition = static_cast(nTheoreticalPosition); - header.nStringDataSize = m_nStringDataSize; - nTheoreticalPosition += header.nStringDataSize; - - header.nXMLSize = static_cast(nTheoreticalPosition); - - // Write file - { - nTheoreticalPosition = 0; - - // Write out the file header. - write(pFile, nTheoreticalPosition, &header, sizeof(header)); - alignWrite(pFile, nTheoreticalPosition, nAlignment); - - // Write out the node table. - if (!m_nodes.empty()) - { - write(pFile, nTheoreticalPosition, &m_nodes[0], sizeof(m_nodes[0]) * m_nodes.size()); - alignWrite(pFile, nTheoreticalPosition, nAlignment); - } - - // Write out the children table. - if (!m_childs.empty()) - { - write(pFile, nTheoreticalPosition, &m_childs[0], sizeof(m_childs[0]) * m_childs.size()); - alignWrite(pFile, nTheoreticalPosition, nAlignment); - } - - // Write out the attribute table. - if (!m_attributes.empty()) - { - write(pFile, nTheoreticalPosition, &m_attributes[0], sizeof(m_attributes[0]) * m_attributes.size()); - alignWrite(pFile, nTheoreticalPosition, nAlignment); - } - - // Write out the data of all the m_strings. - for (size_t nString = 0; nString < m_strings.size(); ++nString) - { - pFile->Write(m_strings[nString].c_str(), m_strings[nString].size() + 1); - } - } - - return true; -} - -bool XMLBinary::CXMLBinaryWriter::CompileTables(XmlNodeRef node, XMLBinary::IFilter* pFilter, AZStd::string& error) -{ - bool ok = CompileTablesForNode(node, -1, pFilter, error); - ok = ok && CompileChildTable(node, pFilter, error); - return ok; -} - -////////////////////////////////////////////////////////////////////////// -bool XMLBinary::CXMLBinaryWriter::CompileTablesForNode(XmlNodeRef node, int nParentIndex, XMLBinary::IFilter* pFilter, AZStd::string& error) -{ - // Add the tag to the string table. - int nTagStringOffset = AddString(node->getTag()); - - // Add the content string to the string table. - int nContentStringOffset = AddString(node->getContent()); - - // Add all the attributes to the attributes table. - const char* szKey; - const char* szValue; - const int nFirstAttributeIndex = int(m_attributes.size()); - for (int i = 0, attrCount = node->getNumAttributes(); i < attrCount; ++i) - { - if (node->getAttributeByIndex(i, &szKey, &szValue) && - (!pFilter || pFilter->IsAccepted(IFilter::eType_AttributeName, szKey))) - { - // Add the key and the value to the string table. - Attribute attribute; - attribute.nKeyStringOffset = AddString(szKey); - attribute.nValueStringOffset = AddString(szValue); - - // Add the attribute to the attribute table. - m_attributes.push_back(attribute); - } - } - const int nAttributeCount = int(m_attributes.size()) - nFirstAttributeIndex; - - static const int nMaxAttributeCount = (uint16) ~0; - if (nAttributeCount > nMaxAttributeCount) - { - error = AZStd::string::format("XMLBinary: Too many attributes in a node: %d (max is %i)", nAttributeCount, nMaxAttributeCount); - return false; - } - - // Add ourselves to the node list. - const int nIndex = int(m_nodes.size()); - { - Node nd; - memset(&nd, 0, sizeof(nd)); - nd.nTagStringOffset = nTagStringOffset; - nd.nContentStringOffset = nContentStringOffset; - nd.nParentIndex = nParentIndex; - nd.nFirstAttributeIndex = nFirstAttributeIndex; - nd.nAttributeCount = static_cast(nAttributeCount); - - m_nodes.push_back(nd); - } - - m_nodesMap.insert(NodesMap::value_type(node, nIndex)); - - // Recurse to the child nodes. - int nChildCount = 0; - static const int nMaxChildCount = (uint16) ~0; - for (int nChild = 0, numChilds = node->getChildCount(); nChild < numChilds; ++nChild) - { - XmlNodeRef childNode = node->getChild(nChild); - if (!pFilter || pFilter->IsAccepted(IFilter::eType_ElementName, childNode->getTag())) - { - if (++nChildCount > nMaxChildCount) - { - error = AZStd::string::format("XMLBinary: Too many children in node '%s': %d (max is %i)", childNode->getTag(), nChildCount, nMaxChildCount); - return false; - } - if (!CompileTablesForNode(childNode, nIndex, pFilter, error)) - { - return false; - } - } - } - - m_nodes[nIndex].nChildCount = static_cast(nChildCount); - - return true; -} - -////////////////////////////////////////////////////////////////////////// -bool XMLBinary::CXMLBinaryWriter::CompileChildTable(XmlNodeRef node, XMLBinary::IFilter* pFilter, AZStd::string& error) -{ - const int nIndex = m_nodesMap.find(node)->second; // Assume node always exist in map. - const int nFirstChildIndex = (int)m_childs.size(); - - Node& nd = m_nodes[nIndex]; - nd.nFirstChildIndex = nFirstChildIndex; - - int nChildCount = 0; - for (int nChild = 0, numChilds = node->getChildCount(); nChild < numChilds; ++nChild) - { - XmlNodeRef childNode = node->getChild(nChild); - if (!pFilter || pFilter->IsAccepted(IFilter::eType_ElementName, childNode->getTag())) - { - ++nChildCount; - const int nChildIndex = m_nodesMap.find(childNode)->second; // Assume node always exist in map. - m_childs.push_back(nChildIndex); - } - } - if (nChildCount != nd.nChildCount) - { - error = AZStd::string::format("XMLBinary: Internal error in CompileChildTable()"); - return false; - } - - // Recurse to the child nodes. - for (int nChild = 0, numChilds = node->getChildCount(); nChild < numChilds; ++nChild) - { - XmlNodeRef childNode = node->getChild(nChild); - if (!pFilter || pFilter->IsAccepted(IFilter::eType_ElementName, childNode->getTag())) - { - if (!CompileChildTable(childNode, pFilter, error)) - { - return false; - } - } - } - - return true; -} - -////////////////////////////////////////////////////////////////////////// -int XMLBinary::CXMLBinaryWriter::AddString(const XmlString& sString) -{ - // If we have such string already, then we will re-use its data. - StringMap::const_iterator itStringEntry = m_stringMap.find(sString); - if (itStringEntry == m_stringMap.end()) - { - // We don't have such string yet, so we should add it to the tables. - m_strings.push_back(sString); - itStringEntry = m_stringMap.insert(StringMap::value_type(sString, m_nStringDataSize)).first; - m_nStringDataSize += static_cast(sString.length() + 1); - } - - // Return offset of the string in the string data buffer. - return (*itStringEntry).second; -} diff --git a/Code/Legacy/CrySystem/XML/XMLBinaryWriter.h b/Code/Legacy/CrySystem/XML/XMLBinaryWriter.h deleted file mode 100644 index 4b0d19fe26..0000000000 --- a/Code/Legacy/CrySystem/XML/XMLBinaryWriter.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * 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 - * - */ - - -#ifndef CRYINCLUDE_CRYSYSTEM_XML_XMLBINARYWRITER_H -#define CRYINCLUDE_CRYSYSTEM_XML_XMLBINARYWRITER_H -#pragma once - - -#include "IXml.h" -#include "XMLBinaryHeaders.h" -#include -#include - -class IXMLDataSink; - -namespace XMLBinary -{ - class CXMLBinaryWriter - { - public: - CXMLBinaryWriter(); - bool WriteNode(IDataWriter* pFile, XmlNodeRef node, XMLBinary::IFilter* pFilter, AZStd::string & error); - - private: - bool CompileTables(XmlNodeRef node, XMLBinary::IFilter* pFilter, AZStd::string& error); - - bool CompileTablesForNode(XmlNodeRef node, int nParentIndex, XMLBinary::IFilter* pFilter, AZStd::string& error); - bool CompileChildTable(XmlNodeRef node, XMLBinary::IFilter* pFilter, AZStd::string& error); - int AddString(const XmlString& sString); - - private: - // tables. - typedef std::map NodesMap; - typedef std::map StringMap; - - std::vector m_nodes; - NodesMap m_nodesMap; - std::vector m_attributes; - std::vector m_childs; - std::vector m_strings; - StringMap m_stringMap; - - uint m_nStringDataSize; - }; -} - -#endif // CRYINCLUDE_CRYSYSTEM_XML_XMLBINARYWRITER_H diff --git a/Code/Legacy/CrySystem/XML/XmlUtils.cpp b/Code/Legacy/CrySystem/XML/XmlUtils.cpp index 26d6f2336b..1eae548dfd 100644 --- a/Code/Legacy/CrySystem/XML/XmlUtils.cpp +++ b/Code/Legacy/CrySystem/XML/XmlUtils.cpp @@ -16,7 +16,6 @@ #include "SerializeXMLReader.h" #include "SerializeXMLWriter.h" -#include "XMLBinaryWriter.h" #include "XMLBinaryReader.h" #include diff --git a/Code/Legacy/CrySystem/XML/crysystem_xmlbinary_files.cmake b/Code/Legacy/CrySystem/XML/crysystem_xmlbinary_files.cmake index 14931fdec1..72d83b5344 100644 --- a/Code/Legacy/CrySystem/XML/crysystem_xmlbinary_files.cmake +++ b/Code/Legacy/CrySystem/XML/crysystem_xmlbinary_files.cmake @@ -11,6 +11,4 @@ set(FILES XMLBinaryNode.h XMLBinaryReader.cpp XMLBinaryReader.h - XMLBinaryWriter.cpp - XMLBinaryWriter.h ) From fc30667795ed8bd6f1108abb5d9c89d0ec07438e Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 1 Dec 2021 11:04:03 -0800 Subject: [PATCH 119/284] Removes ThumbnailDelegate from AzToolsFramework Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Thumbnails/ThumbnailDelegate.h | 48 ------------------- .../Thumbnails/ThumbnailWidget.h | 2 +- 2 files changed, 1 insertion(+), 49 deletions(-) delete mode 100644 Code/Framework/AzToolsFramework/AzToolsFramework/Thumbnails/ThumbnailDelegate.h diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Thumbnails/ThumbnailDelegate.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Thumbnails/ThumbnailDelegate.h deleted file mode 100644 index d21b6d7699..0000000000 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Thumbnails/ThumbnailDelegate.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * 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 - -#include - -#include - -class QWidget; -class QPainter; -class QStyleOptionViewItem; -class QAbstractItemModel; -class QModelIndex; - -namespace AzToolsFramework -{ - namespace Thumbnailer - { - //! Thumbnail delegate can be used as within item views to draw thumbnails - class ThumbnailDelegate - : public QStyledItemDelegate - { - Q_OBJECT - public: - explicit ThumbnailDelegate(QWidget* parent = nullptr); - ~ThumbnailDelegate() override; - - ////////////////////////////////////////////////////////////////////////// - // QStyledItemDelegate - ////////////////////////////////////////////////////////////////////////// - void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override; - QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const override; - void setEditorData(QWidget* editor, const QModelIndex& index) const override; - void setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const override; - //! Set location where thumbnails are searched - void SetThumbnailContext(const char* thumbnailContext); - - private: - AZStd::string m_thumbnailContext; - }; - } // namespace Thumbnailer -} // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Thumbnails/ThumbnailWidget.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Thumbnails/ThumbnailWidget.h index 0674726155..6dab575af5 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Thumbnails/ThumbnailWidget.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Thumbnails/ThumbnailWidget.h @@ -22,7 +22,7 @@ namespace AzToolsFramework { namespace Thumbnailer { - //! A widget used to display thumbnail. To display thumbnails within item views, use ThumbnailDelegate + //! A widget used to display thumbnail class ThumbnailWidget : public QWidget { From 9aa2cbeabac2f28011420ec2c5c685bc5f3a8c58 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 1 Dec 2021 11:44:18 -0800 Subject: [PATCH 120/284] Removes EditorOutlinerComponent from AzToolsFramework Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../ToolsComponents/EditorOutlinerComponent.h | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/EditorOutlinerComponent.h diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/EditorOutlinerComponent.h b/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/EditorOutlinerComponent.h deleted file mode 100644 index 196f0931e0..0000000000 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/EditorOutlinerComponent.h +++ /dev/null @@ -1,7 +0,0 @@ -/* - * 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 - * - */ From f8f9b79f7c0c01903fee2304b252f34ecfb31fdd Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 1 Dec 2021 11:45:59 -0800 Subject: [PATCH 121/284] Removes ToolFileUtils_generic.cpp from AzToolsFramework Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../ToolsFileUtils/ToolsFileUtils_generic.cpp | 47 ------------------- 1 file changed, 47 deletions(-) delete mode 100644 Code/Framework/AzToolsFramework/AzToolsFramework/ToolsFileUtils/ToolsFileUtils_generic.cpp diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsFileUtils/ToolsFileUtils_generic.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsFileUtils/ToolsFileUtils_generic.cpp deleted file mode 100644 index 8357a265ba..0000000000 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsFileUtils/ToolsFileUtils_generic.cpp +++ /dev/null @@ -1,47 +0,0 @@ -/* - * 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 "ToolsFileUtils.h" -#include -#include - -#include - -namespace AzToolsFramework -{ - namespace ToolsFileUtils - { - bool SetModificationTime(const char* const filename, AZ::u64 modificationTime) - { - struct stat statResult; - if (stat(filename, &statResult) != 0) - { - return false; - } - - struct utimbuf puttime; - puttime.modtime = modificationTime; - puttime.actime = static_cast(statResult.st_ctime); - - if (utime(filename, &puttime) == 0) - { - return true; - } - - return false; - } - - bool GetFreeDiskSpace(const QString& path, qint64& outFreeDiskSpace) - { - QStorageInfo storageInfo(path); - outFreeDiskSpace = storageInfo.bytesFree(); - - return outFreeDiskSpace >= 0; - } - } -} From 643bc70c1e1c5fa13a1f53f250d716230b294817 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 1 Dec 2021 11:52:12 -0800 Subject: [PATCH 122/284] Remove ComponentPaletteModelFilter from AzToolsFramework Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../ComponentPaletteModelFilter.cpp | 53 ------------------- .../ComponentPaletteModelFilter.hxx | 29 ---------- .../aztoolsframework_files.cmake | 2 - 3 files changed, 84 deletions(-) delete mode 100644 Code/Framework/AzToolsFramework/AzToolsFramework/UI/ComponentPalette/ComponentPaletteModelFilter.cpp delete mode 100644 Code/Framework/AzToolsFramework/AzToolsFramework/UI/ComponentPalette/ComponentPaletteModelFilter.hxx diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/ComponentPalette/ComponentPaletteModelFilter.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/ComponentPalette/ComponentPaletteModelFilter.cpp deleted file mode 100644 index abc66d1a66..0000000000 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/ComponentPalette/ComponentPaletteModelFilter.cpp +++ /dev/null @@ -1,53 +0,0 @@ -/* - * 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 "ComponentPaletteModelFilter.hxx" -#include - -namespace AzToolsFramework -{ - - ComponentPaletteModelFilter::ComponentPaletteModelFilter(QObject* parent) - : QSortFilterProxyModel(parent) - { - } - - bool ComponentPaletteModelFilter::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const - { - const QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent); - if (!index.isValid()) - { - return false; - } - - if (!filterRegExp().isValid()) - { - return true; - } - - auto componentClass = reinterpret_cast(sourceModel()->data(index, Qt::ItemDataRole::UserRole + 1).toULongLong()); - if (componentClass) - { - const QString componentName = sourceModel()->data(index, Qt::DisplayRole).toString(); - return componentName.contains(filterRegExp()); - } - - const int childRowCount = sourceModel()->rowCount(index); - for (int childRow = 0; childRow < childRowCount; ++childRow) - { - if (filterAcceptsRow(childRow, index)) - { - return true; - } - } - - return false; - } -} - -#include "UI/ComponentPalette/moc_ComponentPaletteModelFilter.cpp" diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/ComponentPalette/ComponentPaletteModelFilter.hxx b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/ComponentPalette/ComponentPaletteModelFilter.hxx deleted file mode 100644 index 19a6c72fe9..0000000000 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/ComponentPalette/ComponentPaletteModelFilter.hxx +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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 - -#if !defined(Q_MOC_RUN) -#include -#endif - -namespace AzToolsFramework -{ - class ComponentPaletteModelFilter : public QSortFilterProxyModel - { - Q_OBJECT - - public: - ComponentPaletteModelFilter(QObject* parent = nullptr); - - bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override; - - protected: - QRegExp m_filterRegExp; - }; -} diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake b/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake index b96eccad18..b28a62a27f 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake @@ -356,8 +356,6 @@ set(FILES UI/ComponentPalette/ComponentPaletteWidget.cpp UI/ComponentPalette/ComponentPaletteModel.hxx UI/ComponentPalette/ComponentPaletteModel.cpp - UI/ComponentPalette/ComponentPaletteModelFilter.hxx - UI/ComponentPalette/ComponentPaletteModelFilter.cpp UI/ComponentPalette/ComponentPaletteUtil.hxx UI/ComponentPalette/ComponentPaletteUtil.cpp UI/Layer/NameConflictWarning.hxx From e2091f245130b61caa4170cce0c4a51f7deeaf2e Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 1 Dec 2021 12:15:20 -0800 Subject: [PATCH 123/284] Removes UIFrameworkAPI.cpp from AzToolsFramework Removes aztoolsframework_win_files.cmake (aztoolsframework_windows_files.cmake is the actual used one) Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../UI/LegacyFramework/UIFrameworkAPI.cpp | 67 ------------------- .../aztoolsframework_win_files.cmake | 34 ---------- .../aztoolsframework_windows_files.cmake | 1 - 3 files changed, 102 deletions(-) delete mode 100644 Code/Framework/AzToolsFramework/AzToolsFramework/UI/LegacyFramework/UIFrameworkAPI.cpp delete mode 100644 Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_win_files.cmake diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/LegacyFramework/UIFrameworkAPI.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/LegacyFramework/UIFrameworkAPI.cpp deleted file mode 100644 index e4192b6a90..0000000000 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/LegacyFramework/UIFrameworkAPI.cpp +++ /dev/null @@ -1,67 +0,0 @@ -/* - * 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 "UIFrameworkAPI.h" -#include -#include - -#ifdef Q_OS_WIN -# include -#endif - -#include - -#include -#include - -namespace AzToolsFramework -{ - namespace - { - // an aggregator utility which essentially provides the operation of returning the last result of an ebus event - // which returned something which returns a non-false value (like for example if its a pointer, then the last non-null value) - template - struct EBusLastNonNullResult - { - T value; - EBusLastNonNullResult() { value = NULL; } - AZ_FORCE_INLINE void operator=(const T& rhs) - { - if (rhs) - { - value = rhs; - } - } - AZ_FORCE_INLINE T& operator->() { return value; } - }; - - template - struct EBusAnyTrueResult - { - T value; - AZ_FORCE_INLINE void operator=(const T& rhs) { value = rhs || value; } - AZ_FORCE_INLINE T& operator->() { return value; } - }; - } - - bool GetOverwritePromptResult(QWidget* pParentWidget, const char* assetNameToOvewrite) - { - OverwritePromptDialog dlg(pParentWidget); - if (assetNameToOvewrite) - { - dlg.UpdateLabel(QString::fromUtf8(assetNameToOvewrite)); - } - - if (!dlg.exec() == QDialog::Accepted) - { - return false; - } - - return dlg.m_result; - } -} diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_win_files.cmake b/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_win_files.cmake deleted file mode 100644 index 5f3ff425fa..0000000000 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_win_files.cmake +++ /dev/null @@ -1,34 +0,0 @@ -# -# 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 - UI/LegacyFramework/MainWindowSavedState.h - UI/LegacyFramework/MainWindowSavedState.cpp - UI/LegacyFramework/UIFramework.hxx - UI/LegacyFramework/UIFramework.cpp - UI/LegacyFramework/UIFrameworkAPI.h - UI/LegacyFramework/UIFrameworkAPI.cpp - UI/LegacyFramework/UIFrameworkPreferences.cpp - UI/LegacyFramework/Resources/sharedResources.qrc - UI/LegacyFramework/Core/EditorContextBus.h - UI/LegacyFramework/Core/EditorFrameworkAPI.h - UI/LegacyFramework/Core/EditorFrameworkAPI.cpp - UI/LegacyFramework/Core/EditorFrameworkApplication.h - UI/LegacyFramework/Core/EditorFrameworkApplication.cpp - UI/LegacyFramework/Core/IPCComponent.h - UI/LegacyFramework/Core/IPCComponent.cpp - UI/LegacyFramework/CustomMenus/CustomMenusAPI.h - UI/LegacyFramework/CustomMenus/CustomMenusComponent.cpp - UI/UICore/OverwritePromptDialog.hxx - UI/UICore/OverwritePromptDialog.cpp - UI/UICore/OverwritePromptDialog.ui - UI/UICore/SaveChangesDialog.hxx - UI/UICore/SaveChangesDialog.cpp - UI/UICore/SaveChangesDialog.ui - ToolsFileUtils/ToolsFileUtils_win.cpp -) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_windows_files.cmake b/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_windows_files.cmake index 5f3ff425fa..67b93a5100 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_windows_files.cmake +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_windows_files.cmake @@ -12,7 +12,6 @@ set(FILES UI/LegacyFramework/UIFramework.hxx UI/LegacyFramework/UIFramework.cpp UI/LegacyFramework/UIFrameworkAPI.h - UI/LegacyFramework/UIFrameworkAPI.cpp UI/LegacyFramework/UIFrameworkPreferences.cpp UI/LegacyFramework/Resources/sharedResources.qrc UI/LegacyFramework/Core/EditorContextBus.h From 234ff3dca26b20fc7d297cdc45aa51240ebc0447 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 1 Dec 2021 14:06:37 -0800 Subject: [PATCH 124/284] Removes DHQSlider from AzToolsFramework Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../UI/PropertyEditor/DHQSlider.cpp | 56 ------------------- .../UI/PropertyEditor/DHQSlider.hxx | 42 -------------- .../PropertyDoubleSliderCtrl.cpp | 1 - .../PropertyEditor/PropertyIntSliderCtrl.cpp | 1 - .../aztoolsframework_files.cmake | 2 - 5 files changed, 102 deletions(-) delete mode 100644 Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/DHQSlider.cpp delete mode 100644 Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/DHQSlider.hxx diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/DHQSlider.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/DHQSlider.cpp deleted file mode 100644 index 76cc168a69..0000000000 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/DHQSlider.cpp +++ /dev/null @@ -1,56 +0,0 @@ -/* - * 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 "DHQSlider.hxx" -#include "PropertyQTConstants.h" -#include -AZ_PUSH_DISABLE_WARNING(4244 4251, "-Wunknown-warning-option") // 4244: conversion from 'int' to 'float', possible loss of data - // 4251: 'QInputEvent::modState': class 'QFlags' needs to have dll-interface to be used by clients of class 'QInputEvent' -#include -AZ_POP_DISABLE_WARNING - -namespace AzToolsFramework -{ - void DHQSlider::wheelEvent(QWheelEvent* e) - { - if (hasFocus()) - { - QSlider::wheelEvent(e); - } - else - { - e->ignore(); - } - } - - void InitializeSliderPropertyWidgets(QSlider* slider, QAbstractSpinBox* spinbox) - { - if (slider == nullptr || spinbox == nullptr) - { - return; - } - - // A 2:1 ratio between spinbox and slider gives the slider more room, - // but leaves some space for the spin box to expand. - const int spinBoxStretch = 1; - const int sliderStretch = 2; - - QSizePolicy sizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed); - sizePolicy.setHorizontalStretch(spinBoxStretch); - spinbox->setSizePolicy(sizePolicy); - spinbox->setMinimumWidth(PropertyQTConstant_MinimumWidth); - spinbox->setFixedHeight(PropertyQTConstant_DefaultHeight); - spinbox->setFocusPolicy(Qt::StrongFocus); - - sizePolicy.setHorizontalStretch(sliderStretch); - slider->setSizePolicy(sizePolicy); - slider->setMinimumWidth(PropertyQTConstant_MinimumWidth); - slider->setFixedHeight(PropertyQTConstant_DefaultHeight); - slider->setFocusPolicy(Qt::StrongFocus); - slider->setFocusProxy(spinbox); - } -} diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/DHQSlider.hxx b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/DHQSlider.hxx deleted file mode 100644 index 01aeed0300..0000000000 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/DHQSlider.hxx +++ /dev/null @@ -1,42 +0,0 @@ -/* - * 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 - * - */ - -#ifndef AZ_Q_SLIDER_HXX -#define AZ_Q_SLIDER_HXX - -#include -#include -#include - - -#pragma once - -class QAbstractSpinBox; - -namespace AzToolsFramework -{ - class DHQSlider - : public QSlider - { - public: - AZ_CLASS_ALLOCATOR(DHQSlider, AZ::SystemAllocator, 0); - - explicit DHQSlider(QWidget* parent = 0) - : QSlider(parent) {} - - DHQSlider(Qt::Orientation orientation, QWidget* parent = 0) - : QSlider(orientation, parent) {} - - void wheelEvent(QWheelEvent* e); - }; - - // Share widget initialization code between double and int based slider properties. - void InitializeSliderPropertyWidgets(QSlider*, QAbstractSpinBox*); -} - -#endif diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyDoubleSliderCtrl.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyDoubleSliderCtrl.cpp index 64ba3b604b..cac6b6867b 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyDoubleSliderCtrl.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyDoubleSliderCtrl.cpp @@ -7,7 +7,6 @@ */ #include #include "PropertyDoubleSliderCtrl.hxx" -#include "DHQSlider.hxx" #include "PropertyQTConstants.h" AZ_PUSH_DISABLE_WARNING(4251, "-Wunknown-warning-option") // 4251: 'QLayoutItem::align': class 'QFlags' needs to have dll-interface to be used by clients of class 'QLayoutItem' #include diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyIntSliderCtrl.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyIntSliderCtrl.cpp index 5fa767d060..7d544cd4f0 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyIntSliderCtrl.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyIntSliderCtrl.cpp @@ -6,7 +6,6 @@ * */ #include "PropertyIntSliderCtrl.hxx" -#include "DHQSlider.hxx" #include "PropertyQTConstants.h" #include diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake b/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake index b28a62a27f..460c47aa81 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake @@ -368,8 +368,6 @@ set(FILES UI/PropertyEditor/QtWidgetLimits.h UI/PropertyEditor/DHQComboBox.hxx UI/PropertyEditor/DHQComboBox.cpp - UI/PropertyEditor/DHQSlider.hxx - UI/PropertyEditor/DHQSlider.cpp UI/PropertyEditor/EntityIdQLabel.hxx UI/PropertyEditor/EntityIdQLabel.cpp UI/PropertyEditor/EntityIdQLineEdit.h From 6b457567c7c691009cd90bb376698df1a3a6ced9 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 1 Dec 2021 14:23:17 -0800 Subject: [PATCH 125/284] Removes PropertyEditor_UITypes.h from AzToolsFramework Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../PropertyEditor/PropertyEditor_UITypes.h | 346 ------------------ .../aztoolsframework_files.cmake | 1 - 2 files changed, 347 deletions(-) delete mode 100644 Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyEditor_UITypes.h diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyEditor_UITypes.h b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyEditor_UITypes.h deleted file mode 100644 index 2d6d4239ef..0000000000 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyEditor_UITypes.h +++ /dev/null @@ -1,346 +0,0 @@ -/* - * 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 - * - */ -#ifndef PROPERTYEDITOR_UITYPES_H -#define PROPERTYEDITOR_UITYPES_H - -#include -#include -#include "PropertyEditor/EditorClassReflectionTest.h" - -#pragma once - -namespace AzToolsFramework -{ - namespace PropertySystem - { - typedef AZStd::function < void(const AZStd::string& FieldName, AZStd::vector& dEnumNames) > - EnumNamesCallback; - - class EditorUIInfo_Enum - : public EditorUIInfo - { - public: - AZ_RTTI(EditorUIInfo_Enum, EditorUIInfo); - AZ_CLASS_ALLOCATOR(EditorUIInfo_Enum, AZ::SystemAllocator, 0); - - EnumNamesCallback m_enumNamesCallBack; - - EditorUIInfo_Enum(EnumNamesCallback enumNamesCallBack, AZ::u32 inFlags = 0) - : EditorUIInfo(inFlags) - , m_enumNamesCallBack(enumNamesCallBack) - { - } - }; - - class EditorUIInfo_EnumComboBox - : public EditorUIInfo_Enum - { - public: - AZ_RTTI(EditorUIInfo_EnumComboBox, EditorUIInfo_Enum); - AZ_CLASS_ALLOCATOR(EditorUIInfo_EnumComboBox, AZ::SystemAllocator, 0); - - EditorUIInfo_EnumComboBox(EnumNamesCallback enumNamesCallBack, AZ::u32 inFlags = 0) - : EditorUIInfo_Enum(enumNamesCallBack, inFlags) - { - } - }; - - typedef AZStd::function < void(const AZStd::string& FieldName, AZStd::vector& dEnumNames) > - ChoiceNamesCallback; - - class EditorUIInfo_Choice - : public EditorUIInfo - { - public: - AZ_RTTI(EditorUIInfo_Choice, EditorUIInfo); - AZ_CLASS_ALLOCATOR(EditorUIInfo_Choice, AZ::SystemAllocator, 0); - - ChoiceNamesCallback m_choiceNamesCallBack; - - EditorUIInfo_Choice(ChoiceNamesCallback choiceNamesCallBack, AZ::u32 inFlags = 0) - : EditorUIInfo(inFlags) - , m_choiceNamesCallBack(choiceNamesCallBack) - { - } - }; - - class EditorUIInfo_ChoiceComboBox - : public EditorUIInfo_Choice - { - public: - AZ_RTTI(EditorUIInfo_ChoiceComboBox, EditorUIInfo_Choice); - AZ_CLASS_ALLOCATOR(EditorUIInfo_ChoiceComboBox, AZ::SystemAllocator, 0); - - EditorUIInfo_ChoiceComboBox(ChoiceNamesCallback choiceNamesCallBack, AZ::u32 inFlags = 0) - : EditorUIInfo_Choice(choiceNamesCallBack, inFlags) - { - } - }; - - class EditorUIInfo_Bool - : public EditorUIInfo - { - public: - AZ_RTTI(EditorUIInfo_Bool, EditorUIInfo); - AZ_CLASS_ALLOCATOR(EditorUIInfo_Bool, AZ::SystemAllocator, 0); - - EditorUIInfo_Bool(AZ::u32 inFlags = 0) - : EditorUIInfo(inFlags) - { - } - }; - - class EditorUIInfo_BoolComboBox - : public EditorUIInfo_Bool - { - public: - AZ_RTTI(EditorUIInfo_BoolComboBox, EditorUIInfo_Bool); - AZ_CLASS_ALLOCATOR(EditorUIInfo_BoolComboBox, AZ::SystemAllocator, 0); - - EditorUIInfo_BoolComboBox(AZ::u32 inFlags = 0) - : EditorUIInfo_Bool(inFlags) - { - } - }; - - class EditorUIInfo_BoolDialogBox - : public EditorUIInfo_Bool - { - public: - AZ_RTTI(EditorUIInfo_BoolDialogBox, EditorUIInfo_Bool); - AZ_CLASS_ALLOCATOR(EditorUIInfo_BoolDialogBox, AZ::SystemAllocator, 0); - - EditorUIInfo_BoolDialogBox(AZ::u32 inFlags = 0) - : EditorUIInfo_Bool(inFlags) - { - } - }; - - - class EditorUIInfo_Int - : public EditorUIInfo - { - public: - AZ_RTTI(EditorUIInfo_Int, EditorUIInfo); - AZ_CLASS_ALLOCATOR(EditorUIInfo_Int, AZ::SystemAllocator, 0); - - int m_minVal; - int m_maxVal; - - EditorUIInfo_Int(int minVal = INT_MIN, int maxVal = INT_MAX, AZ::u32 inFlags = 0) - : EditorUIInfo(inFlags) - , m_minVal(minVal) - , m_maxVal(maxVal) - { - } - }; - - class EditorUIInfo_IntSpinBox - : public EditorUIInfo_Int - { - public: - AZ_RTTI(EditorUIInfo_IntSpinBox, EditorUIInfo_Int); - AZ_CLASS_ALLOCATOR(EditorUIInfo_IntSpinBox, AZ::SystemAllocator, 0); - - EditorUIInfo_IntSpinBox(int minVal = INT_MIN, int maxVal = INT_MAX, AZ::u32 inFlags = 0) - : EditorUIInfo_Int(minVal, maxVal, inFlags) - { - } - }; - - class EditorUIInfo_IntSlider - : public EditorUIInfo_Int - { - public: - AZ_RTTI(EditorUIInfo_IntSlider, EditorUIInfo_Int); - AZ_CLASS_ALLOCATOR(EditorUIInfo_IntSlider, AZ::SystemAllocator, 0); - - int m_step; - - EditorUIInfo_IntSlider(int step = 1, int minVal = INT_MIN, int maxVal = INT_MAX, AZ::u32 inFlags = 0) - : EditorUIInfo_Int(minVal, maxVal, inFlags) - , m_step(step) - { - } - }; - - class EditorUIInfo_Float - : public EditorUIInfo - { - public: - AZ_RTTI(EditorUIInfo_Float, EditorUIInfo); - AZ_CLASS_ALLOCATOR(EditorUIInfo_Float, AZ::SystemAllocator, 0); - - float m_minVal; - float m_maxVal; - - EditorUIInfo_Float(float minVal = std::numeric_limits::min(), float maxVal = std::numeric_limits::max(), AZ::u32 inFlags = 0) - : EditorUIInfo(inFlags) - , m_minVal(minVal) - , m_maxVal(maxVal) - { - } - }; - - class EditorUIInfo_FloatSpinBox - : public EditorUIInfo_Float - { - public: - AZ_RTTI(EditorUIInfo_FloatSpinBox, EditorUIInfo_Float); - AZ_CLASS_ALLOCATOR(EditorUIInfo_FloatSpinBox, AZ::SystemAllocator, 0); - - EditorUIInfo_FloatSpinBox(float minVal = std::numeric_limits::min(), float maxVal = std::numeric_limits::max(), AZ::u32 inFlags = 0) - : EditorUIInfo_Float(minVal, maxVal, inFlags) - { - } - }; - - class EditorUIInfo_FloatSlider - : public EditorUIInfo_Float - { - public: - AZ_RTTI(EditorUIInfo_FloatSlider, EditorUIInfo_Float); - AZ_CLASS_ALLOCATOR(EditorUIInfo_FloatSlider, AZ::SystemAllocator, 0); - - float m_step; - - EditorUIInfo_FloatSlider(float step = 1.f, float minVal = std::numeric_limits::min(), float maxVal = std::numeric_limits::max(), AZ::u32 inFlags = 0) - : EditorUIInfo_Float(minVal, maxVal, inFlags) - , m_step(step) - { - } - }; - - class EditorUIInfo_Double - : public EditorUIInfo - { - public: - AZ_RTTI(EditorUIInfo_Double, EditorUIInfo); - AZ_CLASS_ALLOCATOR(EditorUIInfo_Double, AZ::SystemAllocator, 0); - - double m_minVal; - double m_maxVal; - - EditorUIInfo_Double(double minVal = DBL_MIN, double maxVal = DBL_MAX, AZ::u32 inFlags = 0) - : EditorUIInfo(inFlags) - , m_minVal(minVal) - , m_maxVal(maxVal) - { - } - }; - - class EditorUIInfo_DoubleSpinBox - : public EditorUIInfo_Double - { - public: - AZ_RTTI(EditorUIInfo_DoubleSpinBox, EditorUIInfo_Double); - AZ_CLASS_ALLOCATOR(EditorUIInfo_DoubleSpinBox, AZ::SystemAllocator, 0); - - EditorUIInfo_DoubleSpinBox(double minVal = DBL_MIN, double maxVal = DBL_MAX, AZ::u32 inFlags = 0) - : EditorUIInfo_Double(minVal, maxVal, inFlags) - { - } - }; - - class EditorUIInfo_DoubleSlider - : public EditorUIInfo_Double - { - public: - AZ_RTTI(EditorUIInfo_DoubleSlider, EditorUIInfo_Double); - AZ_CLASS_ALLOCATOR(EditorUIInfo_DoubleSlider, AZ::SystemAllocator, 0); - - double m_step; - - EditorUIInfo_DoubleSlider(double step = 1.0, double minVal = DBL_MIN, double maxVal = DBL_MAX, AZ::u32 inFlags = 0) - : EditorUIInfo_Double(minVal, maxVal, inFlags) - , m_step(step) - { - } - }; - - class EditorUIInfo_String - : public EditorUIInfo - { - public: - AZ_RTTI(EditorUIInfo_String, EditorUIInfo); - AZ_CLASS_ALLOCATOR(EditorUIInfo_String, AZ::SystemAllocator, 0); - - int m_maxChars; - - EditorUIInfo_String(int maxchars = -1, AZ::u32 inFlags = 0) - : EditorUIInfo(inFlags) - , m_maxChars(maxchars) - { - } - }; - - class EditorUIInfo_StringLineEdit - : public EditorUIInfo_String - { - public: - AZ_RTTI(EditorUIInfo_StringLineEdit, EditorUIInfo_String); - AZ_CLASS_ALLOCATOR(EditorUIInfo_StringLineEdit, AZ::SystemAllocator, 0); - - EditorUIInfo_StringLineEdit(int maxchars = -1, AZ::u32 inFlags = 0) - : EditorUIInfo_String(maxchars, inFlags) - { - } - }; - - typedef AZStd::function DropListInfoCallback; - - class EditorUIInfo_DropdownList - : public EditorUIInfo - { - public: - AZ_RTTI(EditorUIInfo_DropdownList, EditorUIInfo); - AZ_CLASS_ALLOCATOR(EditorUIInfo_DropdownList, AZ::SystemAllocator, 0); - EditorUIInfo_DropdownList(DropListInfoCallback info, AZ::u32 inFlags = 0) - : EditorUIInfo(inFlags) - { - } - }; - - // this function, if you supply it, will be called by the UI and other system to determine whether or not to show - // your property at all. This allows you to make properties which only show up when certain other properties are set. - typedef AZStd::function < bool(const AZStd::string& /*property name*/, void* /* propertyOwner */, const EditorDataContext::ToolsComponentInfo* /* component info */) > - GroupDisplayBooleanFunction; - - // a group is special in that it has children and uses a function to determine what to write for the group and whether to show the group - class EditorUIInfo_Group - : public EditorUIInfo - { - public: - AZ_RTTI(EditorUIInfo_Group, EditorUIInfo); - AZ_CLASS_ALLOCATOR(EditorUIInfo_Group, AZ::SystemAllocator, 0); - EditorUIInfo_Group(GroupDisplayBooleanFunction displayBoolFn = 0, AZ::u32 inFlags = 0) - : EditorUIInfo(inFlags) - , m_displayBoolFn(displayBoolFn) - { - } - GroupDisplayBooleanFunction m_displayBoolFn; - }; - - class EditorUIInfo_Class - : public EditorUIInfo - { - public: - AZ_RTTI(EditorUIInfo_Class, EditorUIInfo); - AZ_CLASS_ALLOCATOR(EditorUIInfo_Class, AZ::SystemAllocator, 0); - - AZ::Uuid m_classID; - - EditorUIInfo_Class(const AZ::Uuid& classID = AZ::Uuid::CreateNull()) - : m_classID(classID) - { - } - }; - } -} // namespace AzToolsFramework - -#endif diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake b/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake index 460c47aa81..b0226b04af 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake @@ -398,7 +398,6 @@ set(FILES UI/PropertyEditor/PropertyDoubleSliderCtrl.cpp UI/PropertyEditor/PropertyDoubleSpinCtrl.hxx UI/PropertyEditor/PropertyDoubleSpinCtrl.cpp - UI/PropertyEditor/PropertyEditor_UITypes.h UI/PropertyEditor/PropertyEditorAPI.h UI/PropertyEditor/PropertyEditorApi.cpp UI/PropertyEditor/PropertyEditorAPI_Internals.h From acfd0d72aab0a89f169f492fbc3fff22dc378ddf Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 1 Dec 2021 14:37:21 -0800 Subject: [PATCH 126/284] =?UTF-8?q?=EF=BB=BFRemoves=20AZAutoSizingScrollAr?= =?UTF-8?q?ea=20from=20AzToolsFramework?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../UI/UICore/AZAutoSizingScrollArea.cpp | 55 ------------------- .../UI/UICore/AZAutoSizingScrollArea.hxx | 41 -------------- .../aztoolsframework_files.cmake | 2 - 3 files changed, 98 deletions(-) delete mode 100644 Code/Framework/AzToolsFramework/AzToolsFramework/UI/UICore/AZAutoSizingScrollArea.cpp delete mode 100644 Code/Framework/AzToolsFramework/AzToolsFramework/UI/UICore/AZAutoSizingScrollArea.hxx diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/UICore/AZAutoSizingScrollArea.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/UICore/AZAutoSizingScrollArea.cpp deleted file mode 100644 index c8a3b28173..0000000000 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/UICore/AZAutoSizingScrollArea.cpp +++ /dev/null @@ -1,55 +0,0 @@ -/* - * 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 "AZAutoSizingScrollArea.hxx" - -#include - -namespace AzToolsFramework -{ - - AZAutoSizingScrollArea::AZAutoSizingScrollArea(QWidget* parent) - : QScrollArea(parent) - { - } - - // this code was copied from the regular implementation of the same function in QScrollArea, but converted - // the private calls to public calls and removed the cache. - QSize AZAutoSizingScrollArea::sizeHint() const - { - int initialSize = 2 * frameWidth(); - QSize sizeHint(initialSize, initialSize); - - if (widget()) - { - sizeHint += this->widgetResizable() ? widget()->sizeHint() : widget()->size(); - } - else - { - // If we don't have a widget, we want to reserve some space visually for ourselves. - int fontHeight = fontMetrics().height(); - sizeHint += QSize(2 * fontHeight, 2 * fontHeight); - } - - if (verticalScrollBarPolicy() == Qt::ScrollBarAlwaysOn) - { - sizeHint.setWidth(sizeHint.width() + verticalScrollBar()->sizeHint().width()); - } - - if (horizontalScrollBarPolicy() == Qt::ScrollBarAlwaysOn) - { - sizeHint.setHeight(sizeHint.height() + horizontalScrollBar()->sizeHint().height()); - } - - return sizeHint; - } - -} - -#include "UI/UICore/moc_AZAutoSizingScrollArea.cpp" diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/UICore/AZAutoSizingScrollArea.hxx b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/UICore/AZAutoSizingScrollArea.hxx deleted file mode 100644 index e5e5ef59ac..0000000000 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/UICore/AZAutoSizingScrollArea.hxx +++ /dev/null @@ -1,41 +0,0 @@ -/* - * 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 - * - */ - -#ifndef AZAUTOSIZINGSCROLLAREA_HXX -#define AZAUTOSIZINGSCROLLAREA_HXX - -#if !defined(Q_MOC_RUN) -#include -#include - -#pragma once - -#include -#endif - -namespace AzToolsFramework -{ - // This fixes a bug in QScrollArea which makes it so that you can dynamically add and remove elements from inside it, and the scroll - // area will take up as much room as it needs to, to prevent the need for scroll bars. Scroll bars will still appear if there is not enough - // room, but the view will scale up to eat all available room before that happens. - - // QScrollArea was supposed to do this, but it appears to cache the size of its embedded widget on startup, and never clears that cache. - class AZAutoSizingScrollArea - : public QScrollArea - { - Q_OBJECT - public: - AZ_CLASS_ALLOCATOR(AZAutoSizingScrollArea, AZ::SystemAllocator, 0); - - explicit AZAutoSizingScrollArea(QWidget* parent = 0); - - QSize sizeHint() const; - }; -} - -#endif diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake b/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake index b0226b04af..24963d24c0 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake @@ -444,8 +444,6 @@ set(FILES UI/Slice/SliceRelationshipWidget.hxx UI/UICore/AspectRatioAwarePixmapWidget.hxx UI/UICore/AspectRatioAwarePixmapWidget.cpp - UI/UICore/AZAutoSizingScrollArea.hxx - UI/UICore/AZAutoSizingScrollArea.cpp UI/UICore/ColorPickerDelegate.hxx UI/UICore/ColorPickerDelegate.cpp UI/UICore/ClickableLabel.hxx From 87c5c76ae8feef148d8601b8688b8d2e6d6e960d Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 1 Dec 2021 14:46:25 -0800 Subject: [PATCH 127/284] Removes ColorPickerDelegate from AzToolsFramework Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../UI/PropertyEditor/PropertyColorCtrl.cpp | 2 - .../UI/UICore/ColorPickerDelegate.cpp | 75 ------------------- .../UI/UICore/ColorPickerDelegate.hxx | 41 ---------- .../aztoolsframework_files.cmake | 2 - 4 files changed, 120 deletions(-) delete mode 100644 Code/Framework/AzToolsFramework/AzToolsFramework/UI/UICore/ColorPickerDelegate.cpp delete mode 100644 Code/Framework/AzToolsFramework/AzToolsFramework/UI/UICore/ColorPickerDelegate.hxx diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyColorCtrl.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyColorCtrl.cpp index 13c5c8bfac..3562c8ff11 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyColorCtrl.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyColorCtrl.cpp @@ -19,8 +19,6 @@ AZ_PUSH_DISABLE_WARNING(4251, "-Wunknown-warning-option") AZ_POP_DISABLE_WARNING #include -#include "../UICore/ColorPickerDelegate.hxx" - namespace AzToolsFramework { PropertyColorCtrl::PropertyColorCtrl(QWidget* pParent) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/UICore/ColorPickerDelegate.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/UICore/ColorPickerDelegate.cpp deleted file mode 100644 index ca5e89f6f1..0000000000 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/UICore/ColorPickerDelegate.cpp +++ /dev/null @@ -1,75 +0,0 @@ -/* - * 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 -#include "ColorPickerDelegate.hxx" - -#include -#include - -namespace AzToolsFramework -{ - ColorPickerDelegate::ColorPickerDelegate(QObject* pParent) - : QStyledItemDelegate(pParent) - { - } - - QWidget* ColorPickerDelegate::createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const - { - (void)index; - (void)option; - AzQtComponents::ColorPicker* ptrDialog = new AzQtComponents::ColorPicker(AzQtComponents::ColorPicker::Configuration::RGB, - tr("Select Color"), parent); - ptrDialog->setWindowFlags(Qt::Tool); - return ptrDialog; - } - - void ColorPickerDelegate::setEditorData(QWidget* editor, const QModelIndex& index) const - { - AzQtComponents::ColorPicker* colorEditor = qobject_cast(editor); - - if (!editor) - { - return; - } - - QVariant colorResult = index.data(COLOR_PICKER_ROLE); - if (colorResult == QVariant()) - { - return; - } - - const QColor pickedColor = qvariant_cast(colorResult); - colorEditor->setCurrentColor(AzQtComponents::fromQColor(pickedColor)); - } - - void ColorPickerDelegate::setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const - { - AzQtComponents::ColorPicker* colorEditor = qobject_cast(editor); - - if (!editor) - { - return; - } - - const QVariant colorVariant = AzQtComponents::toQColor(colorEditor->currentColor()); - model->setData(index, colorVariant, COLOR_PICKER_ROLE); - } - - void ColorPickerDelegate::updateEditorGeometry(QWidget* editor, const QStyleOptionViewItem& option, const QModelIndex& index) const - { - (void)index; - QRect pickerpos = option.rect; - - pickerpos.setTopLeft(editor->parentWidget()->mapToGlobal(pickerpos.topLeft())); - pickerpos.adjust(64, 0, 0, 0); - editor->setGeometry(pickerpos); - } - -} // namespace AzToolsFramework - -#include "UI/UICore/moc_ColorPickerDelegate.cpp" diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/UICore/ColorPickerDelegate.hxx b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/UICore/ColorPickerDelegate.hxx deleted file mode 100644 index 7bb5cd25e2..0000000000 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/UICore/ColorPickerDelegate.hxx +++ /dev/null @@ -1,41 +0,0 @@ -/* - * 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 - * - */ - -#ifndef COLOR_PICKER_DELEGATE_HXX -#define COLOR_PICKER_DELEGATE_HXX - -#if !defined(Q_MOC_RUN) -#include -#include -#endif - -#pragma once - -namespace AzToolsFramework -{ - /** - * A delegate which handles the double clicking to pop open a color picker dialog, as long as the role is COLOR_PICKER_ROLE. - * To use it, just add a setData() and a data() function to your model which returns a QColor (or accepts one) whenever the COLOR_PICKER_ROLE is queried. - **/ - class ColorPickerDelegate - : public QStyledItemDelegate - { - Q_OBJECT; - public: - static const int COLOR_PICKER_ROLE = Qt::UserRole + 1; - - AZ_CLASS_ALLOCATOR(ColorPickerDelegate, AZ::SystemAllocator, 0); - ColorPickerDelegate(QObject* pParent); - virtual QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const; - virtual void setEditorData(QWidget* editor, const QModelIndex& index) const; - virtual void setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const; - virtual void updateEditorGeometry(QWidget* editor, const QStyleOptionViewItem& option, const QModelIndex& index) const; - }; -} // namespace AzToolsFramework - -#endif //COLOR_PICKER_DELEGATE_HXX diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake b/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake index 24963d24c0..a21885f058 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake @@ -444,8 +444,6 @@ set(FILES UI/Slice/SliceRelationshipWidget.hxx UI/UICore/AspectRatioAwarePixmapWidget.hxx UI/UICore/AspectRatioAwarePixmapWidget.cpp - UI/UICore/ColorPickerDelegate.hxx - UI/UICore/ColorPickerDelegate.cpp UI/UICore/ClickableLabel.hxx UI/UICore/ClickableLabel.cpp UI/UICore/IconButton.hxx From ac221223a5e9829342ea9fd7aa92171325a75001 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 1 Dec 2021 14:46:46 -0800 Subject: [PATCH 128/284] Adds missing header from previous commit Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../AzToolsFramework/UI/PropertyEditor/PropertyColorCtrl.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyColorCtrl.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyColorCtrl.cpp index 3562c8ff11..fd6580225f 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyColorCtrl.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyColorCtrl.cpp @@ -18,6 +18,7 @@ AZ_PUSH_DISABLE_WARNING(4251, "-Wunknown-warning-option") #include AZ_POP_DISABLE_WARNING #include +#include namespace AzToolsFramework { From 7ea2b34e917b95bff8fe44c5cbe9282acee56876 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 1 Dec 2021 16:29:46 -0800 Subject: [PATCH 129/284] Removes Cripter.h from GridMate Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../GridMate/GridMate/Carrier/Carrier.cpp | 1 - .../GridMate/GridMate/Carrier/Cripter.h | 25 ------------------- .../GridMate/GridMate/gridmate_files.cmake | 1 - 3 files changed, 27 deletions(-) delete mode 100644 Code/Framework/GridMate/GridMate/Carrier/Cripter.h diff --git a/Code/Framework/GridMate/GridMate/Carrier/Carrier.cpp b/Code/Framework/GridMate/GridMate/Carrier/Carrier.cpp index 2724bee1a7..a4f6f286a8 100644 --- a/Code/Framework/GridMate/GridMate/Carrier/Carrier.cpp +++ b/Code/Framework/GridMate/GridMate/Carrier/Carrier.cpp @@ -12,7 +12,6 @@ #include #include -#include #include #include #include diff --git a/Code/Framework/GridMate/GridMate/Carrier/Cripter.h b/Code/Framework/GridMate/GridMate/Carrier/Cripter.h deleted file mode 100644 index 07fae7f026..0000000000 --- a/Code/Framework/GridMate/GridMate/Carrier/Cripter.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * 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 - * - */ -#ifndef GM_CRIPTER_INTERFACE_H -#define GM_CRIPTER_INTERFACE_H - -#include - -namespace GridMate -{ - /** - * Traffic control interface - */ - class Cripter - { - public: - }; -} - -#endif // GM_CRIPTER_INTERFACE_H - diff --git a/Code/Framework/GridMate/GridMate/gridmate_files.cmake b/Code/Framework/GridMate/GridMate/gridmate_files.cmake index 7fac75a442..5fb565b5ae 100644 --- a/Code/Framework/GridMate/GridMate/gridmate_files.cmake +++ b/Code/Framework/GridMate/GridMate/gridmate_files.cmake @@ -19,7 +19,6 @@ set(FILES Carrier/Carrier.cpp Carrier/Carrier.h Carrier/Compressor.h - Carrier/Cripter.h Carrier/DefaultHandshake.cpp Carrier/DefaultHandshake.h Carrier/DefaultSimulator.cpp From a55773f9c37f7320b2e973dee564ad9b4f914746 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 1 Dec 2021 18:39:26 -0800 Subject: [PATCH 130/284] Removes some unused files from gridmate (Containers/set and slist) also Doc.h Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../GridMate/GridMate/Containers/set.h | 23 -------------- .../GridMate/GridMate/Containers/slist.h | 20 ------------ Code/Framework/GridMate/GridMate/Docs.h | 31 ------------------- .../GridMate/GridMate/gridmate_files.cmake | 2 -- 4 files changed, 76 deletions(-) delete mode 100644 Code/Framework/GridMate/GridMate/Containers/set.h delete mode 100644 Code/Framework/GridMate/GridMate/Containers/slist.h delete mode 100644 Code/Framework/GridMate/GridMate/Docs.h diff --git a/Code/Framework/GridMate/GridMate/Containers/set.h b/Code/Framework/GridMate/GridMate/Containers/set.h deleted file mode 100644 index d7edec8a46..0000000000 --- a/Code/Framework/GridMate/GridMate/Containers/set.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * 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 - * - */ -#ifndef GM_CONTAINERS_SET_H -#define GM_CONTAINERS_SET_H - -#include -#include - -namespace GridMate -{ - template, class Allocator = SysContAlloc> - using set = AZStd::set; - - template, class Allocator = SysContAlloc> - using multiset = AZStd::multiset; -} - -#endif // GM_CONTAINERS_SET_H diff --git a/Code/Framework/GridMate/GridMate/Containers/slist.h b/Code/Framework/GridMate/GridMate/Containers/slist.h deleted file mode 100644 index 6e4d77b604..0000000000 --- a/Code/Framework/GridMate/GridMate/Containers/slist.h +++ /dev/null @@ -1,20 +0,0 @@ -/* - * 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 - * - */ -#ifndef GM_CONTAINERS_SLIST_H -#define GM_CONTAINERS_SLIST_H - -#include -#include - -namespace GridMate -{ - template - using forward_list = AZStd::forward_list; -} - -#endif // GM_CONTAINERS_SLIST_H diff --git a/Code/Framework/GridMate/GridMate/Docs.h b/Code/Framework/GridMate/GridMate/Docs.h deleted file mode 100644 index c3a8c00776..0000000000 --- a/Code/Framework/GridMate/GridMate/Docs.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * 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 - * - */ -/** - * \mainpage - * Welcome to the GridMate network library. - * - * Check the latest \ref ReleaseNotes "release notes" for this version of GridMate. - * - * You can start learning by looking at the \ref Library "Library overview". - * - * Or if you can't wait, jump to the \ref GMExamples "code examples" to see how GridMate is used. - */ - -/** - * \page Library Library Overview - * - * \subpage Fundamentals "Fundamental Concepts" - * - * \ref GMExamples "Code examples" - * - */ - -/** - * \namespace GridMate - * \brief The main namespace for the GridMate library. - */ diff --git a/Code/Framework/GridMate/GridMate/gridmate_files.cmake b/Code/Framework/GridMate/GridMate/gridmate_files.cmake index 5fb565b5ae..f9ecfc1cf8 100644 --- a/Code/Framework/GridMate/GridMate/gridmate_files.cmake +++ b/Code/Framework/GridMate/GridMate/gridmate_files.cmake @@ -37,8 +37,6 @@ set(FILES Carrier/Utils.h Containers/list.h Containers/queue.h - Containers/set.h - Containers/slist.h Containers/unordered_map.h Containers/unordered_set.h Containers/vector.h From dda3dec7356b6f4e6975f000d4e360813b04d4c5 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 1 Dec 2021 18:39:58 -0800 Subject: [PATCH 131/284] missed this file Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Framework/GridMate/GridMate/gridmate_files.cmake | 1 - 1 file changed, 1 deletion(-) diff --git a/Code/Framework/GridMate/GridMate/gridmate_files.cmake b/Code/Framework/GridMate/GridMate/gridmate_files.cmake index f9ecfc1cf8..e38a238baf 100644 --- a/Code/Framework/GridMate/GridMate/gridmate_files.cmake +++ b/Code/Framework/GridMate/GridMate/gridmate_files.cmake @@ -8,7 +8,6 @@ set(FILES EBus.h - Docs.h GridMate.cpp GridMate.h GridMateEventsBus.h From ce4ebc57c9daa85a84351aa3501573ddb34f75ce Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Fri, 3 Dec 2021 18:35:12 -0800 Subject: [PATCH 132/284] Removes OnlineUtilityThread.h and UserServiceTypes.h from GridMate Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../GridMate/Online/OnlineUtilityThread.h | 93 -------------- .../GridMate/Online/UserServiceTypes.h | 114 ------------------ .../GridMate/GridMate/gridmate_files.cmake | 2 - 3 files changed, 209 deletions(-) delete mode 100644 Code/Framework/GridMate/GridMate/Online/OnlineUtilityThread.h delete mode 100644 Code/Framework/GridMate/GridMate/Online/UserServiceTypes.h diff --git a/Code/Framework/GridMate/GridMate/Online/OnlineUtilityThread.h b/Code/Framework/GridMate/GridMate/Online/OnlineUtilityThread.h deleted file mode 100644 index fd6ce8edb4..0000000000 --- a/Code/Framework/GridMate/GridMate/Online/OnlineUtilityThread.h +++ /dev/null @@ -1,93 +0,0 @@ -/* - * 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 - * - */ -/** - * @file - * Provides EBus definitions for getting the utility thread tick - */ -#ifndef ONLINE_UTILITY_THREAD_H -#define ONLINE_UTILITY_THREAD_H - -#include -#include - -/** - * IMPORTANT NOTE TO SERVICES THAT USE THE UTILITY THREAD: - * The online service will start ticking the utility thread at construction - * time, but you have have to let it know when you need to be ticked. This - * is done two ways: first, send the NotifyOfNewWork event to the - * OnlineUtilityThreadCommandBus; second, return whether you still have - * work to do in OnlineUtilityThreadNotificationBus's event - * IsThereUtilityThreadWork. There, however, caveats the service - * must be aware of. - * - For those that derive from OnlineUtilityNotificationBus::Handler, - * do your BusConnect and BusDisConnect calls in your Init and Shutdown - * calls, instead of at construction and destruction time. You shouldn't - * be trying to use this utility thread outside of the time between these - * calls to your service anyway, so this shouldn't cause any amount of - * headache to conform to. - * - When you call BusConnect and BusDiscconect, the online manager may - * already be ticking that event - you may or may not receive your first - * and/or last tick events the way you might expect, so be careful about - * how you do you initialization and shutdown procedures. - * - Your Init call should do as little work as possible. Set yourself up for - * being ready to do actual initialization the first time you receive the - * OnUtilityThreadTick event instead of doing it all in Init and blocking - * the main thread. - * - Your Shutdown call should abort any pending operations, including ones - * it's already in the middle of. - * - In your OnUtilityThreadTick event response, make sure you haven't already - * been told to shut down. This is because the Shutdown call may have been - * made soon after the OnUtilityThreadTick event was fired, and other - * services took up a fair amount of time before the event got to you (with - * the Shutdown call to your service being made between event-firing and - * when the event reached you). - * - Be VERY careful about Shutdown getting called before you finish - * initializing in the utility thread (or even get a change to)! If you - * use this utility thread, be sure to test whether you can shutdown - * immediately after being initialized without breaking anything. - */ -namespace GridMate -{ - //------------------------------------------------------------------------- - // For ticking services that need a separate thread (outbound) - // - BusConnect to OnlineUtilityThreadNotificationBus::Handler to receive OnUtilityThreadTick - // - Return whether you have work left to do in IsThereWork - //------------------------------------------------------------------------- - class OnlineUtilityThreadNotifications - : public GridMateEBusTraits - { - public: - virtual ~OnlineUtilityThreadNotifications() {} - - // Called on each iteration of the online manager's utility thread loop - virtual void OnUtilityThreadTick() = 0; - - // Return whether there's work left to do here to keep the thread from doing busy waiting - virtual bool IsThereUtilityThreadWork() = 0; - }; - typedef AZ::EBus OnlineUtilityThreadNotificationBus; - //------------------------------------------------------------------------- - - //------------------------------------------------------------------------- - // For services that need a separate thread (inbound) - // - Fire the NotifyOfNewWork event to notify the thread that you have a new - // request you'd like to take care of - //------------------------------------------------------------------------- - class OnlineUtilityThreadCommands - : public GridMateEBusTraits - { - public: - virtual ~OnlineUtilityThreadCommands() {} - - virtual void NotifyOfNewWork() = 0; - }; - typedef AZ::EBus OnlineUtilityThreadCommandBus; - //------------------------------------------------------------------------- -} // namespace GridMate - -#endif // ONLINE_UTILITY_THREAD_H diff --git a/Code/Framework/GridMate/GridMate/Online/UserServiceTypes.h b/Code/Framework/GridMate/GridMate/Online/UserServiceTypes.h deleted file mode 100644 index c1753b3bb2..0000000000 --- a/Code/Framework/GridMate/GridMate/Online/UserServiceTypes.h +++ /dev/null @@ -1,114 +0,0 @@ -/* - * 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 - * - */ -#ifndef GM_USER_SERVICE_TYPES_H -#define GM_USER_SERVICE_TYPES_H - -#include - -namespace GridMate -{ - /** - * User signin state - */ - enum OLSSigninState - { - OLS_SigninUnknown, - OLS_NotSignedIn, // There is no user signed in - OLS_SignedInOffline, // User signed in without online capabilities - OLS_SignedInOnline, // User signed in with online capabilities - OLS_SigningOut, // User is in the process of signing out - }; - - /** - * service network state - */ - enum OLSOnlineState - { - OLS_OnlineUnknown, - OLS_NoNetwork, // No NIC or network is unplugged - OLS_Offline, // No online access - OLS_Online, // Has online access - }; - - /** - * Supported privilege types - */ - enum OLSUserPrivilege - { - OLS_UserPrivilegeMP, - OLS_UserPrivilegeRecordDVR, - OLS_UserPrivilegePurchaseContent, - OLS_UserPrivilegeVoiceChat, - OLS_UserPrivilegeLeaderboards - }; - - /** - * Base class for platform dependent player id. - */ - struct PlayerId - { - PlayerId(ServiceType serviceType) - : m_serviceType(serviceType) {} - virtual ~PlayerId() {} - - // Compare 2 PlayerId IDs - virtual bool Compare(const PlayerId& userId) const = 0; - - // Returns a printable string representation of the id. - virtual gridmate_string ToString() const = 0; - - ServiceType GetType() const { return m_serviceType; } - - protected: - ServiceType m_serviceType; - }; - - /** - * Interface class for a local player/member. - */ - class ILocalMember - { - public: - virtual ~ILocalMember() {} - // SignIn - virtual OLSSigninState GetSigninState() const = 0; - - virtual const PlayerId* GetPlayerId() const = 0; - - // Pad number / info ??? - virtual unsigned int GetControllerIndex() const = 0; - virtual const char* GetName() const = 0; - virtual bool IsGuest() const = 0; - - // Friends List - virtual void RefreshFriends() = 0; - virtual bool IsFriendsListRefreshing() const = 0; - virtual unsigned int GetFriendsCount() const = 0; - virtual const char* GetFriendName(unsigned int idx) const = 0; - virtual const PlayerId* GetFriendPlayerId(unsigned int idx) const = 0; - virtual OLSSigninState GetFriendSigninState(unsigned int idx) const = 0; - virtual bool IsFriendPlayingTitle(unsigned int idx) const = 0; - virtual const char* GetFriendPresenceDetails(unsigned int idx) const = 0; - virtual bool IsFriendsWith(const PlayerId* playerId) const = 0; - }; - - /** - * Generic invite structure - * pPlatformSpecific contains the native structure used by each platform - */ - struct InviteInfo - { - InviteInfo() - : m_localMember(nullptr) {} - - ILocalMember* m_localMember; - }; -} // namespace GridMate - -#endif // GM_USER_SERVICE_TYPES_H -#pragma once diff --git a/Code/Framework/GridMate/GridMate/gridmate_files.cmake b/Code/Framework/GridMate/GridMate/gridmate_files.cmake index e38a238baf..758b217112 100644 --- a/Code/Framework/GridMate/GridMate/gridmate_files.cmake +++ b/Code/Framework/GridMate/GridMate/gridmate_files.cmake @@ -39,8 +39,6 @@ set(FILES Containers/unordered_map.h Containers/unordered_set.h Containers/vector.h - Online/OnlineUtilityThread.h - Online/UserServiceTypes.h Replica/BasicHostChunkDescriptor.h Replica/DeltaCompressedDataSet.h Replica/DataSet.cpp From 10ecb525fe5d8e92c0600067b64db7e74e510e02 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 13 Dec 2021 14:12:02 -0800 Subject: [PATCH 133/284] Removes DeltaCompressedDataSet, ReplicaFunctions.inl and BitmaskInterestHandler from GridMate Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../GridMate/Replica/DeltaCompressedDataSet.h | 257 ----------- .../Interest/BitmaskInterestHandler.cpp | 421 ------------------ .../Replica/Interest/BitmaskInterestHandler.h | 237 ---------- .../GridMate/Replica/ReplicaFunctions.inl | 98 ---- .../GridMate/GridMate/gridmate_files.cmake | 4 - 5 files changed, 1017 deletions(-) delete mode 100644 Code/Framework/GridMate/GridMate/Replica/DeltaCompressedDataSet.h delete mode 100644 Code/Framework/GridMate/GridMate/Replica/Interest/BitmaskInterestHandler.cpp delete mode 100644 Code/Framework/GridMate/GridMate/Replica/Interest/BitmaskInterestHandler.h delete mode 100644 Code/Framework/GridMate/GridMate/Replica/ReplicaFunctions.inl diff --git a/Code/Framework/GridMate/GridMate/Replica/DeltaCompressedDataSet.h b/Code/Framework/GridMate/GridMate/Replica/DeltaCompressedDataSet.h deleted file mode 100644 index d84a777024..0000000000 --- a/Code/Framework/GridMate/GridMate/Replica/DeltaCompressedDataSet.h +++ /dev/null @@ -1,257 +0,0 @@ -/* - * 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 - * - */ -#ifndef GM_DELTACOMPRESSED_DATASET_H -#define GM_DELTACOMPRESSED_DATASET_H - -#pragma once - -#include -#include -#include - -namespace GridMate -{ - namespace Helper - { - template - AZ::u8 GetQuantized(float value) - { - /* - * Quantizing into a single byte, thus 255 values. - * [-DeltaRange V +DeltaRange] - * [0 Q 255] - * Given V, solve for Q. - */ - const float quantized = (value + DeltaRange) * 255.f / (2.f * DeltaRange); - const int clamped = AZ::GetClamp(static_cast(quantized), 0, 255); - return static_cast(clamped); - } - - template - float GetUnquantized(AZ::u8 quantized) - { - /* - * Unquantizing from a single byte, out of 255 values. - * [0 Q 255] - * [-DeltaRange V +DeltaRange] - * Given Q, solve for V. - */ - return 2 * DeltaRange * quantized / 255.f - DeltaRange; - } - - template - struct DeltaHelper; - - /** - * \brief Works for integer and floating points numbers - */ - template - struct DeltaHelper - { - static bool IsWithinDelta(const FieldType& base, const FieldType& another, AZ::u32 deltaRange) - { - return abs(base - another) < deltaRange; - } - }; - - /** - * \brief Specialization for AZ::Vector3 - */ - template<> - struct DeltaHelper - { - static bool IsWithinDelta(const AZ::Vector3& base, const AZ::Vector3& another, AZ::u32 deltaRange) - { - const AZ::Vector3 absDiff = (base - another).GetAbs(); - return absDiff.GetX() < deltaRange && absDiff.GetY() < deltaRange && absDiff.GetZ() < deltaRange; - } - }; - } - - /** - * \brief Packing a value into a single byte within +/- @DeltaRange - */ - template - class DeltaMarshaller; - - // float specialization - template - class DeltaMarshaller - { - public: - void Marshal(WriteBuffer& wb, const float &value) - { - wb.Write(Helper::GetQuantized(value)); - } - - void Unmarshal(float& value, ReadBuffer &rb) - { - AZ::u8 delta; - rb.Read(delta); - value = Helper::GetUnquantized(delta); - } - }; - - // AZ::Vector3 specialization - template - class DeltaMarshaller - { - public: - void Marshal(WriteBuffer& wb, const AZ::Vector3& value) - { - wb.Write(Helper::GetQuantized(value.GetX())); - wb.Write(Helper::GetQuantized(value.GetY())); - wb.Write(Helper::GetQuantized(value.GetZ())); - } - - void Unmarshal(AZ::Vector3& value, ReadBuffer& rb) - { - AZ::u8 delta[3]; - rb.Read(delta[0]); - rb.Read(delta[1]); - rb.Read(delta[2]); - - value = AZ::Vector3(Helper::GetUnquantized(delta[0]), Helper::GetUnquantized(delta[1]), Helper::GetUnquantized(delta[2])); - } - }; - - /** - * \brief Delta compressed DataSet, stateless and cacheless. Stateless - because it does not keep per-player state of any kind. - * Cacheless - because it does not keep a history of its values. - * This approach requires only one extra copy of a field, because the field is split into two portions: absolute and relative portions. - * The value is always the sum of two portions. We leverage existing DataSets to omit sending the larger absolute value, thus achieving compression. - * - * \tparam FieldType - * \tparam DeltaRange - * \tparam MarshalerType - * \tparam DeltaMarshalerType - */ - template, typename DeltaMarshalerType = DeltaMarshaller> - class DeltaCompressedDataSet - { - public: - virtual ~DeltaCompressedDataSet() = default; - - template - class BindInterface; - - /** - Constructs a DataSet. - **/ - explicit DeltaCompressedDataSet(const char* debugName, const FieldType& value = FieldType()) - : m_absolutePortion(debugName, value) - , m_relativePortion(debugName) - { - static_assert(DeltaRange > 0, "Delta range cannot be zero!"); - - // We need to intercept changes to our two DataSets, in order to calculate the combined value and report back to Replica Chunk on our time. - m_absolutePortion.SetDispatchOverride([this](const TimeContext& tc) {OnAbsolutePortionChanged(tc); }); - m_relativePortion.SetDispatchOverride([this](const TimeContext& tc) {OnRelativePortionChanged(tc); }); - } - - /** - Modify the DataSet. Call this on the Primary node to change the data, - which will be propagated to all proxies. - **/ - void Set(const FieldType& v) - { - m_combinedValue = v; - - if (Helper::DeltaHelper::IsWithinDelta(m_absolutePortion.Get(), v, DeltaRange)) - { - // within bounds, so only the relative portion needs to be updated - m_relativePortion.Set(v - m_absolutePortion.Get()); - } - else - { - // relative out of range, reset absolute - m_absolutePortion.Set(v); - m_relativePortion.Set(static_cast(0)); - } - } - - /** - Returns the current value of the DataSet. - **/ - const FieldType& Get() const - { - return m_combinedValue; - } - - protected: - virtual void OnAbsolutePortionChanged(const TimeContext& /*tc*/) - { - m_combinedValue = m_absolutePortion.Get() + m_relativePortion.Get(); - } - - virtual void OnRelativePortionChanged(const TimeContext& /*tc*/) - { - m_combinedValue = m_absolutePortion.Get() + m_relativePortion.Get(); - } - - private: - DataSet m_absolutePortion; - DataSet m_relativePortion; - FieldType m_combinedValue; // the latest value on either primary or proxy - }; - - //----------------------------------------------------------------------------- - - /** - Declares a DeltaCompressedDataSet with an event handler that is called when the value is changed. - Use BindInterface to dispatch to a method on the ReplicaChunk's - ReplicaChunkInterface event handler instance. - **/ - template - template - class DeltaCompressedDataSet::BindInterface - : public DeltaCompressedDataSet - { - public: - explicit BindInterface(const char* debugName) : DeltaCompressedDataSet(debugName) { } - - protected: - void OnAbsolutePortionChanged(const GridMate::TimeContext& tc) override - { - DeltaCompressedDataSet::OnAbsolutePortionChanged(tc); - - m_lastUpdateTime = m_absolutePortion.GetLastUpdateTime(); - if (m_relativePortion.GetLastUpdateTime() < m_lastUpdateTime) - { - // relative portion wasn't updated, so its callback won't be invoked this tick, therefore we need to dispatch change event now - DispatchChangedEvent(tc); - } - } - - void OnRelativePortionChanged(const GridMate::TimeContext& tc) override - { - DeltaCompressedDataSet::OnRelativePortionChanged(tc); - - m_lastUpdateTime = m_relativePortion.GetLastUpdateTime(); - // Assuming that relative portion DataSet is dispatched after absolute portion by construction in DeltaCompressedDataSet - DispatchChangedEvent(tc); - } - - void DispatchChangedEvent(const TimeContext& tc) - { - AZ_Assert(m_relativePortion.GetReplicaChunkBase(), "DataSets should be attached to replica chunks!"); - - if (C* c = static_cast(m_relativePortion.GetReplicaChunkBase()->GetHandler())) - { - const TimeContext changeTime{ m_lastUpdateTime, m_lastUpdateTime - (tc.m_realTime - tc.m_localTime) }; - (*c.*FuncPtr)(Get(), changeTime); - } - } - - private: - AZ::u32 m_lastUpdateTime = 0; // the latest update time among m_absolutePortion and m_relativePortion - }; - //----------------------------------------------------------------------------- -} // namespace GridMate - -#endif // GM_DELTACOMPRESSED_DATASET_H diff --git a/Code/Framework/GridMate/GridMate/Replica/Interest/BitmaskInterestHandler.cpp b/Code/Framework/GridMate/GridMate/Replica/Interest/BitmaskInterestHandler.cpp deleted file mode 100644 index d4748e554d..0000000000 --- a/Code/Framework/GridMate/GridMate/Replica/Interest/BitmaskInterestHandler.cpp +++ /dev/null @@ -1,421 +0,0 @@ -/* - * 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 - -#include -#include -#include -#include - -#include - -namespace GridMate -{ - - void BitmaskInterestChunk::OnReplicaActivate(const ReplicaContext& rc) - { - m_interestHandler = static_cast(rc.m_rm->GetUserContext(AZ_CRC("BitmaskInterestHandler", 0x5bf5d75b))); - AZ_Warning("GridMate", m_interestHandler != nullptr, "No bitmask interest handler in the user context"); - if (m_interestHandler) - { - m_interestHandler->OnNewRulesChunk(this, rc.m_peer); - } - } - - void BitmaskInterestChunk::OnReplicaDeactivate(const ReplicaContext& rc) - { - if (m_interestHandler) - { - // even if rc.m_peer is null, we still need to call OnDeleteRulesChunk so that the interest handler can clear m_rulesReplica - m_interestHandler->OnDeleteRulesChunk(this, rc.m_peer); - } - } - - bool BitmaskInterestChunk::AddRuleFn(RuleNetworkId netId, InterestBitmask bits, const RpcContext& ctx) - { - if (IsProxy()) - { - auto rulePtr = m_interestHandler->CreateRule(ctx.m_sourcePeer); - rulePtr->Set(bits); - m_rules.insert(AZStd::make_pair(netId, rulePtr)); - } - - return true; - } - - bool BitmaskInterestChunk::RemoveRuleFn(RuleNetworkId netId, const RpcContext&) - { - if (IsProxy()) - { - m_rules.erase(netId); - } - - return true; - } - - bool BitmaskInterestChunk::UpdateRuleFn(RuleNetworkId netId, InterestBitmask bits, const RpcContext&) - { - if (IsProxy()) - { - auto it = m_rules.find(netId); - if (it != m_rules.end()) - { - it->second->Set(bits); - } - } - - return true; - } - - bool BitmaskInterestChunk::AddRuleForPeerFn(RuleNetworkId netId, PeerId peerId, InterestBitmask bitmask, const RpcContext&) - { - BitmaskInterestChunk::Ptr peerChunk = m_interestHandler->FindRulesChunkByPeerId(peerId); - if (peerChunk) - { - auto it = peerChunk->m_rules.find(netId); - if (it == peerChunk->m_rules.end()) - { - auto rulePtr = m_interestHandler->CreateRule(peerId); - peerChunk->m_rules.insert(AZStd::make_pair(netId, rulePtr)); - rulePtr->Set(bitmask); - } - } - return false; - } - /////////////////////////////////////////////////////////////////////////// - - - /* - * BitmaskInterest - */ - BitmaskInterest::BitmaskInterest(BitmaskInterestHandler* handler) - : m_handler(handler) - , m_bits(0) - { - AZ_Assert(m_handler, "Invalid interest handler"); - } - /////////////////////////////////////////////////////////////////////////// - - - /* - * BitmaskInterestRule - */ - void BitmaskInterestRule::Set(InterestBitmask newBitmask) - { - m_bits = newBitmask; - m_handler->UpdateRule(this); - } - - void BitmaskInterestRule::Destroy() - { - m_handler->DestroyRule(this); - } - /////////////////////////////////////////////////////////////////////////// - - - /* - * BitmaskInterestAttribute - */ - void BitmaskInterestAttribute::Set(InterestBitmask newBitmask) - { - m_bits = newBitmask; - m_handler->UpdateAttribute(this); - } - - void BitmaskInterestAttribute::Destroy() - { - m_handler->DestroyAttribute(this); - } - /////////////////////////////////////////////////////////////////////////// - - - /* - * BitmaskInterestHandler - */ - BitmaskInterestHandler::BitmaskInterestHandler() - : m_im(nullptr) - , m_rm(nullptr) - , m_lastRuleNetId(0) - , m_rulesReplica(nullptr) - { - } - - BitmaskInterestRule::Ptr BitmaskInterestHandler::CreateRule(PeerId peerId) - { - BitmaskInterestRule* rulePtr = aznew BitmaskInterestRule(this, peerId, GetNewRuleNetId()); - m_rules.insert(rulePtr); - - if (peerId == m_rm->GetLocalPeerId() && m_rulesReplica) - { - m_rulesReplica->AddRuleRpc(rulePtr->GetNetworkId(), rulePtr->Get()); - m_localRules.insert(rulePtr); - } - - return rulePtr; - } - - void BitmaskInterestHandler::FreeRule(BitmaskInterestRule* rule) - { - //TODO: should be pool-allocated - m_rules.erase(rule); - delete rule; - } - - void BitmaskInterestHandler::DestroyRule(BitmaskInterestRule* rule) - { - if (m_rm && rule->GetPeerId() == m_rm->GetLocalPeerId() && m_rulesReplica) - { - m_rulesReplica->RemoveRuleRpc(rule->GetNetworkId()); - } - - rule->m_bits = 0; - m_dirtyRules.insert(rule); - m_localRules.erase(rule); - } - - void BitmaskInterestHandler::UpdateRule(BitmaskInterestRule* rule) - { - if (m_rm && m_rulesReplica && rule->GetPeerId() == m_rm->GetLocalPeerId()) - { - m_rulesReplica->UpdateRuleRpc(rule->GetNetworkId(), rule->Get()); - } - - m_dirtyRules.insert(rule); - } - - BitmaskInterestAttribute::Ptr BitmaskInterestHandler::CreateAttribute(ReplicaId replicaId) - { - auto ptr = aznew BitmaskInterestAttribute(this, replicaId); - m_attrs.insert(ptr); - return ptr; - } - - void BitmaskInterestHandler::FreeAttribute(BitmaskInterestAttribute* attrib) - { - //TODO: should be pool-allocated - m_attrs.erase(attrib); - delete attrib; - } - - void BitmaskInterestHandler::DestroyAttribute(BitmaskInterestAttribute* attrib) - { - attrib->m_bits = 0; - m_dirtyAttributes.insert(attrib); - } - - void BitmaskInterestHandler::UpdateAttribute(BitmaskInterestAttribute* attrib) - { - m_dirtyAttributes.insert(attrib); - } - - void BitmaskInterestHandler::OnNewRulesChunk(BitmaskInterestChunk::Ptr chunk, ReplicaPeer* peer) - { - if (chunk != m_rulesReplica) // non-local - { - m_peerChunks.insert(AZStd::make_pair(peer->GetId(), chunk)); - - for (auto& rule : m_localRules) - { - chunk->AddRuleForPeerRpc(rule->GetNetworkId(), rule->GetPeerId(), rule->Get()); - } - } - } - - void BitmaskInterestHandler::OnDeleteRulesChunk(BitmaskInterestChunk::Ptr chunk, ReplicaPeer* peer) - { - AZ_UNUSED(chunk); - m_rulesReplica = nullptr; - - if (peer) - { - m_peerChunks.erase(peer->GetId()); - } - } - - RuleNetworkId BitmaskInterestHandler::GetNewRuleNetId() - { - ++m_lastRuleNetId; - if (m_rulesReplica) - { - return m_rulesReplica->GetReplicaId() | (static_cast(m_lastRuleNetId) << 32); - } - - return (static_cast(m_lastRuleNetId) << 32); - } - - BitmaskInterestChunk::Ptr BitmaskInterestHandler::FindRulesChunkByPeerId(PeerId peerId) - { - auto it = m_peerChunks.find(peerId); - if (it == m_peerChunks.end()) - { - return nullptr; - } - else - { - return it->second; - } - } - - const InterestMatchResult& BitmaskInterestHandler::GetLastResult() - { - return m_resultCache; - } - - void BitmaskInterestHandler::Update() - { - m_resultCache.clear(); - - for (BitmaskInterestRule* rule : m_dirtyRules) - { - InterestBitmask j = 1; - for (size_t i = 0; i < k_numGroups; ++i, j <<= 1) - { - auto ruleIt = m_ruleGroups[i].find(rule); - bool isMatch = !!(rule->m_bits & j); - if (isMatch && ruleIt == m_ruleGroups[i].end()) - { - m_ruleGroups[i].insert(rule); - - // recalculate all the attributes in this bucket - for (BitmaskInterestAttribute* attr : m_attrGroups[i]) - { - m_dirtyAttributes.insert(attr); - } - } - else if (!isMatch && ruleIt != m_ruleGroups[i].end()) - { - m_ruleGroups[i].erase(ruleIt); - - // recalculate all the attributes in this bucket - for (BitmaskInterestAttribute* attr : m_attrGroups[i]) - { - m_dirtyAttributes.insert(attr); - } - } - } - - if (rule->IsDeleted()) - { - FreeRule(rule); - } - } - - m_dirtyRules.clear(); - - for (BitmaskInterestAttribute* attr : m_dirtyAttributes) - { - InterestBitmask j = 1; - for (size_t i = 0; i < k_numGroups; ++i, j <<= 1) - { - auto attrIt = m_attrGroups[i].find(attr); - bool isMatch = !!(attr->m_bits & j); - if (isMatch && attrIt == m_attrGroups[i].end()) - { - m_attrGroups[i].insert(attr); - } - else if (!isMatch && attrIt != m_attrGroups[i].end()) - { - m_attrGroups[i].erase(attrIt); - } - } - } - - for (BitmaskInterestAttribute* attr : m_dirtyAttributes) - { - auto repIt = m_resultCache.insert(attr->GetReplicaId()); - - InterestBitmask j = 1; - for (size_t i = 0; i < k_numGroups; ++i, j <<= 1) - { - if (!!(attr->m_bits & j)) - { - for (BitmaskInterestRule* rule : m_ruleGroups[i]) - { - repIt.first->second.insert(rule->GetPeerId()); - } - } - } - - if (attr->IsDeleted()) - { - FreeAttribute(attr); - } - } - - m_dirtyAttributes.clear(); - } - - void BitmaskInterestHandler::OnRulesHandlerRegistered(InterestManager* manager) - { - AZ_Assert(m_im == nullptr, "Handler is already registered with manager %p (%p)\n", m_im, manager); - AZ_Assert(m_rulesReplica == nullptr, "Rules replica is already created\n"); - AZ_TracePrintf("GridMate", "Bitmask interest handler is registered\n"); - m_im = manager; - m_rm = m_im->GetReplicaManager(); - m_rm->RegisterUserContext(AZ_CRC("BitmaskInterestHandler", 0x5bf5d75b), this); - - auto replica = Replica::CreateReplica("BitmaskInterestHandlerRules"); - m_rulesReplica = CreateAndAttachReplicaChunk(replica); - m_rm->AddPrimary(replica); - } - - void BitmaskInterestHandler::OnRulesHandlerUnregistered(InterestManager* manager) - { - (void)manager; - - AZ_Assert(m_im == manager, "Handler was not registered with manager %p (%p)\n", manager, m_im); - AZ_TracePrintf("GridMate", "Bitmask interest handler is unregistered\n"); - - if (m_rulesReplica) - { - m_rulesReplica->m_rules.clear(); - m_rulesReplica->m_interestHandler = nullptr; - } - - for (auto& chunk : m_peerChunks) - { - chunk.second->m_rules.clear(); - chunk.second->m_interestHandler = nullptr; - } - - m_rulesReplica = nullptr; - m_im = nullptr; - m_rm->UnregisterUserContext(AZ_CRC("BitmaskInterestHandler", 0x5bf5d75b)); - m_rm = nullptr; - - m_peerChunks.clear(); - m_localRules.clear(); - - for (auto& a : m_attrs) - { - delete a; - } - - for (auto& r : m_rules) - { - delete r; - } - - m_dirtyAttributes.clear(); - m_dirtyRules.clear(); - - for (auto& group : m_attrGroups) - { - group.clear(); - } - - for (auto& group : m_ruleGroups) - { - group.clear(); - } - - m_resultCache.clear(); - } - /////////////////////////////////////////////////////////////////////////// -} diff --git a/Code/Framework/GridMate/GridMate/Replica/Interest/BitmaskInterestHandler.h b/Code/Framework/GridMate/GridMate/Replica/Interest/BitmaskInterestHandler.h deleted file mode 100644 index 6b91859c95..0000000000 --- a/Code/Framework/GridMate/GridMate/Replica/Interest/BitmaskInterestHandler.h +++ /dev/null @@ -1,237 +0,0 @@ -/* - * 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 - * - */ - -#ifndef GM_REPLICA_BITMASKINTERESTHANDLER_H -#define GM_REPLICA_BITMASKINTERESTHANDLER_H - -#include -#include -#include -#include - -#include -#include -#include - - -namespace GridMate -{ - class BitmaskInterestHandler; - using InterestBitmask = AZ::u32; - - /* - * Base interest - */ - class BitmaskInterest - { - friend class BitmaskInterestHandler; - - public: - InterestBitmask Get() const { return m_bits; } - - protected: - explicit BitmaskInterest(BitmaskInterestHandler* handler); - - BitmaskInterestHandler* m_handler; - InterestBitmask m_bits; - }; - /////////////////////////////////////////////////////////////////////////// - - - /* - * Bitmask rule - */ - class BitmaskInterestRule - : public InterestRule - , public BitmaskInterest - { - friend class BitmaskInterestHandler; - - public: - using Ptr = AZStd::intrusive_ptr; - - GM_CLASS_ALLOCATOR(BitmaskInterestRule); - - void Set(InterestBitmask newBitmask); - - private: - - // Intrusive ptr - template - friend struct AZStd::IntrusivePtrCountPolicy; - unsigned int m_refCount = 0; - AZ_FORCE_INLINE void add_ref() { ++m_refCount; } - AZ_FORCE_INLINE void release() { --m_refCount; if (!m_refCount) Destroy(); } - AZ_FORCE_INLINE bool IsDeleted() const { return m_refCount == 0; } - /////////////////////////////////////////////////////////////////////////// - - BitmaskInterestRule(BitmaskInterestHandler* handler, PeerId peerId, RuleNetworkId netId) - : InterestRule(peerId, netId) - , BitmaskInterest(handler) - {} - - void Destroy(); - }; - /////////////////////////////////////////////////////////////////////////// - - - /* - * Bitmask attribute - */ - class BitmaskInterestAttribute - : public InterestAttribute - , public BitmaskInterest - { - friend class BitmaskInterestHandler; - template friend class InterestPtr; - - public: - using Ptr = AZStd::intrusive_ptr; - - GM_CLASS_ALLOCATOR(BitmaskInterestAttribute); - - void Set(InterestBitmask newBitmask); - - private: - - // Intrusive ptr - template - friend struct AZStd::IntrusivePtrCountPolicy; - unsigned int m_refCount = 0; - AZ_FORCE_INLINE void add_ref() { ++m_refCount; } - AZ_FORCE_INLINE void release() { Destroy(); } - AZ_FORCE_INLINE bool IsDeleted() const { return m_refCount == 0; } - /////////////////////////////////////////////////////////////////////////// - - BitmaskInterestAttribute(BitmaskInterestHandler* handler, ReplicaId repId) - : InterestAttribute(repId) - , BitmaskInterest(handler) - {} - - void Destroy(); - }; - /////////////////////////////////////////////////////////////////////////// - - class BitmaskInterestChunk - : public ReplicaChunk - { - public: - GM_CLASS_ALLOCATOR(BitmaskInterestChunk); - - BitmaskInterestChunk() - : AddRuleRpc("AddRule") - , RemoveRuleRpc("RemoveRule") - , UpdateRuleRpc("UpdateRule") - , AddRuleForPeerRpc("AddRuleForPeerRpc") - , m_interestHandler(nullptr) - {} - - typedef AZStd::intrusive_ptr Ptr; - bool IsReplicaMigratable() override { return false; } - bool IsBroadcast() override { return true; } - static const char* GetChunkName() { return "BitmaskInterestChunk"; } - - void OnReplicaActivate(const ReplicaContext& rc) override; - void OnReplicaDeactivate(const ReplicaContext& rc) override; - - bool AddRuleFn(RuleNetworkId netId, InterestBitmask bits, const RpcContext& ctx); - bool RemoveRuleFn(RuleNetworkId netId, const RpcContext&); - bool UpdateRuleFn(RuleNetworkId netId, InterestBitmask bits, const RpcContext&); - bool AddRuleForPeerFn(RuleNetworkId netId, PeerId peerId, InterestBitmask bitmask, const RpcContext&); - - Rpc, RpcArg>::BindInterface AddRuleRpc; - Rpc>::BindInterface RemoveRuleRpc; - Rpc, RpcArg>::BindInterface UpdateRuleRpc; - - Rpc, RpcArg, RpcArg>::BindInterface AddRuleForPeerRpc; - - unordered_map m_rules; - BitmaskInterestHandler* m_interestHandler; - }; - - /* - * Rules handler - */ - class BitmaskInterestHandler - : public BaseRulesHandler - { - friend class BitmaskInterestRule; - friend class BitmaskInterestAttribute; - friend class BitmaskInterestChunk; - - public: - - GM_CLASS_ALLOCATOR(BitmaskInterestHandler); - - BitmaskInterestHandler(); - - // Creates new bitmask rule and binds it to the peer - BitmaskInterestRule::Ptr CreateRule(PeerId peerId); - - // Creates new bitmask attribute and binds it to the replica - BitmaskInterestAttribute::Ptr CreateAttribute(ReplicaId replicaId); - - // Calculates rules and attributes matches - void Update() override; - - // Returns last recalculated results - const InterestMatchResult& GetLastResult() override; - - InterestManager* GetManager() override { return m_im; } - private: - - // BaseRulesHandler - void OnRulesHandlerRegistered(InterestManager* manager) override; - void OnRulesHandlerUnregistered(InterestManager* manager) override; - - void DestroyRule(BitmaskInterestRule* rule); - void FreeRule(BitmaskInterestRule* rule); - void UpdateRule(BitmaskInterestRule* rule); - - void DestroyAttribute(BitmaskInterestAttribute* attrib); - void FreeAttribute(BitmaskInterestAttribute* attrib); - void UpdateAttribute(BitmaskInterestAttribute* attrib); - - - void OnNewRulesChunk(BitmaskInterestChunk::Ptr chunk, ReplicaPeer* peer); - void OnDeleteRulesChunk(BitmaskInterestChunk::Ptr chunk, ReplicaPeer* peer); - - RuleNetworkId GetNewRuleNetId(); - - BitmaskInterestChunk::Ptr FindRulesChunkByPeerId(PeerId peerId); - - typedef unordered_set AttributeSet; - typedef unordered_set RuleSet; - static const size_t k_numGroups = sizeof(InterestBitmask) * CHAR_BIT; - - InterestManager* m_im; - ReplicaManager* m_rm; - - AZ::u32 m_lastRuleNetId; - - unordered_map m_peerChunks; - - RuleSet m_localRules; - - AttributeSet m_dirtyAttributes; - RuleSet m_dirtyRules; - - AZStd::array m_attrGroups; - AZStd::array m_ruleGroups; - - InterestMatchResult m_resultCache; - - BitmaskInterestChunk* m_rulesReplica; - - AttributeSet m_attrs; - RuleSet m_rules; - }; - /////////////////////////////////////////////////////////////////////////// -} - -#endif diff --git a/Code/Framework/GridMate/GridMate/Replica/ReplicaFunctions.inl b/Code/Framework/GridMate/GridMate/Replica/ReplicaFunctions.inl deleted file mode 100644 index da54d88ef7..0000000000 --- a/Code/Framework/GridMate/GridMate/Replica/ReplicaFunctions.inl +++ /dev/null @@ -1,98 +0,0 @@ -/* - * 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 (GM_FUNCTION_NUM_ARGS == 0) - #define GM_FUNCTION_TEMPLATE_PARMS - #define GM_FUNCTION_ARGS - #define GM_FUNCTION_ARGS_CONCAT - #define GM_FUNCTION_FORWARD - #define GM_FUNCTION_FORWARD_CONCAT -#elif (GM_FUNCTION_NUM_ARGS == 1) - #define GM_FUNCTION_TEMPLATE_PARMS , typename T0 - #define GM_FUNCTION_ARGS T0 && t0 - #define GM_FUNCTION_ARGS_CONCAT , GM_FUNCTION_ARGS - #define GM_FUNCTION_FORWARD AZStd::forward(t0) - #define GM_FUNCTION_FORWARD_CONCAT , GM_FUNCTION_FORWARD -#elif (GM_FUNCTION_NUM_ARGS == 2) - #define GM_FUNCTION_TEMPLATE_PARMS , typename T0, typename T1 - #define GM_FUNCTION_ARGS T0 && t0, T1 && t1 - #define GM_FUNCTION_ARGS_CONCAT , GM_FUNCTION_ARGS - #define GM_FUNCTION_FORWARD AZStd::forward(t0), AZStd::forward(t1) - #define GM_FUNCTION_FORWARD_CONCAT , GM_FUNCTION_FORWARD -#elif (GM_FUNCTION_NUM_ARGS == 3) - #define GM_FUNCTION_TEMPLATE_PARMS , typename T0, typename T1, typename T2 - #define GM_FUNCTION_ARGS T0 && t0, T1 && t1, T2 && t2 - #define GM_FUNCTION_ARGS_CONCAT , GM_FUNCTION_ARGS - #define GM_FUNCTION_FORWARD AZStd::forward(t0), AZStd::forward(t1), AZStd::forward(t2) - #define GM_FUNCTION_FORWARD_CONCAT , GM_FUNCTION_FORWARD -#elif (GM_FUNCTION_NUM_ARGS == 4) - #define GM_FUNCTION_TEMPLATE_PARMS , typename T0, typename T1, typename T2, typename T3 - #define GM_FUNCTION_ARGS T0 && t0, T1 && t1, T2 && t2, T3 && t3 - #define GM_FUNCTION_ARGS_CONCAT , GM_FUNCTION_ARGS - #define GM_FUNCTION_FORWARD AZStd::forward(t0), AZStd::forward(t1), AZStd::forward(t2), AZStd::forward(t3) - #define GM_FUNCTION_FORWARD_CONCAT , GM_FUNCTION_FORWARD -#elif (GM_FUNCTION_NUM_ARGS == 5) - #define GM_FUNCTION_TEMPLATE_PARMS , typename T0, typename T1, typename T2, typename T3, typename T4 - #define GM_FUNCTION_ARGS T0 && t0, T1 && t1, T2 && t2, T3 && t3, T4 && t4 - #define GM_FUNCTION_ARGS_CONCAT , GM_FUNCTION_ARGS - #define GM_FUNCTION_FORWARD AZStd::forward(t0), AZStd::forward(t1), AZStd::forward(t2), AZStd::forward(t3), AZStd::forward(t4) - #define GM_FUNCTION_FORWARD_CONCAT , GM_FUNCTION_FORWARD -#else - #error Unsupported argument count -#endif - -/** - Create a ReplicaChunk that isn't attached to a Replica. To attach it to a replica, - call replica->AttachReplicaChunk(chunk). -**/ -template -ChunkType* CreateReplicaChunk(GM_FUNCTION_ARGS) -{ - static_assert(AZStd::is_base_of::value, "Class must inherit from ReplicaChunk"); - - ReplicaChunkDescriptor* descriptor = ReplicaChunkDescriptorTable::Get().FindReplicaChunkDescriptor(ReplicaChunkClassId(ChunkType::GetChunkName())); - AZ_Assert(descriptor, "Cannot find replica chunk descriptor for %s. Did you remember to register the chunk type?", ChunkType::GetChunkName()); - ReplicaChunkDescriptorTable::Get().BeginConstructReplicaChunk(descriptor); - ChunkType* chunk = aznew ChunkType(GM_FUNCTION_FORWARD); - ReplicaChunkDescriptorTable::Get().EndConstructReplicaChunk(); - chunk->Init(descriptor); - - return chunk; -} - -/** - Create a ReplicaChunk that is automatically attached to the replica. -**/ -template -ChunkType* CreateAndAttachReplicaChunk(const ReplicaPtr& replica GM_FUNCTION_ARGS_CONCAT) -{ - return CreateAndAttachReplicaChunk(replica.get() GM_FUNCTION_FORWARD_CONCAT); -} - -/** - Create a ReplicaChunk that is automatically attached to the replica. -**/ -template -ChunkType* CreateAndAttachReplicaChunk(Replica* replica GM_FUNCTION_ARGS_CONCAT) -{ - // Chunks cannot be attached while active - if (replica->IsActive()) - { - AZ_Warning("GridMate", false, "Cannot attach chunk %s while replica is active", ChunkType::GetChunkName()); - return nullptr; - } - - ChunkType* chunk = CreateReplicaChunk(GM_FUNCTION_FORWARD); - replica->AttachReplicaChunk(chunk); - return chunk; -} - -#undef GM_FUNCTION_TEMPLATE_PARMS -#undef GM_FUNCTION_ARGS -#undef GM_FUNCTION_ARGS_CONCAT -#undef GM_FUNCTION_FORWARD -#undef GM_FUNCTION_FORWARD_CONCAT diff --git a/Code/Framework/GridMate/GridMate/gridmate_files.cmake b/Code/Framework/GridMate/GridMate/gridmate_files.cmake index 758b217112..2646660eba 100644 --- a/Code/Framework/GridMate/GridMate/gridmate_files.cmake +++ b/Code/Framework/GridMate/GridMate/gridmate_files.cmake @@ -40,7 +40,6 @@ set(FILES Containers/unordered_set.h Containers/vector.h Replica/BasicHostChunkDescriptor.h - Replica/DeltaCompressedDataSet.h Replica/DataSet.cpp Replica/DataSet.h Replica/Interpolators.h @@ -58,7 +57,6 @@ set(FILES Replica/ReplicaCommon.h Replica/ReplicaDefs.h Replica/ReplicaFunctions.h - Replica/ReplicaFunctions.inl Replica/ReplicaInline.inl Replica/ReplicaMgr.cpp Replica/ReplicaMgr.h @@ -80,8 +78,6 @@ set(FILES Replica/Tasks/ReplicaProcessPolicy.cpp Replica/Tasks/ReplicaProcessPolicy.h Replica/Tasks/ReplicaPriorityPolicy.h - Replica/Interest/BitmaskInterestHandler.cpp - Replica/Interest/BitmaskInterestHandler.h Replica/Interest/InterestDefs.h Replica/Interest/InterestManager.cpp Replica/Interest/InterestManager.h From e28a0eaec75e10351cdd351bde8f8aa4141bbfae Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 13 Dec 2021 15:06:20 -0800 Subject: [PATCH 134/284] Removes interest stuff from GridMate Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../GridMate/Replica/Interest/InterestDefs.h | 132 ---------- .../Replica/Interest/InterestEvents.h | 53 ---- .../Replica/Interest/InterestManager.cpp | 243 ------------------ .../Replica/Interest/InterestManager.h | 91 ------- .../Replica/Interest/InterestQueryResult.cpp | 25 -- .../Replica/Interest/InterestQueryResult.h | 25 -- .../GridMate/Replica/Interest/RulesHandler.h | 65 ----- .../GridMate/GridMate/Replica/Replica.h | 4 +- .../GridMate/GridMate/Replica/ReplicaMgr.h | 1 - .../GridMate/GridMate/Replica/ReplicaTarget.h | 2 - .../GridMate/GridMate/gridmate_files.cmake | 5 - 11 files changed, 1 insertion(+), 645 deletions(-) delete mode 100644 Code/Framework/GridMate/GridMate/Replica/Interest/InterestDefs.h delete mode 100644 Code/Framework/GridMate/GridMate/Replica/Interest/InterestEvents.h delete mode 100644 Code/Framework/GridMate/GridMate/Replica/Interest/InterestManager.cpp delete mode 100644 Code/Framework/GridMate/GridMate/Replica/Interest/InterestManager.h delete mode 100644 Code/Framework/GridMate/GridMate/Replica/Interest/InterestQueryResult.cpp delete mode 100644 Code/Framework/GridMate/GridMate/Replica/Interest/InterestQueryResult.h delete mode 100644 Code/Framework/GridMate/GridMate/Replica/Interest/RulesHandler.h diff --git a/Code/Framework/GridMate/GridMate/Replica/Interest/InterestDefs.h b/Code/Framework/GridMate/GridMate/Replica/Interest/InterestDefs.h deleted file mode 100644 index 7695ee6b08..0000000000 --- a/Code/Framework/GridMate/GridMate/Replica/Interest/InterestDefs.h +++ /dev/null @@ -1,132 +0,0 @@ -/* - * 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 - * - */ -#ifndef GM_REPLICA_INTERESTDEFS_H -#define GM_REPLICA_INTERESTDEFS_H - -#include -#include -#include -#include -#include -#include - -namespace GridMate -{ - /** - * Bitmask used internally in InterestManager to check which handler is responsible for a given interest match - */ - using InterestHandlerSlot = AZ::u32; - - /** - * Rule identifier (unique within the session) - */ - using RuleNetworkId = AZ::u64; - /////////////////////////////////////////////////////////////////////////// - - using InterestPeerSet = unordered_set; - - /** - * InterestMatchResult: a structure to gather new matches from handlers. - * Passed to handler within matching context when handler's Match method is invoked. - * User must fill the structure with changes that handler recalculated. - * - * Specifically, the changes should have all the replicas that had their list of associated peers modified. - * Each entry replica - new full list of associated peers. - */ - class InterestMatchResult : public unordered_map - { - public: - using unordered_map::unordered_map; - - /* - * An expensive debug trace helper, prints sorted mapping between replica id's and associated peers. - */ - void PrintMatchResult(const char* name) const; - }; - /////////////////////////////////////////////////////////////////////////// - - /** - * Base class for interest rules - */ - class InterestRule - { - public: - explicit InterestRule(PeerId peerId, RuleNetworkId netId) - : m_peerId(peerId) - , m_netId(netId) - {} - - PeerId GetPeerId() const { return m_peerId; } - RuleNetworkId GetNetworkId() const { return m_netId; } - - protected: - PeerId m_peerId; ///< the peer this rule is bound to - RuleNetworkId m_netId; ///< network id - }; - /////////////////////////////////////////////////////////////////////////// - - - /** - * Base class for interest attributes - */ - class InterestAttribute - { - public: - explicit InterestAttribute(ReplicaId replicaId) - : m_replicaId(replicaId) - {} - - ReplicaId GetReplicaId() const { return m_replicaId; } - - protected: - ReplicaId m_replicaId; ///< Replica id this attribute is bound to - }; - /////////////////////////////////////////////////////////////////////////// - -#if !defined(AZ_DEBUG_BUILD) - AZ_INLINE void InterestMatchResult::PrintMatchResult(const char*) const {} -#else - AZ_INLINE void InterestMatchResult::PrintMatchResult(const char* name) const - { - if (size() == 0) - { - AZ_TracePrintf("GridMate", "InterestMatchResult %s empty \n", name); - return; - } - - AZStd::vector sorted; - for (auto& r : *this) - { - sorted.push_back(r); - } - - auto sortByReplicaId = [](const value_type& one, const value_type& another) - { - return one.first < another.first; - }; - AZStd::sort(sorted.begin(), sorted.end(), sortByReplicaId); - - AZ_TracePrintf("GridMate", "InterestMatchResult %s \n", name); - for (auto& match : sorted) - { - auto repId = match.first; - AZ_TracePrintf("GridMate", "\t\t\t for repId %d ", repId); - - // unsorted list of peers - for (auto& peerId : match.second) - { - AZ_TracePrintf("", "peer %d", peerId); - } - - AZ_TracePrintf("", "\n"); - } - } -#endif -} // GridMate - -#endif // GM_REPLICA_INTERESTDEFS_H diff --git a/Code/Framework/GridMate/GridMate/Replica/Interest/InterestEvents.h b/Code/Framework/GridMate/GridMate/Replica/Interest/InterestEvents.h deleted file mode 100644 index cf7771cb32..0000000000 --- a/Code/Framework/GridMate/GridMate/Replica/Interest/InterestEvents.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * 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 - * - */ - -#ifndef GM_REPLICA_INTERESTEVENTS_H -#define GM_REPLICA_INTERESTEVENTS_H - -#if defined(GM_INTEREST_MANAGER) - -#include -#include - -#include -#include -#include - -namespace GridMate -{ - /** - * EBus for interest manager's events. - * Notifies subscribers about new interest matches and new mismatches happened. - */ - class InterestManagerEvents - : public AZ::EBusTraits - { - public: - static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::ById; - typedef AZStd::recursive_mutex MutexType; - typedef void* BusIdType; - typedef SysContAlloc AllocatorType; - - virtual ~InterestManagerEvents() {} - - /** - * Called when new pair of replica and peer matched their interest - */ - virtual void OnInterestMatched(ReplicaId replicaId, PeerId peerId) { (void) replicaId; (void) peerId; } - - /** - * Called when pair of replica and peer mismatched interest (only called if the pair was previously matching) - */ - virtual void OnInterestUnmatched(ReplicaId replicaId, PeerId peerId) { (void) replicaId; (void) peerId; } - }; - - typedef AZ::EBus InterestManagerEventsBus; -} - -#endif // GM_INTEREST_MANAGER -#endif diff --git a/Code/Framework/GridMate/GridMate/Replica/Interest/InterestManager.cpp b/Code/Framework/GridMate/GridMate/Replica/Interest/InterestManager.cpp deleted file mode 100644 index 2d77a3ec8c..0000000000 --- a/Code/Framework/GridMate/GridMate/Replica/Interest/InterestManager.cpp +++ /dev/null @@ -1,243 +0,0 @@ -/* - * 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 -#include -#include - -#include - -#include - -namespace GridMate -{ - static const unsigned k_maxHandlers = sizeof(GridMate::InterestHandlerSlot) * CHAR_BIT; - - /** - * Hashing utils - */ - struct ReplicaHashByPeer - { - AZ_FORCE_INLINE AZStd::size_t operator()(const ReplicaTarget* t) const - { - static_assert(sizeof(AZStd::size_t) >= sizeof(ReplicaPeer*), "Types sizes mismatch"); - return reinterpret_cast(t->GetPeer()); - } - }; - - struct ReplicaEqualToByPeer - { - AZ_FORCE_INLINE bool operator()(const ReplicaTarget* left, const ReplicaTarget* right) const - { - return left->GetPeer() == right->GetPeer(); - } - }; - - struct ReplicaHashByPeerId - { - AZ_FORCE_INLINE AZStd::size_t operator()(PeerId peerId) const - { - static_assert(sizeof(AZStd::size_t) >= sizeof(PeerId), "Types sizes mismatch"); - return static_cast(peerId); - } - }; - - struct ReplicaEqualToByPeerId - { - AZ_FORCE_INLINE bool operator()(PeerId peerId, const ReplicaTarget* right) const - { - return peerId == right->GetPeer()->GetId(); - } - }; - /////////////////////////////////////////////////////////////////////////// - - /** - * InterestManager - */ - InterestManager::InterestManager() - : m_rm(nullptr) - , m_freeSlots(~0u) - { - } - - void InterestManager::Init(const InterestManagerDesc& desc) - { - m_rm = desc.m_rm; - AZ_Assert(m_rm, "Invalid replica manager"); - } - - bool InterestManager::IsReady() const - { - return m_rm != nullptr; - } - - InterestManager::~InterestManager() - { - while (!m_handlers.empty()) - { - m_handlers.back()->OnRulesHandlerUnregistered(this); - m_handlers.pop_back(); - } - } - - void InterestManager::RegisterHandler(BaseRulesHandler* handler) - { - AZ_Assert(handler, "Invalid rules handler"); - - for (BaseRulesHandler* h : m_handlers) - { - if (h == handler) - { - AZ_TracePrintf("GridMate", "Rules handler %p is already registered", handler); - return; - } - } - - InterestHandlerSlot slot = GetNewSlot(); - if (!slot) - { - AZ_TracePrintf("GridMate", "Too many rules handlers, max=%u\n", k_maxHandlers); - return; - } - - handler->m_slot = slot; - m_handlers.push_back(handler); - handler->OnRulesHandlerRegistered(this); - } - - void InterestManager::UnregisterHandler(BaseRulesHandler* handler) - { - AZ_Assert(handler, "Invalid rules handler"); - - for (auto it = m_handlers.begin(); it != m_handlers.end(); ++it) - { - if (*it == handler) - { - handler->OnRulesHandlerUnregistered(this); - m_handlers.erase(it); - return; - } - } - - AZ_Assert(false, "Handler was not registered"); - } - - void InterestManager::Update() - { - // Updating all handlers - for (BaseRulesHandler* handler : m_handlers) - { - handler->Update(); - } - - // merging results from every handler - for (BaseRulesHandler* handler : m_handlers) - { - const InterestMatchResult& result = handler->GetLastResult(); - - for (auto& match : result) - { - ReplicaPtr replica = m_rm->FindReplica(match.first); - if (!replica) // replica was destroyed: ignoring this match - { - continue; - } - - unordered_set targets; - - for (ReplicaTarget& targetObj : replica->m_targets) - { - targets.insert(&targetObj); - if (!match.second.count(targetObj.GetPeer()->GetId())) - { - targetObj.m_slotMask &= ~handler->m_slot; - if (!targetObj.m_slotMask) - { - targetObj.m_flags |= ReplicaTarget::TargetRemoved; - m_rm->OnReplicaChanged(replica); - } - } - } - - for (const PeerId& peerId : match.second) - { - ReplicaTarget* rt = nullptr; - - auto it = targets.find_as(peerId, ReplicaHashByPeerId(), ReplicaEqualToByPeerId()); - if (it == targets.end()) - { - ReplicaPeer* peer = m_rm->FindPeer(peerId); - - if (!ShouldForward(replica.get(), peer)) - { - continue; - } - - rt = ReplicaTarget::AddReplicaTarget(peer, replica.get()); - rt->SetNew(true); - m_rm->OnReplicaChanged(replica); - } - else - { - rt = *it; - } - - rt->m_slotMask |= handler->m_slot; - rt->m_flags &= ~ReplicaTarget::TargetRemoved; - } - } - } - } - - - bool InterestManager::ShouldForward(Replica* replica, ReplicaPeer* peer) const - { - if (!peer) // invalid peer - { - return false; - } - - if (replica->IsPrimary()) // own the replica? - { - return true; - } - - if (m_rm->GetLocalPeerId() == peer->GetId() || peer->GetId() == replica->m_upstreamHop->GetId()) // forwarding to local peer or to owner? - { - return false; - } - - if (m_rm->IsSyncHost() && !(replica->m_upstreamHop->GetMode() == Mode_Peer && peer->GetMode() == Mode_Peer)) // we are host and replica' owner and target are not connected - { - return true; - } - - return false; - } - - InterestHandlerSlot InterestManager::GetNewSlot() - { - InterestHandlerSlot s = m_freeSlots; - for (unsigned i = 0; s && i < k_maxHandlers; ++i, s >>= 1) - { - if (s & 1) - { - InterestHandlerSlot slot = (1 << i); - m_freeSlots &= ~slot; - return slot; - } - } - return 0; - } - - void InterestManager::FreeSlot(InterestHandlerSlot slot) - { - m_freeSlots |= slot; - } - /////////////////////////////////////////////////////////////////////////// -} diff --git a/Code/Framework/GridMate/GridMate/Replica/Interest/InterestManager.h b/Code/Framework/GridMate/GridMate/Replica/Interest/InterestManager.h deleted file mode 100644 index e7ff19129c..0000000000 --- a/Code/Framework/GridMate/GridMate/Replica/Interest/InterestManager.h +++ /dev/null @@ -1,91 +0,0 @@ -/* - * 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 - * - */ -#ifndef GM_REPLICA_INTERESTMANAGER_H -#define GM_REPLICA_INTERESTMANAGER_H - -#include - -#include - -namespace GridMate -{ - class BaseRulesHandler; - - /** - * Interest manager initialization parameters - */ - struct InterestManagerDesc - { - ReplicaManager* m_rm; ///< Replica manager instance - - InterestManagerDesc() - : m_rm(nullptr) - { - - } - }; - - /** - * InterestManager: responsible for matching of replicas and peers pairs based on rules and attribute provided. - * InterestManager allows registration of up to 32 custom rules handler. Each rules handler is responsible of matching attributes - * and rules that user provides. InterestManager is responsible for merging results of matching from every registered handler and - * maintaining valid forwarding targets cache on every Replica. - */ - class InterestManager - { - public: - - GM_CLASS_ALLOCATOR(InterestManager); - - InterestManager(); - ~InterestManager(); - - /** - * Initialize manager with a descriptor - */ - void Init(const InterestManagerDesc& desc); - - /** - * Returns true if InterestManager is initialized and is ready to use - */ - bool IsReady() const; - - /** - * Register new handler with a given type and instance - */ - void RegisterHandler(BaseRulesHandler* handler); - - /** - * Unregister handler - */ - void UnregisterHandler(BaseRulesHandler* handler); - - /** - * Call to update current replica->peers cache - */ - void Update(); - - /** - * Returns replica manager IM is bount to - */ - ReplicaManager* GetReplicaManager() { return m_rm; } - private: - InterestManager(const InterestManager&) = delete; - InterestManager& operator=(const InterestManager&) = delete; - - InterestHandlerSlot GetNewSlot(); - void FreeSlot(InterestHandlerSlot slot); - bool ShouldForward(Replica* replica, ReplicaPeer* peer) const; - - ReplicaManager* m_rm; - vector m_handlers; - InterestHandlerSlot m_freeSlots; - }; -} // namespace GridMate - -#endif // GM_REPLICA_INTERESTMANAGER_H diff --git a/Code/Framework/GridMate/GridMate/Replica/Interest/InterestQueryResult.cpp b/Code/Framework/GridMate/GridMate/Replica/Interest/InterestQueryResult.cpp deleted file mode 100644 index 7c69b45794..0000000000 --- a/Code/Framework/GridMate/GridMate/Replica/Interest/InterestQueryResult.cpp +++ /dev/null @@ -1,25 +0,0 @@ -/* - * 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 - -namespace GridMate -{ - InterestQueryResult::InterestQueryResult() - { - - } - - InterestQueryResult::PeerList& InterestQueryResult::Insert(ReplicaId repId) - { - auto it = m_matches.insert_key(repId); - return it.first->second; - } -} // namespace GridMate - -*/ diff --git a/Code/Framework/GridMate/GridMate/Replica/Interest/InterestQueryResult.h b/Code/Framework/GridMate/GridMate/Replica/Interest/InterestQueryResult.h deleted file mode 100644 index 45213bd855..0000000000 --- a/Code/Framework/GridMate/GridMate/Replica/Interest/InterestQueryResult.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * 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 - * - */ -#ifndef GM_REPLICA_INTERESTQUERYRESULT_H -#define GM_REPLICA_INTERESTQUERYRESULT_H -/* -#include - -#include -#include -#include -#include - -namespace GridMate -{ - - using InterestPeerList = vector; - using InterestQueryResult = unordered_map; -} // GridMate -*/ -#endif // GM_REPLICA_INTERESTQUERYRESULT_H diff --git a/Code/Framework/GridMate/GridMate/Replica/Interest/RulesHandler.h b/Code/Framework/GridMate/GridMate/Replica/Interest/RulesHandler.h deleted file mode 100644 index 0c20063908..0000000000 --- a/Code/Framework/GridMate/GridMate/Replica/Interest/RulesHandler.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * 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 - * - */ -#ifndef GM_REPLICA_RULES_HANDLER_H -#define GM_REPLICA_RULES_HANDLER_H - -#include - -#include - -namespace GridMate -{ - class InterestManager; - - /** - * BaseRulesHandler: base handler class - * RulesHandler's job is to provide InterestManager with matching pairs of attributes and rules. - */ - class BaseRulesHandler - { - public: - BaseRulesHandler() - : m_slot(0) - {} - - virtual ~BaseRulesHandler() { }; - - /** - * Ticked by interest manager to retrieve new matches or mismatches of interests - */ - virtual void Update() = 0; - - /** - * Returns result of a previous update - * This only returns changes that happened on the previous tick not the whole world state - */ - virtual const InterestMatchResult& GetLastResult() = 0; - - /** - * Called by InterestManager when the given handler instance is registered - */ - virtual void OnRulesHandlerRegistered(InterestManager* manager) = 0; - - /** - * Called by InterestManager when the given handler is unregistered - */ - virtual void OnRulesHandlerUnregistered(InterestManager* manager) = 0; - - /** - * Returns interest mananger this handler is bound to, or nullptr if it's unbound - */ - virtual InterestManager* GetManager() = 0; - - private: - friend class InterestManager; - - InterestHandlerSlot m_slot; - }; -} // namespace GridMate - -#endif // GM_REPLICA_RULES_HANDLER_H diff --git a/Code/Framework/GridMate/GridMate/Replica/Replica.h b/Code/Framework/GridMate/GridMate/Replica/Replica.h index a70acd5201..9f4e5488fa 100644 --- a/Code/Framework/GridMate/GridMate/Replica/Replica.h +++ b/Code/Framework/GridMate/GridMate/Replica/Replica.h @@ -29,8 +29,7 @@ namespace GridMate class ReplicaStatus; class ReplicaTask; - class InterestManager; - + //------------------------------------------------------------------------- // Replica //------------------------------------------------------------------------- @@ -55,7 +54,6 @@ namespace GridMate friend class ReplicaMarshalNewTask; - friend class InterestManager; friend class ReplicaTarget; enum Flags diff --git a/Code/Framework/GridMate/GridMate/Replica/ReplicaMgr.h b/Code/Framework/GridMate/GridMate/Replica/ReplicaMgr.h index bd9f1a1ee9..30317d4227 100644 --- a/Code/Framework/GridMate/GridMate/Replica/ReplicaMgr.h +++ b/Code/Framework/GridMate/GridMate/Replica/ReplicaMgr.h @@ -329,7 +329,6 @@ namespace GridMate friend class ReplicaUpdateTaskBase; friend class ReplicaDestroyPeerTask; friend class SendLimitProcessPolicy; - friend class InterestManager; typedef unordered_map UserContextMapType; typedef unordered_map ReplicaMap; diff --git a/Code/Framework/GridMate/GridMate/Replica/ReplicaTarget.h b/Code/Framework/GridMate/GridMate/Replica/ReplicaTarget.h index be1a86b627..af914fb504 100644 --- a/Code/Framework/GridMate/GridMate/Replica/ReplicaTarget.h +++ b/Code/Framework/GridMate/GridMate/Replica/ReplicaTarget.h @@ -46,8 +46,6 @@ namespace GridMate */ class ReplicaTarget { - friend class InterestManager; - public: static ReplicaTarget* AddReplicaTarget(ReplicaPeer* peer, Replica* replica); diff --git a/Code/Framework/GridMate/GridMate/gridmate_files.cmake b/Code/Framework/GridMate/GridMate/gridmate_files.cmake index 2646660eba..a95250a66c 100644 --- a/Code/Framework/GridMate/GridMate/gridmate_files.cmake +++ b/Code/Framework/GridMate/GridMate/gridmate_files.cmake @@ -78,11 +78,6 @@ set(FILES Replica/Tasks/ReplicaProcessPolicy.cpp Replica/Tasks/ReplicaProcessPolicy.h Replica/Tasks/ReplicaPriorityPolicy.h - Replica/Interest/InterestDefs.h - Replica/Interest/InterestManager.cpp - Replica/Interest/InterestManager.h - Replica/Interest/InterestQueryResult.h - Replica/Interest/RulesHandler.h Serialize/Buffer.cpp Serialize/Buffer.h Serialize/PackedSize.h From 583020b3ae3e5721f4673c8e940381eda53352fc Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Tue, 14 Dec 2021 10:43:31 -0800 Subject: [PATCH 135/284] =?UTF-8?q?=EF=BB=BFRemoves=20unused=20files=20fro?= =?UTF-8?q?m=20AsetProcessor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Tests/AssetBuilderApplicationTests.cpp | 1 + .../AssetBuilderSDK/AssetBuilderEBusHelper.h | 67 --------- .../assetprocessor_windows_files.cmake | 1 - .../Platform/Windows/native/resource.h | 26 ---- .../assetprocessor_test_files.cmake | 1 - .../native/AssetManager/AssetData.h | 134 ------------------ .../native/AssetManager/assetdata.cpp | 16 --- .../tests/resourcecompiler/RCJobTest.cpp | 2 - .../native/tests/resourcecompiler/RCJobTest.h | 13 -- 9 files changed, 1 insertion(+), 260 deletions(-) delete mode 100644 Code/Tools/AssetProcessor/AssetBuilderSDK/AssetBuilderSDK/AssetBuilderEBusHelper.h delete mode 100644 Code/Tools/AssetProcessor/Platform/Windows/native/resource.h delete mode 100644 Code/Tools/AssetProcessor/native/AssetManager/AssetData.h delete mode 100644 Code/Tools/AssetProcessor/native/AssetManager/assetdata.cpp delete mode 100644 Code/Tools/AssetProcessor/native/tests/resourcecompiler/RCJobTest.h diff --git a/Code/Tools/AssetProcessor/AssetBuilder/Tests/AssetBuilderApplicationTests.cpp b/Code/Tools/AssetProcessor/AssetBuilder/Tests/AssetBuilderApplicationTests.cpp index 679b4a0a04..1b86c3aa2c 100644 --- a/Code/Tools/AssetProcessor/AssetBuilder/Tests/AssetBuilderApplicationTests.cpp +++ b/Code/Tools/AssetProcessor/AssetBuilder/Tests/AssetBuilderApplicationTests.cpp @@ -11,6 +11,7 @@ #include #include +#include #include #include #include diff --git a/Code/Tools/AssetProcessor/AssetBuilderSDK/AssetBuilderSDK/AssetBuilderEBusHelper.h b/Code/Tools/AssetProcessor/AssetBuilderSDK/AssetBuilderSDK/AssetBuilderEBusHelper.h deleted file mode 100644 index 6a29e0c36a..0000000000 --- a/Code/Tools/AssetProcessor/AssetBuilderSDK/AssetBuilderSDK/AssetBuilderEBusHelper.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - * 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 - * - */ -#ifndef ASSETBUILDERUTILEBUSHELPER_H -#define ASSETBUILDERUTILEBUSHELPER_H - -#include -#include -#include -#include -#include - -namespace AssetBuilderSDK -{ - //!This EBUS is used to send commands from the assetprocessor to the builder - class AssetBuilderCommandBusTraits - : public AZ::EBusTraits - { - public: - static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::ById; - static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Single; - typedef AZ::Uuid BusIdType; - typedef AZStd::recursive_mutex MutexType; - - virtual ~AssetBuilderCommandBusTraits() {} - - //Shutdown the builder. - virtual void ShutDown() {} - }; - - typedef AZ::EBus AssetBuilderCommandBus; - - //!Information that builders will send to the assetprocessor - struct AssetBuilderDesc - { - AZStd::string m_name;//builder name - AZStd::string m_regex;//builder regex - AZ::Uuid m_busId;// builder id - }; - - //!This EBUS is used to send information from the builder to the AssetProcessor - class AssetBuilderBusTraits - : public AZ::EBusTraits - { - public: - static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single; - static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Single; - typedef AZStd::recursive_mutex MutexType; - - virtual ~AssetBuilderBusTraits() {} - - //Use this function to send AssetBuilderDesc info to the assetprocessor - virtual void RegisterBuilderInformation(AssetBuilderDesc builderDesc) {} - - //Use this function to register all the component descriptors - virtual void RegisterComponentDescriptor(AZ::ComponentDescriptor* descriptor) {} - }; - - typedef AZ::EBus AssetBuilderBus; -} - - -#endif //ASSETBUILDERUTILEBUSHELPER_H diff --git a/Code/Tools/AssetProcessor/Platform/Windows/assetprocessor_windows_files.cmake b/Code/Tools/AssetProcessor/Platform/Windows/assetprocessor_windows_files.cmake index 96dd7434c1..39e697bf40 100644 --- a/Code/Tools/AssetProcessor/Platform/Windows/assetprocessor_windows_files.cmake +++ b/Code/Tools/AssetProcessor/Platform/Windows/assetprocessor_windows_files.cmake @@ -10,5 +10,4 @@ set(FILES native/FileWatcher/FileWatcher_platform.h native/FileWatcher/FileWatcher_windows.cpp native/FileWatcher/FileWatcher_windows.h - native/resource.h ) diff --git a/Code/Tools/AssetProcessor/Platform/Windows/native/resource.h b/Code/Tools/AssetProcessor/Platform/Windows/native/resource.h deleted file mode 100644 index 38259ae0f0..0000000000 --- a/Code/Tools/AssetProcessor/Platform/Windows/native/resource.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * 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 - * - */ - -//{{NO_DEPENDENCIES}} -// Microsoft Visual C++ generated include file. -// Used by Editor.rc -// -#define IDI_ICON1 2 -#define IDC_STATIC -1 - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NO_MFC 1 -#define _APS_NEXT_RESOURCE_VALUE 3 -#define _APS_NEXT_COMMAND_VALUE 32769 -#define _APS_NEXT_CONTROL_VALUE 1000 -#define _APS_NEXT_SYMED_VALUE 110 -#endif -#endif diff --git a/Code/Tools/AssetProcessor/assetprocessor_test_files.cmake b/Code/Tools/AssetProcessor/assetprocessor_test_files.cmake index a7a46ad62c..20ab4b706d 100644 --- a/Code/Tools/AssetProcessor/assetprocessor_test_files.cmake +++ b/Code/Tools/AssetProcessor/assetprocessor_test_files.cmake @@ -25,7 +25,6 @@ set(FILES native/tests/resourcecompiler/RCControllerTest.cpp native/tests/resourcecompiler/RCControllerTest.h native/tests/resourcecompiler/RCJobTest.cpp - native/tests/resourcecompiler/RCJobTest.h native/tests/assetBuilderSDK/assetBuilderSDKTest.h native/tests/assetBuilderSDK/assetBuilderSDKTest.cpp native/tests/assetBuilderSDK/SerializationDependenciesTests.cpp diff --git a/Code/Tools/AssetProcessor/native/AssetManager/AssetData.h b/Code/Tools/AssetProcessor/native/AssetManager/AssetData.h deleted file mode 100644 index a03d831283..0000000000 --- a/Code/Tools/AssetProcessor/native/AssetManager/AssetData.h +++ /dev/null @@ -1,134 +0,0 @@ -/* - * 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 - * - */ -#ifndef ASSETPROCESSOR_ASSETDATA_H -#define ASSETPROCESSOR_ASSETDATA_H - -#include -#include -#include -#include -#include -#include -#include - -namespace AssetProcessor -{ - using namespace AzToolsFramework::AssetDatabase; - - //Check the extension of all the products - //return true if any one of the product extension matches the input extension, else return false - bool CheckProductsExtension( const ProductDatabseEntryContainer& products, const char* ext ); - - //! this is the interface which we use to speak to the legacy database tables. - // its known as the legacy database interface because the forthcoming tables will completely replace these - // but this layer exits for compatibility with the previous version and allows us to upgrade in place. - class AssetDatabaseInterface - { - public: - - AssetDatabaseInterface() - { - qRegisterMetaType( "SourceEntry" ); - qRegisterMetaType( "ProductEntry" ); - qRegisterMetaType( "SourceEntryContainer" ); - qRegisterMetaType( "ProductEntryContainer" ); - } - - virtual ~AssetDatabaseInterface() - { - } - - //! Returns true if the database or file exists already - virtual bool DataExists() = 0; - - //! Actually connects to the database, loads it, or creates empty database depending on above. - virtual void LoadData() = 0; - - //! Use with care. Resets all data! This causes an immediate commit and save! - virtual void ClearData() = 0; - - //! Retrieve the scan folders - virtual void GetScanFolders(QStringList& scanFolderList) = 0; - - //! Retrieves a specific scan folder by id, return false if not found - virtual bool GetScanFolder(AZ::s64 scanFolderID, QString& scanFolder) = 0; - - //! Adds a scan folder - virtual AZ::s64 AddScanFolder(QString scanFolder) = 0; - - // ! remove a scanfolder - virtual void RemoveScanFolder(AZ::s64 scanFolderID) = 0; - virtual void RemoveScanFolder(QString scanFolder) = 0; - - //! query the scanFolder ID for a given folder, return false if not found - virtual bool GetScanFolderID(QString scanfolder, AZ::s64& scanFolderID) = 0; - - //! query the sourceID of a source - virtual bool GetSourceID(QString sourceName, QString jobDescription, AZ::s64& sourceID) = 0; - - //! Retrieve the fingerprint for a given source name on a given platform for a particular jobDescription - //! This could return zero if its never seen this file before. - virtual bool GetFingerprintForSource(QString sourceName, QString jobDescription, AZ::u32& fingerprint) = 0; - - //! Set the fingerprint for the given source name, platform and jobDescription to the value provided - //! If updating a existing fingerprint you do not have to supply guid or scanfolderid - virtual void SetSource(QString sourceName, QString jobDescription, AZ::u32 fingerprint, AZ::Uuid guid = AZ::Uuid::CreateNull(), AZ::s64 scanFolderID = 0) = 0; - - //! Removing a fingerprint will destroy its entry in the database - //! and any entries that refer to it (products, etc). if you want to merely set it dirty - //! Then instead call SetSource to zero - virtual void RemoveSource(QString sourceName, QString jobDescription) = 0; - virtual void RemoveSource(AZ::s64 sourceID) = 0; - - //! Given a source name, jobDescription, and platform return the list of products by the last compile of that file - //! returns false if it doesn't know about source or if the source did not emitted any products. - virtual bool GetProductsForSource(QString sourceName, QString jobDescription, ProductDatabseEntryContainer& products, QString platform = QString()) = 0; - - //! Given a source name and platform return the list of all jobDescriptions associated with them from the last compile of that file - //! returns false if it doesn't know about any job description for that source and platform. - virtual bool GetJobDescriptionsForSource(QString sourceName, QStringList& jobDescription) = 0; - - //! Given an product file name, compute source file name - //! False is returned if its never heard of that product. - virtual bool GetSourceFromProductName(QString productName, SourceDatabaseEntry& source) = 0; - - //! For a given source, set the list of products for that source. - //! Removes any data that's present and overwrites it with the new list - //! Note that an empty list is acceptable data, it means the source emitted no products - virtual void SetProductsForSource(QString sourceName, QString jobDescription, const ProductDatabseEntryContainer& productList = ProductDatabseEntryContainer(), QString platform = QString()) = 0; - - //! Clear the products for a given source. This removes the entry entirely, not just sets it to empty. - virtual void RemoveProducts(QString sourceName, QString jobDescription, QString platform = QString()) = 0; - virtual void RemoveProduct(AZ::s64 productID) = 0; - - //! GetMatchingProductFiles - checks the database for all products that begin with the given match check - //! Note that the input string is expected to not include the cache folder - //! so it probably starts with platform name. - virtual void GetMatchingProducts(QString matchCheck, ProductDatabseEntryContainer& products, QString platform = QString()) = 0; - - //! GetMatchingSourceFiles - checks the database for all source files that begin with the given match check - //! note that the input string is expected to be the relative path name - //! and the output is the relative name (so to convert it to a full path, you will need to call the appropriate function) - virtual void GetMatchingSources(QString matchCheck, SourceDatabaseEntryContainer& sources) = 0; - - //! Get a giant list of ALL known source files in the database. - virtual void GetSources(SourceDatabaseEntryContainer& sources) = 0; - - //! Get a giant list of ALL known products in the database. - virtual void GetProducts(ProductDatabseEntryContainer& products, QString platform = QString()) = 0; - - //! finds all elements in the database that ends with the given input. (Used to look things up by extensions, in general) - virtual void GetSourcesByExtension(QString extension, SourceDatabaseEntryContainer& sources) = 0; - - //! SetJobLogForSource updates the Job Log table to record the status of a particular job. - //! It also sets all prior jobs that match that job exactly to not be the "latest one" but keeps them in the database. - virtual void SetJobLogForSource(AZ::s64 jobId, const AZStd::string& sourceName, const AZStd::string& platform, const AZ::Uuid& builderUuid, const AZStd::string& jobKey, AzToolsFramework::AssetProcessor::JobStatus status) = 0; - }; -} // namespace AssetProcessor - -#endif // ASSETPROCESSOR_ASSETDATA_H diff --git a/Code/Tools/AssetProcessor/native/AssetManager/assetdata.cpp b/Code/Tools/AssetProcessor/native/AssetManager/assetdata.cpp deleted file mode 100644 index aa433ebb3e..0000000000 --- a/Code/Tools/AssetProcessor/native/AssetManager/assetdata.cpp +++ /dev/null @@ -1,16 +0,0 @@ -/* - * 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 "AssetData.h" -#include -#include - -namespace AssetProcessor -{ - -} - diff --git a/Code/Tools/AssetProcessor/native/tests/resourcecompiler/RCJobTest.cpp b/Code/Tools/AssetProcessor/native/tests/resourcecompiler/RCJobTest.cpp index e639e75351..aad990ac72 100644 --- a/Code/Tools/AssetProcessor/native/tests/resourcecompiler/RCJobTest.cpp +++ b/Code/Tools/AssetProcessor/native/tests/resourcecompiler/RCJobTest.cpp @@ -6,8 +6,6 @@ * */ -#include "RCJobTest.h" - #include #include diff --git a/Code/Tools/AssetProcessor/native/tests/resourcecompiler/RCJobTest.h b/Code/Tools/AssetProcessor/native/tests/resourcecompiler/RCJobTest.h deleted file mode 100644 index cd9c8a108e..0000000000 --- a/Code/Tools/AssetProcessor/native/tests/resourcecompiler/RCJobTest.h +++ /dev/null @@ -1,13 +0,0 @@ -/* - * 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 - -#include - - From a9d8a5dcb3b43816105089e7c001fac7a8796249 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Tue, 14 Dec 2021 11:35:16 -0800 Subject: [PATCH 136/284] Removes BufferedDataStream and FileStreamDataSource from CrashHandler Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../include/Uploader/BufferedDataStream.h | 32 ----------------- .../include/Uploader/FileStreamDataSource.h | 30 ---------------- .../Uploader/src/BufferedDataStream.cpp | 34 ------------------- .../Uploader/src/FileStreamDataSource.cpp | 29 ---------------- 4 files changed, 125 deletions(-) delete mode 100644 Code/Tools/CrashHandler/Uploader/include/Uploader/BufferedDataStream.h delete mode 100644 Code/Tools/CrashHandler/Uploader/include/Uploader/FileStreamDataSource.h delete mode 100644 Code/Tools/CrashHandler/Uploader/src/BufferedDataStream.cpp delete mode 100644 Code/Tools/CrashHandler/Uploader/src/FileStreamDataSource.cpp diff --git a/Code/Tools/CrashHandler/Uploader/include/Uploader/BufferedDataStream.h b/Code/Tools/CrashHandler/Uploader/include/Uploader/BufferedDataStream.h deleted file mode 100644 index 944fde999d..0000000000 --- a/Code/Tools/CrashHandler/Uploader/include/Uploader/BufferedDataStream.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * 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 - -#include -#include - -namespace O3de -{ - class BufferedDataStream : public crashpad::MinidumpUserExtensionStreamDataSource - { - public: - BufferedDataStream(uint32_t stream_type, const void* data, size_t data_size); - - size_t StreamDataSize() override; - bool ReadStreamData(Delegate* delegate) override; - - private: - std::vector data_; - - BufferedDataStream(const BufferedDataStream& rhs) = delete; - BufferedDataStream& operator=(const BufferedDataStream& rhs) = delete; - }; - -} diff --git a/Code/Tools/CrashHandler/Uploader/include/Uploader/FileStreamDataSource.h b/Code/Tools/CrashHandler/Uploader/include/Uploader/FileStreamDataSource.h deleted file mode 100644 index 6a3e11728c..0000000000 --- a/Code/Tools/CrashHandler/Uploader/include/Uploader/FileStreamDataSource.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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 - -#include -#include "base/files/file_path.h" - -namespace O3de -{ - class FileStreamDataSource : public crashpad::UserStreamDataSource - { - public: - FileStreamDataSource(const base::FilePath& filePath); - - std::unique_ptr ProduceStreamData(crashpad::ProcessSnapshot* process_snapshot) override; - - private: - FileStreamDataSource(const FileStreamDataSource& rhs) = delete; - FileStreamDataSource& operator=(const FileStreamDataSource& rhs) = delete; - - base::FilePath m_filePath; - }; -} diff --git a/Code/Tools/CrashHandler/Uploader/src/BufferedDataStream.cpp b/Code/Tools/CrashHandler/Uploader/src/BufferedDataStream.cpp deleted file mode 100644 index b4350b29d5..0000000000 --- a/Code/Tools/CrashHandler/Uploader/src/BufferedDataStream.cpp +++ /dev/null @@ -1,34 +0,0 @@ -/* - * 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 - -namespace O3de -{ - BufferedDataStream::BufferedDataStream(uint32_t stream_type, const void* data, size_t data_size) - : crashpad::MinidumpUserExtensionStreamDataSource(stream_type) - { - data_.resize(data_size); - - if (data_size) - { - memcpy(data_.data(), data, data_size); - } - } - - size_t BufferedDataStream::StreamDataSize() - { - return data_.size(); - } - - bool BufferedDataStream::ReadStreamData(Delegate* delegate) - { - return delegate->ExtensionStreamDataSourceRead(data_.size() ? data_.data() : nullptr, data_.size()); - } -} - diff --git a/Code/Tools/CrashHandler/Uploader/src/FileStreamDataSource.cpp b/Code/Tools/CrashHandler/Uploader/src/FileStreamDataSource.cpp deleted file mode 100644 index f490189057..0000000000 --- a/Code/Tools/CrashHandler/Uploader/src/FileStreamDataSource.cpp +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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 -#include - -#include - -namespace O3de -{ - FileStreamDataSource::FileStreamDataSource(const base::FilePath& filePath) : - m_filePath{ filePath } - { - - } - - std::unique_ptr FileStreamDataSource::ProduceStreamData(crashpad::ProcessSnapshot* process_snapshot) - { - static constexpr char testBuffer[] = "Test Data From buffer."; - - return std::make_unique( 0xCAFEBABE, testBuffer, sizeof(testBuffer)); - } -} - From f9f427bd9ceb0bb800cca1b77470abf3d3747835 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Tue, 14 Dec 2021 11:47:37 -0800 Subject: [PATCH 137/284] Remove unused test files from SceneAPI/SceneBuilder Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../SceneBuilder/Tests/TestFbxMesh.cpp | 181 ------------------ .../SceneAPI/SceneBuilder/Tests/TestFbxMesh.h | 86 --------- .../SceneBuilder/Tests/TestFbxNode.cpp | 34 ---- .../SceneAPI/SceneBuilder/Tests/TestFbxNode.h | 37 ---- .../SceneBuilder/Tests/TestFbxSkin.cpp | 91 --------- .../SceneAPI/SceneBuilder/Tests/TestFbxSkin.h | 50 ----- 6 files changed, 479 deletions(-) delete mode 100644 Code/Tools/SceneAPI/SceneBuilder/Tests/TestFbxMesh.cpp delete mode 100644 Code/Tools/SceneAPI/SceneBuilder/Tests/TestFbxMesh.h delete mode 100644 Code/Tools/SceneAPI/SceneBuilder/Tests/TestFbxNode.cpp delete mode 100644 Code/Tools/SceneAPI/SceneBuilder/Tests/TestFbxNode.h delete mode 100644 Code/Tools/SceneAPI/SceneBuilder/Tests/TestFbxSkin.cpp delete mode 100644 Code/Tools/SceneAPI/SceneBuilder/Tests/TestFbxSkin.h diff --git a/Code/Tools/SceneAPI/SceneBuilder/Tests/TestFbxMesh.cpp b/Code/Tools/SceneAPI/SceneBuilder/Tests/TestFbxMesh.cpp deleted file mode 100644 index 4451f0ae93..0000000000 --- a/Code/Tools/SceneAPI/SceneBuilder/Tests/TestFbxMesh.cpp +++ /dev/null @@ -1,181 +0,0 @@ -/* - * 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 -#include -#include -#include -#include - -namespace AZ -{ - namespace FbxSDKWrapper - { - TestFbxMesh::TestFbxMesh() - : m_vertexControlPoints(nullptr) - , m_vertexCount(0) - , m_polygonVertexIndices(nullptr) - , m_materialIndices(new FbxLayerElementArrayTemplate(eFbxInt)) - , m_uvElements(FbxGeometryElementUV::Create(nullptr, "TestElements_UV")) - , m_vertexColorElements(FbxGeometryElementVertexColor::Create(nullptr, "TestElements_VertexColors")) - , m_expectedVertexCount(0) - { - } - - int TestFbxMesh::GetDeformerCount() const - { - // For current test need, only have one skin for the mesh - return m_skin ? 1 : 0; - } - - AZStd::shared_ptr TestFbxMesh::GetSkin(int index) const - { - // For current test need, only have one skin for the mesh - return m_skin; - } - - bool TestFbxMesh::GetMaterialIndices(FbxLayerElementArrayTemplate** lockableArray) const - { - *lockableArray = m_materialIndices; - return true; - } - - int TestFbxMesh::GetControlPointsCount() const - { - return static_cast(m_vertexCount); - } - - AZStd::vector TestFbxMesh::GetControlPoints() const - { - return m_vertexControlPoints; - } - - int TestFbxMesh::GetPolygonCount() const - { - return static_cast(m_polygonInfo.size()); - } - - int TestFbxMesh::GetPolygonSize(int polygonIndex) const - { - if (m_polygonInfo.find(polygonIndex) != m_polygonInfo.end()) - { - return aznumeric_caster(m_polygonInfo.find(polygonIndex)->second.m_vertexCount); - } - return -1; - } - - int* TestFbxMesh::GetPolygonVertices() const - { - return m_polygonVertexIndices; - } - - int TestFbxMesh::GetPolygonVertexIndex(int polygonIndex) const - { - if (m_polygonInfo.find(polygonIndex) != m_polygonInfo.end()) - { - return aznumeric_caster(m_polygonInfo.find(polygonIndex)->second.m_startVertexIndex); - } - return -1; - } - - FbxUVWrapper TestFbxMesh::GetElementUV(int index) - { - (void)index; - return m_uvElements; - } - - int TestFbxMesh::GetElementUVCount() const - { - return 1; - } - - FbxVertexColorWrapper TestFbxMesh::GetElementVertexColor(int index) - { - (void)index; - return m_vertexColorElements; - } - - int TestFbxMesh::GetElementVertexColorCount() const - { - return 1; - } - - bool TestFbxMesh::GetPolygonVertexNormal(int polyIndex, int vertexIndex, Vector3& normal) const - { - normal = Vector3(1.0f, 0.0f, 0.0f); - return true; - } - - void TestFbxMesh::CreateMesh(std::vector& points, std::vector >& polygonVertexIndices) - { - m_vertexControlPoints.clear(); - m_materialIndices->Clear(); - m_polygonInfo.clear(); - - // Create fbx control point (position) data, and associated material index data - m_vertexCount = aznumeric_caster(points.size()); - m_vertexControlPoints.reserve(points.size()); - for (unsigned int i = 0; i < points.size(); ++i) - { - m_vertexControlPoints.push_back(Vector3(points[i].GetX(), points[i].GetY(), points[i].GetZ())); - m_materialIndices->Add(i); - } - - // Create fbx face data - m_expectedVertexCount = 0; - for (const std::vector& onePolygonIndices : polygonVertexIndices) - { - for (const int& index : onePolygonIndices) - { - m_expectedVertexCount++; - } - } - if (m_polygonVertexIndices) - { - delete m_polygonVertexIndices; - } - m_polygonVertexIndices = new int[m_expectedVertexCount]; - size_t i = 0; - for (const std::vector& onePolygonIndices : polygonVertexIndices) - { - m_polygonInfo.insert(std::make_pair(aznumeric_caster(m_polygonInfo.size()), - TestFbxPolygon(i, aznumeric_caster(onePolygonIndices.size())))); - for (const int& index : onePolygonIndices) - { - m_polygonVertexIndices[i] = index; - i++; - } - } - } - - void TestFbxMesh::SetSkin(const AZStd::shared_ptr& skin) - { - m_skin = skin; - } - - void TestFbxMesh::CreateExpectMeshInfo(std::vector >& expectedFaceVertexIndices) - { - m_expectedFaceVertexIndices = expectedFaceVertexIndices; - } - - size_t TestFbxMesh::GetExpectedVetexCount() const - { - return m_expectedVertexCount; - } - - size_t TestFbxMesh::GetExpectedFaceCount() const - { - return m_expectedFaceVertexIndices.size(); - } - - AZ::Vector3 TestFbxMesh::GetExpectedFaceVertexPosition(unsigned int faceIndex, unsigned int vertexIndex) const - { - return m_vertexControlPoints[m_expectedFaceVertexIndices[faceIndex][vertexIndex]]; - } - } -} diff --git a/Code/Tools/SceneAPI/SceneBuilder/Tests/TestFbxMesh.h b/Code/Tools/SceneAPI/SceneBuilder/Tests/TestFbxMesh.h deleted file mode 100644 index 68f2e1f19b..0000000000 --- a/Code/Tools/SceneAPI/SceneBuilder/Tests/TestFbxMesh.h +++ /dev/null @@ -1,86 +0,0 @@ -#pragma once - -/* - * 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 -#include -#include -#include -#include - -namespace AZ -{ - namespace FbxSDKWrapper - { - struct TestFbxPolygon - { - size_t m_startVertexIndex; - size_t m_vertexCount; - - TestFbxPolygon(size_t startVertexIndex, size_t vertexCount) - : m_startVertexIndex(startVertexIndex) - , m_vertexCount(vertexCount) - { - } - }; - - // TestFbxMesh - // FbxMesh Test Data creation - class TestFbxMesh - : public FbxMeshWrapper - { - public: - TestFbxMesh(); - ~TestFbxMesh() override = default; - - int GetDeformerCount() const override; - AZStd::shared_ptr GetSkin(int index) const override; - bool GetMaterialIndices(FbxLayerElementArrayTemplate** lockableArray) const override; - - int GetControlPointsCount() const; - AZStd::vector GetControlPoints() const override; - - int GetPolygonCount() const override; - int GetPolygonSize(int polygonIndex) const override; - int* GetPolygonVertices() const override; - int GetPolygonVertexIndex(int polygonIndex) const; - - FbxUVWrapper GetElementUV(int index = 0) override; - int GetElementUVCount() const override; - FbxVertexColorWrapper GetElementVertexColor(int index = 0) override; - int GetElementVertexColorCount() const override; - - bool GetPolygonVertexNormal(int polyIndex, int vertexIndex, Vector3& normal) const override; - - // Create test data APIs - void CreateMesh(std::vector& points, std::vector >& polygonVertexIndices); - void CreateExpectMeshInfo(std::vector >& expectedFaceVertexIndices); - void SetSkin(const AZStd::shared_ptr& skin); - - size_t GetExpectedVetexCount() const; - size_t GetExpectedFaceCount() const; - AZ::Vector3 GetExpectedFaceVertexPosition(unsigned int faceIndex, unsigned int vertexIndex) const; - - protected: - AZStd::vector m_vertexControlPoints; // vertex positions - size_t m_vertexCount; - int* m_polygonVertexIndices; // store all polygons' vertex indices in sequence. Each index maps to a control point. - FbxLayerElementArrayTemplate* m_materialIndices; - std::unordered_map m_polygonInfo; - - FbxUVWrapper m_uvElements; - FbxVertexColorWrapper m_vertexColorElements; - AZStd::shared_ptr m_skin; - - // Expected converted data - unsigned int m_expectedVertexCount; - std::vector > m_expectedFaceVertexIndices; - }; - } -} diff --git a/Code/Tools/SceneAPI/SceneBuilder/Tests/TestFbxNode.cpp b/Code/Tools/SceneAPI/SceneBuilder/Tests/TestFbxNode.cpp deleted file mode 100644 index 0217044515..0000000000 --- a/Code/Tools/SceneAPI/SceneBuilder/Tests/TestFbxNode.cpp +++ /dev/null @@ -1,34 +0,0 @@ -/* - * 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 - -namespace AZ -{ - namespace FbxSDKWrapper - { - const std::shared_ptr TestFbxNode::GetMesh() const - { - return m_testFbxMesh; - } - - const char* TestFbxNode::GetName() const - { - return m_name.c_str(); - } - - void TestFbxNode::SetMesh(std::shared_ptr testFbxMesh) - { - m_testFbxMesh = testFbxMesh; - } - - void TestFbxNode::SetName(const char* name) - { - m_name = name; - } - } -} diff --git a/Code/Tools/SceneAPI/SceneBuilder/Tests/TestFbxNode.h b/Code/Tools/SceneAPI/SceneBuilder/Tests/TestFbxNode.h deleted file mode 100644 index ede0eb801c..0000000000 --- a/Code/Tools/SceneAPI/SceneBuilder/Tests/TestFbxNode.h +++ /dev/null @@ -1,37 +0,0 @@ -#pragma once - -/* - * 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 -#include - -namespace AZ -{ - namespace FbxSDKWrapper - { - // TestFbxNode - // FbxNode Test Data creation - class TestFbxNode - : public FbxNodeWrapper - { - public: - ~TestFbxNode() override = default; - - const std::shared_ptr GetMesh() const override; - const char* GetName() const override; - - void SetMesh(std::shared_ptr testFbxMesh); - void SetName(const char* name); - - protected: - std::shared_ptr m_testFbxMesh; - AZStd::string m_name; - }; - } -} diff --git a/Code/Tools/SceneAPI/SceneBuilder/Tests/TestFbxSkin.cpp b/Code/Tools/SceneAPI/SceneBuilder/Tests/TestFbxSkin.cpp deleted file mode 100644 index 9225f907b1..0000000000 --- a/Code/Tools/SceneAPI/SceneBuilder/Tests/TestFbxSkin.cpp +++ /dev/null @@ -1,91 +0,0 @@ -/* - * 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 -#include -#include -#include - -namespace AZ -{ - namespace FbxSDKWrapper - { - const char* TestFbxSkin::GetName() const - { - return m_name.c_str(); - } - - int TestFbxSkin::GetClusterCount() const - { - return aznumeric_caster(m_links.size()); - } - - int TestFbxSkin::GetClusterControlPointIndicesCount(int index) const - { - return aznumeric_caster(m_controlPointIndices[index].size()); - } - - int TestFbxSkin::GetClusterControlPointIndex(int clusterIndex, int pointIndex) const - { - return m_controlPointIndices[clusterIndex][pointIndex]; - } - - double TestFbxSkin::GetClusterControlPointWeight(int clusterIndex, int pointIndex) const - { - return m_weights[clusterIndex][pointIndex]; - } - - AZStd::shared_ptr TestFbxSkin::GetClusterLink(int index) const - { - return m_links[index]; - } - - void TestFbxSkin::SetName(const char* name) - { - m_name = name; - } - - void TestFbxSkin::CreateSkinWeightData(AZStd::vector& boneNames, AZStd::vector>& weights, AZStd::vector>& controlPointIndices) - { - m_links.resize(boneNames.size()); - for (size_t linkIndex = 0; linkIndex < boneNames.size(); ++linkIndex) - { - m_links[linkIndex] = AZStd::make_shared(); - m_links[linkIndex]->SetName(boneNames[linkIndex].c_str()); - } - m_weights = weights; - m_controlPointIndices = controlPointIndices; - } - - void TestFbxSkin::CreateExpectSkinWeightData(AZStd::vector>& boneIds, AZStd::vector>& weights) - { - m_expectedBoneIds = boneIds; - m_expectedWeights = weights; - } - - size_t TestFbxSkin::GetExpectedVertexCount() const - { - return m_expectedBoneIds.size(); - } - - size_t TestFbxSkin::GetExpectedLinkCount(size_t vertexIndex) const - { - return m_expectedBoneIds[vertexIndex].size(); - } - - int TestFbxSkin::GetExpectedSkinLinkBoneId(size_t vertexIndex, size_t linkIndex) const - { - return m_expectedBoneIds[vertexIndex][linkIndex]; - } - - float TestFbxSkin::GetExpectedSkinLinkWeight(size_t vertextIndex, size_t linkIndex) const - { - return m_expectedWeights[vertextIndex][linkIndex]; - } - } -} diff --git a/Code/Tools/SceneAPI/SceneBuilder/Tests/TestFbxSkin.h b/Code/Tools/SceneAPI/SceneBuilder/Tests/TestFbxSkin.h deleted file mode 100644 index b90353e6a7..0000000000 --- a/Code/Tools/SceneAPI/SceneBuilder/Tests/TestFbxSkin.h +++ /dev/null @@ -1,50 +0,0 @@ -#pragma once - -/* - * 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 -#include - -namespace AZ -{ - namespace FbxSDKWrapper - { - class TestFbxSkin - : public FbxSkinWrapper - { - public: - ~TestFbxSkin() override = default; - - const char* GetName() const override; - int GetClusterCount() const override; - int GetClusterControlPointIndicesCount(int index) const override; - int GetClusterControlPointIndex(int clusterIndex, int pointIndex) const override; - double GetClusterControlPointWeight(int clusterIndex, int pointIndex) const override; - AZStd::shared_ptr GetClusterLink(int index) const override; - - void SetName(const char* name); - void CreateSkinWeightData(AZStd::vector& boneNames, AZStd::vector>& weights, AZStd::vector>& controlPointIndices); - void CreateExpectSkinWeightData(AZStd::vector>& boneIds, AZStd::vector>& weights); - - size_t GetExpectedVertexCount() const; - size_t GetExpectedLinkCount(size_t vertexIndex) const; - int GetExpectedSkinLinkBoneId(size_t vertexIndex, size_t linkIndex) const; - float GetExpectedSkinLinkWeight(size_t vertexIndex, size_t linkIndex) const; - - protected: - AZStd::string m_name; - AZStd::vector> m_links; - AZStd::vector> m_weights; - AZStd::vector> m_controlPointIndices; - - AZStd::vector> m_expectedBoneIds; - AZStd::vector> m_expectedWeights; - }; - } -} From 7d2e53ca7a7d81b8fb1b059cc2ae57721e54bc36 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Tue, 14 Dec 2021 13:27:17 -0800 Subject: [PATCH 138/284] Remove unused files from SceneCore Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../GraphData/MockIMeshVertexColorData.h | 38 --------------- .../GraphData/MockIMeshVertexUVData.h | 39 --------------- .../DataTypes/GraphData/MockITransform.h | 36 -------------- .../Mocks/DataTypes/Groups/MockIMeshGroup.h | 48 ------------------- .../DataTypes/Rules/MockIBlendShapeRule.h | 30 ------------ .../DataTypes/Rules/MockIMeshAdvancedRule.h | 48 ------------------- .../SceneCore/scenecore_testing_files.cmake | 1 - 7 files changed, 240 deletions(-) delete mode 100644 Code/Tools/SceneAPI/SceneCore/Mocks/DataTypes/GraphData/MockIMeshVertexColorData.h delete mode 100644 Code/Tools/SceneAPI/SceneCore/Mocks/DataTypes/GraphData/MockIMeshVertexUVData.h delete mode 100644 Code/Tools/SceneAPI/SceneCore/Mocks/DataTypes/GraphData/MockITransform.h delete mode 100644 Code/Tools/SceneAPI/SceneCore/Mocks/DataTypes/Groups/MockIMeshGroup.h delete mode 100644 Code/Tools/SceneAPI/SceneCore/Mocks/DataTypes/Rules/MockIBlendShapeRule.h delete mode 100644 Code/Tools/SceneAPI/SceneCore/Mocks/DataTypes/Rules/MockIMeshAdvancedRule.h diff --git a/Code/Tools/SceneAPI/SceneCore/Mocks/DataTypes/GraphData/MockIMeshVertexColorData.h b/Code/Tools/SceneAPI/SceneCore/Mocks/DataTypes/GraphData/MockIMeshVertexColorData.h deleted file mode 100644 index 122152ae41..0000000000 --- a/Code/Tools/SceneAPI/SceneCore/Mocks/DataTypes/GraphData/MockIMeshVertexColorData.h +++ /dev/null @@ -1,38 +0,0 @@ -#pragma once - -/* - * 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 -#include - -namespace AZ -{ - namespace SceneAPI - { - namespace DataTypes - { - class MockIMeshVertexColorData - : public IMeshVertexColorData - { - public: - AZ_RTTI(MockIMeshVertexColorData, "{15AD4D4A-BFCC-41C3-B9BB-F7EFBA0AE0CC}", IMeshVertexColorData) - - virtual ~MockIMeshVertexColorData() = default; - - MOCK_CONST_METHOD0(GetCustomName, - const AZ::Name& ()); - - MOCK_CONST_METHOD0(GetCount, - size_t()); - MOCK_CONST_METHOD1(GetColor, - const Color&(size_t index)); - }; - } // namespace DataTypes - } //namespace SceneAPI -} // namespace AZ diff --git a/Code/Tools/SceneAPI/SceneCore/Mocks/DataTypes/GraphData/MockIMeshVertexUVData.h b/Code/Tools/SceneAPI/SceneCore/Mocks/DataTypes/GraphData/MockIMeshVertexUVData.h deleted file mode 100644 index 28b2039fa5..0000000000 --- a/Code/Tools/SceneAPI/SceneCore/Mocks/DataTypes/GraphData/MockIMeshVertexUVData.h +++ /dev/null @@ -1,39 +0,0 @@ -#pragma once - -/* - * 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 -#include -#include - -namespace AZ -{ - namespace SceneAPI - { - namespace DataTypes - { - class MockIMeshVertexUVData - : public IMeshVertexUVData - { - public: - AZ_RTTI(MockIMeshVertexUVData, "{34528E85-2EE0-4999-B838-113BEDB1A258}", IMeshVertexUVData); - - ~MockIMeshVertexUVData() override = default; - - MOCK_CONST_METHOD0(GetCustomName, - const AZ::Name& ()); - - MOCK_CONST_METHOD0(GetCount, - size_t()); - MOCK_CONST_METHOD1(GetUV, - const AZ::Vector2&(size_t index)); - }; - } // DataTypes - } // SceneAPI -} // AZ diff --git a/Code/Tools/SceneAPI/SceneCore/Mocks/DataTypes/GraphData/MockITransform.h b/Code/Tools/SceneAPI/SceneCore/Mocks/DataTypes/GraphData/MockITransform.h deleted file mode 100644 index ce396e4d63..0000000000 --- a/Code/Tools/SceneAPI/SceneCore/Mocks/DataTypes/GraphData/MockITransform.h +++ /dev/null @@ -1,36 +0,0 @@ -#pragma once - -/* - * 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 -#include - -namespace AZ -{ - class Transform; - namespace SceneAPI - { - namespace DataTypes - { - class MockITransform - : public ITransform - { - public: - AZ_RTTI(MockITransform, "{1D4A832F-823C-4A80-97E1-A95D1B2BF18F}", ITransform); - - virtual ~MockITransform() override = default; - - MOCK_METHOD0(GetMatrix, - AZ::SceneAPI::DataTypes::MatrixType&()); - MOCK_CONST_METHOD0(GetMatrix, - const AZ::SceneAPI::DataTypes::MatrixType&()); - }; - } // DataTypes - } // SceneAPI -} // AZ diff --git a/Code/Tools/SceneAPI/SceneCore/Mocks/DataTypes/Groups/MockIMeshGroup.h b/Code/Tools/SceneAPI/SceneCore/Mocks/DataTypes/Groups/MockIMeshGroup.h deleted file mode 100644 index e4bb07ace1..0000000000 --- a/Code/Tools/SceneAPI/SceneCore/Mocks/DataTypes/Groups/MockIMeshGroup.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * 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 - -#include -#include -#include - -namespace AZ -{ - namespace SceneAPI - { - namespace DataTypes - { - class MockIMeshGroup - : public IMeshGroup - { - public: - AZ_RTTI(MockIMeshGroup, "{AB119B84-E6D8-4CF3-9456-E44B23EDCDFE}", IMeshGroup); - - // IMeshGroup - MOCK_METHOD0(GetSceneNodeSelectionList, - ISceneNodeSelectionList&()); - MOCK_CONST_METHOD0(GetSceneNodeSelectionList, - const ISceneNodeSelectionList&()); - MOCK_CONST_METHOD0(GetId, - const Uuid&()); - MOCK_METHOD1(SetName, - void(AZStd::string&&)); - MOCK_METHOD1(OverrideId, - void(const Uuid&)); - - // IGroup - MOCK_CONST_METHOD0(GetName, - const AZStd::string&()); - - MOCK_METHOD0(GetRuleContainer, Containers::RuleContainer&()); - MOCK_CONST_METHOD0(GetRuleContainerConst, const Containers::RuleContainer&()); - }; - } // namespace DataTypes - } // namespace SceneAPI -} // namespace AZ diff --git a/Code/Tools/SceneAPI/SceneCore/Mocks/DataTypes/Rules/MockIBlendShapeRule.h b/Code/Tools/SceneAPI/SceneCore/Mocks/DataTypes/Rules/MockIBlendShapeRule.h deleted file mode 100644 index e32e858041..0000000000 --- a/Code/Tools/SceneAPI/SceneCore/Mocks/DataTypes/Rules/MockIBlendShapeRule.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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 - -#include - -#include - -namespace AZ::SceneAPI::DataTypes { class IMockSceneNodeSelectionList; } - -namespace AZ::SceneAPI::DataTypes -{ - class MockIBlendShapeRule - : public IBlendShapeRule - { - public: - ISceneNodeSelectionList& GetSceneNodeSelectionList() override - { - return const_cast(static_cast(this)->GetSceneNodeSelectionList()); - } - - MOCK_CONST_METHOD0(GetSceneNodeSelectionList, const ISceneNodeSelectionList&()); - }; -} // namespace AZ::SceneAPI::DataTypes diff --git a/Code/Tools/SceneAPI/SceneCore/Mocks/DataTypes/Rules/MockIMeshAdvancedRule.h b/Code/Tools/SceneAPI/SceneCore/Mocks/DataTypes/Rules/MockIMeshAdvancedRule.h deleted file mode 100644 index d729e6f59b..0000000000 --- a/Code/Tools/SceneAPI/SceneCore/Mocks/DataTypes/Rules/MockIMeshAdvancedRule.h +++ /dev/null @@ -1,48 +0,0 @@ -#pragma once - -/* - * 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 -#include -#include - -namespace AZ -{ - namespace SceneAPI - { - namespace DataTypes - { - class MockIMeshAdvancedRule - : public IMeshAdvancedRule - { - public: - AZ_RTTI(MockIMeshAdvancedRule, "{6F67873D-778C-4D11-8818-B1906E60B67D}", IMeshAdvancedRule); - - virtual ~MockIMeshAdvancedRule() override = default; - - MOCK_CONST_METHOD0(Use32bitVertices, - bool()); - MOCK_CONST_METHOD0(MergeMeshes, - bool()); - MOCK_CONST_METHOD0(GetVertexColorStreamName, - const AZStd::string&()); - MOCK_CONST_METHOD0(IsVertexColorStreamDisabled, - bool()); - MOCK_CONST_METHOD1(GetUVStreamName, - AZStd::string&(size_t index)); - MOCK_CONST_METHOD1(IsUVStreamDisabled, - bool(size_t index)); - MOCK_CONST_METHOD0(GetUVStreamCount, - size_t()); - MOCK_CONST_METHOD0(UseCustomNormals, - bool()); - }; - } // DataTypes - } // SceneAPI -} // AZ diff --git a/Code/Tools/SceneAPI/SceneCore/scenecore_testing_files.cmake b/Code/Tools/SceneAPI/SceneCore/scenecore_testing_files.cmake index 1346af63f6..91b543e5e9 100644 --- a/Code/Tools/SceneAPI/SceneCore/scenecore_testing_files.cmake +++ b/Code/Tools/SceneAPI/SceneCore/scenecore_testing_files.cmake @@ -11,7 +11,6 @@ set(FILES Mocks/DataTypes/GraphData/MockIMeshData.h Mocks/DataTypes/MockIGraphObject.h Mocks/DataTypes/Groups/MockIGroup.h - Mocks/DataTypes/Groups/MockIMeshGroup.h Mocks/DataTypes/ManifestBase/MockISceneNodeSelectionList.h Mocks/Events/MockAssetImportRequest.h Tests/TestsMain.cpp From fdd75bbbf50f95e36094795b0a2d7b55d7be247d Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Tue, 14 Dec 2021 15:53:44 -0800 Subject: [PATCH 139/284] Removes SceneUIStandaloneAllocator from SceneUI Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../SceneUI/SceneUIStandaloneAllocator.cpp | 36 ------------------- .../SceneUI/SceneUIStandaloneAllocator.h | 27 -------------- .../SceneAPI/SceneUI/SceneUI_files.cmake | 2 -- 3 files changed, 65 deletions(-) delete mode 100644 Code/Tools/SceneAPI/SceneUI/SceneUIStandaloneAllocator.cpp delete mode 100644 Code/Tools/SceneAPI/SceneUI/SceneUIStandaloneAllocator.h diff --git a/Code/Tools/SceneAPI/SceneUI/SceneUIStandaloneAllocator.cpp b/Code/Tools/SceneAPI/SceneUI/SceneUIStandaloneAllocator.cpp deleted file mode 100644 index 615d4cc47c..0000000000 --- a/Code/Tools/SceneAPI/SceneUI/SceneUIStandaloneAllocator.cpp +++ /dev/null @@ -1,36 +0,0 @@ -/* - * 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 - -#include - -namespace AZ -{ - namespace SceneAPI - { - bool SceneUIStandaloneAllocator::m_allocatorInitialized = false; - - void SceneUIStandaloneAllocator::Initialize() - { - if (!AZ::AllocatorInstance().IsReady()) - { - AZ::AllocatorInstance().Create(); - m_allocatorInitialized = true; - } - } - - void SceneUIStandaloneAllocator::TearDown() - { - if (m_allocatorInitialized) - { - AZ::AllocatorInstance().Destroy(); - } - } - } -} diff --git a/Code/Tools/SceneAPI/SceneUI/SceneUIStandaloneAllocator.h b/Code/Tools/SceneAPI/SceneUI/SceneUIStandaloneAllocator.h deleted file mode 100644 index 919b3de234..0000000000 --- a/Code/Tools/SceneAPI/SceneUI/SceneUIStandaloneAllocator.h +++ /dev/null @@ -1,27 +0,0 @@ -#pragma once - -/* - * 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 - -namespace AZ -{ - namespace SceneAPI - { - class SceneUIStandaloneAllocator - { - public: - SCENE_UI_API static void Initialize(); - SCENE_UI_API static void TearDown(); - - private: - static bool m_allocatorInitialized; - }; - } // namespace SceneAPI -} // namespace AZ diff --git a/Code/Tools/SceneAPI/SceneUI/SceneUI_files.cmake b/Code/Tools/SceneAPI/SceneUI/SceneUI_files.cmake index 15adb433fe..992098ae4f 100644 --- a/Code/Tools/SceneAPI/SceneUI/SceneUI_files.cmake +++ b/Code/Tools/SceneAPI/SceneUI/SceneUI_files.cmake @@ -13,8 +13,6 @@ set(FILES ManifestMetaInfoHandler.cpp GraphMetaInfoHandler.h GraphMetaInfoHandler.cpp - SceneUIStandaloneAllocator.h - SceneUIStandaloneAllocator.cpp CommonWidgets/OverlayWidget.h CommonWidgets/OverlayWidgetLayer.h CommonWidgets/JobWatcher.h From 65516e5bd1e7a6ea13a3dd65103a75c6973bb7d0 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Tue, 14 Dec 2021 15:58:17 -0800 Subject: [PATCH 140/284] Removes OverlayWidgetLayer from SceneUI Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../CommonWidgets/OverlayWidgetLayer.h | 29 ----- .../CommonWidgets/OverlayWidgetLayer.ui | 106 ------------------ .../SceneAPI/SceneUI/SceneUI_files.cmake | 1 - 3 files changed, 136 deletions(-) delete mode 100644 Code/Tools/SceneAPI/SceneUI/CommonWidgets/OverlayWidgetLayer.h delete mode 100644 Code/Tools/SceneAPI/SceneUI/CommonWidgets/OverlayWidgetLayer.ui diff --git a/Code/Tools/SceneAPI/SceneUI/CommonWidgets/OverlayWidgetLayer.h b/Code/Tools/SceneAPI/SceneUI/CommonWidgets/OverlayWidgetLayer.h deleted file mode 100644 index 374f91a8ed..0000000000 --- a/Code/Tools/SceneAPI/SceneUI/CommonWidgets/OverlayWidgetLayer.h +++ /dev/null @@ -1,29 +0,0 @@ -#pragma once - -/* - * 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 - -namespace AZ -{ - namespace SceneAPI - { - namespace UI - { - // left in for backwards compatibility with original SceneAPI code - class OverlayWidgetLayer : public AzQtComponents::OverlayWidgetLayer - { - public: - AZ_CLASS_ALLOCATOR(OverlayWidgetLayer, SystemAllocator, 0) - - using AzQtComponents::OverlayWidgetLayer::OverlayWidgetLayer; - }; - } // namespace UI - } // namespace SceneAPI -} // namespace AZ diff --git a/Code/Tools/SceneAPI/SceneUI/CommonWidgets/OverlayWidgetLayer.ui b/Code/Tools/SceneAPI/SceneUI/CommonWidgets/OverlayWidgetLayer.ui deleted file mode 100644 index 5084f436e3..0000000000 --- a/Code/Tools/SceneAPI/SceneUI/CommonWidgets/OverlayWidgetLayer.ui +++ /dev/null @@ -1,106 +0,0 @@ - - - AZ::SceneAPI::UI::OverlayWidgetLayer - - - - 0 - 0 - 64 - 75 - - - - - 0 - 0 - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - QFrame::StyledPanel - - - QFrame::Raised - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - - - - 0 - 30 - - - - QFrame::StyledPanel - - - QFrame::Raised - - - - QLayout::SetDefaultConstraint - - - 2 - - - 2 - - - 2 - - - 2 - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - diff --git a/Code/Tools/SceneAPI/SceneUI/SceneUI_files.cmake b/Code/Tools/SceneAPI/SceneUI/SceneUI_files.cmake index 992098ae4f..724f4f0673 100644 --- a/Code/Tools/SceneAPI/SceneUI/SceneUI_files.cmake +++ b/Code/Tools/SceneAPI/SceneUI/SceneUI_files.cmake @@ -14,7 +14,6 @@ set(FILES GraphMetaInfoHandler.h GraphMetaInfoHandler.cpp CommonWidgets/OverlayWidget.h - CommonWidgets/OverlayWidgetLayer.h CommonWidgets/JobWatcher.h CommonWidgets/JobWatcher.cpp CommonWidgets/ProcessingOverlayWidget.h From d62438188572c86eb40a8e6d2284f7b4bcc92e73 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 15 Dec 2021 11:41:34 -0800 Subject: [PATCH 141/284] Removes resource/targetver files from LuaIDE Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Tools/LuaIDE/Source/Editor/LuaEditor.cpp | 5 ---- Code/Tools/LuaIDE/Source/Editor/LuaEditor.h | 9 ------ Code/Tools/LuaIDE/Source/Editor/Resource.h | 29 ------------------- Code/Tools/LuaIDE/Source/Editor/targetver.h | 16 ---------- Code/Tools/LuaIDE/lua_ide_files.cmake | 4 --- Code/Tools/LuaIDE/targetver.h | 16 ---------- 6 files changed, 79 deletions(-) delete mode 100644 Code/Tools/LuaIDE/Source/Editor/LuaEditor.h delete mode 100644 Code/Tools/LuaIDE/Source/Editor/Resource.h delete mode 100644 Code/Tools/LuaIDE/Source/Editor/targetver.h delete mode 100644 Code/Tools/LuaIDE/targetver.h diff --git a/Code/Tools/LuaIDE/Source/Editor/LuaEditor.cpp b/Code/Tools/LuaIDE/Source/Editor/LuaEditor.cpp index f6d905515b..19d2069b17 100644 --- a/Code/Tools/LuaIDE/Source/Editor/LuaEditor.cpp +++ b/Code/Tools/LuaIDE/Source/Editor/LuaEditor.cpp @@ -6,13 +6,8 @@ * */ -#include "LuaEditor.h" #include -#if defined(AZ_COMPILER_MSVC) -#include "resource.h" -#endif - #include #if defined(EXTERNAL_CRASH_REPORTING) diff --git a/Code/Tools/LuaIDE/Source/Editor/LuaEditor.h b/Code/Tools/LuaIDE/Source/Editor/LuaEditor.h deleted file mode 100644 index d2963c0bf0..0000000000 --- a/Code/Tools/LuaIDE/Source/Editor/LuaEditor.h +++ /dev/null @@ -1,9 +0,0 @@ -/* - * 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 diff --git a/Code/Tools/LuaIDE/Source/Editor/Resource.h b/Code/Tools/LuaIDE/Source/Editor/Resource.h deleted file mode 100644 index 96dfe0315c..0000000000 --- a/Code/Tools/LuaIDE/Source/Editor/Resource.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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 - * - */ - -//{{NO_DEPENDENCIES}} -// Microsoft Visual C++ generated include file. -// Used by Editor.rc -// -#define IDC_MYICON 2 -#define IDD_EDITOR_DIALOG 102 -#define IDR_MAINFRAME 128 -#define IDI_ICON1 129 -#define IDC_STATIC -1 - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NO_MFC 1 -#define _APS_NEXT_RESOURCE_VALUE 131 -#define _APS_NEXT_COMMAND_VALUE 32771 -#define _APS_NEXT_CONTROL_VALUE 1000 -#define _APS_NEXT_SYMED_VALUE 110 -#endif -#endif diff --git a/Code/Tools/LuaIDE/Source/Editor/targetver.h b/Code/Tools/LuaIDE/Source/Editor/targetver.h deleted file mode 100644 index 13641a9302..0000000000 --- a/Code/Tools/LuaIDE/Source/Editor/targetver.h +++ /dev/null @@ -1,16 +0,0 @@ -/* - * 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 - -// Including SDKDDKVer.h defines the highest available Windows platform. - -// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and -// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h. - -#include diff --git a/Code/Tools/LuaIDE/lua_ide_files.cmake b/Code/Tools/LuaIDE/lua_ide_files.cmake index e5a7948d97..1506e45c88 100644 --- a/Code/Tools/LuaIDE/lua_ide_files.cmake +++ b/Code/Tools/LuaIDE/lua_ide_files.cmake @@ -7,11 +7,8 @@ # set(FILES - targetver.h Source/StandaloneToolsApplication.cpp Source/StandaloneToolsApplication.h - Source/Editor/Resource.h - Source/Editor/targetver.h Source/Telemetry/TelemetryBus.h Source/Telemetry/TelemetryComponent.cpp Source/Telemetry/TelemetryComponent.h @@ -21,7 +18,6 @@ set(FILES Source/LuaIDEApplication.cpp Source/AssetDatabaseLocationListener.h Source/AssetDatabaseLocationListener.cpp - Source/Editor/LuaEditor.h Source/Editor/LuaEditor.cpp Source/LUA/BasicScriptChecker.h Source/LUA/BreakpointPanel.cpp diff --git a/Code/Tools/LuaIDE/targetver.h b/Code/Tools/LuaIDE/targetver.h deleted file mode 100644 index 13641a9302..0000000000 --- a/Code/Tools/LuaIDE/targetver.h +++ /dev/null @@ -1,16 +0,0 @@ -/* - * 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 - -// Including SDKDDKVer.h defines the highest available Windows platform. - -// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and -// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h. - -#include From 92d77c2b4a700b4695f37d7700da167368b3be4d Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 15 Dec 2021 11:53:26 -0800 Subject: [PATCH 142/284] Removes unused files from LuaIDE, Telemetry is not being used, the only ebus called is Initialized, but no "LogEvents are being called. Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../LuaIDE/Source/LUA/BasicScriptChecker.h | 27 ------- .../LuaIDE/Source/LUA/LUADebuggerMessages.h | 35 -------- .../LUA/LUATargetContextTrackerMessages.cpp | 15 ---- .../LuaIDE/Source/LUA/ScriptCheckerAPI.h | 40 ---------- .../Source/StandaloneToolsApplication.cpp | 13 +-- .../LuaIDE/Source/Telemetry/TelemetryBus.h | 31 ------- .../Source/Telemetry/TelemetryComponent.cpp | 48 ----------- .../Source/Telemetry/TelemetryComponent.h | 41 ---------- .../Source/Telemetry/TelemetryEvent.cpp | 80 ------------------- .../LuaIDE/Source/Telemetry/TelemetryEvent.h | 45 ----------- Code/Tools/LuaIDE/lua_ide_files.cmake | 9 --- 11 files changed, 1 insertion(+), 383 deletions(-) delete mode 100644 Code/Tools/LuaIDE/Source/LUA/BasicScriptChecker.h delete mode 100644 Code/Tools/LuaIDE/Source/LUA/LUADebuggerMessages.h delete mode 100644 Code/Tools/LuaIDE/Source/LUA/LUATargetContextTrackerMessages.cpp delete mode 100644 Code/Tools/LuaIDE/Source/LUA/ScriptCheckerAPI.h delete mode 100644 Code/Tools/LuaIDE/Source/Telemetry/TelemetryBus.h delete mode 100644 Code/Tools/LuaIDE/Source/Telemetry/TelemetryComponent.cpp delete mode 100644 Code/Tools/LuaIDE/Source/Telemetry/TelemetryComponent.h delete mode 100644 Code/Tools/LuaIDE/Source/Telemetry/TelemetryEvent.cpp delete mode 100644 Code/Tools/LuaIDE/Source/Telemetry/TelemetryEvent.h diff --git a/Code/Tools/LuaIDE/Source/LUA/BasicScriptChecker.h b/Code/Tools/LuaIDE/Source/LUA/BasicScriptChecker.h deleted file mode 100644 index c24bba2aaa..0000000000 --- a/Code/Tools/LuaIDE/Source/LUA/BasicScriptChecker.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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 - * - */ - -#ifndef BASICSCRIPTCHECKER_H -#define BASICSCRIPTCHECKER_H - -#include -#include - -namespace LUAEditor -{ - class BasicScriptChecker - { - public: - AZ_CLASS_ALLOCATOR(BasicScriptChecker, AZ::SystemAllocator, 0); - - // eat a script and export any errors: - void ConsumeScript ( - }; - } - -#endif diff --git a/Code/Tools/LuaIDE/Source/LUA/LUADebuggerMessages.h b/Code/Tools/LuaIDE/Source/LUA/LUADebuggerMessages.h deleted file mode 100644 index d35be7574a..0000000000 --- a/Code/Tools/LuaIDE/Source/LUA/LUADebuggerMessages.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * 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 - * - */ - -#ifndef LUADEBUGGER_API_H -#define LUADEBUGGER_API_H - -#include -#include - -#pragma once - -namespace LUADebugger -{ - class Messages - : public AZ::EBusTraits - { - public: - ////////////////////////////////////////////////////////////////////////// - // Bus configuration - static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single; // we have one bus that we always broadcast to - static const AZ::EBusHandlerPolicy HandlerPolicy = AZ:: EBusHandlerPolicy::Multiple; // we can have multiple listeners. - ////////////////////////////////////////////////////////////////////////// - typedef AZ::EBus Bus; - typedef Bus::Handler Handler; - - virtual ~Messages() {} - }; -}; - -#endif//LUADEBUGGER_API_H diff --git a/Code/Tools/LuaIDE/Source/LUA/LUATargetContextTrackerMessages.cpp b/Code/Tools/LuaIDE/Source/LUA/LUATargetContextTrackerMessages.cpp deleted file mode 100644 index a54135993d..0000000000 --- a/Code/Tools/LuaIDE/Source/LUA/LUATargetContextTrackerMessages.cpp +++ /dev/null @@ -1,15 +0,0 @@ -/* - * 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 -#include "LUATargetContextTrackerMessages.h" - - -namespace LUAEditor -{ -} diff --git a/Code/Tools/LuaIDE/Source/LUA/ScriptCheckerAPI.h b/Code/Tools/LuaIDE/Source/LUA/ScriptCheckerAPI.h deleted file mode 100644 index 30f912d4d2..0000000000 --- a/Code/Tools/LuaIDE/Source/LUA/ScriptCheckerAPI.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * 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 - * - */ - -#ifndef SCRIPTCHECKER_H -#define SCRIPTCHECKER_H - -#include -#include - - -namespace LUAEditor -{ - class ScriptCheckerRequests - : public AZ::EBusTraits - { - public: - ////////////////////////////////////////////////////////////////////////// - // Bus configuration - static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single; - static const AZ::EBusHandlerPolicy HandlerPolicy = AZ:: EBusHandlerPolicy::Single; - ////////////////////////////////////////////////////////////////////////// - typedef AZ::EBus Bus; - typedef Bus::Handler Handler; - - virtual void StartScriptingCheck(const BreakpointMap& uniqueBreakpoints) = 0; - virtual void BreakpointHit(const Breakpoint& bp) = 0; - virtual void BreakpointResume() = 0; - - virtual ~ScriptCheckerRequests() {} - }; -} - -#pragma once - -#endif diff --git a/Code/Tools/LuaIDE/Source/StandaloneToolsApplication.cpp b/Code/Tools/LuaIDE/Source/StandaloneToolsApplication.cpp index 6f7f2e8705..f9dac47dc5 100644 --- a/Code/Tools/LuaIDE/Source/StandaloneToolsApplication.cpp +++ b/Code/Tools/LuaIDE/Source/StandaloneToolsApplication.cpp @@ -8,9 +8,6 @@ #include "StandaloneToolsApplication.h" -#include -#include - #include #include #include @@ -38,7 +35,6 @@ namespace StandaloneTools { LegacyFramework::Application::RegisterCoreComponents(); - RegisterComponentDescriptor(Telemetry::TelemetryComponent::CreateDescriptor()); RegisterComponentDescriptor(LegacyFramework::IPCComponent::CreateDescriptor()); RegisterComponentDescriptor(AZ::UserSettingsComponent::CreateDescriptor()); @@ -62,7 +58,6 @@ namespace StandaloneTools EnsureComponentCreated(AZ::StreamerComponent::RTTI_Type()); EnsureComponentCreated(AZ::JobManagerComponent::RTTI_Type()); - EnsureComponentCreated(Telemetry::TelemetryComponent::RTTI_Type()); EnsureComponentCreated(AzFramework::TargetManagementComponent::RTTI_Type()); EnsureComponentCreated(LegacyFramework::IPCComponent::RTTI_Type()); @@ -90,14 +85,8 @@ namespace StandaloneTools void BaseApplication::OnApplicationEntityActivated() { - const int k_processIntervalInSecs = 2; - const bool doSDKInitShutdown = true; - EBUS_EVENT(Telemetry::TelemetryEventsBus, Initialize, "O3DE_IDE", k_processIntervalInSecs, doSDKInitShutdown); - - bool launched = LaunchDiscoveryService(); - + [[maybe_unused]] bool launched = LaunchDiscoveryService(); AZ_Warning("EditorApplication", launched, "Could not launch GridHub; Only replay is available."); - (void)launched; } void BaseApplication::SetSettingsRegistrySpecializations(AZ::SettingsRegistryInterface::Specializations& specializations) diff --git a/Code/Tools/LuaIDE/Source/Telemetry/TelemetryBus.h b/Code/Tools/LuaIDE/Source/Telemetry/TelemetryBus.h deleted file mode 100644 index 9c7e9aa10d..0000000000 --- a/Code/Tools/LuaIDE/Source/Telemetry/TelemetryBus.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * 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 -#ifndef TELEMETRY_TELEMETRYBUS_H -#define TELEMETRY_TELEMETRYBUS_H - -#include - -#include "Source/Telemetry/TelemetryEvent.h" - -namespace Telemetry -{ - class TelemetryComponent; - - class TelemetryEvents - : public AZ::EBusTraits - { - public: - virtual void Initialize(const char* applicationName, AZ::u32 processIntervalInSecs, bool doSDKInitShutdown) = 0; - virtual void LogEvent(const TelemetryEvent& event) = 0; - virtual void Shutdown() = 0; - }; - - typedef AZ::EBus TelemetryEventsBus; -} -#endif diff --git a/Code/Tools/LuaIDE/Source/Telemetry/TelemetryComponent.cpp b/Code/Tools/LuaIDE/Source/Telemetry/TelemetryComponent.cpp deleted file mode 100644 index 84519b8114..0000000000 --- a/Code/Tools/LuaIDE/Source/Telemetry/TelemetryComponent.cpp +++ /dev/null @@ -1,48 +0,0 @@ -/* - * 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 "TelemetryComponent.h" - -#include - -namespace Telemetry -{ - void TelemetryComponent::Reflect(AZ::ReflectContext* context) - { - AZ::SerializeContext* serialize = azrtti_cast(context); - - if (serialize) - { - serialize->Class() - ->Version(1) - ; - } - } - - void TelemetryComponent::Activate() - { - TelemetryEventsBus::Handler::BusConnect(); - } - - void TelemetryComponent::Deactivate() - { - Shutdown(); - TelemetryEventsBus::Handler::BusDisconnect(); - } - - void TelemetryComponent::Initialize([[maybe_unused]] const char* applicationName, [[maybe_unused]] AZ::u32 processInterval, [[maybe_unused]] bool doAPIInitShutdown) - { - } - - void TelemetryComponent::LogEvent([[maybe_unused]] const TelemetryEvent& telemetryEvent) - { - } - - void TelemetryComponent::Shutdown() - { - } -} diff --git a/Code/Tools/LuaIDE/Source/Telemetry/TelemetryComponent.h b/Code/Tools/LuaIDE/Source/Telemetry/TelemetryComponent.h deleted file mode 100644 index f924908ea2..0000000000 --- a/Code/Tools/LuaIDE/Source/Telemetry/TelemetryComponent.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * 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 - -#include -#include - -#include "TelemetryBus.h" - -namespace Telemetry -{ - class TelemetryComponent - : public AZ::Component - , public TelemetryEventsBus::Handler - { - public: - AZ_COMPONENT(TelemetryComponent, "{CE41EE3C-AF98-4B22-BA7C-2D425D1F468A}") - - TelemetryComponent() = default; - - ////////////////// - // AZ::Component - void Activate() override; - void Deactivate() override; - static void Reflect(AZ::ReflectContext* context); - ////////////////// - - ////////////////////////////////////////// - // Telemetry::TelemetryEventBus::Handler - void Initialize(const char* applicationName, AZ::u32 processIntervalInSeconds, bool doSDKInitShutdown) override; - void LogEvent(const TelemetryEvent& event) override; - void Shutdown() override; - ////////////////////////////////////////// - }; -} diff --git a/Code/Tools/LuaIDE/Source/Telemetry/TelemetryEvent.cpp b/Code/Tools/LuaIDE/Source/Telemetry/TelemetryEvent.cpp deleted file mode 100644 index 24dc381ad7..0000000000 --- a/Code/Tools/LuaIDE/Source/Telemetry/TelemetryEvent.cpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - * 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 "TelemetryEvent.h" - -#include "TelemetryBus.h" - -namespace Telemetry -{ - TelemetryEvent::TelemetryEvent(const char* eventName) - : m_eventName(eventName) - { - } - - void TelemetryEvent::SetAttribute(const AZStd::string& name, const AZStd::string& value) - { - m_attributes[name] = value; - } - - const AZStd::string& TelemetryEvent::GetAttribute(const AZStd::string& name) - { - static AZStd::string k_emptyString; - - AZStd::unordered_map< AZStd::string, AZStd::string >::iterator attributeIter = m_attributes.find(name); - - if (attributeIter != m_attributes.end()) - { - return attributeIter->second; - } - - return k_emptyString; - } - - void TelemetryEvent::SetMetric(const AZStd::string& name, double metric) - { - m_metrics[name] = metric; - } - - double TelemetryEvent::GetMetric(const AZStd::string& name) - { - AZStd::unordered_map< AZStd::string, double >::iterator metricIter = m_metrics.find(name); - - if (metricIter != m_metrics.end()) - { - return metricIter->second; - } - - return 0.0; - } - - void TelemetryEvent::Log() - { - EBUS_EVENT(TelemetryEventsBus, LogEvent, (*this)); - } - - void TelemetryEvent::ResetEvent() - { - m_metrics.clear(); - m_attributes.clear(); - } - - const char* TelemetryEvent::GetEventName() const - { - return m_eventName.c_str(); - } - - const TelemetryEvent::AttributesMap& TelemetryEvent::GetAttributes() const - { - return m_attributes; - } - - const TelemetryEvent::MetricsMap& TelemetryEvent::GetMetrics() const - { - return m_metrics; - } -} diff --git a/Code/Tools/LuaIDE/Source/Telemetry/TelemetryEvent.h b/Code/Tools/LuaIDE/Source/Telemetry/TelemetryEvent.h deleted file mode 100644 index f7ffed824b..0000000000 --- a/Code/Tools/LuaIDE/Source/Telemetry/TelemetryEvent.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * 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 - * - */ - -#ifndef TELEMETRY_TELEMETRYEVENT_H -#define TELEMETRY_TELEMETRYEVENT_H - -#include -#include - -namespace Telemetry -{ - class TelemetryEvent - { - public: - typedef AZStd::unordered_map< AZStd::string, AZStd::string > AttributesMap; - typedef AZStd::unordered_map< AZStd::string, double > MetricsMap; - - TelemetryEvent(const char* eventName); - - void SetAttribute(const AZStd::string& name, const AZStd::string& value); - const AZStd::string& GetAttribute(const AZStd::string& name); - - void SetMetric(const AZStd::string& name, double metric); - double GetMetric(const AZStd::string& name); - - void Log(); - void ResetEvent(); - - const char* GetEventName() const; - const AttributesMap& GetAttributes() const; - const MetricsMap& GetMetrics() const; - - private: - AZStd::string m_eventName; - AttributesMap m_attributes; - MetricsMap m_metrics; - }; -} - -#endif diff --git a/Code/Tools/LuaIDE/lua_ide_files.cmake b/Code/Tools/LuaIDE/lua_ide_files.cmake index 1506e45c88..26b40372d3 100644 --- a/Code/Tools/LuaIDE/lua_ide_files.cmake +++ b/Code/Tools/LuaIDE/lua_ide_files.cmake @@ -9,17 +9,11 @@ set(FILES Source/StandaloneToolsApplication.cpp Source/StandaloneToolsApplication.h - Source/Telemetry/TelemetryBus.h - Source/Telemetry/TelemetryComponent.cpp - Source/Telemetry/TelemetryComponent.h - Source/Telemetry/TelemetryEvent.cpp - Source/Telemetry/TelemetryEvent.h Source/LuaIDEApplication.h Source/LuaIDEApplication.cpp Source/AssetDatabaseLocationListener.h Source/AssetDatabaseLocationListener.cpp Source/Editor/LuaEditor.cpp - Source/LUA/BasicScriptChecker.h Source/LUA/BreakpointPanel.cpp Source/LUA/BreakpointPanel.hxx Source/LUA/ClassReferenceFilter.cpp @@ -33,7 +27,6 @@ set(FILES Source/LUA/LUAContextControlMessages.h Source/LUA/LUADebuggerComponent.cpp Source/LUA/LUADebuggerComponent.h - Source/LUA/LUADebuggerMessages.h Source/LUA/LUAEditorBlockState.h Source/LUA/LUAEditorBreakpointWidget.cpp Source/LUA/LUAEditorBreakpointWidget.hxx @@ -71,10 +64,8 @@ set(FILES Source/LUA/LUAEditorViewMessages.h Source/LUA/LUALocalsTrackerMessages.h Source/LUA/LUAStackTrackerMessages.h - Source/LUA/LUATargetContextTrackerMessages.cpp Source/LUA/LUATargetContextTrackerMessages.h Source/LUA/LUAWatchesDebuggerMessages.h - Source/LUA/ScriptCheckerAPI.h Source/LUA/StackPanel.cpp Source/LUA/StackPanel.hxx Source/LUA/TargetContextButton.cpp From e4122bff2277778a3961340a78c8ae4216a8d574 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 15 Dec 2021 13:52:32 -0800 Subject: [PATCH 143/284] Removes unused files from TestImpactFramework Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../TestImpactTestTargetMetaArtifactFactory.h | 21 -- .../TestImpactBuildTargetDescriptor.cpp | 18 -- .../Static/TestImpactBuildTargetDescriptor.h | 1 - .../Run/TestImpactInstrumentedTestRunner.cpp | 1 - .../Run/TestImpactTestRunSerializer.cpp | 180 ------------------ .../Run/TestImpactTestRunSerializer.h | 22 --- .../TestEngine/Run/TestImpactTestRunner.cpp | 1 - .../testimpactframework_runtime_files.cmake | 3 - 8 files changed, 247 deletions(-) delete mode 100644 Code/Tools/TestImpactFramework/Runtime/Code/Source/Artifact/Factory/TestImpactTestTargetMetaArtifactFactory.h delete mode 100644 Code/Tools/TestImpactFramework/Runtime/Code/Source/Artifact/Static/TestImpactBuildTargetDescriptor.cpp delete mode 100644 Code/Tools/TestImpactFramework/Runtime/Code/Source/TestEngine/Run/TestImpactTestRunSerializer.cpp delete mode 100644 Code/Tools/TestImpactFramework/Runtime/Code/Source/TestEngine/Run/TestImpactTestRunSerializer.h diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/Source/Artifact/Factory/TestImpactTestTargetMetaArtifactFactory.h b/Code/Tools/TestImpactFramework/Runtime/Code/Source/Artifact/Factory/TestImpactTestTargetMetaArtifactFactory.h deleted file mode 100644 index d9d844805e..0000000000 --- a/Code/Tools/TestImpactFramework/Runtime/Code/Source/Artifact/Factory/TestImpactTestTargetMetaArtifactFactory.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - * 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 - -#include - -#include - -namespace TestImpact -{ - //! Constructs a list of test target meta-data artifacts from the specified master test list data. - //! @param masterTestListData The raw master test list data in JSON format. - //! @return The constructed list of test target meta-data artifacts. - TestTargetMetas TestTargetMetaMapFactory(const AZStd::string& masterTestListData); -} // namespace TestImpact diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/Source/Artifact/Static/TestImpactBuildTargetDescriptor.cpp b/Code/Tools/TestImpactFramework/Runtime/Code/Source/Artifact/Static/TestImpactBuildTargetDescriptor.cpp deleted file mode 100644 index f0cf8fadae..0000000000 --- a/Code/Tools/TestImpactFramework/Runtime/Code/Source/Artifact/Static/TestImpactBuildTargetDescriptor.cpp +++ /dev/null @@ -1,18 +0,0 @@ -/* - * 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 - -namespace TestImpact -{ - BuildTargetDescriptor::BuildTargetDescriptor(BuildMetaData&& buildMetaData, TargetSources&& sources) - : m_buildMetaData(AZStd::move(buildMetaData)) - , m_sources(AZStd::move(sources)) - { - } -} // namespace TestImpact diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/Source/Artifact/Static/TestImpactBuildTargetDescriptor.h b/Code/Tools/TestImpactFramework/Runtime/Code/Source/Artifact/Static/TestImpactBuildTargetDescriptor.h index 20012835aa..c42c36d624 100644 --- a/Code/Tools/TestImpactFramework/Runtime/Code/Source/Artifact/Static/TestImpactBuildTargetDescriptor.h +++ b/Code/Tools/TestImpactFramework/Runtime/Code/Source/Artifact/Static/TestImpactBuildTargetDescriptor.h @@ -44,7 +44,6 @@ namespace TestImpact struct BuildTargetDescriptor { BuildTargetDescriptor() = default; - BuildTargetDescriptor(BuildMetaData&& buildMetaData, TargetSources&& sources); BuildMetaData m_buildMetaData; TargetSources m_sources; diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/Source/TestEngine/Run/TestImpactInstrumentedTestRunner.cpp b/Code/Tools/TestImpactFramework/Runtime/Code/Source/TestEngine/Run/TestImpactInstrumentedTestRunner.cpp index 51a3445a53..c4cb7fa779 100644 --- a/Code/Tools/TestImpactFramework/Runtime/Code/Source/TestEngine/Run/TestImpactInstrumentedTestRunner.cpp +++ b/Code/Tools/TestImpactFramework/Runtime/Code/Source/TestEngine/Run/TestImpactInstrumentedTestRunner.cpp @@ -12,7 +12,6 @@ #include #include #include -#include #include diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/Source/TestEngine/Run/TestImpactTestRunSerializer.cpp b/Code/Tools/TestImpactFramework/Runtime/Code/Source/TestEngine/Run/TestImpactTestRunSerializer.cpp deleted file mode 100644 index 5e385c9c12..0000000000 --- a/Code/Tools/TestImpactFramework/Runtime/Code/Source/TestEngine/Run/TestImpactTestRunSerializer.cpp +++ /dev/null @@ -1,180 +0,0 @@ -/* - * 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 -#include - -#include -#include -#include -#include - -namespace TestImpact -{ - namespace TestRunFields - { - // Keys for pertinent JSON node and attribute names - constexpr const char* Keys[] = - { - "suites", - "name", - "enabled", - "tests", - "duration", - "status", - "result" - }; - - enum - { - SuitesKey, - NameKey, - EnabledKey, - TestsKey, - DurationKey, - StatusKey, - ResultKey - }; - } // namespace - - AZStd::string SerializeTestRun(const TestRun& testRun) - { - rapidjson::StringBuffer stringBuffer; - rapidjson::PrettyWriter writer(stringBuffer); - - // Run - writer.StartObject(); - - // Run duration - writer.Key(TestRunFields::Keys[TestRunFields::DurationKey]); - writer.Uint(static_cast(testRun.GetDuration().count())); - - // Suites - writer.Key(TestRunFields::Keys[TestRunFields::SuitesKey]); - writer.StartArray(); - - for (const auto& suite : testRun.GetTestSuites()) - { - // Suite - writer.StartObject(); - - // Suite name - writer.Key(TestRunFields::Keys[TestRunFields::NameKey]); - writer.String(suite.m_name.c_str()); - - // Suite duration - writer.Key(TestRunFields::Keys[TestRunFields::DurationKey]); - writer.Uint(static_cast(suite.m_duration.count())); - - // Suite enabled - writer.Key(TestRunFields::Keys[TestRunFields::EnabledKey]); - writer.Bool(suite.m_enabled); - - // Suite tests - writer.Key(TestRunFields::Keys[TestRunFields::TestsKey]); - writer.StartArray(); - for (const auto& test : suite.m_tests) - { - // Test - writer.StartObject(); - - // Test name - writer.Key(TestRunFields::Keys[TestRunFields::NameKey]); - writer.String(test.m_name.c_str()); - - // Test enabled - writer.Key(TestRunFields::Keys[TestRunFields::EnabledKey]); - writer.Bool(test.m_enabled); - - // Test duration - writer.Key(TestRunFields::Keys[TestRunFields::DurationKey]); - writer.Uint(static_cast(test.m_duration.count())); - - // Test status - writer.Key(TestRunFields::Keys[TestRunFields::StatusKey]); - writer.Bool(static_cast(test.m_status)); - - // Test result - if (test.m_status == TestRunStatus::Run) - { - writer.Key(TestRunFields::Keys[TestRunFields::ResultKey]); - writer.Bool(static_cast(test.m_result.value())); - } - else - { - writer.Key(TestRunFields::Keys[TestRunFields::ResultKey]); - writer.Null(); - } - - // End test - writer.EndObject(); - } - - // End tests - writer.EndArray(); - - // End suite - writer.EndObject(); - } - - // End suites - writer.EndArray(); - - // End run - writer.EndObject(); - - return stringBuffer.GetString(); - } - - TestRun DeserializeTestRun(const AZStd::string& testEnumString) - { - AZStd::vector testSuites; - rapidjson::Document doc; - - if (doc.Parse<0>(testEnumString.c_str()).HasParseError()) - { - throw TestEngineException("Could not parse enumeration data"); - } - - // Run duration - const AZStd::chrono::milliseconds runDuration = AZStd::chrono::milliseconds{doc[TestRunFields::Keys[TestRunFields::DurationKey]].GetUint()}; - - // Suites - for (const auto& suite : doc[TestRunFields::Keys[TestRunFields::SuitesKey]].GetArray()) - { - // Suite name - const AZStd::string name = suite[TestRunFields::Keys[TestRunFields::NameKey]].GetString(); - - // Suite duration - const AZStd::chrono::milliseconds suiteDuration = AZStd::chrono::milliseconds{suite[TestRunFields::Keys[TestRunFields::DurationKey]].GetUint()}; - - // Suite enabled - testSuites.emplace_back(TestRunSuite{ - suite[TestRunFields::Keys[TestRunFields::NameKey]].GetString(), - suite[TestRunFields::Keys[TestRunFields::EnabledKey]].GetBool(), - {}, - AZStd::chrono::milliseconds{suite[TestRunFields::Keys[TestRunFields::DurationKey]].GetUint()}}); - - // Suite tests - for (const auto& test : suite[TestRunFields::Keys[TestRunFields::TestsKey]].GetArray()) - { - AZStd::optional result; - TestRunStatus status = static_cast(test[TestRunFields::Keys[TestRunFields::StatusKey]].GetBool()); - if (status == TestRunStatus::Run) - { - result = static_cast(test[TestRunFields::Keys[TestRunFields::ResultKey]].GetBool()); - } - const AZStd::chrono::milliseconds testDuration = AZStd::chrono::milliseconds{test[TestRunFields::Keys[TestRunFields::DurationKey]].GetUint()}; - testSuites.back().m_tests.emplace_back( - TestRunCase{test[TestRunFields::Keys[TestRunFields::NameKey]].GetString(), test[TestRunFields::Keys[TestRunFields::EnabledKey]].GetBool(), result, testDuration, status}); - } - } - - return TestRun(std::move(testSuites), runDuration); - } -} // namespace TestImpact diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/Source/TestEngine/Run/TestImpactTestRunSerializer.h b/Code/Tools/TestImpactFramework/Runtime/Code/Source/TestEngine/Run/TestImpactTestRunSerializer.h deleted file mode 100644 index cf39249bb6..0000000000 --- a/Code/Tools/TestImpactFramework/Runtime/Code/Source/TestEngine/Run/TestImpactTestRunSerializer.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * 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 - -#include - -#include - -namespace TestImpact -{ - //! Serializes the specified test run to JSON format. - AZStd::string SerializeTestRun(const TestRun& testRun); - - //! Deserializes a test run from the specified test run data in JSON format. - TestRun DeserializeTestRun(const AZStd::string& testRunString); -} // namespace TestImpact diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/Source/TestEngine/Run/TestImpactTestRunner.cpp b/Code/Tools/TestImpactFramework/Runtime/Code/Source/TestEngine/Run/TestImpactTestRunner.cpp index 28c38d05d4..c27a26ca4c 100644 --- a/Code/Tools/TestImpactFramework/Runtime/Code/Source/TestEngine/Run/TestImpactTestRunner.cpp +++ b/Code/Tools/TestImpactFramework/Runtime/Code/Source/TestEngine/Run/TestImpactTestRunner.cpp @@ -10,7 +10,6 @@ #include #include -#include #include #include diff --git a/Code/Tools/TestImpactFramework/Runtime/Code/testimpactframework_runtime_files.cmake b/Code/Tools/TestImpactFramework/Runtime/Code/testimpactframework_runtime_files.cmake index 75f253ad27..a55df20d34 100644 --- a/Code/Tools/TestImpactFramework/Runtime/Code/testimpactframework_runtime_files.cmake +++ b/Code/Tools/TestImpactFramework/Runtime/Code/testimpactframework_runtime_files.cmake @@ -35,7 +35,6 @@ set(FILES Source/Artifact/Factory/TestImpactTestTargetMetaMapFactory.h Source/Artifact/Factory/TestImpactModuleCoverageFactory.cpp Source/Artifact/Factory/TestImpactModuleCoverageFactory.h - Source/Artifact/Static/TestImpactBuildTargetDescriptor.cpp Source/Artifact/Static/TestImpactBuildTargetDescriptor.h Source/Artifact/Static/TestImpactTargetDescriptorCompiler.cpp Source/Artifact/Static/TestImpactTargetDescriptorCompiler.h @@ -90,8 +89,6 @@ set(FILES Source/TestEngine/Enumeration/TestImpactTestEnumerationSerializer.h Source/TestEngine/Enumeration/TestImpactTestEnumerator.cpp Source/TestEngine/Enumeration/TestImpactTestEnumerator.h - Source/TestEngine/Run/TestImpactTestRunSerializer.cpp - Source/TestEngine/Run/TestImpactTestRunSerializer.h Source/TestEngine/Run/TestImpactTestRunner.cpp Source/TestEngine/Run/TestImpactTestRunner.h Source/TestEngine/Run/TestImpactInstrumentedTestRunner.cpp From df0b97591a9bd904705297a06486dafe9c87d9e9 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Tue, 21 Dec 2021 15:38:27 -0800 Subject: [PATCH 144/284] removes unused files from AtomFont Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../AtomLyIntegration/AtomFont/FBitmap.h | 65 ------------------- .../AtomLyIntegration/AtomFont/resource.h | 21 ------ .../AtomFont/Code/atomfont_files.cmake | 2 - .../Code/Source/ImguiAtomSystemComponent.cpp | 1 - 4 files changed, 89 deletions(-) delete mode 100644 Gems/AtomLyIntegration/AtomFont/Code/Include/AtomLyIntegration/AtomFont/FBitmap.h delete mode 100644 Gems/AtomLyIntegration/AtomFont/Code/Include/AtomLyIntegration/AtomFont/resource.h diff --git a/Gems/AtomLyIntegration/AtomFont/Code/Include/AtomLyIntegration/AtomFont/FBitmap.h b/Gems/AtomLyIntegration/AtomFont/Code/Include/AtomLyIntegration/AtomFont/FBitmap.h deleted file mode 100644 index 2570fd2b17..0000000000 --- a/Gems/AtomLyIntegration/AtomFont/Code/Include/AtomLyIntegration/AtomFont/FBitmap.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * 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 FontBitmap - { - public: - FontBitmap(); - ~FontBitmap(); - - int Blur(int iterationCount); - int Scale(float scaleX, float scaleY); - - int BlitFrom(FontBitmap* source, int srcX, int srcY, int destX, int destY, int width, int height); - int BlitTo(FontBitmap* destination, int destX, int destY, int srcX, int srcY, int width, int height); - - int Create(int width, int height); - int Release(); - - int SaveBitmap(const AZStd::string& fileName); - int Get32Bpp(unsigned int** buffer) - { - (*buffer) = new unsigned int[m_width * m_height]; - - if (!(*buffer)) - { - return 0; - } - - int dataSize = m_width * m_height; - - for (int i = 0; i < dataSize; i++) - { - (*buffer)[i] = (m_data[i] << 24) | (m_data[i] << 16) | (m_data[i] << 8) | (m_data[i]); - } - - return 1; - } - - int GetWidth() { return m_width; } - int GetHeight() { return m_height; } - - void SetRenderData(void* renderData) { m_renderData = renderData; }; - void* GetRenderData() { return m_renderData; }; - - unsigned char* GetData() { return m_data; } - - public: - - int m_width; - int m_height; - - unsigned char* m_data; - void* m_renderData; - }; -} diff --git a/Gems/AtomLyIntegration/AtomFont/Code/Include/AtomLyIntegration/AtomFont/resource.h b/Gems/AtomLyIntegration/AtomFont/Code/Include/AtomLyIntegration/AtomFont/resource.h deleted file mode 100644 index eb3d76bc60..0000000000 --- a/Gems/AtomLyIntegration/AtomFont/Code/Include/AtomLyIntegration/AtomFont/resource.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - * 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 - * - */ - - -#define VS_VERSION_INFO 1 - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 101 -#define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 1001 -#define _APS_NEXT_SYMED_VALUE 101 -#endif -#endif diff --git a/Gems/AtomLyIntegration/AtomFont/Code/atomfont_files.cmake b/Gems/AtomLyIntegration/AtomFont/Code/atomfont_files.cmake index f12dc84f90..bf1f819d6b 100644 --- a/Gems/AtomLyIntegration/AtomFont/Code/atomfont_files.cmake +++ b/Gems/AtomLyIntegration/AtomFont/Code/atomfont_files.cmake @@ -20,7 +20,6 @@ set(FILES Source/AtomNullFont.cpp Source/Module.cpp Include/AtomLyIntegration/AtomFont/AtomFont.h - Include/AtomLyIntegration/AtomFont/FBitmap.h Include/AtomLyIntegration/AtomFont/FFont.h Include/AtomLyIntegration/AtomFont/FontRenderer.h Include/AtomLyIntegration/AtomFont/FontCommon.h @@ -28,5 +27,4 @@ set(FILES Include/AtomLyIntegration/AtomFont/GlyphBitmap.h Include/AtomLyIntegration/AtomFont/GlyphCache.h Include/AtomLyIntegration/AtomFont/AtomNullFont.h - Include/AtomLyIntegration/AtomFont/resource.h ) diff --git a/Gems/AtomLyIntegration/ImguiAtom/Code/Source/ImguiAtomSystemComponent.cpp b/Gems/AtomLyIntegration/ImguiAtom/Code/Source/ImguiAtomSystemComponent.cpp index 700d930482..2c2963c5af 100644 --- a/Gems/AtomLyIntegration/ImguiAtom/Code/Source/ImguiAtomSystemComponent.cpp +++ b/Gems/AtomLyIntegration/ImguiAtom/Code/Source/ImguiAtomSystemComponent.cpp @@ -10,7 +10,6 @@ #include #include -#include #include #include From bba337df5ea1577ef482901bd67350eff2d13d56 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 22 Dec 2021 15:00:27 -0800 Subject: [PATCH 145/284] Removes unused files from Gems/AudioSystem Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Code/Tests/AudioSystemTest.cpp | 1 - .../Mocks/IAudioSystemImplementationMock.h | 136 - .../Code/Tests/WaveTable48000Sine.h | 48015 ---------------- .../Code/audiosystem_tests_files.cmake | 1 - 4 files changed, 48153 deletions(-) delete mode 100644 Gems/AudioSystem/Code/Tests/Mocks/IAudioSystemImplementationMock.h delete mode 100644 Gems/AudioSystem/Code/Tests/WaveTable48000Sine.h diff --git a/Gems/AudioSystem/Code/Tests/AudioSystemTest.cpp b/Gems/AudioSystem/Code/Tests/AudioSystemTest.cpp index 1f03eec419..32179b2120 100644 --- a/Gems/AudioSystem/Code/Tests/AudioSystemTest.cpp +++ b/Gems/AudioSystem/Code/Tests/AudioSystemTest.cpp @@ -20,7 +20,6 @@ #include #include -#include #include #include diff --git a/Gems/AudioSystem/Code/Tests/Mocks/IAudioSystemImplementationMock.h b/Gems/AudioSystem/Code/Tests/Mocks/IAudioSystemImplementationMock.h deleted file mode 100644 index b6f68fc896..0000000000 --- a/Gems/AudioSystem/Code/Tests/Mocks/IAudioSystemImplementationMock.h +++ /dev/null @@ -1,136 +0,0 @@ -/* - * 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 - -#include -#include - - -namespace Audio -{ - struct AudioSystemImplementationMock - : public AudioSystemImplementation - { - public: - MOCK_METHOD1(Update, void(float)); - - MOCK_METHOD0(Initialize, EAudioRequestStatus()); - - MOCK_METHOD0(ShutDown, EAudioRequestStatus()); - - MOCK_METHOD0(Release, EAudioRequestStatus()); - - MOCK_METHOD0(OnAudioSystemRefresh, void()); - - MOCK_METHOD0(OnLoseFocus, EAudioRequestStatus()); - - MOCK_METHOD0(OnGetFocus, EAudioRequestStatus()); - - MOCK_METHOD0(MuteAll, EAudioRequestStatus()); - - MOCK_METHOD0(UnmuteAll, EAudioRequestStatus()); - - MOCK_METHOD0(StopAllSounds, EAudioRequestStatus()); - - MOCK_METHOD2(RegisterAudioObject, EAudioRequestStatus(IATLAudioObjectData*, const char*)); - - MOCK_METHOD1(RegisterAudioObject, EAudioRequestStatus(IATLAudioObjectData*)); - - MOCK_METHOD1(UnregisterAudioObject, EAudioRequestStatus(IATLAudioObjectData*)); - - MOCK_METHOD1(ResetAudioObject, EAudioRequestStatus(IATLAudioObjectData*)); - - MOCK_METHOD1(UpdateAudioObject, EAudioRequestStatus(IATLAudioObjectData*)); - - MOCK_METHOD2(PrepareTriggerSync, EAudioRequestStatus(IATLAudioObjectData*, const IATLTriggerImplData*)); - - MOCK_METHOD2(UnprepareTriggerSync, EAudioRequestStatus(IATLAudioObjectData*, const IATLTriggerImplData*)); - - MOCK_METHOD3(PrepareTriggerAsync, EAudioRequestStatus(IATLAudioObjectData*, const IATLTriggerImplData*, IATLEventData*)); - - MOCK_METHOD3(UnprepareTriggerAsync, EAudioRequestStatus(IATLAudioObjectData*, const IATLTriggerImplData*, IATLEventData*)); - - MOCK_METHOD4(ActivateTrigger, EAudioRequestStatus(IATLAudioObjectData*, const IATLTriggerImplData*, IATLEventData*, const SATLSourceData*)); - - MOCK_METHOD2(StopEvent, EAudioRequestStatus(IATLAudioObjectData*, const IATLEventData*)); - - MOCK_METHOD1(StopAllEvents, EAudioRequestStatus(IATLAudioObjectData*)); - - MOCK_METHOD2(SetPosition, EAudioRequestStatus(IATLAudioObjectData*, const SATLWorldPosition&)); - - MOCK_METHOD2(SetMultiplePositions, EAudioRequestStatus(IATLAudioObjectData*, const MultiPositionParams&)); - - MOCK_METHOD3(SetRtpc, EAudioRequestStatus(IATLAudioObjectData*, const IATLRtpcImplData*, float)); - - MOCK_METHOD2(SetSwitchState, EAudioRequestStatus(IATLAudioObjectData*, const IATLSwitchStateImplData*)); - - MOCK_METHOD3(SetObstructionOcclusion, EAudioRequestStatus(IATLAudioObjectData*, float, float)); - - MOCK_METHOD3(SetEnvironment, EAudioRequestStatus(IATLAudioObjectData*, const IATLEnvironmentImplData*, float)); - - MOCK_METHOD2(SetListenerPosition, EAudioRequestStatus(IATLListenerData*, const SATLWorldPosition&)); - - MOCK_METHOD1(RegisterInMemoryFile, EAudioRequestStatus(SATLAudioFileEntryInfo*)); - - MOCK_METHOD1(UnregisterInMemoryFile, EAudioRequestStatus(SATLAudioFileEntryInfo*)); - - MOCK_METHOD2(ParseAudioFileEntry, EAudioRequestStatus(const AZ::rapidxml::xml_node*, SATLAudioFileEntryInfo*)); - - MOCK_METHOD1(DeleteAudioFileEntryData, void(IATLAudioFileEntryData*)); - - MOCK_METHOD1(GetAudioFileLocation, const char* const(SATLAudioFileEntryInfo*)); - - MOCK_METHOD1(NewAudioTriggerImplData, IATLTriggerImplData*(const AZ::rapidxml::xml_node*)); - - MOCK_METHOD1(DeleteAudioTriggerImplData, void(IATLTriggerImplData*)); - - MOCK_METHOD1(NewAudioRtpcImplData, IATLRtpcImplData*(const AZ::rapidxml::xml_node*)); - - MOCK_METHOD1(DeleteAudioRtpcImplData, void(IATLRtpcImplData*)); - - MOCK_METHOD1(NewAudioSwitchStateImplData, IATLSwitchStateImplData*(const AZ::rapidxml::xml_node*)); - - MOCK_METHOD1(DeleteAudioSwitchStateImplData, void(IATLSwitchStateImplData*)); - - MOCK_METHOD1(NewAudioEnvironmentImplData, IATLEnvironmentImplData*(const AZ::rapidxml::xml_node*)); - - MOCK_METHOD1(DeleteAudioEnvironmentImplData, void(IATLEnvironmentImplData*)); - - MOCK_METHOD1(NewGlobalAudioObjectData, IATLAudioObjectData*(TAudioObjectID)); - - MOCK_METHOD1(NewAudioObjectData, IATLAudioObjectData*(TAudioObjectID)); - - MOCK_METHOD1(DeleteAudioObjectData, void(IATLAudioObjectData*)); - - MOCK_METHOD1(NewDefaultAudioListenerObjectData, IATLListenerData*(TATLIDType)); - - MOCK_METHOD1(NewAudioListenerObjectData, IATLListenerData*(TATLIDType)); - - MOCK_METHOD1(DeleteAudioListenerObjectData, void(IATLListenerData*)); - - MOCK_METHOD1(NewAudioEventData, IATLEventData*(TAudioEventID)); - - MOCK_METHOD1(DeleteAudioEventData, void(IATLEventData*)); - - MOCK_METHOD1(ResetAudioEventData, void(IATLEventData*)); - - MOCK_METHOD1(SetLanguage, void(const char*)); - - MOCK_CONST_METHOD0(GetImplSubPath, const char* const()); - - MOCK_CONST_METHOD0(GetImplementationNameString, const char* const()); - - MOCK_CONST_METHOD1(GetMemoryInfo, void(SAudioImplMemoryInfo&)); - - MOCK_METHOD1(CreateAudioSource, bool(const SAudioInputConfig&)); - - MOCK_METHOD1(DestroyAudioSource, void(TAudioSourceId)); - }; - -} // namespace Audio diff --git a/Gems/AudioSystem/Code/Tests/WaveTable48000Sine.h b/Gems/AudioSystem/Code/Tests/WaveTable48000Sine.h deleted file mode 100644 index bc2cc6ee74..0000000000 --- a/Gems/AudioSystem/Code/Tests/WaveTable48000Sine.h +++ /dev/null @@ -1,48015 +0,0 @@ -/* - * 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 WaveTable -{ - static const std::size_t TABLE_SIZE = 48000; - static const float g_sineTable[TABLE_SIZE] = { - 0.0f, - 0.00013089969352575288f, - 0.0002617993848085749f, - 0.00039269907160553524f, - 0.0005235987516737029f, - 0.0006544984227701477f, - 0.0007853980826519387f, - 0.0009162977290761456f, - 0.0010471973597998385f, - 0.0011780969725800877f, - 0.0013089965651739636f, - 0.0014398961353385368f, - 0.001570795680830879f, - 0.001701695199408061f, - 0.001832594688827156f, - 0.001963494146845236f, - 0.002094393571219374f, - 0.0022252929597066447f, - 0.002356192310064121f, - 0.002487091620048879f, - 0.002617990887417994f, - 0.002748890109928542f, - 0.002879789285337601f, - 0.003010688411402248f, - 0.0031415874858795635f, - 0.003272486506526625f, - 0.003403385471100515f, - 0.0035342843773583143f, - 0.003665183223057106f, - 0.003796082005953973f, - 0.003926980723806f, - 0.004057879374370274f, - 0.0041887779554038804f, - 0.004319676464663909f, - 0.004450574899907449f, - 0.004581473258891589f, - 0.004712371539373423f, - 0.004843269739110043f, - 0.004974167855858545f, - 0.005105065887376025f, - 0.0052359638314195805f, - 0.005366861685746309f, - 0.0054977594481133134f, - 0.005628657116277695f, - 0.005759554687996557f, - 0.005890452161027005f, - 0.006021349533126148f, - 0.006152246802051093f, - 0.006283143965558951f, - 0.0064140410214068334f, - 0.006544937967351858f, - 0.006675834801151138f, - 0.0068067315205617915f, - 0.00693762812334094f, - 0.007068524607245704f, - 0.007199420970033209f, - 0.007330317209460581f, - 0.007461213323284948f, - 0.007592109309263441f, - 0.0077230051651531895f, - 0.007853900888711334f, - 0.007984796477695006f, - 0.008115691929861349f, - 0.008246587242967505f, - 0.008377482414770612f, - 0.008508377443027825f, - 0.008639272325496288f, - 0.008770167059933153f, - 0.008901061644095577f, - 0.009031956075740713f, - 0.009162850352625722f, - 0.009293744472507763f, - 0.009424638433144006f, - 0.009555532232291615f, - 0.009686425867707762f, - 0.009817319337149617f, - 0.009948212638374358f, - 0.010079105769139163f, - 0.010209998727201214f, - 0.010340891510317696f, - 0.010471784116245794f, - 0.0106026765427427f, - 0.010733568787565609f, - 0.010864460848471714f, - 0.010995352723218221f, - 0.011126244409562329f, - 0.011257135905261244f, - 0.011388027208072178f, - 0.01151891831575234f, - 0.01164980922605895f, - 0.011780699936749225f, - 0.011911590445580392f, - 0.012042480750309672f, - 0.012173370848694298f, - 0.012304260738491505f, - 0.012435150417458529f, - 0.012566039883352607f, - 0.012696929133930989f, - 0.012827818166950918f, - 0.012958706980169652f, - 0.01308959557134444f, - 0.013220483938232544f, - 0.01335137207859123f, - 0.013482259990177761f, - 0.013613147670749408f, - 0.013744035118063451f, - 0.013874922329877162f, - 0.014005809303947826f, - 0.014136696038032732f, - 0.014267582529889175f, - 0.014398468777274442f, - 0.01452935477794584f, - 0.014660240529660666f, - 0.014791126030176233f, - 0.014922011277249849f, - 0.015052896268638833f, - 0.01518378100210051f, - 0.015314665475392198f, - 0.01544554968627123f, - 0.015576433632494946f, - 0.015707317311820675f, - 0.015838200722005768f, - 0.015969083860807566f, - 0.016099966725983433f, - 0.016230849315290716f, - 0.01636173162648678f, - 0.016492613657328997f, - 0.01662349540557473f, - 0.01675437686898136f, - 0.01688525804530627f, - 0.01701613893230685f, - 0.01714701952774048f, - 0.017277899829364566f, - 0.017408779834936508f, - 0.017539659542213707f, - 0.017670538948953582f, - 0.017801418052913544f, - 0.017932296851851017f, - 0.018063175343523426f, - 0.018194053525688206f, - 0.018324931396102796f, - 0.018455808952524636f, - 0.018586686192711175f, - 0.018717563114419872f, - 0.018848439715408175f, - 0.018979315993433558f, - 0.01911019194625349f, - 0.01924106757162545f, - 0.019371942867306906f, - 0.01950281783105536f, - 0.0196336924606283f, - 0.019764566753783224f, - 0.01989544070827764f, - 0.020026314321869045f, - 0.02015718759231497f, - 0.02028806051737293f, - 0.020418933094800456f, - 0.020549805322355078f, - 0.020680677197794338f, - 0.02081154871887578f, - 0.02094241988335696f, - 0.02107329068899543f, - 0.021204161133548758f, - 0.021335031214774515f, - 0.021465900930430278f, - 0.02159677027827362f, - 0.021727639256062144f, - 0.021858507861553442f, - 0.021989376092505106f, - 0.022120243946674754f, - 0.022251111421820003f, - 0.022381978515698467f, - 0.022512845226067772f, - 0.022643711550685557f, - 0.022774577487309464f, - 0.02290544303369714f, - 0.02303630818760623f, - 0.02316717294679441f, - 0.023298037309019342f, - 0.023428901272038692f, - 0.02355976483361015f, - 0.02369062799149141f, - 0.02382149074344015f, - 0.023952353087214086f, - 0.02408321502057092f, - 0.02421407654126838f, - 0.02434493764706417f, - 0.024475798335716035f, - 0.024606658604981707f, - 0.024737518452618935f, - 0.02486837787638546f, - 0.024999236874039054f, - 0.02513009544333748f, - 0.025260953582038507f, - 0.025391811287899916f, - 0.025522668558679504f, - 0.025653525392135054f, - 0.025784381786024383f, - 0.025915237738105296f, - 0.026046093246135604f, - 0.02617694830787315f, - 0.02630780292107576f, - 0.026438657083501262f, - 0.02656951079290753f, - 0.026700364047052408f, - 0.026831216843693755f, - 0.026962069180589455f, - 0.02709292105549738f, - 0.02722377246617542f, - 0.027354623410381484f, - 0.02748547388587346f, - 0.027616323890409262f, - 0.02774717342174682f, - 0.02787802247764405f, - 0.02800887105585891f, - 0.028139719154149326f, - 0.02827056677027325f, - 0.028401413901988654f, - 0.02853226054705351f, - 0.028663106703225777f, - 0.028793952368263466f, - 0.02892479753992456f, - 0.029055642215967056f, - 0.02918648639414897f, - 0.029317330072228334f, - 0.02944817324796316f, - 0.029579015919111502f, - 0.029709858083431386f, - 0.029840699738680886f, - 0.02997154088261806f, - 0.03010238151300097f, - 0.03023322162758771f, - 0.030364061224136367f, - 0.03049490030040503f, - 0.030625738854151822f, - 0.030756576883134854f, - 0.030887414385112243f, - 0.031018251357842138f, - 0.031149087799082674f, - 0.031279923706592f, - 0.03141075907812829f, - 0.031541593911449714f, - 0.031672428204314436f, - 0.03180326195448067f, - 0.03193409515970659f, - 0.03206492781775042f, - 0.03219575992637039f, - 0.032326591483324695f, - 0.03245742248637159f, - 0.03258825293326932f, - 0.03271908282177614f, - 0.03284991214965032f, - 0.03298074091465013f, - 0.03311156911453385f, - 0.033242396747059776f, - 0.033373223809986224f, - 0.03350405030107149f, - 0.03363487621807391f, - 0.033765701558751804f, - 0.03389652632086353f, - 0.034027350502167444f, - 0.03415817410042189f, - 0.034288997113385254f, - 0.03441981953881592f, - 0.034550641374472266f, - 0.03468146261811272f, - 0.03481228326749567f, - 0.03494310332037955f, - 0.0350739227745228f, - 0.03520474162768387f, - 0.035335559877621193f, - 0.03546637752209324f, - 0.0355971945588585f, - 0.035728010985675435f, - 0.035858826800302564f, - 0.035989642000498374f, - 0.0361204565840214f, - 0.03625127054863016f, - 0.03638208389208319f, - 0.03651289661213904f, - 0.036643708706556276f, - 0.036774520173093454f, - 0.03690533100950918f, - 0.03703614121356202f, - 0.03716695078301058f, - 0.037297759715613485f, - 0.03742856800912936f, - 0.03755937566131683f, - 0.03769018266993454f, - 0.03782098903274115f, - 0.03795179474749534f, - 0.03808259981195578f, - 0.03821340422388115f, - 0.03834420798103017f, - 0.038475011081161546f, - 0.038605813522034f, - 0.03873661530140627f, - 0.03886741641703711f, - 0.03899821686668525f, - 0.0391290166481095f, - 0.03925981575906861f, - 0.03939061419732138f, - 0.039521411960626626f, - 0.03965220904674316f, - 0.03978300545342979f, - 0.039913801178445375f, - 0.04004459621954876f, - 0.04017539057449881f, - 0.0403061842410544f, - 0.0404369772169744f, - 0.04056776950001773f, - 0.040698561087943286f, - 0.040829351978509995f, - 0.040960142169476785f, - 0.041090931658602614f, - 0.041221720443646415f, - 0.04135250852236719f, - 0.04148329589252389f, - 0.04161408255187552f, - 0.0417448684981811f, - 0.04187565372919963f, - 0.042006438242690146f, - 0.042137222036411695f, - 0.04226800510812332f, - 0.0423987874555841f, - 0.04252956907655312f, - 0.04266034996878945f, - 0.04279113013005222f, - 0.04292190955810053f, - 0.04305268825069351f, - 0.04318346620559032f, - 0.043314243420550104f, - 0.043445019893332014f, - 0.04357579562169526f, - 0.04370657060339901f, - 0.04383734483620249f, - 0.0439681183178649f, - 0.044098891046145484f, - 0.04422966301880348f, - 0.044360434233598166f, - 0.04449120468828878f, - 0.04462197438063463f, - 0.044752743308395f, - 0.0448835114693292f, - 0.04501427886119656f, - 0.04514504548175642f, - 0.045275811328768116f, - 0.04540657639999101f, - 0.0455373406931845f, - 0.045668104206107944f, - 0.04579886693652077f, - 0.04592962888218238f, - 0.0460603900408522f, - 0.04619115041028969f, - 0.0463219099882543f, - 0.04645266877250549f, - 0.04658342676080276f, - 0.04671418395090559f, - 0.046844940340573495f, - 0.04697569592756601f, - 0.04710645070964266f, - 0.04723720468456301f, - 0.047367957850086614f, - 0.04749871020397305f, - 0.04762946174398193f, - 0.047760212467872855f, - 0.04789096237340543f, - 0.04802171145833931f, - 0.04815245972043413f, - 0.048283207157449576f, - 0.0484139537671453f, - 0.04854469954728101f, - 0.04867544449561641f, - 0.04880618860991122f, - 0.04893693188792517f, - 0.049067674327418015f, - 0.049198415926149514f, - 0.049329156681879455f, - 0.04945989659236761f, - 0.0495906356553738f, - 0.04972137386865785f, - 0.049852111229979595f, - 0.04998284773709888f, - 0.05011358338777558f, - 0.050244318179769556f, - 0.050375052110840715f, - 0.05050578517874898f, - 0.05063651738125424f, - 0.05076724871611646f, - 0.0508979791810956f, - 0.05102870877395161f, - 0.051159437492444476f, - 0.0512901653343342f, - 0.05142089229738081f, - 0.05155161837934431f, - 0.05168234357798477f, - 0.051813067891062235f, - 0.05194379131633677f, - 0.05207451385156847f, - 0.052205235494517464f, - 0.05233595624294383f, - 0.05246667609460773f, - 0.05259739504726932f, - 0.052728113098688745f, - 0.052858830246626194f, - 0.05298954648884189f, - 0.053120261823095996f, - 0.05325097624714877f, - 0.053381689758760474f, - 0.053512402355691324f, - 0.05364311403570163f, - 0.05377382479655166f, - 0.053904534636001734f, - 0.05403524355181216f, - 0.05416595154174331f, - 0.054296658603555495f, - 0.0544273647350091f, - 0.05455806993386453f, - 0.054688774197882165f, - 0.05481947752482241f, - 0.05495017991244575f, - 0.055080881358512586f, - 0.0552115818607834f, - 0.05534228141701868f, - 0.05547298002497891f, - 0.055603677682424614f, - 0.05573437438711633f, - 0.055865070136814604f, - 0.05599576492927998f, - 0.05612645876227306f, - 0.056257151633554436f, - 0.05638784354088471f, - 0.05651853448202452f, - 0.05664922445473452f, - 0.05677991345677535f, - 0.05691060148590771f, - 0.057041288539892286f, - 0.0571719746164898f, - 0.057302659713460956f, - 0.05743334382856654f, - 0.05756402695956728f, - 0.057694709104223973f, - 0.05782539026029742f, - 0.05795607042554842f, - 0.05808674959773781f, - 0.05821742777462645f, - 0.05834810495397517f, - 0.05847878113354489f, - 0.05860945631109649f, - 0.0587401304843909f, - 0.05887080365118903f, - 0.05900147580925186f, - 0.05913214695634033f, - 0.05926281709021543f, - 0.05939348620863818f, - 0.059524154309369595f, - 0.0596548213901707f, - 0.05978548744880254f, - 0.05991615248302624f, - 0.060046816490602825f, - 0.06017747946929344f, - 0.060308141416859216f, - 0.06043880233106127f, - 0.06056946220966077f, - 0.06070012105041891f, - 0.06083077885109687f, - 0.060961435609455855f, - 0.06109209132325713f, - 0.061222745990261916f, - 0.06135339960823149f, - 0.06148405217492714f, - 0.06161470368811016f, - 0.06174535414554187f, - 0.06187600354498365f, - 0.062006651884196795f, - 0.062137299160942724f, - 0.06226794537298282f, - 0.062398590518078494f, - 0.06252923459399116f, - 0.06265987759848231f, - 0.06279051952931337f, - 0.06292116038424585f, - 0.06305180016104124f, - 0.06318243885746107f, - 0.06331307647126688f, - 0.06344371300022023f, - 0.06357434844208269f, - 0.06370498279461588f, - 0.06383561605558138f, - 0.06396624822274087f, - 0.06409687929385596f, - 0.06422750926668835f, - 0.06435813813899972f, - 0.06448876590855177f, - 0.06461939257310625f, - 0.0647500181304249f, - 0.06488064257826946f, - 0.06501126591440175f, - 0.06514188813658356f, - 0.06527250924257672f, - 0.06540312923014306f, - 0.06553374809704446f, - 0.0656643658410428f, - 0.06579498245989994f, - 0.06592559795137785f, - 0.06605621231323845f, - 0.0661868255432437f, - 0.06631743763915558f, - 0.06644804859873607f, - 0.0665786584197472f, - 0.06670926709995102f, - 0.06683987463710955f, - 0.06697048102898488f, - 0.06710108627333913f, - 0.0672316903679344f, - 0.06736229331053281f, - 0.06749289509889651f, - 0.0676234957307877f, - 0.06775409520396856f, - 0.0678846935162013f, - 0.06801529066524817f, - 0.06814588664887139f, - 0.06827648146483326f, - 0.06840707511089607f, - 0.06853766758482212f, - 0.06866825888437376f, - 0.06879884900731334f, - 0.06892943795140322f, - 0.06906002571440578f, - 0.0691906122940835f, - 0.06932119768819875f, - 0.069451781894514f, - 0.06958236491079174f, - 0.06971294673479446f, - 0.06984352736428466f, - 0.0699741067970249f, - 0.07010468503077771f, - 0.07023526206330569f, - 0.07036583789237144f, - 0.07049641251573754f, - 0.07062698593116667f, - 0.0707575581364215f, - 0.07088812912926466f, - 0.07101869890745888f, - 0.0711492674687669f, - 0.07127983481095142f, - 0.07141040093177523f, - 0.07154096582900113f, - 0.0716715295003919f, - 0.07180209194371036f, - 0.07193265315671939f, - 0.07206321313718184f, - 0.0721937718828606f, - 0.07232432939151857f, - 0.07245488566091872f, - 0.07258544068882397f, - 0.07271599447299729f, - 0.0728465470112017f, - 0.0729770983012002f, - 0.07310764834075585f, - 0.07323819712763169f, - 0.0733687446595908f, - 0.07349929093439629f, - 0.07362983594981132f, - 0.07376037970359897f, - 0.07389092219352245f, - 0.07402146341734493f, - 0.07415200337282965f, - 0.0742825420577398f, - 0.07441307946983869f, - 0.07454361560688955f, - 0.07467415046665571f, - 0.07480468404690047f, - 0.07493521634538716f, - 0.07506574735987918f, - 0.0751962770881399f, - 0.07532680552793272f, - 0.07545733267702107f, - 0.07558785853316843f, - 0.07571838309413825f, - 0.07584890635769402f, - 0.07597942832159926f, - 0.07610994898361757f, - 0.07624046834151242f, - 0.07637098639304746f, - 0.07650150313598628f, - 0.07663201856809251f, - 0.0767625326871298f, - 0.07689304549086184f, - 0.07702355697705233f, - 0.07715406714346495f, - 0.07728457598786351f, - 0.0774150835080117f, - 0.07754558970167338f, - 0.07767609456661233f, - 0.07780659810059236f, - 0.07793710030137735f, - 0.07806760116673121f, - 0.07819810069441781f, - 0.07832859888220106f, - 0.07845909572784494f, - 0.07858959122911342f, - 0.07872008538377047f, - 0.07885057818958013f, - 0.07898106964430644f, - 0.07911155974571346f, - 0.07924204849156528f, - 0.07937253587962599f, - 0.07950302190765976f, - 0.07963350657343073f, - 0.07976398987470307f, - 0.07989447180924097f, - 0.08002495237480871f, - 0.08015543156917052f, - 0.08028590939009063f, - 0.08041638583533338f, - 0.08054686090266312f, - 0.08067733458984412f, - 0.0808078068946408f, - 0.08093827781481755f, - 0.08106874734813876f, - 0.0811992154923689f, - 0.08132968224527241f, - 0.08146014760461379f, - 0.08159061156815754f, - 0.08172107413366822f, - 0.08185153529891036f, - 0.08198199506164856f, - 0.08211245341964743f, - 0.08224291037067158f, - 0.08237336591248569f, - 0.08250382004285442f, - 0.0826342727595425f, - 0.08276472406031463f, - 0.08289517394293557f, - 0.0830256224051701f, - 0.08315606944478302f, - 0.08328651505953917f, - 0.08341695924720335f, - 0.0835474020055405f, - 0.0836778433323155f, - 0.08380828322529323f, - 0.08393872168223869f, - 0.0840691587009168f, - 0.08419959427909263f, - 0.08433002841453112f, - 0.08446046110499739f, - 0.08459089234825647f, - 0.08472132214207344f, - 0.08485175048421345f, - 0.08498217737244167f, - 0.08511260280452321f, - 0.08524302677822329f, - 0.08537344929130715f, - 0.08550387034154003f, - 0.08563428992668717f, - 0.0857647080445139f, - 0.08589512469278551f, - 0.08602553986926739f, - 0.08615595357172488f, - 0.08628636579792337f, - 0.08641677654562831f, - 0.08654718581260512f, - 0.08667759359661928f, - 0.08680799989543628f, - 0.08693840470682167f, - 0.08706880802854099f, - 0.08719920985835979f, - 0.0873296101940437f, - 0.08746000903335832f, - 0.08759040637406931f, - 0.08772080221394238f, - 0.08785119655074317f, - 0.08798158938223746f, - 0.08811198070619097f, - 0.08824237052036951f, - 0.08837275882253885f, - 0.08850314561046486f, - 0.08863353088191339f, - 0.08876391463465029f, - 0.08889429686644151f, - 0.08902467757505297f, - 0.08915505675825063f, - 0.08928543441380046f, - 0.08941581053946852f, - 0.0895461851330208f, - 0.0896765581922234f, - 0.0898069297148424f, - 0.08993729969864393f, - 0.09006766814139411f, - 0.09019803504085915f, - 0.0903284003948052f, - 0.09045876420099855f, - 0.09058912645720539f, - 0.09071948716119202f, - 0.09084984631072475f, - 0.09098020390356992f, - 0.09111055993749385f, - 0.09124091441026297f, - 0.09137126731964366f, - 0.09150161866340238f, - 0.09163196843930557f, - 0.09176231664511976f, - 0.09189266327861144f, - 0.09202300833754715f, - 0.09215335181969346f, - 0.092283693722817f, - 0.09241403404468439f, - 0.09254437278306224f, - 0.0926747099357173f, - 0.09280504550041621f, - 0.09293537947492576f, - 0.09306571185701269f, - 0.09319604264444378f, - 0.09332637183498588f, - 0.09345669942640579f, - 0.0935870254164704f, - 0.09371734980294662f, - 0.09384767258360137f, - 0.09397799375620161f, - 0.09410831331851431f, - 0.09423863126830649f, - 0.09436894760334519f, - 0.09449926232139745f, - 0.09462957542023039f, - 0.09475988689761111f, - 0.09489019675130679f, - 0.09502050497908457f, - 0.09515081157871166f, - 0.09528111654795532f, - 0.09541141988458278f, - 0.09554172158636133f, - 0.09567202165105829f, - 0.09580232007644102f, - 0.09593261686027688f, - 0.09606291200033325f, - 0.09619320549437757f, - 0.09632349734017734f, - 0.09645378753549996f, - 0.09658407607811301f, - 0.09671436296578402f, - 0.09684464819628054f, - 0.09697493176737017f, - 0.09710521367682055f, - 0.09723549392239932f, - 0.09736577250187418f, - 0.09749604941301283f, - 0.09762632465358302f, - 0.0977565982213525f, - 0.0978868701140891f, - 0.0980171403295606f, - 0.0981474088655349f, - 0.09827767571977984f, - 0.09840794089006338f, - 0.09853820437415343f, - 0.09866846616981796f, - 0.09879872627482501f, - 0.09892898468694256f, - 0.09905924140393867f, - 0.09918949642358145f, - 0.09931974974363901f, - 0.09945000136187948f, - 0.09958025127607106f, - 0.09971049948398193f, - 0.09984074598338033f, - 0.09997099077203452f, - 0.1001012338477128f, - 0.10023147520818346f, - 0.1003617148512149f, - 0.10049195277457545f, - 0.10062218897603352f, - 0.1007524234533576f, - 0.10088265620431612f, - 0.10101288722667755f, - 0.10114311651821048f, - 0.10127334407668342f, - 0.10140356989986497f, - 0.10153379398552376f, - 0.10166401633142841f, - 0.10179423693534759f, - 0.10192445579505004f, - 0.10205467290830447f, - 0.10218488827287965f, - 0.10231510188654439f, - 0.10244531374706746f, - 0.10257552385221778f, - 0.10270573219976423f, - 0.10283593878747568f, - 0.10296614361312112f, - 0.1030963466744695f, - 0.10322654796928983f, - 0.10335674749535115f, - 0.10348694525042253f, - 0.10361714123227304f, - 0.10374733543867186f, - 0.1038775278673881f, - 0.10400771851619094f, - 0.10413790738284966f, - 0.10426809446513347f, - 0.1043982797608116f, - 0.10452846326765346f, - 0.10465864498342833f, - 0.10478882490590559f, - 0.10491900303285465f, - 0.10504917936204494f, - 0.10517935389124591f, - 0.10530952661822708f, - 0.10543969754075797f, - 0.10556986665660809f, - 0.1057000339635471f, - 0.10583019945934458f, - 0.10596036314177015f, - 0.10609052500859356f, - 0.10622068505758449f, - 0.10635084328651265f, - 0.10648099969314787f, - 0.10661115427525991f, - 0.10674130703061863f, - 0.10687145795699389f, - 0.1070016070521556f, - 0.10713175431387366f, - 0.10726189973991807f, - 0.1073920433280588f, - 0.10752218507606585f, - 0.10765232498170936f, - 0.10778246304275935f, - 0.10791259925698593f, - 0.1080427336221593f, - 0.10817286613604961f, - 0.10830299679642708f, - 0.10843312560106197f, - 0.10856325254772455f, - 0.1086933776341851f, - 0.10882350085821402f, - 0.10895362221758163f, - 0.10908374171005837f, - 0.10921385933341467f, - 0.10934397508542099f, - 0.10947408896384782f, - 0.10960420096646573f, - 0.10973431109104528f, - 0.10986441933535702f, - 0.10999452569717164f, - 0.11012463017425977f, - 0.11025473276439213f, - 0.11038483346533942f, - 0.1105149322748724f, - 0.11064502919076188f, - 0.11077512421077869f, - 0.11090521733269364f, - 0.11103530855427768f, - 0.11116539787330172f, - 0.11129548528753666f, - 0.11142557079475356f, - 0.11155565439272339f, - 0.11168573607921722f, - 0.11181581585200615f, - 0.11194589370886128f, - 0.11207596964755374f, - 0.11220604366585477f, - 0.11233611576153554f, - 0.1124661859323673f, - 0.11259625417612139f, - 0.11272632049056906f, - 0.11285638487348167f, - 0.11298644732263063f, - 0.11311650783578736f, - 0.11324656641072324f, - 0.11337662304520983f, - 0.11350667773701863f, - 0.11363673048392113f, - 0.11376678128368899f, - 0.11389683013409377f, - 0.11402687703290713f, - 0.11415692197790078f, - 0.1142869649668464f, - 0.11441700599751572f, - 0.11454704506768061f, - 0.11467708217511281f, - 0.11480711731758417f, - 0.1149371504928666f, - 0.11506718169873202f, - 0.11519721093295235f, - 0.11532723819329961f, - 0.1154572634775458f, - 0.11558728678346294f, - 0.11571730810882319f, - 0.11584732745139861f, - 0.11597734480896137f, - 0.11610736017928366f, - 0.1162373735601377f, - 0.11636738494929574f, - 0.11649739434453009f, - 0.11662740174361308f, - 0.116757407144317f, - 0.11688741054441433f, - 0.11701741194167745f, - 0.11714741133387882f, - 0.11727740871879096f, - 0.11740740409418637f, - 0.11753739745783764f, - 0.11766738880751736f, - 0.11779737814099817f, - 0.11792736545605269f, - 0.11805735075045372f, - 0.11818733402197391f, - 0.11831731526838604f, - 0.11844729448746297f, - 0.11857727167697749f, - 0.1187072468347025f, - 0.11883721995841091f, - 0.11896719104587565f, - 0.11909716009486973f, - 0.11922712710316614f, - 0.11935709206853792f, - 0.11948705498875821f, - 0.11961701586160008f, - 0.11974697468483667f, - 0.11987693145624123f, - 0.12000688617358696f, - 0.12013683883464708f, - 0.12026678943719496f, - 0.12039673797900388f, - 0.12052668445784721f, - 0.12065662887149839f, - 0.12078657121773083f, - 0.12091651149431798f, - 0.12104644969903339f, - 0.12117638582965058f, - 0.12130631988394312f, - 0.12143625185968468f, - 0.12156618175464885f, - 0.12169610956660931f, - 0.12182603529333985f, - 0.12195595893261418f, - 0.12208588048220609f, - 0.12221579993988943f, - 0.12234571730343806f, - 0.12247563257062587f, - 0.1226055457392268f, - 0.12273545680701484f, - 0.12286536577176398f, - 0.12299527263124826f, - 0.12312517738324179f, - 0.12325508002551865f, - 0.12338498055585302f, - 0.1235148789720191f, - 0.12364477527179106f, - 0.12377466945294323f, - 0.12390456151324988f, - 0.12403445145048532f, - 0.12416433926242397f, - 0.1242942249468402f, - 0.12442410850150845f, - 0.12455398992420325f, - 0.12468386921269904f, - 0.12481374636477043f, - 0.12494362137819202f, - 0.12507349425073838f, - 0.12520336498018422f, - 0.12533323356430426f, - 0.12546310000087316f, - 0.12559296428766573f, - 0.12572282642245683f, - 0.12585268640302122f, - 0.12598254422713384f, - 0.12611239989256962f, - 0.1262422533971035f, - 0.12637210473851046f, - 0.12650195391456553f, - 0.1266318009230438f, - 0.12676164576172042f, - 0.12689148842837042f, - 0.1270213289207691f, - 0.1271511672366916f, - 0.1272810033739132f, - 0.1274108373302092f, - 0.1275406691033549f, - 0.12767049869112573f, - 0.12780032609129705f, - 0.12793015130164428f, - 0.12805997431994295f, - 0.12818979514396855f, - 0.12831961377149664f, - 0.12844943020030286f, - 0.12857924442816274f, - 0.12870905645285202f, - 0.1288388662721464f, - 0.1289686738838216f, - 0.1290984792856534f, - 0.12922828247541768f, - 0.1293580834508902f, - 0.12948788220984694f, - 0.12961767875006383f, - 0.12974747306931675f, - 0.1298772651653818f, - 0.13000705503603502f, - 0.13013684267905243f, - 0.13026662809221023f, - 0.13039641127328455f, - 0.13052619222005157f, - 0.13065597093028758f, - 0.13078574740176882f, - 0.13091552163227158f, - 0.1310452936195723f, - 0.13117506336144727f, - 0.13130483085567296f, - 0.13143459610002586f, - 0.1315643590922825f, - 0.13169411983021936f, - 0.13182387831161305f, - 0.13195363453424022f, - 0.1320833884958775f, - 0.1322131401943016f, - 0.13234288962728927f, - 0.13247263679261728f, - 0.13260238168806243f, - 0.1327321243114016f, - 0.13286186466041167f, - 0.1329916027328696f, - 0.13312133852655236f, - 0.13325107203923692f, - 0.1333808032687004f, - 0.1335105322127198f, - 0.1336402588690723f, - 0.13376998323553513f, - 0.13389970530988538f, - 0.13402942508990037f, - 0.13415914257335737f, - 0.1342888577580337f, - 0.13441857064170676f, - 0.13454828122215393f, - 0.13467798949715257f, - 0.13480769546448032f, - 0.1349373991219146f, - 0.13506710046723303f, - 0.13519679949821317f, - 0.13532649621263265f, - 0.13545619060826922f, - 0.13558588268290053f, - 0.13571557243430438f, - 0.13584525986025855f, - 0.13597494495854093f, - 0.13610462772692933f, - 0.1362343081632017f, - 0.136363986265136f, - 0.13649366203051028f, - 0.13662333545710248f, - 0.13675300654269076f, - 0.13688267528505324f, - 0.13701234168196802f, - 0.13714200573121338f, - 0.1372716674305675f, - 0.1374013267778087f, - 0.13753098377071526f, - 0.1376606384070656f, - 0.13779029068463805f, - 0.13791994060121113f, - 0.1380495881545633f, - 0.138179233342473f, - 0.13830887616271895f, - 0.13843851661307963f, - 0.13856815469133374f, - 0.13869779039525995f, - 0.138827423722637f, - 0.13895705467124364f, - 0.13908668323885873f, - 0.13921630942326102f, - 0.1393459332222295f, - 0.13947555463354305f, - 0.13960517365498062f, - 0.1397347902843213f, - 0.13986440451934407f, - 0.13999401635782807f, - 0.14012362579755241f, - 0.14025323283629626f, - 0.1403828374718389f, - 0.14051243970195954f, - 0.14064203952443746f, - 0.14077163693705205f, - 0.14090123193758267f, - 0.14103082452380872f, - 0.14116041469350973f, - 0.14129000244446516f, - 0.14141958777445454f, - 0.14154917068125755f, - 0.1416787511626537f, - 0.14180832921642275f, - 0.1419379048403444f, - 0.14206747803219835f, - 0.1421970487897645f, - 0.14232661711082262f, - 0.1424561829931526f, - 0.1425857464345344f, - 0.1427153074327479f, - 0.1428448659855732f, - 0.1429744220907903f, - 0.14310397574617928f, - 0.14323352694952035f, - 0.14336307569859363f, - 0.1434926219911793f, - 0.14362216582505768f, - 0.14375170719800903f, - 0.14388124610781372f, - 0.14401078255225216f, - 0.14414031652910472f, - 0.1442698480361519f, - 0.14439937707117423f, - 0.14452890363195223f, - 0.1446584277162665f, - 0.1447879493218977f, - 0.1449174684466265f, - 0.14504698508823363f, - 0.14517649924449985f, - 0.14530601091320602f, - 0.1454355200921329f, - 0.14556502677906144f, - 0.14569453097177262f, - 0.14582403266804733f, - 0.14595353186566662f, - 0.14608302856241162f, - 0.14621252275606336f, - 0.14634201444440303f, - 0.14647150362521183f, - 0.14660099029627094f, - 0.14673047445536175f, - 0.1468599561002655f, - 0.14698943522876354f, - 0.14711891183863737f, - 0.14724838592766837f, - 0.14737785749363805f, - 0.147507326534328f, - 0.1476367930475197f, - 0.14776625703099486f, - 0.14789571848253516f, - 0.14802517739992224f, - 0.1481546337809379f, - 0.14828408762336395f, - 0.1484135389249822f, - 0.14854298768357457f, - 0.14867243389692297f, - 0.1488018775628094f, - 0.14893131867901585f, - 0.14906075724332438f, - 0.14919019325351712f, - 0.1493196267073762f, - 0.1494490576026838f, - 0.1495784859372222f, - 0.14970791170877362f, - 0.14983733491512044f, - 0.149966755554045f, - 0.1500961736233297f, - 0.15022558912075706f, - 0.1503550020441095f, - 0.1504844123911696f, - 0.15061382015971997f, - 0.15074322534754322f, - 0.150872627952422f, - 0.1510020279721391f, - 0.15113142540447722f, - 0.1512608202472192f, - 0.1513902124981479f, - 0.15151960215504617f, - 0.15164898921569706f, - 0.15177837367788347f, - 0.15190775553938837f, - 0.15203713479799502f, - 0.15216651145148638f, - 0.1522958854976457f, - 0.15242525693425618f, - 0.15255462575910103f, - 0.1526839919699636f, - 0.15281335556462725f, - 0.15294271654087527f, - 0.1530720748964912f, - 0.15320143062925848f, - 0.15333078373696063f, - 0.15346013421738122f, - 0.1535894820683039f, - 0.15371882728751224f, - 0.15384816987279004f, - 0.153977509821921f, - 0.15410684713268896f, - 0.15423618180287768f, - 0.1543655138302711f, - 0.1544948432126532f, - 0.15462416994780787f, - 0.15475349403351912f, - 0.15488281546757113f, - 0.15501213424774787f, - 0.1551414503718336f, - 0.1552707638376125f, - 0.15540007464286879f, - 0.1555293827853868f, - 0.15565868826295087f, - 0.15578799107334532f, - 0.1559172912143547f, - 0.15604658868376334f, - 0.15617588347935588f, - 0.15630517559891685f, - 0.15643446504023087f, - 0.15656375180108256f, - 0.1566930358792567f, - 0.15682231727253798f, - 0.15695159597871122f, - 0.1570808719955613f, - 0.15721014532087305f, - 0.15733941595243142f, - 0.1574686838880214f, - 0.15759794912542807f, - 0.15772721166243642f, - 0.1578564714968316f, - 0.15798572862639884f, - 0.15811498304892327f, - 0.15824423476219016f, - 0.15837348376398488f, - 0.1585027300520927f, - 0.1586319736242991f, - 0.15876121447838948f, - 0.1588904526121493f, - 0.1590196880233642f, - 0.15914892070981965f, - 0.15927815066930137f, - 0.15940737789959503f, - 0.1595366023984863f, - 0.159665824163761f, - 0.15979504319320495f, - 0.15992425948460398f, - 0.16005347303574405f, - 0.16018268384441112f, - 0.1603118919083911f, - 0.1604410972254702f, - 0.16057029979343443f, - 0.1606994996100699f, - 0.16082869667316294f, - 0.16095789098049965f, - 0.1610870825298664f, - 0.16121627131904953f, - 0.16134545734583539f, - 0.16147464060801042f, - 0.16160382110336113f, - 0.161732998829674f, - 0.16186217378473564f, - 0.1619913459663327f, - 0.16212051537225175f, - 0.1622496820002796f, - 0.16237884584820295f, - 0.16250800691380868f, - 0.16263716519488358f, - 0.16276632068921462f, - 0.16289547339458874f, - 0.16302462330879292f, - 0.1631537704296142f, - 0.16328291475483975f, - 0.1634120562822566f, - 0.16354119500965206f, - 0.16367033093481334f, - 0.16379946405552764f, - 0.16392859436958246f, - 0.16405772187476508f, - 0.16418684656886293f, - 0.16431596844966354f, - 0.16444508751495443f, - 0.16457420376252316f, - 0.16470331719015738f, - 0.16483242779564475f, - 0.16496153557677298f, - 0.1650906405313299f, - 0.1652197426571033f, - 0.16534884195188101f, - 0.16547793841345101f, - 0.16560703203960123f, - 0.1657361228281197f, - 0.1658652107767945f, - 0.1659942958834137f, - 0.16612337814576547f, - 0.16625245756163806f, - 0.1663815341288197f, - 0.1665106078450987f, - 0.1666396787082634f, - 0.16676874671610228f, - 0.1668978118664037f, - 0.1670268741569562f, - 0.16715593358554834f, - 0.16728499014996873f, - 0.16741404384800598f, - 0.16754309467744885f, - 0.16767214263608604f, - 0.16780118772170638f, - 0.1679302299320987f, - 0.16805926926505185f, - 0.16818830571835489f, - 0.16831733928979672f, - 0.1684463699771664f, - 0.16857539777825306f, - 0.16870442269084582f, - 0.16883344471273387f, - 0.16896246384170646f, - 0.16909148007555286f, - 0.16922049341206247f, - 0.1693495038490246f, - 0.16947851138422873f, - 0.16960751601546442f, - 0.1697365177405211f, - 0.16986551655718837f, - 0.16999451246325598f, - 0.1701235054565135f, - 0.1702524955347507f, - 0.17038148269575742f, - 0.17051046693732344f, - 0.17063944825723867f, - 0.17076842665329311f, - 0.17089740212327664f, - 0.17102637466497936f, - 0.17115534427619136f, - 0.17128431095470278f, - 0.1714132746983038f, - 0.17154223550478467f, - 0.1716711933719357f, - 0.17180014829754717f, - 0.17192910027940952f, - 0.17205804931531324f, - 0.17218699540304871f, - 0.17231593854040655f, - 0.17244487872517736f, - 0.1725738159551517f, - 0.17270275022812037f, - 0.1728316815418741f, - 0.17296060989420356f, - 0.1730895352828998f, - 0.17321845770575356f, - 0.17334737716055584f, - 0.1734762936450977f, - 0.1736052071571701f, - 0.17373411769456415f, - 0.17386302525507108f, - 0.173991929836482f, - 0.17412083143658824f, - 0.17424973005318106f, - 0.17437862568405185f, - 0.17450751832699196f, - 0.1746364079797929f, - 0.1747652946402462f, - 0.17489417830614337f, - 0.17502305897527604f, - 0.17515193664543588f, - 0.17528081131441461f, - 0.175409682980004f, - 0.17553855163999585f, - 0.17566741729218205f, - 0.1757962799343545f, - 0.1759251395643052f, - 0.17605399617982614f, - 0.17618284977870943f, - 0.1763117003587472f, - 0.1764405479177316f, - 0.1765693924534549f, - 0.17669823396370934f, - 0.1768270724462873f, - 0.17695590789898114f, - 0.1770847403195833f, - 0.17721356970588625f, - 0.1773423960556826f, - 0.17747121936676488f, - 0.17760003963692578f, - 0.17772885686395798f, - 0.1778576710456542f, - 0.1779864821798073f, - 0.17811529026421014f, - 0.17824409529665555f, - 0.17837289727493658f, - 0.1785016961968462f, - 0.17863049206017745f, - 0.17875928486272352f, - 0.1788880746022775f, - 0.17901686127663266f, - 0.1791456448835823f, - 0.17927442542091968f, - 0.1794032028864382f, - 0.17953197727793135f, - 0.17966074859319253f, - 0.17978951683001534f, - 0.17991828198619333f, - 0.1800470440595202f, - 0.1801758030477896f, - 0.1803045589487953f, - 0.1804333117603311f, - 0.18056206148019083f, - 0.1806908081061684f, - 0.1808195516360578f, - 0.18094829206765306f, - 0.18107702939874817f, - 0.18120576362713736f, - 0.1813344947506147f, - 0.1814632227669745f, - 0.181591947674011f, - 0.18172066946951848f, - 0.18184938815129142f, - 0.18197810371712422f, - 0.18210681616481136f, - 0.18223552549214747f, - 0.182364231696927f, - 0.18249293477694473f, - 0.18262163472999535f, - 0.18275033155387355f, - 0.1828790252463742f, - 0.18300771580529218f, - 0.18313640322842234f, - 0.18326508751355977f, - 0.1833937686584994f, - 0.18352244666103634f, - 0.1836511215189658f, - 0.18377979323008284f, - 0.1839084617921828f, - 0.18403712720306095f, - 0.18416578946051265f, - 0.1842944485623333f, - 0.18442310450631838f, - 0.18455175729026335f, - 0.18468040691196383f, - 0.18480905336921544f, - 0.18493769665981385f, - 0.1850663367815548f, - 0.18519497373223404f, - 0.18532360750964746f, - 0.18545223811159092f, - 0.1855808655358604f, - 0.18570948978025187f, - 0.1858381108425614f, - 0.18596672872058512f, - 0.1860953434121192f, - 0.18622395491495977f, - 0.18635256322690327f, - 0.18648116834574593f, - 0.1866097702692841f, - 0.18673836899531432f, - 0.186866964521633f, - 0.18699555684603675f, - 0.18712414596632218f, - 0.18725273188028588f, - 0.1873813145857246f, - 0.18750989408043517f, - 0.18763847036221432f, - 0.18776704342885897f, - 0.1878956132781661f, - 0.18802417990793263f, - 0.18815274331595563f, - 0.1882813035000322f, - 0.18840986045795952f, - 0.18853841418753478f, - 0.18866696468655522f, - 0.18879551195281824f, - 0.18892405598412113f, - 0.18905259677826136f, - 0.18918113433303646f, - 0.18930966864624388f, - 0.1894381997156813f, - 0.18956672753914636f, - 0.18969525211443672f, - 0.1898237734393502f, - 0.18995229151168463f, - 0.1900808063292378f, - 0.19020931788980777f, - 0.19033782619119247f, - 0.19046633123118986f, - 0.1905948330075982f, - 0.19072333151821552f, - 0.19085182676084012f, - 0.1909803187332702f, - 0.19110880743330413f, - 0.19123729285874028f, - 0.1913657750073771f, - 0.19149425387701297f, - 0.19162272946544662f, - 0.19175120177047658f, - 0.19187967078990142f, - 0.19200813652152002f, - 0.19213659896313104f, - 0.19226505811253333f, - 0.19239351396752583f, - 0.19252196652590742f, - 0.19265041578547712f, - 0.19277886174403402f, - 0.1929073043993772f, - 0.19303574374930582f, - 0.19316417979161915f, - 0.1932926125241164f, - 0.19342104194459697f, - 0.19354946805086023f, - 0.1936778908407057f, - 0.1938063103119328f, - 0.1939347264623411f, - 0.19406313928973032f, - 0.1941915487919f, - 0.19431995496665f, - 0.1944483578117801f, - 0.19457675732509006f, - 0.1947051535043799f, - 0.1948335463474495f, - 0.1949619358520989f, - 0.19509032201612825f, - 0.19521870483733764f, - 0.19534708431352724f, - 0.19547546044249733f, - 0.19560383322204822f, - 0.19573220264998029f, - 0.1958605687240939f, - 0.1959889314421896f, - 0.19611729080206794f, - 0.19624564680152945f, - 0.19637399943837477f, - 0.19650234871040478f, - 0.19663069461542007f, - 0.19675903715122148f, - 0.19688737631561004f, - 0.19701571210638652f, - 0.19714404452135204f, - 0.19727237355830765f, - 0.19740069921505438f, - 0.19752902148939344f, - 0.19765734037912616f, - 0.19778565588205368f, - 0.19791396799597746f, - 0.19804227671869887f, - 0.19817058204801935f, - 0.19829888398174045f, - 0.19842718251766375f, - 0.19855547765359088f, - 0.19868376938732354f, - 0.19881205771666352f, - 0.19894034263941257f, - 0.1990686241533726f, - 0.19919690225634556f, - 0.1993251769461334f, - 0.19945344822053815f, - 0.199581716077362f, - 0.19970998051440703f, - 0.19983824152947546f, - 0.1999664991203697f, - 0.20009475328489196f, - 0.20022300402084464f, - 0.20035125132603032f, - 0.20047949519825137f, - 0.20060773563531045f, - 0.20073597263501022f, - 0.20086420619515324f, - 0.2009924363135424f, - 0.2011206629879805f, - 0.20124888621627032f, - 0.20137710599621486f, - 0.20150532232561713f, - 0.2016335352022801f, - 0.20176174462400692f, - 0.2018899505886008f, - 0.20201815309386487f, - 0.20214635213760246f, - 0.20227454771761694f, - 0.2024027398317117f, - 0.20253092847769016f, - 0.20265911365335593f, - 0.2027872953565125f, - 0.20291547358496353f, - 0.20304364833651278f, - 0.20317181960896397f, - 0.2032999874001209f, - 0.2034281517077874f, - 0.20355631252976764f, - 0.20368446986386532f, - 0.2038126237078847f, - 0.20394077405962985f, - 0.20406892091690487f, - 0.2041970642775141f, - 0.2043252041392618f, - 0.20445334049995234f, - 0.2045814733573901f, - 0.2047096027093796f, - 0.20483772855372537f, - 0.20496585088823197f, - 0.20509396971070412f, - 0.2052220850189465f, - 0.20535019681076389f, - 0.20547830508396114f, - 0.20560640983634315f, - 0.20573451106571486f, - 0.20586260876988133f, - 0.2059907029466476f, - 0.2061187935938188f, - 0.2062468807092002f, - 0.20637496429059698f, - 0.20650304433581448f, - 0.2066311208426582f, - 0.20675919380893343f, - 0.2068872632324457f, - 0.20701532911100068f, - 0.20714339144240385f, - 0.207271450224461f, - 0.2073995054549779f, - 0.20752755713176022f, - 0.20765560525261395f, - 0.207783649815345f, - 0.20791169081775931f, - 0.20803972825766298f, - 0.20816776213286214f, - 0.20829579244116292f, - 0.20842381918037156f, - 0.20855184234829438f, - 0.20867986194273772f, - 0.208807877961508f, - 0.2089358904024117f, - 0.20906389926325536f, - 0.20919190454184558f, - 0.20931990623598906f, - 0.20944790434349247f, - 0.20957589886216263f, - 0.20970388978980642f, - 0.20983187712423065f, - 0.20995986086324236f, - 0.21008784100464864f, - 0.21021581754625648f, - 0.21034379048587304f, - 0.21047175982130567f, - 0.21059972555036147f, - 0.2107276876708479f, - 0.21085564618057237f, - 0.21098360107734224f, - 0.21111155235896514f, - 0.21123950002324865f, - 0.21136744406800034f, - 0.211495384491028f, - 0.21162332129013942f, - 0.21175125446314239f, - 0.21187918400784478f, - 0.21200710992205463f, - 0.21213503220357993f, - 0.21226295085022873f, - 0.21239086585980926f, - 0.21251877723012966f, - 0.21264668495899822f, - 0.21277458904422328f, - 0.21290248948361323f, - 0.21303038627497656f, - 0.2131582794161218f, - 0.21328616890485746f, - 0.21341405473899222f, - 0.2135419369163349f, - 0.21366981543469413f, - 0.21379769029187876f, - 0.2139255614856978f, - 0.2140534290139601f, - 0.21418129287447468f, - 0.21430915306505077f, - 0.21443700958349732f, - 0.21456486242762368f, - 0.21469271159523914f, - 0.21482055708415293f, - 0.2149483988921745f, - 0.21507623701711337f, - 0.215204071456779f, - 0.21533190220898102f, - 0.21545972927152907f, - 0.21558755264223287f, - 0.21571537231890217f, - 0.21584318829934687f, - 0.21597100058137683f, - 0.21609880916280205f, - 0.2162266140414326f, - 0.21635441521507848f, - 0.2164822126815499f, - 0.21661000643865713f, - 0.2167377964842104f, - 0.21686558281602009f, - 0.2169933654318966f, - 0.2171211443296504f, - 0.21724891950709205f, - 0.21737669096203222f, - 0.21750445869228147f, - 0.21763222269565052f, - 0.21775998296995036f, - 0.21788773951299162f, - 0.21801549232258535f, - 0.21814324139654256f, - 0.21827098673267423f, - 0.21839872832879148f, - 0.21852646618270558f, - 0.2186542002922277f, - 0.21878193065516915f, - 0.21890965726934136f, - 0.21903738013255572f, - 0.21916509924262373f, - 0.21929281459735697f, - 0.21942052619456712f, - 0.2195482340320658f, - 0.21967593810766478f, - 0.21980363841917597f, - 0.21993133496441117f, - 0.2200590277411823f, - 0.22018671674730156f, - 0.22031440198058083f, - 0.22044208343883234f, - 0.22056976111986837f, - 0.22069743502150108f, - 0.22082510514154285f, - 0.22095277147780618f, - 0.22108043402810337f, - 0.22120809279024709f, - 0.22133574776204992f, - 0.2214633989413245f, - 0.22159104632588356f, - 0.22171868991353993f, - 0.2218463297021064f, - 0.22197396568939598f, - 0.22210159787322165f, - 0.2222292262513964f, - 0.2223568508217334f, - 0.22248447158204587f, - 0.222612088530147f, - 0.22273970166385013f, - 0.22286731098096865f, - 0.22299491647931602f, - 0.2231225181567057f, - 0.22325011601095138f, - 0.2233777100398666f, - 0.22350530024126505f, - 0.22363288661296066f, - 0.22376046915276712f, - 0.22388804785849836f, - 0.2240156227279685f, - 0.22414319375899133f, - 0.22427076094938114f, - 0.2243983242969521f, - 0.22452588379951835f, - 0.22465343945489424f, - 0.22478099126089418f, - 0.22490853921533252f, - 0.2250360833160238f, - 0.22516362356078262f, - 0.22529115994742355f, - 0.2254186924737613f, - 0.22554622113761072f, - 0.22567374593678652f, - 0.22580126686910368f, - 0.22592878393237714f, - 0.2260562971244219f, - 0.22618380644305308f, - 0.2263113118860859f, - 0.22643881345133546f, - 0.22656631113661713f, - 0.2266938049397463f, - 0.22682129485853836f, - 0.2269487808908088f, - 0.22707626303437323f, - 0.22720374128704718f, - 0.2273312156466464f, - 0.22745868611098674f, - 0.2275861526778839f, - 0.22771361534515377f, - 0.22784107411061244f, - 0.22796852897207578f, - 0.22809597992736f, - 0.2282234269742813f, - 0.22835087011065572f, - 0.22847830933429972f, - 0.22860574464302963f, - 0.22873317603466184f, - 0.2288606035070129f, - 0.22898802705789933f, - 0.22911544668513778f, - 0.22924286238654495f, - 0.22937027415993763f, - 0.2294976820031326f, - 0.22962508591394679f, - 0.2297524858901972f, - 0.2298798819297008f, - 0.23000727403027474f, - 0.2301346621897362f, - 0.23026204640590237f, - 0.23038942667659057f, - 0.23051680299961824f, - 0.2306441753728027f, - 0.23077154379396153f, - 0.2308989082609124f, - 0.23102626877147278f, - 0.23115362532346043f, - 0.23128097791469324f, - 0.2314083265429889f, - 0.23153567120616542f, - 0.23166301190204083f, - 0.23179034862843303f, - 0.23191768138316027f, - 0.2320450101640407f, - 0.23217233496889256f, - 0.23229965579553416f, - 0.23242697264178397f, - 0.23255428550546037f, - 0.23268159438438188f, - 0.2328088992763672f, - 0.2329362001792349f, - 0.2330634970908037f, - 0.2331907900088925f, - 0.23331807893132006f, - 0.2334453638559054f, - 0.23357264478046752f, - 0.23369992170282544f, - 0.23382719462079835f, - 0.23395446353220545f, - 0.23408172843486602f, - 0.2342089893265994f, - 0.23433624620522506f, - 0.23446349906856243f, - 0.23459074791443105f, - 0.23471799274065067f, - 0.2348452335450408f, - 0.23497247032542132f, - 0.23509970307961206f, - 0.23522693180543292f, - 0.23535415650070385f, - 0.23548137716324485f, - 0.23560859379087612f, - 0.23573580638141778f, - 0.23586301493269005f, - 0.23599021944251333f, - 0.2361174199087079f, - 0.2362446163290943f, - 0.23637180870149305f, - 0.23649899702372468f, - 0.23662618129360988f, - 0.23675336150896942f, - 0.23688053766762407f, - 0.23700770976739466f, - 0.23713487780610223f, - 0.2372620417815677f, - 0.23738920169161218f, - 0.23751635753405687f, - 0.2376435093067229f, - 0.23777065700743158f, - 0.23789780063400434f, - 0.2380249401842625f, - 0.23815207565602764f, - 0.23827920704712136f, - 0.23840633435536515f, - 0.23853345757858085f, - 0.23866057671459023f, - 0.23878769176121506f, - 0.2389148027162773f, - 0.23904190957759897f, - 0.23916901234300209f, - 0.2392961110103088f, - 0.23942320557734129f, - 0.23955029604192182f, - 0.23967738240187275f, - 0.23980446465501654f, - 0.23993154279917553f, - 0.2400586168321724f, - 0.24018568675182975f, - 0.24031275255597018f, - 0.24043981424241656f, - 0.2405668718089917f, - 0.24069392525351843f, - 0.24082097457381976f, - 0.24094801976771885f, - 0.24107506083303865f, - 0.2412020977676024f, - 0.24132913056923344f, - 0.24145615923575492f, - 0.2415831837649904f, - 0.24171020415476335f, - 0.24183722040289715f, - 0.24196423250721555f, - 0.24209124046554223f, - 0.24221824427570088f, - 0.24234524393551535f, - 0.24247223944280955f, - 0.2425992307954074f, - 0.242726217991133f, - 0.24285320102781044f, - 0.24298017990326387f, - 0.24310715461531757f, - 0.24323412516179588f, - 0.24336109154052313f, - 0.2434880537493238f, - 0.24361501178602252f, - 0.24374196564844378f, - 0.24386891533441232f, - 0.2439958608417529f, - 0.2441228021682903f, - 0.2442497393118494f, - 0.24437667227025528f, - 0.24450360104133287f, - 0.24463052562290727f, - 0.24475744601280378f, - 0.24488436220884752f, - 0.24501127420886387f, - 0.2451381820106783f, - 0.2452650856121161f, - 0.24539198501100298f, - 0.24551888020516452f, - 0.24564577119242634f, - 0.2457726579706142f, - 0.24589954053755403f, - 0.24602641889107163f, - 0.24615329302899303f, - 0.24628016294914426f, - 0.2464070286493514f, - 0.24653389012744067f, - 0.2466607473812384f, - 0.2467876004085708f, - 0.24691444920726435f, - 0.24704129377514555f, - 0.24716813411004088f, - 0.24729497020977703f, - 0.24742180207218067f, - 0.24754862969507857f, - 0.24767545307629757f, - 0.24780227221366466f, - 0.2479290871050067f, - 0.24805589774815082f, - 0.24818270414092414f, - 0.2483095062811539f, - 0.24843630416666732f, - 0.24856309779529184f, - 0.2486898871648548f, - 0.24881667227318371f, - 0.24894345311810617f, - 0.24907022969744982f, - 0.24919700200904238f, - 0.24932377005071168f, - 0.24945053382028548f, - 0.24957729331559173f, - 0.24970404853445857f, - 0.24983079947471395f, - 0.2499575461341861f, - 0.25008428851070325f, - 0.2502110266020936f, - 0.25033776040618566f, - 0.2504644899208079f, - 0.2505912151437886f, - 0.25071793607295667f, - 0.2508446527061406f, - 0.2509713650411691f, - 0.2510980730758712f, - 0.25122477680807553f, - 0.25135147623561127f, - 0.25147817135630735f, - 0.2516048621679929f, - 0.25173154866849706f, - 0.2518582308556492f, - 0.2519849087272786f, - 0.25211158228121466f, - 0.25223825151528684f, - 0.25236491642732467f, - 0.25249157701515795f, - 0.2526182332766162f, - 0.2527448852095293f, - 0.25287153281172714f, - 0.2529981760810394f, - 0.2531248150152964f, - 0.2532514496123281f, - 0.2533780798699646f, - 0.2535047057860361f, - 0.25363132735837296f, - 0.2537579445848056f, - 0.2538845574631644f, - 0.25401116599127993f, - 0.2541377701669827f, - 0.2542643699881034f, - 0.2543909654524729f, - 0.2545175565579219f, - 0.2546441433022813f, - 0.25477072568338216f, - 0.25489730369905544f, - 0.2550238773471323f, - 0.25515044662544384f, - 0.2552770115318215f, - 0.2554035720640965f, - 0.2555301282201003f, - 0.2556566799976644f, - 0.2557832273946203f, - 0.25590977040879975f, - 0.25603630903803437f, - 0.25616284328015604f, - 0.25628937313299666f, - 0.256415898594388f, - 0.25654241966216224f, - 0.25666893633415144f, - 0.25679544860818776f, - 0.2569219564821034f, - 0.2570484599537308f, - 0.2571749590209022f, - 0.2573014536814502f, - 0.25742794393320734f, - 0.25755442977400617f, - 0.2576809112016794f, - 0.25780738821405985f, - 0.25793386080898034f, - 0.25806032898427383f, - 0.25818679273777334f, - 0.25831325206731187f, - 0.2584397069707226f, - 0.2585661574458388f, - 0.25869260349049367f, - 0.25881904510252074f, - 0.25894548227975345f, - 0.2590719150200252f, - 0.25919834332116964f, - 0.25932476718102054f, - 0.2594511865974116f, - 0.25957760156817666f, - 0.25970401209114974f, - 0.25983041816416463f, - 0.2599568197850555f, - 0.2600832169516566f, - 0.26020960966180195f, - 0.26033599791332596f, - 0.260462381704063f, - 0.2605887610318474f, - 0.26071513589451384f, - 0.26084150628989694f, - 0.26096787221583123f, - 0.2610942336701515f, - 0.26122059065069264f, - 0.26134694315528956f, - 0.2614732911817772f, - 0.2615996347279907f, - 0.26172597379176504f, - 0.26185230837093554f, - 0.26197863846333747f, - 0.2621049640668062f, - 0.2622312851791772f, - 0.26235760179828604f, - 0.2624839139219682f, - 0.2626102215480594f, - 0.2627365246743954f, - 0.262862823298812f, - 0.26298911741914516f, - 0.26311540703323094f, - 0.2632416921389052f, - 0.26336797273400414f, - 0.26349424881636413f, - 0.2636205203838213f, - 0.26374678743421204f, - 0.2638730499653729f, - 0.26399930797514026f, - 0.26412556146135086f, - 0.26425181042184137f, - 0.26437805485444843f, - 0.26450429475700893f, - 0.2646305301273598f, - 0.26475676096333806f, - 0.2648829872627807f, - 0.265009209023525f, - 0.265135426243408f, - 0.26526163892026716f, - 0.2653878470519398f, - 0.2655140506362634f, - 0.2656402496710754f, - 0.2657664441542136f, - 0.2658926340835155f, - 0.26601881945681893f, - 0.2661450002719618f, - 0.26627117652678195f, - 0.2663973482191174f, - 0.2665235153468064f, - 0.2666496779076869f, - 0.26677583589959714f, - 0.2669019893203755f, - 0.2670281381678605f, - 0.2671542824398904f, - 0.26728042213430386f, - 0.2674065572489395f, - 0.267532687781636f, - 0.26765881373023226f, - 0.267784935092567f, - 0.26791105186647923f, - 0.268037164049808f, - 0.2681632716403923f, - 0.2682893746360714f, - 0.26841547303468455f, - 0.26854156683407115f, - 0.26866765603207055f, - 0.26879374062652217f, - 0.2689198206152657f, - 0.26904589599614076f, - 0.269171966766987f, - 0.26929803292564447f, - 0.2694240944699528f, - 0.269550151397752f, - 0.2696762037068823f, - 0.26980225139518366f, - 0.2699282944604963f, - 0.2700543329006606f, - 0.2701803667135168f, - 0.2703063958969054f, - 0.27043242044866705f, - 0.2705584403666421f, - 0.27068445564867144f, - 0.27081046629259575f, - 0.27093647229625584f, - 0.27106247365749275f, - 0.2711884703741474f, - 0.2713144624440608f, - 0.27144044986507426f, - 0.2715664326350289f, - 0.2716924107517661f, - 0.2718183842131272f, - 0.2719443530169538f, - 0.2720703171610873f, - 0.2721962766433695f, - 0.272322231461642f, - 0.27244818161374657f, - 0.2725741270975252f, - 0.27270006791081985f, - 0.2728260040514725f, - 0.27295193551732516f, - 0.2730778623062203f, - 0.27320378441599996f, - 0.2733297018445066f, - 0.2734556145895827f, - 0.2735815226490706f, - 0.2737074260208131f, - 0.2738333247026528f, - 0.27395921869243245f, - 0.2740851079879949f, - 0.27421099258718307f, - 0.27433687248783994f, - 0.27446274768780865f, - 0.27458861818493235f, - 0.2747144839770542f, - 0.2748403450620176f, - 0.274966201437666f, - 0.2750920531018427f, - 0.2752179000523915f, - 0.2753437422871559f, - 0.2754695798039797f, - 0.27559541260070664f, - 0.2757212406751806f, - 0.2758470640252456f, - 0.2759728826487457f, - 0.2760986965435251f, - 0.2762245057074278f, - 0.2763503101382982f, - 0.2764761098339808f, - 0.27660190479231994f, - 0.2767276950111601f, - 0.27685348048834607f, - 0.27697926122172234f, - 0.2771050372091338f, - 0.2772308084484254f, - 0.2773565749374419f, - 0.2774823366740285f, - 0.2776080936560302f, - 0.2777338458812922f, - 0.27785959334765975f, - 0.2779853360529783f, - 0.2781110739950932f, - 0.27823680717185f, - 0.27836253558109425f, - 0.2784882592206716f, - 0.2786139780884279f, - 0.27873969218220906f, - 0.27886540149986083f, - 0.2789911060392293f, - 0.27911680579816045f, - 0.2792425007745006f, - 0.27936819096609594f, - 0.27949387637079287f, - 0.27961955698643765f, - 0.2797452328108769f, - 0.2798709038419571f, - 0.27999657007752504f, - 0.28012223151542737f, - 0.280247888153511f, - 0.28037353998962267f, - 0.2804991870216095f, - 0.28062482924731863f, - 0.280750466664597f, - 0.2808760992712921f, - 0.28100172706525106f, - 0.2811273500443213f, - 0.2812529682063504f, - 0.2813785815491859f, - 0.2815041900706754f, - 0.2816297937686666f, - 0.2817553926410074f, - 0.2818809866855457f, - 0.2820065759001294f, - 0.2821321602826067f, - 0.2822577398308256f, - 0.2823833145426343f, - 0.2825088844158813f, - 0.2826344494484148f, - 0.28276000963808345f, - 0.2828855649827357f, - 0.28301111548022023f, - 0.28313666112838576f, - 0.283262201925081f, - 0.2833877378681551f, - 0.28351326895545675f, - 0.28363879518483515f, - 0.2837643165541395f, - 0.2838898330612188f, - 0.2840153447039226f, - 0.2841408514801002f, - 0.28426635338760103f, - 0.28439185042427473f, - 0.2845173425879709f, - 0.28464282987653927f, - 0.2847683122878297f, - 0.284893789819692f, - 0.2850192624699761f, - 0.2851447302365322f, - 0.2852701931172104f, - 0.28539565110986087f, - 0.285521104212334f, - 0.28564655242248016f, - 0.28577199573814976f, - 0.28589743415719343f, - 0.2860228676774618f, - 0.28614829629680566f, - 0.2862737200130757f, - 0.286399138824123f, - 0.2865245527277983f, - 0.2866499617219528f, - 0.28677536580443774f, - 0.2869007649731042f, - 0.2870261592258036f, - 0.2871515485603873f, - 0.28727693297470674f, - 0.2874023124666136f, - 0.2875276870339595f, - 0.28765305667459606f, - 0.28777842138637527f, - 0.287903781167149f, - 0.28802913601476915f, - 0.2881544859270879f, - 0.28827983090195747f, - 0.28840517093722995f, - 0.2885305060307577f, - 0.2886558361803932f, - 0.28878116138398896f, - 0.2889064816393975f, - 0.2890317969444716f, - 0.2891571072970639f, - 0.28928241269502725f, - 0.28940771313621466f, - 0.2895330086184791f, - 0.2896582991396736f, - 0.2897835846976515f, - 0.2899088652902659f, - 0.2900341409153701f, - 0.2901594115708178f, - 0.29028467725446233f, - 0.29040993796415737f, - 0.2905351936977566f, - 0.2906604444531137f, - 0.2907856902280826f, - 0.29091093102051735f, - 0.2910361668282718f, - 0.29116139764920024f, - 0.29128662348115675f, - 0.29141184432199563f, - 0.2915370601695713f, - 0.2916622710217383f, - 0.291787476876351f, - 0.2919126777312641f, - 0.29203787358433236f, - 0.2921630644334105f, - 0.2922882502763535f, - 0.29241343111101636f, - 0.292538606935254f, - 0.29266377774692165f, - 0.2927889435438746f, - 0.29291410432396797f, - 0.2930392600850574f, - 0.2931644108249983f, - 0.2932895565416462f, - 0.2934146972328567f, - 0.2935398328964857f, - 0.29366496353038896f, - 0.2937900891324224f, - 0.29391520970044205f, - 0.29404032523230395f, - 0.2941654357258643f, - 0.29429054117897946f, - 0.29441564158950567f, - 0.29454073695529936f, - 0.29466582727421714f, - 0.29479091254411555f, - 0.29491599276285135f, - 0.29504106792828133f, - 0.29516613803826225f, - 0.2952912030906511f, - 0.29541626308330504f, - 0.29554131801408107f, - 0.29566636788083644f, - 0.2957914126814286f, - 0.2959164524137147f, - 0.2960414870755524f, - 0.2961665166647991f, - 0.2962915411793126f, - 0.2964165606169506f, - 0.296541574975571f, - 0.2966665842530315f, - 0.2967915884471902f, - 0.29691658755590533f, - 0.2970415815770349f, - 0.2971665705084372f, - 0.29729155434797067f, - 0.2974165330934936f, - 0.29754150674286456f, - 0.29766647529394225f, - 0.2977914387445853f, - 0.2979163970926525f, - 0.29804135033600265f, - 0.2981662984724949f, - 0.29829124149998804f, - 0.2984161794163414f, - 0.2985411122194142f, - 0.2986660399070657f, - 0.29879096247715525f, - 0.29891587992754237f, - 0.29904079225608665f, - 0.29916569946064775f, - 0.29929060153908543f, - 0.2994154984892595f, - 0.29954039030902985f, - 0.2996652769962566f, - 0.29979015854879976f, - 0.29991503496451954f, - 0.30003990624127624f, - 0.3001647723769301f, - 0.30028963336934184f, - 0.30041448921637176f, - 0.3005393399158806f, - 0.300664185465729f, - 0.3007890258637778f, - 0.300913861107888f, - 0.30103869119592036f, - 0.3011635161257362f, - 0.3012883358951965f, - 0.3014131505021625f, - 0.30153795994449567f, - 0.30166276422005733f, - 0.30178756332670903f, - 0.3019123572623124f, - 0.30203714602472903f, - 0.3021619296118208f, - 0.3022867080214495f, - 0.30241148125147715f, - 0.30253624929976575f, - 0.30266101216417757f, - 0.3027857698425746f, - 0.30291052233281923f, - 0.30303526963277394f, - 0.3031600117403012f, - 0.30328474865326355f, - 0.3034094803695237f, - 0.3035342068869443f, - 0.30365892820338825f, - 0.3037836443167186f, - 0.3039083552247982f, - 0.30403306092549026f, - 0.304157761416658f, - 0.3042824566961646f, - 0.3044071467618735f, - 0.3045318316116483f, - 0.30465651124335236f, - 0.3047811856548494f, - 0.3049058548440031f, - 0.3050305188086775f, - 0.30515517754673627f, - 0.30527983105604356f, - 0.30540447933446335f, - 0.30552912237985996f, - 0.30565376019009755f, - 0.3057783927630406f, - 0.30590302009655346f, - 0.30602764218850076f, - 0.30615225903674703f, - 0.30627687063915704f, - 0.30640147699359566f, - 0.3065260780979277f, - 0.3066506739500182f, - 0.30677526454773235f, - 0.30689984988893515f, - 0.3070244299714919f, - 0.30714900479326807f, - 0.30727357435212893f, - 0.3073981386459402f, - 0.3075226976725674f, - 0.30764725142987615f, - 0.30777179991573245f, - 0.3078963431280021f, - 0.3080208810645511f, - 0.3081454137232455f, - 0.3082699411019515f, - 0.3083944631985353f, - 0.3085189800108633f, - 0.308643491536802f, - 0.30876799777421776f, - 0.30889249872097735f, - 0.3090169943749474f, - 0.3091414847339948f, - 0.30926596979598625f, - 0.309390449558789f, - 0.3095149240202699f, - 0.3096393931782962f, - 0.30976385703073517f, - 0.3098883155754541f, - 0.3100127688103205f, - 0.3101372167332019f, - 0.3102616593419658f, - 0.31038609663447997f, - 0.31051052860861234f, - 0.3106349552622306f, - 0.31075937659320285f, - 0.3108837925993972f, - 0.3110082032786816f, - 0.31113260862892456f, - 0.3112570086479944f, - 0.31138140333375935f, - 0.3115057926840881f, - 0.31163017669684934f, - 0.3117545553699116f, - 0.3118789287011438f, - 0.31200329668841487f, - 0.3121276593295937f, - 0.31225201662254937f, - 0.31237636856515116f, - 0.3125007151552682f, - 0.31262505639077f, - 0.31274939226952586f, - 0.3128737227894054f, - 0.3129980479482782f, - 0.31312236774401403f, - 0.31324668217448265f, - 0.313370991237554f, - 0.3134952949310981f, - 0.31361959325298505f, - 0.3137438862010849f, - 0.3138681737732681f, - 0.31399245596740494f, - 0.31411673278136587f, - 0.3142410042130214f, - 0.31436527026024225f, - 0.3144895309208991f, - 0.31461378619286284f, - 0.31473803607400436f, - 0.3148622805621946f, - 0.3149865196553048f, - 0.31511075335120603f, - 0.31523498164776964f, - 0.315359204542867f, - 0.31548342203436963f, - 0.315607634120149f, - 0.31573184079807687f, - 0.3158560420660249f, - 0.315980237921865f, - 0.3161044283634691f, - 0.3162286133887093f, - 0.3163527929954575f, - 0.3164769671815861f, - 0.31660113594496736f, - 0.3167252992834737f, - 0.31684945719497765f, - 0.3169736096773517f, - 0.31709775672846857f, - 0.31722189834620107f, - 0.3173460345284221f, - 0.3174701652730045f, - 0.3175942905778214f, - 0.3177184104407459f, - 0.3178425248596513f, - 0.3179666338324109f, - 0.3180907373568982f, - 0.31821483543098655f, - 0.3183389280525497f, - 0.31846301521946135f, - 0.3185870969295952f, - 0.31871117318082526f, - 0.31883524397102553f, - 0.31895930929807f, - 0.3190833691598328f, - 0.3192074235541883f, - 0.3193314724790109f, - 0.3194555159321749f, - 0.319579553911555f, - 0.3197035864150258f, - 0.3198276134404619f, - 0.3199516349857384f, - 0.32007565104873f, - 0.3201996616273118f, - 0.3203236667193589f, - 0.32044766632274646f, - 0.3205716604353499f, - 0.32069564905504455f, - 0.3208196321797059f, - 0.3209436098072095f, - 0.321067581935431f, - 0.3211915485622463f, - 0.32131550968553113f, - 0.3214394653031616f, - 0.3215634154130136f, - 0.32168736001296333f, - 0.32181129910088707f, - 0.3219352326746612f, - 0.322059160732162f, - 0.3221830832712662f, - 0.32230700028985027f, - 0.3224309117857909f, - 0.322554817756965f, - 0.32267871820124944f, - 0.32280261311652125f, - 0.3229265025006575f, - 0.3230503863515353f, - 0.32317426466703203f, - 0.3232981374450251f, - 0.3234220046833919f, - 0.32354586638001f, - 0.3236697225327571f, - 0.3237935731395109f, - 0.32391741819814934f, - 0.3240412577065504f, - 0.324165091662592f, - 0.32428892006415233f, - 0.3244127429091096f, - 0.32453656019534216f, - 0.3246603719207285f, - 0.3247841780831471f, - 0.32490797868047644f, - 0.3250317737105954f, - 0.3251555631713827f, - 0.3252793470607173f, - 0.32540312537647814f, - 0.32552689811654445f, - 0.32565066527879516f, - 0.32577442686110974f, - 0.32589818286136757f, - 0.32602193327744805f, - 0.3261456781072308f, - 0.32626941734859544f, - 0.3263931509994218f, - 0.32651687905758964f, - 0.326640601520979f, - 0.3267643183874699f, - 0.32688802965494246f, - 0.32701173532127703f, - 0.32713543538435375f, - 0.3272591298420532f, - 0.3273828186922559f, - 0.3275065019328424f, - 0.3276301795616935f, - 0.32775385157669f, - 0.32787751797571274f, - 0.32800117875664286f, - 0.3281248339173614f, - 0.32824848345574953f, - 0.32837212736968857f, - 0.3284957656570599f, - 0.32861939831574505f, - 0.3287430253436256f, - 0.32886664673858323f, - 0.3289902624984997f, - 0.3291138726212569f, - 0.32923747710473683f, - 0.3293610759468215f, - 0.32948466914539315f, - 0.329608256698334f, - 0.32973183860352645f, - 0.3298554148588529f, - 0.32997898546219584f, - 0.33010255041143816f, - 0.33022610970446237f, - 0.33034966333915144f, - 0.3304732113133883f, - 0.33059675362505586f, - 0.3307202902720374f, - 0.33084382125221623f, - 0.33096734656347543f, - 0.3310908662036986f, - 0.33121438017076926f, - 0.33133788846257095f, - 0.33146139107698747f, - 0.3315848880119026f, - 0.33170837926520025f, - 0.33183186483476446f, - 0.33195534471847926f, - 0.3320788189142289f, - 0.3322022874198977f, - 0.3323257502333702f, - 0.3324492073525306f, - 0.33257265877526365f, - 0.3326961044994541f, - 0.3328195445229866f, - 0.3329429788437462f, - 0.3330664074596178f, - 0.3331898303684865f, - 0.3333132475682373f, - 0.3334366590567559f, - 0.3335600648319273f, - 0.3336834648916371f, - 0.33380685923377096f, - 0.33393024785621434f, - 0.3340536307568532f, - 0.3341770079335734f, - 0.33430037938426077f, - 0.3344237451068015f, - 0.3345471050990817f, - 0.3346704593589876f, - 0.3347938078844056f, - 0.33491715067322225f, - 0.3350404877233239f, - 0.33516381903259734f, - 0.3352871445989293f, - 0.33541046442020656f, - 0.3355337784943162f, - 0.3356570868191452f, - 0.33578038939258065f, - 0.3359036862125099f, - 0.3360269772768201f, - 0.336150262583399f, - 0.33627354213013383f, - 0.33639681591491244f, - 0.3365200839356225f, - 0.33664334619015174f, - 0.3367666026763883f, - 0.33688985339222005f, - 0.33701309833553517f, - 0.33713633750422195f, - 0.3372595708961686f, - 0.3373827985092636f, - 0.3375060203413956f, - 0.33762923639045306f, - 0.3377524466543248f, - 0.33787565113089957f, - 0.3379988498180663f, - 0.33812204271371415f, - 0.3382452298157322f, - 0.3383684111220095f, - 0.3384915866304355f, - 0.3386147563388996f, - 0.33873792024529137f, - 0.33886107834750034f, - 0.3389842306434164f, - 0.33910737713092914f, - 0.3392305178079286f, - 0.3393536526723048f, - 0.33947678172194784f, - 0.3395999049547479f, - 0.3397230223685954f, - 0.3398461339613807f, - 0.3399692397309942f, - 0.34009233967532676f, - 0.3402154337922689f, - 0.34033852207971144f, - 0.34046160453554547f, - 0.3405846811576618f, - 0.3407077519439516f, - 0.3408308168923062f, - 0.3409538760006168f, - 0.34107692926677485f, - 0.3411999766886718f, - 0.3413230182641994f, - 0.3414460539912493f, - 0.34156908386771334f, - 0.3416921078914833f, - 0.3418151260604514f, - 0.3419381383725096f, - 0.34206114482555017f, - 0.34218414541746545f, - 0.34230714014614794f, - 0.34243012900948994f, - 0.34255311200538424f, - 0.3426760891317235f, - 0.3427990603864005f, - 0.3429220257673083f, - 0.34304498527233984f, - 0.3431679388993882f, - 0.34329088664634655f, - 0.3434138285111084f, - 0.34353676449156706f, - 0.34365969458561607f, - 0.3437826187911491f, - 0.3439055371060597f, - 0.3440284495282419f, - 0.3441513560555896f, - 0.3442742566859968f, - 0.34439715141735755f, - 0.3445200402475662f, - 0.34464292317451706f, - 0.3447658001961045f, - 0.34488867131022305f, - 0.3450115365147675f, - 0.34513439580763244f, - 0.34525724918671274f, - 0.3453800966499033f, - 0.3455029381950993f, - 0.3456257738201957f, - 0.345748603523088f, - 0.34587142730167125f, - 0.34599424515384103f, - 0.34611705707749296f, - 0.34623986307052257f, - 0.3463626631308257f, - 0.3464854572562982f, - 0.3466082454448359f, - 0.346731027694335f, - 0.3468538040026917f, - 0.3469765743678021f, - 0.34709933878756266f, - 0.3472220972598698f, - 0.3473448497826201f, - 0.3474675963537102f, - 0.34759033697103703f, - 0.34771307163249726f, - 0.347835800335988f, - 0.34795852307940617f, - 0.34808123986064915f, - 0.34820395067761406f, - 0.3483266555281984f, - 0.3484493544102996f, - 0.3485720473218152f, - 0.34869473426064296f, - 0.3488174152246807f, - 0.3489400902118262f, - 0.3490627592199776f, - 0.34918542224703286f, - 0.34930807929089025f, - 0.34943073034944805f, - 0.3495533754206047f, - 0.3496760145022587f, - 0.3497986475923088f, - 0.3499212746886534f, - 0.3500438957891915f, - 0.3501665108918221f, - 0.35028911999444406f, - 0.35041172309495666f, - 0.350534320191259f, - 0.3506569112812504f, - 0.3507794963628305f, - 0.3509020754338987f, - 0.35102464849235454f, - 0.3511472155360979f, - 0.35126977656302855f, - 0.3513923315710465f, - 0.3515148805580518f, - 0.3516374235219446f, - 0.35175996046062513f, - 0.35188249137199373f, - 0.352005016253951f, - 0.3521275351043973f, - 0.3522500479212335f, - 0.3523725547023603f, - 0.3524950554456785f, - 0.3526175501490892f, - 0.35274003881049343f, - 0.3528625214277924f, - 0.3529849979988874f, - 0.35310746852167985f, - 0.3532299329940712f, - 0.35335239141396296f, - 0.35347484377925714f, - 0.3535972900878553f, - 0.35371973033765935f, - 0.3538421645265715f, - 0.35396459265249364f, - 0.35408701471332815f, - 0.3542094307069774f, - 0.3543318406313437f, - 0.3544542444843296f, - 0.35457664226383784f, - 0.354699033967771f, - 0.3548214195940322f, - 0.35494379914052415f, - 0.35506617260515f, - 0.3551885399858129f, - 0.3553109012804161f, - 0.355433256486863f, - 0.3555556056030571f, - 0.35567794862690205f, - 0.35580028555630133f, - 0.35592261638915884f, - 0.3560449411233785f, - 0.35616725975686425f, - 0.35628957228752023f, - 0.35641187871325075f, - 0.3565341790319599f, - 0.3566564732415522f, - 0.35677876133993225f, - 0.3569010433250046f, - 0.357023319194674f, - 0.35714558894684534f, - 0.35726785257942334f, - 0.3573901100903133f, - 0.3575123614774203f, - 0.35763460673864955f, - 0.3577568458719064f, - 0.3578790788750964f, - 0.35800130574612504f, - 0.358123526482898f, - 0.35824574108332113f, - 0.35836794954530027f, - 0.3584901518667414f, - 0.3586123480455506f, - 0.3587345380796341f, - 0.3588567219668983f, - 0.35897889970524943f, - 0.3591010712925941f, - 0.359223236726839f, - 0.35934539600589066f, - 0.3594675491276561f, - 0.3595896960900422f, - 0.3597118368909561f, - 0.35983397152830476f, - 0.35995609999999545f, - 0.3600782223039357f, - 0.36020033843803295f, - 0.3603224484001947f, - 0.36044455218832855f, - 0.3605666498003424f, - 0.36068874123414413f, - 0.36081082648764173f, - 0.36093290555874336f, - 0.3610549784453571f, - 0.36117704514539134f, - 0.36129910565675444f, - 0.361421159977355f, - 0.36154320810510165f, - 0.3616652500379031f, - 0.3617872857736682f, - 0.3619093153103059f, - 0.36203133864572523f, - 0.3621533557778354f, - 0.36227536670454563f, - 0.36239737142376544f, - 0.36251936993340406f, - 0.3626413622313712f, - 0.3627633483155767f, - 0.36288532818393016f, - 0.36300730183434154f, - 0.36312926926472094f, - 0.3632512304729783f, - 0.363373185457024f, - 0.3634951342147684f, - 0.3636170767441219f, - 0.36373901304299494f, - 0.3638609431092983f, - 0.3639828669409427f, - 0.364104784535839f, - 0.3642266958918982f, - 0.36434860100703137f, - 0.36447049987914965f, - 0.3645923925061644f, - 0.364714278885987f, - 0.36483615901652894f, - 0.36495803289570194f, - 0.3650799005214176f, - 0.3652017618915878f, - 0.36532361700412447f, - 0.36544546585693966f, - 0.3655673084479455f, - 0.3656891447750543f, - 0.3658109748361784f, - 0.36593279862923017f, - 0.3660546161521225f, - 0.36617642740276773f, - 0.3662982323790788f, - 0.3664200310789687f, - 0.36654182350035025f, - 0.36666360964113676f, - 0.3667853894992414f, - 0.3669071630725774f, - 0.36702893035905837f, - 0.3671506913565977f, - 0.36727244606310916f, - 0.36739419447650645f, - 0.36751593659470355f, - 0.36763767241561435f, - 0.3677594019371529f, - 0.3678811251572335f, - 0.3680028420737703f, - 0.3681245526846779f, - 0.36824625698787083f, - 0.3683679549812635f, - 0.36848964666277084f, - 0.3686113320303076f, - 0.3687330110817888f, - 0.3688546838151295f, - 0.3689763502282448f, - 0.36909801031905004f, - 0.36921966408546053f, - 0.3693413115253919f, - 0.36946295263675966f, - 0.3695845874174795f, - 0.36970621586546737f, - 0.36982783797863905f, - 0.3699494537549106f, - 0.3700710631921983f, - 0.3701926662884183f, - 0.3703142630414869f, - 0.3704358534493207f, - 0.3705574375098362f, - 0.37067901522095015f, - 0.37080058658057935f, - 0.3709221515866406f, - 0.371043710237051f, - 0.3711652625297277f, - 0.3712868084625879f, - 0.3714083480335489f, - 0.37152988124052827f, - 0.3716514080814434f, - 0.3717729285542121f, - 0.37189444265675214f, - 0.3720159503869814f, - 0.37213745174281776f, - 0.3722589467221795f, - 0.37238043532298476f, - 0.3725019175431518f, - 0.3726233933805992f, - 0.37274486283324537f, - 0.372866325899009f, - 0.37298778257580895f, - 0.37310923286156394f, - 0.37323067675419297f, - 0.3733521142516153f, - 0.37347354535175f, - 0.37359497005251635f, - 0.3737163883518339f, - 0.373837800247622f, - 0.3739592057378004f, - 0.37408060482028893f, - 0.37420199749300725f, - 0.3743233837538755f, - 0.3744447636008137f, - 0.374566137031742f, - 0.37468750404458073f, - 0.3748088646372504f, - 0.37493021880767136f, - 0.3750515665537643f, - 0.37517290787345f, - 0.37529424276464923f, - 0.3754155712252831f, - 0.37553689325327244f, - 0.3756582088465387f, - 0.37577951800300297f, - 0.3759008207205867f, - 0.3760221169972115f, - 0.3761434068307989f, - 0.37626469021927056f, - 0.3763859671605485f, - 0.3765072376525545f, - 0.3766285016932107f, - 0.3767497592804394f, - 0.37687101041216264f, - 0.37699225508630296f, - 0.37711349330078286f, - 0.3772347250535249f, - 0.37735595034245184f, - 0.37747716916548657f, - 0.377598381520552f, - 0.37771958740557104f, - 0.3778407868184671f, - 0.37796197975716334f, - 0.37808316621958316f, - 0.3782043462036501f, - 0.3783255197072877f, - 0.37844668672841975f, - 0.37856784726497006f, - 0.37868900131486255f, - 0.3788101488760214f, - 0.37893128994637065f, - 0.3790524245238346f, - 0.37917355260633756f, - 0.3792946741918043f, - 0.37941578927815917f, - 0.37953689786332706f, - 0.37965799994523275f, - 0.37977909552180106f, - 0.37990018459095726f, - 0.38002126715062645f, - 0.38014234319873386f, - 0.3802634127332049f, - 0.38038447575196516f, - 0.3805055322529401f, - 0.3806265822340556f, - 0.3807476256932375f, - 0.3808686626284116f, - 0.38098969303750413f, - 0.3811107169184412f, - 0.381231734269149f, - 0.38135274508755407f, - 0.38147374937158296f, - 0.38159474711916214f, - 0.3817157383282184f, - 0.3818367229966787f, - 0.38195770112246985f, - 0.382078672703519f, - 0.3821996377377533f, - 0.38232059622310005f, - 0.38244154815748665f, - 0.3825624935388407f, - 0.3826834323650898f, - 0.38280436463416156f, - 0.38292529034398404f, - 0.3830462094924851f, - 0.3831671220775929f, - 0.3832880280972355f, - 0.3834089275493413f, - 0.3835298204318387f, - 0.3836507067426563f, - 0.38377158647972265f, - 0.3838924596409666f, - 0.3840133262243169f, - 0.38413418622770257f, - 0.3842550396490528f, - 0.3843758864862967f, - 0.3844967267373636f, - 0.38461756040018313f, - 0.3847383874726845f, - 0.3848592079527976f, - 0.38498002183845215f, - 0.385100829127578f, - 0.38522162981810515f, - 0.3853424239079639f, - 0.3854632113950842f, - 0.38558399227739654f, - 0.3857047665528313f, - 0.3858255342193191f, - 0.38594629527479063f, - 0.38606704971717676f, - 0.3861877975444082f, - 0.38630853875441595f, - 0.3864292733451314f, - 0.3865500013144856f, - 0.3866707226604099f, - 0.38679143738083605f, - 0.3869121454736952f, - 0.3870328469369193f, - 0.38715354176844013f, - 0.38727422996618965f, - 0.38739491152809985f, - 0.387515586452103f, - 0.3876362547361311f, - 0.3877569163781168f, - 0.3878775713759925f, - 0.3879982197276907f, - 0.3881188614311443f, - 0.38823949648428613f, - 0.388360124885049f, - 0.38848074663136606f, - 0.3886013617211705f, - 0.38872197015239557f, - 0.38884257192297467f, - 0.38896316703084144f, - 0.38908375547392937f, - 0.3892043372501723f, - 0.389324912357504f, - 0.3894454807938585f, - 0.3895660425571699f, - 0.3896865976453725f, - 0.38980714605640043f, - 0.38992768778818826f, - 0.3900482228386705f, - 0.3901687512057818f, - 0.390289272887457f, - 0.39040978788163094f, - 0.39053029618623863f, - 0.3906507977992152f, - 0.39077129271849587f, - 0.39089178094201604f, - 0.39101226246771104f, - 0.3911327372935168f, - 0.3912532054173686f, - 0.3913736668372024f, - 0.3914941215509542f, - 0.39161456955656f, - 0.3917350108519559f, - 0.3918554454350784f, - 0.3919758733038635f, - 0.392096294456248f, - 0.39221670889016835f, - 0.3923371166035614f, - 0.392457517594364f, - 0.3925779118605131f, - 0.39269829939994566f, - 0.3928186802105989f, - 0.39293905429041026f, - 0.39305942163731705f, - 0.3931797822492568f, - 0.39330013612416737f, - 0.39342048325998624f, - 0.3935408236546514f, - 0.39366115730610085f, - 0.39378148421227277f, - 0.3939018043711053f, - 0.394022117780537f, - 0.39414242443850594f, - 0.39426272434295095f, - 0.39438301749181076f, - 0.39450330388302407f, - 0.3946235835145299f, - 0.39474385638426723f, - 0.3948641224901752f, - 0.39498438183019313f, - 0.39510463440226035f, - 0.39522488020431645f, - 0.39534511923430093f, - 0.3954653514901537f, - 0.39558557696981445f, - 0.3957057956712232f, - 0.3958260075923201f, - 0.39594621273104524f, - 0.396066411085339f, - 0.3961866026531419f, - 0.3963067874323943f, - 0.39642696542103695f, - 0.3965471366170107f, - 0.39666730101825637f, - 0.39678745862271503f, - 0.39690760942832776f, - 0.39702775343303587f, - 0.3971478906347806f, - 0.3972680210315036f, - 0.39738814462114636f, - 0.3975082614016506f, - 0.3976283713709582f, - 0.39774847452701106f, - 0.3978685708677513f, - 0.397988660391121f, - 0.39810874309506256f, - 0.39822881897751833f, - 0.39834888803643087f, - 0.398468950269743f, - 0.3985890056753972f, - 0.3987090542513364f, - 0.3988290959955037f, - 0.3989491309058422f, - 0.39906915898029516f, - 0.39918918021680594f, - 0.39930919461331793f, - 0.39942920216777467f, - 0.39954920287811996f, - 0.3996691967422976f, - 0.39978918375825157f, - 0.39990916392392595f, - 0.40002913723726474f, - 0.40014910369621237f, - 0.4002690632987132f, - 0.40038901604271177f, - 0.4005089619261527f, - 0.40062890094698084f, - 0.40074883310314097f, - 0.4008687583925781f, - 0.4009886768132373f, - 0.4011085883630639f, - 0.4012284930400032f, - 0.4013483908420007f, - 0.40146828176700194f, - 0.4015881658129526f, - 0.40170804297779855f, - 0.4018279132594857f, - 0.4019477766559601f, - 0.402067633165168f, - 0.4021874827850556f, - 0.40230732551356935f, - 0.40242716134865575f, - 0.4025469902882614f, - 0.4026668123303332f, - 0.40278662747281796f, - 0.40290643571366264f, - 0.4030262370508144f, - 0.4031460314822205f, - 0.40326581900582825f, - 0.4033855996195851f, - 0.40350537332143877f, - 0.4036251401093368f, - 0.4037448999812271f, - 0.40386465293505763f, - 0.4039843989687764f, - 0.40410413808033163f, - 0.40422387026767176f, - 0.404343595528745f, - 0.4044633138615f, - 0.4045830252638853f, - 0.40470272973384974f, - 0.4048224272693423f, - 0.4049421178683121f, - 0.4050618015287079f, - 0.4051814782484793f, - 0.4053011480255754f, - 0.40542081085794585f, - 0.4055404667435402f, - 0.4056601156803084f, - 0.4057797576662f, - 0.40589939269916503f, - 0.4060190207771536f, - 0.40613864189811605f, - 0.40625825606000254f, - 0.4063778632607637f, - 0.40649746349834975f, - 0.4066170567707117f, - 0.40673664307580015f, - 0.40685622241156616f, - 0.40697579477596074f, - 0.40709536016693504f, - 0.4072149185824403f, - 0.4073344700204279f, - 0.40745401447884944f, - 0.40757355195565653f, - 0.40769308244880087f, - 0.4078126059562345f, - 0.40793212247590915f, - 0.40805163200577715f, - 0.4081711345437907f, - 0.4082906300879021f, - 0.4084101186360639f, - 0.40852960018622864f, - 0.40864907473634904f, - 0.4087685422843779f, - 0.4088880028282683f, - 0.4090074563659732f, - 0.40912690289544584f, - 0.4092463424146396f, - 0.4093657749215077f, - 0.40948520041400394f, - 0.4096046188900819f, - 0.4097240303476953f, - 0.4098434347847982f, - 0.40996283219934454f, - 0.4100822225892885f, - 0.41020160595258437f, - 0.41032098228718655f, - 0.4104403515910495f, - 0.4105597138621279f, - 0.4106790690983767f, - 0.4107984172977505f, - 0.4109177584582044f, - 0.4110370925776935f, - 0.411156419654173f, - 0.4112757396855984f, - 0.41139505266992515f, - 0.4115143586051088f, - 0.4116336574891051f, - 0.4117529493198698f, - 0.41187223409535895f, - 0.4119915118135287f, - 0.4121107824723353f, - 0.41223004606973485f, - 0.4123493026036839f, - 0.4124685520721391f, - 0.4125877944730571f, - 0.41270702980439467f, - 0.41282625806410883f, - 0.4129454792501566f, - 0.4130646933604951f, - 0.4131839003930817f, - 0.4133031003458738f, - 0.41342229321682894f, - 0.4135414790039047f, - 0.41366065770505905f, - 0.41377982931824975f, - 0.4138989938414348f, - 0.41401815127257247f, - 0.414137301609621f, - 0.41425644485053864f, - 0.41437558099328414f, - 0.41449471003581595f, - 0.41461383197609286f, - 0.4147329468120738f, - 0.4148520545417177f, - 0.4149711551629838f, - 0.4150902486738312f, - 0.41520933507221935f, - 0.41532841435610773f, - 0.4154474865234559f, - 0.41556655157222366f, - 0.4156856095003708f, - 0.4158046603058574f, - 0.4159237039866434f, - 0.4160427405406891f, - 0.4161617699659549f, - 0.41628079226040116f, - 0.41639980742198845f, - 0.4165188154486777f, - 0.41663781633842945f, - 0.4167568100892048f, - 0.4168757966989648f, - 0.4169947761656706f, - 0.4171137484872836f, - 0.4172327136617653f, - 0.4173516716870771f, - 0.4174706225611807f, - 0.417589566282038f, - 0.4177085028476109f, - 0.41782743225586144f, - 0.417946354504752f, - 0.4180652695922445f, - 0.41818417751630155f, - 0.41830307827488566f, - 0.4184219718659596f, - 0.41854085828748605f, - 0.41865973753742813f, - 0.4187786096137486f, - 0.4188974745144106f, - 0.4190163322373777f, - 0.4191351827806131f, - 0.4192540261420804f, - 0.4193728623197433f, - 0.4194916913115654f, - 0.4196105131155107f, - 0.41972932772954324f, - 0.4198481351516271f, - 0.4199669353797266f, - 0.42008572841180625f, - 0.42020451424583033f, - 0.4203232928797636f, - 0.4204420643115708f, - 0.4205608285392168f, - 0.4206795855606666f, - 0.42079833537388545f, - 0.4209170779768384f, - 0.421035813367491f, - 0.42115454154380866f, - 0.421273262503757f, - 0.42139197624530184f, - 0.4215106827664091f, - 0.4216293820650445f, - 0.4217480741391745f, - 0.42186675898676507f, - 0.42198543660578275f, - 0.422104106994194f, - 0.42222277014996545f, - 0.42234142607106373f, - 0.4224600747554558f, - 0.4225787162011086f, - 0.42269735040598927f, - 0.42281597736806503f, - 0.4229345970853033f, - 0.42305320955567144f, - 0.42317181477713717f, - 0.42329041274766815f, - 0.42340900346523225f, - 0.42352758692779746f, - 0.423646163133332f, - 0.4237647320798039f, - 0.4238832937651816f, - 0.4240018481874336f, - 0.4241203953445284f, - 0.42423893523443484f, - 0.4243574678551219f, - 0.42447599320455826f, - 0.4245945112807131f, - 0.42471302208155576f, - 0.4248315256050555f, - 0.42495002184918185f, - 0.42506851081190444f, - 0.4251869924911929f, - 0.425305466885017f, - 0.4254239339913469f, - 0.4255423938081526f, - 0.4256608463334044f, - 0.4257792915650727f, - 0.4258977295011277f, - 0.4260161601395402f, - 0.42613458347828087f, - 0.42625299951532064f, - 0.42637140824863035f, - 0.4264898096761813f, - 0.42660820379594444f, - 0.4267265906058913f, - 0.4268449701039933f, - 0.4269633422882221f, - 0.42708170715654936f, - 0.427200064706947f, - 0.42731841493738687f, - 0.4274367578458412f, - 0.4275550934302821f, - 0.427673421688682f, - 0.42779174261901337f, - 0.42791005621924877f, - 0.42802836248736104f, - 0.4281466614213229f, - 0.4282649530191074f, - 0.4283832372786876f, - 0.4285015141980368f, - 0.4286197837751283f, - 0.42873804600793564f, - 0.4288563008944324f, - 0.42897454843259225f, - 0.4290927886203891f, - 0.4292110214557969f, - 0.42932924693678987f, - 0.42944746506134224f, - 0.4295656758274283f, - 0.4296838792330225f, - 0.4298020752760995f, - 0.429920263954634f, - 0.430038445266601f, - 0.4301566192099755f, - 0.4302747857827325f, - 0.43039294498284725f, - 0.4305110968082951f, - 0.43062924125705165f, - 0.43074737832709253f, - 0.43086550801639356f, - 0.43098363032293036f, - 0.4311017452446791f, - 0.43121985277961594f, - 0.4313379529257171f, - 0.4314560456809589f, - 0.4315741310433181f, - 0.431692209010771f, - 0.43181027958129453f, - 0.4319283427528656f, - 0.4320463985234612f, - 0.43216444689105854f, - 0.4322824878536348f, - 0.43240052140916746f, - 0.43251854755563396f, - 0.432636566291012f, - 0.43275457761327935f, - 0.4328725815204139f, - 0.4329905780103938f, - 0.43310856708119705f, - 0.433226548730802f, - 0.4333445229571871f, - 0.4334624897583309f, - 0.433580449132212f, - 0.4336984010768093f, - 0.4338163455901016f, - 0.43393428267006806f, - 0.4340522123146878f, - 0.4341701345219402f, - 0.4342880492898046f, - 0.4344059566162606f, - 0.4345238564992879f, - 0.4346417489368663f, - 0.43475963392697575f, - 0.4348775114675963f, - 0.43499538155670825f, - 0.43511324419229186f, - 0.4352310993723275f, - 0.4353489470947959f, - 0.43546678735767763f, - 0.43558462015895366f, - 0.43570244549660486f, - 0.4358202633686125f, - 0.43593807377295757f, - 0.4360558767076215f, - 0.43617367217058584f, - 0.43629146015983206f, - 0.436409240673342f, - 0.43652701370909763f, - 0.4366447792650807f, - 0.4367625373392735f, - 0.4368802879296581f, - 0.4369980310342171f, - 0.4371157666509328f, - 0.43723349477778817f, - 0.43735121541276556f, - 0.43746892855384795f, - 0.4375866341990185f, - 0.4377043323462603f, - 0.43782202299355666f, - 0.437939706138891f, - 0.43805738178024667f, - 0.4381750499156074f, - 0.43829271054295715f, - 0.43841036366027963f, - 0.438528009265559f, - 0.4386456473567795f, - 0.4387632779319252f, - 0.43888090098898075f, - 0.4389985165259306f, - 0.43911612454075943f, - 0.43923372503145214f, - 0.4393513179959937f, - 0.43946890343236905f, - 0.4395864813385635f, - 0.43970405171256227f, - 0.43982161455235097f, - 0.4399391698559151f, - 0.4400567176212405f, - 0.4401742578463128f, - 0.4402917905291182f, - 0.4404093156676427f, - 0.4405268332598725f, - 0.4406443433037941f, - 0.4407618457973939f, - 0.44087934073865853f, - 0.4409968281255748f, - 0.4411143079561295f, - 0.4412317802283098f, - 0.44134924494010264f, - 0.4414667020894955f, - 0.4415841516744756f, - 0.44170159369303064f, - 0.44181902814314816f, - 0.441936455022816f, - 0.4420538743300221f, - 0.44217128606275447f, - 0.4422886902190013f, - 0.4424060867967509f, - 0.44252347579399176f, - 0.4426408572087124f, - 0.44275823103890144f, - 0.44287559728254794f, - 0.44299295593764076f, - 0.4431103070021689f, - 0.4432276504741216f, - 0.4433449863514882f, - 0.4434623146322584f, - 0.4435796353144215f, - 0.44369694839596757f, - 0.44381425387488616f, - 0.4439315517491674f, - 0.44404884201680145f, - 0.44416612467577854f, - 0.4442833997240891f, - 0.44440066715972376f, - 0.4445179269806729f, - 0.44463517918492745f, - 0.44475242377047836f, - 0.44486966073531664f, - 0.4449868900774335f, - 0.44510411179482023f, - 0.4452213258854682f, - 0.44533853234736903f, - 0.44545573117851445f, - 0.4455729223768963f, - 0.4456901059405064f, - 0.44580728186733704f, - 0.4459244501553803f, - 0.44604161080262855f, - 0.44615876380707437f, - 0.4462759091667102f, - 0.446393046879529f, - 0.4465101769435236f, - 0.4466272993566868f, - 0.44674441411701193f, - 0.44686152122249223f, - 0.4469786206711211f, - 0.447095712460892f, - 0.4472127965897988f, - 0.447329873055835f, - 0.44744694185699474f, - 0.44756400299127197f, - 0.44768105645666095f, - 0.447798102251156f, - 0.44791514037275154f, - 0.4480321708194422f, - 0.44814919358922256f, - 0.4482662086800876f, - 0.44838321609003223f, - 0.4485002158170516f, - 0.448617207859141f, - 0.4487341922142957f, - 0.44885116888051124f, - 0.44896813785578327f, - 0.4490850991381075f, - 0.4492020527254799f, - 0.44931899861589664f, - 0.4494359368073536f, - 0.44955286729784716f, - 0.44966979008537383f, - 0.4497867051679301f, - 0.44990361254351274f, - 0.4500205122101186f, - 0.4501374041657445f, - 0.4502542884083875f, - 0.45037116493604495f, - 0.4504880337467142f, - 0.45060489483839267f, - 0.4507217482090781f, - 0.450838593856768f, - 0.45095543177946046f, - 0.4510722619751534f, - 0.451189084441845f, - 0.45130589917753355f, - 0.45142270618021746f, - 0.45153950544789523f, - 0.4516562969785656f, - 0.45177308077022726f, - 0.4518898568208793f, - 0.4520066251285207f, - 0.45212338569115074f, - 0.45224013850676864f, - 0.452356883573374f, - 0.4524736208889663f, - 0.45259035045154544f, - 0.4527070722591111f, - 0.4528237863096635f, - 0.45294049260120256f, - 0.4530571911317287f, - 0.45317388189924224f, - 0.45329056490174374f, - 0.4534072401372339f, - 0.45352390760371347f, - 0.4536405672991834f, - 0.4537572192216448f, - 0.4538738633690988f, - 0.45399049973954675f, - 0.4541071283309902f, - 0.4542237491414307f, - 0.4543403621688699f, - 0.4544569674113098f, - 0.45457356486675227f, - 0.45469015453319955f, - 0.4548067364086538f, - 0.4549233104911177f, - 0.4550398767785934f, - 0.45515643526908384f, - 0.4552729859605917f, - 0.45538952885111983f, - 0.4555060639386715f, - 0.45562259122124993f, - 0.45573911069685824f, - 0.4558556223635f, - 0.4559721262191788f, - 0.45608862226189845f, - 0.4562051104896628f, - 0.45632159090047586f, - 0.45643806349234173f, - 0.4565545282632646f, - 0.456670985211249f, - 0.45678743433429947f, - 0.4569038756304206f, - 0.4570203090976173f, - 0.45713673473389455f, - 0.4572531525372573f, - 0.4573695625057108f, - 0.4574859646372604f, - 0.4576023589299116f, - 0.45771874538167f, - 0.4578351239905414f, - 0.4579514947545316f, - 0.45806785767164665f, - 0.45818421273989274f, - 0.4583005599572761f, - 0.4584168993218032f, - 0.4585332308314806f, - 0.45864955448431494f, - 0.45876587027831306f, - 0.4588821782114819f, - 0.45899847828182866f, - 0.4591147704873605f, - 0.4592310548260848f, - 0.45934733129600896f, - 0.45946359989514074f, - 0.4595798606214878f, - 0.4596961134730582f, - 0.45981235844785984f, - 0.459928595543901f, - 0.4600448247591899f, - 0.46016104609173497f, - 0.46027725953954485f, - 0.4603934651006283f, - 0.460509662772994f, - 0.46062585255465116f, - 0.46074203444360873f, - 0.46085820843787595f, - 0.46097437453546236f, - 0.4610905327343773f, - 0.46120668303263057f, - 0.46132282542823205f, - 0.4614389599191914f, - 0.46155508650351895f, - 0.4616712051792247f, - 0.46178731594431904f, - 0.4619034187968125f, - 0.46201951373471584f, - 0.4621356007560395f, - 0.46225167985879445f, - 0.46236775104099176f, - 0.46248381430064256f, - 0.46259986963575817f, - 0.4627159170443501f, - 0.4628319565244297f, - 0.4629479880740087f, - 0.46306401169109906f, - 0.4631800273737127f, - 0.46329603511986167f, - 0.46341203492755834f, - 0.46352802679481486f, - 0.46364401071964395f, - 0.46375998670005814f, - 0.46387595473407023f, - 0.46399191481969315f, - 0.46410786695494005f, - 0.46422381113782396f, - 0.4643397473663583f, - 0.4644556756385565f, - 0.4645715959524322f, - 0.4646875083059991f, - 0.4648034126972711f, - 0.46491930912426216f, - 0.46503519758498646f, - 0.4651510780774583f, - 0.4652669505996921f, - 0.46538281514970237f, - 0.4654986717255039f, - 0.4656145203251114f, - 0.46573036094653986f, - 0.46584619358780444f, - 0.46596201824692035f, - 0.4660778349219029f, - 0.4661936436107678f, - 0.4663094443115305f, - 0.4664252370222068f, - 0.4665410217408127f, - 0.46665679846536423f, - 0.4667725671938776f, - 0.4668883279243692f, - 0.4670040806548553f, - 0.4671198253833527f, - 0.46723556210787814f, - 0.4673512908264484f, - 0.46746701153708053f, - 0.46758272423779185f, - 0.46769842892659935f, - 0.4678141256015207f, - 0.4679298142605734f, - 0.46804549490177505f, - 0.4681611675231437f, - 0.4682768321226973f, - 0.46839248869845374f, - 0.46850813724843143f, - 0.4686237777706488f, - 0.4687394102631243f, - 0.4688550347238767f, - 0.46897065115092484f, - 0.46908625954228744f, - 0.4692018598959837f, - 0.46931745221003285f, - 0.46943303648245427f, - 0.46954861271126747f, - 0.4696641808944921f, - 0.46977974103014775f, - 0.4698952931162545f, - 0.47001083715083236f, - 0.4701263731319015f, - 0.4702419010574822f, - 0.47035742092559507f, - 0.4704729327342605f, - 0.4705884364814994f, - 0.4707039321653325f, - 0.47081941978378095f, - 0.4709348993348658f, - 0.4710503708166085f, - 0.47116583422703023f, - 0.4712812895641527f, - 0.47139673682599764f, - 0.4715121760105868f, - 0.4716276071159422f, - 0.471743030140086f, - 0.47185844508104047f, - 0.4719738519368279f, - 0.47208925070547086f, - 0.47220464138499213f, - 0.4723200239734144f, - 0.47243539846876065f, - 0.472550764869054f, - 0.47266612317231765f, - 0.47278147337657495f, - 0.47289681547984946f, - 0.4730121494801648f, - 0.47312747537554467f, - 0.47324279316401324f, - 0.4733581028435943f, - 0.4734734044123121f, - 0.47358869786819113f, - 0.47370398320925566f, - 0.47381926043353045f, - 0.47393452953904036f, - 0.47404979052381f, - 0.47416504338586457f, - 0.4742802881232292f, - 0.4743955247339292f, - 0.4745107532159901f, - 0.4746259735674376f, - 0.47474118578629704f, - 0.47485638987059453f, - 0.47497158581835613f, - 0.47508677362760793f, - 0.4752019532963762f, - 0.47531712482268745f, - 0.47543228820456807f, - 0.4755474434400449f, - 0.4756625905271448f, - 0.4757777294638947f, - 0.4758928602483217f, - 0.4760079828784532f, - 0.4761230973523165f, - 0.47623820366793906f, - 0.47635330182334873f, - 0.47646839181657324f, - 0.47658347364564063f, - 0.4766985473085789f, - 0.4768136128034164f, - 0.4769286701281814f, - 0.4770437192809025f, - 0.4771587602596084f, - 0.4772737930623278f, - 0.47738881768708974f, - 0.4775038341319232f, - 0.4776188423948575f, - 0.477733842473922f, - 0.4778488343671461f, - 0.47796381807255955f, - 0.47807879358819216f, - 0.4781937609120738f, - 0.47830872004223446f, - 0.47842367097670446f, - 0.4785386137135141f, - 0.47865354825069384f, - 0.4787684745862744f, - 0.4788833927182865f, - 0.478998302644761f, - 0.479113204363729f, - 0.47922809787322174f, - 0.4793429831712704f, - 0.4794578602559066f, - 0.47957272912516186f, - 0.479687589777068f, - 0.47980244220965684f, - 0.4799172864209605f, - 0.4800321224090111f, - 0.48014695017184106f, - 0.48026176970748263f, - 0.4803765810139686f, - 0.48049138408933156f, - 0.48060617893160446f, - 0.4807209655388204f, - 0.4808357439090124f, - 0.48095051404021383f, - 0.48106527593045817f, - 0.48118002957777894f, - 0.4812947749802099f, - 0.4814095121357849f, - 0.48152424104253816f, - 0.48163896169850345f, - 0.4817536741017153f, - 0.48186837825020806f, - 0.48198307414201635f, - 0.4820977617751749f, - 0.48221244114771855f, - 0.48232711225768227f, - 0.4824417751031012f, - 0.48255642968201073f, - 0.48267107599244613f, - 0.4827857140324431f, - 0.4829003438000374f, - 0.4830149652932646f, - 0.4831295785101609f, - 0.4832441834487624f, - 0.48335878010710526f, - 0.4834733684832261f, - 0.48358794857516146f, - 0.48370252038094796f, - 0.4838170838986224f, - 0.4839316391262218f, - 0.4840461860617833f, - 0.4841607247033442f, - 0.484275255048942f, - 0.48438977709661396f, - 0.4845042908443979f, - 0.48461879629033183f, - 0.4847332934324536f, - 0.4848477822688013f, - 0.4849622627974134f, - 0.48507673501632803f, - 0.4851911989235838f, - 0.4853056545172195f, - 0.48542010179527395f, - 0.48553454075578606f, - 0.485648971396795f, - 0.48576339371634003f, - 0.48587780771246053f, - 0.48599221338319604f, - 0.4861066107265863f, - 0.4862209997406711f, - 0.48633538042349045f, - 0.4864497527730845f, - 0.4865641167874934f, - 0.48667847246475754f, - 0.4867928198029176f, - 0.4869071588000142f, - 0.4870214894540882f, - 0.4871358117631805f, - 0.4872501257253323f, - 0.4873644313385848f, - 0.48747872860097946f, - 0.48759301751055784f, - 0.4877072980653615f, - 0.48782157026343254f, - 0.48793583410281266f, - 0.48805008958154406f, - 0.48816433669766907f, - 0.48827857544923f, - 0.48839280583426936f, - 0.48850702785083017f, - 0.4886212414969549f, - 0.4887354467706867f, - 0.48884964367006867f, - 0.488963832193144f, - 0.4890780123379562f, - 0.4891921841025489f, - 0.48930634748496554f, - 0.48942050248325014f, - 0.4895346490954466f, - 0.48964878731959915f, - 0.489762917153752f, - 0.48987703859594967f, - 0.48999115164423657f, - 0.49010525629665747f, - 0.4902193525512572f, - 0.49033344040608073f, - 0.49044751985917323f, - 0.49056159090858015f, - 0.49067565355234644f, - 0.49078970778851816f, - 0.49090375361514077f, - 0.4910177910302602f, - 0.4911318200319224f, - 0.4912458406181737f, - 0.4913598527870601f, - 0.49147385653662823f, - 0.49158785186492454f, - 0.49170183876999585f, - 0.491815817249889f, - 0.49192978730265097f, - 0.49204374892632896f, - 0.4921577021189702f, - 0.49227164687862224f, - 0.49238558320333253f, - 0.4924995110911489f, - 0.4926134305401193f, - 0.49272734154829156f, - 0.49284124411371394f, - 0.49295513823443476f, - 0.4930690239085025f, - 0.4931829011339656f, - 0.49329676990887306f, - 0.4934106302312736f, - 0.49352448209921623f, - 0.49363832551075026f, - 0.4937521604639249f, - 0.4938659869567897f, - 0.4939798049873943f, - 0.4940936145537883f, - 0.49420741565402176f, - 0.4943212082861446f, - 0.4944349924482071f, - 0.4945487681382596f, - 0.49466253535435256f, - 0.4947762940945366f, - 0.4948900443568625f, - 0.49500378613938123f, - 0.4951175194401438f, - 0.49523124425720144f, - 0.4953449605886056f, - 0.4954586684324076f, - 0.49557236778665914f, - 0.495686058649412f, - 0.49579974101871815f, - 0.49591341489262974f, - 0.49602708026919906f, - 0.4961407371464782f, - 0.49625438552251994f, - 0.49636802539537683f, - 0.4964816567631017f, - 0.4965952796237475f, - 0.4967088939753674f, - 0.49682249981601456f, - 0.49693609714374226f, - 0.4970496859566043f, - 0.4971632662526543f, - 0.49727683802994604f, - 0.49739040128653356f, - 0.49750395602047087f, - 0.49761750222981227f, - 0.4977310399126122f, - 0.49784456906692526f, - 0.4979580896908061f, - 0.49807160178230964f, - 0.4981851053394908f, - 0.4982986003604048f, - 0.4984120868431069f, - 0.4985255647856525f, - 0.4986390341860973f, - 0.498752495042497f, - 0.4988659473529074f, - 0.49897939111538453f, - 0.4990928263279846f, - 0.4992062529887639f, - 0.49931967109577896f, - 0.49943308064708636f, - 0.49954648164074283f, - 0.49965987407480533f, - 0.49977325794733085f, - 0.4998866332563766f, - 0.49999999999999994f, - 0.5001133581762583f, - 0.5002267077832097f, - 0.5003400488189113f, - 0.5004533812814214f, - 0.500566705168798f, - 0.5006800204790993f, - 0.5007933272103837f, - 0.5009066253607098f, - 0.5010199149281362f, - 0.5011331959107218f, - 0.5012464683065254f, - 0.5013597321136062f, - 0.5014729873300233f, - 0.5015862339538365f, - 0.5016994719831049f, - 0.5018127014158884f, - 0.5019259222502468f, - 0.5020391344842402f, - 0.5021523381159286f, - 0.5022655331433725f, - 0.5023787195646321f, - 0.502491897377768f, - 0.502605066580841f, - 0.5027182271719121f, - 0.5028313791490421f, - 0.5029445225102923f, - 0.5030576572537239f, - 0.5031707833773984f, - 0.5032839008793776f, - 0.5033970097577231f, - 0.5035101100104967f, - 0.5036232016357608f, - 0.5037362846315774f, - 0.5038493589960087f, - 0.5039624247271174f, - 0.5040754818229661f, - 0.5041885302816177f, - 0.504301570101135f, - 0.504414601279581f, - 0.5045276238150193f, - 0.5046406377055128f, - 0.5047536429491255f, - 0.5048666395439209f, - 0.5049796274879629f, - 0.5050926067793152f, - 0.5052055774160422f, - 0.5053185393962082f, - 0.5054314927178775f, - 0.5055444373791147f, - 0.5056573733779846f, - 0.5057703007125519f, - 0.5058832193808819f, - 0.5059961293810394f, - 0.5061090307110901f, - 0.5062219233690992f, - 0.5063348073531325f, - 0.5064476826612556f, - 0.5065605492915346f, - 0.5066734072420352f, - 0.5067862565108241f, - 0.5068990970959671f, - 0.5070119289955314f, - 0.507124752207583f, - 0.507237566730189f, - 0.5073503725614165f, - 0.5074631696993323f, - 0.5075759581420037f, - 0.5076887378874984f, - 0.5078015089338836f, - 0.5079142712792272f, - 0.5080270249215968f, - 0.5081397698590607f, - 0.508252506089687f, - 0.5083652336115438f, - 0.5084779524226998f, - 0.5085906625212233f, - 0.5087033639051833f, - 0.5088160565726486f, - 0.5089287405216881f, - 0.5090414157503713f, - 0.5091540822567673f, - 0.5092667400389456f, - 0.5093793890949759f, - 0.509492029422928f, - 0.5096046610208719f, - 0.5097172838868775f, - 0.5098298980190152f, - 0.5099425034153554f, - 0.5100551000739685f, - 0.5101676879929252f, - 0.5102802671702964f, - 0.5103928376041531f, - 0.5105053992925664f, - 0.5106179522336077f, - 0.5107304964253483f, - 0.5108430318658598f, - 0.510955558553214f, - 0.5110680764854828f, - 0.5111805856607381f, - 0.511293086077052f, - 0.5114055777324973f, - 0.5115180606251459f, - 0.511630534753071f, - 0.5117430001143449f, - 0.5118554567070408f, - 0.5119679045292318f, - 0.512080343578991f, - 0.5121927738543919f, - 0.5123051953535079f, - 0.5124176080744131f, - 0.5125300120151807f, - 0.5126424071738851f, - 0.5127547935486003f, - 0.5128671711374007f, - 0.5129795399383605f, - 0.5130918999495547f, - 0.5132042511690578f, - 0.5133165935949446f, - 0.5134289272252903f, - 0.51354125205817f, - 0.5136535680916592f, - 0.5137658753238332f, - 0.5138781737527678f, - 0.5139904633765386f, - 0.5141027441932217f, - 0.5142150162008932f, - 0.5143272793976292f, - 0.5144395337815063f, - 0.5145517793506011f, - 0.5146640161029901f, - 0.5147762440367502f, - 0.5148884631499584f, - 0.5150006734406919f, - 0.5151128749070281f, - 0.5152250675470443f, - 0.515337251358818f, - 0.5154494263404272f, - 0.5155615924899498f, - 0.5156737498054638f, - 0.5157858982850474f, - 0.515898037926779f, - 0.5160101687287371f, - 0.5161222906890003f, - 0.5162344038056476f, - 0.5163465080767576f, - 0.51645860350041f, - 0.5165706900746835f, - 0.5166827677976579f, - 0.5167948366674127f, - 0.5169068966820275f, - 0.5170189478395824f, - 0.5171309901381571f, - 0.5172430235758322f, - 0.5173550481506878f, - 0.5174670638608043f, - 0.5175790707042626f, - 0.5176910686791433f, - 0.5178030577835273f, - 0.5179150380154959f, - 0.5180270093731302f, - 0.5181389718545116f, - 0.5182509254577218f, - 0.5183628701808424f, - 0.5184748060219552f, - 0.5185867329791424f, - 0.5186986510504858f, - 0.5188105602340681f, - 0.5189224605279716f, - 0.5190343519302789f, - 0.5191462344390728f, - 0.5192581080524363f, - 0.5193699727684524f, - 0.5194818285852042f, - 0.5195936755007753f, - 0.5197055135132491f, - 0.5198173426207094f, - 0.51992916282124f, - 0.5200409741129248f, - 0.5201527764938481f, - 0.5202645699620938f, - 0.5203763545157469f, - 0.5204881301528917f, - 0.5205998968716131f, - 0.5207116546699958f, - 0.520823403546125f, - 0.5209351434980859f, - 0.5210468745239638f, - 0.5211585966218443f, - 0.5212703097898131f, - 0.5213820140259559f, - 0.5214937093283587f, - 0.5216053956951078f, - 0.5217170731242893f, - 0.5218287416139896f, - 0.5219404011622957f, - 0.5220520517672937f, - 0.522163693427071f, - 0.5222753261397145f, - 0.5223869499033112f, - 0.5224985647159488f, - 0.5226101705757147f, - 0.5227217674806964f, - 0.5228333554289819f, - 0.5229449344186591f, - 0.523056504447816f, - 0.5231680655145411f, - 0.5232796176169229f, - 0.5233911607530496f, - 0.5235026949210103f, - 0.5236142201188937f, - 0.5237257363447888f, - 0.523837243596785f, - 0.5239487418729715f, - 0.524060231171438f, - 0.5241717114902739f, - 0.524283182827569f, - 0.5243946451814137f, - 0.5245060985498976f, - 0.5246175429311113f, - 0.5247289783231451f, - 0.5248404047240897f, - 0.5249518221320356f, - 0.525063230545074f, - 0.5251746299612956f, - 0.525286020378792f, - 0.5253974017956543f, - 0.525508774209974f, - 0.5256201376198429f, - 0.5257314920233527f, - 0.5258428374185955f, - 0.5259541738036633f, - 0.5260655011766484f, - 0.5261768195356432f, - 0.5262881288787403f, - 0.5263994292040327f, - 0.526510720509613f, - 0.5266220027935744f, - 0.52673327605401f, - 0.5268445402890132f, - 0.5269557954966776f, - 0.5270670416750967f, - 0.5271782788223645f, - 0.527289506936575f, - 0.527400726015822f, - 0.5275119360582002f, - 0.527623137061804f, - 0.5277343290247277f, - 0.5278455119450663f, - 0.5279566858209148f, - 0.528067850650368f, - 0.5281790064315213f, - 0.52829015316247f, - 0.5284012908413095f, - 0.5285124194661358f, - 0.5286235390350444f, - 0.5287346495461317f, - 0.5288457509974935f, - 0.5289568433872263f, - 0.5290679267134264f, - 0.5291790009741906f, - 0.5292900661676155f, - 0.5294011222917983f, - 0.5295121693448357f, - 0.5296232073248252f, - 0.529734236229864f, - 0.5298452560580499f, - 0.5299562668074804f, - 0.5300672684762535f, - 0.5301782610624672f, - 0.5302892445642196f, - 0.530400218979609f, - 0.530511184306734f, - 0.5306221405436932f, - 0.5307330876885854f, - 0.5308440257395095f, - 0.5309549546945646f, - 0.53106587455185f, - 0.531176785309465f, - 0.5312876869655093f, - 0.5313985795180829f, - 0.5315094629652852f, - 0.5316203373052164f, - 0.5317312025359768f, - 0.5318420586556667f, - 0.5319529056623866f, - 0.5320637435542374f, - 0.5321745723293194f, - 0.5322853919857339f, - 0.532396202521582f, - 0.5325070039349651f, - 0.5326177962239845f, - 0.532728579386742f, - 0.532839353421339f, - 0.5329501183258778f, - 0.5330608740984603f, - 0.5331716207371886f, - 0.5332823582401652f, - 0.5333930866054928f, - 0.533503805831274f, - 0.5336145159156115f, - 0.5337252168566085f, - 0.533835908652368f, - 0.5339465913009935f, - 0.5340572648005885f, - 0.5341679291492565f, - 0.5342785843451012f, - 0.5343892303862268f, - 0.5344998672707373f, - 0.534610494996737f, - 0.5347211135623303f, - 0.5348317229656218f, - 0.5349423232047161f, - 0.5350529142777183f, - 0.5351634961827334f, - 0.5352740689178664f, - 0.5353846324812231f, - 0.5354951868709087f, - 0.5356057320850288f, - 0.5357162681216895f, - 0.5358267949789967f, - 0.5359373126550564f, - 0.5360478211479751f, - 0.5361583204558592f, - 0.5362688105768153f, - 0.5363792915089503f, - 0.5364897632503709f, - 0.5366002257991844f, - 0.5367106791534981f, - 0.5368211233114193f, - 0.5369315582710555f, - 0.5370419840305145f, - 0.5371524005879043f, - 0.5372628079413326f, - 0.5373732060889082f, - 0.5374835950287388f, - 0.5375939747589332f, - 0.5377043452776002f, - 0.5378147065828485f, - 0.5379250586727871f, - 0.5380354015455252f, - 0.538145735199172f, - 0.538256059631837f, - 0.5383663748416296f, - 0.5384766808266601f, - 0.5385869775850382f, - 0.5386972651148738f, - 0.5388075434142774f, - 0.5389178124813592f, - 0.5390280723142299f, - 0.5391383229110002f, - 0.5392485642697811f, - 0.5393587963886834f, - 0.5394690192658185f, - 0.5395792328992977f, - 0.5396894372872324f, - 0.5397996324277345f, - 0.5399098183189157f, - 0.5400199949588882f, - 0.5401301623457638f, - 0.540240320477655f, - 0.5403504693526743f, - 0.5404606089689343f, - 0.5405707393245477f, - 0.5406808604176276f, - 0.540790972246287f, - 0.5409010748086391f, - 0.5410111681027976f, - 0.5411212521268758f, - 0.5412313268789876f, - 0.5413413923572468f, - 0.5414514485597675f, - 0.5415614954846638f, - 0.5416715331300502f, - 0.5417815614940413f, - 0.5418915805747517f, - 0.5420015903702963f, - 0.54211159087879f, - 0.542221582098348f, - 0.5423315640270858f, - 0.5424415366631187f, - 0.5425515000045624f, - 0.5426614540495328f, - 0.5427713987961459f, - 0.5428813342425175f, - 0.5429912603867642f, - 0.5431011772270024f, - 0.5432110847613484f, - 0.5433209829879193f, - 0.5434308719048322f, - 0.5435407515102038f, - 0.5436506218021514f, - 0.5437604827787924f, - 0.5438703344382446f, - 0.5439801767786254f, - 0.544090009798053f, - 0.5441998334946452f, - 0.5443096478665201f, - 0.5444194529117965f, - 0.5445292486285925f, - 0.544639035015027f, - 0.5447488120692189f, - 0.5448585797892869f, - 0.5449683381733503f, - 0.5450780872195286f, - 0.545187826925941f, - 0.5452975572907074f, - 0.5454072783119474f, - 0.545516989987781f, - 0.5456266923163284f, - 0.5457363852957098f, - 0.5458460689240457f, - 0.5459557431994567f, - 0.5460654081200635f, - 0.5461750636839872f, - 0.5462847098893486f, - 0.5463943467342691f, - 0.54650397421687f, - 0.5466135923352731f, - 0.5467232010875999f, - 0.5468328004719724f, - 0.5469423904865125f, - 0.5470519711293425f, - 0.5471615423985848f, - 0.5472711042923619f, - 0.5473806568087966f, - 0.5474901999460114f, - 0.5475997337021298f, - 0.5477092580752745f, - 0.5478187730635691f, - 0.5479282786651369f, - 0.5480377748781018f, - 0.5481472617005875f, - 0.5482567391307179f, - 0.5483662071666172f, - 0.5484756658064097f, - 0.5485851150482199f, - 0.5486945548901724f, - 0.5488039853303919f, - 0.5489134063670033f, - 0.5490228179981318f, - 0.5491322202219024f, - 0.5492416130364411f, - 0.5493509964398732f, - 0.5494603704303241f, - 0.5495697350059202f, - 0.5496790901647873f, - 0.5497884359050517f, - 0.5498977722248397f, - 0.5500070991222781f, - 0.5501164165954934f, - 0.5502257246426123f, - 0.5503350232617623f, - 0.5504443124510703f, - 0.5505535922086636f, - 0.55066286253267f, - 0.5507721234212171f, - 0.5508813748724325f, - 0.5509906168844443f, - 0.5510998494553808f, - 0.5512090725833704f, - 0.5513182862665412f, - 0.5514274905030223f, - 0.5515366852909424f, - 0.5516458706284302f, - 0.5517550465136151f, - 0.5518642129446264f, - 0.5519733699195936f, - 0.552082517436646f, - 0.5521916554939137f, - 0.5523007840895265f, - 0.5524099032216148f, - 0.5525190128883084f, - 0.5526281130877381f, - 0.5527372038180344f, - 0.5528462850773279f, - 0.5529553568637499f, - 0.553064419175431f, - 0.5531734720105028f, - 0.5532825153670967f, - 0.5533915492433441f, - 0.5535005736373768f, - 0.5536095885473267f, - 0.5537185939713258f, - 0.5538275899075065f, - 0.553936576354001f, - 0.5540455533089419f, - 0.554154520770462f, - 0.554263478736694f, - 0.5543724272057712f, - 0.5544813661758264f, - 0.5545902956449934f, - 0.5546992156114054f, - 0.5548081260731963f, - 0.5549170270284998f, - 0.5550259184754498f, - 0.5551348004121808f, - 0.555243672836827f, - 0.5553525357475227f, - 0.555461389142403f, - 0.5555702330196022f, - 0.5556790673772557f, - 0.5557878922134984f, - 0.5558967075264658f, - 0.5560055133142934f, - 0.5561143095751165f, - 0.5562230963070712f, - 0.5563318735082935f, - 0.5564406411769194f, - 0.5565493993110853f, - 0.5566581479089276f, - 0.5567668869685829f, - 0.556875616488188f, - 0.5569843364658799f, - 0.5570930468997956f, - 0.5572017477880724f, - 0.5573104391288479f, - 0.5574191209202596f, - 0.5575277931604451f, - 0.5576364558475426f, - 0.5577451089796901f, - 0.5578537525550258f, - 0.5579623865716883f, - 0.5580710110278159f, - 0.5581796259215475f, - 0.558288231251022f, - 0.5583968270143785f, - 0.5585054132097562f, - 0.5586139898352945f, - 0.5587225568891331f, - 0.5588311143694116f, - 0.5589396622742699f, - 0.5590482006018481f, - 0.5591567293502865f, - 0.5592652485177254f, - 0.5593737581023053f, - 0.559482258102167f, - 0.5595907485154513f, - 0.5596992293402994f, - 0.5598077005748523f, - 0.5599161622172515f, - 0.5600246142656385f, - 0.5601330567181552f, - 0.5602414895729432f, - 0.5603499128281446f, - 0.5604583264819016f, - 0.5605667305323568f, - 0.5606751249776524f, - 0.5607835098159312f, - 0.5608918850453359f, - 0.5610002506640097f, - 0.561108606670096f, - 0.5612169530617378f, - 0.5613252898370787f, - 0.5614336169942624f, - 0.5615419345314329f, - 0.5616502424467339f, - 0.5617585407383098f, - 0.5618668294043049f, - 0.5619751084428636f, - 0.5620833778521306f, - 0.5621916376302508f, - 0.5622998877753692f, - 0.5624081282856309f, - 0.5625163591591814f, - 0.562624580394166f, - 0.5627327919887303f, - 0.5628409939410203f, - 0.5629491862491819f, - 0.5630573689113614f, - 0.5631655419257048f, - 0.5632737052903589f, - 0.5633818590034703f, - 0.5634900030631856f, - 0.5635981374676521f, - 0.5637062622150166f, - 0.5638143773034268f, - 0.5639224827310299f, - 0.5640305784959735f, - 0.5641386645964056f, - 0.564246741030474f, - 0.564354807796327f, - 0.5644628648921128f, - 0.56457091231598f, - 0.564678950066077f, - 0.5647869781405529f, - 0.5648949965375564f, - 0.5650030052552367f, - 0.5651110042917433f, - 0.5652189936452255f, - 0.5653269733138329f, - 0.5654349432957153f, - 0.5655429035890227f, - 0.5656508541919053f, - 0.5657587951025133f, - 0.5658667263189971f, - 0.5659746478395076f, - 0.5660825596621953f, - 0.5661904617852113f, - 0.5662983542067067f, - 0.5664062369248328f, - 0.5665141099377411f, - 0.5666219732435831f, - 0.5667298268405107f, - 0.5668376707266757f, - 0.5669455049002304f, - 0.5670533293593273f, - 0.5671611441021184f, - 0.5672689491267565f, - 0.5673767444313944f, - 0.5674845300141851f, - 0.5675923058732817f, - 0.5677000720068376f, - 0.5678078284130059f, - 0.5679155750899405f, - 0.5680233120357953f, - 0.568131039248724f, - 0.5682387567268808f, - 0.5683464644684202f, - 0.5684541624714963f, - 0.5685618507342639f, - 0.5686695292548779f, - 0.5687771980314931f, - 0.5688848570622647f, - 0.5689925063453478f, - 0.5691001458788982f, - 0.5692077756610713f, - 0.5693153956900229f, - 0.569423005963909f, - 0.5695306064808858f, - 0.5696381972391096f, - 0.5697457782367367f, - 0.5698533494719238f, - 0.5699609109428276f, - 0.5700684626476054f, - 0.570176004584414f, - 0.5702835367514107f, - 0.5703910591467531f, - 0.5704985717685989f, - 0.5706060746151057f, - 0.5707135676844316f, - 0.5708210509747348f, - 0.5709285244841734f, - 0.5710359882109061f, - 0.5711434421530912f, - 0.5712508863088879f, - 0.5713583206764549f, - 0.5714657452539514f, - 0.5715731600395367f, - 0.5716805650313705f, - 0.5717879602276122f, - 0.5718953456264217f, - 0.572002721225959f, - 0.572110087024384f, - 0.5722174430198573f, - 0.5723247892105395f, - 0.5724321255945909f, - 0.5725394521701724f, - 0.5726467689354452f, - 0.5727540758885702f, - 0.5728613730277089f, - 0.5729686603510229f, - 0.5730759378566735f, - 0.5731832055428228f, - 0.5732904634076327f, - 0.5733977114492653f, - 0.5735049496658832f, - 0.5736121780556487f, - 0.5737193966167243f, - 0.5738266053472733f, - 0.5739338042454583f, - 0.5740409933094426f, - 0.5741481725373896f, - 0.5742553419274629f, - 0.5743625014778259f, - 0.5744696511866426f, - 0.5745767910520772f, - 0.5746839210722935f, - 0.5747910412454561f, - 0.5748981515697296f, - 0.5750052520432786f, - 0.5751123426642678f, - 0.5752194234308625f, - 0.5753264943412277f, - 0.5754335553935289f, - 0.5755406065859318f, - 0.5756476479166016f, - 0.5757546793837045f, - 0.5758617009854066f, - 0.575968712719874f, - 0.5760757145852731f, - 0.5761827065797704f, - 0.5762896887015329f, - 0.5763966609487271f, - 0.5765036233195202f, - 0.5766105758120796f, - 0.5767175184245725f, - 0.5768244511551666f, - 0.5769313740020295f, - 0.5770382869633292f, - 0.5771451900372336f, - 0.5772520832219112f, - 0.5773589665155303f, - 0.5774658399162595f, - 0.5775727034222675f, - 0.5776795570317234f, - 0.5777864007427961f, - 0.5778932345536548f, - 0.5780000584624692f, - 0.5781068724674087f, - 0.5782136765666431f, - 0.5783204707583424f, - 0.5784272550406766f, - 0.578534029411816f, - 0.5786407938699312f, - 0.5787475484131928f, - 0.5788542930397714f, - 0.5789610277478381f, - 0.579067752535564f, - 0.5791744674011204f, - 0.5792811723426788f, - 0.5793878673584109f, - 0.5794945524464883f, - 0.579601227605083f, - 0.5797078928323673f, - 0.5798145481265136f, - 0.5799211934856942f, - 0.5800278289080819f, - 0.5801344543918494f, - 0.5802410699351697f, - 0.580347675536216f, - 0.5804542711931617f, - 0.5805608569041804f, - 0.5806674326674455f, - 0.5807739984811311f, - 0.5808805543434111f, - 0.5809871002524597f, - 0.5810936362064514f, - 0.5812001622035605f, - 0.581306678241962f, - 0.5814131843198306f, - 0.5815196804353413f, - 0.5816261665866693f, - 0.5817326427719902f, - 0.5818391089894793f, - 0.5819455652373126f, - 0.5820520115136658f, - 0.582158447816715f, - 0.5822648741446365f, - 0.5823712904956067f, - 0.5824776968678022f, - 0.5825840932593995f, - 0.5826904796685761f, - 0.5827968560935086f, - 0.5829032225323744f, - 0.5830095789833509f, - 0.5831159254446159f, - 0.5832222619143469f, - 0.5833285883907221f, - 0.5834349048719195f, - 0.5835412113561175f, - 0.5836475078414944f, - 0.583753794326229f, - 0.5838600708085f, - 0.5839663372864865f, - 0.5840725937583675f, - 0.5841788402223225f, - 0.5842850766765307f, - 0.5843913031191721f, - 0.5844975195484263f, - 0.5846037259624736f, - 0.5847099223594939f, - 0.5848161087376677f, - 0.5849222850951753f, - 0.5850284514301977f, - 0.5851346077409155f, - 0.5852407540255101f, - 0.5853468902821624f, - 0.5854530165090538f, - 0.5855591327043659f, - 0.5856652388662805f, - 0.5857713349929795f, - 0.5858774210826451f, - 0.5859834971334591f, - 0.5860895631436043f, - 0.586195619111263f, - 0.5863016650346183f, - 0.586407700911853f, - 0.5865137267411501f, - 0.586619742520693f, - 0.5867257482486651f, - 0.5868317439232499f, - 0.5869377295426313f, - 0.5870437051049934f, - 0.5871496706085203f, - 0.587255626051396f, - 0.5873615714318053f, - 0.5874675067479328f, - 0.5875734319979632f, - 0.5876793471800815f, - 0.5877852522924731f, - 0.5878911473333231f, - 0.5879970323008172f, - 0.588102907193141f, - 0.5882087720084803f, - 0.5883146267450213f, - 0.5884204714009501f, - 0.5885263059744531f, - 0.5886321304637168f, - 0.5887379448669279f, - 0.5888437491822734f, - 0.5889495434079404f, - 0.5890553275421161f, - 0.5891611015829878f, - 0.5892668655287433f, - 0.5893726193775701f, - 0.5894783631276564f, - 0.5895840967771903f, - 0.5896898203243599f, - 0.5897955337673537f, - 0.5899012371043605f, - 0.5900069303335688f, - 0.5901126134531678f, - 0.5902182864613466f, - 0.5903239493562945f, - 0.5904296021362011f, - 0.5905352447992559f, - 0.5906408773436488f, - 0.5907464997675699f, - 0.5908521120692093f, - 0.5909577142467575f, - 0.5910633062984046f, - 0.5911688882223418f, - 0.5912744600167599f, - 0.5913800216798498f, - 0.5914855732098028f, - 0.5915911146048104f, - 0.5916966458630639f, - 0.5918021669827553f, - 0.5919076779620766f, - 0.5920131787992196f, - 0.5921186694923767f, - 0.5922241500397403f, - 0.5923296204395032f, - 0.5924350806898581f, - 0.5925405307889978f, - 0.5926459707351157f, - 0.592751400526405f, - 0.5928568201610592f, - 0.592962229637272f, - 0.5930676289532372f, - 0.5931730181071486f, - 0.5932783970972008f, - 0.5933837659215878f, - 0.5934891245785043f, - 0.5935944730661451f, - 0.5936998113827049f, - 0.5938051395263788f, - 0.5939104574953621f, - 0.59401576528785f, - 0.5941210629020386f, - 0.594226350336123f, - 0.5943316275882995f, - 0.5944368946567642f, - 0.5945421515397132f, - 0.594647398235343f, - 0.5947526347418505f, - 0.5948578610574321f, - 0.5949630771802851f, - 0.5950682831086064f, - 0.5951734788405934f, - 0.5952786643744437f, - 0.595383839708355f, - 0.5954890048405249f, - 0.5955941597691516f, - 0.5956993044924334f, - 0.5958044390085684f, - 0.5959095633157553f, - 0.5960146774121929f, - 0.5961197812960801f, - 0.5962248749656158f, - 0.5963299584189994f, - 0.5964350316544301f, - 0.5965400946701078f, - 0.5966451474642321f, - 0.5967501900350032f, - 0.5968552223806207f, - 0.5969602444992854f, - 0.5970652563891975f, - 0.5971702580485577f, - 0.597275249475567f, - 0.5973802306684263f, - 0.5974852016253366f, - 0.5975901623444994f, - 0.5976951128241161f, - 0.5978000530623887f, - 0.5979049830575188f, - 0.5980099028077086f, - 0.5981148123111603f, - 0.5982197115660762f, - 0.598324600570659f, - 0.5984294793231114f, - 0.5985343478216364f, - 0.598639206064437f, - 0.5987440540497165f, - 0.5988488917756785f, - 0.5989537192405264f, - 0.5990585364424642f, - 0.5991633433796958f, - 0.5992681400504254f, - 0.5993729264528573f, - 0.5994777025851961f, - 0.5995824684456463f, - 0.5996872240324129f, - 0.599791969343701f, - 0.5998967043777158f, - 0.6000014291326625f, - 0.600106143606747f, - 0.6002108477981747f, - 0.6003155417051517f, - 0.6004202253258839f, - 0.600524898658578f, - 0.6006295617014402f, - 0.600734214452677f, - 0.6008388569104954f, - 0.6009434890731024f, - 0.6010481109387049f, - 0.6011527225055106f, - 0.6012573237717266f, - 0.6013619147355609f, - 0.6014664953952211f, - 0.6015710657489155f, - 0.6016756257948522f, - 0.6017801755312397f, - 0.6018847149562864f, - 0.6019892440682011f, - 0.6020937628651928f, - 0.6021982713454704f, - 0.6023027695072435f, - 0.6024072573487212f, - 0.6025117348681134f, - 0.6026162020636296f, - 0.6027206589334803f, - 0.6028251054758751f, - 0.6029295416890247f, - 0.6030339675711395f, - 0.6031383831204301f, - 0.6032427883351075f, - 0.6033471832133827f, - 0.6034515677534668f, - 0.6035559419535714f, - 0.603660305811908f, - 0.6037646593266883f, - 0.6038690024961243f, - 0.6039733353184281f, - 0.604077657791812f, - 0.6041819699144884f, - 0.6042862716846701f, - 0.6043905631005696f, - 0.6044948441604001f, - 0.6045991148623748f, - 0.6047033752047071f, - 0.6048076251856103f, - 0.6049118648032983f, - 0.6050160940559849f, - 0.6051203129418842f, - 0.6052245214592104f, - 0.6053287196061778f, - 0.6054329073810013f, - 0.6055370847818956f, - 0.6056412518070754f, - 0.605745408454756f, - 0.6058495547231526f, - 0.6059536906104808f, - 0.6060578161149561f, - 0.6061619312347947f, - 0.6062660359682123f, - 0.606370130313425f, - 0.6064742142686494f, - 0.6065782878321021f, - 0.6066823510019996f, - 0.6067864037765591f, - 0.6068904461539973f, - 0.6069944781325318f, - 0.6070984997103797f, - 0.6072025108857589f, - 0.6073065116568872f, - 0.6074105020219825f, - 0.6075144819792629f, - 0.6076184515269468f, - 0.6077224106632527f, - 0.6078263593863993f, - 0.6079302976946054f, - 0.6080342255860901f, - 0.6081381430590725f, - 0.6082420501117722f, - 0.6083459467424087f, - 0.6084498329492019f, - 0.6085537087303713f, - 0.6086575740841376f, - 0.6087614290087207f, - 0.6088652735023411f, - 0.6089691075632195f, - 0.6090729311895768f, - 0.6091767443796341f, - 0.6092805471316124f, - 0.609384339443733f, - 0.6094881213142177f, - 0.6095918927412881f, - 0.609695653723166f, - 0.6097994042580738f, - 0.6099031443442333f, - 0.6100068739798674f, - 0.6101105931631985f, - 0.6102143018924493f, - 0.6103180001658429f, - 0.6104216879816026f, - 0.6105253653379514f, - 0.610629032233113f, - 0.6107326886653113f, - 0.6108363346327698f, - 0.6109399701337128f, - 0.6110435951663644f, - 0.6111472097289492f, - 0.6112508138196917f, - 0.6113544074368165f, - 0.6114579905785488f, - 0.6115615632431135f, - 0.611665125428736f, - 0.6117686771336419f, - 0.6118722183560569f, - 0.6119757490942067f, - 0.6120792693463173f, - 0.612182779110615f, - 0.6122862783853261f, - 0.6123897671686774f, - 0.6124932454588955f, - 0.6125967132542072f, - 0.6127001705528395f, - 0.6128036173530202f, - 0.6129070536529764f, - 0.6130104794509358f, - 0.6131138947451263f, - 0.6132172995337759f, - 0.6133206938151127f, - 0.6134240775873651f, - 0.6135274508487616f, - 0.6136308135975309f, - 0.6137341658319021f, - 0.6138375075501042f, - 0.6139408387503664f, - 0.6140441594309183f, - 0.6141474695899892f, - 0.6142507692258092f, - 0.6143540583366084f, - 0.6144573369206167f, - 0.6145606049760645f, - 0.6146638625011823f, - 0.6147671094942009f, - 0.6148703459533512f, - 0.6149735718768642f, - 0.6150767872629712f, - 0.6151799921099037f, - 0.6152831864158932f, - 0.6153863701791714f, - 0.6154895433979706f, - 0.6155927060705226f, - 0.61569585819506f, - 0.6157989997698151f, - 0.6159021307930208f, - 0.6160052512629098f, - 0.6161083611777153f, - 0.6162114605356704f, - 0.6163145493350087f, - 0.6164176275739637f, - 0.6165206952507691f, - 0.616623752363659f, - 0.6167267989108675f, - 0.6168298348906289f, - 0.6169328603011778f, - 0.6170358751407486f, - 0.6171388794075766f, - 0.6172418730998965f, - 0.6173448562159436f, - 0.6174478287539535f, - 0.6175507907121617f, - 0.6176537420888039f, - 0.617756682882116f, - 0.6178596130903343f, - 0.6179625327116951f, - 0.6180654417444349f, - 0.6181683401867902f, - 0.618271228036998f, - 0.6183741052932953f, - 0.6184769719539194f, - 0.6185798280171078f, - 0.618682673481098f, - 0.6187855083441275f, - 0.6188883326044347f, - 0.6189911462602573f, - 0.619093949309834f, - 0.619196741751403f, - 0.6192995235832034f, - 0.6194022948034734f, - 0.6195050554104526f, - 0.61960780540238f, - 0.6197105447774951f, - 0.6198132735340375f, - 0.6199159916702468f, - 0.6200186991843631f, - 0.6201213960746266f, - 0.6202240823392773f, - 0.620326757976556f, - 0.6204294229847033f, - 0.62053207736196f, - 0.6206347211065673f, - 0.6207373542167662f, - 0.6208399766907984f, - 0.6209425885269052f, - 0.6210451897233286f, - 0.6211477802783104f, - 0.6212503601900927f, - 0.6213529294569181f, - 0.6214554880770288f, - 0.6215580360486677f, - 0.6216605733700774f, - 0.6217631000395012f, - 0.6218656160551823f, - 0.6219681214153641f, - 0.6220706161182901f, - 0.6221731001622042f, - 0.6222755735453502f, - 0.6223780362659725f, - 0.6224804883223153f, - 0.6225829297126231f, - 0.6226853604351406f, - 0.6227877804881126f, - 0.6228901898697841f, - 0.6229925885784007f, - 0.6230949766122075f, - 0.6231973539694503f, - 0.6232997206483747f, - 0.6234020766472268f, - 0.6235044219642528f, - 0.6236067565976989f, - 0.6237090805458119f, - 0.6238113938068381f, - 0.6239136963790246f, - 0.6240159882606185f, - 0.624118269449867f, - 0.6242205399450177f, - 0.624322799744318f, - 0.6244250488460158f, - 0.624527287248359f, - 0.624629514949596f, - 0.6247317319479749f, - 0.6248339382417444f, - 0.6249361338291533f, - 0.6250383187084502f, - 0.6251404928778843f, - 0.6252426563357051f, - 0.6253448090801619f, - 0.6254469511095043f, - 0.6255490824219823f, - 0.6256512030158455f, - 0.6257533128893445f, - 0.6258554120407296f, - 0.6259575004682513f, - 0.6260595781701602f, - 0.6261616451447074f, - 0.6262637013901441f, - 0.6263657469047214f, - 0.6264677816866908f, - 0.626569805734304f, - 0.6266718190458129f, - 0.6267738216194696f, - 0.626875813453526f, - 0.6269777945462348f, - 0.6270797648958485f, - 0.6271817245006197f, - 0.6272836733588016f, - 0.6273856114686472f, - 0.6274875388284098f, - 0.627589455436343f, - 0.6276913612907005f, - 0.6277932563897359f, - 0.6278951407317036f, - 0.6279970143148578f, - 0.6280988771374527f, - 0.6282007291977431f, - 0.6283025704939835f, - 0.6284044010244292f, - 0.6285062207873353f, - 0.6286080297809572f, - 0.6287098280035502f, - 0.6288116154533703f, - 0.6289133921286731f, - 0.6290151580277149f, - 0.6291169131487518f, - 0.6292186574900406f, - 0.6293203910498375f, - 0.6294221138263995f, - 0.6295238258179836f, - 0.6296255270228471f, - 0.6297272174392473f, - 0.6298288970654419f, - 0.6299305658996883f, - 0.6300322239402446f, - 0.6301338711853691f, - 0.6302355076333199f, - 0.6303371332823555f, - 0.6304387481307346f, - 0.6305403521767162f, - 0.6306419454185591f, - 0.6307435278545227f, - 0.6308450994828663f, - 0.6309466603018495f, - 0.6310482103097323f, - 0.6311497495047745f, - 0.6312512778852362f, - 0.6313527954493777f, - 0.6314543021954597f, - 0.6315557981217428f, - 0.631657283226488f, - 0.6317587575079561f, - 0.6318602209644087f, - 0.6319616735941072f, - 0.632063115395313f, - 0.6321645463662882f, - 0.6322659665052947f, - 0.6323673758105945f, - 0.6324687742804502f, - 0.6325701619131244f, - 0.6326715387068799f, - 0.6327729046599793f, - 0.632874259770686f, - 0.6329756040372632f, - 0.6330769374579744f, - 0.6331782600310835f, - 0.6332795717548539f, - 0.6333808726275502f, - 0.6334821626474363f, - 0.6335834418127766f, - 0.6336847101218358f, - 0.6337859675728786f, - 0.6338872141641702f, - 0.6339884498939755f, - 0.6340896747605602f, - 0.6341908887621895f, - 0.6342920918971293f, - 0.6343932841636455f, - 0.6344944655600041f, - 0.6345956360844714f, - 0.634696795735314f, - 0.6347979445107985f, - 0.6348990824091918f, - 0.6350002094287606f, - 0.6351013255677724f, - 0.6352024308244947f, - 0.6353035251971949f, - 0.635404608684141f, - 0.6355056812836005f, - 0.635606742993842f, - 0.6357077938131337f, - 0.6358088337397441f, - 0.6359098627719418f, - 0.6360108809079958f, - 0.6361118881461753f, - 0.6362128844847493f, - 0.6363138699219876f, - 0.6364148444561595f, - 0.636515808085535f, - 0.6366167608083841f, - 0.636717702622977f, - 0.636818633527584f, - 0.6369195535204759f, - 0.6370204625999233f, - 0.6371213607641971f, - 0.6372222480115685f, - 0.6373231243403089f, - 0.6374239897486896f, - 0.6375248442349826f, - 0.6376256877974597f, - 0.6377265204343927f, - 0.6378273421440542f, - 0.6379281529247165f, - 0.6380289527746521f, - 0.6381297416921341f, - 0.6382305196754353f, - 0.638331286722829f, - 0.6384320428325886f, - 0.6385327880029876f, - 0.6386335222322997f, - 0.6387342455187991f, - 0.6388349578607596f, - 0.6389356592564558f, - 0.6390363497041621f, - 0.6391370292021531f, - 0.6392376977487039f, - 0.6393383553420893f, - 0.6394390019805847f, - 0.6395396376624656f, - 0.6396402623860077f, - 0.6397408761494866f, - 0.6398414789511784f, - 0.6399420707893594f, - 0.6400426516623058f, - 0.6401432215682944f, - 0.6402437805056018f, - 0.640344328472505f, - 0.640444865467281f, - 0.6405453914882073f, - 0.6406459065335615f, - 0.6407464106016211f, - 0.6408469036906641f, - 0.6409473857989685f, - 0.6410478569248126f, - 0.6411483170664748f, - 0.6412487662222338f, - 0.6413492043903685f, - 0.6414496315691578f, - 0.641550047756881f, - 0.6416504529518174f, - 0.6417508471522467f, - 0.6418512303564486f, - 0.6419516025627031f, - 0.6420519637692903f, - 0.6421523139744906f, - 0.6422526531765844f, - 0.6423529813738525f, - 0.6424532985645758f, - 0.6425536047470355f, - 0.6426538999195126f, - 0.6427541840802888f, - 0.6428544572276458f, - 0.6429547193598653f, - 0.6430549704752294f, - 0.6431552105720203f, - 0.6432554396485205f, - 0.6433556577030124f, - 0.6434558647337789f, - 0.6435560607391031f, - 0.643656245717268f, - 0.6437564196665571f, - 0.6438565825852537f, - 0.6439567344716418f, - 0.6440568753240052f, - 0.6441570051406281f, - 0.6442571239197947f, - 0.6443572316597895f, - 0.6444573283588975f, - 0.644557414015403f, - 0.6446574886275913f, - 0.6447575521937479f, - 0.6448576047121578f, - 0.644957646181107f, - 0.6450576765988812f, - 0.6451576959637664f, - 0.6452577042740486f, - 0.6453577015280145f, - 0.6454576877239505f, - 0.6455576628601434f, - 0.6456576269348803f, - 0.645757579946448f, - 0.6458575218931341f, - 0.6459574527732259f, - 0.6460573725850114f, - 0.6461572813267784f, - 0.6462571789968149f, - 0.6463570655934093f, - 0.6464569411148499f, - 0.6465568055594255f, - 0.6466566589254249f, - 0.6467565012111371f, - 0.6468563324148515f, - 0.6469561525348573f, - 0.6470559615694442f, - 0.6471557595169022f, - 0.6472555463755209f, - 0.6473553221435907f, - 0.647455086819402f, - 0.6475548404012453f, - 0.6476545828874114f, - 0.6477543142761911f, - 0.6478540345658756f, - 0.6479537437547563f, - 0.6480534418411247f, - 0.6481531288232724f, - 0.6482528046994913f, - 0.6483524694680736f, - 0.6484521231273114f, - 0.6485517656754973f, - 0.648651397110924f, - 0.6487510174318842f, - 0.648850626636671f, - 0.6489502247235776f, - 0.6490498116908974f, - 0.649149387536924f, - 0.649248952259951f, - 0.649348505858273f, - 0.6494480483301837f, - 0.6495475796739774f, - 0.6496470998879489f, - 0.6497466089703928f, - 0.6498461069196041f, - 0.6499455937338781f, - 0.6500450694115097f, - 0.6501445339507947f, - 0.6502439873500288f, - 0.6503434296075078f, - 0.6504428607215278f, - 0.6505422806903853f, - 0.6506416895123764f, - 0.650741087185798f, - 0.6508404737089468f, - 0.65093984908012f, - 0.6510392132976147f, - 0.6511385663597284f, - 0.6512379082647587f, - 0.6513372390110033f, - 0.6514365585967603f, - 0.6515358670203278f, - 0.6516351642800043f, - 0.6517344503740885f, - 0.6518337253008788f, - 0.6519329890586743f, - 0.6520322416457741f, - 0.6521314830604776f, - 0.6522307133010844f, - 0.6523299323658942f, - 0.6524291402532068f, - 0.6525283369613222f, - 0.652627522488541f, - 0.6527266968331633f, - 0.6528258599934902f, - 0.6529250119678224f, - 0.6530241527544608f, - 0.6531232823517068f, - 0.6532224007578618f, - 0.6533215079712273f, - 0.6534206039901054f, - 0.653519688812798f, - 0.6536187624376072f, - 0.6537178248628356f, - 0.6538168760867856f, - 0.65391591610776f, - 0.654014944924062f, - 0.6541139625339946f, - 0.6542129689358611f, - 0.6543119641279651f, - 0.6544109481086103f, - 0.6545099208761008f, - 0.6546088824287407f, - 0.6547078327648341f, - 0.6548067718826858f, - 0.6549056997806002f, - 0.6550046164568826f, - 0.6551035219098377f, - 0.6552024161377709f, - 0.6553012991389878f, - 0.6554001709117939f, - 0.6554990314544952f, - 0.6555978807653977f, - 0.6556967188428074f, - 0.6557955456850312f, - 0.6558943612903755f, - 0.6559931656571472f, - 0.656091958783653f, - 0.6561907406682004f, - 0.6562895113090967f, - 0.6563882707046497f, - 0.656487018853167f, - 0.6565857557529565f, - 0.6566844814023264f, - 0.6567831957995851f, - 0.6568818989430413f, - 0.6569805908310036f, - 0.657079271461781f, - 0.6571779408336825f, - 0.6572765989450177f, - 0.6573752457940958f, - 0.6574738813792266f, - 0.6575725056987202f, - 0.6576711187508865f, - 0.6577697205340358f, - 0.6578683110464788f, - 0.6579668902865259f, - 0.6580654582524882f, - 0.6581640149426765f, - 0.6582625603554024f, - 0.6583610944889771f, - 0.6584596173417123f, - 0.6585581289119198f, - 0.6586566291979117f, - 0.6587551181980003f, - 0.6588535959104977f, - 0.658952062333717f, - 0.6590505174659704f, - 0.6591489613055715f, - 0.6592473938508332f, - 0.6593458151000688f, - 0.6594442250515921f, - 0.6595426237037167f, - 0.6596410110547567f, - 0.6597393871030262f, - 0.6598377518468393f, - 0.659936105284511f, - 0.6600344474143557f, - 0.6601327782346886f, - 0.6602310977438246f, - 0.6603294059400792f, - 0.6604277028217677f, - 0.660525988387206f, - 0.6606242626347099f, - 0.6607225255625956f, - 0.6608207771691793f, - 0.6609190174527775f, - 0.6610172464117068f, - 0.6611154640442842f, - 0.6612136703488268f, - 0.6613118653236518f, - 0.6614100489670767f, - 0.661508221277419f, - 0.6616063822529966f, - 0.6617045318921277f, - 0.6618026701931303f, - 0.6619007971543232f, - 0.6619989127740245f, - 0.6620970170505532f, - 0.6621951099822285f, - 0.6622931915673695f, - 0.6623912618042956f, - 0.6624893206913265f, - 0.6625873682267818f, - 0.6626854044089815f, - 0.6627834292362458f, - 0.6628814427068951f, - 0.66297944481925f, - 0.6630774355716312f, - 0.6631754149623597f, - 0.6632733829897566f, - 0.6633713396521433f, - 0.6634692849478413f, - 0.6635672188751723f, - 0.6636651414324585f, - 0.6637630526180216f, - 0.6638609524301842f, - 0.6639588408672686f, - 0.6640567179275978f, - 0.6641545836094944f, - 0.6642524379112816f, - 0.6643502808312829f, - 0.6644481123678215f, - 0.6645459325192213f, - 0.664643741283806f, - 0.6647415386598998f, - 0.664839324645827f, - 0.6649370992399118f, - 0.6650348624404793f, - 0.6651326142458539f, - 0.6652303546543609f, - 0.6653280836643253f, - 0.665425801274073f, - 0.6655235074819292f, - 0.66562120228622f, - 0.6657188856852714f, - 0.6658165576774094f, - 0.6659142182609606f, - 0.6660118674342517f, - 0.6661095051956092f, - 0.6662071315433603f, - 0.6663047464758322f, - 0.6664023499913523f, - 0.6664999420882481f, - 0.6665975227648477f, - 0.6666950920194786f, - 0.6667926498504694f, - 0.6668901962561481f, - 0.6669877312348436f, - 0.6670852547848845f, - 0.6671827669045997f, - 0.6672802675923184f, - 0.66737775684637f, - 0.6674752346650841f, - 0.6675727010467903f, - 0.6676701559898188f, - 0.6677675994924995f, - 0.6678650315531627f, - 0.667962452170139f, - 0.6680598613417592f, - 0.6681572590663541f, - 0.668254645342255f, - 0.668352020167793f, - 0.6684493835412997f, - 0.6685467354611069f, - 0.6686440759255462f, - 0.6687414049329501f, - 0.6688387224816505f, - 0.6689360285699804f, - 0.6690333231962718f, - 0.6691306063588582f, - 0.6692278780560724f, - 0.6693251382862476f, - 0.6694223870477175f, - 0.6695196243388155f, - 0.6696168501578758f, - 0.6697140645032321f, - 0.6698112673732189f, - 0.6699084587661707f, - 0.670005638680422f, - 0.6701028071143077f, - 0.6701999640661628f, - 0.6702971095343225f, - 0.6703942435171224f, - 0.6704913660128979f, - 0.6705884770199851f, - 0.67068557653672f, - 0.6707826645614386f, - 0.6708797410924776f, - 0.6709768061281735f, - 0.671073859666863f, - 0.6711709017068831f, - 0.6712679322465713f, - 0.6713649512842649f, - 0.6714619588183013f, - 0.6715589548470183f, - 0.6716559393687542f, - 0.6717529123818471f, - 0.6718498738846351f, - 0.6719468238754573f, - 0.6720437623526522f, - 0.6721406893145586f, - 0.6722376047595159f, - 0.6723345086858635f, - 0.672431401091941f, - 0.672528281976088f, - 0.6726251513366446f, - 0.672722009171951f, - 0.6728188554803475f, - 0.6729156902601746f, - 0.6730125135097732f, - 0.6731093252274843f, - 0.6732061254116489f, - 0.6733029140606084f, - 0.6733996911727044f, - 0.6734964567462786f, - 0.6735932107796729f, - 0.6736899532712296f, - 0.6737866842192909f, - 0.6738834036221993f, - 0.6739801114782978f, - 0.6740768077859292f, - 0.6741734925434364f, - 0.6742701657491632f, - 0.6743668274014527f, - 0.6744634774986489f, - 0.6745601160390955f, - 0.6746567430211369f, - 0.6747533584431171f, - 0.6748499623033809f, - 0.6749465546002729f, - 0.675043135332138f, - 0.6751397044973214f, - 0.6752362620941683f, - 0.6753328081210244f, - 0.6754293425762352f, - 0.6755258654581467f, - 0.6756223767651051f, - 0.6757188764954564f, - 0.6758153646475473f, - 0.6759118412197246f, - 0.6760083062103351f, - 0.676104759617726f, - 0.6762012014402444f, - 0.6762976316762379f, - 0.6763940503240542f, - 0.6764904573820412f, - 0.6765868528485469f, - 0.6766832367219198f, - 0.6767796090005082f, - 0.6768759696826606f, - 0.6769723187667264f, - 0.6770686562510543f, - 0.6771649821339938f, - 0.6772612964138942f, - 0.6773575990891053f, - 0.677453890157977f, - 0.6775501696188592f, - 0.6776464374701022f, - 0.6777426937100568f, - 0.6778389383370732f, - 0.6779351713495027f, - 0.678031392745696f, - 0.6781276025240047f, - 0.6782238006827802f, - 0.6783199872203741f, - 0.6784161621351382f, - 0.6785123254254246f, - 0.6786084770895857f, - 0.6787046171259739f, - 0.6788007455329417f, - 0.6788968623088422f, - 0.6789929674520284f, - 0.6790890609608535f, - 0.679185142833671f, - 0.6792812130688346f, - 0.6793772716646981f, - 0.6794733186196157f, - 0.6795693539319414f, - 0.6796653776000299f, - 0.6797613896222358f, - 0.6798573899969138f, - 0.6799533787224191f, - 0.6800493557971071f, - 0.680145321219333f, - 0.6802412749874527f, - 0.6803372170998218f, - 0.6804331475547964f, - 0.6805290663507331f, - 0.680624973485988f, - 0.6807208689589178f, - 0.6808167527678795f, - 0.68091262491123f, - 0.6810084853873266f, - 0.6811043341945268f, - 0.6812001713311883f, - 0.6812959967956689f, - 0.6813918105863266f, - 0.6814876127015197f, - 0.6815834031396066f, - 0.6816791818989462f, - 0.6817749489778971f, - 0.6818707043748186f, - 0.6819664480880696f, - 0.6820621801160097f, - 0.6821579004569986f, - 0.6822536091093964f, - 0.6823493060715629f, - 0.6824449913418582f, - 0.6825406649186431f, - 0.682636326800278f, - 0.6827319769851238f, - 0.6828276154715418f, - 0.682923242257893f, - 0.6830188573425389f, - 0.6831144607238412f, - 0.6832100524001619f, - 0.6833056323698627f, - 0.6834012006313063f, - 0.683496757182855f, - 0.6835923020228712f, - 0.6836878351497182f, - 0.6837833565617587f, - 0.6838788662573562f, - 0.683974364234874f, - 0.6840698504926759f, - 0.6841653250291257f, - 0.6842607878425875f, - 0.6843562389314256f, - 0.6844516782940044f, - 0.6845471059286886f, - 0.6846425218338431f, - 0.684737926007833f, - 0.6848333184490235f, - 0.68492869915578f, - 0.6850240681264684f, - 0.6851194253594544f, - 0.6852147708531041f, - 0.6853101046057839f, - 0.6854054266158602f, - 0.6855007368816997f, - 0.6855960354016691f, - 0.6856913221741359f, - 0.6857865971974669f, - 0.6858818604700301f, - 0.6859771119901927f, - 0.686072351756323f, - 0.6861675797667888f, - 0.6862627960199583f, - 0.6863580005142005f, - 0.6864531932478837f, - 0.6865483742193769f, - 0.686643543427049f, - 0.6867387008692697f, - 0.6868338465444082f, - 0.6869289804508343f, - 0.687024102586918f, - 0.6871192129510292f, - 0.6872143115415383f, - 0.6873093983568158f, - 0.6874044733952326f, - 0.6874995366551594f, - 0.6875945881349674f, - 0.6876896278330278f, - 0.6877846557477123f, - 0.6878796718773925f, - 0.6879746762204404f, - 0.688069668775228f, - 0.6881646495401278f, - 0.6882596185135121f, - 0.6883545756937539f, - 0.688449521079226f, - 0.6885444546683015f, - 0.6886393764593539f, - 0.6887342864507566f, - 0.6888291846408834f, - 0.6889240710281082f, - 0.689018945610805f, - 0.6891138083873485f, - 0.689208659356113f, - 0.6893034985154732f, - 0.6893983258638043f, - 0.6894931413994814f, - 0.6895879451208796f, - 0.6896827370263748f, - 0.6897775171143427f, - 0.6898722853831591f, - 0.6899670418312003f, - 0.6900617864568426f, - 0.6901565192584627f, - 0.6902512402344372f, - 0.6903459493831431f, - 0.6904406467029578f, - 0.6905353321922585f, - 0.6906300058494228f, - 0.6907246676728286f, - 0.6908193176608538f, - 0.6909139558118766f, - 0.6910085821242756f, - 0.691103196596429f, - 0.691197799226716f, - 0.6912923900135154f, - 0.6913869689552063f, - 0.6914815360501684f, - 0.6915760912967813f, - 0.6916706346934246f, - 0.6917651662384784f, - 0.691859685930323f, - 0.6919541937673388f, - 0.6920486897479065f, - 0.6921431738704068f, - 0.6922376461332208f, - 0.6923321065347298f, - 0.6924265550733151f, - 0.6925209917473585f, - 0.6926154165552417f, - 0.6927098294953471f, - 0.6928042305660566f, - 0.6928986197657526f, - 0.6929929970928181f, - 0.6930873625456359f, - 0.6931817161225888f, - 0.6932760578220605f, - 0.693370387642434f, - 0.6934647055820933f, - 0.6935590116394222f, - 0.6936533058128049f, - 0.6937475881006255f, - 0.6938418585012688f, - 0.6939361170131192f, - 0.6940303636345616f, - 0.6941245983639813f, - 0.6942188211997635f, - 0.6943130321402938f, - 0.6944072311839579f, - 0.6945014183291416f, - 0.6945955935742312f, - 0.6946897569176129f, - 0.6947839083576733f, - 0.6948780478927992f, - 0.6949721755213775f, - 0.6950662912417952f, - 0.6951603950524399f, - 0.6952544869516989f, - 0.6953485669379602f, - 0.6954426350096116f, - 0.6955366911650414f, - 0.6956307354026379f, - 0.6957247677207896f, - 0.6958187881178854f, - 0.6959127965923143f, - 0.6960067931424654f, - 0.6961007777667281f, - 0.6961947504634921f, - 0.6962887112311471f, - 0.6963826600680832f, - 0.6964765969726905f, - 0.6965705219433594f, - 0.6966644349784806f, - 0.6967583360764451f, - 0.6968522252356436f, - 0.6969461024544675f, - 0.6970399677313083f, - 0.6971338210645576f, - 0.697227662452607f, - 0.697321491893849f, - 0.6974153093866755f, - 0.697509114929479f, - 0.6976029085206524f, - 0.6976966901585884f, - 0.6977904598416801f, - 0.6978842175683209f, - 0.697977963336904f, - 0.6980716971458233f, - 0.6981654189934726f, - 0.6982591288782461f, - 0.6983528267985382f, - 0.6984465127527432f, - 0.6985401867392559f, - 0.6986338487564712f, - 0.6987274988027843f, - 0.6988211368765903f, - 0.6989147629762851f, - 0.6990083771002643f, - 0.6991019792469237f, - 0.6991955694146595f, - 0.6992891476018682f, - 0.6993827138069463f, - 0.6994762680282904f, - 0.6995698102642978f, - 0.6996633405133653f, - 0.6997568587738907f, - 0.6998503650442712f, - 0.6999438593229048f, - 0.7000373416081895f, - 0.7001308118985237f, - 0.7002242701923053f, - 0.7003177164879333f, - 0.7004111507838063f, - 0.7005045730783236f, - 0.7005979833698842f, - 0.7006913816568877f, - 0.7007847679377337f, - 0.7008781422108219f, - 0.7009715044745526f, - 0.7010648547273258f, - 0.7011581929675422f, - 0.7012515191936025f, - 0.7013448334039074f, - 0.7014381355968581f, - 0.7015314257708557f, - 0.7016247039243019f, - 0.7017179700555983f, - 0.701811224163147f, - 0.70190446624535f, - 0.7019976963006095f, - 0.7020909143273281f, - 0.7021841203239086f, - 0.702277314288754f, - 0.7023704962202673f, - 0.7024636661168517f, - 0.7025568239769111f, - 0.7026499697988492f, - 0.7027431035810697f, - 0.7028362253219772f, - 0.7029293350199758f, - 0.7030224326734701f, - 0.7031155182808649f, - 0.7032085918405654f, - 0.7033016533509765f, - 0.7033947028105039f, - 0.703487740217553f, - 0.7035807655705297f, - 0.7036737788678402f, - 0.7037667801078905f, - 0.7038597692890872f, - 0.7039527464098368f, - 0.7040457114685466f, - 0.704138664463623f, - 0.7042316053934737f, - 0.7043245342565062f, - 0.704417451051128f, - 0.704510355775747f, - 0.7046032484287715f, - 0.7046961290086097f, - 0.7047889975136701f, - 0.7048818539423614f, - 0.7049746982930926f, - 0.7050675305642727f, - 0.7051603507543113f, - 0.7052531588616178f, - 0.7053459548846018f, - 0.7054387388216735f, - 0.705531510671243f, - 0.7056242704317206f, - 0.7057170181015171f, - 0.7058097536790431f, - 0.7059024771627096f, - 0.7059951885509279f, - 0.7060878878421093f, - 0.7061805750346656f, - 0.7062732501270086f, - 0.7063659131175501f, - 0.7064585640047025f, - 0.7065512027868784f, - 0.7066438294624902f, - 0.706736444029951f, - 0.7068290464876738f, - 0.7069216368340717f, - 0.7070142150675583f, - 0.7071067811865476f, - 0.707199335189453f, - 0.7072918770746889f, - 0.7073844068406696f, - 0.7074769244858096f, - 0.7075694300085236f, - 0.7076619234072266f, - 0.7077544046803337f, - 0.7078468738262603f, - 0.707939330843422f, - 0.7080317757302345f, - 0.7081242084851137f, - 0.708216629106476f, - 0.7083090375927377f, - 0.7084014339423154f, - 0.7084938181536258f, - 0.7085861902250861f, - 0.7086785501551135f, - 0.7087708979421253f, - 0.7088632335845394f, - 0.7089555570807734f, - 0.7090478684292455f, - 0.709140167628374f, - 0.7092324546765771f, - 0.7093247295722739f, - 0.709416992313883f, - 0.7095092428998236f, - 0.709601481328515f, - 0.7096937075983767f, - 0.7097859217078285f, - 0.7098781236552902f, - 0.7099703134391823f, - 0.7100624910579247f, - 0.7101546565099381f, - 0.7102468097936434f, - 0.7103389509074615f, - 0.7104310798498135f, - 0.7105231966191209f, - 0.7106153012138052f, - 0.7107073936322884f, - 0.7107994738729924f, - 0.7108915419343395f, - 0.710983597814752f, - 0.7110756415126528f, - 0.7111676730264644f, - 0.7112596923546102f, - 0.7113516994955131f, - 0.711443694447597f, - 0.7115356772092853f, - 0.7116276477790021f, - 0.7117196061551713f, - 0.7118115523362174f, - 0.7119034863205648f, - 0.7119954081066383f, - 0.7120873176928628f, - 0.7121792150776638f, - 0.712271100259466f, - 0.7123629732366955f, - 0.7124548340077779f, - 0.7125466825711391f, - 0.7126385189252054f, - 0.7127303430684032f, - 0.7128221549991591f, - 0.7129139547159f, - 0.7130057422170529f, - 0.7130975175010451f, - 0.7131892805663039f, - 0.7132810314112572f, - 0.7133727700343326f, - 0.7134644964339584f, - 0.7135562106085627f, - 0.713647912556574f, - 0.7137396022764213f, - 0.7138312797665333f, - 0.7139229450253392f, - 0.7140145980512682f, - 0.71410623884275f, - 0.7141978673982143f, - 0.7142894837160911f, - 0.7143810877948109f, - 0.7144726796328034f, - 0.7145642592284996f, - 0.7146558265803303f, - 0.7147473816867265f, - 0.7148389245461194f, - 0.7149304551569403f, - 0.7150219735176212f, - 0.7151134796265938f, - 0.71520497348229f, - 0.7152964550831421f, - 0.7153879244275828f, - 0.7154793815140448f, - 0.7155708263409608f, - 0.7156622589067639f, - 0.7157536792098877f, - 0.7158450872487655f, - 0.7159364830218311f, - 0.7160278665275186f, - 0.7161192377642619f, - 0.7162105967304956f, - 0.7163019434246541f, - 0.7163932778451726f, - 0.7164845999904855f, - 0.7165759098590286f, - 0.7166672074492371f, - 0.7167584927595464f, - 0.7168497657883927f, - 0.7169410265342119f, - 0.7170322749954402f, - 0.7171235111705143f, - 0.7172147350578707f, - 0.7173059466559465f, - 0.7173971459631786f, - 0.7174883329780044f, - 0.7175795076988615f, - 0.7176706701241876f, - 0.7177618202524206f, - 0.7178529580819988f, - 0.7179440836113604f, - 0.7180351968389442f, - 0.7181262977631888f, - 0.7182173863825334f, - 0.718308462695417f, - 0.7183995267002792f, - 0.7184905783955595f, - 0.718581617779698f, - 0.7186726448511346f, - 0.7187636596083096f, - 0.7188546620496634f, - 0.7189456521736368f, - 0.7190366299786707f, - 0.7191275954632061f, - 0.7192185486256845f, - 0.7193094894645474f, - 0.7194004179782365f, - 0.7194913341651938f, - 0.7195822380238615f, - 0.7196731295526819f, - 0.7197640087500976f, - 0.7198548756145515f, - 0.7199457301444868f, - 0.7200365723383464f, - 0.7201274021945737f, - 0.7202182197116126f, - 0.7203090248879069f, - 0.7203998177219006f, - 0.7204905982120382f, - 0.7205813663567638f, - 0.7206721221545225f, - 0.7207628656037591f, - 0.7208535967029187f, - 0.7209443154504467f, - 0.7210350218447887f, - 0.7211257158843903f, - 0.7212163975676976f, - 0.7213070668931567f, - 0.7213977238592142f, - 0.7214883684643165f, - 0.7215790007069105f, - 0.7216696205854433f, - 0.7217602280983622f, - 0.7218508232441144f, - 0.7219414060211479f, - 0.7220319764279104f, - 0.7221225344628502f, - 0.7222130801244154f, - 0.7223036134110545f, - 0.7223941343212164f, - 0.7224846428533498f, - 0.7225751390059041f, - 0.7226656227773287f, - 0.722756094166073f, - 0.722846553170587f, - 0.7229369997893205f, - 0.7230274340207238f, - 0.7231178558632474f, - 0.7232082653153421f, - 0.7232986623754584f, - 0.7233890470420474f, - 0.7234794193135605f, - 0.7235697791884493f, - 0.7236601266651654f, - 0.7237504617421607f, - 0.7238407844178875f, - 0.7239310946907979f, - 0.7240213925593446f, - 0.7241116780219803f, - 0.7242019510771581f, - 0.7242922117233312f, - 0.7243824599589528f, - 0.7244726957824766f, - 0.7245629191923566f, - 0.7246531301870466f, - 0.7247433287650011f, - 0.7248335149246744f, - 0.7249236886645213f, - 0.7250138499829966f, - 0.7251039988785554f, - 0.7251941353496532f, - 0.7252842593947453f, - 0.7253743710122876f, - 0.725464470200736f, - 0.7255545569585468f, - 0.7256446312841762f, - 0.7257346931760809f, - 0.7258247426327177f, - 0.7259147796525436f, - 0.7260048042340158f, - 0.7260948163755919f, - 0.7261848160757295f, - 0.7262748033328864f, - 0.7263647781455208f, - 0.726454740512091f, - 0.7265446904310554f, - 0.7266346279008729f, - 0.7267245529200023f, - 0.7268144654869028f, - 0.7269043656000338f, - 0.7269942532578549f, - 0.7270841284588259f, - 0.7271739912014068f, - 0.7272638414840578f, - 0.7273536793052393f, - 0.727443504663412f, - 0.7275333175570369f, - 0.7276231179845749f, - 0.7277129059444872f, - 0.7278026814352356f, - 0.7278924444552817f, - 0.7279821950030874f, - 0.7280719330771148f, - 0.7281616586758263f, - 0.7282513717976846f, - 0.7283410724411523f, - 0.7284307606046926f, - 0.7285204362867684f, - 0.7286100994858437f, - 0.7286997502003816f, - 0.728789388428846f, - 0.7288790141697012f, - 0.7289686274214116f, - 0.7290582281824413f, - 0.7291478164512553f, - 0.7292373922263184f, - 0.7293269555060958f, - 0.729416506289053f, - 0.7295060445736552f, - 0.7295955703583684f, - 0.729685083641659f, - 0.7297745844219925f, - 0.7298640726978357f, - 0.7299535484676551f, - 0.7300430117299178f, - 0.7301324624830907f, - 0.7302219007256411f, - 0.7303113264560365f, - 0.7304007396727447f, - 0.7304901403742333f, - 0.7305795285589709f, - 0.7306689042254256f, - 0.7307582673720661f, - 0.7308476179973611f, - 0.7309369560997796f, - 0.7310262816777908f, - 0.7311155947298641f, - 0.7312048952544693f, - 0.7312941832500761f, - 0.7313834587151545f, - 0.7314727216481751f, - 0.7315619720476083f, - 0.7316512099119247f, - 0.7317404352395952f, - 0.7318296480290911f, - 0.7319188482788838f, - 0.7320080359874447f, - 0.7320972111532456f, - 0.7321863737747585f, - 0.7322755238504557f, - 0.7323646613788097f, - 0.7324537863582931f, - 0.7325428987873787f, - 0.7326319986645397f, - 0.7327210859882493f, - 0.732810160756981f, - 0.7328992229692086f, - 0.7329882726234062f, - 0.7330773097180476f, - 0.7331663342516073f, - 0.7332553462225601f, - 0.7333443456293804f, - 0.7334333324705435f, - 0.7335223067445248f, - 0.7336112684497994f, - 0.7337002175848432f, - 0.7337891541481318f, - 0.7338780781381417f, - 0.7339669895533488f, - 0.7340558883922301f, - 0.7341447746532619f, - 0.7342336483349213f, - 0.7343225094356856f, - 0.7344113579540319f, - 0.7345001938884381f, - 0.7345890172373819f, - 0.7346778279993413f, - 0.7347666261727948f, - 0.7348554117562205f, - 0.7349441847480972f, - 0.7350329451469039f, - 0.7351216929511197f, - 0.7352104281592239f, - 0.735299150769696f, - 0.7353878607810158f, - 0.7354765581916634f, - 0.7355652430001187f, - 0.7356539152048623f, - 0.7357425748043749f, - 0.7358312217971372f, - 0.7359198561816302f, - 0.7360084779563355f, - 0.7360970871197343f, - 0.7361856836703083f, - 0.7362742676065396f, - 0.7363628389269102f, - 0.7364513976299025f, - 0.736539943713999f, - 0.7366284771776825f, - 0.7367169980194362f, - 0.7368055062377431f, - 0.7368940018310867f, - 0.7369824847979507f, - 0.737070955136819f, - 0.7371594128461754f, - 0.7372478579245046f, - 0.7373362903702909f, - 0.7374247101820189f, - 0.7375131173581739f, - 0.7376015118972408f, - 0.7376898937977051f, - 0.7377782630580524f, - 0.7378666196767684f, - 0.7379549636523393f, - 0.7380432949832512f, - 0.7381316136679905f, - 0.7382199197050442f, - 0.7383082130928991f, - 0.738396493830042f, - 0.7384847619149606f, - 0.7385730173461422f, - 0.7386612601220749f, - 0.7387494902412463f, - 0.7388377077021447f, - 0.7389259125032587f, - 0.7390141046430768f, - 0.7391022841200879f, - 0.7391904509327809f, - 0.7392786050796453f, - 0.7393667465591708f, - 0.7394548753698466f, - 0.7395429915101628f, - 0.7396310949786097f, - 0.7397191857736777f, - 0.7398072638938572f, - 0.739895329337639f, - 0.7399833821035144f, - 0.7400714221899743f, - 0.7401594495955105f, - 0.7402474643186144f, - 0.740335466357778f, - 0.7404234557114936f, - 0.7405114323782531f, - 0.7405993963565493f, - 0.7406873476448749f, - 0.7407752862417228f, - 0.7408632121455865f, - 0.7409511253549591f, - 0.7410390258683343f, - 0.741126913684206f, - 0.7412147888010684f, - 0.7413026512174156f, - 0.741390500931742f, - 0.7414783379425426f, - 0.7415661622483123f, - 0.741653973847546f, - 0.7417417727387392f, - 0.7418295589203876f, - 0.7419173323909868f, - 0.7420050931490331f, - 0.7420928411930224f, - 0.7421805765214515f, - 0.7422682991328169f, - 0.7423560090256155f, - 0.7424437061983444f, - 0.7425313906495011f, - 0.7426190623775831f, - 0.742706721381088f, - 0.7427943676585137f, - 0.7428820012083587f, - 0.7429696220291213f, - 0.7430572301193002f, - 0.7431448254773941f, - 0.7432324081019024f, - 0.743319977991324f, - 0.7434075351441586f, - 0.7434950795589059f, - 0.743582611234066f, - 0.743670130168139f, - 0.7437576363596251f, - 0.7438451298070251f, - 0.7439326105088396f, - 0.74402007846357f, - 0.7441075336697173f, - 0.744194976125783f, - 0.7442824058302687f, - 0.7443698227816766f, - 0.7444572269785088f, - 0.7445446184192673f, - 0.7446319971024551f, - 0.7447193630265748f, - 0.7448067161901294f, - 0.744894056591622f, - 0.7449813842295563f, - 0.7450686991024358f, - 0.7451560012087645f, - 0.7452432905470463f, - 0.7453305671157857f, - 0.7454178309134872f, - 0.7455050819386556f, - 0.7455923201897958f, - 0.7456795456654131f, - 0.7457667583640127f, - 0.7458539582841005f, - 0.7459411454241821f, - 0.7460283197827638f, - 0.7461154813583517f, - 0.7462026301494524f, - 0.7462897661545728f, - 0.7463768893722195f, - 0.7464639998008998f, - 0.7465510974391213f, - 0.7466381822853914f, - 0.7467252543382178f, - 0.7468123135961089f, - 0.7468993600575726f, - 0.7469863937211177f, - 0.7470734145852527f, - 0.7471604226484866f, - 0.7472474179093285f, - 0.7473344003662876f, - 0.7474213700178738f, - 0.7475083268625967f, - 0.7475952708989664f, - 0.7476822021254932f, - 0.7477691205406873f, - 0.7478560261430597f, - 0.7479429189311211f, - 0.7480297989033825f, - 0.7481166660583555f, - 0.7482035203945515f, - 0.7482903619104824f, - 0.74837719060466f, - 0.7484640064755966f, - 0.7485508095218047f, - 0.748637599741797f, - 0.7487243771340861f, - 0.7488111416971853f, - 0.7488978934296082f, - 0.7489846323298677f, - 0.749071358396478f, - 0.7491580716279529f, - 0.7492447720228066f, - 0.7493314595795536f, - 0.7494181342967084f, - 0.749504796172786f, - 0.7495914452063014f, - 0.7496780813957699f, - 0.749764704739707f, - 0.7498513152366284f, - 0.7499379128850503f, - 0.7500244976834886f, - 0.7501110696304596f, - 0.7501976287244801f, - 0.750284174964067f, - 0.7503707083477371f, - 0.7504572288740079f, - 0.7505437365413969f, - 0.7506302313484218f, - 0.7507167132936003f, - 0.7508031823754509f, - 0.7508896385924917f, - 0.7509760819432415f, - 0.751062512426219f, - 0.7511489300399432f, - 0.7512353347829335f, - 0.7513217266537091f, - 0.75140810565079f, - 0.751494471772696f, - 0.7515808250179473f, - 0.7516671653850642f, - 0.7517534928725673f, - 0.7518398074789773f, - 0.7519261092028154f, - 0.7520123980426028f, - 0.752098673996861f, - 0.7521849370641114f, - 0.7522711872428762f, - 0.7523574245316774f, - 0.7524436489290375f, - 0.7525298604334788f, - 0.7526160590435244f, - 0.7527022447576971f, - 0.7527884175745201f, - 0.7528745774925171f, - 0.7529607245102115f, - 0.7530468586261273f, - 0.7531329798387888f, - 0.7532190881467199f, - 0.7533051835484456f, - 0.7533912660424904f, - 0.7534773356273794f, - 0.7535633923016378f, - 0.7536494360637911f, - 0.7537354669123649f, - 0.7538214848458852f, - 0.7539074898628778f, - 0.7539934819618694f, - 0.7540794611413864f, - 0.7541654273999556f, - 0.7542513807361038f, - 0.7543373211483584f, - 0.7544232486352468f, - 0.7545091631952967f, - 0.7545950648270359f, - 0.7546809535289924f, - 0.7547668292996949f, - 0.7548526921376715f, - 0.7549385420414512f, - 0.755024379009563f, - 0.7551102030405359f, - 0.7551960141328996f, - 0.7552818122851837f, - 0.7553675974959178f, - 0.7554533697636322f, - 0.7555391290868573f, - 0.7556248754641235f, - 0.7557106088939616f, - 0.7557963293749026f, - 0.7558820369054777f, - 0.7559677314842183f, - 0.756053413109656f, - 0.7561390817803227f, - 0.7562247374947506f, - 0.7563103802514719f, - 0.7563960100490192f, - 0.7564816268859252f, - 0.7565672307607229f, - 0.7566528216719454f, - 0.7567383996181263f, - 0.7568239645977991f, - 0.7569095166094978f, - 0.7569950556517564f, - 0.7570805817231092f, - 0.7571660948220907f, - 0.757251594947236f, - 0.7573370820970796f, - 0.757422556270157f, - 0.7575080174650034f, - 0.7575934656801546f, - 0.7576789009141465f, - 0.757764323165515f, - 0.7578497324327966f, - 0.7579351287145278f, - 0.7580205120092454f, - 0.7581058823154861f, - 0.7581912396317875f, - 0.758276583956687f, - 0.7583619152887219f, - 0.7584472336264302f, - 0.7585325389683502f, - 0.75861783131302f, - 0.7587031106589781f, - 0.7587883770047635f, - 0.7588736303489151f, - 0.7589588706899718f, - 0.7590440980264735f, - 0.7591293123569597f, - 0.7592145136799701f, - 0.7592997019940451f, - 0.7593848772977247f, - 0.7594700395895496f, - 0.7595551888680605f, - 0.7596403251317985f, - 0.7597254483793048f, - 0.7598105586091206f, - 0.7598956558197879f, - 0.7599807400098484f, - 0.7600658111778442f, - 0.7601508693223177f, - 0.7602359144418114f, - 0.7603209465348683f, - 0.760405965600031f, - 0.7604909716358429f, - 0.7605759646408475f, - 0.7606609446135884f, - 0.7607459115526094f, - 0.7608308654564548f, - 0.760915806323669f, - 0.7610007341527963f, - 0.7610856489423817f, - 0.7611705506909701f, - 0.7612554393971067f, - 0.7613403150593372f, - 0.7614251776762069f, - 0.7615100272462618f, - 0.7615948637680483f, - 0.7616796872401125f, - 0.761764497661001f, - 0.7618492950292607f, - 0.7619340793434385f, - 0.7620188506020816f, - 0.7621036088037377f, - 0.7621883539469544f, - 0.7622730860302794f, - 0.7623578050522613f, - 0.7624425110114479f, - 0.7625272039063881f, - 0.7626118837356307f, - 0.7626965504977247f, - 0.7627812041912193f, - 0.7628658448146641f, - 0.7629504723666087f, - 0.7630350868456032f, - 0.7631196882501975f, - 0.7632042765789422f, - 0.7632888518303877f, - 0.763373414003085f, - 0.7634579630955851f, - 0.7635424991064392f, - 0.763627022034199f, - 0.7637115318774159f, - 0.7637960286346421f, - 0.7638805123044298f, - 0.7639649828853312f, - 0.764049440375899f, - 0.764133884774686f, - 0.7642183160802454f, - 0.7643027342911304f, - 0.7643871394058945f, - 0.7644715314230917f, - 0.7645559103412755f, - 0.7646402761590003f, - 0.7647246288748206f, - 0.7648089684872911f, - 0.7648932949949664f, - 0.7649776083964018f, - 0.7650619086901526f, - 0.7651461958747742f, - 0.7652304699488225f, - 0.7653147309108533f, - 0.7653989787594231f, - 0.7654832134930881f, - 0.7655674351104051f, - 0.765651643609931f, - 0.7657358389902227f, - 0.7658200212498376f, - 0.7659041903873335f, - 0.7659883464012679f, - 0.766072489290199f, - 0.766156619052685f, - 0.7662407356872842f, - 0.7663248391925555f, - 0.7664089295670575f, - 0.7664930068093498f, - 0.7665770709179914f, - 0.7666611218915421f, - 0.7667451597285615f, - 0.7668291844276097f, - 0.766913195987247f, - 0.766997194406034f, - 0.7670811796825312f, - 0.7671651518152995f, - 0.7672491108029003f, - 0.7673330566438948f, - 0.7674169893368448f, - 0.7675009088803121f, - 0.7675848152728585f, - 0.7676687085130465f, - 0.7677525885994386f, - 0.7678364555305974f, - 0.7679203093050861f, - 0.7680041499214677f, - 0.7680879773783057f, - 0.7681717916741636f, - 0.7682555928076056f, - 0.7683393807771954f, - 0.7684231555814975f, - 0.7685069172190767f, - 0.7685906656884972f, - 0.7686744009883244f, - 0.7687581231171233f, - 0.7688418320734596f, - 0.7689255278558986f, - 0.7690092104630065f, - 0.7690928798933494f, - 0.7691765361454935f, - 0.7692601792180056f, - 0.7693438091094522f, - 0.7694274258184006f, - 0.769511029343418f, - 0.7695946196830717f, - 0.7696781968359295f, - 0.7697617608005592f, - 0.7698453115755293f, - 0.7699288491594078f, - 0.7700123735507636f, - 0.7700958847481653f, - 0.7701793827501822f, - 0.7702628675553833f, - 0.7703463391623383f, - 0.7704297975696169f, - 0.7705132427757893f, - 0.7705966747794252f, - 0.7706800935790953f, - 0.7707634991733702f, - 0.7708468915608208f, - 0.7709302707400181f, - 0.7710136367095335f, - 0.7710969894679386f, - 0.7711803290138051f, - 0.771263655345705f, - 0.7713469684622104f, - 0.771430268361894f, - 0.7715135550433284f, - 0.7715968285050864f, - 0.7716800887457412f, - 0.7717633357638662f, - 0.7718465695580349f, - 0.7719297901268212f, - 0.772012997468799f, - 0.7720961915825428f, - 0.7721793724666268f, - 0.772262540119626f, - 0.7723456945401151f, - 0.7724288357266694f, - 0.7725119636778645f, - 0.7725950783922756f, - 0.7726781798684788f, - 0.77276126810505f, - 0.7728443431005658f, - 0.7729274048536025f, - 0.7730104533627369f, - 0.7730934886265461f, - 0.7731765106436073f, - 0.7732595194124977f, - 0.7733425149317952f, - 0.7734254972000777f, - 0.7735084662159232f, - 0.7735914219779101f, - 0.773674364484617f, - 0.7737572937346227f, - 0.7738402097265062f, - 0.7739231124588467f, - 0.7740060019302238f, - 0.7740888781392172f, - 0.7741717410844068f, - 0.7742545907643728f, - 0.7743374271776954f, - 0.7744202503229555f, - 0.7745030601987338f, - 0.7745858568036115f, - 0.7746686401361697f, - 0.77475141019499f, - 0.7748341669786543f, - 0.7749169104857444f, - 0.7749996407148426f, - 0.7750823576645314f, - 0.7751650613333934f, - 0.7752477517200114f, - 0.7753304288229687f, - 0.7754130926408485f, - 0.7754957431722344f, - 0.7755783804157104f, - 0.7756610043698603f, - 0.7757436150332685f, - 0.7758262124045193f, - 0.7759087964821977f, - 0.7759913672648884f, - 0.7760739247511768f, - 0.776156468939648f, - 0.7762389998288878f, - 0.776321517417482f, - 0.7764040217040168f, - 0.7764865126870785f, - 0.7765689903652537f, - 0.7766514547371288f, - 0.7767339058012912f, - 0.7768163435563279f, - 0.7768987680008265f, - 0.7769811791333745f, - 0.7770635769525599f, - 0.7771459614569708f, - 0.7772283326451958f, - 0.777310690515823f, - 0.7773930350674417f, - 0.7774753662986408f, - 0.7775576842080096f, - 0.7776399887941375f, - 0.7777222800556143f, - 0.7778045579910298f, - 0.7778868225989745f, - 0.7779690738780384f, - 0.7780513118268125f, - 0.7781335364438876f, - 0.7782157477278548f, - 0.7782979456773055f, - 0.7783801302908311f, - 0.7784623015670233f, - 0.7785444595044746f, - 0.7786266041017768f, - 0.7787087353575223f, - 0.7787908532703041f, - 0.778872957838715f, - 0.7789550490613482f, - 0.779037126936797f, - 0.7791191914636553f, - 0.7792012426405166f, - 0.7792832804659752f, - 0.7793653049386253f, - 0.7794473160570614f, - 0.7795293138198784f, - 0.7796112982256712f, - 0.779693269273035f, - 0.7797752269605652f, - 0.7798571712868576f, - 0.7799391022505081f, - 0.7800210198501127f, - 0.780102924084268f, - 0.7801848149515703f, - 0.7802666924506166f, - 0.780348556580004f, - 0.7804304073383297f, - 0.7805122447241912f, - 0.7805940687361862f, - 0.7806758793729128f, - 0.780757676632969f, - 0.7808394605149535f, - 0.7809212310174646f, - 0.7810029881391015f, - 0.7810847318784632f, - 0.781166462234149f, - 0.7812481792047585f, - 0.7813298827888916f, - 0.7814115729851481f, - 0.7814932497921285f, - 0.7815749132084333f, - 0.781656563232663f, - 0.7817381998634186f, - 0.7818198230993014f, - 0.7819014329389127f, - 0.7819830293808543f, - 0.7820646124237278f, - 0.7821461820661356f, - 0.7822277383066798f, - 0.782309281143963f, - 0.7823908105765881f, - 0.782472326603158f, - 0.782553829222276f, - 0.7826353184325455f, - 0.7827167942325703f, - 0.7827982566209543f, - 0.7828797055963016f, - 0.7829611411572166f, - 0.7830425633023042f, - 0.7831239720301687f, - 0.7832053673394157f, - 0.7832867492286504f, - 0.7833681176964781f, - 0.7834494727415048f, - 0.7835308143623365f, - 0.7836121425575794f, - 0.7836934573258398f, - 0.7837747586657247f, - 0.7838560465758406f, - 0.7839373210547951f, - 0.7840185821011953f, - 0.784099829713649f, - 0.7841810638907639f, - 0.7842622846311482f, - 0.78434349193341f, - 0.784424685796158f, - 0.7845058662180011f, - 0.784587033197548f, - 0.784668186733408f, - 0.7847493268241906f, - 0.7848304534685056f, - 0.7849115666649628f, - 0.7849926664121722f, - 0.7850737527087446f, - 0.7851548255532901f, - 0.7852358849444198f, - 0.7853169308807448f, - 0.7853979633608764f, - 0.7854789823834262f, - 0.7855599879470057f, - 0.7856409800502271f, - 0.7857219586917025f, - 0.7858029238700444f, - 0.7858838755838654f, - 0.7859648138317786f, - 0.786045738612397f, - 0.7861266499243341f, - 0.7862075477662034f, - 0.7862884321366188f, - 0.7863693030341944f, - 0.7864501604575445f, - 0.7865310044052833f, - 0.786611834876026f, - 0.7866926518683874f, - 0.7867734553809828f, - 0.7868542454124274f, - 0.7869350219613372f, - 0.7870157850263281f, - 0.787096534606016f, - 0.7871772706990176f, - 0.7872579933039491f, - 0.7873387024194277f, - 0.7874193980440705f, - 0.7875000801764944f, - 0.7875807488153173f, - 0.7876614039591567f, - 0.7877420456066309f, - 0.7878226737563578f, - 0.7879032884069561f, - 0.7879838895570445f, - 0.7880644772052418f, - 0.7881450513501671f, - 0.78822561199044f, - 0.7883061591246798f, - 0.7883866927515069f, - 0.7884672128695407f, - 0.7885477194774019f, - 0.7886282125737109f, - 0.7887086921570886f, - 0.7887891582261559f, - 0.7888696107795341f, - 0.7889500498158446f, - 0.7890304753337092f, - 0.7891108873317497f, - 0.7891912858085884f, - 0.7892716707628477f, - 0.78935204219315f, - 0.7894324000981184f, - 0.7895127444763759f, - 0.7895930753265458f, - 0.7896733926472517f, - 0.7897536964371172f, - 0.7898339866947666f, - 0.789914263418824f, - 0.7899945266079139f, - 0.790074776260661f, - 0.7901550123756903f, - 0.790235234951627f, - 0.7903154439870963f, - 0.7903956394807241f, - 0.790475821431136f, - 0.7905559898369584f, - 0.7906361446968174f, - 0.7907162860093397f, - 0.790796413773152f, - 0.7908765279868815f, - 0.7909566286491553f, - 0.7910367157586009f, - 0.7911167893138462f, - 0.791196849313519f, - 0.7912768957562476f, - 0.7913569286406602f, - 0.7914369479653858f, - 0.791516953729053f, - 0.791596945930291f, - 0.7916769245677292f, - 0.7917568896399972f, - 0.7918368411457248f, - 0.7919167790835422f, - 0.7919967034520793f, - 0.792076614249967f, - 0.7921565114758359f, - 0.792236395128317f, - 0.7923162652060415f, - 0.7923961217076407f, - 0.7924759646317465f, - 0.7925557939769908f, - 0.7926356097420056f, - 0.7927154119254235f, - 0.7927952005258769f, - 0.7928749755419987f, - 0.792954736972422f, - 0.7930344848157802f, - 0.7931142190707066f, - 0.7931939397358354f, - 0.7932736468098001f, - 0.7933533402912352f, - 0.7934330201787752f, - 0.7935126864710547f, - 0.7935923391667087f, - 0.7936719782643723f, - 0.7937516037626811f, - 0.7938312156602706f, - 0.7939108139557766f, - 0.7939903986478353f, - 0.794069969735083f, - 0.7941495272161564f, - 0.7942290710896922f, - 0.7943086013543273f, - 0.7943881180086994f, - 0.7944676210514454f, - 0.7945471104812034f, - 0.7946265862966114f, - 0.7947060484963074f, - 0.7947854970789301f, - 0.7948649320431179f, - 0.79494435338751f, - 0.7950237611107452f, - 0.7951031552114631f, - 0.7951825356883034f, - 0.7952619025399057f, - 0.7953412557649101f, - 0.7954205953619569f, - 0.7954999213296866f, - 0.7955792336667402f, - 0.7956585323717585f, - 0.7957378174433829f, - 0.7958170888802548f, - 0.7958963466810158f, - 0.7959755908443079f, - 0.7960548213687734f, - 0.7961340382530546f, - 0.7962132414957941f, - 0.7962924310956347f, - 0.7963716070512197f, - 0.7964507693611923f, - 0.7965299180241963f, - 0.7966090530388752f, - 0.7966881744038732f, - 0.7967672821178347f, - 0.7968463761794039f, - 0.7969254565872258f, - 0.7970045233399453f, - 0.7970835764362076f, - 0.7971626158746583f, - 0.7972416416539427f, - 0.7973206537727071f, - 0.7973996522295975f, - 0.7974786370232603f, - 0.797557608152342f, - 0.7976365656154896f, - 0.7977155094113502f, - 0.797794439538571f, - 0.7978733559957996f, - 0.7979522587816837f, - 0.7980311478948717f, - 0.7981100233340114f, - 0.7981888850977515f, - 0.7982677331847406f, - 0.7983465675936279f, - 0.7984253883230624f, - 0.7985041953716935f, - 0.798582988738171f, - 0.7986617684211448f, - 0.7987405344192648f, - 0.7988192867311816f, - 0.7988980253555458f, - 0.7989767502910082f, - 0.7990554615362198f, - 0.7991341590898319f, - 0.7992128429504961f, - 0.7992915131168641f, - 0.799370169587588f, - 0.7994488123613199f, - 0.7995274414367125f, - 0.7996060568124184f, - 0.7996846584870905f, - 0.799763246459382f, - 0.7998418207279464f, - 0.7999203812914373f, - 0.7999989281485086f, - 0.8000774612978142f, - 0.8001559807380089f, - 0.8002344864677469f, - 0.8003129784856832f, - 0.8003914567904727f, - 0.800469921380771f, - 0.8005483722552333f, - 0.8006268094125156f, - 0.8007052328512739f, - 0.8007836425701643f, - 0.8008620385678433f, - 0.8009404208429677f, - 0.8010187893941942f, - 0.8010971442201803f, - 0.8011754853195833f, - 0.8012538126910607f, - 0.8013321263332704f, - 0.8014104262448708f, - 0.8014887124245199f, - 0.8015669848708765f, - 0.8016452435825994f, - 0.8017234885583475f, - 0.8018017197967805f, - 0.8018799372965575f, - 0.8019581410563383f, - 0.8020363310747831f, - 0.8021145073505521f, - 0.8021926698823056f, - 0.8022708186687045f, - 0.8023489537084096f, - 0.8024270750000823f, - 0.8025051825423837f, - 0.8025832763339755f, - 0.8026613563735199f, - 0.8027394226596789f, - 0.8028174751911146f, - 0.8028955139664897f, - 0.8029735389844671f, - 0.8030515502437099f, - 0.8031295477428814f, - 0.8032075314806448f, - 0.8032855014556644f, - 0.8033634576666039f, - 0.8034414001121275f, - 0.8035193287908998f, - 0.8035972437015856f, - 0.8036751448428496f, - 0.8037530322133574f, - 0.8038309058117739f, - 0.8039087656367649f, - 0.8039866116869965f, - 0.8040644439611346f, - 0.8041422624578458f, - 0.8042200671757965f, - 0.8042978581136537f, - 0.8043756352700844f, - 0.8044533986437559f, - 0.8045311482333357f, - 0.8046088840374916f, - 0.8046866060548918f, - 0.8047643142842044f, - 0.8048420087240977f, - 0.8049196893732407f, - 0.8049973562303022f, - 0.8050750092939516f, - 0.8051526485628582f, - 0.8052302740356917f, - 0.8053078857111219f, - 0.8053854835878191f, - 0.8054630676644536f, - 0.8055406379396961f, - 0.8056181944122174f, - 0.8056957370806885f, - 0.805773265943781f, - 0.805850781000166f, - 0.8059282822485158f, - 0.806005769687502f, - 0.8060832433157973f, - 0.8061607031320739f, - 0.8062381491350047f, - 0.8063155813232625f, - 0.8063929996955208f, - 0.8064704042504528f, - 0.8065477949867325f, - 0.8066251719030334f, - 0.80670253499803f, - 0.8067798842703966f, - 0.8068572197188077f, - 0.8069345413419385f, - 0.8070118491384639f, - 0.8070891431070593f, - 0.8071664232464002f, - 0.8072436895551626f, - 0.8073209420320224f, - 0.8073981806756559f, - 0.80747540548474f, - 0.8075526164579508f, - 0.8076298135939659f, - 0.8077069968914623f, - 0.8077841663491175f, - 0.8078613219656092f, - 0.8079384637396154f, - 0.8080155916698144f, - 0.8080927057548845f, - 0.8081698059935044f, - 0.8082468923843529f, - 0.8083239649261094f, - 0.8084010236174531f, - 0.8084780684570637f, - 0.8085550994436209f, - 0.8086321165758049f, - 0.8087091198522962f, - 0.8087861092717751f, - 0.8088630848329226f, - 0.8089400465344195f, - 0.8090169943749475f, - 0.8090939283531876f, - 0.809170848467822f, - 0.8092477547175324f, - 0.8093246471010013f, - 0.8094015256169109f, - 0.8094783902639441f, - 0.8095552410407837f, - 0.809632077946113f, - 0.8097089009786154f, - 0.8097857101369745f, - 0.8098625054198743f, - 0.8099392868259987f, - 0.8100160543540323f, - 0.8100928080026597f, - 0.8101695477705656f, - 0.8102462736564353f, - 0.810322985658954f, - 0.8103996837768072f, - 0.8104763680086807f, - 0.8105530383532606f, - 0.8106296948092333f, - 0.8107063373752851f, - 0.8107829660501028f, - 0.8108595808323734f, - 0.8109361817207842f, - 0.8110127687140226f, - 0.8110893418107763f, - 0.8111659010097334f, - 0.8112424463095818f, - 0.8113189777090101f, - 0.8113954952067067f, - 0.8114719988013609f, - 0.8115484884916616f, - 0.811624964276298f, - 0.8117014261539602f, - 0.8117778741233376f, - 0.8118543081831205f, - 0.8119307283319991f, - 0.8120071345686641f, - 0.8120835268918063f, - 0.8121599053001165f, - 0.8122362697922862f, - 0.8123126203670068f, - 0.8123889570229701f, - 0.8124652797588682f, - 0.8125415885733931f, - 0.8126178834652374f, - 0.812694164433094f, - 0.8127704314756554f, - 0.8128466845916151f, - 0.8129229237796666f, - 0.8129991490385032f, - 0.8130753603668194f, - 0.8131515577633086f, - 0.8132277412266656f, - 0.8133039107555851f, - 0.8133800663487617f, - 0.8134562080048906f, - 0.8135323357226671f, - 0.8136084495007869f, - 0.8136845493379458f, - 0.8137606352328397f, - 0.8138367071841649f, - 0.8139127651906181f, - 0.8139888092508959f, - 0.8140648393636953f, - 0.8141408555277136f, - 0.8142168577416484f, - 0.8142928460041973f, - 0.8143688203140582f, - 0.8144447806699294f, - 0.8145207270705094f, - 0.8145966595144967f, - 0.8146725780005903f, - 0.8147484825274894f, - 0.8148243730938933f, - 0.8149002496985018f, - 0.8149761123400148f, - 0.8150519610171321f, - 0.8151277957285542f, - 0.8152036164729818f, - 0.8152794232491157f, - 0.8153552160556569f, - 0.8154309948913068f, - 0.8155067597547668f, - 0.815582510644739f, - 0.815658247559925f, - 0.8157339704990273f, - 0.8158096794607486f, - 0.8158853744437913f, - 0.8159610554468585f, - 0.8160367224686536f, - 0.8161123755078797f, - 0.8161880145632409f, - 0.8162636396334408f, - 0.8163392507171839f, - 0.8164148478131745f, - 0.8164904309201172f, - 0.816566000036717f, - 0.8166415551616789f, - 0.8167170962937085f, - 0.8167926234315112f, - 0.816868136573793f, - 0.8169436357192599f, - 0.8170191208666183f, - 0.8170945920145749f, - 0.8171700491618364f, - 0.8172454923071099f, - 0.8173209214491025f, - 0.8173963365865221f, - 0.8174717377180762f, - 0.8175471248424729f, - 0.8176224979584207f, - 0.8176978570646277f, - 0.8177732021598029f, - 0.8178485332426552f, - 0.8179238503118937f, - 0.8179991533662282f, - 0.8180744424043681f, - 0.8181497174250234f, - 0.8182249784269044f, - 0.8183002254087214f, - 0.8183754583691851f, - 0.8184506773070064f, - 0.8185258822208966f, - 0.8186010731095669f, - 0.8186762499717289f, - 0.8187514128060945f, - 0.8188265616113759f, - 0.8189016963862854f, - 0.8189768171295355f, - 0.8190519238398392f, - 0.8191270165159092f, - 0.8192020951564594f, - 0.8192771597602028f, - 0.8193522103258535f, - 0.8194272468521255f, - 0.819502269337733f, - 0.8195772777813903f, - 0.8196522721818125f, - 0.8197272525377145f, - 0.8198022188478113f, - 0.8198771711108187f, - 0.8199521093254523f, - 0.8200270334904279f, - 0.820101943604462f, - 0.8201768396662708f, - 0.8202517216745709f, - 0.8203265896280796f, - 0.8204014435255137f, - 0.8204762833655906f, - 0.8205511091470281f, - 0.820625920868544f, - 0.8207007185288565f, - 0.8207755021266838f, - 0.8208502716607448f, - 0.820925027129758f, - 0.8209997685324427f, - 0.8210744958675181f, - 0.8211492091337039f, - 0.82122390832972f, - 0.8212985934542861f, - 0.8213732645061228f, - 0.8214479214839504f, - 0.8215225643864899f, - 0.821597193212462f, - 0.8216718079605884f, - 0.8217464086295901f, - 0.8218209952181893f, - 0.8218955677251077f, - 0.8219701261490676f, - 0.8220446704887915f, - 0.822119200743002f, - 0.8221937169104222f, - 0.8222682189897751f, - 0.8223427069797842f, - 0.8224171808791731f, - 0.822491640686666f, - 0.8225660864009867f, - 0.8226405180208598f, - 0.8227149355450097f, - 0.8227893389721617f, - 0.8228637283010405f, - 0.8229381035303717f, - 0.8230124646588808f, - 0.8230868116852936f, - 0.8231611446083363f, - 0.8232354634267353f, - 0.8233097681392169f, - 0.823384058744508f, - 0.8234583352413357f, - 0.8235325976284275f, - 0.8236068459045105f, - 0.8236810800683128f, - 0.8237553001185622f, - 0.8238295060539872f, - 0.8239036978733162f, - 0.8239778755752779f, - 0.8240520391586014f, - 0.8241261886220157f, - 0.8242003239642504f, - 0.8242744451840353f, - 0.8243485522801002f, - 0.8244226452511754f, - 0.8244967240959913f, - 0.8245707888132785f, - 0.824644839401768f, - 0.8247188758601911f, - 0.824792898187279f, - 0.8248669063817634f, - 0.8249409004423763f, - 0.8250148803678496f, - 0.8250888461569159f, - 0.8251627978083077f, - 0.8252367353207579f, - 0.8253106586929996f, - 0.825384567923766f, - 0.8254584630117909f, - 0.8255323439558081f, - 0.8256062107545517f, - 0.8256800634067557f, - 0.825753901911155f, - 0.8258277262664844f, - 0.8259015364714786f, - 0.8259753325248732f, - 0.8260491144254036f, - 0.8261228821718056f, - 0.8261966357628152f, - 0.8262703751971686f, - 0.8263441004736024f, - 0.8264178115908533f, - 0.8264915085476582f, - 0.8265651913427544f, - 0.8266388599748795f, - 0.8267125144427709f, - 0.8267861547451668f, - 0.8268597808808053f, - 0.8269333928484247f, - 0.827006990646764f, - 0.8270805742745618f, - 0.8271541437305574f, - 0.8272276990134904f, - 0.8273012401221f, - 0.8273747670551265f, - 0.82744827981131f, - 0.8275217783893907f, - 0.8275952627881092f, - 0.8276687330062066f, - 0.8277421890424237f, - 0.8278156308955021f, - 0.8278890585641832f, - 0.8279624720472091f, - 0.8280358713433216f, - 0.8281092564512632f, - 0.8281826273697764f, - 0.828255984097604f, - 0.8283293266334892f, - 0.8284026549761753f, - 0.8284759691244055f, - 0.8285492690769237f, - 0.828622554832474f, - 0.8286958263898009f, - 0.8287690837476486f, - 0.8288423269047619f, - 0.8289155558598859f, - 0.8289887706117658f, - 0.829061971159147f, - 0.8291351575007754f, - 0.8292083296353968f, - 0.8292814875617577f, - 0.8293546312786041f, - 0.829427760784683f, - 0.8295008760787413f, - 0.8295739771595263f, - 0.8296470640257853f, - 0.8297201366762659f, - 0.8297931951097162f, - 0.8298662393248841f, - 0.8299392693205183f, - 0.8300122850953674f, - 0.8300852866481803f, - 0.8301582739777059f, - 0.8302312470826938f, - 0.8303042059618936f, - 0.8303771506140551f, - 0.8304500810379285f, - 0.8305229972322642f, - 0.8305958991958126f, - 0.8306687869273247f, - 0.8307416604255515f, - 0.8308145196892445f, - 0.8308873647171551f, - 0.8309601955080351f, - 0.8310330120606368f, - 0.8311058143737122f, - 0.8311786024460142f, - 0.8312513762762952f, - 0.8313241358633086f, - 0.8313968812058073f, - 0.8314696123025452f, - 0.8315423291522759f, - 0.8316150317537535f, - 0.8316877201057321f, - 0.8317603942069663f, - 0.831833054056211f, - 0.8319056996522209f, - 0.8319783309937515f, - 0.8320509480795582f, - 0.8321235509083965f, - 0.8321961394790227f, - 0.8322687137901928f, - 0.8323412738406634f, - 0.8324138196291911f, - 0.832486351154533f, - 0.832558868415446f, - 0.8326313714106878f, - 0.832703860139016f, - 0.8327763345991885f, - 0.8328487947899635f, - 0.8329212407100995f, - 0.832993672358355f, - 0.833066089733489f, - 0.8331384928342604f, - 0.833210881659429f, - 0.8332832562077542f, - 0.8333556164779959f, - 0.8334279624689144f, - 0.8335002941792697f, - 0.8335726116078228f, - 0.8336449147533342f, - 0.8337172036145656f, - 0.8337894781902777f, - 0.8338617384792323f, - 0.8339339844801914f, - 0.8340062161919168f, - 0.8340784336131711f, - 0.8341506367427168f, - 0.8342228255793167f, - 0.8342950001217339f, - 0.8343671603687316f, - 0.8344393063190734f, - 0.8345114379715232f, - 0.834583555324845f, - 0.834655658377803f, - 0.8347277471291618f, - 0.8347998215776861f, - 0.8348718817221409f, - 0.8349439275612917f, - 0.8350159590939038f, - 0.835087976318743f, - 0.8351599792345754f, - 0.8352319678401672f, - 0.8353039421342848f, - 0.8353759021156951f, - 0.8354478477831652f, - 0.8355197791354618f, - 0.8355916961713529f, - 0.835663598889606f, - 0.835735487288989f, - 0.8358073613682702f, - 0.8358792211262182f, - 0.8359510665616015f, - 0.836022897673189f, - 0.8360947144597501f, - 0.8361665169200543f, - 0.836238305052871f, - 0.8363100788569704f, - 0.8363818383311223f, - 0.8364535834740975f, - 0.8365253142846665f, - 0.8365970307616002f, - 0.8366687329036697f, - 0.8367404207096467f, - 0.8368120941783026f, - 0.8368837533084093f, - 0.836955398098739f, - 0.837027028548064f, - 0.837098644655157f, - 0.8371702464187911f, - 0.837241833837739f, - 0.8373134069107743f, - 0.8373849656366705f, - 0.8374565100142016f, - 0.8375280400421417f, - 0.837599555719265f, - 0.8376710570443463f, - 0.8377425440161603f, - 0.8378140166334822f, - 0.8378854748950871f, - 0.837956918799751f, - 0.8380283483462494f, - 0.8380997635333584f, - 0.8381711643598543f, - 0.8382425508245138f, - 0.8383139229261137f, - 0.838385280663431f, - 0.838456624035243f, - 0.8385279530403272f, - 0.8385992676774615f, - 0.8386705679454239f, - 0.8387418538429928f, - 0.8388131253689466f, - 0.8388843825220641f, - 0.8389556253011243f, - 0.8390268537049065f, - 0.8390980677321903f, - 0.8391692673817553f, - 0.8392404526523817f, - 0.8393116235428496f, - 0.8393827800519397f, - 0.8394539221784325f, - 0.8395250499211092f, - 0.839596163278751f, - 0.8396672622501393f, - 0.839738346834056f, - 0.8398094170292829f, - 0.8398804728346023f, - 0.8399515142487968f, - 0.840022541270649f, - 0.8400935538989419f, - 0.8401645521324587f, - 0.8402355359699828f, - 0.8403065054102982f, - 0.8403774604521884f, - 0.840448401094438f, - 0.8405193273358312f, - 0.840590239175153f, - 0.840661136611188f, - 0.8407320196427216f, - 0.8408028882685391f, - 0.8408737424874263f, - 0.840944582298169f, - 0.8410154076995536f, - 0.8410862186903664f, - 0.841157015269394f, - 0.8412277974354234f, - 0.8412985651872419f, - 0.8413693185236365f, - 0.8414400574433953f, - 0.8415107819453062f, - 0.8415814920281569f, - 0.8416521876907362f, - 0.8417228689318327f, - 0.8417935357502352f, - 0.841864188144733f, - 0.8419348261141152f, - 0.8420054496571717f, - 0.8420760587726923f, - 0.842146653459467f, - 0.8422172337162864f, - 0.8422877995419411f, - 0.842358350935222f, - 0.84242888789492f, - 0.8424994104198266f, - 0.8425699185087334f, - 0.8426404121604323f, - 0.8427108913737154f, - 0.8427813561473749f, - 0.8428518064802037f, - 0.8429222423709944f, - 0.8429926638185403f, - 0.8430630708216347f, - 0.843133463379071f, - 0.8432038414896432f, - 0.8432742051521455f, - 0.8433445543653719f, - 0.8434148891281174f, - 0.8434852094391766f, - 0.8435555152973445f, - 0.8436258067014166f, - 0.8436960836501886f, - 0.8437663461424559f, - 0.8438365941770148f, - 0.8439068277526618f, - 0.8439770468681932f, - 0.8440472515224061f, - 0.8441174417140972f, - 0.844187617442064f, - 0.844257778705104f, - 0.8443279255020151f, - 0.8443980578315953f, - 0.8444681756926429f, - 0.8445382790839564f, - 0.8446083680043347f, - 0.8446784424525767f, - 0.8447485024274819f, - 0.8448185479278496f, - 0.8448885789524799f, - 0.8449585955001726f, - 0.845028597569728f, - 0.8450985851599467f, - 0.8451685582696294f, - 0.8452385168975773f, - 0.8453084610425915f, - 0.8453783907034736f, - 0.8454483058790254f, - 0.8455182065680489f, - 0.8455880927693462f, - 0.8456579644817201f, - 0.8457278217039733f, - 0.8457976644349087f, - 0.8458674926733296f, - 0.8459373064180395f, - 0.8460071056678422f, - 0.8460768904215418f, - 0.8461466606779423f, - 0.8462164164358484f, - 0.8462861576940648f, - 0.8463558844513966f, - 0.846425596706649f, - 0.8464952944586275f, - 0.8465649777061378f, - 0.8466346464479859f, - 0.846704300682978f, - 0.8467739404099207f, - 0.8468435656276206f, - 0.8469131763348849f, - 0.8469827725305208f, - 0.8470523542133356f, - 0.8471219213821372f, - 0.8471914740357335f, - 0.8472610121729327f, - 0.8473305357925435f, - 0.8474000448933744f, - 0.8474695394742345f, - 0.847539019533933f, - 0.8476084850712794f, - 0.8476779360850831f, - 0.8477473725741547f, - 0.847816794537304f, - 0.8478862019733416f, - 0.8479555948810782f, - 0.8480249732593247f, - 0.8480943371068925f, - 0.8481636864225929f, - 0.8482330212052378f, - 0.8483023414536389f, - 0.8483716471666085f, - 0.8484409383429592f, - 0.8485102149815037f, - 0.8485794770810549f, - 0.8486487246404258f, - 0.8487179576584303f, - 0.8487871761338818f, - 0.8488563800655943f, - 0.8489255694523822f, - 0.8489947442930597f, - 0.8490639045864417f, - 0.8491330503313429f, - 0.8492021815265789f, - 0.8492712981709648f, - 0.8493404002633165f, - 0.8494094878024498f, - 0.8494785607871812f, - 0.8495476192163268f, - 0.8496166630887035f, - 0.8496856924031283f, - 0.8497547071584183f, - 0.8498237073533909f, - 0.8498926929868639f, - 0.8499616640576553f, - 0.850030620564583f, - 0.8500995625064658f, - 0.8501684898821222f, - 0.8502374026903713f, - 0.8503063009300321f, - 0.8503751845999242f, - 0.8504440536988672f, - 0.8505129082256812f, - 0.8505817481791862f, - 0.8506505735582028f, - 0.8507193843615516f, - 0.8507881805880536f, - 0.85085696223653f, - 0.8509257293058021f, - 0.8509944817946918f, - 0.851063219702021f, - 0.8511319430266118f, - 0.8512006517672868f, - 0.8512693459228684f, - 0.8513380254921799f, - 0.8514066904740443f, - 0.851475340867285f, - 0.8515439766707258f, - 0.8516125978831908f, - 0.8516812045035038f, - 0.8517497965304895f, - 0.8518183739629726f, - 0.8518869367997779f, - 0.8519554850397307f, - 0.8520240186816564f, - 0.8520925377243809f, - 0.8521610421667298f, - 0.8522295320075295f, - 0.8522980072456064f, - 0.8523664678797871f, - 0.8524349139088989f, - 0.8525033453317686f, - 0.8525717621472239f, - 0.8526401643540922f, - 0.8527085519512018f, - 0.8527769249373806f, - 0.8528452833114573f, - 0.8529136270722604f, - 0.8529819562186188f, - 0.853050270749362f, - 0.8531185706633193f, - 0.8531868559593203f, - 0.8532551266361951f, - 0.8533233826927737f, - 0.8533916241278867f, - 0.8534598509403649f, - 0.853528063129039f, - 0.8535962606927403f, - 0.8536644436303004f, - 0.8537326119405507f, - 0.8538007656223234f, - 0.8538689046744508f, - 0.853937029095765f, - 0.854005138885099f, - 0.8540732340412859f, - 0.8541413145631583f, - 0.8542093804495503f, - 0.8542774316992952f, - 0.854345468311227f, - 0.8544134902841802f, - 0.854481497616989f, - 0.8545494903084883f, - 0.8546174683575127f, - 0.8546854317628978f, - 0.8547533805234789f, - 0.8548213146380919f, - 0.8548892341055726f, - 0.8549571389247571f, - 0.8550250290944821f, - 0.855092904613584f, - 0.8551607654809001f, - 0.8552286116952675f, - 0.8552964432555238f, - 0.8553642601605066f, - 0.8554320624090538f, - 0.8554998500000037f, - 0.8555676229321949f, - 0.855635381204466f, - 0.8557031248156561f, - 0.8557708537646042f, - 0.8558385680501499f, - 0.855906267671133f, - 0.8559739526263934f, - 0.8560416229147714f, - 0.8561092785351074f, - 0.8561769194862423f, - 0.8562445457670169f, - 0.8563121573762726f, - 0.8563797543128508f, - 0.8564473365755934f, - 0.8565149041633421f, - 0.8565824570749393f, - 0.8566499953092276f, - 0.8567175188650495f, - 0.8567850277412484f, - 0.8568525219366672f, - 0.8569200014501496f, - 0.8569874662805391f, - 0.8570549164266801f, - 0.8571223518874166f, - 0.8571897726615931f, - 0.8572571787480544f, - 0.8573245701456458f, - 0.8573919468532121f, - 0.857459308869599f, - 0.8575266561936523f, - 0.857593988824218f, - 0.8576613067601424f, - 0.8577286100002721f, - 0.8577958985434537f, - 0.8578631723885344f, - 0.8579304315343613f, - 0.8579976759797822f, - 0.8580649057236446f, - 0.8581321207647966f, - 0.8581993211020866f, - 0.8582665067343631f, - 0.8583336776604749f, - 0.858400833879271f, - 0.8584679753896007f, - 0.8585351021903136f, - 0.8586022142802594f, - 0.8586693116582883f, - 0.8587363943232506f, - 0.8588034622739966f, - 0.8588705155093773f, - 0.8589375540282439f, - 0.8590045778294476f, - 0.8590715869118398f, - 0.8591385812742725f, - 0.8592055609155976f, - 0.8592725258346676f, - 0.859339476030335f, - 0.8594064115014527f, - 0.8594733322468736f, - 0.8595402382654513f, - 0.8596071295560391f, - 0.8596740061174911f, - 0.859740867948661f, - 0.8598077150484037f, - 0.8598745474155735f, - 0.859941365049025f, - 0.8600081679476136f, - 0.8600749561101947f, - 0.8601417295356236f, - 0.8602084882227565f, - 0.8602752321704493f, - 0.8603419613775584f, - 0.8604086758429405f, - 0.8604753755654523f, - 0.860542060543951f, - 0.860608730777294f, - 0.860675386264339f, - 0.8607420270039436f, - 0.8608086529949662f, - 0.8608752642362651f, - 0.860941860726699f, - 0.8610084424651265f, - 0.8610750094504069f, - 0.8611415616813999f, - 0.8612080991569648f, - 0.8612746218759616f, - 0.8613411298372504f, - 0.8614076230396918f, - 0.8614741014821461f, - 0.8615405651634744f, - 0.861607014082538f, - 0.8616734482381981f, - 0.8617398676293164f, - 0.861806272254755f, - 0.861872662113376f, - 0.8619390372040416f, - 0.8620053975256148f, - 0.8620717430769583f, - 0.8621380738569354f, - 0.8622043898644096f, - 0.8622706910982445f, - 0.862336977557304f, - 0.8624032492404523f, - 0.8624695061465539f, - 0.8625357482744737f, - 0.8626019756230764f, - 0.8626681881912273f, - 0.8627343859777917f, - 0.8628005689816356f, - 0.8628667372016249f, - 0.8629328906366257f, - 0.8629990292855046f, - 0.8630651531471283f, - 0.8631312622203637f, - 0.8631973565040781f, - 0.8632634359971391f, - 0.8633295006984143f, - 0.8633955506067716f, - 0.8634615857210796f, - 0.8635276060402065f, - 0.8635936115630212f, - 0.8636596022883926f, - 0.8637255782151901f, - 0.8637915393422831f, - 0.8638574856685415f, - 0.8639234171928353f, - 0.8639893339140347f, - 0.8640552358310103f, - 0.8641211229426328f, - 0.8641869952477733f, - 0.8642528527453032f, - 0.8643186954340939f, - 0.8643845233130173f, - 0.8644503363809454f, - 0.8645161346367506f, - 0.8645819180793054f, - 0.8646476867074825f, - 0.8647134405201551f, - 0.8647791795161965f, - 0.8648449036944803f, - 0.8649106130538804f, - 0.8649763075932707f, - 0.8650419873115257f, - 0.86510765220752f, - 0.8651733022801282f, - 0.8652389375282258f, - 0.865304557950688f, - 0.8653701635463902f, - 0.8654357543142085f, - 0.865501330253019f, - 0.865566891361698f, - 0.8656324376391221f, - 0.8656979690841683f, - 0.8657634856957137f, - 0.8658289874726356f, - 0.8658944744138118f, - 0.86595994651812f, - 0.8660254037844386f, - 0.8660908462116458f, - 0.8661562737986204f, - 0.8662216865442413f, - 0.8662870844473874f, - 0.8663524675069385f, - 0.8664178357217741f, - 0.8664831890907742f, - 0.8665485276128189f, - 0.8666138512867886f, - 0.8666791601115642f, - 0.8667444540860265f, - 0.8668097332090567f, - 0.8668749974795362f, - 0.866940246896347f, - 0.8670054814583709f, - 0.86707070116449f, - 0.8671359060135869f, - 0.8672010960045444f, - 0.8672662711362453f, - 0.8673314314075731f, - 0.867396576817411f, - 0.8674617073646429f, - 0.8675268230481528f, - 0.867591923866825f, - 0.867657009819544f, - 0.8677220809051944f, - 0.8677871371226616f, - 0.8678521784708306f, - 0.8679172049485868f, - 0.8679822165548163f, - 0.8680472132884051f, - 0.8681121951482392f, - 0.8681771621332054f, - 0.8682421142421906f, - 0.8683070514740816f, - 0.868371973827766f, - 0.8684368813021311f, - 0.868501773896065f, - 0.8685666516084556f, - 0.8686315144381913f, - 0.8686963623841606f, - 0.8687611954452524f, - 0.8688260136203558f, - 0.8688908169083602f, - 0.8689556053081553f, - 0.8690203788186308f, - 0.8690851374386769f, - 0.8691498811671838f, - 0.8692146100030426f, - 0.8692793239451436f, - 0.8693440229923785f, - 0.8694087071436383f, - 0.8694733763978147f, - 0.8695380307537997f, - 0.8696026702104855f, - 0.8696672947667645f, - 0.8697319044215294f, - 0.869796499173673f, - 0.8698610790220885f, - 0.8699256439656696f, - 0.8699901940033097f, - 0.8700547291339029f, - 0.8701192493563434f, - 0.8701837546695257f, - 0.8702482450723443f, - 0.8703127205636945f, - 0.8703771811424711f, - 0.8704416268075701f, - 0.8705060575578868f, - 0.8705704733923174f, - 0.8706348743097583f, - 0.8706992603091056f, - 0.8707636313892565f, - 0.8708279875491077f, - 0.8708923287875566f, - 0.8709566551035008f, - 0.871020966495838f, - 0.8710852629634662f, - 0.8711495445052839f, - 0.8712138111201894f, - 0.8712780628070816f, - 0.8713422995648596f, - 0.8714065213924227f, - 0.8714707282886704f, - 0.8715349202525028f, - 0.8715990972828196f, - 0.8716632593785215f, - 0.8717274065385089f, - 0.8717915387616827f, - 0.8718556560469439f, - 0.871919758393194f, - 0.8719838457993347f, - 0.8720479182642678f, - 0.8721119757868953f, - 0.8721760183661197f, - 0.8722400460008437f, - 0.8723040586899701f, - 0.8723680564324022f, - 0.8724320392270433f, - 0.8724960070727971f, - 0.8725599599685675f, - 0.8726238979132588f, - 0.8726878209057753f, - 0.8727517289450217f, - 0.8728156220299031f, - 0.8728795001593247f, - 0.8729433633321917f, - 0.8730072115474101f, - 0.8730710448038858f, - 0.873134863100525f, - 0.8731986664362342f, - 0.8732624548099202f, - 0.8733262282204899f, - 0.8733899866668506f, - 0.8734537301479098f, - 0.8735174586625755f, - 0.8735811722097554f, - 0.8736448707883578f, - 0.8737085543972916f, - 0.8737722230354652f, - 0.8738358767017879f, - 0.8738995153951687f, - 0.8739631391145178f, - 0.8740267478587445f, - 0.8740903416267588f, - 0.8741539204174714f, - 0.8742174842297927f, - 0.8742810330626336f, - 0.8743445669149051f, - 0.8744080857855189f, - 0.8744715896733861f, - 0.8745350785774191f, - 0.8745985524965296f, - 0.8746620114296303f, - 0.8747254553756337f, - 0.8747888843334528f, - 0.8748522983020006f, - 0.8749156972801907f, - 0.8749790812669367f, - 0.8750424502611525f, - 0.8751058042617523f, - 0.8751691432676505f, - 0.8752324672777618f, - 0.8752957762910014f, - 0.8753590703062843f, - 0.875422349322526f, - 0.8754856133386423f, - 0.8755488623535492f, - 0.8756120963661629f, - 0.8756753153753997f, - 0.8757385193801767f, - 0.8758017083794106f, - 0.875864882372019f, - 0.8759280413569192f, - 0.875991185333029f, - 0.8760543142992665f, - 0.8761174282545501f, - 0.8761805271977982f, - 0.8762436111279296f, - 0.8763066800438637f, - 0.8763697339445193f, - 0.8764327728288164f, - 0.8764957966956747f, - 0.8765588055440142f, - 0.8766217993727555f, - 0.8766847781808191f, - 0.8767477419671259f, - 0.8768106907305969f, - 0.8768736244701537f, - 0.8769365431847178f, - 0.8769994468732112f, - 0.877062335534556f, - 0.8771252091676746f, - 0.8771880677714897f, - 0.8772509113449243f, - 0.8773137398869014f, - 0.8773765533963447f, - 0.8774393518721777f, - 0.8775021353133245f, - 0.8775649037187093f, - 0.8776276570872565f, - 0.877690395417891f, - 0.8777531187095375f, - 0.8778158269611217f, - 0.8778785201715686f, - 0.8779411983398044f, - 0.878003861464755f, - 0.8780665095453465f, - 0.8781291425805056f, - 0.8781917605691592f, - 0.878254363510234f, - 0.8783169514026578f, - 0.8783795242453578f, - 0.8784420820372619f, - 0.8785046247772983f, - 0.8785671524643954f, - 0.8786296650974816f, - 0.8786921626754859f, - 0.8787546451973374f, - 0.8788171126619654f, - 0.8788795650682996f, - 0.8789420024152699f, - 0.8790044247018064f, - 0.8790668319268397f, - 0.8791292240893002f, - 0.8791916011881189f, - 0.8792539632222272f, - 0.8793163101905562f, - 0.8793786420920379f, - 0.8794409589256041f, - 0.8795032606901871f, - 0.8795655473847193f, - 0.8796278190081335f, - 0.8796900755593626f, - 0.87975231703734f, - 0.8798145434409991f, - 0.8798767547692736f, - 0.8799389510210978f, - 0.8800011321954057f, - 0.880063298291132f, - 0.8801254493072114f, - 0.8801875852425789f, - 0.88024970609617f, - 0.8803118118669202f, - 0.8803739025537654f, - 0.8804359781556415f, - 0.880498038671485f, - 0.8805600841002325f, - 0.8806221144408208f, - 0.8806841296921871f, - 0.8807461298532688f, - 0.8808081149230036f, - 0.8808700849003293f, - 0.8809320397841839f, - 0.8809939795735061f, - 0.8810559042672345f, - 0.8811178138643079f, - 0.8811797083636657f, - 0.8812415877642472f, - 0.8813034520649922f, - 0.8813653012648406f, - 0.8814271353627328f, - 0.881488954357609f, - 0.8815507582484103f, - 0.8816125470340774f, - 0.8816743207135517f, - 0.8817360792857747f, - 0.8817978227496882f, - 0.8818595511042342f, - 0.8819212643483549f, - 0.8819829624809932f, - 0.8820446455010916f, - 0.8821063134075935f, - 0.8821679661994418f, - 0.8822296038755805f, - 0.8822912264349532f, - 0.8823528338765042f, - 0.8824144261991776f, - 0.8824760034019183f, - 0.8825375654836711f, - 0.8825991124433811f, - 0.8826606442799938f, - 0.8827221609924547f, - 0.88278366257971f, - 0.8828451490407057f, - 0.8829066203743882f, - 0.8829680765797043f, - 0.883029517655601f, - 0.8830909436010256f, - 0.8831523544149253f, - 0.8832137500962479f, - 0.8832751306439417f, - 0.8833364960569546f, - 0.8833978463342355f, - 0.8834591814747328f, - 0.8835205014773957f, - 0.8835818063411736f, - 0.8836430960650159f, - 0.8837043706478724f, - 0.8837656300886934f, - 0.883826874386429f, - 0.88388810354003f, - 0.883949317548447f, - 0.8840105164106312f, - 0.8840717001255342f, - 0.8841328686921074f, - 0.8841940221093026f, - 0.8842551603760723f, - 0.8843162834913687f, - 0.8843773914541444f, - 0.8844384842633525f, - 0.8844995619179461f, - 0.8845606244168785f, - 0.8846216717591038f, - 0.8846827039435756f, - 0.8847437209692485f, - 0.8848047228350765f, - 0.8848657095400148f, - 0.8849266810830181f, - 0.8849876374630418f, - 0.8850485786790414f, - 0.8851095047299729f, - 0.8851704156147919f, - 0.8852313113324551f, - 0.8852921918819191f, - 0.8853530572621403f, - 0.8854139074720762f, - 0.8854747425106839f, - 0.8855355623769212f, - 0.8855963670697459f, - 0.885657156588116f, - 0.8857179309309899f, - 0.8857786900973266f, - 0.8858394340860846f, - 0.8859001628962232f, - 0.8859608765267019f, - 0.8860215749764803f, - 0.8860822582445184f, - 0.8861429263297763f, - 0.8862035792312147f, - 0.8862642169477941f, - 0.8863248394784756f, - 0.8863854468222204f, - 0.8864460389779901f, - 0.8865066159447463f, - 0.8865671777214513f, - 0.8866277243070672f, - 0.8866882557005564f, - 0.8867487719008821f, - 0.8868092729070071f, - 0.8868697587178948f, - 0.8869302293325086f, - 0.8869906847498127f, - 0.887051124968771f, - 0.887111549988348f, - 0.8871719598075082f, - 0.8872323544252165f, - 0.8872927338404382f, - 0.8873530980521384f, - 0.8874134470592832f, - 0.8874737808608383f, - 0.8875340994557699f, - 0.8875944028430445f, - 0.8876546910216288f, - 0.8877149639904898f, - 0.8877752217485947f, - 0.887835464294911f, - 0.8878956916284064f, - 0.8879559037480491f, - 0.8880161006528072f, - 0.8880762823416495f, - 0.8881364488135445f, - 0.8881966000674615f, - 0.8882567361023695f, - 0.8883168569172385f, - 0.888376962511038f, - 0.8884370528827384f, - 0.8884971280313099f, - 0.8885571879557229f, - 0.8886172326549487f, - 0.8886772621279584f, - 0.8887372763737231f, - 0.8887972753912148f, - 0.8888572591794053f, - 0.8889172277372669f, - 0.8889771810637719f, - 0.889037119157893f, - 0.8890970420186032f, - 0.8891569496448759f, - 0.8892168420356844f, - 0.8892767191900025f, - 0.8893365811068044f, - 0.8893964277850641f, - 0.8894562592237565f, - 0.889516075421856f, - 0.8895758763783379f, - 0.8896356620921776f, - 0.8896954325623505f, - 0.8897551877878325f, - 0.8898149277675997f, - 0.8898746525006286f, - 0.8899343619858956f, - 0.8899940562223779f, - 0.8900537352090524f, - 0.8901133989448966f, - 0.8901730474288883f, - 0.8902326806600052f, - 0.8902922986372256f, - 0.890351901359528f, - 0.8904114888258913f, - 0.8904710610352942f, - 0.890530617986716f, - 0.8905901596791361f, - 0.8906496861115346f, - 0.8907091972828913f, - 0.8907686931921865f, - 0.8908281738384008f, - 0.8908876392205151f, - 0.8909470893375103f, - 0.8910065241883678f, - 0.8910659437720693f, - 0.8911253480875966f, - 0.8911847371339318f, - 0.8912441109100572f, - 0.8913034694149555f, - 0.8913628126476099f, - 0.8914221406070031f, - 0.8914814532921188f, - 0.8915407507019406f, - 0.8916000328354525f, - 0.8916592996916388f, - 0.8917185512694839f, - 0.8917777875679724f, - 0.8918370085860897f, - 0.8918962143228206f, - 0.8919554047771509f, - 0.8920145799480662f, - 0.8920737398345527f, - 0.8921328844355967f, - 0.8921920137501848f, - 0.8922511277773036f, - 0.8923102265159405f, - 0.8923693099650827f, - 0.8924283781237179f, - 0.8924874309908339f, - 0.892546468565419f, - 0.8926054908464613f, - 0.8926644978329498f, - 0.8927234895238733f, - 0.8927824659182209f, - 0.8928414270149821f, - 0.8929003728131468f, - 0.8929593033117048f, - 0.8930182185096464f, - 0.8930771184059619f, - 0.8931360029996425f, - 0.8931948722896789f, - 0.8932537262750625f, - 0.8933125649547847f, - 0.8933713883278376f, - 0.893430196393213f, - 0.8934889891499034f, - 0.8935477665969013f, - 0.8936065287331997f, - 0.8936652755577916f, - 0.8937240070696704f, - 0.8937827232678297f, - 0.8938414241512637f, - 0.8939001097189663f, - 0.8939587799699321f, - 0.8940174349031557f, - 0.894076074517632f, - 0.8941346988123563f, - 0.8941933077863242f, - 0.8942519014385313f, - 0.8943104797679736f, - 0.8943690427736475f, - 0.8944275904545494f, - 0.8944861228096763f, - 0.894544639838025f, - 0.8946031415385931f, - 0.8946616279103781f, - 0.8947200989523777f, - 0.8947785546635901f, - 0.8948369950430137f, - 0.8948954200896473f, - 0.8949538298024895f, - 0.8950122241805395f, - 0.895070603222797f, - 0.8951289669282615f, - 0.8951873152959329f, - 0.8952456483248116f, - 0.895303966013898f, - 0.8953622683621928f, - 0.895420555368697f, - 0.8954788270324119f, - 0.895537083352339f, - 0.8955953243274801f, - 0.8956535499568372f, - 0.8957117602394129f, - 0.8957699551742094f, - 0.8958281347602298f, - 0.8958862989964771f, - 0.8959444478819547f, - 0.8960025814156662f, - 0.8960606995966157f, - 0.8961188024238071f, - 0.8961768898962448f, - 0.8962349620129337f, - 0.8962930187728786f, - 0.8963510601750848f, - 0.8964090862185577f, - 0.8964670969023032f, - 0.8965250922253272f, - 0.8965830721866358f, - 0.8966410367852358f, - 0.8966989860201339f, - 0.8967569198903371f, - 0.8968148383948527f, - 0.8968727415326884f, - 0.8969306293028518f, - 0.8969885017043513f, - 0.8970463587361952f, - 0.897104200397392f, - 0.8971620266869508f, - 0.8972198376038805f, - 0.8972776331471908f, - 0.8973354133158912f, - 0.8973931781089917f, - 0.8974509275255026f, - 0.8975086615644342f, - 0.8975663802247975f, - 0.8976240835056033f, - 0.8976817714058629f, - 0.8977394439245879f, - 0.8977971010607901f, - 0.8978547428134815f, - 0.8979123691816745f, - 0.8979699801643816f, - 0.8980275757606155f, - 0.8980851559693898f, - 0.8981427207897174f, - 0.8982002702206122f, - 0.898257804261088f, - 0.898315322910159f, - 0.8983728261668397f, - 0.8984303140301446f, - 0.8984877864990889f, - 0.8985452435726876f, - 0.8986026852499563f, - 0.8986601115299109f, - 0.8987175224115672f, - 0.8987749178939415f, - 0.8988322979760505f, - 0.8988896626569108f, - 0.8989470119355396f, - 0.8990043458109542f, - 0.8990616642821723f, - 0.8991189673482116f, - 0.8991762550080903f, - 0.8992335272608268f, - 0.8992907841054398f, - 0.8993480255409481f, - 0.899405251566371f, - 0.8994624621807279f, - 0.8995196573830384f, - 0.8995768371723228f, - 0.899634001547601f, - 0.8996911505078936f, - 0.8997482840522215f, - 0.8998054021796056f, - 0.8998625048890672f, - 0.8999195921796278f, - 0.8999766640503094f, - 0.900033720500134f, - 0.9000907615281238f, - 0.9001477871333017f, - 0.9002047973146905f, - 0.9002617920713133f, - 0.9003187714021935f, - 0.9003757353063547f, - 0.900432683782821f, - 0.9004896168306166f, - 0.9005465344487658f, - 0.9006034366362934f, - 0.9006603233922243f, - 0.9007171947155841f, - 0.9007740506053981f, - 0.900830891060692f, - 0.900887716080492f, - 0.9009445256638244f, - 0.9010013198097157f, - 0.9010580985171928f, - 0.9011148617852828f, - 0.9011716096130131f, - 0.9012283419994113f, - 0.9012850589435053f, - 0.9013417604443235f, - 0.901398446500894f, - 0.9014551171122456f, - 0.9015117722774074f, - 0.9015684119954085f, - 0.9016250362652786f, - 0.9016816450860471f, - 0.9017382384567442f, - 0.9017948163764002f, - 0.9018513788440458f, - 0.9019079258587115f, - 0.9019644574194285f, - 0.9020209735252284f, - 0.9020774741751425f, - 0.9021339593682028f, - 0.9021904291034415f, - 0.9022468833798908f, - 0.9023033221965837f, - 0.9023597455525527f, - 0.9024161534468313f, - 0.902472545878453f, - 0.9025289228464514f, - 0.9025852843498605f, - 0.9026416303877147f, - 0.9026979609590483f, - 0.9027542760628964f, - 0.9028105756982937f, - 0.9028668598642757f, - 0.902923128559878f, - 0.9029793817841365f, - 0.9030356195360872f, - 0.9030918418147665f, - 0.903148048619211f, - 0.9032042399484579f, - 0.9032604158015439f, - 0.9033165761775068f, - 0.9033727210753842f, - 0.9034288504942142f, - 0.9034849644330348f, - 0.9035410628908846f, - 0.9035971458668025f, - 0.9036532133598274f, - 0.9037092653689985f, - 0.9037653018933556f, - 0.9038213229319384f, - 0.903877328483787f, - 0.9039333185479418f, - 0.9039892931234433f, - 0.9040452522093325f, - 0.9041011958046506f, - 0.9041571239084389f, - 0.9042130365197393f, - 0.9042689336375934f, - 0.9043248152610438f, - 0.9043806813891327f, - 0.904436532020903f, - 0.9044923671553977f, - 0.9045481867916599f, - 0.9046039909287334f, - 0.9046597795656619f, - 0.9047155527014895f, - 0.9047713103352605f, - 0.9048270524660196f, - 0.9048827790928115f, - 0.9049384902146814f, - 0.9049941858306748f, - 0.9050498659398374f, - 0.905105530541215f, - 0.9051611796338539f, - 0.9052168132168005f, - 0.9052724312891015f, - 0.905328033849804f, - 0.9053836208979552f, - 0.9054391924326027f, - 0.9054947484527942f, - 0.9055502889575779f, - 0.905605813946002f, - 0.9056613234171151f, - 0.9057168173699662f, - 0.9057722958036043f, - 0.9058277587170788f, - 0.9058832061094394f, - 0.905938637979736f, - 0.9059940543270186f, - 0.906049455150338f, - 0.9061048404487447f, - 0.9061602102212899f, - 0.9062155644670244f, - 0.9062709031850003f, - 0.9063262263742691f, - 0.9063815340338829f, - 0.9064368261628938f, - 0.9064921027603547f, - 0.9065473638253183f, - 0.9066026093568377f, - 0.9066578393539664f, - 0.9067130538157578f, - 0.9067682527412662f, - 0.9068234361295453f, - 0.90687860397965f, - 0.9069337562906348f, - 0.9069888930615547f, - 0.907044014291465f, - 0.907099119979421f, - 0.9071542101244788f, - 0.9072092847256943f, - 0.9072643437821237f, - 0.9073193872928236f, - 0.907374415256851f, - 0.907429427673263f, - 0.9074844245411169f, - 0.9075394058594702f, - 0.9075943716273812f, - 0.9076493218439077f, - 0.9077042565081084f, - 0.9077591756190417f, - 0.907814079175767f, - 0.9078689671773431f, - 0.9079238396228299f, - 0.9079786965112868f, - 0.9080335378417741f, - 0.9080883636133521f, - 0.9081431738250813f, - 0.9081979684760225f, - 0.908252747565237f, - 0.9083075110917859f, - 0.9083622590547311f, - 0.9084169914531343f, - 0.9084717082860578f, - 0.908526409552564f, - 0.9085810952517157f, - 0.9086357653825757f, - 0.9086904199442074f, - 0.9087450589356743f, - 0.90879968235604f, - 0.9088542902043688f, - 0.9089088824797248f, - 0.9089634591811726f, - 0.9090180203077772f, - 0.9090725658586036f, - 0.9091270958327171f, - 0.9091816102291834f, - 0.9092361090470685f, - 0.9092905922854385f, - 0.9093450599433599f, - 0.9093995120198993f, - 0.9094539485141238f, - 0.9095083694251005f, - 0.9095627747518971f, - 0.9096171644935812f, - 0.909671538649221f, - 0.9097258972178848f, - 0.909780240198641f, - 0.9098345675905586f, - 0.9098888793927067f, - 0.9099431756041547f, - 0.9099974562239722f, - 0.9100517212512291f, - 0.9101059706849957f, - 0.9101602045243422f, - 0.9102144227683396f, - 0.9102686254160588f, - 0.9103228124665711f, - 0.9103769839189478f, - 0.9104311397722609f, - 0.9104852800255823f, - 0.9105394046779844f, - 0.9105935137285399f, - 0.9106476071763215f, - 0.9107016850204024f, - 0.9107557472598559f, - 0.9108097938937557f, - 0.9108638249211758f, - 0.9109178403411904f, - 0.9109718401528738f, - 0.9110258243553009f, - 0.9110797929475465f, - 0.9111337459286861f, - 0.9111876832977951f, - 0.9112416050539494f, - 0.9112955111962248f, - 0.9113494017236979f, - 0.9114032766354452f, - 0.9114571359305436f, - 0.9115109796080703f, - 0.9115648076671025f, - 0.9116186201067179f, - 0.9116724169259948f, - 0.911726198124011f, - 0.911779963699845f, - 0.9118337136525758f, - 0.9118874479812822f, - 0.9119411666850435f, - 0.9119948697629394f, - 0.9120485572140494f, - 0.9121022290374539f, - 0.912155885232233f, - 0.9122095257974676f, - 0.9122631507322384f, - 0.9123167600356266f, - 0.9123703537067135f, - 0.9124239317445809f, - 0.9124774941483107f, - 0.9125310409169852f, - 0.9125845720496868f, - 0.9126380875454984f, - 0.9126915874035028f, - 0.9127450716227835f, - 0.9127985402024239f, - 0.912851993141508f, - 0.9129054304391199f, - 0.9129588520943438f, - 0.9130122581062644f, - 0.9130656484739665f, - 0.9131190231965356f, - 0.9131723822730567f, - 0.9132257257026158f, - 0.9132790534842989f, - 0.9133323656171922f, - 0.9133856621003821f, - 0.9134389429329554f, - 0.9134922081139992f, - 0.9135454576426009f, - 0.9135986915178479f, - 0.9136519097388281f, - 0.9137051123046298f, - 0.9137582992143412f, - 0.9138114704670509f, - 0.9138646260618479f, - 0.9139177659978216f, - 0.9139708902740612f, - 0.9140239988896565f, - 0.9140770918436976f, - 0.9141301691352746f, - 0.9141832307634781f, - 0.9142362767273989f, - 0.9142893070261281f, - 0.9143423216587571f, - 0.9143953206243773f, - 0.9144483039220809f, - 0.9145012715509597f, - 0.9145542235101064f, - 0.9146071597986135f, - 0.914660080415574f, - 0.9147129853600812f, - 0.9147658746312284f, - 0.9148187482281096f, - 0.9148716061498187f, - 0.91492444839545f, - 0.9149772749640979f, - 0.9150300858548575f, - 0.9150828810668237f, - 0.915135660599092f, - 0.915188424450758f, - 0.9152411726209175f, - 0.9152939051086669f, - 0.9153466219131025f, - 0.9153993230333209f, - 0.9154520084684193f, - 0.9155046782174949f, - 0.9155573322796452f, - 0.9156099706539679f, - 0.915662593339561f, - 0.9157152003355231f, - 0.9157677916409526f, - 0.9158203672549483f, - 0.9158729271766095f, - 0.9159254714050356f, - 0.915977999939326f, - 0.9160305127785809f, - 0.9160830099219006f, - 0.9161354913683853f, - 0.916187957117136f, - 0.9162404071672534f, - 0.916292841517839f, - 0.9163452601679942f, - 0.9163976631168211f, - 0.9164500503634215f, - 0.916502421906898f, - 0.916554777746353f, - 0.9166071178808896f, - 0.9166594423096107f, - 0.9167117510316201f, - 0.9167640440460211f, - 0.916816321351918f, - 0.9168685829484149f, - 0.9169208288346163f, - 0.9169730590096271f, - 0.9170252734725522f, - 0.917077472222497f, - 0.9171296552585672f, - 0.9171818225798684f, - 0.9172339741855068f, - 0.9172861100745889f, - 0.9173382302462213f, - 0.9173903346995111f, - 0.9174424234335653f, - 0.9174944964474914f, - 0.9175465537403971f, - 0.9175985953113905f, - 0.91765062115958f, - 0.9177026312840739f, - 0.9177546256839811f, - 0.9178066043584109f, - 0.9178585673064723f, - 0.9179105145272752f, - 0.9179624460199294f, - 0.9180143617835451f, - 0.9180662618172328f, - 0.9181181461201031f, - 0.918170014691267f, - 0.9182218675298357f, - 0.9182737046349209f, - 0.9183255260056341f, - 0.9183773316410876f, - 0.9184291215403936f, - 0.9184808957026647f, - 0.9185326541270138f, - 0.918584396812554f, - 0.9186361237583988f, - 0.9186878349636618f, - 0.9187395304274569f, - 0.9187912101488983f, - 0.9188428741271006f, - 0.9188945223611784f, - 0.9189461548502469f, - 0.9189977715934213f, - 0.9190493725898171f, - 0.9191009578385503f, - 0.9191525273387368f, - 0.9192040810894931f, - 0.9192556190899358f, - 0.9193071413391819f, - 0.9193586478363485f, - 0.9194101385805529f, - 0.919461613570913f, - 0.9195130728065468f, - 0.9195645162865724f, - 0.9196159440101086f, - 0.9196673559762739f, - 0.9197187521841876f, - 0.919770132632969f, - 0.9198214973217376f, - 0.9198728462496134f, - 0.9199241794157164f, - 0.9199754968191671f, - 0.9200267984590863f, - 0.9200780843345948f, - 0.920129354444814f, - 0.9201806087888652f, - 0.9202318473658703f, - 0.9202830701749513f, - 0.9203342772152305f, - 0.9203854684858305f, - 0.9204366439858741f, - 0.9204878037144846f, - 0.9205389476707853f, - 0.9205900758538996f, - 0.9206411882629518f, - 0.920692284897066f, - 0.9207433657553665f, - 0.9207944308369783f, - 0.9208454801410263f, - 0.9208965136666357f, - 0.9209475314129321f, - 0.9209985333790414f, - 0.9210495195640896f, - 0.9211004899672032f, - 0.9211514445875087f, - 0.9212023834241331f, - 0.9212533064762035f, - 0.9213042137428473f, - 0.9213551052231924f, - 0.9214059809163667f, - 0.9214568408214984f, - 0.9215076849377161f, - 0.9215585132641485f, - 0.9216093257999248f, - 0.9216601225441744f, - 0.9217109034960267f, - 0.9217616686546117f, - 0.9218124180190594f, - 0.9218631515885005f, - 0.9219138693620655f, - 0.9219645713388854f, - 0.9220152575180915f, - 0.9220659278988153f, - 0.9221165824801885f, - 0.9221672212613431f, - 0.9222178442414115f, - 0.9222684514195263f, - 0.9223190427948204f, - 0.9223696183664268f, - 0.922420178133479f, - 0.9224707220951107f, - 0.9225212502504557f, - 0.9225717625986485f, - 0.9226222591388232f, - 0.9226727398701148f, - 0.9227232047916583f, - 0.9227736539025889f, - 0.9228240872020423f, - 0.9228745046891543f, - 0.9229249063630609f, - 0.9229752922228988f, - 0.9230256622678042f, - 0.9230760164969143f, - 0.9231263549093662f, - 0.9231766775042974f, - 0.9232269842808457f, - 0.923277275238149f, - 0.9233275503753456f, - 0.923377809691574f, - 0.9234280531859732f, - 0.9234782808576822f, - 0.9235284927058404f, - 0.9235786887295874f, - 0.923628868928063f, - 0.9236790333004073f, - 0.9237291818457611f, - 0.9237793145632649f, - 0.9238294314520596f, - 0.9238795325112867f, - 0.9239296177400876f, - 0.9239796871376041f, - 0.9240297407029783f, - 0.9240797784353525f, - 0.9241298003338693f, - 0.9241798063976717f, - 0.9242297966259029f, - 0.9242797710177061f, - 0.924329729572225f, - 0.924379672288604f, - 0.9244295991659868f, - 0.9244795102035182f, - 0.924529405400343f, - 0.9245792847556061f, - 0.9246291482684531f, - 0.9246789959380294f, - 0.9247288277634809f, - 0.9247786437439538f, - 0.9248284438785945f, - 0.9248782281665496f, - 0.9249279966069661f, - 0.9249777491989913f, - 0.9250274859417728f, - 0.925077206834458f, - 0.9251269118761953f, - 0.9251766010661329f, - 0.9252262744034193f, - 0.9252759318872036f, - 0.9253255735166347f, - 0.9253751992908621f, - 0.9254248092090354f, - 0.9254744032703046f, - 0.92552398147382f, - 0.925573543818732f, - 0.9256230903041914f, - 0.9256726209293492f, - 0.9257221356933567f, - 0.9257716345953655f, - 0.9258211176345275f, - 0.9258705848099947f, - 0.9259200361209196f, - 0.9259694715664548f, - 0.9260188911457534f, - 0.9260682948579684f, - 0.9261176827022533f, - 0.926167054677762f, - 0.9262164107836482f, - 0.9262657510190666f, - 0.9263150753831717f, - 0.9263643838751181f, - 0.926413676494061f, - 0.926462953239156f, - 0.9265122141095584f, - 0.9265614591044244f, - 0.9266106882229103f, - 0.9266599014641722f, - 0.9267090988273671f, - 0.9267582803116519f, - 0.9268074459161839f, - 0.9268565956401208f, - 0.9269057294826203f, - 0.9269548474428405f, - 0.9270039495199399f, - 0.927053035713077f, - 0.9271021060214109f, - 0.9271511604441005f, - 0.9272001989803056f, - 0.9272492216291858f, - 0.927298228389901f, - 0.9273472192616116f, - 0.9273961942434781f, - 0.9274451533346614f, - 0.9274940965343225f, - 0.9275430238416228f, - 0.927591935255724f, - 0.9276408307757881f, - 0.9276897104009771f, - 0.9277385741304536f, - 0.9277874219633802f, - 0.92783625389892f, - 0.9278850699362362f, - 0.9279338700744925f, - 0.9279826543128525f, - 0.9280314226504806f, - 0.9280801750865408f, - 0.9281289116201981f, - 0.9281776322506171f, - 0.9282263369769632f, - 0.9282750257984018f, - 0.9283236987140986f, - 0.9283723557232197f, - 0.9284209968249313f, - 0.9284696220183998f, - 0.9285182313027922f, - 0.9285668246772757f, - 0.9286154021410173f, - 0.928663963693185f, - 0.9287125093329466f, - 0.92876103905947f, - 0.9288095528719241f, - 0.9288580507694775f, - 0.9289065327512991f, - 0.9289549988165583f, - 0.9290034489644244f, - 0.9290518831940675f, - 0.9291003015046575f, - 0.9291487038953649f, - 0.9291970903653602f, - 0.9292454609138144f, - 0.9292938155398988f, - 0.9293421542427845f, - 0.9293904770216437f, - 0.929438783875648f, - 0.92948707480397f, - 0.929535349805782f, - 0.9295836088802568f, - 0.9296318520265677f, - 0.929680079243888f, - 0.9297282905313912f, - 0.9297764858882513f, - 0.9298246653136426f, - 0.9298728288067395f, - 0.9299209763667167f, - 0.929969107992749f, - 0.9300172236840121f, - 0.9300653234396812f, - 0.9301134072589323f, - 0.9301614751409415f, - 0.930209527084885f, - 0.9302575630899397f, - 0.9303055831552822f, - 0.93035358728009f, - 0.9304015754635404f, - 0.9304495477048111f, - 0.9304975040030803f, - 0.9305454443575261f, - 0.930593368767327f, - 0.930641277231662f, - 0.9306891697497102f, - 0.9307370463206508f, - 0.9307849069436637f, - 0.9308327516179286f, - 0.9308805803426258f, - 0.9309283931169356f, - 0.9309761899400391f, - 0.931023970811117f, - 0.9310717357293506f, - 0.9311194846939218f, - 0.931167217704012f, - 0.9312149347588035f, - 0.9312626358574787f, - 0.9313103209992203f, - 0.9313579901832111f, - 0.9314056434086343f, - 0.9314532806746735f, - 0.9315009019805123f, - 0.9315485073253348f, - 0.9315960967083253f, - 0.9316436701286684f, - 0.9316912275855489f, - 0.931738769078152f, - 0.9317862946056629f, - 0.9318338041672674f, - 0.9318812977621515f, - 0.9319287753895011f, - 0.9319762370485031f, - 0.932023682738344f, - 0.932071112458211f, - 0.9321185262072912f, - 0.9321659239847722f, - 0.932213305789842f, - 0.9322606716216887f, - 0.9323080214795005f, - 0.9323553553624664f, - 0.9324026732697751f, - 0.932449975200616f, - 0.9324972611541784f, - 0.9325445311296522f, - 0.9325917851262273f, - 0.9326390231430941f, - 0.9326862451794433f, - 0.9327334512344656f, - 0.9327806413073523f, - 0.9328278153972945f, - 0.9328749735034843f, - 0.9329221156251134f, - 0.932969241761374f, - 0.9330163519114588f, - 0.9330634460745605f, - 0.9331105242498721f, - 0.9331575864365869f, - 0.9332046326338985f, - 0.933251662841001f, - 0.9332986770570884f, - 0.9333456752813549f, - 0.9333926575129956f, - 0.9334396237512051f, - 0.933486573995179f, - 0.9335335082441126f, - 0.9335804264972017f, - 0.9336273287536425f, - 0.9336742150126313f, - 0.9337210852733645f, - 0.9337679395350391f, - 0.9338147777968525f, - 0.9338616000580019f, - 0.9339084063176851f, - 0.9339551965751f, - 0.9340019708294449f, - 0.9340487290799184f, - 0.9340954713257194f, - 0.9341421975660468f, - 0.9341889078001f, - 0.9342356020270786f, - 0.9342822802461825f, - 0.934328942456612f, - 0.9343755886575675f, - 0.9344222188482497f, - 0.9344688330278597f, - 0.9345154311955987f, - 0.9345620133506681f, - 0.93460857949227f, - 0.9346551296196064f, - 0.9347016637318797f, - 0.9347481818282924f, - 0.9347946839080477f, - 0.9348411699703485f, - 0.9348876400143983f, - 0.9349340940394011f, - 0.9349805320445608f, - 0.9350269540290816f, - 0.9350733599921682f, - 0.9351197499330254f, - 0.9351661238508583f, - 0.9352124817448724f, - 0.9352588236142733f, - 0.9353051494582668f, - 0.9353514592760592f, - 0.9353977530668571f, - 0.9354440308298673f, - 0.9354902925642967f, - 0.9355365382693527f, - 0.9355827679442428f, - 0.935628981588175f, - 0.9356751792003573f, - 0.9357213607799982f, - 0.9357675263263063f, - 0.9358136758384908f, - 0.9358598093157607f, - 0.9359059267573256f, - 0.9359520281623954f, - 0.9359981135301799f, - 0.9360441828598897f, - 0.9360902361507353f, - 0.9361362734019276f, - 0.9361822946126777f, - 0.9362282997821971f, - 0.9362742889096975f, - 0.9363202619943911f, - 0.9363662190354898f, - 0.9364121600322064f, - 0.9364580849837536f, - 0.9365039938893445f, - 0.9365498867481924f, - 0.936595763559511f, - 0.9366416243225143f, - 0.9366874690364163f, - 0.9367332977004317f, - 0.936779110313775f, - 0.9368249068756614f, - 0.9368706873853062f, - 0.9369164518419247f, - 0.9369622002447331f, - 0.9370079325929472f, - 0.9370536488857836f, - 0.9370993491224588f, - 0.9371450333021899f, - 0.9371907014241939f, - 0.9372363534876885f, - 0.9372819894918915f, - 0.9373276094360207f, - 0.9373732133192946f, - 0.9374188011409317f, - 0.9374643729001508f, - 0.9375099285961714f, - 0.9375554682282125f, - 0.9376009917954939f, - 0.9376464992972356f, - 0.937691990732658f, - 0.9377374661009813f, - 0.9377829254014265f, - 0.9378283686332147f, - 0.9378737957955671f, - 0.9379192068877054f, - 0.9379646019088514f, - 0.9380099808582274f, - 0.938055343735056f, - 0.9381006905385595f, - 0.9381460212679611f, - 0.9381913359224842f, - 0.9382366345013521f, - 0.9382819170037887f, - 0.9383271834290182f, - 0.938372433776265f, - 0.9384176680447536f, - 0.938462886233709f, - 0.9385080883423563f, - 0.9385532743699211f, - 0.9385984443156292f, - 0.9386435981787065f, - 0.9386887359583792f, - 0.9387338576538741f, - 0.9387789632644179f, - 0.9388240527892379f, - 0.9388691262275612f, - 0.9389141835786158f, - 0.9389592248416295f, - 0.9390042500158305f, - 0.9390492591004475f, - 0.9390942520947091f, - 0.9391392289978444f, - 0.9391841898090827f, - 0.9392291345276536f, - 0.939274063152787f, - 0.9393189756837131f, - 0.9393638721196624f, - 0.9394087524598655f, - 0.9394536167035534f, - 0.9394984648499574f, - 0.9395432968983091f, - 0.93958811284784f, - 0.9396329126977826f, - 0.9396776964473692f, - 0.9397224640958322f, - 0.9397672156424046f, - 0.9398119510863197f, - 0.9398566704268109f, - 0.9399013736631119f, - 0.9399460607944569f, - 0.9399907318200801f, - 0.9400353867392159f, - 0.9400800255510995f, - 0.9401246482549658f, - 0.9401692548500502f, - 0.9402138453355885f, - 0.9402584197108165f, - 0.9403029779749704f, - 0.940347520127287f, - 0.9403920461670027f, - 0.9404365560933549f, - 0.9404810499055807f, - 0.9405255276029177f, - 0.940569989184604f, - 0.9406144346498777f, - 0.940658863997977f, - 0.940703277228141f, - 0.9407476743396084f, - 0.9407920553316185f, - 0.9408364202034109f, - 0.9408807689542255f, - 0.9409251015833022f, - 0.9409694180898815f, - 0.9410137184732041f, - 0.9410580027325108f, - 0.941102270867043f, - 0.941146522876042f, - 0.9411907587587495f, - 0.9412349785144076f, - 0.9412791821422588f, - 0.9413233696415454f, - 0.9413675410115103f, - 0.9414116962513969f, - 0.9414558353604482f, - 0.9414999583379082f, - 0.9415440651830208f, - 0.9415881558950302f, - 0.9416322304731809f, - 0.9416762889167177f, - 0.9417203312248857f, - 0.9417643573969303f, - 0.9418083674320971f, - 0.9418523613296318f, - 0.9418963390887809f, - 0.9419403007087906f, - 0.9419842461889077f, - 0.9420281755283794f, - 0.9420720887264526f, - 0.9421159857823752f, - 0.9421598666953949f, - 0.9422037314647598f, - 0.9422475800897183f, - 0.9422914125695191f, - 0.942335228903411f, - 0.9423790290906435f, - 0.9424228131304659f, - 0.942466581022128f, - 0.9425103327648798f, - 0.9425540683579717f, - 0.9425977878006543f, - 0.9426414910921784f, - 0.9426851782317952f, - 0.9427288492187562f, - 0.942772504052313f, - 0.9428161427317178f, - 0.9428597652562225f, - 0.9429033716250801f, - 0.942946961837543f, - 0.9429905358928644f, - 0.9430340937902979f, - 0.9430776355290968f, - 0.9431211611085153f, - 0.9431646705278075f, - 0.9432081637862278f, - 0.9432516408830312f, - 0.9432951018174723f, - 0.9433385465888069f, - 0.9433819751962903f, - 0.9434253876391784f, - 0.9434687839167274f, - 0.9435121640281936f, - 0.9435555279728338f, - 0.943598875749905f, - 0.9436422073586643f, - 0.9436855227983694f, - 0.9437288220682778f, - 0.943772105167648f, - 0.9438153720957381f, - 0.9438586228518068f, - 0.9439018574351129f, - 0.9439450758449158f, - 0.9439882780804748f, - 0.9440314641410498f, - 0.9440746340259005f, - 0.9441177877342875f, - 0.9441609252654712f, - 0.9442040466187126f, - 0.9442471517932728f, - 0.9442902407884131f, - 0.9443333136033951f, - 0.944376370237481f, - 0.944419410689933f, - 0.9444624349600135f, - 0.9445054430469854f, - 0.9445484349501115f, - 0.9445914106686555f, - 0.9446343702018808f, - 0.9446773135490514f, - 0.9447202407094314f, - 0.9447631516822854f, - 0.9448060464668779f, - 0.9448489250624742f, - 0.9448917874683394f, - 0.944934633683739f, - 0.9449774637079391f, - 0.9450202775402056f, - 0.9450630751798048f, - 0.9451058566260037f, - 0.945148621878069f, - 0.945191370935268f, - 0.9452341037968682f, - 0.9452768204621375f, - 0.9453195209303438f, - 0.9453622052007554f, - 0.9454048732726411f, - 0.9454475251452698f, - 0.9454901608179104f, - 0.9455327802898326f, - 0.9455753835603061f, - 0.9456179706286009f, - 0.945660541493987f, - 0.9457030961557354f, - 0.9457456346131168f, - 0.9457881568654022f, - 0.945830662911863f, - 0.9458731527517709f, - 0.9459156263843979f, - 0.9459580838090162f, - 0.9460005250248984f, - 0.946042950031317f, - 0.9460853588275453f, - 0.9461277514128567f, - 0.9461701277865244f, - 0.9462124879478228f, - 0.9462548318960258f, - 0.9462971596304078f, - 0.9463394711502437f, - 0.9463817664548085f, - 0.9464240455433773f, - 0.9464663084152258f, - 0.9465085550696299f, - 0.9465507855058656f, - 0.9465929997232092f, - 0.9466351977209375f, - 0.9466773794983274f, - 0.9467195450546563f, - 0.9467616943892014f, - 0.9468038275012408f, - 0.9468459443900523f, - 0.9468880450549144f, - 0.9469301294951056f, - 0.9469721977099049f, - 0.9470142496985914f, - 0.9470562854604447f, - 0.9470983049947443f, - 0.9471403083007703f, - 0.9471822953778031f, - 0.947224266225123f, - 0.9472662208420111f, - 0.9473081592277484f, - 0.9473500813816162f, - 0.9473919873028965f, - 0.947433876990871f, - 0.9474757504448218f, - 0.9475176076640317f, - 0.9475594486477835f, - 0.94760127339536f, - 0.9476430819060447f, - 0.9476848741791213f, - 0.9477266502138736f, - 0.9477684100095857f, - 0.9478101535655421f, - 0.9478518808810277f, - 0.9478935919553273f, - 0.9479352867877264f, - 0.9479769653775104f, - 0.9480186277239652f, - 0.9480602738263769f, - 0.948101903684032f, - 0.9481435172962172f, - 0.9481851146622192f, - 0.9482266957813255f, - 0.9482682606528235f, - 0.9483098092760011f, - 0.9483513416501462f, - 0.9483928577745474f, - 0.9484343576484932f, - 0.9484758412712724f, - 0.9485173086421743f, - 0.9485587597604885f, - 0.9486001946255046f, - 0.9486416132365126f, - 0.9486830155928029f, - 0.9487244016936659f, - 0.9487657715383927f, - 0.9488071251262743f, - 0.948848462456602f, - 0.9488897835286678f, - 0.9489310883417635f, - 0.9489723768951813f, - 0.9490136491882138f, - 0.949054905220154f, - 0.9490961449902946f, - 0.9491373684979292f, - 0.9491785757423513f, - 0.9492197667228551f, - 0.9492609414387346f, - 0.9493020998892844f, - 0.949343242073799f, - 0.9493843679915738f, - 0.9494254776419038f, - 0.9494665710240848f, - 0.9495076481374126f, - 0.9495487089811835f, - 0.9495897535546937f, - 0.9496307818572399f, - 0.9496717938881194f, - 0.9497127896466291f, - 0.9497537691320669f, - 0.9497947323437304f, - 0.9498356792809176f, - 0.9498766099429272f, - 0.9499175243290576f, - 0.949958422438608f, - 0.9499993042708774f, - 0.9500401698251654f, - 0.9500810191007717f, - 0.9501218520969964f, - 0.9501626688131399f, - 0.9502034692485029f, - 0.9502442534023859f, - 0.9502850212740905f, - 0.950325772862918f, - 0.95036650816817f, - 0.9504072271891487f, - 0.9504479299251564f, - 0.9504886163754955f, - 0.950529286539469f, - 0.95056994041638f, - 0.9506105780055318f, - 0.9506511993062282f, - 0.9506918043177731f, - 0.9507323930394708f, - 0.9507729654706257f, - 0.9508135216105429f, - 0.9508540614585271f, - 0.9508945850138839f, - 0.9509350922759189f, - 0.950975583243938f, - 0.9510160579172474f, - 0.9510565162951535f, - 0.9510969583769633f, - 0.9511373841619836f, - 0.9511777936495217f, - 0.9512181868388853f, - 0.9512585637293822f, - 0.9512989243203207f, - 0.9513392686110091f, - 0.9513795966007562f, - 0.9514199082888709f, - 0.9514602036746626f, - 0.9515004827574406f, - 0.951540745536515f, - 0.9515809920111957f, - 0.9516212221807933f, - 0.9516614360446183f, - 0.9517016336019816f, - 0.9517418148521947f, - 0.9517819797945687f, - 0.9518221284284157f, - 0.9518622607530478f, - 0.9519023767677771f, - 0.9519424764719163f, - 0.9519825598647785f, - 0.9520226269456766f, - 0.9520626777139243f, - 0.9521027121688351f, - 0.9521427303097232f, - 0.9521827321359029f, - 0.9522227176466886f, - 0.9522626868413954f, - 0.9523026397193383f, - 0.9523425762798328f, - 0.9523824965221944f, - 0.9524224004457393f, - 0.9524622880497836f, - 0.9525021593336441f, - 0.9525420142966373f, - 0.9525818529380805f, - 0.9526216752572909f, - 0.9526614812535863f, - 0.9527012709262845f, - 0.9527410442747039f, - 0.9527808012981629f, - 0.9528205419959802f, - 0.952860266367475f, - 0.9528999744119666f, - 0.9529396661287746f, - 0.9529793415172189f, - 0.9530190005766195f, - 0.953058643306297f, - 0.9530982697055722f, - 0.953137879773766f, - 0.9531774735101997f, - 0.953217050914195f, - 0.9532566119850735f, - 0.9532961567221576f, - 0.9533356851247696f, - 0.9533751971922322f, - 0.9534146929238683f, - 0.9534541723190013f, - 0.9534936353769545f, - 0.9535330820970519f, - 0.9535725124786176f, - 0.9536119265209759f, - 0.9536513242234514f, - 0.9536907055853693f, - 0.9537300706060544f, - 0.9537694192848325f, - 0.9538087516210293f, - 0.9538480676139708f, - 0.9538873672629833f, - 0.9539266505673936f, - 0.9539659175265284f, - 0.9540051681397148f, - 0.9540444024062804f, - 0.954083620325553f, - 0.9541228218968605f, - 0.9541620071195313f, - 0.9542011759928938f, - 0.9542403285162768f, - 0.9542794646890098f, - 0.9543185845104218f, - 0.9543576879798428f, - 0.9543967750966026f, - 0.9544358458600315f, - 0.95447490026946f, - 0.954513938324219f, - 0.9545529600236395f, - 0.954591965367053f, - 0.954630954353791f, - 0.9546699269831855f, - 0.9547088832545687f, - 0.9547478231672731f, - 0.9547867467206316f, - 0.9548256539139771f, - 0.954864544746643f, - 0.9549034192179628f, - 0.9549422773272706f, - 0.9549811190739003f, - 0.9550199444571866f, - 0.9550587534764642f, - 0.955097546131068f, - 0.9551363224203335f, - 0.955175082343596f, - 0.9552138259001917f, - 0.9552525530894564f, - 0.9552912639107268f, - 0.9553299583633393f, - 0.9553686364466313f, - 0.9554072981599396f, - 0.955445943502602f, - 0.9554845724739565f, - 0.9555231850733408f, - 0.9555617813000934f, - 0.9556003611535531f, - 0.9556389246330588f, - 0.9556774717379497f, - 0.9557160024675653f, - 0.9557545168212455f, - 0.9557930147983301f, - 0.9558314963981597f, - 0.9558699616200749f, - 0.9559084104634163f, - 0.9559468429275256f, - 0.9559852590117439f, - 0.9560236587154131f, - 0.9560620420378751f, - 0.9561004089784724f, - 0.9561387595365474f, - 0.956177093711443f, - 0.9562154115025026f, - 0.9562537129090695f, - 0.9562919979304871f, - 0.9563302665660999f, - 0.9563685188152519f, - 0.9564067546772876f, - 0.956444974151552f, - 0.9564831772373903f, - 0.9565213639341476f, - 0.9565595342411698f, - 0.9565976881578028f, - 0.9566358256833928f, - 0.9566739468172865f, - 0.9567120515588305f, - 0.956750139907372f, - 0.9567882118622583f, - 0.956826267422837f, - 0.9568643065884562f, - 0.956902329358464f, - 0.9569403357322089f, - 0.9569783257090396f, - 0.9570162992883052f, - 0.9570542564693553f, - 0.957092197251539f, - 0.9571301216342066f, - 0.9571680296167082f, - 0.9572059211983942f, - 0.9572437963786153f, - 0.9572816551567226f, - 0.9573194975320672f, - 0.957357323504001f, - 0.9573951330718756f, - 0.9574329262350434f, - 0.9574707029928565f, - 0.9575084633446679f, - 0.9575462072898304f, - 0.9575839348276973f, - 0.9576216459576222f, - 0.957659340678959f, - 0.9576970189910616f, - 0.9577346808932845f, - 0.9577723263849824f, - 0.9578099554655104f, - 0.9578475681342234f, - 0.9578851643904772f, - 0.9579227442336274f, - 0.9579603076630302f, - 0.957997854678042f, - 0.9580353852780193f, - 0.9580728994623191f, - 0.9581103972302987f, - 0.9581478785813154f, - 0.9581853435147271f, - 0.9582227920298917f, - 0.9582602241261677f, - 0.9582976398029137f, - 0.9583350390594885f, - 0.9583724218952513f, - 0.9584097883095615f, - 0.958447138301779f, - 0.9584844718712636f, - 0.9585217890173758f, - 0.9585590897394761f, - 0.9585963740369254f, - 0.9586336419090848f, - 0.9586708933553157f, - 0.9587081283749799f, - 0.9587453469674392f, - 0.9587825491320561f, - 0.958819734868193f, - 0.9588569041752129f, - 0.9588940570524785f, - 0.9589311934993537f, - 0.958968313515202f, - 0.9590054170993874f, - 0.9590425042512739f, - 0.9590795749702262f, - 0.959116629255609f, - 0.9591536671067876f, - 0.9591906885231273f, - 0.9592276935039936f, - 0.9592646820487525f, - 0.9593016541567703f, - 0.9593386098274134f, - 0.9593755490600485f, - 0.9594124718540429f, - 0.9594493782087636f, - 0.9594862681235786f, - 0.9595231415978556f, - 0.9595599986309626f, - 0.9595968392222685f, - 0.9596336633711416f, - 0.9596704710769512f, - 0.9597072623390667f, - 0.9597440371568574f, - 0.9597807955296933f, - 0.9598175374569445f, - 0.9598542629379817f, - 0.9598909719721753f, - 0.9599276645588964f, - 0.9599643406975163f, - 0.9600010003874067f, - 0.9600376436279392f, - 0.960074270418486f, - 0.9601108807584197f, - 0.9601474746471127f, - 0.9601840520839382f, - 0.9602206130682693f, - 0.9602571575994796f, - 0.960293685676943f, - 0.9603301973000336f, - 0.9603666924681256f, - 0.9604031711805938f, - 0.9604396334368132f, - 0.9604760792361589f, - 0.9605125085780064f, - 0.9605489214617315f, - 0.9605853178867105f, - 0.9606216978523195f, - 0.9606580613579353f, - 0.9606944084029347f, - 0.960730738986695f, - 0.9607670531085937f, - 0.9608033507680084f, - 0.9608396319643172f, - 0.9608758966968985f, - 0.9609121449651311f, - 0.9609483767683935f, - 0.9609845921060651f, - 0.9610207909775254f, - 0.961056973382154f, - 0.961093139319331f, - 0.9611292887884368f, - 0.9611654217888519f, - 0.9612015383199571f, - 0.9612376383811337f, - 0.961273721971763f, - 0.9613097890912268f, - 0.961345839738907f, - 0.961381873914186f, - 0.9614178916164463f, - 0.9614538928450708f, - 0.9614898775994426f, - 0.9615258458789451f, - 0.9615617976829619f, - 0.9615977330108771f, - 0.9616336518620751f, - 0.9616695542359401f, - 0.9617054401318572f, - 0.9617413095492113f, - 0.961777162487388f, - 0.9618129989457728f, - 0.9618488189237516f, - 0.9618846224207109f, - 0.961920409436037f, - 0.9619561799691168f, - 0.9619919340193372f, - 0.9620276715860858f, - 0.9620633926687502f, - 0.9620990972667183f, - 0.9621347853793782f, - 0.9621704570061185f, - 0.962206112146328f, - 0.9622417507993957f, - 0.9622773729647109f, - 0.9623129786416633f, - 0.9623485678296428f, - 0.9623841405280397f, - 0.9624196967362442f, - 0.9624552364536473f, - 0.9624907596796398f, - 0.9625262664136134f, - 0.9625617566549592f, - 0.9625972304030695f, - 0.9626326876573363f, - 0.9626681284171521f, - 0.9627035526819095f, - 0.9627389604510016f, - 0.9627743517238219f, - 0.9628097264997636f, - 0.9628450847782207f, - 0.9628804265585875f, - 0.9629157518402583f, - 0.962951060622628f, - 0.9629863529050913f, - 0.9630216286870436f, - 0.9630568879678804f, - 0.9630921307469976f, - 0.9631273570237915f, - 0.9631625667976582f, - 0.9631977600679945f, - 0.9632329368341974f, - 0.9632680970956643f, - 0.9633032408517924f, - 0.9633383681019799f, - 0.9633734788456246f, - 0.963408573082125f, - 0.9634436508108799f, - 0.963478712031288f, - 0.9635137567427488f, - 0.9635487849446616f, - 0.9635837966364262f, - 0.9636187918174428f, - 0.9636537704871119f, - 0.9636887326448338f, - 0.9637236782900097f, - 0.9637586074220407f, - 0.9637935200403284f, - 0.9638284161442745f, - 0.963863295733281f, - 0.9638981588067503f, - 0.9639330053640852f, - 0.9639678354046883f, - 0.9640026489279632f, - 0.964037445933313f, - 0.9640722264201416f, - 0.964106990387853f, - 0.9641417378358517f, - 0.9641764687635421f, - 0.9642111831703293f, - 0.9642458810556184f, - 0.9642805624188147f, - 0.9643152272593241f, - 0.9643498755765526f, - 0.9643845073699066f, - 0.9644191226387925f, - 0.9644537213826173f, - 0.9644883036007882f, - 0.9645228692927125f, - 0.9645574184577981f, - 0.9645919510954528f, - 0.9646264672050852f, - 0.9646609667861036f, - 0.9646954498379169f, - 0.9647299163599343f, - 0.9647643663515653f, - 0.9647987998122195f, - 0.9648332167413067f, - 0.9648676171382377f, - 0.9649020010024225f, - 0.9649363683332723f, - 0.9649707191301982f, - 0.9650050533926114f, - 0.9650393711199239f, - 0.9650736723115474f, - 0.9651079569668942f, - 0.965142225085377f, - 0.9651764766664084f, - 0.9652107117094015f, - 0.96524493021377f, - 0.9652791321789275f, - 0.9653133176042876f, - 0.9653474864892649f, - 0.9653816388332739f, - 0.9654157746357293f, - 0.9654498938960462f, - 0.9654839966136399f, - 0.9655180827879262f, - 0.965552152418321f, - 0.9655862055042406f, - 0.9656202420451013f, - 0.9656542620403201f, - 0.9656882654893141f, - 0.9657222523915004f, - 0.9657562227462969f, - 0.9657901765531214f, - 0.9658241138113921f, - 0.9658580345205277f, - 0.9658919386799467f, - 0.9659258262890683f, - 0.9659596973473118f, - 0.9659935518540969f, - 0.9660273898088434f, - 0.9660612112109715f, - 0.9660950160599019f, - 0.9661288043550551f, - 0.9661625760958522f, - 0.9661963312817147f, - 0.9662300699120641f, - 0.9662637919863222f, - 0.9662974975039113f, - 0.9663311864642539f, - 0.9663648588667726f, - 0.9663985147108904f, - 0.966432153996031f, - 0.9664657767216176f, - 0.9664993828870742f, - 0.966532972491825f, - 0.9665665455352944f, - 0.9666001020169073f, - 0.9666336419360885f, - 0.9666671652922634f, - 0.9667006720848577f, - 0.966734162313297f, - 0.9667676359770075f, - 0.966801093075416f, - 0.9668345336079488f, - 0.9668679575740331f, - 0.9669013649730962f, - 0.9669347558045656f, - 0.9669681300678692f, - 0.967001487762435f, - 0.9670348288876918f, - 0.9670681534430678f, - 0.9671014614279925f, - 0.9671347528418948f, - 0.9671680276842043f, - 0.9672012859543511f, - 0.9672345276517651f, - 0.9672677527758767f, - 0.9673009613261169f, - 0.9673341533019163f, - 0.9673673287027063f, - 0.9674004875279185f, - 0.9674336297769847f, - 0.967466755449337f, - 0.967499864544408f, - 0.96753295706163f, - 0.9675660330004362f, - 0.9675990923602598f, - 0.9676321351405344f, - 0.9676651613406938f, - 0.9676981709601721f, - 0.9677311639984035f, - 0.9677641404548231f, - 0.9677971003288655f, - 0.9678300436199659f, - 0.9678629703275602f, - 0.9678958804510839f, - 0.9679287739899732f, - 0.9679616509436644f, - 0.9679945113115943f, - 0.9680273550931997f, - 0.9680601822879179f, - 0.9680929928951864f, - 0.968125786914443f, - 0.9681585643451258f, - 0.9681913251866732f, - 0.9682240694385238f, - 0.9682567971001165f, - 0.9682895081708907f, - 0.9683222026502856f, - 0.9683548805377412f, - 0.9683875418326976f, - 0.968420186534595f, - 0.9684528146428742f, - 0.9684854261569761f, - 0.9685180210763418f, - 0.9685505994004129f, - 0.9685831611286311f, - 0.9686157062604385f, - 0.9686482347952775f, - 0.9686807467325907f, - 0.968713242071821f, - 0.9687457208124116f, - 0.968778182953806f, - 0.968810628495448f, - 0.9688430574367815f, - 0.968875469777251f, - 0.9689078655163011f, - 0.9689402446533767f, - 0.9689726071879229f, - 0.9690049531193854f, - 0.9690372824472097f, - 0.969069595170842f, - 0.9691018912897286f, - 0.969134170803316f, - 0.9691664337110514f, - 0.9691986800123816f, - 0.9692309097067544f, - 0.9692631227936174f, - 0.9692953192724185f, - 0.9693274991426063f, - 0.9693596624036293f, - 0.9693918090549363f, - 0.9694239390959766f, - 0.9694560525261995f, - 0.969488149345055f, - 0.9695202295519929f, - 0.9695522931464635f, - 0.9695843401279176f, - 0.969616370495806f, - 0.9696483842495798f, - 0.9696803813886905f, - 0.9697123619125898f, - 0.9697443258207298f, - 0.9697762731125628f, - 0.9698082037875413f, - 0.9698401178451183f, - 0.9698720152847468f, - 0.9699038961058803f, - 0.9699357603079727f, - 0.9699676078904779f, - 0.9699994388528501f, - 0.970031253194544f, - 0.9700630509150144f, - 0.9700948320137165f, - 0.9701265964901058f, - 0.9701583443436379f, - 0.9701900755737689f, - 0.9702217901799551f, - 0.970253488161653f, - 0.9702851695183196f, - 0.9703168342494118f, - 0.9703484823543873f, - 0.9703801138327036f, - 0.9704117286838189f, - 0.9704433269071914f, - 0.9704749085022796f, - 0.9705064734685425f, - 0.9705380218054391f, - 0.9705695535124289f, - 0.9706010685889717f, - 0.9706325670345273f, - 0.9706640488485562f, - 0.9706955140305188f, - 0.970726962579876f, - 0.9707583944960889f, - 0.9707898097786191f, - 0.9708212084269281f, - 0.9708525904404779f, - 0.970883955818731f, - 0.9709153045611497f, - 0.970946636667197f, - 0.970977952136336f, - 0.9710092509680301f, - 0.9710405331617431f, - 0.9710717987169388f, - 0.9711030476330816f, - 0.9711342799096361f, - 0.971165495546067f, - 0.9711966945418395f, - 0.971227876896419f, - 0.9712590426092713f, - 0.9712901916798622f, - 0.9713213241076581f, - 0.9713524398921256f, - 0.9713835390327314f, - 0.9714146215289428f, - 0.971445687380227f, - 0.9714767365860517f, - 0.9715077691458851f, - 0.9715387850591953f, - 0.9715697843254509f, - 0.9716007669441208f, - 0.9716317329146739f, - 0.9716626822365798f, - 0.9716936149093082f, - 0.971724530932329f, - 0.9717554303051126f, - 0.9717863130271293f, - 0.97181717909785f, - 0.971848028516746f, - 0.9718788612832886f, - 0.9719096773969493f, - 0.9719404768572004f, - 0.971971259663514f, - 0.9720020258153627f, - 0.9720327753122192f, - 0.9720635081535567f, - 0.9720942243388486f, - 0.9721249238675687f, - 0.9721556067391908f, - 0.9721862729531892f, - 0.9722169225090385f, - 0.9722475554062133f, - 0.9722781716441892f, - 0.9723087712224411f, - 0.9723393541404449f, - 0.9723699203976766f, - 0.9724004699936124f, - 0.9724310029277289f, - 0.9724615191995027f, - 0.9724920188084113f, - 0.9725225017539318f, - 0.9725529680355419f, - 0.9725834176527198f, - 0.9726138506049435f, - 0.9726442668916916f, - 0.972674666512443f, - 0.9727050494666768f, - 0.9727354157538723f, - 0.9727657653735093f, - 0.9727960983250677f, - 0.9728264146080278f, - 0.9728567142218701f, - 0.9728869971660754f, - 0.9729172634401249f, - 0.9729475130434998f, - 0.972977745975682f, - 0.9730079622361534f, - 0.9730381618243962f, - 0.973068344739893f, - 0.9730985109821265f, - 0.97312866055058f, - 0.9731587934447369f, - 0.9731889096640807f, - 0.9732190092080953f, - 0.9732490920762653f, - 0.973279158268075f, - 0.9733092077830092f, - 0.9733392406205531f, - 0.9733692567801921f, - 0.9733992562614119f, - 0.9734292390636983f, - 0.9734592051865377f, - 0.9734891546294167f, - 0.9735190873918219f, - 0.9735490034732407f, - 0.9735789028731603f, - 0.9736087855910683f, - 0.9736386516264529f, - 0.9736685009788023f, - 0.9736983336476048f, - 0.9737281496323495f, - 0.9737579489325255f, - 0.973787731547622f, - 0.9738174974771289f, - 0.973847246720536f, - 0.9738769792773336f, - 0.9739066951470123f, - 0.973936394329063f, - 0.9739660768229765f, - 0.9739957426282445f, - 0.9740253917443586f, - 0.9740550241708108f, - 0.9740846399070933f, - 0.9741142389526986f, - 0.9741438213071195f, - 0.9741733869698493f, - 0.9742029359403813f, - 0.9742324682182092f, - 0.9742619838028269f, - 0.9742914826937288f, - 0.9743209648904093f, - 0.9743504303923634f, - 0.9743798791990859f, - 0.9744093113100726f, - 0.9744387267248188f, - 0.9744681254428208f, - 0.9744975074635748f, - 0.9745268727865771f, - 0.9745562214113248f, - 0.974585553337315f, - 0.974614868564045f, - 0.9746441670910124f, - 0.9746734489177156f, - 0.9747027140436524f, - 0.9747319624683215f, - 0.9747611941912218f, - 0.9747904092118523f, - 0.9748196075297125f, - 0.9748487891443022f, - 0.9748779540551212f, - 0.9749071022616699f, - 0.9749362337634486f, - 0.9749653485599585f, - 0.9749944466507005f, - 0.9750235280351761f, - 0.9750525927128869f, - 0.9750816406833349f, - 0.9751106719460225f, - 0.9751396865004521f, - 0.9751686843461267f, - 0.9751976654825493f, - 0.9752266299092234f, - 0.9752555776256526f, - 0.975284508631341f, - 0.9753134229257928f, - 0.9753423205085127f, - 0.9753712013790053f, - 0.9754000655367759f, - 0.9754289129813299f, - 0.9754577437121731f, - 0.9754865577288113f, - 0.9755153550307509f, - 0.9755441356174984f, - 0.9755728994885607f, - 0.975601646643445f, - 0.9756303770816586f, - 0.9756590908027092f, - 0.975687787806105f, - 0.975716468091354f, - 0.9757451316579651f, - 0.9757737785054468f, - 0.9758024086333085f, - 0.9758310220410595f, - 0.9758596187282096f, - 0.9758881986942688f, - 0.9759167619387473f, - 0.9759453084611559f, - 0.9759738382610051f, - 0.9760023513378064f, - 0.9760308476910711f, - 0.9760593273203109f, - 0.9760877902250377f, - 0.976116236404764f, - 0.9761446658590023f, - 0.9761730785872654f, - 0.9762014745890666f, - 0.9762298538639191f, - 0.976258216411337f, - 0.976286562230834f, - 0.9763148913219246f, - 0.9763432036841232f, - 0.9763714993169449f, - 0.9763997782199046f, - 0.976428040392518f, - 0.9764562858343007f, - 0.9764845145447686f, - 0.9765127265234382f, - 0.9765409217698262f, - 0.9765691002834492f, - 0.9765972620638246f, - 0.9766254071104696f, - 0.9766535354229022f, - 0.9766816470006403f, - 0.9767097418432023f, - 0.9767378199501068f, - 0.9767658813208725f, - 0.9767939259550187f, - 0.9768219538520648f, - 0.9768499650115308f, - 0.9768779594329364f, - 0.9769059371158022f, - 0.9769338980596487f, - 0.9769618422639967f, - 0.9769897697283675f, - 0.9770176804522825f, - 0.9770455744352636f, - 0.9770734516768327f, - 0.9771013121765122f, - 0.9771291559338247f, - 0.977156982948293f, - 0.9771847932194404f, - 0.9772125867467903f, - 0.9772403635298668f, - 0.9772681235681935f, - 0.9772958668612949f, - 0.9773235934086957f, - 0.9773513032099207f, - 0.9773789962644952f, - 0.9774066725719447f, - 0.9774343321317949f, - 0.9774619749435719f, - 0.9774896010068019f, - 0.9775172103210118f, - 0.9775448028857284f, - 0.9775723787004789f, - 0.9775999377647907f, - 0.9776274800781917f, - 0.9776550056402099f, - 0.9776825144503738f, - 0.9777100065082119f, - 0.9777374818132533f, - 0.9777649403650269f, - 0.9777923821630625f, - 0.9778198072068899f, - 0.9778472154960389f, - 0.9778746070300401f, - 0.9779019818084241f, - 0.9779293398307218f, - 0.9779566810964645f, - 0.9779840056051836f, - 0.9780113133564111f, - 0.9780386043496789f, - 0.9780658785845194f, - 0.9780931360604654f, - 0.9781203767770498f, - 0.9781476007338057f, - 0.9781748079302667f, - 0.9782019983659666f, - 0.9782291720404396f, - 0.97825632895322f, - 0.9782834691038425f, - 0.978310592491842f, - 0.9783376991167538f, - 0.9783647889781135f, - 0.9783918620754569f, - 0.9784189184083201f, - 0.9784459579762393f, - 0.9784729807787514f, - 0.9784999868153933f, - 0.9785269760857024f, - 0.978553948589216f, - 0.9785809043254721f, - 0.9786078432940087f, - 0.9786347654943645f, - 0.9786616709260778f, - 0.9786885595886878f, - 0.9787154314817338f, - 0.9787422866047552f, - 0.978769124957292f, - 0.9787959465388842f, - 0.9788227513490724f, - 0.978849539387397f, - 0.9788763106533994f, - 0.9789030651466206f, - 0.9789298028666022f, - 0.9789565238128861f, - 0.9789832279850146f, - 0.9790099153825298f, - 0.9790365860049746f, - 0.9790632398518921f, - 0.9790898769228255f, - 0.9791164972173182f, - 0.9791431007349144f, - 0.979169687475158f, - 0.9791962574375935f, - 0.9792228106217657f, - 0.9792493470272197f, - 0.9792758666535006f, - 0.9793023695001541f, - 0.9793288555667261f, - 0.9793553248527628f, - 0.9793817773578104f, - 0.979408213081416f, - 0.9794346320231264f, - 0.979461034182489f, - 0.9794874195590514f, - 0.9795137881523615f, - 0.9795401399619674f, - 0.9795664749874177f, - 0.979592793228261f, - 0.9796190946840465f, - 0.9796453793543235f, - 0.9796716472386415f, - 0.9796978983365506f, - 0.9797241326476009f, - 0.9797503501713428f, - 0.9797765509073272f, - 0.979802734855105f, - 0.9798289020142277f, - 0.9798550523842469f, - 0.9798811859647144f, - 0.9799073027551826f, - 0.9799334027552039f, - 0.979959485964331f, - 0.9799855523821172f, - 0.9800116020081155f, - 0.98003763484188f, - 0.9800636508829642f, - 0.9800896501309226f, - 0.9801156325853096f, - 0.9801415982456801f, - 0.980167547111589f, - 0.9801934791825919f, - 0.9802193944582444f, - 0.9802452929381023f, - 0.9802711746217219f, - 0.9802970395086597f, - 0.9803228875984726f, - 0.9803487188907177f, - 0.9803745333849524f, - 0.9804003310807343f, - 0.9804261119776214f, - 0.9804518760751719f, - 0.9804776233729444f, - 0.9805033538704977f, - 0.9805290675673909f, - 0.9805547644631835f, - 0.9805804445574351f, - 0.9806061078497057f, - 0.9806317543395556f, - 0.9806573840265452f, - 0.9806829969102356f, - 0.9807085929901878f, - 0.980734172265963f, - 0.9807597347371233f, - 0.9807852804032304f, - 0.9808108092638468f, - 0.9808363213185349f, - 0.9808618165668576f, - 0.9808872950083781f, - 0.9809127566426598f, - 0.9809382014692664f, - 0.980963629487762f, - 0.9809890406977108f, - 0.9810144350986774f, - 0.9810398126902266f, - 0.9810651734719237f, - 0.9810905174433341f, - 0.9811158446040235f, - 0.981141154953558f, - 0.9811664484915039f, - 0.9811917252174278f, - 0.9812169851308965f, - 0.9812422282314772f, - 0.9812674545187376f, - 0.9812926639922451f, - 0.981317856651568f, - 0.9813430324962745f, - 0.9813681915259334f, - 0.9813933337401133f, - 0.9814184591383835f, - 0.9814435677203137f, - 0.9814686594854735f, - 0.9814937344334329f, - 0.9815187925637623f, - 0.9815438338760324f, - 0.9815688583698141f, - 0.9815938660446786f, - 0.9816188569001975f, - 0.9816438309359423f, - 0.9816687881514853f, - 0.9816937285463988f, - 0.9817186521202556f, - 0.9817435588726284f, - 0.9817684488030906f, - 0.9817933219112157f, - 0.9818181781965774f, - 0.9818430176587499f, - 0.9818678402973076f, - 0.981892646111825f, - 0.9819174351018772f, - 0.9819422072670395f, - 0.9819669626068873f, - 0.9819917011209965f, - 0.9820164228089433f, - 0.9820411276703039f, - 0.9820658157046551f, - 0.9820904869115739f, - 0.9821151412906375f, - 0.9821397788414234f, - 0.9821643995635096f, - 0.9821890034564742f, - 0.9822135905198955f, - 0.9822381607533524f, - 0.9822627141564236f, - 0.9822872507286886f, - 0.9823117704697271f, - 0.9823362733791187f, - 0.9823607594564435f, - 0.9823852287012823f, - 0.9824096811132155f, - 0.9824341166918242f, - 0.9824585354366898f, - 0.9824829373473939f, - 0.9825073224235181f, - 0.9825316906646449f, - 0.9825560420703565f, - 0.9825803766402359f, - 0.982604694373866f, - 0.98262899527083f, - 0.9826532793307118f, - 0.9826775465530949f, - 0.9827017969375639f, - 0.9827260304837031f, - 0.9827502471910972f, - 0.9827744470593314f, - 0.9827986300879908f, - 0.9828227962766614f, - 0.9828469456249287f, - 0.9828710781323792f, - 0.9828951937985994f, - 0.9829192926231758f, - 0.9829433746056958f, - 0.9829674397457466f, - 0.9829914880429159f, - 0.9830155194967916f, - 0.983039534106962f, - 0.9830635318730154f, - 0.983087512794541f, - 0.9831114768711275f, - 0.9831354241023644f, - 0.9831593544878415f, - 0.9831832680271487f, - 0.9832071647198762f, - 0.9832310445656145f, - 0.9832549075639545f, - 0.9832787537144874f, - 0.9833025830168044f, - 0.9833263954704974f, - 0.9833501910751581f, - 0.9833739698303791f, - 0.9833977317357526f, - 0.9834214767908719f, - 0.9834452049953297f, - 0.9834689163487196f, - 0.9834926108506353f, - 0.983516288500671f, - 0.9835399492984206f, - 0.983563593243479f, - 0.9835872203354409f, - 0.9836108305739015f, - 0.9836344239584563f, - 0.983658000488701f, - 0.9836815601642315f, - 0.9837051029846443f, - 0.9837286289495358f, - 0.9837521380585031f, - 0.9837756303111433f, - 0.9837991057070539f, - 0.9838225642458326f, - 0.9838460059270774f, - 0.9838694307503867f, - 0.983892838715359f, - 0.9839162298215935f, - 0.9839396040686892f, - 0.9839629614562455f, - 0.9839863019838624f, - 0.9840096256511397f, - 0.984032932457678f, - 0.9840562224030779f, - 0.9840794954869402f, - 0.9841027517088662f, - 0.9841259910684574f, - 0.9841492135653157f, - 0.9841724191990431f, - 0.9841956079692419f, - 0.9842187798755149f, - 0.984241934917465f, - 0.9842650730946955f, - 0.9842881944068098f, - 0.9843112988534118f, - 0.9843343864341056f, - 0.9843574571484958f, - 0.9843805109961867f, - 0.9844035479767836f, - 0.9844265680898916f, - 0.9844495713351163f, - 0.9844725577120637f, - 0.9844955272203396f, - 0.9845184798595508f, - 0.9845414156293036f, - 0.9845643345292053f, - 0.9845872365588633f, - 0.9846101217178848f, - 0.9846329900058779f, - 0.9846558414224508f, - 0.9846786759672118f, - 0.9847014936397698f, - 0.9847242944397336f, - 0.9847470783667127f, - 0.9847698454203168f, - 0.9847925956001554f, - 0.9848153289058391f, - 0.9848380453369782f, - 0.9848607448931833f, - 0.9848834275740658f, - 0.9849060933792367f, - 0.9849287423083078f, - 0.9849513743608911f, - 0.9849739895365985f, - 0.9849965878350428f, - 0.9850191692558368f, - 0.9850417337985934f, - 0.9850642814629259f, - 0.9850868122484481f, - 0.985109326154774f, - 0.9851318231815176f, - 0.9851543033282936f, - 0.9851767665947168f, - 0.9851992129804021f, - 0.9852216424849652f, - 0.9852440551080216f, - 0.9852664508491873f, - 0.9852888297080786f, - 0.9853111916843119f, - 0.9853335367775041f, - 0.9853558649872725f, - 0.9853781763132342f, - 0.9854004707550071f, - 0.9854227483122092f, - 0.9854450089844587f, - 0.9854672527713741f, - 0.9854894796725745f, - 0.9855116896876789f, - 0.9855338828163067f, - 0.9855560590580777f, - 0.985578218412612f, - 0.9856003608795296f, - 0.9856224864584513f, - 0.985644595148998f, - 0.985666686950791f, - 0.9856887618634513f, - 0.9857108198866013f, - 0.9857328610198625f, - 0.9857548852628574f, - 0.9857768926152087f, - 0.9857988830765393f, - 0.9858208566464723f, - 0.9858428133246314f, - 0.9858647531106401f, - 0.9858866760041226f, - 0.9859085820047033f, - 0.9859304711120068f, - 0.9859523433256581f, - 0.9859741986452822f, - 0.9859960370705049f, - 0.9860178586009518f, - 0.9860396632362491f, - 0.9860614509760233f, - 0.9860832218199008f, - 0.9861049757675088f, - 0.9861267128184743f, - 0.986148432972425f, - 0.9861701362289889f, - 0.9861918225877937f, - 0.9862134920484682f, - 0.9862351446106409f, - 0.9862567802739409f, - 0.9862783990379974f, - 0.98630000090244f, - 0.9863215858668984f, - 0.986343153931003f, - 0.9863647050943842f, - 0.9863862393566726f, - 0.9864077567174993f, - 0.9864292571764954f, - 0.9864507407332929f, - 0.9864722073875234f, - 0.9864936571388191f, - 0.9865150899868125f, - 0.9865365059311363f, - 0.9865579049714237f, - 0.9865792871073078f, - 0.9866006523384224f, - 0.9866220006644014f, - 0.986643332084879f, - 0.9866646465994896f, - 0.986685944207868f, - 0.9867072249096495f, - 0.986728488704469f, - 0.9867497355919626f, - 0.986770965571766f, - 0.9867921786435155f, - 0.9868133748068476f, - 0.9868345540613992f, - 0.9868557164068072f, - 0.9868768618427093f, - 0.9868979903687428f, - 0.9869191019845459f, - 0.9869401966897569f, - 0.9869612744840142f, - 0.9869823353669567f, - 0.9870033793382235f, - 0.987024406397454f, - 0.9870454165442881f, - 0.9870664097783656f, - 0.9870873860993268f, - 0.9871083455068123f, - 0.987129288000463f, - 0.98715021357992f, - 0.9871711222448248f, - 0.9871920139948192f, - 0.987212888829545f, - 0.9872337467486447f, - 0.987254587751761f, - 0.9872754118385365f, - 0.9872962190086146f, - 0.9873170092616387f, - 0.9873377825972526f, - 0.9873585390151003f, - 0.9873792785148262f, - 0.987400001096075f, - 0.9874207067584915f, - 0.9874413955017208f, - 0.9874620673254088f, - 0.9874827222292009f, - 0.9875033602127433f, - 0.9875239812756824f, - 0.987544585417665f, - 0.9875651726383378f, - 0.9875857429373482f, - 0.9876062963143437f, - 0.9876268327689722f, - 0.9876473523008817f, - 0.9876678549097206f, - 0.9876883405951378f, - 0.987708809356782f, - 0.9877292611943025f, - 0.987749696107349f, - 0.9877701140955714f, - 0.9877905151586197f, - 0.9878108992961444f, - 0.9878312665077962f, - 0.9878516167932261f, - 0.9878719501520854f, - 0.9878922665840258f, - 0.987912566088699f, - 0.9879328486657574f, - 0.9879531143148533f, - 0.9879733630356394f, - 0.9879935948277689f, - 0.9880138096908951f, - 0.9880340076246716f, - 0.9880541886287523f, - 0.9880743527027913f, - 0.9880944998464434f, - 0.9881146300593631f, - 0.9881347433412055f, - 0.9881548396916261f, - 0.9881749191102805f, - 0.9881949815968246f, - 0.9882150271509147f, - 0.9882350557722072f, - 0.9882550674603591f, - 0.9882750622150273f, - 0.9882950400358693f, - 0.9883150009225429f, - 0.9883349448747059f, - 0.9883548718920167f, - 0.9883747819741338f, - 0.9883946751207159f, - 0.9884145513314222f, - 0.9884344106059124f, - 0.9884542529438459f, - 0.9884740783448829f, - 0.9884938868086836f, - 0.9885136783349084f, - 0.9885334529232186f, - 0.988553210573275f, - 0.9885729512847394f, - 0.9885926750572733f, - 0.9886123818905387f, - 0.9886320717841981f, - 0.9886517447379141f, - 0.9886714007513494f, - 0.9886910398241674f, - 0.9887106619560315f, - 0.9887302671466056f, - 0.9887498553955536f, - 0.98876942670254f, - 0.9887889810672295f, - 0.9888085184892867f, - 0.9888280389683773f, - 0.9888475425041665f, - 0.9888670290963202f, - 0.9888864987445045f, - 0.9889059514483859f, - 0.9889253872076309f, - 0.9889448060219066f, - 0.9889642078908802f, - 0.9889835928142193f, - 0.9890029607915917f, - 0.9890223118226655f, - 0.9890416459071093f, - 0.9890609630445917f, - 0.9890802632347816f, - 0.9890995464773484f, - 0.9891188127719618f, - 0.9891380621182915f, - 0.9891572945160078f, - 0.989176509964781f, - 0.989195708464282f, - 0.9892148900141817f, - 0.9892340546141515f, - 0.9892532022638632f, - 0.9892723329629883f, - 0.9892914467111994f, - 0.9893105435081687f, - 0.9893296233535692f, - 0.989348686247074f, - 0.9893677321883562f, - 0.9893867611770896f, - 0.9894057732129481f, - 0.989424768295606f, - 0.9894437464247379f, - 0.9894627076000184f, - 0.9894816518211228f, - 0.9895005790877264f, - 0.9895194893995048f, - 0.9895383827561343f, - 0.9895572591572908f, - 0.9895761186026509f, - 0.9895949610918917f, - 0.9896137866246902f, - 0.9896325952007238f, - 0.9896513868196702f, - 0.9896701614812075f, - 0.9896889191850139f, - 0.9897076599307681f, - 0.9897263837181489f, - 0.9897450905468355f, - 0.9897637804165074f, - 0.9897824533268442f, - 0.9898011092775262f, - 0.9898197482682336f, - 0.989838370298647f, - 0.9898569753684473f, - 0.9898755634773158f, - 0.9898941346249338f, - 0.9899126888109834f, - 0.9899312260351465f, - 0.9899497462971054f, - 0.9899682495965428f, - 0.9899867359331419f, - 0.9900052053065856f, - 0.9900236577165575f, - 0.9900420931627416f, - 0.9900605116448219f, - 0.9900789131624829f, - 0.990097297715409f, - 0.9901156653032854f, - 0.9901340159257975f, - 0.9901523495826307f, - 0.9901706662734708f, - 0.9901889659980042f, - 0.9902072487559171f, - 0.9902255145468963f, - 0.9902437633706288f, - 0.990261995226802f, - 0.9902802101151034f, - 0.990298408035221f, - 0.9903165889868428f, - 0.9903347529696575f, - 0.9903528999833537f, - 0.9903710300276205f, - 0.9903891431021473f, - 0.9904072392066237f, - 0.9904253183407397f, - 0.9904433805041853f, - 0.9904614256966512f, - 0.9904794539178282f, - 0.9904974651674073f, - 0.9905154594450799f, - 0.9905334367505377f, - 0.9905513970834728f, - 0.9905693404435773f, - 0.9905872668305437f, - 0.9906051762440649f, - 0.990623068683834f, - 0.9906409441495444f, - 0.99065880264089f, - 0.9906766441575645f, - 0.9906944686992625f, - 0.9907122762656784f, - 0.990730066856507f, - 0.9907478404714436f, - 0.9907655971101836f, - 0.9907833367724228f, - 0.9908010594578572f, - 0.9908187651661832f, - 0.9908364538970972f, - 0.9908541256502963f, - 0.9908717804254776f, - 0.9908894182223387f, - 0.9909070390405773f, - 0.9909246428798915f, - 0.9909422297399796f, - 0.9909597996205404f, - 0.9909773525212727f, - 0.9909948884418758f, - 0.9910124073820492f, - 0.9910299093414927f, - 0.9910473943199065f, - 0.991064862316991f, - 0.9910823133324467f, - 0.9910997473659748f, - 0.9911171644172765f, - 0.9911345644860533f, - 0.9911519475720071f, - 0.9911693136748401f, - 0.9911866627942546f, - 0.9912039949299534f, - 0.9912213100816396f, - 0.9912386082490164f, - 0.9912558894317876f, - 0.9912731536296567f, - 0.9912904008423282f, - 0.9913076310695066f, - 0.9913248443108964f, - 0.9913420405662029f, - 0.9913592198351313f, - 0.9913763821173873f, - 0.991393527412677f, - 0.9914106557207062f, - 0.9914277670411817f, - 0.9914448613738104f, - 0.9914619387182991f, - 0.9914789990743554f, - 0.991496042441687f, - 0.9915130688200017f, - 0.9915300782090078f, - 0.9915470706084138f, - 0.9915640460179288f, - 0.9915810044372617f, - 0.9915979458661219f, - 0.9916148703042194f, - 0.9916317777512638f, - 0.9916486682069655f, - 0.9916655416710354f, - 0.991682398143184f, - 0.9916992376231227f, - 0.9917160601105629f, - 0.9917328656052162f, - 0.9917496541067949f, - 0.9917664256150112f, - 0.9917831801295777f, - 0.9917999176502074f, - 0.9918166381766134f, - 0.9918333417085092f, - 0.9918500282456088f, - 0.991866697787626f, - 0.9918833503342753f, - 0.9918999858852715f, - 0.9919166044403294f, - 0.9919332059991641f, - 0.9919497905614914f, - 0.9919663581270269f, - 0.991982908695487f, - 0.9919994422665879f, - 0.9920159588400463f, - 0.9920324584155794f, - 0.9920489409929042f, - 0.9920654065717385f, - 0.9920818551518f, - 0.992098286732807f, - 0.9921147013144779f, - 0.9921310988965313f, - 0.9921474794786864f, - 0.9921638430606625f, - 0.9921801896421792f, - 0.9921965192229564f, - 0.9922128318027144f, - 0.9922291273811734f, - 0.9922454059580544f, - 0.9922616675330785f, - 0.992277912105967f, - 0.9922941396764415f, - 0.9923103502442241f, - 0.9923265438090368f, - 0.9923427203706023f, - 0.9923588799286435f, - 0.9923750224828832f, - 0.9923911480330451f, - 0.9924072565788528f, - 0.9924233481200302f, - 0.9924394226563017f, - 0.9924554801873917f, - 0.9924715207130252f, - 0.9924875442329275f, - 0.9925035507468237f, - 0.9925195402544398f, - 0.9925355127555017f, - 0.9925514682497356f, - 0.9925674067368684f, - 0.9925833282166266f, - 0.9925992326887378f, - 0.9926151201529294f, - 0.992630990608929f, - 0.9926468440564647f, - 0.992662680495265f, - 0.9926784999250583f, - 0.9926943023455738f, - 0.9927100877565406f, - 0.9927258561576882f, - 0.9927416075487465f, - 0.9927573419294455f, - 0.9927730592995156f, - 0.9927887596586877f, - 0.9928044430066926f, - 0.9928201093432615f, - 0.992835758668126f, - 0.9928513909810182f, - 0.9928670062816699f, - 0.9928826045698137f, - 0.9928981858451823f, - 0.9929137501075087f, - 0.9929292973565262f, - 0.9929448275919686f, - 0.9929603408135695f, - 0.9929758370210633f, - 0.9929913162141845f, - 0.9930067783926675f, - 0.9930222235562478f, - 0.9930376517046605f, - 0.9930530628376414f, - 0.9930684569549263f, - 0.9930838340562514f, - 0.9930991941413535f, - 0.993114537209969f, - 0.9931298632618353f, - 0.9931451722966897f, - 0.9931604643142699f, - 0.9931757393143138f, - 0.9931909972965598f, - 0.9932062382607463f, - 0.9932214622066123f, - 0.9932366691338969f, - 0.9932518590423394f, - 0.9932670319316798f, - 0.9932821878016578f, - 0.9932973266520139f, - 0.9933124484824886f, - 0.993327553292823f, - 0.9933426410827579f, - 0.9933577118520353f, - 0.9933727656003964f, - 0.9933878023275837f, - 0.9934028220333393f, - 0.993417824717406f, - 0.9934328103795266f, - 0.9934477790194444f, - 0.9934627306369029f, - 0.9934776652316459f, - 0.9934925828034175f, - 0.9935074833519622f, - 0.9935223668770244f, - 0.9935372333783493f, - 0.9935520828556822f, - 0.9935669153087685f, - 0.9935817307373542f, - 0.9935965291411853f, - 0.9936113105200084f, - 0.9936260748735701f, - 0.9936408222016174f, - 0.9936555525038977f, - 0.9936702657801585f, - 0.9936849620301478f, - 0.9936996412536137f, - 0.9937143034503048f, - 0.9937289486199696f, - 0.9937435767623575f, - 0.9937581878772176f, - 0.9937727819642996f, - 0.9937873590233535f, - 0.9938019190541295f, - 0.9938164620563781f, - 0.99383098802985f, - 0.9938454969742966f, - 0.993859988889469f, - 0.993874463775119f, - 0.9938889216309986f, - 0.9939033624568601f, - 0.9939177862524559f, - 0.9939321930175389f, - 0.9939465827518624f, - 0.9939609554551797f, - 0.9939753111272446f, - 0.993989649767811f, - 0.9940039713766333f, - 0.9940182759534661f, - 0.9940325634980643f, - 0.9940468340101831f, - 0.9940610874895779f, - 0.9940753239360045f, - 0.9940895433492191f, - 0.9941037457289779f, - 0.9941179310750375f, - 0.9941320993871551f, - 0.9941462506650875f, - 0.9941603849085927f, - 0.9941745021174282f, - 0.9941886022913522f, - 0.994202685430123f, - 0.9942167515334995f, - 0.9942308006012406f, - 0.9942448326331054f, - 0.9942588476288536f, - 0.9942728455882452f, - 0.9942868265110402f, - 0.9943007903969989f, - 0.9943147372458823f, - 0.9943286670574512f, - 0.994342579831467f, - 0.9943564755676915f, - 0.9943703542658863f, - 0.9943842159258137f, - 0.9943980605472362f, - 0.9944118881299167f, - 0.9944256986736181f, - 0.9944394921781038f, - 0.9944532686431374f, - 0.994467028068483f, - 0.9944807704539047f, - 0.994494495799167f, - 0.9945082041040348f, - 0.9945218953682733f, - 0.9945355695916478f, - 0.994549226773924f, - 0.9945628669148678f, - 0.9945764900142456f, - 0.9945900960718239f, - 0.9946036850873697f, - 0.9946172570606501f, - 0.9946308119914323f, - 0.9946443498794845f, - 0.9946578707245742f, - 0.9946713745264703f, - 0.9946848612849409f, - 0.9946983309997552f, - 0.9947117836706824f, - 0.9947252192974918f, - 0.9947386378799533f, - 0.9947520394178371f, - 0.9947654239109133f, - 0.9947787913589528f, - 0.9947921417617265f, - 0.9948054751190055f, - 0.9948187914305615f, - 0.9948320906961663f, - 0.9948453729155919f, - 0.9948586380886109f, - 0.9948718862149959f, - 0.9948851172945199f, - 0.9948983313269562f, - 0.9949115283120783f, - 0.9949247082496602f, - 0.994937871139476f, - 0.9949510169813002f, - 0.9949641457749074f, - 0.9949772575200729f, - 0.9949903522165718f, - 0.99500342986418f, - 0.9950164904626732f, - 0.9950295340118275f, - 0.9950425605114196f, - 0.9950555699612262f, - 0.9950685623610246f, - 0.9950815377105919f, - 0.9950944960097059f, - 0.9951074372581447f, - 0.9951203614556862f, - 0.9951332686021092f, - 0.9951461586971925f, - 0.9951590317407152f, - 0.9951718877324568f, - 0.9951847266721968f, - 0.9951975485597155f, - 0.9952103533947931f, - 0.9952231411772101f, - 0.9952359119067475f, - 0.9952486655831865f, - 0.9952614022063083f, - 0.995274121775895f, - 0.9952868242917284f, - 0.995299509753591f, - 0.9953121781612654f, - 0.9953248295145346f, - 0.9953374638131817f, - 0.9953500810569902f, - 0.9953626812457439f, - 0.9953752643792271f, - 0.995387830457224f, - 0.9954003794795193f, - 0.9954129114458982f, - 0.9954254263561456f, - 0.9954379242100473f, - 0.995450405007389f, - 0.9954628687479571f, - 0.9954753154315378f, - 0.9954877450579179f, - 0.9955001576268845f, - 0.9955125531382248f, - 0.9955249315917265f, - 0.9955372929871774f, - 0.9955496373243657f, - 0.99556196460308f, - 0.995574274823109f, - 0.9955865679842417f, - 0.9955988440862675f, - 0.9956111031289763f, - 0.9956233451121576f, - 0.9956355700356019f, - 0.9956477778990998f, - 0.9956599687024419f, - 0.9956721424454194f, - 0.9956842991278237f, - 0.9956964387494467f, - 0.9957085613100801f, - 0.9957206668095163f, - 0.995732755247548f, - 0.9957448266239678f, - 0.9957568809385691f, - 0.9957689181911452f, - 0.99578093838149f, - 0.9957929415093973f, - 0.9958049275746618f, - 0.9958168965770776f, - 0.9958288485164402f, - 0.9958407833925443f, - 0.9958527012051857f, - 0.99586460195416f, - 0.9958764856392636f, - 0.9958883522602925f, - 0.9959002018170436f, - 0.9959120343093137f, - 0.9959238497369003f, - 0.9959356480996007f, - 0.9959474293972128f, - 0.9959591936295349f, - 0.9959709407963652f, - 0.9959826708975025f, - 0.9959943839327459f, - 0.9960060799018945f, - 0.996017758804748f, - 0.9960294206411063f, - 0.9960410654107695f, - 0.9960526931135383f, - 0.9960643037492132f, - 0.9960758973175954f, - 0.9960874738184862f, - 0.9960990332516871f, - 0.9961105756170003f, - 0.9961221009142279f, - 0.9961336091431725f, - 0.9961451003036367f, - 0.9961565743954237f, - 0.996168031418337f, - 0.9961794713721802f, - 0.9961908942567572f, - 0.9962023000718725f, - 0.9962136888173304f, - 0.996225060492936f, - 0.9962364150984943f, - 0.9962477526338107f, - 0.996259073098691f, - 0.9962703764929413f, - 0.9962816628163678f, - 0.9962929320687772f, - 0.9963041842499764f, - 0.9963154193597725f, - 0.996326637397973f, - 0.9963378383643858f, - 0.996349022258819f, - 0.9963601890810808f, - 0.99637133883098f, - 0.9963824715083254f, - 0.9963935871129264f, - 0.9964046856445924f, - 0.9964157671031334f, - 0.9964268314883593f, - 0.9964378788000807f, - 0.9964489090381083f, - 0.996459922202253f, - 0.9964709182923261f, - 0.9964818973081393f, - 0.9964928592495044f, - 0.9965038041162334f, - 0.9965147319081391f, - 0.9965256426250341f, - 0.9965365362667313f, - 0.9965474128330444f, - 0.9965582723237866f, - 0.9965691147387721f, - 0.9965799400778151f, - 0.99659074834073f, - 0.9966015395273318f, - 0.9966123136374353f, - 0.9966230706708561f, - 0.9966338106274099f, - 0.9966445335069125f, - 0.9966552393091803f, - 0.9966659280340299f, - 0.996676599681278f, - 0.9966872542507419f, - 0.9966978917422389f, - 0.9967085121555869f, - 0.9967191154906037f, - 0.9967297017471077f, - 0.9967402709249177f, - 0.9967508230238523f, - 0.9967613580437309f, - 0.9967718759843729f, - 0.9967823768455981f, - 0.9967928606272266f, - 0.9968033273290787f, - 0.9968137769509751f, - 0.9968242094927366f, - 0.9968346249541847f, - 0.9968450233351408f, - 0.9968554046354268f, - 0.9968657688548647f, - 0.9968761159932769f, - 0.9968864460504862f, - 0.9968967590263156f, - 0.9969070549205883f, - 0.996917333733128f, - 0.9969275954637584f, - 0.9969378401123039f, - 0.9969480676785889f, - 0.996958278162438f, - 0.9969684715636763f, - 0.9969786478821293f, - 0.9969888071176224f, - 0.9969989492699817f, - 0.9970090743390333f, - 0.9970191823246038f, - 0.99702927322652f, - 0.997039347044609f, - 0.9970494037786981f, - 0.997059443428615f, - 0.9970694659941878f, - 0.9970794714752446f, - 0.9970894598716139f, - 0.9970994311831248f, - 0.9971093854096064f, - 0.997119322550888f, - 0.9971292426067994f, - 0.9971391455771705f, - 0.9971490314618319f, - 0.9971589002606139f, - 0.9971687519733476f, - 0.9971785865998641f, - 0.997188404139995f, - 0.997198204593572f, - 0.9972079879604271f, - 0.9972177542403927f, - 0.9972275034333016f, - 0.9972372355389866f, - 0.9972469505572809f, - 0.9972566484880182f, - 0.9972663293310322f, - 0.9972759930861571f, - 0.9972856397532273f, - 0.9972952693320775f, - 0.9973048818225426f, - 0.9973144772244581f, - 0.9973240555376595f, - 0.9973336167619825f, - 0.9973431608972635f, - 0.9973526879433389f, - 0.9973621979000453f, - 0.99737169076722f, - 0.9973811665447002f, - 0.9973906252323236f, - 0.9974000668299281f, - 0.9974094913373519f, - 0.9974188987544336f, - 0.9974282890810118f, - 0.9974376623169258f, - 0.9974470184620149f, - 0.9974563575161188f, - 0.9974656794790775f, - 0.9974749843507313f, - 0.9974842721309207f, - 0.9974935428194865f, - 0.99750279641627f, - 0.9975120329211127f, - 0.997521252333856f, - 0.9975304546543423f, - 0.9975396398824137f, - 0.9975488080179128f, - 0.9975579590606826f, - 0.9975670930105662f, - 0.9975762098674072f, - 0.9975853096310494f, - 0.9975943923013368f, - 0.9976034578781139f, - 0.9976125063612252f, - 0.9976215377505157f, - 0.9976305520458307f, - 0.9976395492470157f, - 0.9976485293539166f, - 0.9976574923663794f, - 0.9976664382842505f, - 0.9976753671073768f, - 0.9976842788356053f, - 0.9976931734687832f, - 0.997702051006758f, - 0.9977109114493777f, - 0.9977197547964906f, - 0.997728581047945f, - 0.9977373902035896f, - 0.9977461822632737f, - 0.9977549572268465f, - 0.9977637150941577f, - 0.9977724558650571f, - 0.9977811795393952f, - 0.9977898861170221f, - 0.9977985755977891f, - 0.9978072479815469f, - 0.9978159032681472f, - 0.9978245414574415f, - 0.9978331625492818f, - 0.9978417665435205f, - 0.9978503534400102f, - 0.9978589232386035f, - 0.9978674759391538f, - 0.9978760115415145f, - 0.9978845300455393f, - 0.9978930314510823f, - 0.9979015157579979f, - 0.9979099829661405f, - 0.9979184330753651f, - 0.997926866085527f, - 0.9979352819964817f, - 0.9979436808080849f, - 0.9979520625201928f, - 0.9979604271326616f, - 0.9979687746453482f, - 0.9979771050581093f, - 0.9979854183708025f, - 0.9979937145832851f, - 0.998001993695415f, - 0.9980102557070504f, - 0.9980185006180496f, - 0.9980267284282716f, - 0.9980349391375751f, - 0.9980431327458196f, - 0.9980513092528646f, - 0.9980594686585701f, - 0.9980676109627962f, - 0.9980757361654035f, - 0.9980838442662526f, - 0.9980919352652047f, - 0.9981000091621212f, - 0.9981080659568636f, - 0.998116105649294f, - 0.9981241282392745f, - 0.9981321337266679f, - 0.9981401221113367f, - 0.9981480933931443f, - 0.9981560475719538f, - 0.9981639846476291f, - 0.9981719046200344f, - 0.9981798074890336f, - 0.9981876932544914f, - 0.9981955619162729f, - 0.9982034134742431f, - 0.9982112479282674f, - 0.9982190652782118f, - 0.9982268655239421f, - 0.9982346486653247f, - 0.9982424147022264f, - 0.9982501636345139f, - 0.9982578954620546f, - 0.9982656101847159f, - 0.9982733078023657f, - 0.998280988314872f, - 0.9982886517221033f, - 0.9982962980239283f, - 0.9983039272202159f, - 0.9983115393108354f, - 0.9983191342956564f, - 0.9983267121745487f, - 0.9983342729473825f, - 0.9983418166140283f, - 0.9983493431743568f, - 0.998356852628239f, - 0.9983643449755462f, - 0.9983718202161501f, - 0.9983792783499226f, - 0.9983867193767358f, - 0.9983941432964624f, - 0.998401550108975f, - 0.9984089398141468f, - 0.9984163124118512f, - 0.9984236679019618f, - 0.9984310062843526f, - 0.9984383275588977f, - 0.998445631725472f, - 0.99845291878395f, - 0.998460188734207f, - 0.9984674415761184f, - 0.99847467730956f, - 0.9984818959344077f, - 0.9984890974505379f, - 0.9984962818578272f, - 0.9985034491561524f, - 0.9985105993453908f, - 0.9985177324254199f, - 0.9985248483961172f, - 0.9985319472573612f, - 0.9985390290090299f, - 0.9985460936510022f, - 0.998553141183157f, - 0.9985601716053734f, - 0.998567184917531f, - 0.9985741811195097f, - 0.9985811602111896f, - 0.9985881221924512f, - 0.9985950670631749f, - 0.9986019948232421f, - 0.9986089054725338f, - 0.9986157990109317f, - 0.9986226754383176f, - 0.9986295347545738f, - 0.9986363769595828f, - 0.9986432020532272f, - 0.9986500100353901f, - 0.998656800905955f, - 0.9986635746648053f, - 0.998670331311825f, - 0.9986770708468985f, - 0.9986837932699102f, - 0.9986904985807448f, - 0.9986971867792875f, - 0.9987038578654238f, - 0.9987105118390394f, - 0.99871714870002f, - 0.9987237684482522f, - 0.9987303710836224f, - 0.9987369566060175f, - 0.9987435250153247f, - 0.9987500763114314f, - 0.9987566104942254f, - 0.9987631275635946f, - 0.9987696275194275f, - 0.9987761103616126f, - 0.9987825760900391f, - 0.9987890247045957f, - 0.9987954562051724f, - 0.9988018705916587f, - 0.9988082678639448f, - 0.9988146480219211f, - 0.9988210110654783f, - 0.9988273569945072f, - 0.9988336858088992f, - 0.9988399975085459f, - 0.9988462920933391f, - 0.9988525695631708f, - 0.9988588299179337f, - 0.9988650731575204f, - 0.9988712992818238f, - 0.9988775082907375f, - 0.998883700184155f, - 0.99888987496197f, - 0.9988960326240769f, - 0.9989021731703701f, - 0.9989082966007445f, - 0.998914402915095f, - 0.9989204921133172f, - 0.9989265641953067f, - 0.9989326191609592f, - 0.9989386570101713f, - 0.9989446777428392f, - 0.9989506813588601f, - 0.9989566678581309f, - 0.9989626372405491f, - 0.9989685895060123f, - 0.9989745246544187f, - 0.9989804426856664f, - 0.9989863435996542f, - 0.9989922273962809f, - 0.9989980940754456f, - 0.9990039436370479f, - 0.9990097760809875f, - 0.9990155914071644f, - 0.9990213896154791f, - 0.9990271707058322f, - 0.9990329346781247f, - 0.9990386815322577f, - 0.9990444112681328f, - 0.9990501238856518f, - 0.9990558193847169f, - 0.9990614977652303f, - 0.999067159027095f, - 0.9990728031702137f, - 0.9990784301944899f, - 0.9990840400998271f, - 0.9990896328861292f, - 0.9990952085533004f, - 0.999100767101245f, - 0.9991063085298679f, - 0.9991118328390742f, - 0.9991173400287691f, - 0.9991228300988584f, - 0.9991283030492478f, - 0.9991337588798437f, - 0.9991391975905526f, - 0.9991446191812813f, - 0.9991500236519368f, - 0.9991554110024266f, - 0.9991607812326584f, - 0.9991661343425401f, - 0.9991714703319801f, - 0.9991767892008868f, - 0.9991820909491692f, - 0.9991873755767364f, - 0.999192643083498f, - 0.9991978934693634f, - 0.9992031267342429f, - 0.9992083428780468f, - 0.9992135419006857f, - 0.9992187238020704f, - 0.9992238885821124f, - 0.9992290362407229f, - 0.9992341667778138f, - 0.9992392801932973f, - 0.9992443764870856f, - 0.9992494556590916f, - 0.999254517709228f, - 0.9992595626374083f, - 0.9992645904435459f, - 0.9992696011275547f, - 0.9992745946893489f, - 0.9992795711288428f, - 0.9992845304459512f, - 0.9992894726405892f, - 0.9992943977126721f, - 0.9992993056621154f, - 0.9993041964888351f, - 0.9993090701927474f, - 0.9993139267737686f, - 0.9993187662318158f, - 0.9993235885668059f, - 0.9993283937786562f, - 0.9993331818672846f, - 0.9993379528326087f, - 0.9993427066745472f, - 0.9993474433930183f, - 0.9993521629879408f, - 0.9993568654592342f, - 0.9993615508068175f, - 0.9993662190306108f, - 0.9993708701305338f, - 0.999375504106507f, - 0.999380120958451f, - 0.9993847206862865f, - 0.9993893032899348f, - 0.9993938687693175f, - 0.9993984171243561f, - 0.9994029483549729f, - 0.9994074624610901f, - 0.9994119594426306f, - 0.9994164392995171f, - 0.9994209020316729f, - 0.9994253476390215f, - 0.9994297761214869f, - 0.9994341874789929f, - 0.9994385817114643f, - 0.9994429588188255f, - 0.9994473188010017f, - 0.999451661657918f, - 0.9994559873895001f, - 0.999460295995674f, - 0.9994645874763657f, - 0.9994688618315016f, - 0.9994731190610087f, - 0.9994773591648138f, - 0.9994815821428444f, - 0.9994857879950282f, - 0.999489976721293f, - 0.999494148321567f, - 0.9994983027957789f, - 0.9995024401438574f, - 0.9995065603657316f, - 0.9995106634613309f, - 0.9995147494305849f, - 0.9995188182734238f, - 0.9995228699897778f, - 0.9995269045795775f, - 0.9995309220427536f, - 0.9995349223792375f, - 0.9995389055889605f, - 0.9995428716718544f, - 0.9995468206278512f, - 0.9995507524568833f, - 0.9995546671588833f, - 0.999558564733784f, - 0.9995624451815189f, - 0.9995663085020212f, - 0.999570154695225f, - 0.9995739837610642f, - 0.9995777956994731f, - 0.9995815905103866f, - 0.9995853681937397f, - 0.9995891287494675f, - 0.9995928721775056f, - 0.9995965984777899f, - 0.9996003076502565f, - 0.9996039996948419f, - 0.9996076746114829f, - 0.9996113324001163f, - 0.9996149730606797f, - 0.9996185965931106f, - 0.9996222029973468f, - 0.9996257922733267f, - 0.9996293644209887f, - 0.9996329194402717f, - 0.9996364573311145f, - 0.9996399780934567f, - 0.999643481727238f, - 0.9996469682323983f, - 0.9996504376088778f, - 0.9996538898566172f, - 0.9996573249755573f, - 0.9996607429656391f, - 0.9996641438268042f, - 0.9996675275589942f, - 0.9996708941621513f, - 0.9996742436362176f, - 0.9996775759811358f, - 0.9996808911968489f, - 0.9996841892832999f, - 0.9996874702404326f, - 0.9996907340681903f, - 0.9996939807665175f, - 0.9996972103353584f, - 0.9997004227746578f, - 0.9997036180843604f, - 0.9997067962644115f, - 0.9997099573147569f, - 0.9997131012353422f, - 0.9997162280261135f, - 0.9997193376870174f, - 0.9997224302180006f, - 0.99972550561901f, - 0.9997285638899929f, - 0.999731605030897f, - 0.9997346290416701f, - 0.9997376359222604f, - 0.9997406256726165f, - 0.9997435982926869f, - 0.9997465537824209f, - 0.9997494921417679f, - 0.9997524133706773f, - 0.9997553174690993f, - 0.999758204436984f, - 0.999761074274282f, - 0.9997639269809441f, - 0.9997667625569213f, - 0.9997695810021652f, - 0.9997723823166274f, - 0.99977516650026f, - 0.9997779335530151f, - 0.9997806834748455f, - 0.999783416265704f, - 0.9997861319255437f, - 0.9997888304543181f, - 0.9997915118519811f, - 0.9997941761184866f, - 0.999796823253789f, - 0.9997994532578429f, - 0.9998020661306034f, - 0.9998046618720255f, - 0.9998072404820648f, - 0.9998098019606773f, - 0.9998123463078188f, - 0.9998148735234459f, - 0.9998173836075153f, - 0.9998198765599838f, - 0.999822352380809f, - 0.9998248110699482f, - 0.9998272526273595f, - 0.9998296770530009f, - 0.9998320843468308f, - 0.999834474508808f, - 0.9998368475388918f, - 0.9998392034370412f, - 0.999841542203216f, - 0.9998438638373761f, - 0.9998461683394817f, - 0.9998484557094933f, - 0.9998507259473718f, - 0.9998529790530782f, - 0.9998552150265739f, - 0.9998574338678207f, - 0.9998596355767804f, - 0.9998618201534154f, - 0.9998639875976882f, - 0.9998661379095618f, - 0.9998682710889991f, - 0.9998703871359639f, - 0.9998724860504196f, - 0.9998745678323304f, - 0.9998766324816606f, - 0.9998786799983749f, - 0.999880710382438f, - 0.9998827236338154f, - 0.9998847197524724f, - 0.9998866987383749f, - 0.9998886605914888f, - 0.9998906053117809f, - 0.9998925328992174f, - 0.9998944433537655f, - 0.9998963366753925f, - 0.9998982128640659f, - 0.9999000719197535f, - 0.9999019138424236f, - 0.9999037386320444f, - 0.999905546288585f, - 0.9999073368120139f, - 0.999909110202301f, - 0.9999108664594155f, - 0.9999126055833274f, - 0.999914327574007f, - 0.9999160324314248f, - 0.9999177201555515f, - 0.999919390746358f, - 0.9999210442038161f, - 0.9999226805278972f, - 0.9999242997185733f, - 0.9999259017758166f, - 0.9999274866995999f, - 0.9999290544898957f, - 0.9999306051466773f, - 0.9999321386699181f, - 0.999933655059592f, - 0.9999351543156727f, - 0.9999366364381348f, - 0.9999381014269527f, - 0.9999395492821014f, - 0.999940980003556f, - 0.9999423935912921f, - 0.9999437900452854f, - 0.9999451693655121f, - 0.9999465315519485f, - 0.9999478766045711f, - 0.999949204523357f, - 0.9999505153082835f, - 0.999951808959328f, - 0.9999530854764684f, - 0.9999543448596829f, - 0.9999555871089498f, - 0.9999568122242479f, - 0.9999580202055561f, - 0.9999592110528538f, - 0.9999603847661206f, - 0.9999615413453363f, - 0.9999626807904812f, - 0.9999638031015358f, - 0.9999649082784806f, - 0.999965996321297f, - 0.9999670672299661f, - 0.9999681210044697f, - 0.9999691576447897f, - 0.9999701771509083f, - 0.9999711795228081f, - 0.9999721647604719f, - 0.9999731328638829f, - 0.9999740838330242f, - 0.9999750176678799f, - 0.9999759343684338f, - 0.9999768339346702f, - 0.9999777163665737f, - 0.9999785816641292f, - 0.9999794298273218f, - 0.9999802608561371f, - 0.9999810747505607f, - 0.9999818715105789f, - 0.9999826511361778f, - 0.9999834136273441f, - 0.9999841589840648f, - 0.999984887206327f, - 0.9999855982941185f, - 0.9999862922474267f, - 0.9999869690662402f, - 0.9999876287505469f, - 0.999988271300336f, - 0.999988896715596f, - 0.9999895049963164f, - 0.9999900961424869f, - 0.9999906701540973f, - 0.9999912270311376f, - 0.9999917667735985f, - 0.9999922893814706f, - 0.999992794854745f, - 0.999993283193413f, - 0.9999937543974662f, - 0.9999942084668966f, - 0.9999946454016965f, - 0.9999950652018582f, - 0.9999954678673746f, - 0.9999958533982388f, - 0.9999962217944444f, - 0.9999965730559848f, - 0.999996907182854f, - 0.9999972241750464f, - 0.9999975240325565f, - 0.9999978067553793f, - 0.9999980723435097f, - 0.9999983207969434f, - 0.999998552115676f, - 0.9999987662997035f, - 0.9999989633490224f, - 0.9999991432636292f, - 0.9999993060435208f, - 0.9999994516886945f, - 0.9999995801991477f, - 0.9999996915748783f, - 0.9999997858158843f, - 0.9999998629221643f, - 0.9999999228937166f, - 0.9999999657305405f, - 0.9999999914326351f, - 1.0f, - 0.9999999914326351f, - 0.9999999657305405f, - 0.9999999228937166f, - 0.9999998629221643f, - 0.9999997858158843f, - 0.9999996915748783f, - 0.9999995801991477f, - 0.9999994516886945f, - 0.9999993060435208f, - 0.9999991432636292f, - 0.9999989633490224f, - 0.9999987662997035f, - 0.999998552115676f, - 0.9999983207969434f, - 0.9999980723435097f, - 0.9999978067553793f, - 0.9999975240325565f, - 0.9999972241750464f, - 0.999996907182854f, - 0.9999965730559848f, - 0.9999962217944444f, - 0.9999958533982388f, - 0.9999954678673746f, - 0.9999950652018582f, - 0.9999946454016965f, - 0.9999942084668966f, - 0.9999937543974662f, - 0.999993283193413f, - 0.999992794854745f, - 0.9999922893814706f, - 0.9999917667735985f, - 0.9999912270311376f, - 0.9999906701540973f, - 0.9999900961424869f, - 0.9999895049963164f, - 0.999988896715596f, - 0.999988271300336f, - 0.9999876287505469f, - 0.9999869690662402f, - 0.9999862922474267f, - 0.9999855982941185f, - 0.999984887206327f, - 0.9999841589840648f, - 0.9999834136273441f, - 0.9999826511361778f, - 0.9999818715105789f, - 0.9999810747505607f, - 0.9999802608561371f, - 0.9999794298273218f, - 0.9999785816641292f, - 0.9999777163665737f, - 0.9999768339346702f, - 0.9999759343684338f, - 0.9999750176678799f, - 0.9999740838330242f, - 0.9999731328638829f, - 0.9999721647604719f, - 0.9999711795228081f, - 0.9999701771509083f, - 0.9999691576447897f, - 0.9999681210044697f, - 0.9999670672299661f, - 0.999965996321297f, - 0.9999649082784806f, - 0.9999638031015358f, - 0.9999626807904812f, - 0.9999615413453363f, - 0.9999603847661206f, - 0.9999592110528538f, - 0.9999580202055561f, - 0.9999568122242479f, - 0.9999555871089498f, - 0.9999543448596829f, - 0.9999530854764684f, - 0.999951808959328f, - 0.9999505153082835f, - 0.999949204523357f, - 0.9999478766045711f, - 0.9999465315519485f, - 0.9999451693655121f, - 0.9999437900452854f, - 0.9999423935912921f, - 0.999940980003556f, - 0.9999395492821014f, - 0.9999381014269527f, - 0.9999366364381348f, - 0.9999351543156727f, - 0.999933655059592f, - 0.9999321386699181f, - 0.9999306051466773f, - 0.9999290544898957f, - 0.9999274866995999f, - 0.9999259017758166f, - 0.9999242997185733f, - 0.9999226805278972f, - 0.9999210442038161f, - 0.999919390746358f, - 0.9999177201555515f, - 0.9999160324314248f, - 0.999914327574007f, - 0.9999126055833274f, - 0.9999108664594155f, - 0.999909110202301f, - 0.9999073368120139f, - 0.999905546288585f, - 0.9999037386320445f, - 0.9999019138424236f, - 0.9999000719197535f, - 0.9998982128640659f, - 0.9998963366753925f, - 0.9998944433537655f, - 0.9998925328992174f, - 0.9998906053117809f, - 0.9998886605914888f, - 0.9998866987383749f, - 0.9998847197524724f, - 0.9998827236338154f, - 0.9998807103824381f, - 0.9998786799983749f, - 0.9998766324816606f, - 0.9998745678323304f, - 0.9998724860504196f, - 0.9998703871359639f, - 0.9998682710889991f, - 0.9998661379095618f, - 0.9998639875976882f, - 0.9998618201534154f, - 0.9998596355767804f, - 0.9998574338678207f, - 0.9998552150265739f, - 0.9998529790530782f, - 0.9998507259473718f, - 0.9998484557094933f, - 0.9998461683394817f, - 0.9998438638373761f, - 0.999841542203216f, - 0.9998392034370412f, - 0.9998368475388918f, - 0.9998344745088081f, - 0.9998320843468308f, - 0.9998296770530009f, - 0.9998272526273595f, - 0.9998248110699482f, - 0.999822352380809f, - 0.9998198765599838f, - 0.9998173836075153f, - 0.9998148735234459f, - 0.9998123463078188f, - 0.9998098019606773f, - 0.9998072404820648f, - 0.9998046618720255f, - 0.9998020661306034f, - 0.9997994532578429f, - 0.999796823253789f, - 0.9997941761184866f, - 0.9997915118519811f, - 0.9997888304543181f, - 0.9997861319255437f, - 0.999783416265704f, - 0.9997806834748455f, - 0.9997779335530151f, - 0.99977516650026f, - 0.9997723823166275f, - 0.9997695810021652f, - 0.9997667625569213f, - 0.9997639269809441f, - 0.999761074274282f, - 0.999758204436984f, - 0.9997553174690993f, - 0.9997524133706773f, - 0.9997494921417679f, - 0.9997465537824209f, - 0.9997435982926869f, - 0.9997406256726165f, - 0.9997376359222604f, - 0.9997346290416701f, - 0.999731605030897f, - 0.9997285638899929f, - 0.99972550561901f, - 0.9997224302180006f, - 0.9997193376870174f, - 0.9997162280261135f, - 0.9997131012353422f, - 0.9997099573147569f, - 0.9997067962644115f, - 0.9997036180843604f, - 0.9997004227746578f, - 0.9996972103353584f, - 0.9996939807665175f, - 0.9996907340681903f, - 0.9996874702404326f, - 0.9996841892832999f, - 0.9996808911968489f, - 0.9996775759811358f, - 0.9996742436362176f, - 0.9996708941621513f, - 0.9996675275589942f, - 0.9996641438268042f, - 0.9996607429656391f, - 0.9996573249755573f, - 0.9996538898566173f, - 0.9996504376088778f, - 0.9996469682323983f, - 0.999643481727238f, - 0.9996399780934567f, - 0.9996364573311145f, - 0.9996329194402717f, - 0.9996293644209887f, - 0.9996257922733267f, - 0.9996222029973468f, - 0.9996185965931106f, - 0.9996149730606797f, - 0.9996113324001163f, - 0.9996076746114829f, - 0.9996039996948419f, - 0.9996003076502565f, - 0.9995965984777899f, - 0.9995928721775056f, - 0.9995891287494675f, - 0.9995853681937397f, - 0.9995815905103866f, - 0.9995777956994731f, - 0.9995739837610642f, - 0.999570154695225f, - 0.9995663085020212f, - 0.9995624451815189f, - 0.999558564733784f, - 0.9995546671588833f, - 0.9995507524568833f, - 0.9995468206278512f, - 0.9995428716718544f, - 0.9995389055889605f, - 0.9995349223792375f, - 0.9995309220427536f, - 0.9995269045795775f, - 0.9995228699897779f, - 0.9995188182734239f, - 0.9995147494305849f, - 0.9995106634613309f, - 0.9995065603657316f, - 0.9995024401438574f, - 0.9994983027957789f, - 0.999494148321567f, - 0.999489976721293f, - 0.9994857879950282f, - 0.9994815821428444f, - 0.9994773591648138f, - 0.9994731190610087f, - 0.9994688618315016f, - 0.9994645874763657f, - 0.999460295995674f, - 0.9994559873895001f, - 0.999451661657918f, - 0.9994473188010017f, - 0.9994429588188255f, - 0.9994385817114643f, - 0.9994341874789929f, - 0.9994297761214869f, - 0.9994253476390215f, - 0.9994209020316729f, - 0.9994164392995171f, - 0.9994119594426306f, - 0.9994074624610901f, - 0.9994029483549729f, - 0.9993984171243561f, - 0.9993938687693175f, - 0.9993893032899348f, - 0.9993847206862865f, - 0.999380120958451f, - 0.999375504106507f, - 0.9993708701305338f, - 0.9993662190306108f, - 0.9993615508068175f, - 0.9993568654592342f, - 0.9993521629879409f, - 0.9993474433930183f, - 0.9993427066745472f, - 0.9993379528326088f, - 0.9993331818672846f, - 0.9993283937786562f, - 0.9993235885668059f, - 0.9993187662318158f, - 0.9993139267737686f, - 0.9993090701927474f, - 0.9993041964888351f, - 0.9992993056621154f, - 0.9992943977126721f, - 0.9992894726405892f, - 0.9992845304459512f, - 0.9992795711288428f, - 0.9992745946893489f, - 0.9992696011275547f, - 0.9992645904435459f, - 0.9992595626374083f, - 0.999254517709228f, - 0.9992494556590916f, - 0.9992443764870856f, - 0.9992392801932973f, - 0.9992341667778138f, - 0.9992290362407229f, - 0.9992238885821124f, - 0.9992187238020706f, - 0.9992135419006857f, - 0.9992083428780468f, - 0.9992031267342429f, - 0.9991978934693634f, - 0.999192643083498f, - 0.9991873755767364f, - 0.9991820909491692f, - 0.9991767892008868f, - 0.9991714703319801f, - 0.9991661343425401f, - 0.9991607812326584f, - 0.9991554110024267f, - 0.9991500236519368f, - 0.9991446191812813f, - 0.9991391975905526f, - 0.9991337588798437f, - 0.9991283030492478f, - 0.9991228300988584f, - 0.9991173400287692f, - 0.9991118328390742f, - 0.9991063085298679f, - 0.999100767101245f, - 0.9990952085533004f, - 0.9990896328861292f, - 0.9990840400998271f, - 0.9990784301944899f, - 0.9990728031702137f, - 0.999067159027095f, - 0.9990614977652303f, - 0.9990558193847169f, - 0.9990501238856518f, - 0.9990444112681328f, - 0.9990386815322577f, - 0.9990329346781247f, - 0.9990271707058324f, - 0.9990213896154791f, - 0.9990155914071644f, - 0.9990097760809875f, - 0.9990039436370479f, - 0.9989980940754456f, - 0.9989922273962809f, - 0.9989863435996542f, - 0.9989804426856664f, - 0.9989745246544187f, - 0.9989685895060123f, - 0.9989626372405491f, - 0.9989566678581309f, - 0.9989506813588601f, - 0.9989446777428392f, - 0.9989386570101713f, - 0.9989326191609592f, - 0.9989265641953067f, - 0.9989204921133172f, - 0.998914402915095f, - 0.9989082966007445f, - 0.9989021731703701f, - 0.9988960326240769f, - 0.99888987496197f, - 0.998883700184155f, - 0.9988775082907375f, - 0.9988712992818238f, - 0.9988650731575204f, - 0.9988588299179337f, - 0.9988525695631708f, - 0.9988462920933391f, - 0.9988399975085459f, - 0.9988336858088992f, - 0.9988273569945072f, - 0.9988210110654783f, - 0.9988146480219211f, - 0.9988082678639448f, - 0.9988018705916587f, - 0.9987954562051724f, - 0.9987890247045957f, - 0.9987825760900391f, - 0.9987761103616126f, - 0.9987696275194275f, - 0.9987631275635946f, - 0.9987566104942254f, - 0.9987500763114314f, - 0.9987435250153247f, - 0.9987369566060175f, - 0.9987303710836224f, - 0.9987237684482522f, - 0.99871714870002f, - 0.9987105118390394f, - 0.9987038578654238f, - 0.9986971867792875f, - 0.9986904985807448f, - 0.9986837932699102f, - 0.9986770708468985f, - 0.998670331311825f, - 0.9986635746648053f, - 0.998656800905955f, - 0.9986500100353901f, - 0.9986432020532272f, - 0.9986363769595828f, - 0.9986295347545738f, - 0.9986226754383176f, - 0.9986157990109317f, - 0.9986089054725338f, - 0.9986019948232421f, - 0.9985950670631749f, - 0.9985881221924512f, - 0.9985811602111897f, - 0.9985741811195098f, - 0.998567184917531f, - 0.9985601716053734f, - 0.998553141183157f, - 0.9985460936510022f, - 0.9985390290090299f, - 0.9985319472573612f, - 0.9985248483961172f, - 0.9985177324254199f, - 0.9985105993453908f, - 0.9985034491561524f, - 0.9984962818578272f, - 0.9984890974505379f, - 0.9984818959344077f, - 0.9984746773095601f, - 0.9984674415761184f, - 0.998460188734207f, - 0.99845291878395f, - 0.998445631725472f, - 0.9984383275588977f, - 0.9984310062843526f, - 0.9984236679019618f, - 0.9984163124118512f, - 0.9984089398141469f, - 0.998401550108975f, - 0.9983941432964624f, - 0.9983867193767358f, - 0.9983792783499226f, - 0.9983718202161501f, - 0.9983643449755462f, - 0.998356852628239f, - 0.9983493431743568f, - 0.9983418166140283f, - 0.9983342729473825f, - 0.9983267121745487f, - 0.9983191342956564f, - 0.9983115393108354f, - 0.9983039272202159f, - 0.9982962980239283f, - 0.9982886517221033f, - 0.998280988314872f, - 0.9982733078023657f, - 0.9982656101847159f, - 0.9982578954620546f, - 0.9982501636345139f, - 0.9982424147022264f, - 0.9982346486653247f, - 0.9982268655239421f, - 0.9982190652782118f, - 0.9982112479282674f, - 0.9982034134742431f, - 0.9981955619162729f, - 0.9981876932544915f, - 0.9981798074890336f, - 0.9981719046200344f, - 0.9981639846476291f, - 0.9981560475719538f, - 0.9981480933931443f, - 0.9981401221113367f, - 0.9981321337266679f, - 0.9981241282392745f, - 0.998116105649294f, - 0.9981080659568636f, - 0.9981000091621212f, - 0.9980919352652047f, - 0.9980838442662526f, - 0.9980757361654035f, - 0.9980676109627962f, - 0.9980594686585701f, - 0.9980513092528646f, - 0.9980431327458196f, - 0.9980349391375751f, - 0.9980267284282716f, - 0.9980185006180496f, - 0.9980102557070504f, - 0.998001993695415f, - 0.9979937145832851f, - 0.9979854183708025f, - 0.9979771050581093f, - 0.9979687746453482f, - 0.9979604271326616f, - 0.9979520625201928f, - 0.9979436808080849f, - 0.9979352819964817f, - 0.997926866085527f, - 0.9979184330753651f, - 0.9979099829661405f, - 0.9979015157579979f, - 0.9978930314510823f, - 0.9978845300455393f, - 0.9978760115415145f, - 0.9978674759391538f, - 0.9978589232386035f, - 0.9978503534400102f, - 0.9978417665435205f, - 0.9978331625492818f, - 0.9978245414574415f, - 0.9978159032681472f, - 0.9978072479815469f, - 0.9977985755977891f, - 0.9977898861170221f, - 0.9977811795393952f, - 0.9977724558650571f, - 0.9977637150941577f, - 0.9977549572268466f, - 0.9977461822632737f, - 0.9977373902035898f, - 0.997728581047945f, - 0.9977197547964907f, - 0.9977109114493777f, - 0.997702051006758f, - 0.9976931734687832f, - 0.9976842788356053f, - 0.9976753671073768f, - 0.9976664382842505f, - 0.9976574923663794f, - 0.9976485293539165f, - 0.9976395492470157f, - 0.9976305520458307f, - 0.9976215377505158f, - 0.9976125063612252f, - 0.9976034578781139f, - 0.9975943923013368f, - 0.9975853096310495f, - 0.9975762098674072f, - 0.9975670930105662f, - 0.9975579590606826f, - 0.9975488080179128f, - 0.9975396398824137f, - 0.9975304546543422f, - 0.997521252333856f, - 0.9975120329211127f, - 0.9975027964162702f, - 0.9974935428194865f, - 0.9974842721309207f, - 0.9974749843507313f, - 0.9974656794790776f, - 0.9974563575161188f, - 0.9974470184620149f, - 0.9974376623169258f, - 0.9974282890810118f, - 0.9974188987544336f, - 0.9974094913373519f, - 0.9974000668299281f, - 0.9973906252323237f, - 0.9973811665447003f, - 0.9973716907672201f, - 0.9973621979000453f, - 0.9973526879433389f, - 0.9973431608972635f, - 0.9973336167619825f, - 0.9973240555376595f, - 0.9973144772244581f, - 0.9973048818225426f, - 0.9972952693320775f, - 0.9972856397532273f, - 0.9972759930861571f, - 0.9972663293310322f, - 0.9972566484880182f, - 0.9972469505572809f, - 0.9972372355389866f, - 0.9972275034333016f, - 0.9972177542403927f, - 0.9972079879604271f, - 0.9971982045935719f, - 0.997188404139995f, - 0.9971785865998641f, - 0.9971687519733476f, - 0.9971589002606139f, - 0.9971490314618319f, - 0.9971391455771705f, - 0.9971292426067994f, - 0.997119322550888f, - 0.9971093854096064f, - 0.9970994311831248f, - 0.9970894598716139f, - 0.9970794714752446f, - 0.9970694659941878f, - 0.997059443428615f, - 0.9970494037786981f, - 0.9970393470446091f, - 0.99702927322652f, - 0.9970191823246038f, - 0.9970090743390334f, - 0.9969989492699818f, - 0.9969888071176224f, - 0.9969786478821293f, - 0.9969684715636763f, - 0.996958278162438f, - 0.9969480676785889f, - 0.9969378401123039f, - 0.9969275954637584f, - 0.996917333733128f, - 0.9969070549205883f, - 0.9968967590263156f, - 0.9968864460504863f, - 0.9968761159932769f, - 0.9968657688548647f, - 0.9968554046354268f, - 0.9968450233351408f, - 0.9968346249541847f, - 0.9968242094927366f, - 0.9968137769509751f, - 0.9968033273290787f, - 0.9967928606272266f, - 0.9967823768455981f, - 0.996771875984373f, - 0.9967613580437309f, - 0.9967508230238523f, - 0.9967402709249177f, - 0.9967297017471077f, - 0.9967191154906037f, - 0.9967085121555869f, - 0.9966978917422389f, - 0.9966872542507419f, - 0.9966765996812781f, - 0.9966659280340299f, - 0.9966552393091803f, - 0.9966445335069125f, - 0.9966338106274099f, - 0.9966230706708561f, - 0.9966123136374353f, - 0.9966015395273318f, - 0.99659074834073f, - 0.9965799400778151f, - 0.9965691147387721f, - 0.9965582723237866f, - 0.9965474128330444f, - 0.9965365362667314f, - 0.9965256426250341f, - 0.9965147319081391f, - 0.9965038041162335f, - 0.9964928592495044f, - 0.9964818973081393f, - 0.9964709182923261f, - 0.996459922202253f, - 0.9964489090381082f, - 0.9964378788000807f, - 0.9964268314883593f, - 0.9964157671031334f, - 0.9964046856445924f, - 0.9963935871129264f, - 0.9963824715083254f, - 0.99637133883098f, - 0.9963601890810808f, - 0.996349022258819f, - 0.9963378383643858f, - 0.996326637397973f, - 0.9963154193597725f, - 0.9963041842499764f, - 0.9962929320687772f, - 0.9962816628163678f, - 0.9962703764929413f, - 0.996259073098691f, - 0.9962477526338107f, - 0.9962364150984943f, - 0.996225060492936f, - 0.9962136888173304f, - 0.9962023000718725f, - 0.9961908942567573f, - 0.9961794713721802f, - 0.996168031418337f, - 0.9961565743954237f, - 0.9961451003036367f, - 0.9961336091431725f, - 0.996122100914228f, - 0.9961105756170003f, - 0.9960990332516872f, - 0.9960874738184862f, - 0.9960758973175954f, - 0.9960643037492132f, - 0.9960526931135383f, - 0.9960410654107695f, - 0.9960294206411063f, - 0.996017758804748f, - 0.9960060799018945f, - 0.9959943839327459f, - 0.9959826708975025f, - 0.9959709407963652f, - 0.9959591936295349f, - 0.9959474293972129f, - 0.9959356480996007f, - 0.9959238497369003f, - 0.9959120343093137f, - 0.9959002018170435f, - 0.9958883522602925f, - 0.9958764856392636f, - 0.99586460195416f, - 0.9958527012051857f, - 0.9958407833925443f, - 0.9958288485164402f, - 0.9958168965770777f, - 0.9958049275746618f, - 0.9957929415093973f, - 0.99578093838149f, - 0.9957689181911452f, - 0.9957568809385692f, - 0.9957448266239679f, - 0.995732755247548f, - 0.9957206668095163f, - 0.9957085613100801f, - 0.9956964387494467f, - 0.9956842991278239f, - 0.9956721424454195f, - 0.9956599687024419f, - 0.9956477778990998f, - 0.9956355700356019f, - 0.9956233451121576f, - 0.9956111031289762f, - 0.9955988440862676f, - 0.9955865679842417f, - 0.995574274823109f, - 0.99556196460308f, - 0.9955496373243657f, - 0.9955372929871774f, - 0.9955249315917265f, - 0.9955125531382248f, - 0.9955001576268846f, - 0.9954877450579179f, - 0.9954753154315379f, - 0.9954628687479571f, - 0.9954504050073891f, - 0.9954379242100473f, - 0.9954254263561456f, - 0.9954129114458982f, - 0.9954003794795193f, - 0.995387830457224f, - 0.9953752643792271f, - 0.995362681245744f, - 0.9953500810569902f, - 0.9953374638131816f, - 0.9953248295145346f, - 0.9953121781612654f, - 0.995299509753591f, - 0.9952868242917284f, - 0.995274121775895f, - 0.9952614022063083f, - 0.9952486655831865f, - 0.9952359119067475f, - 0.9952231411772102f, - 0.9952103533947931f, - 0.9951975485597157f, - 0.9951847266721969f, - 0.9951718877324568f, - 0.9951590317407152f, - 0.9951461586971925f, - 0.9951332686021092f, - 0.9951203614556862f, - 0.9951074372581447f, - 0.9950944960097059f, - 0.9950815377105919f, - 0.9950685623610246f, - 0.9950555699612263f, - 0.9950425605114196f, - 0.9950295340118275f, - 0.9950164904626732f, - 0.99500342986418f, - 0.994990352216572f, - 0.9949772575200729f, - 0.9949641457749074f, - 0.9949510169813002f, - 0.994937871139476f, - 0.9949247082496602f, - 0.9949115283120783f, - 0.9948983313269562f, - 0.9948851172945199f, - 0.9948718862149959f, - 0.9948586380886109f, - 0.9948453729155919f, - 0.9948320906961663f, - 0.9948187914305615f, - 0.9948054751190055f, - 0.9947921417617265f, - 0.9947787913589529f, - 0.9947654239109134f, - 0.9947520394178371f, - 0.9947386378799533f, - 0.9947252192974918f, - 0.9947117836706824f, - 0.9946983309997552f, - 0.9946848612849408f, - 0.9946713745264703f, - 0.9946578707245742f, - 0.9946443498794845f, - 0.9946308119914323f, - 0.9946172570606501f, - 0.9946036850873697f, - 0.9945900960718239f, - 0.9945764900142456f, - 0.9945628669148678f, - 0.994549226773924f, - 0.9945355695916478f, - 0.9945218953682734f, - 0.9945082041040348f, - 0.994494495799167f, - 0.9944807704539047f, - 0.994467028068483f, - 0.9944532686431374f, - 0.9944394921781038f, - 0.9944256986736181f, - 0.9944118881299168f, - 0.9943980605472362f, - 0.9943842159258137f, - 0.9943703542658863f, - 0.9943564755676915f, - 0.994342579831467f, - 0.9943286670574512f, - 0.9943147372458823f, - 0.9943007903969989f, - 0.9942868265110402f, - 0.9942728455882452f, - 0.9942588476288537f, - 0.9942448326331055f, - 0.9942308006012406f, - 0.9942167515334995f, - 0.994202685430123f, - 0.9941886022913522f, - 0.9941745021174282f, - 0.9941603849085927f, - 0.9941462506650875f, - 0.9941320993871551f, - 0.9941179310750375f, - 0.9941037457289779f, - 0.9940895433492191f, - 0.9940753239360046f, - 0.9940610874895779f, - 0.9940468340101831f, - 0.9940325634980643f, - 0.9940182759534661f, - 0.9940039713766333f, - 0.993989649767811f, - 0.9939753111272446f, - 0.9939609554551797f, - 0.9939465827518624f, - 0.9939321930175389f, - 0.9939177862524559f, - 0.9939033624568601f, - 0.9938889216309986f, - 0.993874463775119f, - 0.993859988889469f, - 0.9938454969742966f, - 0.99383098802985f, - 0.9938164620563781f, - 0.9938019190541295f, - 0.9937873590233535f, - 0.9937727819642996f, - 0.9937581878772176f, - 0.9937435767623575f, - 0.9937289486199696f, - 0.9937143034503048f, - 0.9936996412536138f, - 0.9936849620301478f, - 0.9936702657801585f, - 0.9936555525038977f, - 0.9936408222016174f, - 0.9936260748735701f, - 0.9936113105200084f, - 0.9935965291411853f, - 0.9935817307373542f, - 0.9935669153087686f, - 0.9935520828556822f, - 0.9935372333783493f, - 0.9935223668770244f, - 0.993507483351962f, - 0.9934925828034176f, - 0.9934776652316458f, - 0.9934627306369029f, - 0.9934477790194444f, - 0.9934328103795266f, - 0.9934178247174059f, - 0.9934028220333393f, - 0.9933878023275837f, - 0.9933727656003964f, - 0.9933577118520353f, - 0.9933426410827579f, - 0.993327553292823f, - 0.9933124484824886f, - 0.9932973266520139f, - 0.9932821878016578f, - 0.9932670319316798f, - 0.9932518590423394f, - 0.9932366691338969f, - 0.9932214622066123f, - 0.9932062382607464f, - 0.9931909972965598f, - 0.9931757393143139f, - 0.99316046431427f, - 0.9931451722966897f, - 0.9931298632618354f, - 0.993114537209969f, - 0.9930991941413535f, - 0.9930838340562514f, - 0.9930684569549263f, - 0.9930530628376414f, - 0.9930376517046605f, - 0.9930222235562478f, - 0.9930067783926676f, - 0.9929913162141845f, - 0.9929758370210634f, - 0.9929603408135695f, - 0.9929448275919686f, - 0.9929292973565264f, - 0.9929137501075087f, - 0.9928981858451823f, - 0.9928826045698137f, - 0.9928670062816699f, - 0.9928513909810182f, - 0.9928357586681261f, - 0.9928201093432615f, - 0.9928044430066926f, - 0.9927887596586877f, - 0.9927730592995158f, - 0.9927573419294455f, - 0.9927416075487465f, - 0.9927258561576883f, - 0.9927100877565406f, - 0.9926943023455738f, - 0.9926784999250583f, - 0.992662680495265f, - 0.9926468440564647f, - 0.992630990608929f, - 0.9926151201529294f, - 0.992599232688738f, - 0.9925833282166268f, - 0.9925674067368683f, - 0.9925514682497356f, - 0.9925355127555016f, - 0.9925195402544398f, - 0.9925035507468237f, - 0.9924875442329275f, - 0.9924715207130254f, - 0.9924554801873918f, - 0.9924394226563017f, - 0.9924233481200302f, - 0.9924072565788528f, - 0.9923911480330452f, - 0.9923750224828832f, - 0.9923588799286435f, - 0.9923427203706023f, - 0.9923265438090368f, - 0.9923103502442241f, - 0.9922941396764415f, - 0.992277912105967f, - 0.9922616675330785f, - 0.9922454059580544f, - 0.9922291273811734f, - 0.9922128318027144f, - 0.9921965192229565f, - 0.9921801896421792f, - 0.9921638430606625f, - 0.9921474794786864f, - 0.9921310988965313f, - 0.9921147013144778f, - 0.992098286732807f, - 0.9920818551518f, - 0.9920654065717385f, - 0.9920489409929042f, - 0.9920324584155794f, - 0.9920159588400463f, - 0.991999442266588f, - 0.991982908695487f, - 0.9919663581270269f, - 0.9919497905614914f, - 0.9919332059991641f, - 0.9919166044403294f, - 0.9918999858852715f, - 0.9918833503342754f, - 0.991866697787626f, - 0.9918500282456089f, - 0.9918333417085092f, - 0.9918166381766135f, - 0.9917999176502074f, - 0.9917831801295777f, - 0.9917664256150112f, - 0.9917496541067949f, - 0.9917328656052162f, - 0.9917160601105628f, - 0.9916992376231227f, - 0.991682398143184f, - 0.9916655416710354f, - 0.9916486682069656f, - 0.9916317777512638f, - 0.9916148703042194f, - 0.9915979458661219f, - 0.9915810044372617f, - 0.9915640460179288f, - 0.991547070608414f, - 0.9915300782090077f, - 0.9915130688200017f, - 0.991496042441687f, - 0.9914789990743555f, - 0.9914619387182991f, - 0.9914448613738105f, - 0.9914277670411819f, - 0.9914106557207063f, - 0.991393527412677f, - 0.9913763821173874f, - 0.9913592198351313f, - 0.9913420405662029f, - 0.9913248443108964f, - 0.9913076310695066f, - 0.9912904008423282f, - 0.9912731536296567f, - 0.9912558894317876f, - 0.9912386082490164f, - 0.9912213100816396f, - 0.9912039949299535f, - 0.9911866627942546f, - 0.9911693136748401f, - 0.9911519475720071f, - 0.9911345644860533f, - 0.9911171644172765f, - 0.9910997473659748f, - 0.9910823133324467f, - 0.991064862316991f, - 0.9910473943199065f, - 0.9910299093414928f, - 0.9910124073820492f, - 0.9909948884418758f, - 0.9909773525212727f, - 0.9909597996205404f, - 0.9909422297399797f, - 0.9909246428798915f, - 0.9909070390405773f, - 0.9908894182223387f, - 0.9908717804254776f, - 0.9908541256502963f, - 0.9908364538970972f, - 0.9908187651661832f, - 0.9908010594578572f, - 0.9907833367724228f, - 0.9907655971101836f, - 0.9907478404714436f, - 0.990730066856507f, - 0.9907122762656784f, - 0.9906944686992625f, - 0.9906766441575646f, - 0.99065880264089f, - 0.9906409441495445f, - 0.990623068683834f, - 0.9906051762440649f, - 0.9905872668305437f, - 0.9905693404435773f, - 0.9905513970834728f, - 0.9905334367505378f, - 0.9905154594450799f, - 0.9904974651674073f, - 0.9904794539178282f, - 0.9904614256966512f, - 0.9904433805041853f, - 0.9904253183407397f, - 0.9904072392066238f, - 0.9903891431021473f, - 0.9903710300276206f, - 0.9903528999833537f, - 0.9903347529696576f, - 0.9903165889868428f, - 0.990298408035221f, - 0.9902802101151035f, - 0.990261995226802f, - 0.9902437633706288f, - 0.9902255145468963f, - 0.9902072487559171f, - 0.9901889659980042f, - 0.990170666273471f, - 0.9901523495826308f, - 0.9901340159257975f, - 0.9901156653032854f, - 0.990097297715409f, - 0.9900789131624829f, - 0.9900605116448219f, - 0.9900420931627417f, - 0.9900236577165575f, - 0.9900052053065856f, - 0.9899867359331419f, - 0.989968249596543f, - 0.9899497462971054f, - 0.9899312260351465f, - 0.9899126888109834f, - 0.9898941346249339f, - 0.9898755634773158f, - 0.9898569753684473f, - 0.989838370298647f, - 0.9898197482682336f, - 0.9898011092775263f, - 0.9897824533268442f, - 0.9897637804165074f, - 0.9897450905468355f, - 0.9897263837181489f, - 0.9897076599307681f, - 0.9896889191850139f, - 0.9896701614812076f, - 0.9896513868196702f, - 0.9896325952007238f, - 0.9896137866246902f, - 0.9895949610918917f, - 0.9895761186026509f, - 0.9895572591572908f, - 0.9895383827561343f, - 0.989519489399505f, - 0.9895005790877264f, - 0.9894816518211228f, - 0.9894627076000184f, - 0.9894437464247379f, - 0.9894247682956061f, - 0.9894057732129481f, - 0.9893867611770896f, - 0.9893677321883562f, - 0.989348686247074f, - 0.9893296233535692f, - 0.9893105435081687f, - 0.9892914467111994f, - 0.9892723329629883f, - 0.9892532022638632f, - 0.9892340546141516f, - 0.9892148900141817f, - 0.989195708464282f, - 0.989176509964781f, - 0.9891572945160078f, - 0.9891380621182916f, - 0.9891188127719618f, - 0.9890995464773485f, - 0.9890802632347816f, - 0.9890609630445917f, - 0.9890416459071093f, - 0.9890223118226656f, - 0.9890029607915917f, - 0.9889835928142193f, - 0.9889642078908802f, - 0.9889448060219067f, - 0.9889253872076309f, - 0.9889059514483859f, - 0.9888864987445046f, - 0.9888670290963203f, - 0.9888475425041665f, - 0.9888280389683773f, - 0.9888085184892869f, - 0.9887889810672295f, - 0.9887694267025401f, - 0.9887498553955536f, - 0.9887302671466056f, - 0.9887106619560315f, - 0.9886910398241674f, - 0.9886714007513494f, - 0.988651744737914f, - 0.9886320717841981f, - 0.9886123818905387f, - 0.9885926750572733f, - 0.9885729512847394f, - 0.9885532105732752f, - 0.9885334529232186f, - 0.9885136783349086f, - 0.9884938868086836f, - 0.9884740783448829f, - 0.9884542529438459f, - 0.9884344106059124f, - 0.9884145513314223f, - 0.9883946751207159f, - 0.9883747819741338f, - 0.9883548718920167f, - 0.988334944874706f, - 0.9883150009225429f, - 0.9882950400358694f, - 0.9882750622150273f, - 0.9882550674603591f, - 0.9882350557722072f, - 0.9882150271509146f, - 0.9881949815968246f, - 0.9881749191102804f, - 0.9881548396916261f, - 0.9881347433412055f, - 0.9881146300593631f, - 0.9880944998464434f, - 0.9880743527027914f, - 0.9880541886287523f, - 0.9880340076246716f, - 0.9880138096908951f, - 0.9879935948277689f, - 0.9879733630356394f, - 0.9879531143148532f, - 0.9879328486657575f, - 0.987912566088699f, - 0.9878922665840258f, - 0.9878719501520854f, - 0.9878516167932261f, - 0.9878312665077962f, - 0.9878108992961444f, - 0.9877905151586197f, - 0.9877701140955715f, - 0.9877496961073491f, - 0.9877292611943025f, - 0.987708809356782f, - 0.9876883405951377f, - 0.9876678549097206f, - 0.9876473523008817f, - 0.9876268327689722f, - 0.9876062963143437f, - 0.9875857429373482f, - 0.9875651726383379f, - 0.987544585417665f, - 0.9875239812756824f, - 0.9875033602127433f, - 0.9874827222292009f, - 0.9874620673254086f, - 0.9874413955017208f, - 0.9874207067584914f, - 0.987400001096075f, - 0.9873792785148262f, - 0.9873585390151004f, - 0.9873377825972526f, - 0.9873170092616388f, - 0.9872962190086146f, - 0.9872754118385366f, - 0.987254587751761f, - 0.9872337467486447f, - 0.987212888829545f, - 0.9871920139948192f, - 0.9871711222448248f, - 0.98715021357992f, - 0.9871292880004631f, - 0.9871083455068124f, - 0.9870873860993268f, - 0.9870664097783656f, - 0.9870454165442881f, - 0.9870244063974541f, - 0.9870033793382236f, - 0.9869823353669567f, - 0.9869612744840142f, - 0.9869401966897569f, - 0.9869191019845459f, - 0.9868979903687428f, - 0.9868768618427093f, - 0.9868557164068074f, - 0.9868345540613992f, - 0.9868133748068477f, - 0.9867921786435155f, - 0.986770965571766f, - 0.9867497355919627f, - 0.986728488704469f, - 0.9867072249096495f, - 0.986685944207868f, - 0.9866646465994896f, - 0.986643332084879f, - 0.9866220006644014f, - 0.9866006523384224f, - 0.9865792871073079f, - 0.9865579049714237f, - 0.9865365059311364f, - 0.9865150899868125f, - 0.9864936571388191f, - 0.9864722073875234f, - 0.9864507407332929f, - 0.9864292571764955f, - 0.9864077567174993f, - 0.9863862393566726f, - 0.9863647050943842f, - 0.9863431539310031f, - 0.9863215858668984f, - 0.98630000090244f, - 0.9862783990379974f, - 0.9862567802739409f, - 0.986235144610641f, - 0.9862134920484683f, - 0.9861918225877938f, - 0.9861701362289889f, - 0.9861484329724252f, - 0.9861267128184743f, - 0.9861049757675088f, - 0.9860832218199008f, - 0.9860614509760234f, - 0.9860396632362493f, - 0.9860178586009519f, - 0.985996037070505f, - 0.9859741986452824f, - 0.9859523433256581f, - 0.9859304711120068f, - 0.9859085820047033f, - 0.9858866760041226f, - 0.9858647531106401f, - 0.9858428133246314f, - 0.9858208566464725f, - 0.9857988830765393f, - 0.9857768926152087f, - 0.9857548852628574f, - 0.9857328610198625f, - 0.9857108198866013f, - 0.9856887618634514f, - 0.985666686950791f, - 0.985644595148998f, - 0.9856224864584513f, - 0.9856003608795295f, - 0.985578218412612f, - 0.9855560590580777f, - 0.9855338828163068f, - 0.9855116896876789f, - 0.9854894796725746f, - 0.9854672527713743f, - 0.9854450089844587f, - 0.9854227483122092f, - 0.9854004707550071f, - 0.9853781763132342f, - 0.9853558649872725f, - 0.9853335367775041f, - 0.9853111916843119f, - 0.9852888297080786f, - 0.9852664508491873f, - 0.9852440551080217f, - 0.9852216424849652f, - 0.9851992129804021f, - 0.9851767665947168f, - 0.9851543033282936f, - 0.9851318231815176f, - 0.9851093261547739f, - 0.9850868122484482f, - 0.9850642814629259f, - 0.9850417337985934f, - 0.9850191692558368f, - 0.984996587835043f, - 0.9849739895365986f, - 0.9849513743608911f, - 0.9849287423083078f, - 0.9849060933792367f, - 0.9848834275740658f, - 0.9848607448931833f, - 0.9848380453369782f, - 0.9848153289058391f, - 0.9847925956001554f, - 0.9847698454203168f, - 0.9847470783667127f, - 0.9847242944397336f, - 0.9847014936397698f, - 0.9846786759672118f, - 0.9846558414224508f, - 0.984632990005878f, - 0.9846101217178849f, - 0.9845872365588633f, - 0.9845643345292053f, - 0.9845414156293036f, - 0.9845184798595507f, - 0.9844955272203396f, - 0.9844725577120637f, - 0.9844495713351165f, - 0.9844265680898916f, - 0.9844035479767836f, - 0.9843805109961867f, - 0.9843574571484958f, - 0.9843343864341058f, - 0.9843112988534118f, - 0.9842881944068098f, - 0.9842650730946955f, - 0.984241934917465f, - 0.984218779875515f, - 0.984195607969242f, - 0.9841724191990431f, - 0.9841492135653158f, - 0.9841259910684574f, - 0.9841027517088663f, - 0.9840794954869402f, - 0.9840562224030779f, - 0.9840329324576781f, - 0.9840096256511397f, - 0.9839863019838624f, - 0.9839629614562455f, - 0.9839396040686892f, - 0.9839162298215935f, - 0.9838928387153592f, - 0.9838694307503867f, - 0.9838460059270775f, - 0.9838225642458326f, - 0.983799105707054f, - 0.9837756303111433f, - 0.9837521380585033f, - 0.9837286289495358f, - 0.9837051029846443f, - 0.9836815601642316f, - 0.9836580004887009f, - 0.9836344239584563f, - 0.9836108305739015f, - 0.983587220335441f, - 0.983563593243479f, - 0.9835399492984207f, - 0.983516288500671f, - 0.9834926108506354f, - 0.9834689163487197f, - 0.9834452049953296f, - 0.9834214767908719f, - 0.9833977317357526f, - 0.9833739698303791f, - 0.9833501910751581f, - 0.9833263954704974f, - 0.9833025830168044f, - 0.9832787537144875f, - 0.9832549075639546f, - 0.9832310445656146f, - 0.9832071647198762f, - 0.9831832680271487f, - 0.9831593544878416f, - 0.9831354241023644f, - 0.9831114768711275f, - 0.983087512794541f, - 0.9830635318730155f, - 0.983039534106962f, - 0.9830155194967917f, - 0.9829914880429159f, - 0.9829674397457466f, - 0.9829433746056958f, - 0.9829192926231759f, - 0.9828951937985994f, - 0.9828710781323792f, - 0.9828469456249287f, - 0.9828227962766612f, - 0.9827986300879908f, - 0.9827744470593314f, - 0.9827502471910973f, - 0.9827260304837031f, - 0.982701796937564f, - 0.982677546553095f, - 0.9826532793307118f, - 0.98262899527083f, - 0.982604694373866f, - 0.9825803766402359f, - 0.9825560420703565f, - 0.982531690664645f, - 0.9825073224235181f, - 0.9824829373473939f, - 0.9824585354366898f, - 0.9824341166918243f, - 0.9824096811132156f, - 0.9823852287012823f, - 0.9823607594564436f, - 0.9823362733791187f, - 0.9823117704697271f, - 0.9822872507286886f, - 0.9822627141564236f, - 0.9822381607533524f, - 0.9822135905198955f, - 0.9821890034564742f, - 0.9821643995635096f, - 0.9821397788414234f, - 0.9821151412906375f, - 0.9820904869115739f, - 0.9820658157046551f, - 0.9820411276703039f, - 0.9820164228089433f, - 0.9819917011209967f, - 0.9819669626068873f, - 0.9819422072670395f, - 0.9819174351018772f, - 0.981892646111825f, - 0.9818678402973076f, - 0.9818430176587499f, - 0.9818181781965774f, - 0.9817933219112157f, - 0.9817684488030907f, - 0.9817435588726284f, - 0.9817186521202556f, - 0.9816937285463989f, - 0.9816687881514853f, - 0.9816438309359423f, - 0.9816188569001975f, - 0.9815938660446787f, - 0.9815688583698141f, - 0.9815438338760325f, - 0.9815187925637624f, - 0.9814937344334329f, - 0.9814686594854736f, - 0.9814435677203137f, - 0.9814184591383837f, - 0.9813933337401133f, - 0.9813681915259334f, - 0.9813430324962745f, - 0.981317856651568f, - 0.9812926639922452f, - 0.9812674545187375f, - 0.9812422282314773f, - 0.9812169851308965f, - 0.9811917252174278f, - 0.9811664484915039f, - 0.981141154953558f, - 0.9811158446040236f, - 0.9810905174433341f, - 0.9810651734719237f, - 0.9810398126902266f, - 0.9810144350986774f, - 0.9809890406977108f, - 0.980963629487762f, - 0.9809382014692665f, - 0.9809127566426599f, - 0.9808872950083781f, - 0.9808618165668577f, - 0.9808363213185349f, - 0.9808108092638469f, - 0.9807852804032304f, - 0.9807597347371233f, - 0.980734172265963f, - 0.9807085929901876f, - 0.9806829969102356f, - 0.9806573840265452f, - 0.9806317543395556f, - 0.9806061078497057f, - 0.9805804445574352f, - 0.9805547644631836f, - 0.980529067567391f, - 0.9805033538704978f, - 0.9804776233729444f, - 0.9804518760751719f, - 0.9804261119776214f, - 0.9804003310807343f, - 0.9803745333849524f, - 0.9803487188907178f, - 0.9803228875984726f, - 0.9802970395086598f, - 0.9802711746217219f, - 0.9802452929381023f, - 0.9802193944582444f, - 0.980193479182592f, - 0.9801675471115892f, - 0.9801415982456801f, - 0.9801156325853096f, - 0.9800896501309226f, - 0.9800636508829642f, - 0.9800376348418799f, - 0.9800116020081155f, - 0.9799855523821172f, - 0.979959485964331f, - 0.9799334027552039f, - 0.9799073027551827f, - 0.9798811859647144f, - 0.9798550523842469f, - 0.9798289020142277f, - 0.9798027348551049f, - 0.9797765509073272f, - 0.9797503501713428f, - 0.9797241326476009f, - 0.9796978983365506f, - 0.9796716472386416f, - 0.9796453793543235f, - 0.9796190946840466f, - 0.9795927932282611f, - 0.9795664749874177f, - 0.9795401399619674f, - 0.9795137881523615f, - 0.9794874195590514f, - 0.979461034182489f, - 0.9794346320231264f, - 0.979408213081416f, - 0.9793817773578104f, - 0.9793553248527628f, - 0.9793288555667261f, - 0.9793023695001541f, - 0.9792758666535006f, - 0.9792493470272198f, - 0.9792228106217659f, - 0.9791962574375935f, - 0.979169687475158f, - 0.9791431007349144f, - 0.9791164972173182f, - 0.9790898769228255f, - 0.979063239851892f, - 0.9790365860049747f, - 0.9790099153825298f, - 0.9789832279850146f, - 0.9789565238128862f, - 0.9789298028666022f, - 0.9789030651466206f, - 0.9788763106533994f, - 0.9788495393873972f, - 0.9788227513490724f, - 0.9787959465388842f, - 0.978769124957292f, - 0.9787422866047553f, - 0.9787154314817338f, - 0.9786885595886878f, - 0.9786616709260778f, - 0.9786347654943645f, - 0.9786078432940089f, - 0.9785809043254722f, - 0.9785539485892161f, - 0.9785269760857024f, - 0.9784999868153934f, - 0.9784729807787513f, - 0.9784459579762393f, - 0.97841891840832f, - 0.9783918620754569f, - 0.9783647889781135f, - 0.978337699116754f, - 0.978310592491842f, - 0.9782834691038426f, - 0.97825632895322f, - 0.9782291720404396f, - 0.9782019983659667f, - 0.9781748079302667f, - 0.9781476007338057f, - 0.9781203767770498f, - 0.9780931360604654f, - 0.9780658785845194f, - 0.9780386043496789f, - 0.9780113133564111f, - 0.9779840056051837f, - 0.9779566810964645f, - 0.9779293398307218f, - 0.9779019818084241f, - 0.97787460703004f, - 0.9778472154960389f, - 0.9778198072068898f, - 0.9777923821630625f, - 0.9777649403650269f, - 0.9777374818132533f, - 0.9777100065082119f, - 0.9776825144503739f, - 0.97765500564021f, - 0.9776274800781918f, - 0.9775999377647907f, - 0.9775723787004789f, - 0.9775448028857284f, - 0.9775172103210118f, - 0.977489601006802f, - 0.9774619749435719f, - 0.977434332131795f, - 0.9774066725719447f, - 0.9773789962644953f, - 0.9773513032099207f, - 0.9773235934086958f, - 0.9772958668612949f, - 0.9772681235681935f, - 0.9772403635298668f, - 0.9772125867467903f, - 0.9771847932194404f, - 0.9771569829482929f, - 0.9771291559338247f, - 0.9771013121765122f, - 0.9770734516768327f, - 0.9770455744352636f, - 0.9770176804522827f, - 0.9769897697283676f, - 0.9769618422639967f, - 0.9769338980596487f, - 0.9769059371158023f, - 0.9768779594329365f, - 0.9768499650115308f, - 0.9768219538520649f, - 0.9767939259550187f, - 0.9767658813208725f, - 0.9767378199501067f, - 0.9767097418432024f, - 0.9766816470006403f, - 0.9766535354229023f, - 0.9766254071104696f, - 0.9765972620638246f, - 0.9765691002834492f, - 0.9765409217698262f, - 0.9765127265234383f, - 0.9764845145447687f, - 0.9764562858343007f, - 0.976428040392518f, - 0.9763997782199046f, - 0.9763714993169449f, - 0.9763432036841233f, - 0.9763148913219246f, - 0.9762865622308341f, - 0.976258216411337f, - 0.9762298538639193f, - 0.9762014745890666f, - 0.9761730785872653f, - 0.9761446658590023f, - 0.976116236404764f, - 0.9760877902250377f, - 0.9760593273203108f, - 0.9760308476910711f, - 0.9760023513378064f, - 0.9759738382610053f, - 0.9759453084611559f, - 0.9759167619387474f, - 0.9758881986942688f, - 0.9758596187282097f, - 0.9758310220410595f, - 0.9758024086333085f, - 0.9757737785054468f, - 0.9757451316579651f, - 0.975716468091354f, - 0.975687787806105f, - 0.9756590908027093f, - 0.9756303770816586f, - 0.9756016466434451f, - 0.9755728994885607f, - 0.9755441356174985f, - 0.9755153550307509f, - 0.9754865577288113f, - 0.9754577437121731f, - 0.9754289129813299f, - 0.975400065536776f, - 0.9753712013790053f, - 0.9753423205085128f, - 0.9753134229257928f, - 0.9752845086313411f, - 0.9752555776256526f, - 0.9752266299092235f, - 0.9751976654825494f, - 0.9751686843461267f, - 0.9751396865004521f, - 0.9751106719460225f, - 0.975081640683335f, - 0.9750525927128869f, - 0.9750235280351761f, - 0.9749944466507005f, - 0.9749653485599585f, - 0.9749362337634486f, - 0.9749071022616699f, - 0.9748779540551212f, - 0.9748487891443023f, - 0.9748196075297126f, - 0.9747904092118523f, - 0.9747611941912218f, - 0.9747319624683215f, - 0.9747027140436524f, - 0.9746734489177156f, - 0.9746441670910125f, - 0.974614868564045f, - 0.974585553337315f, - 0.9745562214113248f, - 0.9745268727865772f, - 0.9744975074635748f, - 0.9744681254428208f, - 0.9744387267248189f, - 0.9744093113100725f, - 0.974379879199086f, - 0.9743504303923632f, - 0.9743209648904093f, - 0.9742914826937288f, - 0.974261983802827f, - 0.9742324682182092f, - 0.9742029359403814f, - 0.9741733869698493f, - 0.9741438213071196f, - 0.9741142389526986f, - 0.9740846399070932f, - 0.9740550241708108f, - 0.9740253917443586f, - 0.9739957426282445f, - 0.9739660768229765f, - 0.973936394329063f, - 0.9739066951470123f, - 0.9738769792773336f, - 0.973847246720536f, - 0.9738174974771289f, - 0.9737877315476221f, - 0.9737579489325255f, - 0.9737281496323495f, - 0.9736983336476048f, - 0.9736685009788023f, - 0.9736386516264529f, - 0.9736087855910683f, - 0.9735789028731603f, - 0.9735490034732407f, - 0.973519087391822f, - 0.9734891546294168f, - 0.9734592051865377f, - 0.9734292390636984f, - 0.9733992562614119f, - 0.973369256780192f, - 0.9733392406205531f, - 0.9733092077830092f, - 0.973279158268075f, - 0.9732490920762653f, - 0.9732190092080953f, - 0.9731889096640807f, - 0.9731587934447369f, - 0.9731286605505801f, - 0.9730985109821266f, - 0.973068344739893f, - 0.9730381618243963f, - 0.9730079622361534f, - 0.972977745975682f, - 0.9729475130434998f, - 0.9729172634401249f, - 0.9728869971660754f, - 0.97285671422187f, - 0.9728264146080279f, - 0.9727960983250677f, - 0.9727657653735095f, - 0.9727354157538723f, - 0.9727050494666769f, - 0.972674666512443f, - 0.9726442668916917f, - 0.9726138506049435f, - 0.9725834176527198f, - 0.972552968035542f, - 0.9725225017539318f, - 0.9724920188084114f, - 0.9724615191995027f, - 0.9724310029277289f, - 0.9724004699936124f, - 0.9723699203976767f, - 0.9723393541404449f, - 0.9723087712224412f, - 0.9722781716441892f, - 0.9722475554062133f, - 0.9722169225090385f, - 0.9721862729531892f, - 0.9721556067391908f, - 0.9721249238675687f, - 0.9720942243388487f, - 0.9720635081535567f, - 0.9720327753122192f, - 0.9720020258153627f, - 0.971971259663514f, - 0.9719404768572004f, - 0.9719096773969493f, - 0.9718788612832886f, - 0.971848028516746f, - 0.97181717909785f, - 0.9717863130271293f, - 0.9717554303051126f, - 0.971724530932329f, - 0.9716936149093083f, - 0.9716626822365799f, - 0.971631732914674f, - 0.9716007669441208f, - 0.971569784325451f, - 0.9715387850591953f, - 0.9715077691458851f, - 0.9714767365860517f, - 0.971445687380227f, - 0.9714146215289428f, - 0.9713835390327314f, - 0.9713524398921256f, - 0.9713213241076581f, - 0.9712901916798623f, - 0.9712590426092713f, - 0.9712278768964191f, - 0.9711966945418395f, - 0.9711654955460669f, - 0.9711342799096361f, - 0.9711030476330816f, - 0.9710717987169388f, - 0.9710405331617431f, - 0.9710092509680303f, - 0.9709779521363361f, - 0.9709466366671972f, - 0.9709153045611497f, - 0.9708839558187311f, - 0.970852590440478f, - 0.9708212084269281f, - 0.9707898097786191f, - 0.9707583944960889f, - 0.970726962579876f, - 0.9706955140305187f, - 0.9706640488485562f, - 0.9706325670345273f, - 0.9706010685889717f, - 0.9705695535124289f, - 0.9705380218054391f, - 0.9705064734685425f, - 0.9704749085022796f, - 0.9704433269071914f, - 0.9704117286838189f, - 0.9703801138327036f, - 0.9703484823543873f, - 0.9703168342494118f, - 0.9702851695183196f, - 0.9702534881616531f, - 0.9702217901799551f, - 0.970190075573769f, - 0.970158344343638f, - 0.9701265964901059f, - 0.9700948320137166f, - 0.9700630509150144f, - 0.970031253194544f, - 0.96999943885285f, - 0.9699676078904779f, - 0.9699357603079727f, - 0.9699038961058803f, - 0.9698720152847468f, - 0.9698401178451183f, - 0.9698082037875413f, - 0.9697762731125628f, - 0.9697443258207299f, - 0.9697123619125899f, - 0.9696803813886905f, - 0.9696483842495799f, - 0.9696163704958061f, - 0.9695843401279176f, - 0.9695522931464635f, - 0.9695202295519928f, - 0.969488149345055f, - 0.9694560525261995f, - 0.9694239390959766f, - 0.9693918090549363f, - 0.9693596624036294f, - 0.9693274991426063f, - 0.9692953192724186f, - 0.9692631227936174f, - 0.9692309097067544f, - 0.9691986800123816f, - 0.9691664337110514f, - 0.9691341708033161f, - 0.9691018912897286f, - 0.969069595170842f, - 0.9690372824472097f, - 0.9690049531193854f, - 0.968972607187923f, - 0.9689402446533768f, - 0.9689078655163011f, - 0.9688754697772511f, - 0.9688430574367816f, - 0.9688106284954479f, - 0.968778182953806f, - 0.9687457208124116f, - 0.9687132420718211f, - 0.9686807467325907f, - 0.9686482347952776f, - 0.9686157062604386f, - 0.9685831611286312f, - 0.9685505994004129f, - 0.9685180210763419f, - 0.9684854261569761f, - 0.9684528146428742f, - 0.968420186534595f, - 0.9683875418326976f, - 0.9683548805377413f, - 0.9683222026502856f, - 0.9682895081708907f, - 0.9682567971001166f, - 0.9682240694385239f, - 0.9681913251866732f, - 0.9681585643451259f, - 0.9681257869144431f, - 0.9680929928951865f, - 0.9680601822879179f, - 0.9680273550931996f, - 0.9679945113115943f, - 0.9679616509436644f, - 0.9679287739899732f, - 0.9678958804510839f, - 0.9678629703275603f, - 0.9678300436199659f, - 0.9677971003288655f, - 0.9677641404548231f, - 0.9677311639984036f, - 0.9676981709601721f, - 0.9676651613406938f, - 0.9676321351405345f, - 0.9675990923602598f, - 0.9675660330004362f, - 0.9675329570616299f, - 0.967499864544408f, - 0.967466755449337f, - 0.9674336297769848f, - 0.9674004875279185f, - 0.9673673287027064f, - 0.9673341533019163f, - 0.967300961326117f, - 0.9672677527758768f, - 0.9672345276517651f, - 0.9672012859543511f, - 0.9671680276842043f, - 0.9671347528418948f, - 0.9671014614279925f, - 0.9670681534430678f, - 0.9670348288876918f, - 0.9670014877624351f, - 0.9669681300678692f, - 0.9669347558045656f, - 0.9669013649730962f, - 0.9668679575740331f, - 0.9668345336079488f, - 0.966801093075416f, - 0.9667676359770077f, - 0.9667341623132969f, - 0.9667006720848577f, - 0.9666671652922634f, - 0.9666336419360886f, - 0.9666001020169073f, - 0.9665665455352945f, - 0.966532972491825f, - 0.9664993828870743f, - 0.9664657767216176f, - 0.966432153996031f, - 0.9663985147108906f, - 0.9663648588667726f, - 0.9663311864642539f, - 0.9662974975039114f, - 0.9662637919863222f, - 0.9662300699120641f, - 0.9661963312817148f, - 0.9661625760958523f, - 0.9661288043550552f, - 0.9660950160599019f, - 0.9660612112109715f, - 0.9660273898088434f, - 0.9659935518540969f, - 0.9659596973473118f, - 0.9659258262890683f, - 0.9658919386799467f, - 0.9658580345205277f, - 0.9658241138113922f, - 0.9657901765531214f, - 0.965756222746297f, - 0.9657222523915004f, - 0.9656882654893142f, - 0.9656542620403201f, - 0.9656202420451013f, - 0.9655862055042406f, - 0.965552152418321f, - 0.9655180827879263f, - 0.9654839966136399f, - 0.9654498938960462f, - 0.9654157746357293f, - 0.965381638833274f, - 0.9653474864892649f, - 0.9653133176042877f, - 0.9652791321789275f, - 0.9652449302137701f, - 0.9652107117094016f, - 0.9651764766664083f, - 0.965142225085377f, - 0.9651079569668941f, - 0.9650736723115474f, - 0.9650393711199239f, - 0.9650050533926116f, - 0.9649707191301983f, - 0.9649363683332725f, - 0.9649020010024226f, - 0.9648676171382378f, - 0.9648332167413068f, - 0.9647987998122194f, - 0.9647643663515653f, - 0.9647299163599343f, - 0.964695449837917f, - 0.9646609667861036f, - 0.9646264672050853f, - 0.9645919510954529f, - 0.9645574184577982f, - 0.9645228692927126f, - 0.9644883036007883f, - 0.9644537213826173f, - 0.9644191226387926f, - 0.9643845073699066f, - 0.9643498755765526f, - 0.9643152272593242f, - 0.9642805624188147f, - 0.9642458810556184f, - 0.9642111831703293f, - 0.9641764687635422f, - 0.9641417378358517f, - 0.9641069903878531f, - 0.9640722264201416f, - 0.964037445933313f, - 0.9640026489279632f, - 0.9639678354046883f, - 0.9639330053640852f, - 0.9638981588067503f, - 0.963863295733281f, - 0.9638284161442744f, - 0.9637935200403285f, - 0.9637586074220408f, - 0.9637236782900097f, - 0.9636887326448338f, - 0.9636537704871119f, - 0.9636187918174429f, - 0.9635837966364263f, - 0.9635487849446616f, - 0.9635137567427488f, - 0.9634787120312881f, - 0.9634436508108799f, - 0.9634085730821251f, - 0.9633734788456246f, - 0.9633383681019799f, - 0.9633032408517925f, - 0.9632680970956643f, - 0.9632329368341975f, - 0.9631977600679945f, - 0.9631625667976582f, - 0.9631273570237914f, - 0.9630921307469977f, - 0.9630568879678804f, - 0.9630216286870436f, - 0.9629863529050913f, - 0.962951060622628f, - 0.9629157518402583f, - 0.9628804265585876f, - 0.9628450847782208f, - 0.9628097264997637f, - 0.9627743517238219f, - 0.9627389604510017f, - 0.9627035526819095f, - 0.9626681284171521f, - 0.9626326876573363f, - 0.9625972304030695f, - 0.9625617566549592f, - 0.9625262664136134f, - 0.9624907596796399f, - 0.9624552364536473f, - 0.9624196967362443f, - 0.9623841405280397f, - 0.962348567829643f, - 0.9623129786416634f, - 0.9622773729647108f, - 0.9622417507993957f, - 0.9622061121463279f, - 0.9621704570061186f, - 0.9621347853793781f, - 0.9620990972667183f, - 0.9620633926687502f, - 0.9620276715860859f, - 0.9619919340193372f, - 0.9619561799691169f, - 0.961920409436037f, - 0.9618846224207109f, - 0.9618488189237516f, - 0.9618129989457728f, - 0.961777162487388f, - 0.9617413095492113f, - 0.9617054401318572f, - 0.9616695542359401f, - 0.9616336518620752f, - 0.9615977330108773f, - 0.961561797682962f, - 0.9615258458789451f, - 0.9614898775994427f, - 0.9614538928450709f, - 0.9614178916164464f, - 0.9613818739141861f, - 0.961345839738907f, - 0.9613097890912268f, - 0.961273721971763f, - 0.9612376383811337f, - 0.9612015383199571f, - 0.961165421788852f, - 0.9611292887884368f, - 0.9610931393193312f, - 0.961056973382154f, - 0.9610207909775255f, - 0.9609845921060651f, - 0.9609483767683935f, - 0.9609121449651311f, - 0.9608758966968985f, - 0.9608396319643173f, - 0.9608033507680084f, - 0.9607670531085937f, - 0.960730738986695f, - 0.9606944084029349f, - 0.9606580613579353f, - 0.9606216978523197f, - 0.9605853178867105f, - 0.9605489214617317f, - 0.9605125085780064f, - 0.9604760792361587f, - 0.9604396334368132f, - 0.9604031711805938f, - 0.9603666924681257f, - 0.9603301973000336f, - 0.9602936856769431f, - 0.9602571575994797f, - 0.9602206130682693f, - 0.9601840520839382f, - 0.9601474746471128f, - 0.9601108807584198f, - 0.960074270418486f, - 0.9600376436279393f, - 0.9600010003874067f, - 0.9599643406975165f, - 0.9599276645588964f, - 0.9598909719721753f, - 0.9598542629379817f, - 0.9598175374569446f, - 0.9597807955296933f, - 0.9597440371568575f, - 0.9597072623390667f, - 0.9596704710769514f, - 0.9596336633711416f, - 0.9595968392222685f, - 0.9595599986309626f, - 0.9595231415978555f, - 0.9594862681235786f, - 0.9594493782087636f, - 0.9594124718540429f, - 0.9593755490600485f, - 0.9593386098274134f, - 0.9593016541567703f, - 0.9592646820487525f, - 0.9592276935039936f, - 0.9591906885231273f, - 0.9591536671067877f, - 0.959116629255609f, - 0.9590795749702262f, - 0.9590425042512738f, - 0.9590054170993874f, - 0.9589683135152021f, - 0.9589311934993539f, - 0.9588940570524787f, - 0.9588569041752129f, - 0.958819734868193f, - 0.9587825491320562f, - 0.9587453469674393f, - 0.9587081283749799f, - 0.9586708933553157f, - 0.9586336419090848f, - 0.9585963740369254f, - 0.9585590897394762f, - 0.958521789017376f, - 0.9584844718712637f, - 0.9584471383017791f, - 0.9584097883095616f, - 0.9583724218952514f, - 0.9583350390594885f, - 0.9582976398029137f, - 0.9582602241261677f, - 0.9582227920298917f, - 0.9581853435147271f, - 0.9581478785813153f, - 0.9581103972302988f, - 0.9580728994623191f, - 0.9580353852780193f, - 0.957997854678042f, - 0.9579603076630303f, - 0.9579227442336274f, - 0.9578851643904772f, - 0.9578475681342234f, - 0.9578099554655104f, - 0.9577723263849826f, - 0.9577346808932846f, - 0.9576970189910616f, - 0.957659340678959f, - 0.9576216459576223f, - 0.9575839348276973f, - 0.9575462072898304f, - 0.9575084633446679f, - 0.9574707029928566f, - 0.9574329262350434f, - 0.9573951330718756f, - 0.957357323504001f, - 0.9573194975320672f, - 0.9572816551567226f, - 0.9572437963786152f, - 0.9572059211983942f, - 0.9571680296167082f, - 0.9571301216342067f, - 0.957092197251539f, - 0.9570542564693554f, - 0.9570162992883053f, - 0.9569783257090397f, - 0.9569403357322089f, - 0.956902329358464f, - 0.9568643065884562f, - 0.956826267422837f, - 0.9567882118622583f, - 0.9567501399073719f, - 0.9567120515588305f, - 0.9566739468172865f, - 0.9566358256833929f, - 0.9565976881578028f, - 0.9565595342411699f, - 0.9565213639341477f, - 0.9564831772373904f, - 0.956444974151552f, - 0.9564067546772876f, - 0.9563685188152519f, - 0.9563302665660999f, - 0.9562919979304872f, - 0.9562537129090694f, - 0.9562154115025027f, - 0.9561770937114431f, - 0.9561387595365474f, - 0.9561004089784724f, - 0.9560620420378751f, - 0.9560236587154131f, - 0.9559852590117439f, - 0.9559468429275256f, - 0.9559084104634163f, - 0.9558699616200749f, - 0.9558314963981597f, - 0.9557930147983302f, - 0.9557545168212455f, - 0.9557160024675654f, - 0.9556774717379497f, - 0.9556389246330589f, - 0.9556003611535532f, - 0.9555617813000935f, - 0.9555231850733408f, - 0.9554845724739564f, - 0.9554459435026021f, - 0.9554072981599396f, - 0.9553686364466313f, - 0.9553299583633394f, - 0.9552912639107268f, - 0.9552525530894564f, - 0.9552138259001918f, - 0.9551750823435962f, - 0.9551363224203335f, - 0.9550975461310681f, - 0.9550587534764642f, - 0.9550199444571866f, - 0.9549811190739003f, - 0.9549422773272706f, - 0.9549034192179627f, - 0.9548645447466431f, - 0.9548256539139771f, - 0.9547867467206317f, - 0.9547478231672732f, - 0.9547088832545688f, - 0.9546699269831855f, - 0.9546309543537911f, - 0.954591965367053f, - 0.9545529600236397f, - 0.954513938324219f, - 0.9544749002694601f, - 0.9544358458600316f, - 0.9543967750966027f, - 0.9543576879798429f, - 0.9543185845104218f, - 0.9542794646890099f, - 0.9542403285162769f, - 0.9542011759928939f, - 0.9541620071195313f, - 0.9541228218968605f, - 0.954083620325553f, - 0.9540444024062804f, - 0.9540051681397148f, - 0.9539659175265283f, - 0.9539266505673936f, - 0.9538873672629833f, - 0.9538480676139709f, - 0.9538087516210293f, - 0.9537694192848326f, - 0.9537300706060545f, - 0.9536907055853694f, - 0.9536513242234516f, - 0.9536119265209759f, - 0.9535725124786176f, - 0.953533082097052f, - 0.9534936353769546f, - 0.9534541723190012f, - 0.9534146929238684f, - 0.9533751971922322f, - 0.9533356851247697f, - 0.9532961567221576f, - 0.9532566119850736f, - 0.953217050914195f, - 0.9531774735101997f, - 0.953137879773766f, - 0.9530982697055721f, - 0.9530586433062971f, - 0.9530190005766195f, - 0.9529793415172189f, - 0.9529396661287746f, - 0.9528999744119667f, - 0.9528602663674751f, - 0.9528205419959803f, - 0.9527808012981629f, - 0.952741044274704f, - 0.9527012709262846f, - 0.9526614812535863f, - 0.9526216752572909f, - 0.9525818529380804f, - 0.9525420142966373f, - 0.9525021593336441f, - 0.9524622880497837f, - 0.9524224004457393f, - 0.9523824965221945f, - 0.9523425762798328f, - 0.9523026397193384f, - 0.9522626868413955f, - 0.9522227176466886f, - 0.9521827321359029f, - 0.9521427303097232f, - 0.9521027121688351f, - 0.9520626777139242f, - 0.9520226269456766f, - 0.9519825598647784f, - 0.9519424764719164f, - 0.9519023767677771f, - 0.9518622607530478f, - 0.9518221284284158f, - 0.9517819797945688f, - 0.9517418148521947f, - 0.9517016336019816f, - 0.9516614360446183f, - 0.9516212221807933f, - 0.9515809920111957f, - 0.9515407455365149f, - 0.9515004827574407f, - 0.9514602036746626f, - 0.951419908288871f, - 0.9513795966007562f, - 0.9513392686110093f, - 0.9512989243203208f, - 0.9512585637293823f, - 0.9512181868388854f, - 0.9511777936495216f, - 0.9511373841619836f, - 0.9510969583769633f, - 0.9510565162951536f, - 0.9510160579172474f, - 0.950975583243938f, - 0.950935092275919f, - 0.950894585013884f, - 0.9508540614585271f, - 0.9508135216105429f, - 0.9507729654706258f, - 0.9507323930394708f, - 0.9506918043177731f, - 0.9506511993062281f, - 0.9506105780055318f, - 0.95056994041638f, - 0.9505292865394691f, - 0.9504886163754955f, - 0.9504479299251565f, - 0.9504072271891487f, - 0.9503665081681701f, - 0.950325772862918f, - 0.9502850212740906f, - 0.9502442534023859f, - 0.9502034692485029f, - 0.9501626688131399f, - 0.9501218520969965f, - 0.9500810191007717f, - 0.9500401698251654f, - 0.9499993042708774f, - 0.9499584224386081f, - 0.9499175243290577f, - 0.9498766099429272f, - 0.9498356792809177f, - 0.9497947323437304f, - 0.9497537691320668f, - 0.9497127896466292f, - 0.9496717938881193f, - 0.94963078185724f, - 0.9495897535546937f, - 0.9495487089811835f, - 0.9495076481374126f, - 0.9494665710240849f, - 0.9494254776419039f, - 0.9493843679915739f, - 0.949343242073799f, - 0.9493020998892844f, - 0.9492609414387346f, - 0.9492197667228551f, - 0.9491785757423514f, - 0.9491373684979292f, - 0.9490961449902947f, - 0.9490549052201539f, - 0.949013649188214f, - 0.9489723768951814f, - 0.9489310883417637f, - 0.9488897835286679f, - 0.9488484624566021f, - 0.9488071251262743f, - 0.9487657715383927f, - 0.948724401693666f, - 0.9486830155928029f, - 0.9486416132365126f, - 0.9486001946255046f, - 0.9485587597604886f, - 0.9485173086421744f, - 0.9484758412712725f, - 0.9484343576484932f, - 0.9483928577745475f, - 0.9483513416501462f, - 0.9483098092760012f, - 0.9482682606528235f, - 0.9482266957813255f, - 0.9481851146622192f, - 0.948143517296217f, - 0.948101903684032f, - 0.9480602738263769f, - 0.9480186277239653f, - 0.9479769653775104f, - 0.9479352867877265f, - 0.9478935919553274f, - 0.9478518808810278f, - 0.9478101535655422f, - 0.9477684100095857f, - 0.9477266502138736f, - 0.9476848741791213f, - 0.9476430819060448f, - 0.94760127339536f, - 0.9475594486477835f, - 0.9475176076640318f, - 0.9474757504448219f, - 0.947433876990871f, - 0.9473919873028965f, - 0.9473500813816164f, - 0.9473081592277485f, - 0.9472662208420112f, - 0.947224266225123f, - 0.9471822953778031f, - 0.9471403083007703f, - 0.9470983049947443f, - 0.9470562854604446f, - 0.9470142496985915f, - 0.9469721977099049f, - 0.9469301294951057f, - 0.9468880450549144f, - 0.9468459443900524f, - 0.9468038275012408f, - 0.9467616943892015f, - 0.9467195450546563f, - 0.9466773794983274f, - 0.9466351977209375f, - 0.9465929997232092f, - 0.9465507855058656f, - 0.9465085550696299f, - 0.9464663084152259f, - 0.9464240455433774f, - 0.9463817664548085f, - 0.9463394711502439f, - 0.946297159630408f, - 0.9462548318960259f, - 0.9462124879478228f, - 0.9461701277865245f, - 0.9461277514128565f, - 0.9460853588275454f, - 0.946042950031317f, - 0.9460005250248984f, - 0.9459580838090162f, - 0.945915626384398f, - 0.945873152751771f, - 0.9458306629118631f, - 0.9457881568654022f, - 0.9457456346131169f, - 0.9457030961557354f, - 0.9456605414939872f, - 0.9456179706286009f, - 0.9455753835603061f, - 0.9455327802898327f, - 0.9454901608179105f, - 0.9454475251452698f, - 0.9454048732726411f, - 0.9453622052007555f, - 0.9453195209303438f, - 0.9452768204621376f, - 0.9452341037968682f, - 0.945191370935268f, - 0.945148621878069f, - 0.9451058566260037f, - 0.9450630751798049f, - 0.9450202775402055f, - 0.9449774637079391f, - 0.9449346336837391f, - 0.9448917874683395f, - 0.9448489250624742f, - 0.944806046466878f, - 0.9447631516822854f, - 0.9447202407094315f, - 0.9446773135490514f, - 0.9446343702018808f, - 0.9445914106686555f, - 0.9445484349501115f, - 0.9445054430469854f, - 0.9444624349600135f, - 0.9444194106899331f, - 0.9443763702374811f, - 0.9443333136033952f, - 0.9442902407884131f, - 0.9442471517932729f, - 0.9442040466187127f, - 0.9441609252654712f, - 0.9441177877342876f, - 0.9440746340259004f, - 0.9440314641410498f, - 0.9439882780804748f, - 0.9439450758449159f, - 0.943901857435113f, - 0.9438586228518069f, - 0.9438153720957381f, - 0.9437721051676481f, - 0.9437288220682779f, - 0.9436855227983694f, - 0.9436422073586643f, - 0.943598875749905f, - 0.9435555279728338f, - 0.9435121640281936f, - 0.9434687839167274f, - 0.9434253876391784f, - 0.9433819751962904f, - 0.9433385465888069f, - 0.9432951018174724f, - 0.9432516408830312f, - 0.943208163786228f, - 0.9431646705278075f, - 0.9431211611085153f, - 0.9430776355290968f, - 0.9430340937902978f, - 0.9429905358928645f, - 0.9429469618375429f, - 0.9429033716250801f, - 0.9428597652562226f, - 0.9428161427317179f, - 0.9427725040523132f, - 0.9427288492187563f, - 0.9426851782317953f, - 0.9426414910921784f, - 0.9425977878006543f, - 0.9425540683579716f, - 0.9425103327648798f, - 0.942466581022128f, - 0.9424228131304659f, - 0.9423790290906435f, - 0.9423352289034111f, - 0.9422914125695191f, - 0.9422475800897184f, - 0.9422037314647598f, - 0.942159866695395f, - 0.9421159857823752f, - 0.9420720887264526f, - 0.9420281755283794f, - 0.9419842461889077f, - 0.9419403007087906f, - 0.9418963390887809f, - 0.9418523613296319f, - 0.9418083674320971f, - 0.9417643573969303f, - 0.9417203312248857f, - 0.9416762889167177f, - 0.9416322304731809f, - 0.9415881558950303f, - 0.9415440651830208f, - 0.9414999583379082f, - 0.9414558353604483f, - 0.9414116962513968f, - 0.9413675410115104f, - 0.9413233696415454f, - 0.9412791821422588f, - 0.9412349785144076f, - 0.9411907587587496f, - 0.941146522876042f, - 0.9411022708670431f, - 0.941058002732511f, - 0.9410137184732043f, - 0.9409694180898815f, - 0.9409251015833022f, - 0.9408807689542255f, - 0.940836420203411f, - 0.9407920553316185f, - 0.9407476743396084f, - 0.9407032772281411f, - 0.940658863997977f, - 0.9406144346498778f, - 0.9405699891846041f, - 0.9405255276029179f, - 0.9404810499055807f, - 0.9404365560933549f, - 0.9403920461670028f, - 0.940347520127287f, - 0.9403029779749705f, - 0.9402584197108165f, - 0.9402138453355885f, - 0.9401692548500502f, - 0.9401246482549659f, - 0.9400800255510996f, - 0.9400353867392162f, - 0.9399907318200801f, - 0.9399460607944571f, - 0.939901373663112f, - 0.9398566704268109f, - 0.9398119510863197f, - 0.9397672156424046f, - 0.9397224640958322f, - 0.9396776964473691f, - 0.9396329126977827f, - 0.93958811284784f, - 0.9395432968983092f, - 0.9394984648499575f, - 0.9394536167035535f, - 0.9394087524598655f, - 0.9393638721196624f, - 0.9393189756837133f, - 0.939274063152787f, - 0.9392291345276537f, - 0.9391841898090827f, - 0.9391392289978444f, - 0.9390942520947091f, - 0.9390492591004476f, - 0.9390042500158307f, - 0.9389592248416296f, - 0.9389141835786159f, - 0.9388691262275614f, - 0.938824052789238f, - 0.9387789632644179f, - 0.9387338576538742f, - 0.9386887359583792f, - 0.9386435981787065f, - 0.9385984443156292f, - 0.9385532743699212f, - 0.9385080883423563f, - 0.9384628862337091f, - 0.9384176680447536f, - 0.9383724337762651f, - 0.9383271834290183f, - 0.9382819170037887f, - 0.9382366345013521f, - 0.938191335922484f, - 0.9381460212679611f, - 0.9381006905385594f, - 0.938055343735056f, - 0.9380099808582275f, - 0.9379646019088516f, - 0.9379192068877055f, - 0.9378737957955672f, - 0.9378283686332147f, - 0.9377829254014266f, - 0.9377374661009814f, - 0.937691990732658f, - 0.9376464992972356f, - 0.9376009917954938f, - 0.9375554682282126f, - 0.9375099285961713f, - 0.9374643729001509f, - 0.9374188011409317f, - 0.9373732133192947f, - 0.9373276094360208f, - 0.9372819894918916f, - 0.9372363534876886f, - 0.9371907014241939f, - 0.9371450333021899f, - 0.9370993491224587f, - 0.9370536488857836f, - 0.9370079325929472f, - 0.9369622002447331f, - 0.9369164518419248f, - 0.9368706873853062f, - 0.9368249068756616f, - 0.9367791103137751f, - 0.9367332977004318f, - 0.9366874690364164f, - 0.9366416243225143f, - 0.936595763559511f, - 0.9365498867481924f, - 0.9365039938893444f, - 0.9364580849837536f, - 0.9364121600322064f, - 0.9363662190354899f, - 0.9363202619943911f, - 0.9362742889096978f, - 0.9362282997821972f, - 0.9361822946126779f, - 0.9361362734019276f, - 0.9360902361507354f, - 0.9360441828598898f, - 0.93599811353018f, - 0.9359520281623954f, - 0.9359059267573258f, - 0.9358598093157607f, - 0.9358136758384908f, - 0.9357675263263066f, - 0.9357213607799982f, - 0.9356751792003574f, - 0.935628981588175f, - 0.9355827679442429f, - 0.9355365382693527f, - 0.9354902925642967f, - 0.9354440308298674f, - 0.9353977530668571f, - 0.9353514592760593f, - 0.9353051494582667f, - 0.9352588236142733f, - 0.9352124817448724f, - 0.9351661238508584f, - 0.9351197499330254f, - 0.9350733599921683f, - 0.9350269540290816f, - 0.9349805320445609f, - 0.9349340940394011f, - 0.9348876400143983f, - 0.9348411699703485f, - 0.9347946839080475f, - 0.9347481818282924f, - 0.9347016637318797f, - 0.9346551296196065f, - 0.93460857949227f, - 0.9345620133506682f, - 0.9345154311955987f, - 0.9344688330278598f, - 0.9344222188482498f, - 0.9343755886575675f, - 0.9343289424566121f, - 0.9342822802461825f, - 0.9342356020270786f, - 0.9341889078000999f, - 0.9341421975660468f, - 0.9340954713257194f, - 0.9340487290799185f, - 0.9340019708294449f, - 0.9339551965751001f, - 0.9339084063176851f, - 0.933861600058002f, - 0.9338147777968525f, - 0.9337679395350391f, - 0.9337210852733645f, - 0.9336742150126311f, - 0.9336273287536425f, - 0.9335804264972017f, - 0.9335335082441127f, - 0.9334865739951791f, - 0.9334396237512053f, - 0.9333926575129956f, - 0.933345675281355f, - 0.9332986770570884f, - 0.9332516628410009f, - 0.9332046326338986f, - 0.9331575864365869f, - 0.9331105242498721f, - 0.9330634460745604f, - 0.9330163519114588f, - 0.932969241761374f, - 0.9329221156251134f, - 0.9328749735034844f, - 0.9328278153972946f, - 0.9327806413073523f, - 0.9327334512344656f, - 0.9326862451794433f, - 0.9326390231430941f, - 0.9325917851262273f, - 0.9325445311296521f, - 0.9324972611541784f, - 0.932449975200616f, - 0.9324026732697752f, - 0.9323553553624665f, - 0.9323080214795008f, - 0.9322606716216887f, - 0.9322133057898422f, - 0.9321659239847723f, - 0.9321185262072911f, - 0.932071112458211f, - 0.932023682738344f, - 0.9319762370485032f, - 0.9319287753895013f, - 0.9318812977621515f, - 0.9318338041672675f, - 0.931786294605663f, - 0.931738769078152f, - 0.931691227585549f, - 0.9316436701286684f, - 0.9315960967083254f, - 0.9315485073253349f, - 0.9315009019805123f, - 0.9314532806746735f, - 0.9314056434086343f, - 0.9313579901832111f, - 0.9313103209992203f, - 0.9312626358574788f, - 0.9312149347588036f, - 0.9311672177040121f, - 0.9311194846939218f, - 0.9310717357293509f, - 0.9310239708111171f, - 0.9309761899400392f, - 0.9309283931169358f, - 0.9308805803426258f, - 0.9308327516179286f, - 0.9307849069436637f, - 0.9307370463206509f, - 0.9306891697497102f, - 0.9306412772316621f, - 0.930593368767327f, - 0.9305454443575262f, - 0.9304975040030803f, - 0.9304495477048113f, - 0.9304015754635404f, - 0.93035358728009f, - 0.9303055831552823f, - 0.9302575630899397f, - 0.9302095270848851f, - 0.9301614751409415f, - 0.9301134072589324f, - 0.9300653234396812f, - 0.9300172236840122f, - 0.9299691079927491f, - 0.9299209763667168f, - 0.9298728288067395f, - 0.9298246653136427f, - 0.9297764858882515f, - 0.9297282905313912f, - 0.9296800792438881f, - 0.9296318520265677f, - 0.9295836088802569f, - 0.9295353498057819f, - 0.9294870748039701f, - 0.929438783875648f, - 0.9293904770216438f, - 0.9293421542427847f, - 0.9292938155398989f, - 0.9292454609138144f, - 0.9291970903653601f, - 0.9291487038953649f, - 0.9291003015046575f, - 0.9290518831940675f, - 0.9290034489644244f, - 0.9289549988165583f, - 0.9289065327512991f, - 0.9288580507694776f, - 0.9288095528719242f, - 0.9287610390594702f, - 0.9287125093329466f, - 0.928663963693185f, - 0.9286154021410173f, - 0.9285668246772756f, - 0.9285182313027923f, - 0.9284696220183998f, - 0.9284209968249313f, - 0.9283723557232197f, - 0.9283236987140988f, - 0.9282750257984019f, - 0.9282263369769633f, - 0.9281776322506172f, - 0.9281289116201982f, - 0.928080175086541f, - 0.9280314226504806f, - 0.9279826543128527f, - 0.9279338700744925f, - 0.9278850699362362f, - 0.9278362538989199f, - 0.9277874219633803f, - 0.9277385741304536f, - 0.9276897104009771f, - 0.9276408307757882f, - 0.9275919352557241f, - 0.9275430238416229f, - 0.9274940965343225f, - 0.9274451533346614f, - 0.927396194243478f, - 0.9273472192616116f, - 0.927298228389901f, - 0.9272492216291858f, - 0.9272001989803056f, - 0.9271511604441006f, - 0.9271021060214109f, - 0.9270530357130772f, - 0.9270039495199399f, - 0.9269548474428406f, - 0.9269057294826203f, - 0.9268565956401207f, - 0.9268074459161839f, - 0.9267582803116519f, - 0.9267090988273671f, - 0.9266599014641722f, - 0.9266106882229103f, - 0.9265614591044246f, - 0.9265122141095585f, - 0.9264629532391561f, - 0.9264136764940611f, - 0.9263643838751181f, - 0.9263150753831718f, - 0.9262657510190667f, - 0.9262164107836482f, - 0.926167054677762f, - 0.9261176827022533f, - 0.9260682948579684f, - 0.9260188911457533f, - 0.9259694715664549f, - 0.9259200361209197f, - 0.9258705848099948f, - 0.9258211176345275f, - 0.9257716345953656f, - 0.9257221356933567f, - 0.9256726209293492f, - 0.9256230903041914f, - 0.925573543818732f, - 0.9255239814738201f, - 0.9254744032703047f, - 0.9254248092090355f, - 0.9253751992908621f, - 0.9253255735166348f, - 0.9252759318872036f, - 0.9252262744034195f, - 0.925176601066133f, - 0.9251269118761954f, - 0.925077206834458f, - 0.9250274859417728f, - 0.9249777491989915f, - 0.9249279966069661f, - 0.9248782281665496f, - 0.9248284438785945f, - 0.9247786437439539f, - 0.924728827763481f, - 0.9246789959380295f, - 0.9246291482684532f, - 0.9245792847556062f, - 0.924529405400343f, - 0.9244795102035183f, - 0.9244295991659868f, - 0.9243796722886038f, - 0.9243297295722251f, - 0.924279771017706f, - 0.9242297966259029f, - 0.9241798063976717f, - 0.9241298003338695f, - 0.9240797784353525f, - 0.9240297407029784f, - 0.9239796871376041f, - 0.9239296177400877f, - 0.9238795325112867f, - 0.9238294314520596f, - 0.9237793145632649f, - 0.923729181845761f, - 0.9236790333004073f, - 0.9236288689280628f, - 0.9235786887295874f, - 0.9235284927058404f, - 0.9234782808576824f, - 0.9234280531859733f, - 0.9233778096915742f, - 0.9233275503753456f, - 0.9232772752381491f, - 0.9232269842808457f, - 0.9231766775042974f, - 0.9231263549093662f, - 0.9230760164969143f, - 0.9230256622678042f, - 0.9229752922228988f, - 0.9229249063630611f, - 0.9228745046891543f, - 0.9228240872020425f, - 0.922773653902589f, - 0.9227232047916584f, - 0.9226727398701149f, - 0.9226222591388231f, - 0.9225717625986485f, - 0.9225212502504557f, - 0.9224707220951107f, - 0.922420178133479f, - 0.9223696183664268f, - 0.9223190427948205f, - 0.9222684514195264f, - 0.9222178442414115f, - 0.9221672212613431f, - 0.9221165824801885f, - 0.9220659278988154f, - 0.9220152575180915f, - 0.9219645713388854f, - 0.9219138693620657f, - 0.9218631515885005f, - 0.9218124180190596f, - 0.9217616686546116f, - 0.9217109034960268f, - 0.9216601225441744f, - 0.921609325799925f, - 0.9215585132641486f, - 0.9215076849377162f, - 0.9214568408214985f, - 0.9214059809163667f, - 0.9213551052231925f, - 0.9213042137428474f, - 0.9212533064762035f, - 0.9212023834241331f, - 0.9211514445875087f, - 0.9211004899672033f, - 0.9210495195640896f, - 0.9209985333790415f, - 0.9209475314129322f, - 0.9208965136666357f, - 0.9208454801410264f, - 0.9207944308369783f, - 0.9207433657553665f, - 0.920692284897066f, - 0.9206411882629518f, - 0.9205900758538997f, - 0.9205389476707853f, - 0.9204878037144847f, - 0.9204366439858742f, - 0.9203854684858306f, - 0.9203342772152305f, - 0.9202830701749514f, - 0.9202318473658704f, - 0.9201806087888652f, - 0.920129354444814f, - 0.9200780843345949f, - 0.9200267984590864f, - 0.9199754968191672f, - 0.9199241794157165f, - 0.9198728462496134f, - 0.9198214973217378f, - 0.919770132632969f, - 0.9197187521841877f, - 0.919667355976274f, - 0.9196159440101087f, - 0.9195645162865725f, - 0.9195130728065467f, - 0.919461613570913f, - 0.9194101385805529f, - 0.9193586478363485f, - 0.9193071413391819f, - 0.9192556190899359f, - 0.9192040810894931f, - 0.919152527338737f, - 0.9191009578385503f, - 0.9190493725898172f, - 0.9189977715934213f, - 0.918946154850247f, - 0.9188945223611784f, - 0.9188428741271006f, - 0.9187912101488984f, - 0.9187395304274568f, - 0.9186878349636618f, - 0.9186361237583988f, - 0.9185843968125541f, - 0.9185326541270138f, - 0.9184808957026648f, - 0.9184291215403936f, - 0.9183773316410877f, - 0.9183255260056341f, - 0.9182737046349208f, - 0.9182218675298358f, - 0.9181700146912669f, - 0.9181181461201031f, - 0.9180662618172328f, - 0.9180143617835452f, - 0.9179624460199295f, - 0.9179105145272753f, - 0.9178585673064723f, - 0.9178066043584109f, - 0.9177546256839813f, - 0.9177026312840738f, - 0.91765062115958f, - 0.9175985953113905f, - 0.9175465537403972f, - 0.9174944964474913f, - 0.9174424234335653f, - 0.917390334699511f, - 0.9173382302462215f, - 0.9172861100745889f, - 0.9172339741855069f, - 0.9171818225798684f, - 0.9171296552585673f, - 0.9170774722224971f, - 0.9170252734725521f, - 0.9169730590096271f, - 0.9169208288346163f, - 0.916868582948415f, - 0.9168163213519179f, - 0.9167640440460212f, - 0.9167117510316201f, - 0.9166594423096108f, - 0.9166071178808896f, - 0.9165547777463531f, - 0.916502421906898f, - 0.9164500503634216f, - 0.9163976631168211f, - 0.9163452601679942f, - 0.9162928415178391f, - 0.9162404071672533f, - 0.916187957117136f, - 0.9161354913683853f, - 0.9160830099219007f, - 0.916030512778581f, - 0.9159779999393262f, - 0.9159254714050356f, - 0.9158729271766096f, - 0.9158203672549483f, - 0.9157677916409525f, - 0.9157152003355231f, - 0.9156625933395611f, - 0.9156099706539679f, - 0.9155573322796452f, - 0.9155046782174949f, - 0.9154520084684195f, - 0.915399323033321f, - 0.9153466219131026f, - 0.915293905108667f, - 0.9152411726209176f, - 0.9151884244507581f, - 0.915135660599092f, - 0.9150828810668237f, - 0.9150300858548575f, - 0.9149772749640979f, - 0.91492444839545f, - 0.9148716061498187f, - 0.9148187482281097f, - 0.9147658746312285f, - 0.9147129853600813f, - 0.9146600804155741f, - 0.9146071597986136f, - 0.9145542235101065f, - 0.9145012715509598f, - 0.914448303922081f, - 0.9143953206243775f, - 0.9143423216587572f, - 0.9142893070261282f, - 0.914236276727399f, - 0.9141832307634781f, - 0.9141301691352747f, - 0.9140770918436976f, - 0.9140239988896567f, - 0.9139708902740612f, - 0.9139177659978217f, - 0.913864626061848f, - 0.9138114704670508f, - 0.9137582992143412f, - 0.9137051123046297f, - 0.9136519097388283f, - 0.9135986915178479f, - 0.913545457642601f, - 0.9134922081139992f, - 0.9134389429329555f, - 0.9133856621003821f, - 0.9133323656171923f, - 0.913279053484299f, - 0.913225725702616f, - 0.9131723822730567f, - 0.9131190231965356f, - 0.9130656484739667f, - 0.9130122581062643f, - 0.9129588520943438f, - 0.9129054304391199f, - 0.9128519931415081f, - 0.912798540202424f, - 0.9127450716227836f, - 0.9126915874035029f, - 0.9126380875454985f, - 0.9125845720496869f, - 0.9125310409169851f, - 0.9124774941483107f, - 0.9124239317445808f, - 0.9123703537067135f, - 0.9123167600356266f, - 0.9122631507322385f, - 0.9122095257974676f, - 0.9121558852322332f, - 0.9121022290374539f, - 0.9120485572140495f, - 0.9119948697629394f, - 0.9119411666850435f, - 0.9118874479812823f, - 0.9118337136525758f, - 0.9117799636998452f, - 0.9117261981240109f, - 0.9116724169259949f, - 0.911618620106718f, - 0.9115648076671026f, - 0.9115109796080703f, - 0.9114571359305438f, - 0.9114032766354453f, - 0.911349401723698f, - 0.9112955111962249f, - 0.9112416050539492f, - 0.9111876832977952f, - 0.9111337459286861f, - 0.9110797929475466f, - 0.9110258243553008f, - 0.9109718401528738f, - 0.9109178403411904f, - 0.9108638249211759f, - 0.9108097938937557f, - 0.910755747259856f, - 0.9107016850204024f, - 0.9106476071763215f, - 0.9105935137285399f, - 0.9105394046779844f, - 0.9104852800255824f, - 0.9104311397722609f, - 0.9103769839189478f, - 0.910322812466571f, - 0.9102686254160589f, - 0.9102144227683396f, - 0.9101602045243424f, - 0.9101059706849957f, - 0.9100517212512292f, - 0.9099974562239722f, - 0.9099431756041546f, - 0.9098888793927068f, - 0.9098345675905587f, - 0.909780240198641f, - 0.9097258972178848f, - 0.9096715386492211f, - 0.9096171644935813f, - 0.9095627747518972f, - 0.9095083694251006f, - 0.909453948514124f, - 0.9093995120198993f, - 0.90934505994336f, - 0.9092905922854385f, - 0.9092361090470686f, - 0.9091816102291834f, - 0.9091270958327172f, - 0.9090725658586035f, - 0.9090180203077773f, - 0.9089634591811726f, - 0.9089088824797249f, - 0.908854290204369f, - 0.9087996823560401f, - 0.9087450589356745f, - 0.9086904199442076f, - 0.9086357653825758f, - 0.9085810952517158f, - 0.9085264095525641f, - 0.9084717082860579f, - 0.9084169914531344f, - 0.9083622590547312f, - 0.908307511091786f, - 0.9082527475652371f, - 0.9081979684760226f, - 0.9081431738250815f, - 0.9080883636133521f, - 0.9080335378417743f, - 0.9079786965112868f, - 0.9079238396228297f, - 0.9078689671773432f, - 0.907814079175767f, - 0.9077591756190418f, - 0.9077042565081084f, - 0.9076493218439079f, - 0.9075943716273812f, - 0.9075394058594705f, - 0.9074844245411169f, - 0.9074294276732632f, - 0.9073744152568511f, - 0.9073193872928236f, - 0.9072643437821236f, - 0.9072092847256942f, - 0.9071542101244788f, - 0.9070991199794209f, - 0.907044014291465f, - 0.9069888930615546f, - 0.9069337562906349f, - 0.9068786039796499f, - 0.9068234361295454f, - 0.906768252741266f, - 0.9067130538157578f, - 0.9066578393539665f, - 0.9066026093568378f, - 0.9065473638253184f, - 0.9064921027603547f, - 0.906436826162894f, - 0.9063815340338829f, - 0.9063262263742693f, - 0.9062709031850005f, - 0.9062155644670247f, - 0.9061602102212899f, - 0.906104840448745f, - 0.9060494551503381f, - 0.9059940543270186f, - 0.905938637979736f, - 0.9058832061094393f, - 0.9058277587170789f, - 0.9057722958036043f, - 0.9057168173699663f, - 0.9056613234171151f, - 0.9056058139460021f, - 0.9055502889575779f, - 0.9054947484527944f, - 0.9054391924326027f, - 0.9053836208979554f, - 0.9053280338498041f, - 0.9052724312891014f, - 0.9052168132168005f, - 0.9051611796338538f, - 0.905105530541215f, - 0.9050498659398374f, - 0.9049941858306749f, - 0.9049384902146814f, - 0.9048827790928116f, - 0.9048270524660195f, - 0.9047713103352606f, - 0.9047155527014895f, - 0.9046597795656618f, - 0.9046039909287334f, - 0.9045481867916598f, - 0.9044923671553976f, - 0.9044365320209031f, - 0.9043806813891327f, - 0.9043248152610439f, - 0.9042689336375935f, - 0.9042130365197394f, - 0.904157123908439f, - 0.9041011958046508f, - 0.9040452522093327f, - 0.9039892931234434f, - 0.9039333185479418f, - 0.9038773284837871f, - 0.9038213229319384f, - 0.9037653018933558f, - 0.9037092653689986f, - 0.9036532133598275f, - 0.9035971458668026f, - 0.9035410628908849f, - 0.9034849644330348f, - 0.9034288504942144f, - 0.9033727210753844f, - 0.903316576177507f, - 0.903260415801544f, - 0.9032042399484578f, - 0.9031480486192112f, - 0.9030918418147664f, - 0.9030356195360872f, - 0.9029793817841365f, - 0.9029231285598781f, - 0.9028668598642757f, - 0.9028105756982938f, - 0.9027542760628964f, - 0.9026979609590485f, - 0.9026416303877147f, - 0.9025852843498605f, - 0.9025289228464515f, - 0.9024725458784529f, - 0.9024161534468313f, - 0.9023597455525526f, - 0.9023033221965836f, - 0.9022468833798908f, - 0.9021904291034415f, - 0.9021339593682027f, - 0.9020774741751426f, - 0.9020209735252284f, - 0.9019644574194287f, - 0.9019079258587115f, - 0.9018513788440458f, - 0.9017948163764001f, - 0.9017382384567443f, - 0.9016816450860472f, - 0.9016250362652786f, - 0.9015684119954087f, - 0.9015117722774075f, - 0.9014551171122459f, - 0.9013984465008941f, - 0.9013417604443237f, - 0.9012850589435055f, - 0.9012283419994113f, - 0.9011716096130131f, - 0.9011148617852828f, - 0.9010580985171929f, - 0.9010013198097157f, - 0.9009445256638244f, - 0.900887716080492f, - 0.9008308910606921f, - 0.9007740506053981f, - 0.9007171947155843f, - 0.9006603233922245f, - 0.9006034366362935f, - 0.9005465344487658f, - 0.9004896168306165f, - 0.900432683782821f, - 0.9003757353063547f, - 0.9003187714021935f, - 0.9002617920713133f, - 0.9002047973146906f, - 0.9001477871333018f, - 0.900090761528124f, - 0.900033720500134f, - 0.8999766640503094f, - 0.8999195921796278f, - 0.899862504889067f, - 0.8998054021796055f, - 0.8997482840522213f, - 0.8996911505078936f, - 0.8996340015476009f, - 0.8995768371723227f, - 0.8995196573830384f, - 0.8994624621807279f, - 0.8994052515663712f, - 0.8993480255409482f, - 0.8992907841054399f, - 0.8992335272608268f, - 0.8991762550080905f, - 0.8991189673482116f, - 0.8990616642821725f, - 0.8990043458109543f, - 0.8989470119355397f, - 0.8988896626569108f, - 0.8988322979760506f, - 0.8987749178939416f, - 0.8987175224115673f, - 0.8986601115299109f, - 0.8986026852499566f, - 0.8985452435726876f, - 0.8984877864990888f, - 0.8984303140301446f, - 0.8983728261668396f, - 0.898315322910159f, - 0.898257804261088f, - 0.8982002702206123f, - 0.8981427207897175f, - 0.8980851559693899f, - 0.8980275757606156f, - 0.8979699801643817f, - 0.8979123691816745f, - 0.8978547428134817f, - 0.8977971010607901f, - 0.8977394439245879f, - 0.897681771405863f, - 0.8976240835056033f, - 0.8975663802247975f, - 0.8975086615644342f, - 0.8974509275255026f, - 0.8973931781089917f, - 0.8973354133158912f, - 0.8972776331471907f, - 0.8972198376038806f, - 0.8971620266869507f, - 0.897104200397392f, - 0.8970463587361951f, - 0.8969885017043514f, - 0.8969306293028518f, - 0.8968727415326884f, - 0.8968148383948527f, - 0.8967569198903371f, - 0.8966989860201341f, - 0.896641036785236f, - 0.8965830721866361f, - 0.8965250922253273f, - 0.8964670969023035f, - 0.896409086218558f, - 0.8963510601750849f, - 0.8962930187728788f, - 0.8962349620129337f, - 0.8961768898962449f, - 0.896118802423807f, - 0.8960606995966158f, - 0.8960025814156664f, - 0.8959444478819548f, - 0.8958862989964771f, - 0.8958281347602299f, - 0.8957699551742094f, - 0.895711760239413f, - 0.8956535499568373f, - 0.89559532432748f, - 0.8955370833523391f, - 0.8954788270324118f, - 0.895420555368697f, - 0.8953622683621927f, - 0.8953039660138981f, - 0.8952456483248117f, - 0.8951873152959331f, - 0.8951289669282615f, - 0.8950706032227971f, - 0.8950122241805395f, - 0.8949538298024893f, - 0.8948954200896472f, - 0.8948369950430136f, - 0.8947785546635901f, - 0.8947200989523776f, - 0.8946616279103781f, - 0.8946031415385931f, - 0.8945446398380251f, - 0.8944861228096762f, - 0.8944275904545494f, - 0.8943690427736476f, - 0.8943104797679736f, - 0.8942519014385314f, - 0.8941933077863242f, - 0.8941346988123565f, - 0.894076074517632f, - 0.8940174349031558f, - 0.8939587799699322f, - 0.8939001097189665f, - 0.8938414241512639f, - 0.89378272326783f, - 0.8937240070696705f, - 0.8936652755577917f, - 0.8936065287331997f, - 0.8935477665969013f, - 0.8934889891499035f, - 0.893430196393213f, - 0.8933713883278376f, - 0.8933125649547847f, - 0.8932537262750626f, - 0.8931948722896789f, - 0.8931360029996427f, - 0.893077118405962f, - 0.8930182185096465f, - 0.8929593033117048f, - 0.8929003728131469f, - 0.8928414270149823f, - 0.8927824659182209f, - 0.8927234895238733f, - 0.8926644978329498f, - 0.8926054908464613f, - 0.8925464685654189f, - 0.8924874309908339f, - 0.8924283781237179f, - 0.8923693099650828f, - 0.8923102265159405f, - 0.8922511277773036f, - 0.8921920137501846f, - 0.8921328844355966f, - 0.8920737398345526f, - 0.8920145799480661f, - 0.8919554047771507f, - 0.8918962143228206f, - 0.8918370085860896f, - 0.8917777875679727f, - 0.891718551269484f, - 0.891659299691639f, - 0.8916000328354526f, - 0.8915407507019408f, - 0.891481453292119f, - 0.8914221406070032f, - 0.8913628126476099f, - 0.8913034694149558f, - 0.8912441109100573f, - 0.8911847371339319f, - 0.8911253480875966f, - 0.8910659437720695f, - 0.8910065241883679f, - 0.8909470893375104f, - 0.8908876392205152f, - 0.890828173838401f, - 0.8907686931921865f, - 0.8907091972828912f, - 0.8906496861115346f, - 0.8905901596791361f, - 0.890530617986716f, - 0.890471061035294f, - 0.8904114888258914f, - 0.8903519013595281f, - 0.8902922986372258f, - 0.8902326806600052f, - 0.8901730474288884f, - 0.8901133989448967f, - 0.8900537352090525f, - 0.8899940562223779f, - 0.8899343619858956f, - 0.8898746525006286f, - 0.8898149277675996f, - 0.8897551877878325f, - 0.8896954325623504f, - 0.8896356620921776f, - 0.8895758763783379f, - 0.8895160754218561f, - 0.8894562592237564f, - 0.8893964277850642f, - 0.8893365811068044f, - 0.8892767191900026f, - 0.8892168420356843f, - 0.8891569496448759f, - 0.8890970420186034f, - 0.889037119157893f, - 0.888977181063772f, - 0.888917227737267f, - 0.8888572591794056f, - 0.888797275391215f, - 0.8887372763737235f, - 0.8886772621279585f, - 0.888617232654949f, - 0.888557187955723f, - 0.8884971280313098f, - 0.8884370528827384f, - 0.888376962511038f, - 0.8883168569172386f, - 0.8882567361023695f, - 0.8881966000674616f, - 0.8881364488135446f, - 0.8880762823416496f, - 0.8880161006528073f, - 0.8879559037480492f, - 0.8878956916284065f, - 0.8878354642949111f, - 0.8877752217485947f, - 0.8877149639904898f, - 0.8876546910216289f, - 0.8875944028430445f, - 0.88753409945577f, - 0.8874737808608383f, - 0.8874134470592833f, - 0.8873530980521385f, - 0.8872927338404382f, - 0.8872323544252164f, - 0.8871719598075082f, - 0.887111549988348f, - 0.8870511249687709f, - 0.8869906847498127f, - 0.8869302293325085f, - 0.8868697587178946f, - 0.886809272907007f, - 0.8867487719008821f, - 0.8866882557005565f, - 0.8866277243070672f, - 0.8865671777214514f, - 0.8865066159447464f, - 0.8864460389779902f, - 0.8863854468222205f, - 0.8863248394784757f, - 0.8862642169477941f, - 0.8862035792312148f, - 0.8861429263297764f, - 0.8860822582445185f, - 0.8860215749764804f, - 0.885960876526702f, - 0.8859001628962232f, - 0.8858394340860847f, - 0.8857786900973266f, - 0.8857179309309902f, - 0.8856571565881161f, - 0.8855963670697458f, - 0.8855355623769212f, - 0.8854747425106839f, - 0.8854139074720763f, - 0.8853530572621403f, - 0.8852921918819191f, - 0.8852313113324553f, - 0.8851704156147921f, - 0.8851095047299729f, - 0.8850485786790416f, - 0.8849876374630419f, - 0.8849266810830182f, - 0.8848657095400148f, - 0.8848047228350765f, - 0.8847437209692485f, - 0.8846827039435756f, - 0.8846216717591039f, - 0.8845606244168785f, - 0.8844995619179461f, - 0.8844384842633525f, - 0.8843773914541445f, - 0.8843162834913686f, - 0.8842551603760724f, - 0.8841940221093026f, - 0.8841328686921074f, - 0.8840717001255342f, - 0.8840105164106313f, - 0.883949317548447f, - 0.88388810354003f, - 0.883826874386429f, - 0.8837656300886935f, - 0.8837043706478727f, - 0.883643096065016f, - 0.8835818063411738f, - 0.8835205014773959f, - 0.883459181474733f, - 0.8833978463342356f, - 0.8833364960569547f, - 0.8832751306439418f, - 0.883213750096248f, - 0.8831523544149253f, - 0.8830909436010256f, - 0.8830295176556012f, - 0.8829680765797044f, - 0.8829066203743884f, - 0.8828451490407058f, - 0.8827836625797102f, - 0.8827221609924548f, - 0.8826606442799937f, - 0.8825991124433812f, - 0.882537565483671f, - 0.8824760034019185f, - 0.8824144261991776f, - 0.8823528338765042f, - 0.8822912264349533f, - 0.8822296038755807f, - 0.8821679661994419f, - 0.8821063134075936f, - 0.8820446455010917f, - 0.8819829624809934f, - 0.881921264348355f, - 0.8818595511042341f, - 0.8817978227496881f, - 0.8817360792857746f, - 0.8816743207135517f, - 0.8816125470340772f, - 0.8815507582484102f, - 0.881488954357609f, - 0.8814271353627328f, - 0.8813653012648406f, - 0.8813034520649923f, - 0.8812415877642473f, - 0.8811797083636658f, - 0.8811178138643081f, - 0.8810559042672345f, - 0.8809939795735062f, - 0.880932039784184f, - 0.8808700849003294f, - 0.8808081149230037f, - 0.880746129853269f, - 0.8806841296921872f, - 0.8806221144408211f, - 0.8805600841002326f, - 0.8804980386714851f, - 0.8804359781556416f, - 0.8803739025537652f, - 0.8803118118669203f, - 0.8802497060961699f, - 0.880187585242579f, - 0.8801254493072113f, - 0.8800632982911321f, - 0.8800011321954057f, - 0.879938951021098f, - 0.8798767547692737f, - 0.8798145434409993f, - 0.87975231703734f, - 0.8796900755593628f, - 0.8796278190081336f, - 0.8795655473847193f, - 0.8795032606901871f, - 0.879440958925604f, - 0.879378642092038f, - 0.8793163101905562f, - 0.8792539632222272f, - 0.8791916011881189f, - 0.8791292240893002f, - 0.8790668319268395f, - 0.8790044247018065f, - 0.8789420024152699f, - 0.8788795650682995f, - 0.8788171126619654f, - 0.8787546451973375f, - 0.8786921626754859f, - 0.8786296650974817f, - 0.8785671524643954f, - 0.8785046247772985f, - 0.878442082037262f, - 0.8783795242453579f, - 0.8783169514026578f, - 0.8782543635102342f, - 0.8781917605691594f, - 0.8781291425805058f, - 0.8780665095453466f, - 0.8780038614647551f, - 0.8779411983398044f, - 0.8778785201715689f, - 0.8778158269611217f, - 0.8777531187095378f, - 0.877690395417891f, - 0.8776276570872567f, - 0.8775649037187093f, - 0.8775021353133247f, - 0.8774393518721778f, - 0.8773765533963446f, - 0.8773137398869014f, - 0.8772509113449242f, - 0.8771880677714897f, - 0.8771252091676746f, - 0.877062335534556f, - 0.8769994468732112f, - 0.8769365431847179f, - 0.8768736244701537f, - 0.8768106907305971f, - 0.8767477419671259f, - 0.8766847781808192f, - 0.8766217993727555f, - 0.8765588055440142f, - 0.8764957966956747f, - 0.8764327728288163f, - 0.8763697339445193f, - 0.8763066800438635f, - 0.8762436111279297f, - 0.876180527197798f, - 0.8761174282545501f, - 0.8760543142992665f, - 0.875991185333029f, - 0.875928041356919f, - 0.875864882372019f, - 0.8758017083794106f, - 0.8757385193801767f, - 0.8756753153753999f, - 0.8756120963661629f, - 0.8755488623535495f, - 0.8754856133386425f, - 0.8754223493225263f, - 0.8753590703062845f, - 0.8752957762910017f, - 0.875232467277762f, - 0.8751691432676507f, - 0.8751058042617523f, - 0.8750424502611525f, - 0.8749790812669368f, - 0.8749156972801907f, - 0.8748522983020007f, - 0.8747888843334528f, - 0.8747254553756338f, - 0.8746620114296303f, - 0.8745985524965298f, - 0.8745350785774191f, - 0.8744715896733863f, - 0.8744080857855189f, - 0.8743445669149051f, - 0.8742810330626336f, - 0.8742174842297926f, - 0.8741539204174714f, - 0.8740903416267588f, - 0.8740267478587445f, - 0.8739631391145177f, - 0.873899515395169f, - 0.8738358767017879f, - 0.8737722230354653f, - 0.8737085543972916f, - 0.873644870788358f, - 0.8735811722097553f, - 0.8735174586625752f, - 0.8734537301479098f, - 0.8733899866668505f, - 0.8733262282204899f, - 0.87326245480992f, - 0.8731986664362342f, - 0.8731348631005251f, - 0.8730710448038859f, - 0.8730072115474102f, - 0.8729433633321918f, - 0.8728795001593248f, - 0.8728156220299033f, - 0.872751728945022f, - 0.8726878209057753f, - 0.8726238979132589f, - 0.8725599599685676f, - 0.8724960070727973f, - 0.8724320392270434f, - 0.8723680564324023f, - 0.8723040586899702f, - 0.8722400460008438f, - 0.8721760183661198f, - 0.8721119757868955f, - 0.8720479182642678f, - 0.8719838457993346f, - 0.8719197583931941f, - 0.8718556560469439f, - 0.8717915387616827f, - 0.8717274065385089f, - 0.8716632593785216f, - 0.8715990972828197f, - 0.8715349202525029f, - 0.8714707282886706f, - 0.8714065213924229f, - 0.8713422995648596f, - 0.8712780628070818f, - 0.8712138111201895f, - 0.8711495445052838f, - 0.8710852629634663f, - 0.8710209664958379f, - 0.870956655103501f, - 0.8708923287875566f, - 0.8708279875491077f, - 0.8707636313892564f, - 0.8706992603091057f, - 0.8706348743097582f, - 0.8705704733923175f, - 0.8705060575578868f, - 0.8704416268075701f, - 0.8703771811424711f, - 0.8703127205636945f, - 0.8702482450723443f, - 0.8701837546695257f, - 0.8701192493563437f, - 0.870054729133903f, - 0.86999019400331f, - 0.8699256439656697f, - 0.8698610790220889f, - 0.8697964991736731f, - 0.8697319044215296f, - 0.8696672947667646f, - 0.8696026702104855f, - 0.8695380307537999f, - 0.8694733763978146f, - 0.8694087071436384f, - 0.8693440229923785f, - 0.8692793239451438f, - 0.8692146100030426f, - 0.8691498811671841f, - 0.8690851374386769f, - 0.8690203788186309f, - 0.8689556053081554f, - 0.8688908169083602f, - 0.8688260136203559f, - 0.8687611954452523f, - 0.8686963623841606f, - 0.8686315144381912f, - 0.8685666516084557f, - 0.868501773896065f, - 0.8684368813021313f, - 0.868371973827766f, - 0.8683070514740818f, - 0.8682421142421906f, - 0.8681771621332055f, - 0.8681121951482392f, - 0.8680472132884048f, - 0.8679822165548163f, - 0.8679172049485867f, - 0.8678521784708305f, - 0.8677871371226615f, - 0.8677220809051945f, - 0.867657009819544f, - 0.867591923866825f, - 0.8675268230481528f, - 0.867461707364643f, - 0.8673965768174111f, - 0.8673314314075731f, - 0.8672662711362455f, - 0.8672010960045444f, - 0.8671359060135871f, - 0.8670707011644901f, - 0.8670054814583711f, - 0.8669402468963472f, - 0.8668749974795364f, - 0.8668097332090567f, - 0.8667444540860266f, - 0.8666791601115642f, - 0.8666138512867888f, - 0.8665485276128189f, - 0.8664831890907742f, - 0.8664178357217742f, - 0.8663524675069385f, - 0.8662870844473876f, - 0.8662216865442411f, - 0.8661562737986205f, - 0.8660908462116459f, - 0.8660254037844387f, - 0.8659599465181201f, - 0.865894474413812f, - 0.8658289874726357f, - 0.8657634856957138f, - 0.8656979690841684f, - 0.865632437639122f, - 0.865566891361698f, - 0.8655013302530189f, - 0.8654357543142085f, - 0.8653701635463901f, - 0.865304557950688f, - 0.8652389375282258f, - 0.8651733022801283f, - 0.8651076522075198f, - 0.8650419873115257f, - 0.8649763075932706f, - 0.8649106130538802f, - 0.8648449036944803f, - 0.8647791795161965f, - 0.8647134405201551f, - 0.8646476867074826f, - 0.8645819180793053f, - 0.8645161346367507f, - 0.8644503363809455f, - 0.8643845233130175f, - 0.8643186954340942f, - 0.8642528527453034f, - 0.8641869952477736f, - 0.864121122942633f, - 0.8640552358310103f, - 0.8639893339140349f, - 0.8639234171928354f, - 0.8638574856685417f, - 0.8637915393422833f, - 0.8637255782151902f, - 0.8636596022883927f, - 0.8635936115630213f, - 0.8635276060402065f, - 0.8634615857210798f, - 0.8633955506067718f, - 0.8633295006984142f, - 0.8632634359971392f, - 0.8631973565040781f, - 0.8631312622203638f, - 0.8630651531471283f, - 0.8629990292855048f, - 0.8629328906366257f, - 0.8628667372016251f, - 0.8628005689816357f, - 0.862734385977792f, - 0.8626681881912273f, - 0.8626019756230765f, - 0.8625357482744738f, - 0.8624695061465539f, - 0.8624032492404523f, - 0.8623369775573039f, - 0.8622706910982445f, - 0.8622043898644095f, - 0.8621380738569355f, - 0.8620717430769582f, - 0.8620053975256148f, - 0.8619390372040415f, - 0.861872662113376f, - 0.8618062722547549f, - 0.8617398676293165f, - 0.8616734482381982f, - 0.861607014082538f, - 0.8615405651634747f, - 0.8614741014821462f, - 0.8614076230396919f, - 0.8613411298372505f, - 0.8612746218759618f, - 0.861208099156965f, - 0.8611415616814002f, - 0.8610750094504072f, - 0.8610084424651268f, - 0.860941860726699f, - 0.8608752642362651f, - 0.8608086529949663f, - 0.8607420270039436f, - 0.860675386264339f, - 0.860608730777294f, - 0.8605420605439512f, - 0.8604753755654523f, - 0.8604086758429407f, - 0.8603419613775585f, - 0.8602752321704494f, - 0.8602084882227565f, - 0.8601417295356236f, - 0.8600749561101947f, - 0.8600081679476136f, - 0.8599413650490251f, - 0.8598745474155733f, - 0.8598077150484038f, - 0.8597408679486611f, - 0.8596740061174911f, - 0.8596071295560391f, - 0.8595402382654513f, - 0.8594733322468736f, - 0.8594064115014528f, - 0.859339476030335f, - 0.8592725258346674f, - 0.8592055609155975f, - 0.8591385812742722f, - 0.8590715869118397f, - 0.8590045778294474f, - 0.8589375540282439f, - 0.8588705155093775f, - 0.8588034622739966f, - 0.8587363943232507f, - 0.8586693116582884f, - 0.8586022142802596f, - 0.8585351021903137f, - 0.8584679753896008f, - 0.858400833879271f, - 0.8583336776604751f, - 0.8582665067343632f, - 0.8581993211020867f, - 0.8581321207647966f, - 0.8580649057236447f, - 0.8579976759797822f, - 0.8579304315343614f, - 0.8578631723885344f, - 0.8577958985434538f, - 0.8577286100002721f, - 0.8576613067601424f, - 0.8575939888242181f, - 0.8575266561936522f, - 0.857459308869599f, - 0.857391946853212f, - 0.8573245701456458f, - 0.8572571787480545f, - 0.8571897726615932f, - 0.8571223518874166f, - 0.8570549164266803f, - 0.8569874662805392f, - 0.8569200014501497f, - 0.8568525219366673f, - 0.8567850277412483f, - 0.8567175188650497f, - 0.8566499953092275f, - 0.8565824570749394f, - 0.856514904163342f, - 0.8564473365755934f, - 0.8563797543128508f, - 0.8563121573762726f, - 0.8562445457670169f, - 0.8561769194862424f, - 0.8561092785351074f, - 0.8560416229147715f, - 0.8559739526263934f, - 0.8559062676711331f, - 0.8558385680501499f, - 0.8557708537646043f, - 0.8557031248156562f, - 0.8556353812044661f, - 0.8555676229321952f, - 0.855499850000004f, - 0.8554320624090541f, - 0.8553642601605067f, - 0.8552964432555241f, - 0.8552286116952678f, - 0.8551607654809001f, - 0.8550929046135841f, - 0.855025029094482f, - 0.8549571389247571f, - 0.8548892341055725f, - 0.8548213146380921f, - 0.854753380523479f, - 0.854685431762898f, - 0.8546174683575128f, - 0.8545494903084884f, - 0.8544814976169891f, - 0.8544134902841801f, - 0.8543454683112272f, - 0.8542774316992952f, - 0.8542093804495503f, - 0.8541413145631583f, - 0.8540732340412859f, - 0.8540051388850991f, - 0.8539370290957652f, - 0.8538689046744508f, - 0.8538007656223235f, - 0.8537326119405507f, - 0.8536644436303005f, - 0.8535962606927403f, - 0.8535280631290388f, - 0.8534598509403648f, - 0.8533916241278866f, - 0.8533233826927737f, - 0.853255126636195f, - 0.8531868559593203f, - 0.8531185706633192f, - 0.8530502707493621f, - 0.852981956218619f, - 0.8529136270722604f, - 0.8528452833114574f, - 0.8527769249373807f, - 0.8527085519512019f, - 0.8526401643540923f, - 0.852571762147224f, - 0.8525033453317686f, - 0.852434913908899f, - 0.8523664678797873f, - 0.8522980072456066f, - 0.8522295320075296f, - 0.8521610421667299f, - 0.8520925377243809f, - 0.8520240186816567f, - 0.8519554850397308f, - 0.8518869367997779f, - 0.8518183739629727f, - 0.8517497965304894f, - 0.8516812045035039f, - 0.8516125978831908f, - 0.851543976670726f, - 0.851475340867285f, - 0.8514066904740444f, - 0.85133802549218f, - 0.8512693459228686f, - 0.8512006517672868f, - 0.8511319430266118f, - 0.851063219702021f, - 0.8509944817946917f, - 0.8509257293058022f, - 0.8508569622365298f, - 0.8507881805880536f, - 0.8507193843615515f, - 0.8506505735582028f, - 0.8505817481791862f, - 0.8505129082256813f, - 0.8504440536988672f, - 0.8503751845999242f, - 0.850306300930032f, - 0.8502374026903713f, - 0.8501684898821221f, - 0.8500995625064659f, - 0.850030620564583f, - 0.8499616640576553f, - 0.8498926929868639f, - 0.8498237073533911f, - 0.8497547071584183f, - 0.8496856924031285f, - 0.8496166630887039f, - 0.849547619216327f, - 0.8494785607871813f, - 0.8494094878024501f, - 0.8493404002633166f, - 0.849271298170965f, - 0.8492021815265789f, - 0.8491330503313431f, - 0.8490639045864417f, - 0.8489947442930599f, - 0.8489255694523822f, - 0.8488563800655945f, - 0.8487871761338819f, - 0.8487179576584305f, - 0.848648724640426f, - 0.8485794770810547f, - 0.8485102149815037f, - 0.8484409383429592f, - 0.8483716471666086f, - 0.8483023414536388f, - 0.8482330212052378f, - 0.8481636864225929f, - 0.8480943371068926f, - 0.8480249732593248f, - 0.8479555948810784f, - 0.8478862019733416f, - 0.8478167945373042f, - 0.8477473725741548f, - 0.8476779360850831f, - 0.8476084850712793f, - 0.8475390195339328f, - 0.8474695394742344f, - 0.8474000448933743f, - 0.8473305357925435f, - 0.8472610121729326f, - 0.8471914740357335f, - 0.847121921382137f, - 0.8470523542133356f, - 0.8469827725305207f, - 0.846913176334885f, - 0.8468435656276209f, - 0.8467739404099207f, - 0.8467043006829782f, - 0.8466346464479859f, - 0.8465649777061379f, - 0.8464952944586276f, - 0.8464255967066493f, - 0.8463558844513968f, - 0.8462861576940651f, - 0.8462164164358486f, - 0.8461466606779425f, - 0.8460768904215418f, - 0.8460071056678422f, - 0.8459373064180395f, - 0.8458674926733295f, - 0.8457976644349088f, - 0.8457278217039732f, - 0.8456579644817203f, - 0.8455880927693463f, - 0.845518206568049f, - 0.8454483058790254f, - 0.8453783907034738f, - 0.8453084610425916f, - 0.8452385168975772f, - 0.8451685582696296f, - 0.8450985851599467f, - 0.8450285975697281f, - 0.8449585955001726f, - 0.84488857895248f, - 0.8448185479278497f, - 0.844748502427482f, - 0.8446784424525767f, - 0.8446083680043348f, - 0.8445382790839564f, - 0.844468175692643f, - 0.8443980578315953f, - 0.844327925502015f, - 0.844257778705104f, - 0.8441876174420638f, - 0.8441174417140972f, - 0.8440472515224061f, - 0.8439770468681933f, - 0.843906827752662f, - 0.843836594177015f, - 0.843766346142456f, - 0.8436960836501886f, - 0.8436258067014168f, - 0.8435555152973446f, - 0.8434852094391767f, - 0.8434148891281175f, - 0.8433445543653721f, - 0.8432742051521455f, - 0.8432038414896433f, - 0.843133463379071f, - 0.8430630708216348f, - 0.8429926638185403f, - 0.8429222423709947f, - 0.8428518064802037f, - 0.8427813561473751f, - 0.8427108913737154f, - 0.8426404121604322f, - 0.8425699185087334f, - 0.8424994104198266f, - 0.8424288878949201f, - 0.8423583509352219f, - 0.8422877995419413f, - 0.8422172337162865f, - 0.8421466534594673f, - 0.8420760587726923f, - 0.8420054496571718f, - 0.8419348261141153f, - 0.8418641881447329f, - 0.8417935357502353f, - 0.8417228689318327f, - 0.8416521876907364f, - 0.8415814920281569f, - 0.8415107819453062f, - 0.8414400574433953f, - 0.8413693185236366f, - 0.8412985651872418f, - 0.8412277974354235f, - 0.841157015269394f, - 0.8410862186903665f, - 0.8410154076995536f, - 0.8409445822981692f, - 0.8408737424874263f, - 0.8408028882685392f, - 0.8407320196427215f, - 0.8406611366111881f, - 0.8405902391751532f, - 0.8405193273358313f, - 0.8404484010944382f, - 0.8403774604521885f, - 0.8403065054102984f, - 0.840235535969983f, - 0.8401645521324589f, - 0.840093553898942f, - 0.840022541270649f, - 0.839951514248797f, - 0.8398804728346023f, - 0.839809417029283f, - 0.839738346834056f, - 0.8396672622501394f, - 0.839596163278751f, - 0.8395250499211093f, - 0.8394539221784325f, - 0.8393827800519398f, - 0.8393116235428497f, - 0.8392404526523817f, - 0.8391692673817553f, - 0.8390980677321902f, - 0.8390268537049066f, - 0.8389556253011242f, - 0.8388843825220641f, - 0.8388131253689466f, - 0.8387418538429929f, - 0.838670567945424f, - 0.8385992676774617f, - 0.8385279530403272f, - 0.8384566240352431f, - 0.838385280663431f, - 0.8383139229261136f, - 0.8382425508245138f, - 0.8381711643598542f, - 0.8380997635333584f, - 0.8380283483462493f, - 0.837956918799751f, - 0.8378854748950871f, - 0.8378140166334822f, - 0.8377425440161606f, - 0.8376710570443464f, - 0.8375995557192653f, - 0.8375280400421418f, - 0.8374565100142018f, - 0.8373849656366705f, - 0.8373134069107744f, - 0.837241833837739f, - 0.8371702464187912f, - 0.8370986446551572f, - 0.8370270285480642f, - 0.8369553980987391f, - 0.8368837533084095f, - 0.8368120941783027f, - 0.8367404207096469f, - 0.8366687329036699f, - 0.8365970307616002f, - 0.8365253142846666f, - 0.8364535834740975f, - 0.8363818383311225f, - 0.8363100788569703f, - 0.8362383050528711f, - 0.8361665169200543f, - 0.8360947144597504f, - 0.8360228976731892f, - 0.8359510665616016f, - 0.8358792211262183f, - 0.8358073613682702f, - 0.835735487288989f, - 0.8356635988896058f, - 0.8355916961713529f, - 0.8355197791354617f, - 0.8354478477831652f, - 0.8353759021156951f, - 0.8353039421342849f, - 0.8352319678401672f, - 0.8351599792345755f, - 0.835087976318743f, - 0.8350159590939039f, - 0.8349439275612917f, - 0.834871881722141f, - 0.834799821577686f, - 0.8347277471291618f, - 0.8346556583778029f, - 0.8345835553248451f, - 0.8345114379715233f, - 0.8344393063190736f, - 0.8343671603687318f, - 0.8342950001217341f, - 0.834222825579317f, - 0.8341506367427169f, - 0.8340784336131711f, - 0.8340062161919171f, - 0.8339339844801914f, - 0.8338617384792324f, - 0.8337894781902776f, - 0.8337172036145657f, - 0.8336449147533345f, - 0.833572611607823f, - 0.8335002941792699f, - 0.8334279624689146f, - 0.833355616477996f, - 0.8332832562077545f, - 0.833210881659429f, - 0.8331384928342604f, - 0.833066089733489f, - 0.8329936723583549f, - 0.8329212407100995f, - 0.8328487947899635f, - 0.8327763345991887f, - 0.832703860139016f, - 0.832631371410688f, - 0.832558868415446f, - 0.8324863511545331f, - 0.8324138196291911f, - 0.8323412738406633f, - 0.8322687137901928f, - 0.8321961394790226f, - 0.8321235509083965f, - 0.832050948079558f, - 0.8319783309937515f, - 0.8319056996522208f, - 0.831833054056211f, - 0.8317603942069663f, - 0.8316877201057322f, - 0.8316150317537534f, - 0.831542329152276f, - 0.8314696123025453f, - 0.8313968812058075f, - 0.8313241358633087f, - 0.8312513762762953f, - 0.8311786024460143f, - 0.8311058143737123f, - 0.831033012060637f, - 0.8309601955080352f, - 0.8308873647171553f, - 0.8308145196892446f, - 0.8307416604255519f, - 0.8306687869273248f, - 0.8305958991958129f, - 0.8305229972322643f, - 0.8304500810379286f, - 0.8303771506140553f, - 0.8303042059618937f, - 0.8302312470826939f, - 0.8301582739777059f, - 0.8300852866481804f, - 0.8300122850953675f, - 0.8299392693205185f, - 0.8298662393248842f, - 0.8297931951097163f, - 0.8297201366762659f, - 0.8296470640257851f, - 0.8295739771595263f, - 0.8295008760787412f, - 0.829427760784683f, - 0.829354631278604f, - 0.8292814875617577f, - 0.8292083296353968f, - 0.8291351575007755f, - 0.829061971159147f, - 0.8289887706117659f, - 0.8289155558598859f, - 0.828842326904762f, - 0.8287690837476486f, - 0.8286958263898008f, - 0.828622554832474f, - 0.8285492690769235f, - 0.8284759691244054f, - 0.8284026549761753f, - 0.8283293266334892f, - 0.8282559840976043f, - 0.8281826273697765f, - 0.8281092564512634f, - 0.8280358713433217f, - 0.8279624720472092f, - 0.8278890585641833f, - 0.8278156308955023f, - 0.8277421890424237f, - 0.8276687330062067f, - 0.8275952627881092f, - 0.8275217783893908f, - 0.8274482798113101f, - 0.8273747670551268f, - 0.8273012401221002f, - 0.8272276990134906f, - 0.8271541437305575f, - 0.827080574274562f, - 0.8270069906467641f, - 0.8269333928484247f, - 0.8268597808808054f, - 0.8267861547451667f, - 0.826712514442771f, - 0.8266388599748794f, - 0.8265651913427546f, - 0.8264915085476582f, - 0.8264178115908534f, - 0.8263441004736024f, - 0.8262703751971687f, - 0.8261966357628152f, - 0.8261228821718055f, - 0.8260491144254036f, - 0.8259753325248731f, - 0.8259015364714786f, - 0.8258277262664843f, - 0.825753901911155f, - 0.8256800634067557f, - 0.8256062107545517f, - 0.8255323439558081f, - 0.825458463011791f, - 0.825384567923766f, - 0.8253106586929997f, - 0.8252367353207578f, - 0.8251627978083078f, - 0.8250888461569158f, - 0.8250148803678498f, - 0.8249409004423764f, - 0.8248669063817635f, - 0.8247928981872792f, - 0.8247188758601912f, - 0.8246448394017684f, - 0.8245707888132786f, - 0.8244967240959915f, - 0.8244226452511755f, - 0.8243485522801002f, - 0.8242744451840354f, - 0.8242003239642504f, - 0.8241261886220158f, - 0.8240520391586014f, - 0.823977875575278f, - 0.8239036978733163f, - 0.8238295060539874f, - 0.8237553001185624f, - 0.823681080068313f, - 0.8236068459045105f, - 0.8235325976284276f, - 0.8234583352413358f, - 0.8233840587445079f, - 0.823309768139217f, - 0.8232354634267351f, - 0.8231611446083364f, - 0.8230868116852936f, - 0.8230124646588809f, - 0.8229381035303717f, - 0.8228637283010407f, - 0.8227893389721617f, - 0.82271493554501f, - 0.8226405180208598f, - 0.8225660864009866f, - 0.822491640686666f, - 0.822417180879173f, - 0.8223427069797842f, - 0.822268218989775f, - 0.8221937169104222f, - 0.8221192007430019f, - 0.8220446704887916f, - 0.8219701261490678f, - 0.8218955677251079f, - 0.8218209952181895f, - 0.8217464086295903f, - 0.8216718079605886f, - 0.8215971932124622f, - 0.8215225643864901f, - 0.8214479214839505f, - 0.8213732645061229f, - 0.8212985934542862f, - 0.8212239083297201f, - 0.8211492091337041f, - 0.8210744958675185f, - 0.8209997685324428f, - 0.8209250271297582f, - 0.8208502716607449f, - 0.820775502126684f, - 0.8207007185288566f, - 0.820625920868544f, - 0.8205511091470282f, - 0.8204762833655905f, - 0.8204014435255137f, - 0.8203265896280796f, - 0.8202517216745712f, - 0.8201768396662708f, - 0.8201019436044622f, - 0.820027033490428f, - 0.8199521093254525f, - 0.8198771711108188f, - 0.8198022188478112f, - 0.8197272525377145f, - 0.8196522721818124f, - 0.8195772777813903f, - 0.8195022693377327f, - 0.8194272468521255f, - 0.8193522103258535f, - 0.8192771597602029f, - 0.8192020951564594f, - 0.8191270165159094f, - 0.819051923839839f, - 0.8189768171295356f, - 0.8189016963862853f, - 0.818826561611376f, - 0.8187514128060945f, - 0.8186762499717289f, - 0.8186010731095669f, - 0.8185258822208967f, - 0.8184506773070065f, - 0.8183754583691852f, - 0.8183002254087217f, - 0.8182249784269046f, - 0.8181497174250237f, - 0.8180744424043682f, - 0.8179991533662282f, - 0.8179238503118939f, - 0.8178485332426552f, - 0.817773202159803f, - 0.8176978570646277f, - 0.8176224979584208f, - 0.817547124842473f, - 0.8174717377180765f, - 0.8173963365865221f, - 0.8173209214491027f, - 0.8172454923071099f, - 0.8171700491618366f, - 0.817094592014575f, - 0.8170191208666183f, - 0.81694363571926f, - 0.8168681365737929f, - 0.8167926234315113f, - 0.8167170962937084f, - 0.816641555161679f, - 0.816566000036717f, - 0.8164904309201173f, - 0.8164148478131745f, - 0.816339250717184f, - 0.8162636396334408f, - 0.8161880145632407f, - 0.8161123755078797f, - 0.8160367224686533f, - 0.8159610554468585f, - 0.8158853744437912f, - 0.8158096794607486f, - 0.8157339704990273f, - 0.815658247559925f, - 0.8155825106447389f, - 0.8155067597547669f, - 0.8154309948913068f, - 0.815355216055657f, - 0.815279423249116f, - 0.8152036164729819f, - 0.8151277957285544f, - 0.8150519610171321f, - 0.8149761123400149f, - 0.8149002496985019f, - 0.8148243730938937f, - 0.8147484825274895f, - 0.8146725780005906f, - 0.8145966595144968f, - 0.8145207270705096f, - 0.8144447806699295f, - 0.8143688203140582f, - 0.8142928460041974f, - 0.8142168577416484f, - 0.8141408555277139f, - 0.8140648393636953f, - 0.813988809250896f, - 0.8139127651906181f, - 0.8138367071841651f, - 0.8137606352328397f, - 0.813684549337946f, - 0.813608449500787f, - 0.8135323357226674f, - 0.8134562080048907f, - 0.8133800663487616f, - 0.8133039107555852f, - 0.8132277412266656f, - 0.8131515577633087f, - 0.8130753603668193f, - 0.8129991490385035f, - 0.8129229237796666f, - 0.8128466845916152f, - 0.8127704314756554f, - 0.8126941644330941f, - 0.8126178834652374f, - 0.8125415885733932f, - 0.8124652797588681f, - 0.81238895702297f, - 0.8123126203670068f, - 0.8122362697922862f, - 0.8121599053001165f, - 0.8120835268918063f, - 0.8120071345686641f, - 0.8119307283319993f, - 0.8118543081831205f, - 0.8117778741233378f, - 0.8117014261539602f, - 0.8116249642762983f, - 0.8115484884916616f, - 0.811471998801361f, - 0.8113954952067067f, - 0.8113189777090102f, - 0.8112424463095818f, - 0.8111659010097335f, - 0.8110893418107764f, - 0.8110127687140228f, - 0.8109361817207843f, - 0.8108595808323736f, - 0.8107829660501029f, - 0.8107063373752853f, - 0.8106296948092334f, - 0.8105530383532606f, - 0.8104763680086808f, - 0.8103996837768072f, - 0.8103229856589541f, - 0.8102462736564353f, - 0.8101695477705658f, - 0.8100928080026597f, - 0.8100160543540325f, - 0.8099392868259987f, - 0.8098625054198744f, - 0.8097857101369745f, - 0.8097089009786153f, - 0.809632077946113f, - 0.8095552410407836f, - 0.8094783902639441f, - 0.8094015256169108f, - 0.8093246471010013f, - 0.8092477547175324f, - 0.8091708484678221f, - 0.8090939283531876f, - 0.8090169943749475f, - 0.8089400465344195f, - 0.8088630848329226f, - 0.8087861092717751f, - 0.8087091198522962f, - 0.8086321165758049f, - 0.8085550994436209f, - 0.8084780684570638f, - 0.8084010236174533f, - 0.8083239649261096f, - 0.8082468923843531f, - 0.8081698059935046f, - 0.8080927057548846f, - 0.8080155916698146f, - 0.8079384637396156f, - 0.8078613219656092f, - 0.8077841663491176f, - 0.8077069968914623f, - 0.807629813593966f, - 0.8075526164579508f, - 0.8074754054847401f, - 0.807398180675656f, - 0.8073209420320226f, - 0.8072436895551627f, - 0.8071664232464004f, - 0.8070891431070594f, - 0.8070118491384641f, - 0.8069345413419386f, - 0.8068572197188077f, - 0.8067798842703967f, - 0.8067025349980299f, - 0.8066251719030335f, - 0.8065477949867323f, - 0.806470404250453f, - 0.8063929996955208f, - 0.8063155813232628f, - 0.8062381491350047f, - 0.8061607031320741f, - 0.8060832433157973f, - 0.8060057696875019f, - 0.8059282822485158f, - 0.8058507810001659f, - 0.805773265943781f, - 0.8056957370806884f, - 0.8056181944122174f, - 0.805540637939696f, - 0.8054630676644536f, - 0.8053854835878193f, - 0.805307885711122f, - 0.8052302740356918f, - 0.8051526485628583f, - 0.8050750092939518f, - 0.8049973562303023f, - 0.8049196893732409f, - 0.8048420087240977f, - 0.8047643142842045f, - 0.8046866060548918f, - 0.804608884037492f, - 0.8045311482333358f, - 0.8044533986437562f, - 0.8043756352700846f, - 0.8042978581136541f, - 0.8042200671757967f, - 0.8041422624578458f, - 0.8040644439611347f, - 0.8039866116869965f, - 0.8039087656367649f, - 0.8038309058117737f, - 0.8037530322133574f, - 0.8036751448428497f, - 0.8035972437015858f, - 0.8035193287908999f, - 0.8034414001121277f, - 0.8033634576666039f, - 0.8032855014556646f, - 0.8032075314806449f, - 0.8031295477428813f, - 0.8030515502437099f, - 0.802973538984467f, - 0.8028955139664897f, - 0.8028174751911145f, - 0.8027394226596789f, - 0.8026613563735199f, - 0.8025832763339757f, - 0.8025051825423837f, - 0.8024270750000824f, - 0.8023489537084096f, - 0.8022708186687046f, - 0.8021926698823055f, - 0.8021145073505522f, - 0.8020363310747831f, - 0.8019581410563384f, - 0.8018799372965574f, - 0.8018017197967806f, - 0.801723488558348f, - 0.8016452435825996f, - 0.8015669848708769f, - 0.80148871242452f, - 0.801410426244871f, - 0.8013321263332706f, - 0.8012538126910607f, - 0.8011754853195834f, - 0.8010971442201803f, - 0.8010187893941944f, - 0.8009404208429677f, - 0.8008620385678434f, - 0.8007836425701643f, - 0.800705232851274f, - 0.8006268094125157f, - 0.8005483722552336f, - 0.800469921380771f, - 0.800391456790473f, - 0.8003129784856832f, - 0.8002344864677468f, - 0.8001559807380089f, - 0.8000774612978142f, - 0.7999989281485086f, - 0.7999203812914373f, - 0.7998418207279465f, - 0.799763246459382f, - 0.7996846584870906f, - 0.7996060568124184f, - 0.7995274414367126f, - 0.7994488123613199f, - 0.7993701695875878f, - 0.7992915131168641f, - 0.7992128429504959f, - 0.7991341590898319f, - 0.7990554615362196f, - 0.7989767502910082f, - 0.7988980253555458f, - 0.7988192867311817f, - 0.7987405344192647f, - 0.7986617684211448f, - 0.798582988738171f, - 0.7985041953716936f, - 0.7984253883230625f, - 0.798346567593628f, - 0.7982677331847409f, - 0.7981888850977515f, - 0.7981100233340116f, - 0.7980311478948717f, - 0.7979522587816841f, - 0.7978733559957997f, - 0.7977944395385712f, - 0.7977155094113503f, - 0.7976365656154899f, - 0.7975576081523421f, - 0.7974786370232603f, - 0.7973996522295976f, - 0.7973206537727071f, - 0.797241641653943f, - 0.7971626158746582f, - 0.7970835764362079f, - 0.7970045233399453f, - 0.796925456587226f, - 0.796846376179404f, - 0.7967672821178349f, - 0.7966881744038733f, - 0.7966090530388754f, - 0.7965299180241964f, - 0.7964507693611923f, - 0.7963716070512198f, - 0.7962924310956346f, - 0.7962132414957941f, - 0.7961340382530545f, - 0.7960548213687735f, - 0.7959755908443079f, - 0.7958963466810159f, - 0.7958170888802548f, - 0.7957378174433831f, - 0.7956585323717587f, - 0.7955792336667401f, - 0.7954999213296866f, - 0.7954205953619568f, - 0.79534125576491f, - 0.7952619025399057f, - 0.7951825356883034f, - 0.7951031552114634f, - 0.7950237611107454f, - 0.7949443533875102f, - 0.794864932043118f, - 0.7947854970789303f, - 0.7947060484963078f, - 0.7946265862966115f, - 0.7945471104812034f, - 0.7944676210514455f, - 0.7943881180086994f, - 0.7943086013543276f, - 0.7942290710896922f, - 0.7941495272161566f, - 0.7940699697350831f, - 0.7939903986478355f, - 0.7939108139557767f, - 0.7938312156602707f, - 0.7937516037626812f, - 0.7936719782643723f, - 0.7935923391667088f, - 0.7935126864710547f, - 0.7934330201787753f, - 0.7933533402912352f, - 0.7932736468098002f, - 0.7931939397358353f, - 0.7931142190707068f, - 0.7930344848157802f, - 0.7929547369724222f, - 0.7928749755419987f, - 0.792795200525877f, - 0.7927154119254235f, - 0.7926356097420055f, - 0.7925557939769908f, - 0.7924759646317464f, - 0.7923961217076407f, - 0.7923162652060413f, - 0.792236395128317f, - 0.7921565114758358f, - 0.7920766142499671f, - 0.7919967034520793f, - 0.7919167790835422f, - 0.7918368411457248f, - 0.7917568896399974f, - 0.7916769245677292f, - 0.7915969459302911f, - 0.7915169537290532f, - 0.7914369479653858f, - 0.7913569286406604f, - 0.7912768957562476f, - 0.7911968493135192f, - 0.7911167893138463f, - 0.7910367157586012f, - 0.7909566286491554f, - 0.7908765279868818f, - 0.7907964137731522f, - 0.7907162860093397f, - 0.7906361446968175f, - 0.7905559898369584f, - 0.7904758214311361f, - 0.7903956394807241f, - 0.7903154439870965f, - 0.790235234951627f, - 0.7901550123756905f, - 0.7900747762606611f, - 0.7899945266079141f, - 0.7899142634188241f, - 0.7898339866947668f, - 0.7897536964371173f, - 0.7896733926472516f, - 0.7895930753265459f, - 0.7895127444763758f, - 0.7894324000981184f, - 0.7893520421931499f, - 0.7892716707628478f, - 0.7891912858085884f, - 0.7891108873317498f, - 0.7890304753337092f, - 0.7889500498158447f, - 0.7888696107795341f, - 0.7887891582261558f, - 0.7887086921570886f, - 0.7886282125737107f, - 0.7885477194774019f, - 0.7884672128695406f, - 0.7883866927515069f, - 0.7883061591246798f, - 0.7882256119904401f, - 0.7881450513501673f, - 0.7880644772052419f, - 0.7879838895570447f, - 0.7879032884069562f, - 0.7878226737563581f, - 0.7877420456066309f, - 0.787661403959157f, - 0.7875807488153173f, - 0.7875000801764945f, - 0.7874193980440705f, - 0.787338702419428f, - 0.7872579933039493f, - 0.7871772706990178f, - 0.7870965346060161f, - 0.7870157850263283f, - 0.7869350219613374f, - 0.7868542454124274f, - 0.7867734553809829f, - 0.7866926518683874f, - 0.7866118348760262f, - 0.7865310044052833f, - 0.7864501604575446f, - 0.7863693030341944f, - 0.786288432136619f, - 0.7862075477662035f, - 0.7861266499243343f, - 0.7860457386123971f, - 0.7859648138317787f, - 0.7858838755838654f, - 0.7858029238700442f, - 0.7857219586917025f, - 0.7856409800502269f, - 0.7855599879470058f, - 0.7854789823834261f, - 0.7853979633608765f, - 0.7853169308807448f, - 0.78523588494442f, - 0.7851548255532901f, - 0.7850737527087446f, - 0.7849926664121722f, - 0.7849115666649629f, - 0.7848304534685056f, - 0.7847493268241907f, - 0.784668186733408f, - 0.7845870331975481f, - 0.784505866218001f, - 0.7844246857961582f, - 0.7843434919334104f, - 0.7842622846311483f, - 0.7841810638907643f, - 0.7840998297136492f, - 0.7840185821011957f, - 0.7839373210547953f, - 0.7838560465758406f, - 0.7837747586657248f, - 0.7836934573258398f, - 0.7836121425575795f, - 0.7835308143623365f, - 0.783449472741505f, - 0.7833681176964782f, - 0.7832867492286505f, - 0.7832053673394158f, - 0.7831239720301689f, - 0.7830425633023042f, - 0.7829611411572168f, - 0.7828797055963016f, - 0.7827982566209543f, - 0.7827167942325703f, - 0.7826353184325454f, - 0.7825538292222761f, - 0.7824723266031579f, - 0.7823908105765882f, - 0.782309281143963f, - 0.7822277383066799f, - 0.7821461820661356f, - 0.7820646124237279f, - 0.7819830293808543f, - 0.7819014329389126f, - 0.7818198230993014f, - 0.7817381998634184f, - 0.781656563232663f, - 0.7815749132084331f, - 0.7814932497921286f, - 0.7814115729851481f, - 0.7813298827888916f, - 0.7812481792047584f, - 0.7811664622341491f, - 0.7810847318784634f, - 0.7810029881391016f, - 0.7809212310174648f, - 0.7808394605149535f, - 0.7807576766329692f, - 0.7806758793729128f, - 0.7805940687361864f, - 0.7805122447241913f, - 0.7804304073383299f, - 0.7803485565800041f, - 0.780266692450617f, - 0.7801848149515704f, - 0.7801029240842683f, - 0.7800210198501129f, - 0.7799391022505081f, - 0.7798571712868578f, - 0.7797752269605652f, - 0.7796932692730351f, - 0.7796112982256712f, - 0.7795293138198786f, - 0.7794473160570615f, - 0.7793653049386254f, - 0.7792832804659753f, - 0.7792012426405168f, - 0.7791191914636554f, - 0.7790371269367973f, - 0.7789550490613483f, - 0.7788729578387149f, - 0.7787908532703042f, - 0.7787087353575222f, - 0.7786266041017766f, - 0.7785444595044745f, - 0.7784623015670235f, - 0.778380130290831f, - 0.7782979456773056f, - 0.7782157477278548f, - 0.7781335364438878f, - 0.7780513118268125f, - 0.7779690738780383f, - 0.7778868225989743f, - 0.7778045579910299f, - 0.7777222800556142f, - 0.7776399887941375f, - 0.7775576842080096f, - 0.777475366298641f, - 0.7773930350674418f, - 0.7773106905158232f, - 0.7772283326451958f, - 0.777145961456971f, - 0.7770635769525602f, - 0.7769811791333746f, - 0.7768987680008265f, - 0.7768163435563281f, - 0.7767339058012912f, - 0.776651454737129f, - 0.7765689903652537f, - 0.7764865126870788f, - 0.776404021704017f, - 0.7763215174174823f, - 0.7762389998288879f, - 0.7761564689396482f, - 0.7760739247511768f, - 0.7759913672648884f, - 0.7759087964821978f, - 0.7758262124045193f, - 0.7757436150332685f, - 0.7756610043698603f, - 0.7755783804157105f, - 0.7754957431722345f, - 0.7754130926408486f, - 0.7753304288229687f, - 0.7752477517200115f, - 0.7751650613333934f, - 0.7750823576645315f, - 0.7749996407148426f, - 0.7749169104857443f, - 0.7748341669786543f, - 0.7747514101949899f, - 0.7746686401361697f, - 0.7745858568036114f, - 0.7745030601987338f, - 0.7744202503229554f, - 0.7743374271776955f, - 0.7742545907643726f, - 0.7741717410844069f, - 0.7740888781392171f, - 0.774006001930224f, - 0.7739231124588467f, - 0.7738402097265062f, - 0.7737572937346229f, - 0.7736743644846171f, - 0.7735914219779103f, - 0.7735084662159233f, - 0.7734254972000779f, - 0.7733425149317954f, - 0.7732595194124979f, - 0.7731765106436074f, - 0.7730934886265464f, - 0.7730104533627371f, - 0.7729274048536025f, - 0.7728443431005659f, - 0.7727612681050501f, - 0.7726781798684789f, - 0.7725950783922756f, - 0.7725119636778646f, - 0.7724288357266695f, - 0.7723456945401154f, - 0.772262540119626f, - 0.772179372466627f, - 0.7720961915825428f, - 0.7720129974687993f, - 0.7719297901268213f, - 0.7718465695580349f, - 0.7717633357638662f, - 0.7716800887457411f, - 0.7715968285050865f, - 0.7715135550433283f, - 0.7714302683618941f, - 0.7713469684622104f, - 0.7712636553457051f, - 0.7711803290138051f, - 0.7710969894679387f, - 0.7710136367095335f, - 0.770930270740018f, - 0.7708468915608208f, - 0.7707634991733701f, - 0.7706800935790953f, - 0.7705966747794251f, - 0.7705132427757893f, - 0.7704297975696172f, - 0.7703463391623384f, - 0.7702628675553835f, - 0.7701793827501823f, - 0.7700958847481655f, - 0.7700123735507637f, - 0.769928849159408f, - 0.7698453115755293f, - 0.7697617608005595f, - 0.7696781968359294f, - 0.7695946196830719f, - 0.769511029343418f, - 0.7694274258184008f, - 0.7693438091094524f, - 0.7692601792180058f, - 0.7691765361454937f, - 0.7690928798933497f, - 0.7690092104630067f, - 0.7689255278558986f, - 0.7688418320734596f, - 0.7687581231171233f, - 0.7686744009883244f, - 0.7685906656884971f, - 0.7685069172190767f, - 0.7684231555814977f, - 0.7683393807771957f, - 0.7682555928076056f, - 0.7681717916741638f, - 0.7680879773783057f, - 0.7680041499214679f, - 0.7679203093050861f, - 0.7678364555305973f, - 0.7677525885994386f, - 0.7676687085130464f, - 0.7675848152728585f, - 0.767500908880312f, - 0.767416989336845f, - 0.7673330566438948f, - 0.7672491108029005f, - 0.7671651518152995f, - 0.7670811796825312f, - 0.7669971944060339f, - 0.7669131959872472f, - 0.7668291844276096f, - 0.7667451597285616f, - 0.766661121891542f, - 0.7665770709179915f, - 0.7664930068093498f, - 0.7664089295670578f, - 0.7663248391925557f, - 0.7662407356872843f, - 0.7661566190526852f, - 0.7660724892901991f, - 0.7659883464012682f, - 0.7659041903873336f, - 0.7658200212498376f, - 0.7657358389902228f, - 0.7656516436099309f, - 0.7655674351104053f, - 0.7654832134930881f, - 0.7653989787594233f, - 0.7653147309108534f, - 0.7652304699488226f, - 0.7651461958747743f, - 0.7650619086901528f, - 0.7649776083964019f, - 0.7648932949949664f, - 0.7648089684872912f, - 0.7647246288748206f, - 0.7646402761590004f, - 0.7645559103412753f, - 0.7644715314230917f, - 0.7643871394058945f, - 0.7643027342911306f, - 0.7642183160802454f, - 0.7641338847746861f, - 0.764049440375899f, - 0.7639649828853313f, - 0.7638805123044298f, - 0.763796028634642f, - 0.7637115318774159f, - 0.7636270220341989f, - 0.7635424991064393f, - 0.763457963095585f, - 0.7633734140030851f, - 0.7632888518303876f, - 0.7632042765789422f, - 0.7631196882501974f, - 0.7630350868456033f, - 0.762950472366609f, - 0.7628658448146642f, - 0.7627812041912195f, - 0.7626965504977248f, - 0.7626118837356309f, - 0.7625272039063882f, - 0.7624425110114481f, - 0.7623578050522613f, - 0.7622730860302798f, - 0.7621883539469545f, - 0.762103608803738f, - 0.7620188506020819f, - 0.7619340793434387f, - 0.7618492950292608f, - 0.761764497661001f, - 0.7616796872401126f, - 0.7615948637680483f, - 0.7615100272462619f, - 0.7614251776762069f, - 0.7613403150593372f, - 0.7612554393971067f, - 0.7611705506909703f, - 0.7610856489423817f, - 0.7610007341527966f, - 0.7609158063236691f, - 0.7608308654564551f, - 0.7607459115526095f, - 0.7606609446135882f, - 0.7605759646408475f, - 0.7604909716358428f, - 0.7604059656000309f, - 0.7603209465348681f, - 0.7602359144418116f, - 0.7601508693223177f, - 0.7600658111778443f, - 0.7599807400098484f, - 0.759895655819788f, - 0.7598105586091205f, - 0.7597254483793046f, - 0.7596403251317985f, - 0.7595551888680606f, - 0.7594700395895495f, - 0.7593848772977247f, - 0.7592997019940451f, - 0.7592145136799703f, - 0.7591293123569597f, - 0.7590440980264738f, - 0.7589588706899723f, - 0.7588736303489152f, - 0.7587883770047638f, - 0.7587031106589783f, - 0.75861783131302f, - 0.7585325389683503f, - 0.7584472336264303f, - 0.758361915288722f, - 0.758276583956687f, - 0.7581912396317878f, - 0.7581058823154864f, - 0.7580205120092456f, - 0.757935128714528f, - 0.7578497324327969f, - 0.7577643231655151f, - 0.7576789009141464f, - 0.7575934656801547f, - 0.7575080174650033f, - 0.7574225562701571f, - 0.7573370820970795f, - 0.757251594947236f, - 0.7571660948220909f, - 0.7570805817231094f, - 0.7569950556517564f, - 0.7569095166094979f, - 0.7568239645977991f, - 0.7567383996181264f, - 0.7566528216719455f, - 0.7565672307607227f, - 0.7564816268859251f, - 0.7563960100490191f, - 0.756310380251472f, - 0.7562247374947505f, - 0.7561390817803229f, - 0.7560534131096559f, - 0.7559677314842184f, - 0.7558820369054776f, - 0.7557963293749027f, - 0.7557106088939616f, - 0.7556248754641236f, - 0.7555391290868573f, - 0.7554533697636323f, - 0.755367597495918f, - 0.7552818122851837f, - 0.7551960141328998f, - 0.7551102030405361f, - 0.7550243790095632f, - 0.7549385420414514f, - 0.7548526921376718f, - 0.754766829299695f, - 0.7546809535289928f, - 0.7545950648270361f, - 0.7545091631952967f, - 0.754423248635247f, - 0.7543373211483584f, - 0.754251380736104f, - 0.7541654273999555f, - 0.7540794611413866f, - 0.7539934819618695f, - 0.7539074898628781f, - 0.7538214848458852f, - 0.7537354669123651f, - 0.7536494360637912f, - 0.7535633923016378f, - 0.7534773356273795f, - 0.7533912660424903f, - 0.7533051835484457f, - 0.7532190881467199f, - 0.7531329798387888f, - 0.7530468586261273f, - 0.7529607245102117f, - 0.7528745774925171f, - 0.7527884175745203f, - 0.7527022447576971f, - 0.7526160590435246f, - 0.7525298604334789f, - 0.7524436489290374f, - 0.7523574245316774f, - 0.7522711872428761f, - 0.7521849370641114f, - 0.7520986739968608f, - 0.7520123980426029f, - 0.7519261092028157f, - 0.7518398074789774f, - 0.7517534928725675f, - 0.7516671653850643f, - 0.7515808250179475f, - 0.7514944717726961f, - 0.7514081056507902f, - 0.7513217266537091f, - 0.7512353347829336f, - 0.7511489300399432f, - 0.7510625124262191f, - 0.7509760819432415f, - 0.7508896385924919f, - 0.750803182375451f, - 0.7507167132936007f, - 0.7506302313484219f, - 0.7505437365413972f, - 0.7504572288740081f, - 0.7503707083477371f, - 0.7502841749640671f, - 0.75019762872448f, - 0.7501110696304596f, - 0.7500244976834884f, - 0.7499379128850504f, - 0.7498513152366285f, - 0.7497647047397072f, - 0.74967808139577f, - 0.7495914452063016f, - 0.7495047961727861f, - 0.7494181342967086f, - 0.7493314595795536f, - 0.7492447720228065f, - 0.7491580716279529f, - 0.7490713583964779f, - 0.7489846323298678f, - 0.748897893429608f, - 0.7488111416971854f, - 0.748724377134086f, - 0.748637599741797f, - 0.7485508095218046f, - 0.7484640064755966f, - 0.7483771906046599f, - 0.7482903619104824f, - 0.7482035203945514f, - 0.7481166660583556f, - 0.7480297989033825f, - 0.7479429189311211f, - 0.7478560261430599f, - 0.7477691205406874f, - 0.7476822021254934f, - 0.7475952708989666f, - 0.747508326862597f, - 0.747421370017874f, - 0.747334400366288f, - 0.7472474179093286f, - 0.7471604226484866f, - 0.7470734145852529f, - 0.7469863937211177f, - 0.7468993600575728f, - 0.746812313596109f, - 0.746725254338218f, - 0.7466381822853914f, - 0.7465510974391215f, - 0.7464639998009f, - 0.7463768893722197f, - 0.7462897661545728f, - 0.7462026301494524f, - 0.7461154813583518f, - 0.7460283197827637f, - 0.7459411454241822f, - 0.7458539582841004f, - 0.7457667583640128f, - 0.7456795456654131f, - 0.7455923201897959f, - 0.7455050819386556f, - 0.7454178309134875f, - 0.7453305671157857f, - 0.7452432905470464f, - 0.7451560012087645f, - 0.7450686991024357f, - 0.7449813842295563f, - 0.7448940565916219f, - 0.7448067161901294f, - 0.7447193630265747f, - 0.7446319971024552f, - 0.7445446184192673f, - 0.7444572269785088f, - 0.7443698227816768f, - 0.7442824058302688f, - 0.7441949761257831f, - 0.7441075336697173f, - 0.7440200784635702f, - 0.7439326105088397f, - 0.7438451298070252f, - 0.7437576363596251f, - 0.7436701301681392f, - 0.7435826112340662f, - 0.7434950795589063f, - 0.7434075351441588f, - 0.7433199779913243f, - 0.7432324081019025f, - 0.7431448254773945f, - 0.7430572301193004f, - 0.7429696220291213f, - 0.7428820012083589f, - 0.7427943676585137f, - 0.7427067213810881f, - 0.742619062377583f, - 0.7425313906495012f, - 0.7424437061983445f, - 0.7423560090256157f, - 0.7422682991328169f, - 0.7421805765214516f, - 0.7420928411930225f, - 0.742005093149033f, - 0.7419173323909869f, - 0.7418295589203875f, - 0.7417417727387393f, - 0.7416539738475458f, - 0.7415661622483123f, - 0.7414783379425426f, - 0.7413905009317422f, - 0.7413026512174156f, - 0.7412147888010685f, - 0.741126913684206f, - 0.7410390258683345f, - 0.740951125354959f, - 0.7408632121455863f, - 0.7407752862417228f, - 0.7406873476448749f, - 0.7405993963565491f, - 0.7405114323782531f, - 0.7404234557114935f, - 0.7403354663577782f, - 0.7402474643186145f, - 0.7401594495955107f, - 0.7400714221899748f, - 0.7399833821035146f, - 0.7398953293376394f, - 0.7398072638938573f, - 0.7397191857736777f, - 0.7396310949786099f, - 0.7395429915101628f, - 0.7394548753698467f, - 0.7393667465591707f, - 0.7392786050796456f, - 0.739190450932781f, - 0.7391022841200882f, - 0.7390141046430769f, - 0.7389259125032589f, - 0.7388377077021449f, - 0.7387494902412463f, - 0.7386612601220749f, - 0.7385730173461422f, - 0.7384847619149607f, - 0.738396493830042f, - 0.7383082130928991f, - 0.7382199197050442f, - 0.7381316136679907f, - 0.7380432949832512f, - 0.7379549636523394f, - 0.7378666196767684f, - 0.7377782630580525f, - 0.7376898937977051f, - 0.7376015118972407f, - 0.7375131173581739f, - 0.7374247101820188f, - 0.7373362903702909f, - 0.7372478579245044f, - 0.7371594128461755f, - 0.7370709551368189f, - 0.7369824847979508f, - 0.7368940018310867f, - 0.7368055062377432f, - 0.7367169980194361f, - 0.7366284771776827f, - 0.7365399437139992f, - 0.7364513976299025f, - 0.7363628389269105f, - 0.7362742676065397f, - 0.7361856836703086f, - 0.7360970871197344f, - 0.7360084779563358f, - 0.7359198561816305f, - 0.7358312217971374f, - 0.7357425748043751f, - 0.7356539152048627f, - 0.7355652430001188f, - 0.7354765581916634f, - 0.735387860781016f, - 0.7352991507696961f, - 0.7352104281592241f, - 0.7351216929511197f, - 0.7350329451469041f, - 0.7349441847480973f, - 0.7348554117562207f, - 0.7347666261727948f, - 0.7346778279993417f, - 0.734589017237382f, - 0.734500193888438f, - 0.734411357954032f, - 0.7343225094356854f, - 0.7342336483349213f, - 0.7341447746532618f, - 0.7340558883922301f, - 0.7339669895533489f, - 0.7338780781381419f, - 0.7337891541481318f, - 0.7337002175848433f, - 0.7336112684497994f, - 0.7335223067445249f, - 0.7334333324705437f, - 0.7333443456293803f, - 0.73325534622256f, - 0.7331663342516072f, - 0.7330773097180475f, - 0.7329882726234063f, - 0.7328992229692087f, - 0.7328101607569812f, - 0.7327210859882494f, - 0.7326319986645399f, - 0.7325428987873788f, - 0.7324537863582933f, - 0.7323646613788097f, - 0.7322755238504559f, - 0.7321863737747585f, - 0.7320972111532457f, - 0.7320080359874446f, - 0.731918848278884f, - 0.7318296480290912f, - 0.7317404352395955f, - 0.7316512099119248f, - 0.7315619720476085f, - 0.7314727216481753f, - 0.7313834587151549f, - 0.7312941832500762f, - 0.7312048952544692f, - 0.7311155947298642f, - 0.7310262816777907f, - 0.7309369560997797f, - 0.7308476179973611f, - 0.7307582673720663f, - 0.7306689042254256f, - 0.7305795285589711f, - 0.7304901403742334f, - 0.7304007396727448f, - 0.7303113264560365f, - 0.730221900725641f, - 0.7301324624830907f, - 0.7300430117299177f, - 0.7299535484676553f, - 0.7298640726978355f, - 0.7297745844219925f, - 0.7296850836416587f, - 0.7295955703583686f, - 0.7295060445736552f, - 0.729416506289053f, - 0.7293269555060957f, - 0.7292373922263184f, - 0.7291478164512551f, - 0.7290582281824414f, - 0.7289686274214114f, - 0.7288790141697014f, - 0.728789388428846f, - 0.7286997502003816f, - 0.7286100994858439f, - 0.7285204362867687f, - 0.7284307606046929f, - 0.7283410724411524f, - 0.7282513717976848f, - 0.7281616586758265f, - 0.728071933077115f, - 0.7279821950030876f, - 0.7278924444552817f, - 0.7278026814352357f, - 0.7277129059444872f, - 0.727623117984575f, - 0.7275333175570369f, - 0.7274435046634122f, - 0.7273536793052393f, - 0.727263841484058f, - 0.7271739912014069f, - 0.7270841284588261f, - 0.726994253257855f, - 0.7269043656000338f, - 0.7268144654869029f, - 0.7267245529200022f, - 0.726634627900873f, - 0.7265446904310554f, - 0.7264547405120911f, - 0.7263647781455208f, - 0.7262748033328865f, - 0.7261848160757295f, - 0.726094816375592f, - 0.7260048042340158f, - 0.7259147796525437f, - 0.7258247426327177f, - 0.7257346931760807f, - 0.7256446312841762f, - 0.7255545569585466f, - 0.7254644702007361f, - 0.7253743710122875f, - 0.7252842593947454f, - 0.725194135349653f, - 0.7251039988785555f, - 0.7250138499829968f, - 0.7249236886645213f, - 0.7248335149246746f, - 0.7247433287650011f, - 0.7246531301870468f, - 0.7245629191923566f, - 0.7244726957824769f, - 0.7243824599589528f, - 0.7242922117233314f, - 0.7242019510771582f, - 0.7241116780219806f, - 0.7240213925593447f, - 0.7239310946907982f, - 0.7238407844178876f, - 0.7237504617421611f, - 0.7236601266651655f, - 0.7235697791884493f, - 0.7234794193135606f, - 0.7233890470420473f, - 0.7232986623754584f, - 0.723208265315342f, - 0.7231178558632476f, - 0.7230274340207239f, - 0.7229369997893207f, - 0.722846553170587f, - 0.7227560941660732f, - 0.7226656227773288f, - 0.7225751390059041f, - 0.7224846428533499f, - 0.7223941343212162f, - 0.7223036134110545f, - 0.7222130801244152f, - 0.7221225344628502f, - 0.7220319764279104f, - 0.7219414060211481f, - 0.7218508232441144f, - 0.7217602280983623f, - 0.7216696205854433f, - 0.7215790007069106f, - 0.7214883684643164f, - 0.7213977238592143f, - 0.7213070668931567f, - 0.7212163975676976f, - 0.7211257158843902f, - 0.7210350218447888f, - 0.7209443154504467f, - 0.7208535967029189f, - 0.7207628656037592f, - 0.7206721221545228f, - 0.7205813663567642f, - 0.7204905982120383f, - 0.7203998177219006f, - 0.720309024887907f, - 0.7202182197116126f, - 0.7201274021945738f, - 0.7200365723383463f, - 0.7199457301444869f, - 0.7198548756145516f, - 0.7197640087500978f, - 0.7196731295526819f, - 0.7195822380238617f, - 0.7194913341651938f, - 0.7194004179782367f, - 0.7193094894645474f, - 0.7192185486256845f, - 0.7191275954632063f, - 0.7190366299786706f, - 0.7189456521736369f, - 0.7188546620496633f, - 0.7187636596083097f, - 0.7186726448511346f, - 0.7185816177796982f, - 0.7184905783955596f, - 0.7183995267002793f, - 0.7183084626954169f, - 0.7182173863825335f, - 0.7181262977631888f, - 0.718035196838944f, - 0.7179440836113604f, - 0.7178529580819987f, - 0.7177618202524206f, - 0.7176706701241875f, - 0.7175795076988616f, - 0.7174883329780043f, - 0.7173971459631786f, - 0.7173059466559464f, - 0.7172147350578708f, - 0.7171235111705142f, - 0.7170322749954403f, - 0.7169410265342121f, - 0.7168497657883928f, - 0.7167584927595466f, - 0.7166672074492371f, - 0.7165759098590289f, - 0.7164845999904857f, - 0.7163932778451728f, - 0.7163019434246544f, - 0.7162105967304959f, - 0.7161192377642621f, - 0.7160278665275188f, - 0.7159364830218313f, - 0.7158450872487655f, - 0.7157536792098879f, - 0.715662258906764f, - 0.7155708263409609f, - 0.7154793815140448f, - 0.7153879244275831f, - 0.7152964550831422f, - 0.7152049734822902f, - 0.7151134796265938f, - 0.7150219735176214f, - 0.7149304551569404f, - 0.7148389245461193f, - 0.7147473816867266f, - 0.7146558265803302f, - 0.7145642592284996f, - 0.7144726796328033f, - 0.7143810877948108f, - 0.7142894837160912f, - 0.7141978673982146f, - 0.71410623884275f, - 0.7140145980512683f, - 0.7139229450253392f, - 0.7138312797665334f, - 0.7137396022764213f, - 0.7136479125565739f, - 0.7135562106085626f, - 0.7134644964339582f, - 0.7133727700343326f, - 0.7132810314112573f, - 0.713189280566304f, - 0.7130975175010453f, - 0.713005742217053f, - 0.7129139547159002f, - 0.7128221549991592f, - 0.7127303430684034f, - 0.7126385189252055f, - 0.7125466825711393f, - 0.7124548340077779f, - 0.7123629732366956f, - 0.7122711002594662f, - 0.7121792150776639f, - 0.712087317692863f, - 0.7119954081066386f, - 0.711903486320565f, - 0.7118115523362177f, - 0.7117196061551714f, - 0.7116276477790023f, - 0.7115356772092855f, - 0.7114436944475969f, - 0.7113516994955132f, - 0.7112596923546101f, - 0.7111676730264646f, - 0.7110756415126527f, - 0.7109835978147522f, - 0.7108915419343395f, - 0.7107994738729926f, - 0.7107073936322884f, - 0.7106153012138055f, - 0.7105231966191209f, - 0.7104310798498132f, - 0.7103389509074614f, - 0.7102468097936432f, - 0.7101546565099381f, - 0.7100624910579245f, - 0.7099703134391823f, - 0.7098781236552902f, - 0.7097859217078286f, - 0.7096937075983767f, - 0.7096014813285151f, - 0.7095092428998235f, - 0.7094169923138831f, - 0.7093247295722738f, - 0.7092324546765773f, - 0.7091401676283738f, - 0.7090478684292456f, - 0.7089555570807736f, - 0.7088632335845395f, - 0.7087708979421257f, - 0.7086785501551136f, - 0.7085861902250864f, - 0.7084938181536259f, - 0.7084014339423157f, - 0.7083090375927378f, - 0.708216629106476f, - 0.7081242084851139f, - 0.7080317757302345f, - 0.7079393308434222f, - 0.7078468738262603f, - 0.7077544046803339f, - 0.7076619234072267f, - 0.7075694300085238f, - 0.7074769244858096f, - 0.7073844068406698f, - 0.707291877074689f, - 0.7071993351894532f, - 0.7071067811865476f, - 0.7070142150675583f, - 0.7069216368340717f, - 0.7068290464876736f, - 0.7067364440299511f, - 0.7066438294624902f, - 0.7065512027868786f, - 0.7064585640047025f, - 0.7063659131175501f, - 0.7062732501270085f, - 0.7061805750346657f, - 0.7060878878421093f, - 0.705995188550928f, - 0.7059024771627096f, - 0.7058097536790429f, - 0.7057170181015171f, - 0.7056242704317205f, - 0.705531510671243f, - 0.7054387388216734f, - 0.7053459548846018f, - 0.7052531588616175f, - 0.7051603507543114f, - 0.705067530564273f, - 0.7049746982930927f, - 0.7048818539423616f, - 0.7047889975136702f, - 0.7046961290086099f, - 0.7046032484287716f, - 0.7045103557757473f, - 0.7044174510511281f, - 0.7043245342565064f, - 0.7042316053934738f, - 0.7041386644636233f, - 0.7040457114685466f, - 0.7039527464098372f, - 0.7038597692890873f, - 0.7037667801078908f, - 0.7036737788678403f, - 0.7035807655705297f, - 0.7034877402175531f, - 0.7033947028105039f, - 0.7033016533509767f, - 0.7032085918405654f, - 0.7031155182808652f, - 0.7030224326734701f, - 0.702929335019976f, - 0.7028362253219772f, - 0.7027431035810701f, - 0.7026499697988492f, - 0.702556823976911f, - 0.7024636661168517f, - 0.702370496220267f, - 0.702277314288754f, - 0.7021841203239085f, - 0.7020909143273282f, - 0.7019976963006094f, - 0.7019044662453501f, - 0.701811224163147f, - 0.7017179700555985f, - 0.7016247039243019f, - 0.7015314257708558f, - 0.701438135596858f, - 0.7013448334039075f, - 0.7012515191936025f, - 0.7011581929675424f, - 0.7010648547273258f, - 0.7009715044745527f, - 0.7008781422108219f, - 0.7007847679377338f, - 0.700691381656888f, - 0.7005979833698844f, - 0.7005045730783239f, - 0.7004111507838066f, - 0.7003177164879333f, - 0.7002242701923054f, - 0.7001308118985237f, - 0.7000373416081898f, - 0.6999438593229049f, - 0.6998503650442714f, - 0.6997568587738907f, - 0.6996633405133657f, - 0.6995698102642979f, - 0.6994762680282907f, - 0.6993827138069464f, - 0.6992891476018684f, - 0.6991955694146597f, - 0.6991019792469236f, - 0.6990083771002644f, - 0.6989147629762851f, - 0.6988211368765905f, - 0.6987274988027843f, - 0.6986338487564714f, - 0.6985401867392559f, - 0.6984465127527434f, - 0.6983528267985382f, - 0.6982591288782464f, - 0.6981654189934726f, - 0.6980716971458231f, - 0.697977963336904f, - 0.6978842175683206f, - 0.6977904598416802f, - 0.6976966901585883f, - 0.6976029085206524f, - 0.697509114929479f, - 0.6974153093866755f, - 0.6973214918938488f, - 0.6972276624526071f, - 0.6971338210645575f, - 0.6970399677313084f, - 0.6969461024544679f, - 0.6968522252356437f, - 0.6967583360764453f, - 0.6966644349784809f, - 0.6965705219433598f, - 0.6964765969726906f, - 0.6963826600680835f, - 0.6962887112311472f, - 0.6961947504634924f, - 0.6961007777667283f, - 0.6960067931424657f, - 0.6959127965923144f, - 0.6958187881178854f, - 0.6957247677207897f, - 0.6956307354026379f, - 0.6955366911650416f, - 0.6954426350096117f, - 0.6953485669379604f, - 0.6952544869516989f, - 0.69516039505244f, - 0.6950662912417952f, - 0.6949721755213776f, - 0.6948780478927993f, - 0.6947839083576736f, - 0.6946897569176129f, - 0.6945955935742311f, - 0.6945014183291417f, - 0.6944072311839578f, - 0.6943130321402939f, - 0.6942188211997635f, - 0.6941245983639814f, - 0.6940303636345615f, - 0.6939361170131193f, - 0.6938418585012687f, - 0.6937475881006258f, - 0.6936533058128049f, - 0.6935590116394225f, - 0.6934647055820933f, - 0.6933703876424339f, - 0.6932760578220604f, - 0.693181716122589f, - 0.6930873625456359f, - 0.6929929970928183f, - 0.6928986197657526f, - 0.6928042305660567f, - 0.6927098294953471f, - 0.692615416555242f, - 0.6925209917473585f, - 0.6924265550733153f, - 0.6923321065347298f, - 0.692237646133221f, - 0.6921431738704068f, - 0.6920486897479067f, - 0.6919541937673389f, - 0.6918596859303232f, - 0.6917651662384785f, - 0.6916706346934248f, - 0.6915760912967814f, - 0.6914815360501687f, - 0.6913869689552065f, - 0.6912923900135156f, - 0.6911977992267161f, - 0.691103196596429f, - 0.6910085821242757f, - 0.6909139558118766f, - 0.690819317660854f, - 0.6907246676728286f, - 0.690630005849423f, - 0.6905353321922585f, - 0.690440646702958f, - 0.6903459493831432f, - 0.6902512402344373f, - 0.6901565192584627f, - 0.6900617864568425f, - 0.6899670418312003f, - 0.6898722853831589f, - 0.6897775171143428f, - 0.6896827370263747f, - 0.6895879451208797f, - 0.6894931413994813f, - 0.6893983258638045f, - 0.6893034985154731f, - 0.689208659356113f, - 0.6891138083873484f, - 0.6890189456108051f, - 0.688924071028108f, - 0.6888291846408835f, - 0.6887342864507565f, - 0.688639376459354f, - 0.6885444546683019f, - 0.6884495210792262f, - 0.6883545756937542f, - 0.6882596185135124f, - 0.6881646495401281f, - 0.6880696687752281f, - 0.6879746762204406f, - 0.6878796718773926f, - 0.6877846557477123f, - 0.687689627833028f, - 0.6875945881349674f, - 0.6874995366551596f, - 0.6874044733952327f, - 0.6873093983568161f, - 0.6872143115415383f, - 0.6871192129510294f, - 0.687024102586918f, - 0.6869289804508345f, - 0.6868338465444083f, - 0.6867387008692699f, - 0.6866435434270491f, - 0.6865483742193768f, - 0.6864531932478838f, - 0.6863580005142005f, - 0.6862627960199585f, - 0.6861675797667887f, - 0.6860723517563231f, - 0.6859771119901927f, - 0.6858818604700302f, - 0.685786597197467f, - 0.6856913221741361f, - 0.6855960354016692f, - 0.6855007368816994f, - 0.6854054266158602f, - 0.6853101046057838f, - 0.6852147708531041f, - 0.6851194253594542f, - 0.6850240681264684f, - 0.6849286991557799f, - 0.6848333184490235f, - 0.6847379260078332f, - 0.6846425218338432f, - 0.6845471059286888f, - 0.6844516782940044f, - 0.6843562389314258f, - 0.6842607878425876f, - 0.684165325029126f, - 0.684069850492676f, - 0.6839743642348742f, - 0.6838788662573563f, - 0.6837833565617589f, - 0.6836878351497182f, - 0.6835923020228716f, - 0.6834967571828551f, - 0.6834012006313066f, - 0.683305632369863f, - 0.6832100524001622f, - 0.6831144607238414f, - 0.6830188573425389f, - 0.6829232422578931f, - 0.6828276154715418f, - 0.682731976985124f, - 0.682636326800278f, - 0.6825406649186432f, - 0.6824449913418582f, - 0.682349306071563f, - 0.6822536091093965f, - 0.6821579004569989f, - 0.6820621801160097f, - 0.6819664480880694f, - 0.6818707043748186f, - 0.681774948977897f, - 0.6816791818989463f, - 0.6815834031396066f, - 0.6814876127015198f, - 0.6813918105863265f, - 0.6812959967956689f, - 0.6812001713311882f, - 0.6811043341945269f, - 0.6810084853873265f, - 0.6809126249112301f, - 0.6808167527678793f, - 0.6807208689589179f, - 0.6806249734859879f, - 0.6805290663507332f, - 0.6804331475547964f, - 0.680337217099822f, - 0.6802412749874527f, - 0.6801453212193332f, - 0.6800493557971075f, - 0.6799533787224193f, - 0.6798573899969141f, - 0.6797613896222359f, - 0.6796653776000299f, - 0.6795693539319416f, - 0.6794733186196157f, - 0.6793772716646983f, - 0.6792812130688347f, - 0.6791851428336713f, - 0.6790890609608535f, - 0.6789929674520286f, - 0.6788968623088423f, - 0.678800745532942f, - 0.678704617125974f, - 0.6786084770895859f, - 0.6785123254254247f, - 0.6784161621351381f, - 0.6783199872203741f, - 0.6782238006827802f, - 0.678127602524005f, - 0.6780313927456961f, - 0.6779351713495028f, - 0.6778389383370732f, - 0.6777426937100569f, - 0.6776464374701022f, - 0.6775501696188593f, - 0.677453890157977f, - 0.6773575990891052f, - 0.6772612964138942f, - 0.6771649821339937f, - 0.6770686562510544f, - 0.6769723187667263f, - 0.6768759696826607f, - 0.6767796090005079f, - 0.6766832367219198f, - 0.6765868528485468f, - 0.6764904573820412f, - 0.6763940503240541f, - 0.6762976316762379f, - 0.6762012014402446f, - 0.6761047596177261f, - 0.6760083062103355f, - 0.6759118412197247f, - 0.6758153646475477f, - 0.6757188764954565f, - 0.6756223767651053f, - 0.6755258654581469f, - 0.6754293425762355f, - 0.6753328081210246f, - 0.6752362620941688f, - 0.6751397044973216f, - 0.675043135332138f, - 0.6749465546002731f, - 0.6748499623033809f, - 0.6747533584431173f, - 0.6746567430211369f, - 0.6745601160390957f, - 0.6744634774986489f, - 0.6743668274014529f, - 0.6742701657491632f, - 0.6741734925434367f, - 0.6740768077859292f, - 0.6739801114782981f, - 0.6738834036221995f, - 0.6737866842192908f, - 0.6736899532712296f, - 0.6735932107796728f, - 0.6734964567462787f, - 0.6733996911727043f, - 0.6733029140606085f, - 0.6732061254116488f, - 0.6731093252274845f, - 0.6730125135097733f, - 0.6729156902601748f, - 0.6728188554803475f, - 0.6727220091719508f, - 0.6726251513366446f, - 0.6725282819760878f, - 0.672431401091941f, - 0.6723345086858638f, - 0.672237604759516f, - 0.6721406893145587f, - 0.6720437623526522f, - 0.6719468238754576f, - 0.6718498738846352f, - 0.6717529123818473f, - 0.6716559393687547f, - 0.6715589548470186f, - 0.6714619588183013f, - 0.671364951284265f, - 0.6712679322465713f, - 0.6711709017068834f, - 0.6710738596668631f, - 0.6709768061281737f, - 0.6708797410924777f, - 0.670782664561439f, - 0.6706855765367201f, - 0.6705884770199855f, - 0.670491366012898f, - 0.6703942435171226f, - 0.6702971095343226f, - 0.6701999640661627f, - 0.6701028071143077f, - 0.670005638680422f, - 0.6699084587661709f, - 0.6698112673732189f, - 0.6697140645032323f, - 0.6696168501578758f, - 0.6695196243388157f, - 0.6694223870477175f, - 0.6693251382862478f, - 0.6692278780560724f, - 0.669130606358858f, - 0.669033323196272f, - 0.6689360285699801f, - 0.6688387224816507f, - 0.66874140493295f, - 0.6686440759255463f, - 0.6685467354611068f, - 0.6684493835412998f, - 0.6683520201677929f, - 0.6682546453422551f, - 0.6681572590663541f, - 0.6680598613417593f, - 0.6679624521701389f, - 0.6678650315531628f, - 0.6677675994924994f, - 0.6676701559898189f, - 0.6675727010467907f, - 0.6674752346650843f, - 0.6673777568463704f, - 0.6672802675923185f, - 0.6671827669046f, - 0.6670852547848846f, - 0.6669877312348439f, - 0.6668901962561483f, - 0.6667926498504694f, - 0.6666950920194789f, - 0.6665975227648477f, - 0.6664999420882485f, - 0.6664023499913524f, - 0.6663047464758325f, - 0.6662071315433604f, - 0.6661095051956094f, - 0.6660118674342517f, - 0.6659142182609609f, - 0.6658165576774094f, - 0.6657188856852716f, - 0.6656212022862201f, - 0.6655235074819292f, - 0.6654258012740731f, - 0.6653280836643254f, - 0.665230354654361f, - 0.6651326142458538f, - 0.6650348624404793f, - 0.6649370992399118f, - 0.6648393246458271f, - 0.6647415386598998f, - 0.6646437412838062f, - 0.6645459325192213f, - 0.6644481123678214f, - 0.6643502808312829f, - 0.6642524379112815f, - 0.6641545836094944f, - 0.6640567179275976f, - 0.6639588408672686f, - 0.6638609524301841f, - 0.6637630526180216f, - 0.6636651414324587f, - 0.6635672188751724f, - 0.6634692849478416f, - 0.6633713396521435f, - 0.6632733829897569f, - 0.6631754149623598f, - 0.6630774355716315f, - 0.6629794448192501f, - 0.6628814427068954f, - 0.6627834292362459f, - 0.6626854044089817f, - 0.6625873682267819f, - 0.6624893206913268f, - 0.6623912618042959f, - 0.6622931915673699f, - 0.6621951099822287f, - 0.6620970170505532f, - 0.6619989127740246f, - 0.661900797154323f, - 0.6618026701931305f, - 0.6617045318921277f, - 0.6616063822529968f, - 0.661508221277419f, - 0.6614100489670769f, - 0.6613118653236518f, - 0.661213670348827f, - 0.6611154640442843f, - 0.661017246411707f, - 0.6609190174527775f, - 0.6608207771691792f, - 0.6607225255625956f, - 0.6606242626347099f, - 0.6605259883872061f, - 0.6604277028217675f, - 0.6603294059400793f, - 0.6602310977438245f, - 0.6601327782346886f, - 0.6600344474143557f, - 0.6599361052845111f, - 0.6598377518468392f, - 0.6597393871030262f, - 0.6596410110547566f, - 0.6595426237037169f, - 0.6594442250515921f, - 0.659345815100069f, - 0.6592473938508332f, - 0.6591489613055717f, - 0.6590505174659709f, - 0.6589520623337171f, - 0.6588535959104981f, - 0.6587551181980004f, - 0.658656629197912f, - 0.65855812891192f, - 0.6584596173417123f, - 0.6583610944889773f, - 0.6582625603554024f, - 0.6581640149426768f, - 0.6580654582524883f, - 0.6579668902865262f, - 0.6578683110464789f, - 0.6577697205340362f, - 0.6576711187508866f, - 0.6575725056987204f, - 0.6574738813792267f, - 0.657375245794096f, - 0.6572765989450177f, - 0.6571779408336824f, - 0.6570792714617811f, - 0.6569805908310036f, - 0.6568818989430415f, - 0.6567831957995851f, - 0.6566844814023265f, - 0.6565857557529564f, - 0.6564870188531671f, - 0.6563882707046497f, - 0.656289511309097f, - 0.6561907406682005f, - 0.6560919587836528f, - 0.6559931656571472f, - 0.6558943612903754f, - 0.6557955456850313f, - 0.6556967188428073f, - 0.6555978807653977f, - 0.6554990314544951f, - 0.6554001709117939f, - 0.6553012991389876f, - 0.655202416137771f, - 0.6551035219098379f, - 0.6550046164568826f, - 0.6549056997806005f, - 0.6548067718826859f, - 0.6547078327648344f, - 0.6546088824287408f, - 0.6545099208761012f, - 0.6544109481086104f, - 0.6543119641279653f, - 0.6542129689358612f, - 0.6541139625339949f, - 0.6540149449240622f, - 0.6539159161077603f, - 0.6538168760867857f, - 0.6537178248628356f, - 0.6536187624376074f, - 0.653519688812798f, - 0.6534206039901056f, - 0.6533215079712273f, - 0.6532224007578619f, - 0.6531232823517068f, - 0.6530241527544609f, - 0.6529250119678224f, - 0.6528258599934904f, - 0.6527266968331634f, - 0.6526275224885412f, - 0.6525283369613223f, - 0.6524291402532066f, - 0.6523299323658942f, - 0.6522307133010844f, - 0.6521314830604777f, - 0.652032241645774f, - 0.6519329890586744f, - 0.6518337253008787f, - 0.6517344503740886f, - 0.6516351642800043f, - 0.6515358670203281f, - 0.6514365585967603f, - 0.6513372390110032f, - 0.6512379082647587f, - 0.6511385663597282f, - 0.6510392132976147f, - 0.6509398490801201f, - 0.6508404737089468f, - 0.6507410871857982f, - 0.6506416895123764f, - 0.6505422806903854f, - 0.6504428607215279f, - 0.650343429607508f, - 0.6502439873500292f, - 0.650144533950795f, - 0.6500450694115097f, - 0.6499455937338782f, - 0.6498461069196042f, - 0.649746608970393f, - 0.649647099887949f, - 0.6495475796739777f, - 0.6494480483301838f, - 0.6493485058582733f, - 0.6492489522599513f, - 0.6491493875369242f, - 0.6490498116908975f, - 0.6489502247235774f, - 0.648850626636671f, - 0.6487510174318841f, - 0.6486513971109241f, - 0.6485517656754973f, - 0.6484521231273116f, - 0.6483524694680736f, - 0.6482528046994914f, - 0.6481531288232724f, - 0.6480534418411248f, - 0.6479537437547563f, - 0.6478540345658759f, - 0.6477543142761911f, - 0.6476545828874112f, - 0.6475548404012453f, - 0.6474550868194019f, - 0.6473553221435908f, - 0.6472555463755207f, - 0.6471557595169022f, - 0.6470559615694442f, - 0.6469561525348574f, - 0.6468563324148514f, - 0.6467565012111373f, - 0.6466566589254248f, - 0.6465568055594256f, - 0.6464569411148499f, - 0.6463570655934093f, - 0.6462571789968152f, - 0.6461572813267785f, - 0.6460573725850117f, - 0.6459574527732261f, - 0.6458575218931344f, - 0.6457575799464481f, - 0.6456576269348805f, - 0.6455576628601436f, - 0.6454576877239508f, - 0.6453577015280147f, - 0.6452577042740486f, - 0.6451576959637665f, - 0.6450576765988812f, - 0.6449576461811072f, - 0.6448576047121579f, - 0.6447575521937481f, - 0.6446574886275914f, - 0.6445574140154031f, - 0.6444573283588975f, - 0.6443572316597899f, - 0.6442571239197948f, - 0.6441570051406283f, - 0.6440568753240054f, - 0.6439567344716417f, - 0.6438565825852538f, - 0.643756419666557f, - 0.6436562457172681f, - 0.643556060739103f, - 0.643455864733779f, - 0.6433556577030123f, - 0.6432554396485206f, - 0.6431552105720203f, - 0.6430549704752295f, - 0.6429547193598654f, - 0.6428544572276457f, - 0.6427541840802888f, - 0.6426538999195125f, - 0.6425536047470355f, - 0.6424532985645757f, - 0.6423529813738525f, - 0.6422526531765845f, - 0.6421523139744906f, - 0.6420519637692905f, - 0.6419516025627031f, - 0.6418512303564489f, - 0.6417508471522468f, - 0.6416504529518177f, - 0.6415500477568811f, - 0.6414496315691581f, - 0.6413492043903686f, - 0.6412487662222341f, - 0.6411483170664749f, - 0.6410478569248128f, - 0.6409473857989686f, - 0.6408469036906643f, - 0.6407464106016212f, - 0.6406459065335618f, - 0.6405453914882075f, - 0.640444865467281f, - 0.6403443284725051f, - 0.6402437805056017f, - 0.6401432215682945f, - 0.6400426516623059f, - 0.6399420707893595f, - 0.6398414789511784f, - 0.6397408761494867f, - 0.6396402623860077f, - 0.6395396376624658f, - 0.6394390019805848f, - 0.6393383553420895f, - 0.6392376977487039f, - 0.639137029202153f, - 0.6390363497041621f, - 0.6389356592564557f, - 0.6388349578607597f, - 0.638734245518799f, - 0.6386335222322999f, - 0.6385327880029875f, - 0.6384320428325887f, - 0.638331286722829f, - 0.6382305196754354f, - 0.638129741692134f, - 0.6380289527746522f, - 0.6379281529247164f, - 0.6378273421440543f, - 0.6377265204343927f, - 0.6376256877974598f, - 0.6375248442349827f, - 0.6374239897486899f, - 0.6373231243403092f, - 0.6372222480115687f, - 0.6371213607641975f, - 0.6370204625999234f, - 0.6369195535204762f, - 0.6368186335275843f, - 0.636717702622977f, - 0.6366167608083843f, - 0.6365158080855351f, - 0.6364148444561597f, - 0.6363138699219876f, - 0.6362128844847497f, - 0.6361118881461754f, - 0.6360108809079961f, - 0.6359098627719418f, - 0.6358088337397443f, - 0.6357077938131338f, - 0.635606742993842f, - 0.6355056812836006f, - 0.6354046086841408f, - 0.6353035251971951f, - 0.6352024308244947f, - 0.6351013255677727f, - 0.6350002094287606f, - 0.6348990824091918f, - 0.6347979445107985f, - 0.6346967957353142f, - 0.6345956360844714f, - 0.6344944655600042f, - 0.6343932841636455f, - 0.6342920918971292f, - 0.6341908887621895f, - 0.6340896747605601f, - 0.6339884498939756f, - 0.63388721416417f, - 0.6337859675728786f, - 0.6336847101218356f, - 0.6335834418127766f, - 0.6334821626474361f, - 0.6333808726275503f, - 0.6332795717548542f, - 0.6331782600310835f, - 0.6330769374579747f, - 0.6329756040372633f, - 0.6328742597706862f, - 0.6327729046599794f, - 0.6326715387068801f, - 0.6325701619131245f, - 0.6324687742804506f, - 0.6323673758105947f, - 0.6322659665052949f, - 0.6321645463662883f, - 0.6320631153953133f, - 0.6319616735941073f, - 0.6318602209644087f, - 0.6317587575079563f, - 0.631657283226488f, - 0.631555798121743f, - 0.6314543021954597f, - 0.6313527954493778f, - 0.6312512778852362f, - 0.6311497495047746f, - 0.6310482103097323f, - 0.6309466603018499f, - 0.6308450994828664f, - 0.6307435278545229f, - 0.6306419454185592f, - 0.6305403521767161f, - 0.6304387481307347f, - 0.6303371332823554f, - 0.6302355076333199f, - 0.630133871185369f, - 0.6300322239402447f, - 0.6299305658996882f, - 0.629828897065442f, - 0.6297272174392473f, - 0.6296255270228472f, - 0.6295238258179836f, - 0.6294221138263993f, - 0.6293203910498374f, - 0.6292186574900407f, - 0.6291169131487518f, - 0.629015158027715f, - 0.6289133921286731f, - 0.6288116154533704f, - 0.6287098280035502f, - 0.6286080297809574f, - 0.6285062207873354f, - 0.6284044010244295f, - 0.628302570493984f, - 0.6282007291977432f, - 0.6280988771374527f, - 0.627997014314858f, - 0.6278951407317037f, - 0.6277932563897363f, - 0.6276913612907006f, - 0.6275894554363433f, - 0.6274875388284099f, - 0.6273856114686475f, - 0.6272836733588016f, - 0.62718172450062f, - 0.6270797648958486f, - 0.6269777945462347f, - 0.6268758134535262f, - 0.6267738216194695f, - 0.626671819045813f, - 0.626569805734304f, - 0.6264677816866909f, - 0.6263657469047214f, - 0.6262637013901442f, - 0.6261616451447074f, - 0.6260595781701604f, - 0.6259575004682513f, - 0.6258554120407298f, - 0.6257533128893445f, - 0.6256512030158454f, - 0.6255490824219823f, - 0.6254469511095042f, - 0.625344809080162f, - 0.6252426563357051f, - 0.6251404928778844f, - 0.6250383187084501f, - 0.6249361338291533f, - 0.6248339382417444f, - 0.624731731947975f, - 0.624629514949596f, - 0.6245272872483592f, - 0.6244250488460157f, - 0.6243227997443181f, - 0.624220539945018f, - 0.6241182694498673f, - 0.6240159882606189f, - 0.6239136963790247f, - 0.6238113938068384f, - 0.623709080545812f, - 0.6236067565976993f, - 0.623504421964253f, - 0.6234020766472272f, - 0.6232997206483749f, - 0.6231973539694503f, - 0.6230949766122077f, - 0.6229925885784007f, - 0.6228901898697844f, - 0.6227877804881126f, - 0.6226853604351407f, - 0.6225829297126231f, - 0.6224804883223155f, - 0.6223780362659725f, - 0.6222755735453505f, - 0.6221731001622043f, - 0.62207061611829f, - 0.6219681214153642f, - 0.6218656160551822f, - 0.6217631000395013f, - 0.6216605733700773f, - 0.6215580360486677f, - 0.6214554880770287f, - 0.6213529294569182f, - 0.6212503601900927f, - 0.6211477802783105f, - 0.6210451897233286f, - 0.6209425885269054f, - 0.6208399766907984f, - 0.6207373542167661f, - 0.6206347211065673f, - 0.6205320773619599f, - 0.6204294229847033f, - 0.6203267579765559f, - 0.6202240823392773f, - 0.6201213960746267f, - 0.6200186991843631f, - 0.619915991670247f, - 0.6198132735340376f, - 0.6197105447774954f, - 0.6196078054023801f, - 0.6195050554104529f, - 0.6194022948034735f, - 0.6192995235832035f, - 0.6191967417514032f, - 0.6190939493098342f, - 0.6189911462602574f, - 0.6188883326044349f, - 0.6187855083441276f, - 0.6186826734810982f, - 0.6185798280171079f, - 0.6184769719539198f, - 0.6183741052932955f, - 0.618271228036998f, - 0.6181683401867902f, - 0.6180654417444348f, - 0.6179625327116952f, - 0.6178596130903343f, - 0.6177566828821162f, - 0.6176537420888039f, - 0.6175507907121619f, - 0.6174478287539535f, - 0.6173448562159439f, - 0.6172418730998965f, - 0.6171388794075767f, - 0.6170358751407486f, - 0.6169328603011776f, - 0.6168298348906289f, - 0.6167267989108673f, - 0.6166237523636591f, - 0.616520695250769f, - 0.6164176275739638f, - 0.6163145493350086f, - 0.6162114605356706f, - 0.6161083611777152f, - 0.61600525126291f, - 0.6159021307930207f, - 0.6157989997698152f, - 0.6156958581950599f, - 0.6155927060705227f, - 0.6154895433979706f, - 0.6153863701791716f, - 0.6152831864158935f, - 0.6151799921099038f, - 0.6150767872629717f, - 0.6149735718768644f, - 0.6148703459533515f, - 0.6147671094942011f, - 0.6146638625011827f, - 0.6145606049760647f, - 0.6144573369206167f, - 0.6143540583366086f, - 0.6142507692258093f, - 0.6141474695899896f, - 0.6140441594309183f, - 0.6139408387503666f, - 0.6138375075501044f, - 0.6137341658319024f, - 0.613630813597531f, - 0.6135274508487618f, - 0.6134240775873652f, - 0.6133206938151126f, - 0.613217299533776f, - 0.6131138947451263f, - 0.613010479450936f, - 0.6129070536529764f, - 0.6128036173530204f, - 0.6127001705528397f, - 0.6125967132542073f, - 0.6124932454588954f, - 0.6123897671686775f, - 0.6122862783853262f, - 0.6121827791106151f, - 0.6120792693463173f, - 0.6119757490942065f, - 0.611872218356057f, - 0.6117686771336418f, - 0.6116651254287361f, - 0.6115615632431133f, - 0.6114579905785488f, - 0.6113544074368163f, - 0.6112508138196917f, - 0.6111472097289491f, - 0.6110435951663645f, - 0.610939970133713f, - 0.6108363346327699f, - 0.6107326886653115f, - 0.6106290322331132f, - 0.6105253653379517f, - 0.6104216879816026f, - 0.6103180001658433f, - 0.6102143018924494f, - 0.6101105931631987f, - 0.6100068739798675f, - 0.6099031443442336f, - 0.6097994042580739f, - 0.6096956537231664f, - 0.6095918927412882f, - 0.6094881213142177f, - 0.6093843394437333f, - 0.6092805471316124f, - 0.6091767443796343f, - 0.6090729311895768f, - 0.6089691075632198f, - 0.6088652735023411f, - 0.6087614290087209f, - 0.6086575740841376f, - 0.6085537087303716f, - 0.6084498329492019f, - 0.608345946742409f, - 0.6082420501117723f, - 0.6081381430590724f, - 0.6080342255860901f, - 0.6079302976946053f, - 0.6078263593863994f, - 0.6077224106632526f, - 0.6076184515269469f, - 0.6075144819792629f, - 0.6074105020219827f, - 0.6073065116568872f, - 0.6072025108857592f, - 0.6070984997103797f, - 0.6069944781325315f, - 0.6068904461539972f, - 0.6067864037765592f, - 0.6066823510019996f, - 0.6065782878321023f, - 0.6064742142686494f, - 0.6063701303134252f, - 0.6062660359682123f, - 0.6061619312347949f, - 0.6060578161149566f, - 0.605953690610481f, - 0.6058495547231529f, - 0.6057454084547561f, - 0.6056412518070754f, - 0.6055370847818958f, - 0.6054329073810014f, - 0.6053287196061782f, - 0.6052245214592105f, - 0.6051203129418844f, - 0.605016094055985f, - 0.6049118648032985f, - 0.6048076251856104f, - 0.6047033752047073f, - 0.6045991148623749f, - 0.6044948441604001f, - 0.6043905631005697f, - 0.60428627168467f, - 0.6041819699144886f, - 0.604077657791812f, - 0.6039733353184283f, - 0.6038690024961244f, - 0.6037646593266885f, - 0.603660305811908f, - 0.6035559419535715f, - 0.6034515677534669f, - 0.6033471832133828f, - 0.6032427883351075f, - 0.6031383831204299f, - 0.6030339675711395f, - 0.6029295416890246f, - 0.6028251054758752f, - 0.6027206589334801f, - 0.6026162020636298f, - 0.6025117348681133f, - 0.6024072573487212f, - 0.6023027695072434f, - 0.6021982713454705f, - 0.6020937628651927f, - 0.6019892440682012f, - 0.6018847149562867f, - 0.6017801755312399f, - 0.6016756257948526f, - 0.6015710657489157f, - 0.6014664953952215f, - 0.601361914735561f, - 0.6012573237717269f, - 0.6011527225055107f, - 0.6010481109387052f, - 0.6009434890731025f, - 0.6008388569104958f, - 0.6007342144526773f, - 0.6006295617014402f, - 0.6005248986585783f, - 0.600420225325884f, - 0.6003155417051519f, - 0.6002108477981747f, - 0.6001061436067472f, - 0.6000014291326626f, - 0.599896704377716f, - 0.5997919693437012f, - 0.5996872240324133f, - 0.5995824684456463f, - 0.599477702585196f, - 0.5993729264528573f, - 0.5992681400504253f, - 0.5991633433796959f, - 0.5990585364424641f, - 0.5989537192405265f, - 0.5988488917756783f, - 0.5987440540497166f, - 0.598639206064437f, - 0.5985343478216365f, - 0.5984294793231114f, - 0.5983246005706592f, - 0.5982197115660762f, - 0.5981148123111601f, - 0.5980099028077086f, - 0.5979049830575187f, - 0.5978000530623887f, - 0.597695112824116f, - 0.5975901623444994f, - 0.5974852016253367f, - 0.5973802306684263f, - 0.5972752494755672f, - 0.5971702580485578f, - 0.5970652563891977f, - 0.5969602444992854f, - 0.596855222380621f, - 0.5967501900350032f, - 0.5966451474642325f, - 0.5965400946701079f, - 0.5964350316544305f, - 0.5963299584189995f, - 0.596224874965616f, - 0.5961197812960802f, - 0.5960146774121933f, - 0.5959095633157555f, - 0.5958044390085687f, - 0.5956993044924335f, - 0.5955941597691515f, - 0.595489004840525f, - 0.5953838397083548f, - 0.5952786643744439f, - 0.5951734788405935f, - 0.5950682831086065f, - 0.5949630771802851f, - 0.5948578610574323f, - 0.5947526347418505f, - 0.5946473982353433f, - 0.5945421515397132f, - 0.5944368946567644f, - 0.5943316275882995f, - 0.5942263503361229f, - 0.5941210629020386f, - 0.59401576528785f, - 0.5939104574953622f, - 0.5938051395263787f, - 0.593699811382705f, - 0.593594473066145f, - 0.5934891245785044f, - 0.5933837659215877f, - 0.5932783970972009f, - 0.5931730181071485f, - 0.5930676289532372f, - 0.5929622296372719f, - 0.5928568201610593f, - 0.592751400526405f, - 0.5926459707351159f, - 0.5925405307889982f, - 0.5924350806898582f, - 0.5923296204395035f, - 0.5922241500397405f, - 0.592118669492377f, - 0.5920131787992197f, - 0.5919076779620769f, - 0.5918021669827556f, - 0.5916966458630639f, - 0.5915911146048106f, - 0.5914855732098029f, - 0.59138002167985f, - 0.59127446001676f, - 0.5911688882223421f, - 0.5910633062984048f, - 0.5909577142467576f, - 0.5908521120692094f, - 0.5907464997675702f, - 0.5906408773436489f, - 0.5905352447992558f, - 0.5904296021362012f, - 0.5903239493562945f, - 0.5902182864613468f, - 0.5901126134531678f, - 0.5900069303335689f, - 0.5899012371043604f, - 0.5897955337673538f, - 0.5896898203243599f, - 0.5895840967771905f, - 0.5894783631276564f, - 0.5893726193775704f, - 0.5892668655287433f, - 0.5891611015829876f, - 0.5890553275421161f, - 0.5889495434079403f, - 0.5888437491822734f, - 0.5887379448669278f, - 0.5886321304637168f, - 0.5885263059744529f, - 0.5884204714009501f, - 0.5883146267450216f, - 0.5882087720084804f, - 0.5881029071931413f, - 0.5879970323008173f, - 0.5878911473333235f, - 0.5877852522924732f, - 0.5876793471800819f, - 0.5875734319979633f, - 0.587467506747933f, - 0.5873615714318055f, - 0.5872556260513964f, - 0.5871496706085204f, - 0.5870437051049938f, - 0.5869377295426316f, - 0.5868317439232503f, - 0.5867257482486652f, - 0.586619742520693f, - 0.5865137267411503f, - 0.586407700911853f, - 0.5863016650346186f, - 0.5861956191112632f, - 0.5860895631436045f, - 0.5859834971334591f, - 0.5858774210826452f, - 0.5857713349929796f, - 0.5856652388662809f, - 0.585559132704366f, - 0.5854530165090537f, - 0.5853468902821624f, - 0.58524075402551f, - 0.5851346077409156f, - 0.5850284514301975f, - 0.5849222850951754f, - 0.5848161087376675f, - 0.584709922359494f, - 0.5846037259624736f, - 0.5844975195484265f, - 0.5843913031191721f, - 0.5842850766765308f, - 0.5841788402223224f, - 0.5840725937583676f, - 0.5839663372864865f, - 0.5838600708085002f, - 0.583753794326229f, - 0.5836475078414947f, - 0.5835412113561175f, - 0.5834349048719197f, - 0.5833285883907221f, - 0.5832222619143471f, - 0.5831159254446162f, - 0.5830095789833512f, - 0.5829032225323744f, - 0.5827968560935087f, - 0.5826904796685761f, - 0.5825840932593999f, - 0.5824776968678022f, - 0.5823712904956069f, - 0.5822648741446366f, - 0.5821584478167152f, - 0.5820520115136659f, - 0.5819455652373129f, - 0.5818391089894794f, - 0.5817326427719904f, - 0.5816261665866694f, - 0.5815196804353412f, - 0.5814131843198307f, - 0.581306678241962f, - 0.5812001622035607f, - 0.5810936362064514f, - 0.5809871002524599f, - 0.5808805543434111f, - 0.5807739984811313f, - 0.5806674326674456f, - 0.5805608569041806f, - 0.5804542711931617f, - 0.5803476755362162f, - 0.5802410699351697f, - 0.5801344543918492f, - 0.5800278289080819f, - 0.5799211934856942f, - 0.5798145481265137f, - 0.5797078928323673f, - 0.5796012276050831f, - 0.5794945524464881f, - 0.5793878673584109f, - 0.5792811723426787f, - 0.5791744674011206f, - 0.579067752535564f, - 0.5789610277478382f, - 0.5788542930397717f, - 0.5787475484131929f, - 0.5786407938699315f, - 0.5785340294118162f, - 0.5784272550406768f, - 0.5783204707583425f, - 0.5782136765666434f, - 0.5781068724674088f, - 0.5780000584624695f, - 0.5778932345536549f, - 0.5777864007427964f, - 0.5776795570317236f, - 0.5775727034222676f, - 0.5774658399162598f, - 0.5773589665155303f, - 0.5772520832219115f, - 0.5771451900372336f, - 0.5770382869633294f, - 0.5769313740020295f, - 0.5768244511551668f, - 0.5767175184245725f, - 0.5766105758120799f, - 0.5765036233195203f, - 0.576396660948727f, - 0.576289688701533f, - 0.5761827065797704f, - 0.5760757145852732f, - 0.5759687127198739f, - 0.5758617009854067f, - 0.5757546793837045f, - 0.5756476479166017f, - 0.5755406065859316f, - 0.5754335553935291f, - 0.5753264943412277f, - 0.5752194234308626f, - 0.5751123426642678f, - 0.5750052520432783f, - 0.5748981515697296f, - 0.574791041245456f, - 0.5746839210722935f, - 0.5745767910520773f, - 0.5744696511866426f, - 0.5743625014778261f, - 0.5742553419274629f, - 0.5741481725373899f, - 0.5740409933094427f, - 0.5739338042454586f, - 0.5738266053472734f, - 0.5737193966167247f, - 0.5736121780556487f, - 0.5735049496658835f, - 0.5733977114492654f, - 0.573290463407633f, - 0.5731832055428229f, - 0.5730759378566738f, - 0.572968660351023f, - 0.5728613730277093f, - 0.5727540758885704f, - 0.5726467689354455f, - 0.5725394521701725f, - 0.5724321255945908f, - 0.5723247892105396f, - 0.5722174430198574f, - 0.5721100870243843f, - 0.572002721225959f, - 0.5718953456264219f, - 0.5717879602276122f, - 0.5716805650313708f, - 0.5715731600395368f, - 0.5714657452539517f, - 0.5713583206764549f, - 0.5712508863088878f, - 0.5711434421530912f, - 0.5710359882109058f, - 0.5709285244841735f, - 0.5708210509747347f, - 0.5707135676844317f, - 0.5706060746151056f, - 0.570498571768599f, - 0.570391059146753f, - 0.5702835367514109f, - 0.5701760045844139f, - 0.5700684626476055f, - 0.5699609109428276f, - 0.5698533494719239f, - 0.5697457782367366f, - 0.5696381972391097f, - 0.5695306064808858f, - 0.5694230059639093f, - 0.5693153956900233f, - 0.5692077756610715f, - 0.5691001458788986f, - 0.568992506345348f, - 0.568884857062265f, - 0.5687771980314933f, - 0.5686695292548782f, - 0.5685618507342641f, - 0.5684541624714963f, - 0.5683464644684203f, - 0.5682387567268808f, - 0.5681310392487242f, - 0.5680233120357954f, - 0.5679155750899408f, - 0.5678078284130059f, - 0.5677000720068377f, - 0.5675923058732818f, - 0.5674845300141854f, - 0.5673767444313945f, - 0.5672689491267564f, - 0.5671611441021185f, - 0.5670533293593272f, - 0.5669455049002307f, - 0.5668376707266757f, - 0.5667298268405108f, - 0.566621973243583f, - 0.5665141099377412f, - 0.5664062369248328f, - 0.5662983542067069f, - 0.5661904617852113f, - 0.5660825596621955f, - 0.5659746478395076f, - 0.565866726318997f, - 0.5657587951025133f, - 0.5656508541919051f, - 0.5655429035890227f, - 0.5654349432957151f, - 0.5653269733138329f, - 0.5652189936452253f, - 0.5651110042917433f, - 0.5650030052552371f, - 0.5648949965375565f, - 0.5647869781405531f, - 0.5646789500660772f, - 0.5645709123159802f, - 0.564462864892113f, - 0.5643548077963273f, - 0.5642467410304741f, - 0.5641386645964058f, - 0.5640305784959736f, - 0.5639224827310301f, - 0.5638143773034269f, - 0.563706262215017f, - 0.5635981374676522f, - 0.563490003063186f, - 0.5633818590034705f, - 0.5632737052903589f, - 0.563165541925705f, - 0.5630573689113614f, - 0.5629491862491821f, - 0.5628409939410203f, - 0.5627327919887305f, - 0.562624580394166f, - 0.5625163591591815f, - 0.562408128285631f, - 0.5622998877753694f, - 0.5621916376302508f, - 0.5620833778521305f, - 0.5619751084428636f, - 0.5618668294043047f, - 0.5617585407383099f, - 0.5616502424467338f, - 0.561541934531433f, - 0.5614336169942624f, - 0.5613252898370789f, - 0.5612169530617377f, - 0.5611086066700961f, - 0.5610002506640098f, - 0.560891885045336f, - 0.5607835098159311f, - 0.5606751249776525f, - 0.5605667305323567f, - 0.5604583264819019f, - 0.5603499128281446f, - 0.5602414895729434f, - 0.5601330567181552f, - 0.5600246142656388f, - 0.5599161622172519f, - 0.5598077005748525f, - 0.5596992293402997f, - 0.5595907485154515f, - 0.559482258102167f, - 0.5593737581023055f, - 0.5592652485177254f, - 0.5591567293502868f, - 0.5590482006018482f, - 0.5589396622742703f, - 0.5588311143694117f, - 0.5587225568891334f, - 0.5586139898352946f, - 0.5585054132097566f, - 0.5583968270143785f, - 0.5582882312510222f, - 0.5581796259215476f, - 0.5580710110278158f, - 0.5579623865716884f, - 0.5578537525550258f, - 0.5577451089796903f, - 0.5576364558475426f, - 0.5575277931604453f, - 0.5574191209202596f, - 0.557310439128848f, - 0.5572017477880724f, - 0.5570930468997958f, - 0.5569843364658799f, - 0.5568756164881878f, - 0.5567668869685829f, - 0.5566581479089274f, - 0.5565493993110854f, - 0.5564406411769193f, - 0.5563318735082936f, - 0.5562230963070711f, - 0.5561143095751165f, - 0.5560055133142932f, - 0.5558967075264659f, - 0.5557878922134983f, - 0.5556790673772558f, - 0.5555702330196022f, - 0.555461389142403f, - 0.5553525357475231f, - 0.5552436728368271f, - 0.5551348004121811f, - 0.55502591847545f, - 0.5549170270285f, - 0.5548081260731964f, - 0.5546992156114058f, - 0.5545902956449935f, - 0.5544813661758268f, - 0.5543724272057713f, - 0.5542634787366945f, - 0.5541545207704621f, - 0.5540455533089419f, - 0.5539365763540012f, - 0.5538275899075065f, - 0.5537185939713261f, - 0.5536095885473267f, - 0.553500573637377f, - 0.5533915492433441f, - 0.5532825153670969f, - 0.5531734720105029f, - 0.5530644191754313f, - 0.5529553568637499f, - 0.5528462850773279f, - 0.5527372038180345f, - 0.552628113087738f, - 0.5525190128883085f, - 0.5524099032216147f, - 0.5523007840895267f, - 0.5521916554939136f, - 0.5520825174366462f, - 0.5519733699195934f, - 0.5518642129446265f, - 0.5517550465136151f, - 0.5516458706284304f, - 0.5515366852909424f, - 0.5514274905030222f, - 0.5513182862665413f, - 0.5512090725833702f, - 0.5510998494553808f, - 0.5509906168844445f, - 0.5508813748724325f, - 0.5507721234212173f, - 0.55066286253267f, - 0.550553592208664f, - 0.5504443124510704f, - 0.5503350232617625f, - 0.5502257246426124f, - 0.5501164165954936f, - 0.5500070991222782f, - 0.54989777222484f, - 0.5497884359050518f, - 0.5496790901647876f, - 0.5495697350059203f, - 0.5494603704303245f, - 0.5493509964398733f, - 0.5492416130364415f, - 0.5491322202219027f, - 0.549022817998132f, - 0.5489134063670034f, - 0.5488039853303918f, - 0.5486945548901725f, - 0.5485851150482199f, - 0.5484756658064099f, - 0.5483662071666172f, - 0.5482567391307182f, - 0.5481472617005875f, - 0.548037774878102f, - 0.5479282786651369f, - 0.5478187730635693f, - 0.5477092580752745f, - 0.5475997337021296f, - 0.5474901999460116f, - 0.5473806568087964f, - 0.547271104292362f, - 0.5471615423985847f, - 0.5470519711293426f, - 0.5469423904865124f, - 0.5468328004719725f, - 0.5467232010875998f, - 0.5466135923352732f, - 0.54650397421687f, - 0.5463943467342692f, - 0.5462847098893485f, - 0.5461750636839873f, - 0.5460654081200635f, - 0.5459557431994568f, - 0.5458460689240461f, - 0.54573638529571f, - 0.5456266923163288f, - 0.5455169899877812f, - 0.5454072783119477f, - 0.5452975572907075f, - 0.5451878269259414f, - 0.5450780872195288f, - 0.5449683381733503f, - 0.5448585797892871f, - 0.5447488120692189f, - 0.5446390350150273f, - 0.5445292486285926f, - 0.5444194529117967f, - 0.5443096478665203f, - 0.5441998334946454f, - 0.544090009798053f, - 0.5439801767786258f, - 0.5438703344382447f, - 0.5437604827787927f, - 0.5436506218021515f, - 0.5435407515102036f, - 0.5434308719048323f, - 0.5433209829879194f, - 0.5432110847613486f, - 0.5431011772270022f, - 0.5429912603867643f, - 0.5428813342425174f, - 0.542771398796146f, - 0.5426614540495328f, - 0.5425515000045626f, - 0.5424415366631188f, - 0.5423315640270856f, - 0.542221582098348f, - 0.5421115908787898f, - 0.5420015903702963f, - 0.5418915805747515f, - 0.5417815614940413f, - 0.5416715331300501f, - 0.5415614954846638f, - 0.5414514485597677f, - 0.5413413923572468f, - 0.5412313268789878f, - 0.5411212521268759f, - 0.5410111681027979f, - 0.5409010748086392f, - 0.5407909722462872f, - 0.5406808604176278f, - 0.540570739324548f, - 0.5404606089689343f, - 0.5403504693526746f, - 0.5402403204776551f, - 0.540130162345764f, - 0.5400199949588883f, - 0.5399098183189162f, - 0.5397996324277347f, - 0.5396894372872328f, - 0.5395792328992978f, - 0.5394690192658185f, - 0.5393587963886836f, - 0.5392485642697811f, - 0.5391383229110004f, - 0.5390280723142299f, - 0.5389178124813594f, - 0.5388075434142774f, - 0.538697265114874f, - 0.5385869775850382f, - 0.5384766808266604f, - 0.5383663748416297f, - 0.5382560596318368f, - 0.538145735199172f, - 0.538035401545525f, - 0.5379250586727872f, - 0.5378147065828485f, - 0.5377043452776004f, - 0.5375939747589332f, - 0.5374835950287389f, - 0.537373206088908f, - 0.5372628079413329f, - 0.5371524005879041f, - 0.5370419840305146f, - 0.5369315582710554f, - 0.5368211233114194f, - 0.5367106791534981f, - 0.5366002257991846f, - 0.5364897632503709f, - 0.5363792915089504f, - 0.5362688105768153f, - 0.5361583204558593f, - 0.5360478211479754f, - 0.5359373126550566f, - 0.535826794978997f, - 0.5357162681216897f, - 0.5356057320850288f, - 0.5354951868709089f, - 0.5353846324812231f, - 0.5352740689178668f, - 0.5351634961827334f, - 0.5350529142777186f, - 0.5349423232047162f, - 0.534831722965622f, - 0.5347211135623304f, - 0.5346104949967373f, - 0.5344998672707374f, - 0.5343892303862271f, - 0.5342785843451013f, - 0.5341679291492564f, - 0.5340572648005886f, - 0.5339465913009935f, - 0.5338359086523682f, - 0.5337252168566085f, - 0.5336145159156117f, - 0.533503805831274f, - 0.533393086605493f, - 0.5332823582401653f, - 0.5331716207371888f, - 0.5330608740984603f, - 0.5329501183258776f, - 0.5328393534213391f, - 0.5327285793867418f, - 0.5326177962239846f, - 0.532507003934965f, - 0.5323962025215822f, - 0.5322853919857338f, - 0.5321745723293194f, - 0.5320637435542371f, - 0.5319529056623867f, - 0.5318420586556667f, - 0.5317312025359769f, - 0.5316203373052167f, - 0.5315094629652852f, - 0.5313985795180831f, - 0.5312876869655095f, - 0.5311767853094653f, - 0.5310658745518501f, - 0.5309549546945649f, - 0.5308440257395096f, - 0.5307330876885857f, - 0.5306221405436934f, - 0.5305111843067344f, - 0.5304002189796092f, - 0.5302892445642196f, - 0.5301782610624673f, - 0.5300672684762535f, - 0.5299562668074806f, - 0.5298452560580499f, - 0.5297342362298643f, - 0.5296232073248252f, - 0.5295121693448359f, - 0.5294011222917983f, - 0.5292900661676158f, - 0.5291790009741907f, - 0.5290679267134267f, - 0.5289568433872264f, - 0.5288457509974934f, - 0.5287346495461318f, - 0.5286235390350444f, - 0.5285124194661359f, - 0.5284012908413095f, - 0.52829015316247f, - 0.5281790064315212f, - 0.5280678506503681f, - 0.5279566858209147f, - 0.5278455119450666f, - 0.5277343290247277f, - 0.5276231370618041f, - 0.5275119360582002f, - 0.5274007260158219f, - 0.527289506936575f, - 0.5271782788223647f, - 0.5270670416750967f, - 0.5269557954966777f, - 0.5268445402890132f, - 0.5267332760540102f, - 0.5266220027935744f, - 0.5265107205096132f, - 0.5263994292040328f, - 0.5262881288787407f, - 0.5261768195356432f, - 0.5260655011766486f, - 0.5259541738036633f, - 0.5258428374185957f, - 0.5257314920233528f, - 0.5256201376198432f, - 0.5255087742099741f, - 0.5253974017956546f, - 0.5252860203787921f, - 0.525174629961296f, - 0.5250632305450741f, - 0.524951822132036f, - 0.5248404047240898f, - 0.524728978323145f, - 0.5246175429311114f, - 0.5245060985498976f, - 0.5243946451814138f, - 0.524283182827569f, - 0.524171711490274f, - 0.524060231171438f, - 0.5239487418729717f, - 0.523837243596785f, - 0.523725736344789f, - 0.5236142201188937f, - 0.5235026949210101f, - 0.5233911607530497f, - 0.5232796176169227f, - 0.5231680655145412f, - 0.5230565044478159f, - 0.5229449344186592f, - 0.5228333554289818f, - 0.5227217674806965f, - 0.5226101705757146f, - 0.5224985647159489f, - 0.5223869499033111f, - 0.5222753261397146f, - 0.5221636934270709f, - 0.5220520517672939f, - 0.5219404011622956f, - 0.5218287416139898f, - 0.5217170731242896f, - 0.521605395695108f, - 0.5214937093283591f, - 0.5213820140259561f, - 0.5212703097898135f, - 0.5211585966218445f, - 0.5210468745239641f, - 0.5209351434980861f, - 0.520823403546125f, - 0.520711654669996f, - 0.5205998968716131f, - 0.520488130152892f, - 0.520376354515747f, - 0.5202645699620941f, - 0.5201527764938481f, - 0.520040974112925f, - 0.5199291628212401f, - 0.5198173426207098f, - 0.5197055135132492f, - 0.5195936755007756f, - 0.5194818285852043f, - 0.5193699727684523f, - 0.5192581080524364f, - 0.5191462344390728f, - 0.519034351930279f, - 0.5189224605279715f, - 0.5188105602340682f, - 0.5186986510504858f, - 0.5185867329791425f, - 0.5184748060219552f, - 0.5183628701808426f, - 0.5182509254577218f, - 0.5181389718545114f, - 0.5180270093731302f, - 0.5179150380154957f, - 0.5178030577835273f, - 0.517691068679143f, - 0.5175790707042626f, - 0.5174670638608041f, - 0.5173550481506878f, - 0.5172430235758324f, - 0.5171309901381572f, - 0.5170189478395826f, - 0.5169068966820276f, - 0.516794836667413f, - 0.516682767797658f, - 0.5165706900746838f, - 0.5164586035004101f, - 0.516346508076758f, - 0.5162344038056477f, - 0.5161222906890006f, - 0.5160101687287372f, - 0.5158980379267794f, - 0.5157858982850476f, - 0.5156737498054642f, - 0.51556159248995f, - 0.5154494263404272f, - 0.5153372513588182f, - 0.5152250675470442f, - 0.5151128749070283f, - 0.5150006734406919f, - 0.5148884631499586f, - 0.5147762440367503f, - 0.5146640161029903f, - 0.5145517793506011f, - 0.5144395337815066f, - 0.5143272793976293f, - 0.5142150162008934f, - 0.5141027441932218f, - 0.5139904633765384f, - 0.5138781737527678f, - 0.5137658753238331f, - 0.5136535680916593f, - 0.51354125205817f, - 0.5134289272252904f, - 0.5133165935949445f, - 0.5132042511690579f, - 0.5130918999495547f, - 0.5129795399383608f, - 0.5128671711374007f, - 0.5127547935486004f, - 0.512642407173885f, - 0.5125300120151808f, - 0.512417608074413f, - 0.5123051953535082f, - 0.5121927738543919f, - 0.5120803435789912f, - 0.5119679045292321f, - 0.511855456707041f, - 0.5117430001143453f, - 0.5116305347530712f, - 0.5115180606251464f, - 0.5114055777324974f, - 0.5112930860770522f, - 0.5111805856607382f, - 0.5110680764854828f, - 0.5109555585532143f, - 0.5108430318658599f, - 0.5107304964253486f, - 0.5106179522336078f, - 0.5105053992925668f, - 0.5103928376041532f, - 0.5102802671702967f, - 0.5101676879929253f, - 0.5100551000739687f, - 0.5099425034153555f, - 0.5098298980190151f, - 0.5097172838868776f, - 0.5096046610208719f, - 0.5094920294229281f, - 0.5093793890949759f, - 0.5092667400389458f, - 0.5091540822567673f, - 0.5090414157503714f, - 0.5089287405216881f, - 0.5088160565726487f, - 0.5087033639051833f, - 0.5085906625212232f, - 0.5084779524226998f, - 0.5083652336115437f, - 0.5082525060896871f, - 0.5081397698590606f, - 0.5080270249215969f, - 0.507914271279227f, - 0.5078015089338836f, - 0.5076887378874982f, - 0.5075759581420038f, - 0.5074631696993321f, - 0.5073503725614166f, - 0.5072375667301894f, - 0.5071247522075831f, - 0.5070119289955316f, - 0.5068990970959674f, - 0.5067862565108243f, - 0.5066734072420354f, - 0.5065605492915348f, - 0.5064476826612557f, - 0.5063348073531329f, - 0.5062219233690994f, - 0.5061090307110905f, - 0.5059961293810397f, - 0.5058832193808819f, - 0.5057703007125521f, - 0.5056573733779846f, - 0.5055444373791149f, - 0.5054314927178775f, - 0.5053185393962084f, - 0.5052055774160423f, - 0.5050926067793154f, - 0.5049796274879629f, - 0.5048666395439212f, - 0.5047536429491256f, - 0.5046406377055132f, - 0.5045276238150194f, - 0.5044146012795809f, - 0.5043015701011351f, - 0.5041885302816176f, - 0.5040754818229662f, - 0.5039624247271174f, - 0.5038493589960088f, - 0.5037362846315773f, - 0.5036232016357609f, - 0.5035101100104967f, - 0.5033970097577233f, - 0.5032839008793776f, - 0.5031707833773982f, - 0.5030576572537239f, - 0.502944522510292f, - 0.5028313791490421f, - 0.5027182271719123f, - 0.502605066580841f, - 0.5024918973777682f, - 0.5023787195646321f, - 0.5022655331433727f, - 0.5021523381159287f, - 0.5020391344842405f, - 0.5019259222502473f, - 0.5018127014158886f, - 0.5016994719831049f, - 0.5015862339538367f, - 0.5014729873300234f, - 0.5013597321136064f, - 0.5012464683065255f, - 0.5011331959107221f, - 0.5010199149281364f, - 0.5009066253607102f, - 0.5007933272103839f, - 0.5006800204790997f, - 0.5005667051687981f, - 0.5004533812814213f, - 0.5003400488189114f, - 0.5002267077832095f, - 0.5001133581762586f, - 0.49999999999999994f, - 0.4998866332563768f, - 0.49977325794733085f, - 0.4996598740748055f, - 0.49954648164074283f, - 0.4994330806470866f, - 0.499319671095779f, - 0.49920625298876414f, - 0.49909282632798463f, - 0.49897939111538436f, - 0.4988659473529074f, - 0.49875249504249686f, - 0.4986390341860974f, - 0.49852556478565246f, - 0.498412086843107f, - 0.4982986003604047f, - 0.4981851053394909f, - 0.4980716017823095f, - 0.49795808969080624f, - 0.49784456906692515f, - 0.4977310399126123f, - 0.49761750222981216f, - 0.4975039560204709f, - 0.49739040128653383f, - 0.4972768380299462f, - 0.4971632662526547f, - 0.49704968595660454f, - 0.49693609714374265f, - 0.4968224998160147f, - 0.4967088939753677f, - 0.49659527962374767f, - 0.4964816567631021f, - 0.496368025395377f, - 0.49625438552251994f, - 0.49614073714647844f, - 0.49602708026919906f, - 0.49591341489263f, - 0.49579974101871827f, - 0.49568605864941223f, - 0.49557236778665914f, - 0.49545866843240777f, - 0.4953449605886056f, - 0.4952312442572017f, - 0.4951175194401439f, - 0.49500378613938156f, - 0.4948900443568626f, - 0.49477629409453655f, - 0.4946625353543527f, - 0.49454876813825954f, - 0.4944349924482072f, - 0.4943212082861445f, - 0.4942074156540219f, - 0.49409361455378825f, - 0.4939798049873944f, - 0.49386598695678974f, - 0.4937521604639251f, - 0.49363832551075026f, - 0.49352448209921607f, - 0.4934106302312736f, - 0.4932967699088729f, - 0.4931829011339657f, - 0.49306902390850227f, - 0.49295513823443476f, - 0.4928412441137138f, - 0.49272734154829156f, - 0.4926134305401195f, - 0.49249951109114903f, - 0.4923855832033328f, - 0.4922716468786223f, - 0.49215770211897053f, - 0.49204374892632907f, - 0.49192978730265124f, - 0.4918158172498891f, - 0.4917018387699962f, - 0.49158785186492465f, - 0.4914738565366285f, - 0.49135985278706024f, - 0.491245840618174f, - 0.49113182003192263f, - 0.4910177910302606f, - 0.490903753615141f, - 0.49078970778851816f, - 0.49067565355234666f, - 0.49056159090858004f, - 0.49044751985917345f, - 0.49033344040608073f, - 0.49021935255125737f, - 0.49010525629665747f, - 0.4899911516442368f, - 0.4898770385959497f, - 0.4897629171537523f, - 0.48964878731959927f, - 0.48953464909544686f, - 0.4894205024832502f, - 0.4893063474849654f, - 0.4891921841025489f, - 0.4890780123379561f, - 0.4889638321931441f, - 0.48884964367006856f, - 0.4887354467706868f, - 0.48862124149695485f, - 0.4885070278508303f, - 0.4883928058342694f, - 0.4882785754492301f, - 0.48816433669766895f, - 0.48805008958154417f, - 0.48793583410281255f, - 0.48782157026343265f, - 0.48770729806536156f, - 0.487593017510558f, - 0.48747872860097946f, - 0.48736443133858504f, - 0.48725012572533266f, - 0.4871358117631807f, - 0.4870214894540886f, - 0.4869071588000144f, - 0.486792819802918f, - 0.48667847246475776f, - 0.4865641167874934f, - 0.4864497527730847f, - 0.48633538042349056f, - 0.4862209997406714f, - 0.4861066107265864f, - 0.48599221338319637f, - 0.48587780771246064f, - 0.4857633937163403f, - 0.48564897139679514f, - 0.4855345407557864f, - 0.48542010179527406f, - 0.48530565451721985f, - 0.4851911989235839f, - 0.4850767350163279f, - 0.4849622627974135f, - 0.4848477822688013f, - 0.4847332934324538f, - 0.48461879629033183f, - 0.4845042908443981f, - 0.48438977709661385f, - 0.4842752550489421f, - 0.4841607247033442f, - 0.4840461860617835f, - 0.4839316391262218f, - 0.4838170838986222f, - 0.48370252038094796f, - 0.4835879485751613f, - 0.4834733684832262f, - 0.48335878010710515f, - 0.4832441834487624f, - 0.4831295785101607f, - 0.4830149652932646f, - 0.48290034380003716f, - 0.4827857140324432f, - 0.48267107599244646f, - 0.48255642968201085f, - 0.48244177510310154f, - 0.4823271122576824f, - 0.48221244114771883f, - 0.482097761775175f, - 0.4819830741420167f, - 0.4818683782502082f, - 0.4817536741017156f, - 0.48163896169850356f, - 0.48152424104253844f, - 0.48140951213578514f, - 0.4812947749802103f, - 0.48118002957777917f, - 0.48106527593045817f, - 0.48095051404021405f, - 0.4808357439090124f, - 0.48072096553882054f, - 0.4806061789316045f, - 0.4804913840893318f, - 0.4803765810139686f, - 0.48026176970748286f, - 0.48014695017184106f, - 0.4800321224090114f, - 0.4799172864209606f, - 0.4798024422096572f, - 0.4796875897770681f, - 0.4795727291251618f, - 0.4794578602559067f, - 0.47934298317127033f, - 0.47922809787322185f, - 0.47911320436372895f, - 0.4789983026447611f, - 0.4788833927182864f, - 0.47876847458627453f, - 0.47865354825069384f, - 0.47853861371351425f, - 0.4784236709767044f, - 0.47830872004223424f, - 0.4781937609120737f, - 0.47807879358819233f, - 0.47796381807255955f, - 0.4778488343671463f, - 0.477733842473922f, - 0.47761884239485775f, - 0.4775038341319232f, - 0.47738881768708996f, - 0.47727379306232787f, - 0.4771587602596086f, - 0.47704371928090294f, - 0.4769286701281817f, - 0.47681361280341644f, - 0.4766985473085792f, - 0.4765834736456407f, - 0.4764683918165736f, - 0.47635330182334884f, - 0.4762382036679394f, - 0.47612309735231656f, - 0.47600798287845353f, - 0.4758928602483219f, - 0.47577772946389507f, - 0.47566259052714494f, - 0.4755474434400449f, - 0.47543228820456823f, - 0.4753171248226874f, - 0.4752019532963764f, - 0.47508677362760793f, - 0.47497158581835636f, - 0.4748563898705946f, - 0.4747411857862972f, - 0.4746259735674375f, - 0.4745107532159904f, - 0.47439552473392926f, - 0.4742802881232294f, - 0.47416504338586457f, - 0.4740497905238098f, - 0.47393452953904036f, - 0.47381926043353034f, - 0.4737039832092558f, - 0.47358869786819097f, - 0.4734734044123122f, - 0.47335810284359414f, - 0.4732427931640133f, - 0.4731274753755446f, - 0.4730121494801649f, - 0.4728968154798494f, - 0.47278147337657506f, - 0.47266612317231754f, - 0.4725507648690541f, - 0.472435398468761f, - 0.47232002397341455f, - 0.47220464138499246f, - 0.47208925070547103f, - 0.4719738519368283f, - 0.47185844508104063f, - 0.4717430301400864f, - 0.4716276071159424f, - 0.4715121760105872f, - 0.4713967368259978f, - 0.4712812895641527f, - 0.47116583422703046f, - 0.4710503708166085f, - 0.4709348993348661f, - 0.47081941978378106f, - 0.4707039321653328f, - 0.47058843648149945f, - 0.4704729327342608f, - 0.4703574209255951f, - 0.47024190105748254f, - 0.4701263731319016f, - 0.47001083715083264f, - 0.4698952931162546f, - 0.46977974103014764f, - 0.4696641808944922f, - 0.4695486127112674f, - 0.46943303648245444f, - 0.46931745221003285f, - 0.46920185989598384f, - 0.46908625954228733f, - 0.46897065115092496f, - 0.4688550347238767f, - 0.46873941026312455f, - 0.4686237777706488f, - 0.4685081372484312f, - 0.4683924886984537f, - 0.468276832122697f, - 0.46816116752314374f, - 0.46804549490177494f, - 0.4679298142605734f, - 0.4678141256015209f, - 0.4676984289265994f, - 0.467582724237792f, - 0.46746701153708065f, - 0.46735129082644866f, - 0.4672355621078782f, - 0.467119825383353f, - 0.4670040806548554f, - 0.4668883279243694f, - 0.4667725671938777f, - 0.4666567984653645f, - 0.4665410217408128f, - 0.4664252370222071f, - 0.4663094443115306f, - 0.4661936436107681f, - 0.4660778349219031f, - 0.4659620182469207f, - 0.4658461935878046f, - 0.46573036094653986f, - 0.4656145203251116f, - 0.46549867172550385f, - 0.4653828151497026f, - 0.46526695059969214f, - 0.46515107807745854f, - 0.4650351975849865f, - 0.4649193091242624f, - 0.4648034126972711f, - 0.4646875083059993f, - 0.46457159595243225f, - 0.4644556756385567f, - 0.46433974736635836f, - 0.46422381113782385f, - 0.4641078669549401f, - 0.4639919148196931f, - 0.46387595473407034f, - 0.463759986700058f, - 0.463644010719644f, - 0.4635280267948148f, - 0.46341203492755845f, - 0.4632960351198616f, - 0.46318002737371283f, - 0.463064011691099f, - 0.4629479880740089f, - 0.4628319565244296f, - 0.4627159170443502f, - 0.4625998696357582f, - 0.4624838143006428f, - 0.46236775104099176f, - 0.4622516798587946f, - 0.4621356007560398f, - 0.462019513734716f, - 0.46190341879681296f, - 0.4617873159443193f, - 0.4616712051792251f, - 0.4615550865035191f, - 0.4614389599191915f, - 0.4613228254282323f, - 0.4612066830326307f, - 0.4610905327343776f, - 0.4609743745354624f, - 0.4608582084378762f, - 0.4607420344436088f, - 0.4606258525546514f, - 0.4605096627729941f, - 0.46039346510062856f, - 0.46027725953954496f, - 0.4601610460917349f, - 0.46004482475919f, - 0.4599285955439009f, - 0.45981235844786f, - 0.45969611347305817f, - 0.459579860621488f, - 0.4594635998951407f, - 0.45934733129600913f, - 0.45923105482608473f, - 0.45911477048736066f, - 0.45899847828182866f, - 0.45888217821148214f, - 0.45876587027831306f, - 0.45864955448431477f, - 0.4585332308314806f, - 0.4584168993218031f, - 0.45830055995727614f, - 0.4581842127398926f, - 0.4580678576716467f, - 0.45795149475453145f, - 0.4578351239905415f, - 0.4577187453816699f, - 0.4576023589299117f, - 0.4574859646372607f, - 0.4573695625057109f, - 0.4572531525372576f, - 0.45713673473389466f, - 0.4570203090976177f, - 0.4569038756304208f, - 0.4567874343342998f, - 0.45667098521124916f, - 0.4565545282632649f, - 0.45643806349234184f, - 0.4563215909004762f, - 0.456205110489663f, - 0.45608862226189884f, - 0.45597212621917904f, - 0.45585562236349997f, - 0.4557391106968584f, - 0.4556225912212499f, - 0.45550606393867177f, - 0.4553895288511199f, - 0.45527298596059185f, - 0.45515643526908384f, - 0.45503987677859364f, - 0.4549233104911177f, - 0.45480673640865416f, - 0.4546901545331996f, - 0.45457356486675254f, - 0.45445696741130986f, - 0.4543403621688698f, - 0.45422374914143077f, - 0.4541071283309901f, - 0.45399049973954686f, - 0.4538738633690987f, - 0.4537572192216449f, - 0.45364056729918334f, - 0.4535239076037136f, - 0.4534072401372338f, - 0.4532905649017439f, - 0.4531738818992422f, - 0.45305719113172843f, - 0.45294049260120256f, - 0.45282378630966363f, - 0.4527070722591111f, - 0.4525903504515456f, - 0.45247362088896637f, - 0.4523568835733742f, - 0.4522401385067687f, - 0.45212338569115096f, - 0.45200662512852113f, - 0.45188985682087957f, - 0.4517730807702277f, - 0.45165629697856585f, - 0.4515395054478953f, - 0.45142270618021774f, - 0.45130589917753366f, - 0.4511890844418453f, - 0.4510722619751535f, - 0.45095543177946074f, - 0.4508385938567681f, - 0.45072174820907834f, - 0.45060489483839283f, - 0.45048803374671453f, - 0.4503711649360451f, - 0.45025428840838744f, - 0.4501374041657446f, - 0.4500205122101185f, - 0.44990361254351297f, - 0.4497867051679301f, - 0.449669790085374f, - 0.44955286729784716f, - 0.4494359368073537f, - 0.4493189986158966f, - 0.4492020527254802f, - 0.44908509913810757f, - 0.4489681378557835f, - 0.44885116888051124f, - 0.4487341922142955f, - 0.44861720785914105f, - 0.44850021581705146f, - 0.4483832160900323f, - 0.44826620868008743f, - 0.4481491935892226f, - 0.448032170819442f, - 0.4479151403727516f, - 0.4477981022511559f, - 0.44768105645666106f, - 0.4475640029912719f, - 0.44744694185699485f, - 0.44732987305583494f, - 0.4472127965897989f, - 0.44709571246089236f, - 0.44697862067112126f, - 0.44686152122249256f, - 0.4467444141170121f, - 0.44662729935668716f, - 0.44651017694352374f, - 0.4463930468795294f, - 0.44627590916671045f, - 0.44615876380707475f, - 0.4460416108026288f, - 0.4459244501553803f, - 0.44580728186733726f, - 0.44569010594050645f, - 0.4455729223768965f, - 0.4454557311785145f, - 0.4453385323473693f, - 0.44522132588546826f, - 0.44510411179482046f, - 0.4449868900774336f, - 0.444869660735317f, - 0.44475242377047847f, - 0.44463517918492734f, - 0.444517926980673f, - 0.4444006671597236f, - 0.44428339972408926f, - 0.44416612467577854f, - 0.4440488420168016f, - 0.4439315517491673f, - 0.44381425387488627f, - 0.44369694839596746f, - 0.44357963531442174f, - 0.4434623146322584f, - 0.44334498635148845f, - 0.4432276504741216f, - 0.44311030700216864f, - 0.4429929559376407f, - 0.4428755972825478f, - 0.44275823103890155f, - 0.4426408572087122f, - 0.44252347579399176f, - 0.44240608679675114f, - 0.4422886902190013f, - 0.4421712860627547f, - 0.44205387433002213f, - 0.44193645502281625f, - 0.4418190281431482f, - 0.4417015936930309f, - 0.4415841516744757f, - 0.44146670208949573f, - 0.44134924494010275f, - 0.44123178022831006f, - 0.4411143079561296f, - 0.4409968281255751f, - 0.44087934073865864f, - 0.4407618457973942f, - 0.4406443433037942f, - 0.44052683325987285f, - 0.44040931566764285f, - 0.44029179052911815f, - 0.440174257846313f, - 0.44005671762124043f, - 0.4399391698559153f, - 0.43982161455235097f, - 0.4397040517125625f, - 0.4395864813385635f, - 0.4394689034323693f, - 0.4393513179959937f, - 0.4392337250314524f, - 0.4391161245407595f, - 0.43899851652593086f, - 0.4388809009889808f, - 0.4387632779319251f, - 0.4386456473567795f, - 0.4385280092655589f, - 0.43841036366027974f, - 0.43829271054295704f, - 0.4381750499156075f, - 0.43805738178024656f, - 0.43793970613889105f, - 0.4378220229935566f, - 0.4377043323462605f, - 0.4375866341990185f, - 0.4374689285538481f, - 0.43735121541276545f, - 0.4372334947777883f, - 0.4371157666509329f, - 0.4369980310342173f, - 0.4368802879296585f, - 0.4367625373392736f, - 0.4366447792650811f, - 0.4365270137090978f, - 0.43640924067334247f, - 0.4362914601598323f, - 0.4361736721705862f, - 0.43605587670762175f, - 0.43593807377295757f, - 0.4358202633686127f, - 0.435702445496605f, - 0.43558462015895394f, - 0.43546678735767774f, - 0.43534894709479616f, - 0.43523109937232757f, - 0.4351132441922921f, - 0.43499538155670836f, - 0.4348775114675966f, - 0.43475963392697586f, - 0.4346417489368662f, - 0.434523856499288f, - 0.4344059566162605f, - 0.43428804928980475f, - 0.43417013452194014f, - 0.434052212314688f, - 0.43393428267006806f, - 0.4338163455901018f, - 0.4336984010768093f, - 0.4335804491322122f, - 0.4334624897583309f, - 0.43334452295718734f, - 0.433226548730802f, - 0.4331085670811969f, - 0.4329905780103938f, - 0.43287258152041375f, - 0.4327545776132794f, - 0.4326365662910118f, - 0.432518547555634f, - 0.4324005214091673f, - 0.4322824878536349f, - 0.4321644468910588f, - 0.43204639852346133f, - 0.4319283427528659f, - 0.43181027958129464f, - 0.43169220901077127f, - 0.43157413104331815f, - 0.4314560456809593f, - 0.43133795292571725f, - 0.4312198527796163f, - 0.43110174524467926f, - 0.4309836303229307f, - 0.4308655080163937f, - 0.430747378327093f, - 0.4306292412570519f, - 0.4305110968082955f, - 0.4303929449828474f, - 0.4302747857827324f, - 0.43015661920997567f, - 0.43003844526660107f, - 0.4299202639546343f, - 0.4298020752760995f, - 0.4296838792330227f, - 0.4295656758274283f, - 0.42944746506134246f, - 0.42932924693679f, - 0.4292110214557972f, - 0.42909278862038913f, - 0.4289745484325921f, - 0.42885630089443244f, - 0.4287380460079355f, - 0.42861978377512844f, - 0.4285015141980367f, - 0.4283832372786877f, - 0.42826495301910733f, - 0.428146661421323f, - 0.428028362487361f, - 0.42791005621924894f, - 0.4277917426190133f, - 0.42767342168868216f, - 0.42755509343028203f, - 0.4274367578458409f, - 0.4273184149373868f, - 0.42720006470694716f, - 0.42708170715654936f, - 0.4269633422882223f, - 0.42684497010399336f, - 0.4267265906058915f, - 0.42660820379594444f, - 0.42648980967618144f, - 0.42637140824863085f, - 0.42625299951532086f, - 0.42613458347828137f, - 0.42601616013954047f, - 0.42589772950112775f, - 0.4257792915650729f, - 0.4256608463334045f, - 0.42554239380815295f, - 0.42542393399134704f, - 0.4253054668850173f, - 0.42518699249119296f, - 0.4250685108119047f, - 0.424950021849182f, - 0.4248315256050559f, - 0.4247130220815559f, - 0.42459451128071307f, - 0.42447599320455837f, - 0.4243574678551218f, - 0.42423893523443507f, - 0.4241203953445284f, - 0.42400184818743375f, - 0.4238832937651816f, - 0.4237647320798041f, - 0.423646163133332f, - 0.4235275869277977f, - 0.42340900346523225f, - 0.4232904127476684f, - 0.42317181477713717f, - 0.4230532095556713f, - 0.4229345970853033f, - 0.42281597736806487f, - 0.4226973504059893f, - 0.42257871620110843f, - 0.42246007475545583f, - 0.42234142607106356f, - 0.4222227701499655f, - 0.42210410699419393f, - 0.42198543660578286f, - 0.421866758986765f, - 0.4217480741391746f, - 0.42162938206504486f, - 0.4215106827664092f, - 0.4213919762453022f, - 0.4212732625037572f, - 0.42115454154380905f, - 0.4210358133674912f, - 0.4209170779768388f, - 0.4207983353738856f, - 0.42067958556066704f, - 0.420560828539217f, - 0.4204420643115712f, - 0.4203232928797638f, - 0.42020451424583033f, - 0.42008572841180647f, - 0.41996693537972674f, - 0.4198481351516274f, - 0.4197293277295433f, - 0.41961051311551095f, - 0.41949169131156544f, - 0.4193728623197435f, - 0.4192540261420805f, - 0.4191351827806134f, - 0.41901633223737783f, - 0.41889747451441056f, - 0.41877860961374863f, - 0.41865973753742797f, - 0.4185408582874862f, - 0.41842197186595953f, - 0.41830307827488583f, - 0.41818417751630144f, - 0.4180652695922446f, - 0.41794635450475187f, - 0.41782743225586166f, - 0.4177085028476109f, - 0.4175895662820382f, - 0.41747062256118067f, - 0.4173516716870769f, - 0.4172327136617653f, - 0.41711374848728344f, - 0.41699477616567066f, - 0.416875796698965f, - 0.41675681008920484f, - 0.41663781633842967f, - 0.4165188154486777f, - 0.4163998074219888f, - 0.4162807922604012f, - 0.41616176996595516f, - 0.4160427405406892f, - 0.4159237039866437f, - 0.4158046603058575f, - 0.41568560950037114f, - 0.4155665515722238f, - 0.41544748652345626f, - 0.41532841435610784f, - 0.4152093350722197f, - 0.4150902486738313f, - 0.4149711551629841f, - 0.41485205454171786f, - 0.4147329468120742f, - 0.41461383197609303f, - 0.4144947100358159f, - 0.4143755809932843f, - 0.41425644485053864f, - 0.41413730160962114f, - 0.41401815127257247f, - 0.413898993841435f, - 0.41377982931824975f, - 0.4136606577050593f, - 0.4135414790039048f, - 0.41342229321682916f, - 0.41330310034587386f, - 0.41318390039308156f, - 0.41306469336049517f, - 0.41294547925015646f, - 0.41282625806410894f, - 0.4127070298043946f, - 0.4125877944730572f, - 0.412468552072139f, - 0.412349302603684f, - 0.41223004606973473f, - 0.41211078247233535f, - 0.41199151181352867f, - 0.4118722340953591f, - 0.4117529493198697f, - 0.4116336574891052f, - 0.4115143586051087f, - 0.4113950526699253f, - 0.4112757396855984f, - 0.4111564196541732f, - 0.41103709257769383f, - 0.41091775845820455f, - 0.41079841729775085f, - 0.41067906909837687f, - 0.4105597138621284f, - 0.41044035159104975f, - 0.41032098228718694f, - 0.4102016059525846f, - 0.4100822225892885f, - 0.40996283219934476f, - 0.40984343478479823f, - 0.40972403034769556f, - 0.40960461889008193f, - 0.4094852004140042f, - 0.4093657749215078f, - 0.4092463424146398f, - 0.40912690289544595f, - 0.4090074563659735f, - 0.4088880028282684f, - 0.40876854228437787f, - 0.40864907473634915f, - 0.4085296001862286f, - 0.408410118636064f, - 0.40829063008790206f, - 0.4081711345437909f, - 0.40805163200577715f, - 0.4079321224759093f, - 0.4078126059562344f, - 0.4076930824488011f, - 0.40757355195565653f, - 0.40745401447884966f, - 0.40733447002042794f, - 0.4072149185824401f, - 0.40709536016693504f, - 0.4069757947759606f, - 0.40685622241156627f, - 0.40673664307580004f, - 0.40661705677071175f, - 0.40649746349834964f, - 0.4063778632607637f, - 0.4062582560600029f, - 0.40613864189811616f, - 0.40601902077715396f, - 0.40589939269916514f, - 0.4057797576662003f, - 0.40566011568030846f, - 0.4055404667435406f, - 0.405420810857946f, - 0.4053011480255757f, - 0.4051814782484794f, - 0.40506180152870824f, - 0.4049421178683122f, - 0.40482242726934276f, - 0.40470272973384996f, - 0.4045830252638857f, - 0.40446331386150014f, - 0.404343595528745f, - 0.4042238702676719f, - 0.4041041380803317f, - 0.40398439896877664f, - 0.40386465293505763f, - 0.4037448999812273f, - 0.4036251401093368f, - 0.403505373321439f, - 0.40338559961958514f, - 0.4032658190058285f, - 0.40314603148222056f, - 0.4030262370508143f, - 0.40290643571366275f, - 0.40278662747281785f, - 0.4026668123303333f, - 0.40254699028826135f, - 0.40242716134865586f, - 0.40230732551356924f, - 0.4021874827850557f, - 0.4020676331651679f, - 0.40194777665596026f, - 0.40182791325948564f, - 0.4017080429777987f, - 0.4015881658129526f, - 0.4014682817670021f, - 0.4013483908420007f, - 0.4012284930400034f, - 0.4011085883630639f, - 0.4009886768132375f, - 0.4008687583925781f, - 0.40074883310314113f, - 0.40062890094698084f, - 0.400508961926153f, - 0.4003890160427122f, - 0.4002690632987134f, - 0.4001491036962124f, - 0.400029137237265f, - 0.399909163923926f, - 0.3997891837582519f, - 0.3996691967422977f, - 0.3995492028781203f, - 0.3994292021677748f, - 0.3993091946133182f, - 0.39918918021680605f, - 0.3990691589802955f, - 0.3989491309058424f, - 0.3988290959955041f, - 0.3987090542513365f, - 0.39858900567539707f, - 0.3984689502697431f, - 0.3983488880364309f, - 0.39822881897751855f, - 0.39810874309506256f, - 0.3979886603911212f, - 0.39786857086775124f, - 0.39774847452701123f, - 0.3976283713709582f, - 0.3975082614016508f, - 0.39738814462114636f, - 0.39726802103150377f, - 0.3971478906347806f, - 0.39702775343303565f, - 0.3969076094283278f, - 0.39678745862271486f, - 0.3966673010182564f, - 0.3965471366170106f, - 0.39642696542103706f, - 0.39630678743239417f, - 0.39618660265314193f, - 0.3960664110853389f, - 0.39594621273104535f, - 0.39582600759232f, - 0.3957057956712233f, - 0.3955855769698148f, - 0.3954653514901538f, - 0.3953451192343013f, - 0.3952248802043166f, - 0.39510463440226073f, - 0.3949843818301933f, - 0.3948641224901756f, - 0.3947438563842674f, - 0.3946235835145303f, - 0.3945033038830243f, - 0.3943830174918112f, - 0.3942627243429512f, - 0.39414242443850594f, - 0.39402211778053714f, - 0.3939018043711054f, - 0.393781484212273f, - 0.3936611573061009f, - 0.39354082365465165f, - 0.39342048325998624f, - 0.3933001361241676f, - 0.3931797822492569f, - 0.39305942163731733f, - 0.3929390542904104f, - 0.39281868021059885f, - 0.3926982993999457f, - 0.39257791186051294f, - 0.39245751759436415f, - 0.3923371166035614f, - 0.3922167088901685f, - 0.39209629445624794f, - 0.39197587330386363f, - 0.3918554454350783f, - 0.3917350108519561f, - 0.39161456955656f, - 0.39149412155095437f, - 0.39137366683720237f, - 0.39125320541736835f, - 0.3911327372935167f, - 0.3910122624677109f, - 0.39089178094201604f, - 0.3907712927184961f, - 0.3906507977992152f, - 0.39053029618623886f, - 0.390409787881631f, - 0.39028927288745724f, - 0.39016875120578187f, - 0.3900482228386708f, - 0.3899276877881883f, - 0.3898071460564007f, - 0.38968659764537256f, - 0.38956604255717026f, - 0.3894454807938586f, - 0.38932491235750427f, - 0.3892043372501724f, - 0.3890837554739297f, - 0.38896316703084155f, - 0.38884257192297506f, - 0.38872197015239573f, - 0.3886013617211709f, - 0.3884807466313662f, - 0.388360124885049f, - 0.3882394964842863f, - 0.3881188614311443f, - 0.38799821972769094f, - 0.3878775713759925f, - 0.38775691637811704f, - 0.38763625473613117f, - 0.38751558645210316f, - 0.3873949115280999f, - 0.38727422996618993f, - 0.3871535417684402f, - 0.38703284693691914f, - 0.38691214547369523f, - 0.3867914373808358f, - 0.38667072266041f, - 0.38655000131448547f, - 0.3864292733451315f, - 0.3863085387544159f, - 0.38618779754440824f, - 0.3860670497171766f, - 0.3859462952747908f, - 0.3858255342193191f, - 0.3857047665528315f, - 0.3855839922773965f, - 0.3854632113950843f, - 0.3853424239079638f, - 0.38522162981810537f, - 0.38510082912757837f, - 0.3849800218384523f, - 0.384859207952798f, - 0.3847383874726847f, - 0.38461756040018347f, - 0.38449672673736385f, - 0.3843758864862971f, - 0.384255039649053f, - 0.3841341862277026f, - 0.3840133262243171f, - 0.3838924596409666f, - 0.38377158647972287f, - 0.38365070674265633f, - 0.383529820431839f, - 0.38340892754934136f, - 0.3832880280972358f, - 0.38316712207759296f, - 0.3830462094924854f, - 0.38292529034398415f, - 0.3828043646341619f, - 0.3826834323650899f, - 0.38256249353884064f, - 0.3824415481574868f, - 0.38232059622309994f, - 0.3821996377377534f, - 0.3820786727035189f, - 0.38195770112247f, - 0.38183672299667865f, - 0.3817157383282186f, - 0.38159474711916214f, - 0.3814737493715831f, - 0.3813527450875541f, - 0.38123173426914925f, - 0.3811107169184412f, - 0.3809896930375039f, - 0.3808686626284116f, - 0.3807476256932373f, - 0.38062658223405565f, - 0.38050553225294f, - 0.3803844757519652f, - 0.3802634127332048f, - 0.3801423431987339f, - 0.38002126715062673f, - 0.37990018459095737f, - 0.3797790955218014f, - 0.3796579999452328f, - 0.37953689786332734f, - 0.37941578927815933f, - 0.3792946741918046f, - 0.3791735526063377f, - 0.3790524245238349f, - 0.37893128994637076f, - 0.3788101488760217f, - 0.3786890013148627f, - 0.37856784726497045f, - 0.3784466867284199f, - 0.37832551970728806f, - 0.3782043462036503f, - 0.37808316621958316f, - 0.37796197975716356f, - 0.3778407868184671f, - 0.37771958740557127f, - 0.377598381520552f, - 0.3774771691654868f, - 0.3773559503424519f, - 0.3772347250535252f, - 0.3771134933007829f, - 0.37699225508630324f, - 0.3768710104121627f, - 0.37674975928043924f, - 0.3766285016932108f, - 0.3765072376525544f, - 0.37638596716054856f, - 0.3762646902192705f, - 0.376143406830799f, - 0.37602211699721144f, - 0.3759008207205869f, - 0.3757795180030029f, - 0.37565820884653883f, - 0.37553689325327244f, - 0.3754155712252832f, - 0.3752942427646492f, - 0.37517290787345015f, - 0.37505156655376426f, - 0.3749302188076715f, - 0.3748088646372503f, - 0.37468750404458095f, - 0.374566137031742f, - 0.3744447636008139f, - 0.3743233837538759f, - 0.3742019974930075f, - 0.3740806048202893f, - 0.37395920573780067f, - 0.37383780024762203f, - 0.37371638835183413f, - 0.3735949700525164f, - 0.37347354535175026f, - 0.3733521142516154f, - 0.3732306767541933f, - 0.373109232861564f, - 0.3729877825758092f, - 0.37286632589900914f, - 0.37274486283324565f, - 0.3726233933805993f, - 0.37250191754315215f, - 0.37238043532298487f, - 0.37225894672217946f, - 0.3721374517428179f, - 0.3720159503869813f, - 0.3718944426567523f, - 0.3717729285542121f, - 0.3716514080814436f, - 0.3715298812405282f, - 0.3714083480335491f, - 0.3712868084625879f, - 0.3711652625297279f, - 0.371043710237051f, - 0.3709221515866404f, - 0.37080058658057935f, - 0.37067901522095f, - 0.3705574375098363f, - 0.37043585344932056f, - 0.37031426304148696f, - 0.3701926662884181f, - 0.3700710631921984f, - 0.3699494537549105f, - 0.36982783797863916f, - 0.36970621586546726f, - 0.3695845874174796f, - 0.36946295263676f, - 0.369341311525392f, - 0.3692196640854609f, - 0.36909801031905015f, - 0.36897635022824515f, - 0.36885468381512965f, - 0.3687330110817892f, - 0.36861133203030777f, - 0.36848964666277123f, - 0.3683679549812637f, - 0.36824625698787117f, - 0.36812455268467814f, - 0.3680028420737703f, - 0.3678811251572337f, - 0.3677594019371529f, - 0.36763767241561457f, - 0.3675159365947036f, - 0.36739419447650673f, - 0.3672724460631092f, - 0.367150691356598f, - 0.3670289303590584f, - 0.3669071630725777f, - 0.36678538949924144f, - 0.3666636096411371f, - 0.36654182350035036f, - 0.3664200310789686f, - 0.36629823237907894f, - 0.3661764274027676f, - 0.3660546161521226f, - 0.36593279862923017f, - 0.3658109748361785f, - 0.3656891447750542f, - 0.36556730844794566f, - 0.3654454658569396f, - 0.36532361700412463f, - 0.36520176189158776f, - 0.36507990052141776f, - 0.36495803289570194f, - 0.36483615901652877f, - 0.364714278885987f, - 0.3645923925061646f, - 0.36447049987914965f, - 0.3643486010070316f, - 0.3642266958918982f, - 0.3641047845358392f, - 0.36398286694094273f, - 0.36386094310929856f, - 0.363739013042995f, - 0.36361707674412214f, - 0.36349513421476853f, - 0.36337318545702435f, - 0.3632512304729784f, - 0.3631292692647212f, - 0.36300730183434166f, - 0.3628853281839305f, - 0.36276334831557683f, - 0.3626413622313716f, - 0.36251936993340417f, - 0.3623973714237657f, - 0.3622753667045458f, - 0.3621533557778358f, - 0.3620313386457254f, - 0.36190931531030585f, - 0.36178728577366837f, - 0.3616652500379031f, - 0.3615432081051019f, - 0.361421159977355f, - 0.36129910565675466f, - 0.36117704514539134f, - 0.36105497844535733f, - 0.36093290555874336f, - 0.360810826487642f, - 0.3606887412341442f, - 0.36056664980034225f, - 0.3604445521883286f, - 0.3603224484001945f, - 0.360200338438033f, - 0.3600782223039356f, - 0.35995609999999556f, - 0.3598339715283046f, - 0.35971183689095615f, - 0.35958969609004215f, - 0.3594675491276562f, - 0.3593453960058906f, - 0.3592232367268391f, - 0.35910107129259405f, - 0.35897889970524954f, - 0.3588567219668982f, - 0.3587345380796343f, - 0.358612348045551f, - 0.35849015186674155f, - 0.35836794954530066f, - 0.3582457410833213f, - 0.3581235264828984f, - 0.35800130574612526f, - 0.3578790788750968f, - 0.35775684587190665f, - 0.35763460673864955f, - 0.35751236147742055f, - 0.35739011009031335f, - 0.3572678525794236f, - 0.35714558894684534f, - 0.3570233191946743f, - 0.35690104332500466f, - 0.3567787613399325f, - 0.3566564732415523f, - 0.35653417903196016f, - 0.3564118787132508f, - 0.35628957228752056f, - 0.35616725975686436f, - 0.35604494112337837f, - 0.35592261638915895f, - 0.3558002855563012f, - 0.35567794862690216f, - 0.3555556056030571f, - 0.3554332564868632f, - 0.3553109012804161f, - 0.35518853998581307f, - 0.35506617260514994f, - 0.3549437991405243f, - 0.3548214195940322f, - 0.35469903396777086f, - 0.35457664226383784f, - 0.35445424448432944f, - 0.3543318406313437f, - 0.3542094307069772f, - 0.3540870147133282f, - 0.35396459265249347f, - 0.3538421645265715f, - 0.35371973033765963f, - 0.35359729008785534f, - 0.3534748437792574f, - 0.3533523914139631f, - 0.35322993299407146f, - 0.3531074685216799f, - 0.3529849979988877f, - 0.3528625214277925f, - 0.35274003881049376f, - 0.3526175501490893f, - 0.35249505544567883f, - 0.3523725547023604f, - 0.3522500479212339f, - 0.3521275351043975f, - 0.35200501625395136f, - 0.3518824913719939f, - 0.3517599604606255f, - 0.35163742352194477f, - 0.3515148805580518f, - 0.3513923315710467f, - 0.35126977656302855f, - 0.35114721553609807f, - 0.35102464849235454f, - 0.3509020754338989f, - 0.35077949636283057f, - 0.3506569112812507f, - 0.350534320191259f, - 0.3504117230949569f, - 0.3502891199944441f, - 0.35016651089182194f, - 0.3500438957891916f, - 0.34992127468865325f, - 0.34979864759230883f, - 0.34967601450225866f, - 0.34955337542060483f, - 0.34943073034944794f, - 0.34930807929089036f, - 0.34918542224703275f, - 0.3490627592199777f, - 0.34894009021182615f, - 0.34881741522468085f, - 0.3486947342606429f, - 0.34857204732181535f, - 0.34844935441029956f, - 0.3483266555281986f, - 0.34820395067761406f, - 0.34808123986064937f, - 0.3479585230794062f, - 0.3478358003359882f, - 0.3477130716324977f, - 0.34759033697103725f, - 0.3474675963537107f, - 0.34734484978262037f, - 0.34722209725986986f, - 0.3470993387875629f, - 0.34697657436780216f, - 0.346853804002692f, - 0.34673102769433517f, - 0.34660824544483626f, - 0.34648545725629826f, - 0.34636266313082603f, - 0.3462398630705227f, - 0.3461170570774933f, - 0.3459942451538412f, - 0.3458714273016716f, - 0.3457486035230881f, - 0.3456257738201957f, - 0.3455029381950995f, - 0.34538009664990327f, - 0.3452572491867129f, - 0.3451343958076324f, - 0.3450115365147677f, - 0.3448886713102231f, - 0.3447658001961047f, - 0.34464292317451706f, - 0.34452004024756644f, - 0.3443971514173576f, - 0.3442742566859966f, - 0.34415135605558966f, - 0.34402844952824174f, - 0.34390553710605976f, - 0.34378261879114885f, - 0.3436596945856161f, - 0.3435367644915669f, - 0.34341382851110847f, - 0.34329088664634644f, - 0.34316793889938824f, - 0.3430449852723397f, - 0.3429220257673084f, - 0.34279906038640084f, - 0.3426760891317236f, - 0.3425531120053846f, - 0.34243012900949005f, - 0.34230714014614827f, - 0.3421841454174656f, - 0.34206114482555056f, - 0.34193813837250975f, - 0.3418151260604518f, - 0.34169210789148347f, - 0.3415690838677137f, - 0.3414460539912495f, - 0.3413230182641994f, - 0.341199976688672f, - 0.34107692926677485f, - 0.340953876000617f, - 0.3408308168923062f, - 0.34070775194395186f, - 0.34058468115766183f, - 0.3404616045355457f, - 0.3403385220797115f, - 0.34021543379226915f, - 0.3400923396753268f, - 0.3399692397309945f, - 0.33984613396138075f, - 0.3397230223685953f, - 0.339599904954748f, - 0.33947678172194773f, - 0.3393536526723049f, - 0.3392305178079285f, - 0.33910737713092926f, - 0.33898423064341626f, - 0.3388610783475005f, - 0.3387379202452913f, - 0.33861475633889976f, - 0.33849158663043544f, - 0.3383684111220092f, - 0.33824522981573213f, - 0.33812204271371393f, - 0.3379988498180664f, - 0.3378756511308998f, - 0.3377524466543248f, - 0.3376292363904533f, - 0.33750602034139565f, - 0.3373827985092639f, - 0.33725957089616865f, - 0.33713633750422217f, - 0.33701309833553567f, - 0.33688985339222033f, - 0.33676660267638836f, - 0.33664334619015207f, - 0.33652008393562255f, - 0.3363968159149127f, - 0.33627354213013394f, - 0.33615026258339925f, - 0.33602697727682024f, - 0.33590368621251016f, - 0.33578038939258076f, - 0.3356570868191455f, - 0.33553377849431637f, - 0.33541046442020694f, - 0.33528714459892944f, - 0.3351638190325973f, - 0.33504048772332407f, - 0.3349171506732222f, - 0.3347938078844058f, - 0.33467045935898765f, - 0.3345471050990819f, - 0.3344237451068015f, - 0.334300379384261f, - 0.3341770079335734f, - 0.33405363075685346f, - 0.3339302478562144f, - 0.33380685923377074f, - 0.3336834648916372f, - 0.3335600648319271f, - 0.33343665905675596f, - 0.33331324756823727f, - 0.33318983036848654f, - 0.3330664074596177f, - 0.3329429788437463f, - 0.3328195445229865f, - 0.3326961044994542f, - 0.3325726587752636f, - 0.3324492073525307f, - 0.3323257502333701f, - 0.33220228741989793f, - 0.33207881891422886f, - 0.33195534471847943f, - 0.3318318648347648f, - 0.3317083792652004f, - 0.331584888011903f, - 0.3314613910769877f, - 0.3313378884625714f, - 0.3312143801707695f, - 0.33109086620369904f, - 0.33096734656347565f, - 0.33084382125221623f, - 0.3307202902720377f, - 0.3305967536250559f, - 0.3304732113133885f, - 0.3303496633391515f, - 0.33022610970446264f, - 0.3301025504114382f, - 0.3299789854621962f, - 0.32985541485885295f, - 0.32973183860352673f, - 0.3296082566983341f, - 0.3294846691453935f, - 0.3293610759468216f, - 0.3292374771047367f, - 0.329113872621257f, - 0.3289902624984996f, - 0.3288666467385834f, - 0.32874302534362554f, - 0.3286193983157452f, - 0.32849576565705985f, - 0.32837212736968874f, - 0.3282484834557495f, - 0.3281248339173616f, - 0.32800117875664286f, - 0.3278775179757126f, - 0.32775385157669f, - 0.3276301795616933f, - 0.3275065019328424f, - 0.3273828186922557f, - 0.32725912984205324f, - 0.3271354353843536f, - 0.32701173532127703f, - 0.32688802965494274f, - 0.32676431838746994f, - 0.3266406015209793f, - 0.3265168790575897f, - 0.32639315099942207f, - 0.32626941734859555f, - 0.3261456781072311f, - 0.32602193327744816f, - 0.3258981828613679f, - 0.3257744268611099f, - 0.3256506652787955f, - 0.32552689811654456f, - 0.32540312537647853f, - 0.3252793470607175f, - 0.3251555631713831f, - 0.32503177371059555f, - 0.3249079786804764f, - 0.32478417808314725f, - 0.3246603719207285f, - 0.3245365601953424f, - 0.3244127429091096f, - 0.32428892006415255f, - 0.324165091662592f, - 0.3240412577065506f, - 0.32391741819814945f, - 0.3237935731395112f, - 0.32366972253275716f, - 0.32354586638001026f, - 0.32342200468339194f, - 0.32329813744502495f, - 0.32317426466703214f, - 0.32305038635153516f, - 0.3229265025006576f, - 0.32280261311652114f, - 0.32267871820124955f, - 0.32255481775696493f, - 0.32243091178579103f, - 0.32230700028985015f, - 0.3221830832712663f, - 0.32205916073216195f, - 0.32193523267466134f, - 0.32181129910088707f, - 0.3216873600129635f, - 0.32156341541301353f, - 0.32143946530316175f, - 0.32131550968553113f, - 0.3211915485622465f, - 0.32106758193543145f, - 0.3209436098072097f, - 0.3208196321797063f, - 0.3206956490550448f, - 0.3205716604353504f, - 0.32044766632274674f, - 0.32032366671935897f, - 0.32019966162731206f, - 0.32007565104873004f, - 0.31995163498573864f, - 0.319827613440462f, - 0.31970358641502605f, - 0.31957955391155507f, - 0.31945551593217525f, - 0.319331472479011f, - 0.31920742355418863f, - 0.31908336915983293f, - 0.3189593092980703f, - 0.31883524397102564f, - 0.3187111731808252f, - 0.3185870969295954f, - 0.3184630152194613f, - 0.3183389280525499f, - 0.31821483543098655f, - 0.31809073735689836f, - 0.3179666338324109f, - 0.31784252485965153f, - 0.31771841044074595f, - 0.3175942905778216f, - 0.31747016527300453f, - 0.3173460345284219f, - 0.3172218983462011f, - 0.3170977567284684f, - 0.3169736096773518f, - 0.3168494571949775f, - 0.3167252992834738f, - 0.31660113594496725f, - 0.3164769671815862f, - 0.3163527929954574f, - 0.31622861338870933f, - 0.3161044283634694f, - 0.31598023792186514f, - 0.31585604206602524f, - 0.315731840798077f, - 0.31560763412014936f, - 0.31548342203436974f, - 0.31535920454286737f, - 0.3152349816477698f, - 0.3151107533512064f, - 0.31498651965530494f, - 0.314862280562195f, - 0.3147380360740045f, - 0.31461378619286323f, - 0.3144895309208993f, - 0.31436527026024225f, - 0.31424100421302165f, - 0.31411673278136587f, - 0.31399245596740516f, - 0.31386817377326814f, - 0.3137438862010852f, - 0.31361959325298505f, - 0.31349529493109834f, - 0.3133709912375541f, - 0.3132466821744829f, - 0.3131223677440141f, - 0.31299804794827846f, - 0.31287372278940545f, - 0.31274939226952575f, - 0.3126250563907701f, - 0.3125007151552681f, - 0.3123763685651513f, - 0.3122520166225493f, - 0.3121276593295938f, - 0.31200329668841476f, - 0.311878928701144f, - 0.31175455536991153f, - 0.3116301766968495f, - 0.3115057926840881f, - 0.31138140333375913f, - 0.3112570086479943f, - 0.3111326086289244f, - 0.3110082032786816f, - 0.31088379259939736f, - 0.31075937659320285f, - 0.31063495526223084f, - 0.31051052860861234f, - 0.31038609663448025f, - 0.31026165934196587f, - 0.3101372167332021f, - 0.31001276881032097f, - 0.3098883155754544f, - 0.3097638570307352f, - 0.3096393931782965f, - 0.30951492402027f, - 0.30939044955878925f, - 0.30926596979598636f, - 0.30914148473399505f, - 0.3090169943749475f, - 0.3088924987209777f, - 0.30876799777421793f, - 0.3086434915368023f, - 0.3085189800108635f, - 0.30839446319853525f, - 0.30826994110195166f, - 0.30814541372324544f, - 0.3080208810645513f, - 0.30789634312800207f, - 0.30777179991573267f, - 0.30764725142987615f, - 0.30752269767256757f, - 0.3073981386459402f, - 0.30727357435212915f, - 0.30714900479326807f, - 0.30702442997149215f, - 0.30689984988893515f, - 0.3067752645477322f, - 0.30665067395001827f, - 0.30652607809792753f, - 0.3064014769935957f, - 0.3062768706391569f, - 0.3061522590367471f, - 0.3060276421885006f, - 0.30590302009655357f, - 0.3057783927630405f, - 0.3056537601900977f, - 0.30552912237985985f, - 0.3054044793344635f, - 0.30527983105604345f, - 0.30515517754673643f, - 0.3050305188086778f, - 0.30490585484400334f, - 0.30478118565484974f, - 0.3046565112433525f, - 0.30453183161164865f, - 0.30440714676187375f, - 0.30428245669616505f, - 0.3041577614166582f, - 0.3040330609254907f, - 0.3039083552247984f, - 0.3037836443167186f, - 0.3036589282033885f, - 0.3035342068869443f, - 0.3034094803695239f, - 0.3032847486532636f, - 0.3031600117403015f, - 0.30303526963277405f, - 0.3029105223328195f, - 0.30278576984257466f, - 0.30266101216417785f, - 0.3025362492997659f, - 0.3024114812514775f, - 0.30228670802144963f, - 0.3021619296118207f, - 0.30203714602472914f, - 0.3019123572623123f, - 0.3017875633267092f, - 0.3016627642200573f, - 0.30153795994449584f, - 0.3014131505021625f, - 0.30128833589519666f, - 0.30116351612573616f, - 0.3010386911959206f, - 0.300913861107888f, - 0.30078902586377765f, - 0.30066418546572904f, - 0.3005393399158804f, - 0.3004144892163718f, - 0.30028963336934167f, - 0.30016477237693023f, - 0.30003990624127647f, - 0.2999150349645196f, - 0.29979015854880003f, - 0.29966527699625667f, - 0.2995403903090301f, - 0.2994154984892596f, - 0.2992906015390857f, - 0.29916569946064786f, - 0.299040792256087f, - 0.2989158799275425f, - 0.2987909624771556f, - 0.2986660399070658f, - 0.29854111221941454f, - 0.2984161794163416f, - 0.2982912414999884f, - 0.29816629847249504f, - 0.29804135033600304f, - 0.29791639709265266f, - 0.29779143874458525f, - 0.29766647529394247f, - 0.29754150674286456f, - 0.2974165330934938f, - 0.2972915543479706f, - 0.2971665705084374f, - 0.2970415815770349f, - 0.29691658755590555f, - 0.2967915884471903f, - 0.2966665842530317f, - 0.296541574975571f, - 0.2964165606169509f, - 0.29629154117931267f, - 0.296166516664799f, - 0.29604148707555245f, - 0.29591645241371456f, - 0.29579141268142867f, - 0.2956663678808364f, - 0.2955413180140812f, - 0.29541626308330493f, - 0.29529120309065127f, - 0.29516613803826214f, - 0.29504106792828144f, - 0.2949159927628513f, - 0.2947909125441157f, - 0.2946658272742171f, - 0.29454073695529953f, - 0.2944156415895056f, - 0.2942905411789796f, - 0.29416543572586434f, - 0.29404032523230417f, - 0.29391520970044244f, - 0.2937900891324226f, - 0.2936649635303894f, - 0.29353983289648594f, - 0.2934146972328571f, - 0.2932895565416464f, - 0.2931644108249983f, - 0.29303926008505765f, - 0.2929141043239681f, - 0.29278894354387486f, - 0.2926637777469217f, - 0.2925386069352543f, - 0.2924134311110164f, - 0.29228825027635386f, - 0.2921630644334106f, - 0.29203787358433264f, - 0.2919126777312642f, - 0.29178747687635087f, - 0.2916622710217384f, - 0.29153706016957126f, - 0.2914118443219958f, - 0.2912866234811567f, - 0.2911613976492004f, - 0.29103616682827177f, - 0.2909109310205175f, - 0.2907856902280826f, - 0.2906604444531139f, - 0.29053519369775654f, - 0.2904099379641576f, - 0.2902846772544624f, - 0.29015941157081765f, - 0.29003414091537016f, - 0.28990886529026566f, - 0.2897835846976515f, - 0.28965829913967345f, - 0.28953300861847914f, - 0.2894077131362145f, - 0.28928241269502736f, - 0.28915710729706373f, - 0.2890317969444717f, - 0.28890648163939786f, - 0.28878116138398907f, - 0.28865583618039353f, - 0.2885305060307578f, - 0.2884051709372302f, - 0.2882798309019576f, - 0.2881544859270883f, - 0.2880291360147693f, - 0.2879037811671494f, - 0.28777842138637544f, - 0.28765305667459645f, - 0.28752768703395964f, - 0.28740231246661396f, - 0.28727693297470697f, - 0.28715154856038727f, - 0.2870261592258038f, - 0.28690076497310424f, - 0.28677536580443796f, - 0.28664996172195284f, - 0.28652455272779853f, - 0.286399138824123f, - 0.286273720013076f, - 0.2861482962968057f, - 0.2860228676774621f, - 0.28589743415719354f, - 0.28577199573815004f, - 0.2856465524224802f, - 0.2855211042123339f, - 0.285395651109861f, - 0.2852701931172103f, - 0.28514473023653236f, - 0.28501926246997605f, - 0.2848937898196921f, - 0.2847683122878296f, - 0.28464282987653944f, - 0.28451734258797085f, - 0.2843918504242749f, - 0.28426635338760103f, - 0.28414085148009993f, - 0.2840153447039226f, - 0.283889833061219f, - 0.2837643165541394f, - 0.28363879518483537f, - 0.28351326895545675f, - 0.2833877378681553f, - 0.28326220192508106f, - 0.283136661128386f, - 0.28301111548022023f, - 0.282885564982736f, - 0.28276000963808395f, - 0.2826344494484151f, - 0.28250888441588135f, - 0.2823833145426346f, - 0.28225773983082564f, - 0.28213216028260696f, - 0.2820065759001295f, - 0.281880986685546f, - 0.2817553926410075f, - 0.2816297937686669f, - 0.2815041900706755f, - 0.2813785815491862f, - 0.28125296820635054f, - 0.28112735004432127f, - 0.2810017270652512f, - 0.28087609927129203f, - 0.2807504666645972f, - 0.2806248292473186f, - 0.2804991870216097f, - 0.28037353998962267f, - 0.28024788815351115f, - 0.28012223151542737f, - 0.27999657007752526f, - 0.2798709038419571f, - 0.2797452328108771f, - 0.27961955698643765f, - 0.27949387637079265f, - 0.279368190966096f, - 0.27924250077450047f, - 0.2791168057981605f, - 0.2789911060392291f, - 0.2788654014998609f, - 0.2787396921822089f, - 0.2786139780884281f, - 0.27848825922067155f, - 0.27836253558109436f, - 0.2782368071718499f, - 0.2781110739950933f, - 0.27798533605297826f, - 0.2778595933476599f, - 0.2777338458812926f, - 0.27760809365603034f, - 0.2774823366740289f, - 0.2773565749374421f, - 0.2772308084484258f, - 0.27710503720913404f, - 0.27697926122172273f, - 0.27685348048834624f, - 0.27672769501116057f, - 0.27660190479232016f, - 0.27647610983398085f, - 0.27635031013829847f, - 0.27622450570742785f, - 0.2760986965435253f, - 0.27597288264874575f, - 0.2758470640252459f, - 0.27572124067518067f, - 0.2755954126007069f, - 0.27546957980397974f, - 0.2753437422871562f, - 0.2752179000523916f, - 0.27509205310184265f, - 0.2749662014376661f, - 0.27484034506201754f, - 0.27471448397705434f, - 0.27458861818493224f, - 0.2744627476878088f, - 0.2743368724878399f, - 0.27421099258718323f, - 0.27408510798799485f, - 0.2739592186924326f, - 0.27383332470265276f, - 0.2737074260208133f, - 0.2735815226490706f, - 0.27345561458958245f, - 0.2733297018445066f, - 0.2732037844159998f, - 0.27307786230622033f, - 0.27295193551732505f, - 0.2728260040514725f, - 0.27270006791082013f, - 0.27257412709752527f, - 0.27244818161374684f, - 0.27232223146164203f, - 0.27219627664336976f, - 0.2720703171610874f, - 0.2719443530169541f, - 0.2718183842131273f, - 0.2716924107517664f, - 0.271566432635029f, - 0.2714404498650746f, - 0.27131446244406093f, - 0.2711884703741477f, - 0.2710624736574929f, - 0.2709364722962562f, - 0.2708104662925959f, - 0.27068445564867183f, - 0.2705584403666423f, - 0.270432420448667f, - 0.27030639589690564f, - 0.2701803667135168f, - 0.2700543329006608f, - 0.2699282944604963f, - 0.2698022513951839f, - 0.26967620370688233f, - 0.2695501513977523f, - 0.2694240944699528f, - 0.2692980329256447f, - 0.2691719667669871f, - 0.26904589599614104f, - 0.26891982061526576f, - 0.268793740626522f, - 0.2686676560320706f, - 0.26854156683407104f, - 0.2684154730346847f, - 0.26828937463607133f, - 0.2681632716403924f, - 0.2680371640498079f, - 0.26791105186647934f, - 0.2677849350925669f, - 0.2676588137302324f, - 0.26753268778163597f, - 0.2674065572489397f, - 0.2672804221343038f, - 0.2671542824398906f, - 0.2670281381678605f, - 0.26690198932037573f, - 0.2667758358995975f, - 0.26664967790768707f, - 0.2665235153468068f, - 0.26639734821911765f, - 0.2662711765267824f, - 0.26614500027196203f, - 0.2660188194568194f, - 0.2658926340835157f, - 0.2657664441542136f, - 0.2656402496710757f, - 0.26551405063626343f, - 0.2653878470519401f, - 0.2652616389202673f, - 0.2651354262434083f, - 0.2650092090235251f, - 0.26488298726278103f, - 0.26475676096333817f, - 0.26463053012736015f, - 0.26450429475700904f, - 0.2643780548544483f, - 0.2642518104218415f, - 0.2641255614613508f, - 0.26399930797514043f, - 0.2638730499653728f, - 0.2637467874342122f, - 0.2636205203838212f, - 0.2634942488163643f, - 0.26336797273400414f, - 0.26324169213890536f, - 0.2631154070332309f, - 0.2629891174191454f, - 0.26286282329881205f, - 0.2627365246743952f, - 0.2626102215480594f, - 0.262483913921968f, - 0.26235760179828604f, - 0.2622312851791771f, - 0.2621049640668063f, - 0.2619786384633373f, - 0.2618523083709356f, - 0.2617259737917649f, - 0.26159963472799075f, - 0.26147329118177753f, - 0.26134694315528967f, - 0.261220590650693f, - 0.26109423367015167f, - 0.26096787221583156f, - 0.26084150628989705f, - 0.2607151358945142f, - 0.2605887610318476f, - 0.26046238170406333f, - 0.2603359979133261f, - 0.26020960966180234f, - 0.26008321695165676f, - 0.2599568197850559f, - 0.25983041816416486f, - 0.2597040120911497f, - 0.2595776015681769f, - 0.2594511865974116f, - 0.25932476718102077f, - 0.25919834332116964f, - 0.2590719150200254f, - 0.25894548227975345f, - 0.258819045102521f, - 0.2586926034904938f, - 0.25856615744583905f, - 0.25843970697072266f, - 0.25831325206731215f, - 0.2581867927377734f, - 0.2580603289842737f, - 0.25793386080898045f, - 0.25780738821405974f, - 0.2576809112016795f, - 0.25755442977400606f, - 0.25742794393320745f, - 0.25730145368145013f, - 0.25717495902090237f, - 0.2570484599537307f, - 0.2569219564821036f, - 0.2567954486081877f, - 0.2566689363341512f, - 0.25654241966216224f, - 0.2564158985943882f, - 0.2562893731329966f, - 0.25616284328015626f, - 0.25603630903803437f, - 0.2559097704088f, - 0.25578322739462034f, - 0.2556566799976646f, - 0.25553012822010074f, - 0.25540357206409675f, - 0.255277011531822f, - 0.2551504466254441f, - 0.25502387734713233f, - 0.2548973036990557f, - 0.25477072568338227f, - 0.25464414330228163f, - 0.254517556557922f, - 0.25439096545247325f, - 0.25426436998810353f, - 0.254137770166983f, - 0.25401116599128004f, - 0.25388455746316474f, - 0.2537579445848058f, - 0.25363132735837296f, - 0.2535047057860363f, - 0.2533780798699645f, - 0.25325144961232826f, - 0.25312481501529643f, - 0.25299817608103964f, - 0.2528715328117271f, - 0.25274488520952954f, - 0.2526182332766162f, - 0.2524915770151582f, - 0.2523649164273247f, - 0.25223825151528706f, - 0.25211158228121466f, - 0.2519849087272784f, - 0.25185823085564923f, - 0.2517315486684969f, - 0.25160486216799294f, - 0.2514781713563072f, - 0.2513514762356114f, - 0.2512247768080754f, - 0.2510980730758713f, - 0.25097136504116907f, - 0.2508446527061407f, - 0.25071793607295656f, - 0.2505912151437888f, - 0.2504644899208082f, - 0.2503377604061858f, - 0.250211026602094f, - 0.2500842885107034f, - 0.2499575461341865f, - 0.24983079947471415f, - 0.24970404853445896f, - 0.24957729331559195f, - 0.24945053382028587f, - 0.24932377005071185f, - 0.24919700200904282f, - 0.24907022969745005f, - 0.2489434531181062f, - 0.24881667227318394f, - 0.24868988716485482f, - 0.24856309779529207f, - 0.24843630416666737f, - 0.24830950628115417f, - 0.24818270414092422f, - 0.2480558977481511f, - 0.24792908710500677f, - 0.24780227221366494f, - 0.24767545307629768f, - 0.24754862969507846f, - 0.24742180207218079f, - 0.24729497020977692f, - 0.24716813411004102f, - 0.24704129377514544f, - 0.2469144492072645f, - 0.24678760040857073f, - 0.24666074738123853f, - 0.24653389012744065f, - 0.24640702864935157f, - 0.2462801629491442f, - 0.24615329302899322f, - 0.24602641889107163f, - 0.2458995405375538f, - 0.24577265797061423f, - 0.24564577119242612f, - 0.24551888020516452f, - 0.2453919850110028f, - 0.24526508561211616f, - 0.24513818201067852f, - 0.24501127420886393f, - 0.2448843622088478f, - 0.24475744601280383f, - 0.24463052562290757f, - 0.24450360104133292f, - 0.24437667227025556f, - 0.2442497393118495f, - 0.2441228021682906f, - 0.24399586084175298f, - 0.24386891533441266f, - 0.24374196564844391f, - 0.24361501178602285f, - 0.24348805374932397f, - 0.2433610915405235f, - 0.24323412516179602f, - 0.24310715461531796f, - 0.24298017990326407f, - 0.2428532010278104f, - 0.2427262179911332f, - 0.2425992307954074f, - 0.24247223944280974f, - 0.24234524393551535f, - 0.2422182442757011f, - 0.24209124046554223f, - 0.2419642325072158f, - 0.24183722040289718f, - 0.24171020415476357f, - 0.24158318376499047f, - 0.24145615923575522f, - 0.24132913056923347f, - 0.24120209776760226f, - 0.24107506083303873f, - 0.2409480197677187f, - 0.2408209745738199f, - 0.24069392525351832f, - 0.24056687180899178f, - 0.24043981424241645f, - 0.24031275255597032f, - 0.24018568675182964f, - 0.24005861683217256f, - 0.23993154279917547f, - 0.23980446465501667f, - 0.23967738240187272f, - 0.239550296041922f, - 0.23942320557734126f, - 0.23929611101030898f, - 0.2391690123430025f, - 0.2390419095775992f, - 0.23891480271627774f, - 0.23878769176121528f, - 0.23866057671459065f, - 0.2385334575785811f, - 0.23840633435536562f, - 0.2382792070471216f, - 0.23815207565602772f, - 0.2380249401842628f, - 0.2378978006340044f, - 0.23777065700743188f, - 0.23764350930672296f, - 0.23751635753405714f, - 0.2373892016916123f, - 0.237262041781568f, - 0.23713487780610232f, - 0.23700770976739502f, - 0.23688053766762418f, - 0.23675336150896933f, - 0.23662618129361002f, - 0.2364989970237246f, - 0.23637180870149319f, - 0.23624461632909427f, - 0.23611741990870808f, - 0.23599021944251328f, - 0.23586301493269024f, - 0.23573580638141775f, - 0.23560859379087631f, - 0.23548137716324488f, - 0.23535415650070407f, - 0.23522693180543294f, - 0.2350997030796119f, - 0.23497247032542137f, - 0.2348452335450406f, - 0.23471799274065067f, - 0.23459074791443088f, - 0.23446349906856245f, - 0.2343362462052249f, - 0.23420898932659948f, - 0.2340817284348663f, - 0.23395446353220553f, - 0.23382719462079865f, - 0.23369992170282552f, - 0.23357264478046783f, - 0.23344536385590553f, - 0.2333180789313204f, - 0.23319079000889262f, - 0.23306349709080407f, - 0.23293620017923503f, - 0.23280889927636755f, - 0.23268159438438207f, - 0.23255428550546076f, - 0.23242697264178414f, - 0.23229965579553458f, - 0.23217233496889275f, - 0.23204501016404067f, - 0.2319176813831605f, - 0.23179034862843303f, - 0.23166301190204103f, - 0.23153567120616544f, - 0.23140832654298915f, - 0.23128097791469324f, - 0.2311536253234607f, - 0.2310262687714728f, - 0.23089890826091264f, - 0.23077154379396164f, - 0.23064417537280257f, - 0.2305168029996183f, - 0.23038942667659046f, - 0.23026204640590245f, - 0.23013466218973608f, - 0.23000727403027485f, - 0.2298798819297007f, - 0.2297524858901973f, - 0.22962508591394673f, - 0.22949768200313275f, - 0.22937027415993758f, - 0.22924286238654512f, - 0.22911544668513775f, - 0.22898802705789953f, - 0.22886060350701287f, - 0.22873317603466206f, - 0.22860574464302963f, - 0.22847830933429994f, - 0.22835087011065575f, - 0.2282234269742815f, - 0.22809597992736005f, - 0.22796852897207603f, - 0.22784107411061288f, - 0.22771361534515405f, - 0.22758615267788393f, - 0.227458686110987f, - 0.2273312156466465f, - 0.22720374128704746f, - 0.22707626303437328f, - 0.2269487808908091f, - 0.22682129485853844f, - 0.2266938049397466f, - 0.22656631113661727f, - 0.2264388134513358f, - 0.226311311886086f, - 0.22618380644305344f, - 0.22605629712442205f, - 0.22592878393237706f, - 0.22580126686910384f, - 0.2256737459367865f, - 0.22554622113761089f, - 0.2254186924737613f, - 0.22529115994742374f, - 0.2251636235607826f, - 0.225036083316024f, - 0.22490853921533252f, - 0.2247809912608944f, - 0.22465343945489427f, - 0.2245258837995186f, - 0.22439832429695214f, - 0.224270760949381f, - 0.22414319375899142f, - 0.2240156227279683f, - 0.22388804785849845f, - 0.22376046915276696f, - 0.2236328866129607f, - 0.22350530024126494f, - 0.22337771003986667f, - 0.22325011601095124f, - 0.22312251815670583f, - 0.2229949164793159f, - 0.22286731098096876f, - 0.2227397016638505f, - 0.22261208853014713f, - 0.22248447158204623f, - 0.22235685082173356f, - 0.2222292262513968f, - 0.2221015978732218f, - 0.2219739656893964f, - 0.22184632970210663f, - 0.22171868991354035f, - 0.22159104632588378f, - 0.22146339894132494f, - 0.22133574776205017f, - 0.22120809279024714f, - 0.22108043402810362f, - 0.2209527714778062f, - 0.22082510514154313f, - 0.22069743502150113f, - 0.22056976111986862f, - 0.22044208343883243f, - 0.2203144019805811f, - 0.22018671674730161f, - 0.22005902774118263f, - 0.21993133496441125f, - 0.21980363841917586f, - 0.21967593810766492f, - 0.2195482340320657f, - 0.21942052619456723f, - 0.21929281459735692f, - 0.21916509924262387f, - 0.21903738013255564f, - 0.2189096572693415f, - 0.2187819306551691f, - 0.21865420029222787f, - 0.21852646618270555f, - 0.2183987283287917f, - 0.2182709867326742f, - 0.21814324139654231f, - 0.21801549232258535f, - 0.2178877395129914f, - 0.21775998296995033f, - 0.2176322226956508f, - 0.21750445869228147f, - 0.21737669096203244f, - 0.2172489195070921f, - 0.21712114432965068f, - 0.21699336543189665f, - 0.21686558281602036f, - 0.21673779648421046f, - 0.2166100064386574f, - 0.21648221268155f, - 0.21635441521507878f, - 0.21622661404143267f, - 0.21609880916280239f, - 0.21597100058137697f, - 0.2158431882993472f, - 0.2157153723189023f, - 0.21558755264223323f, - 0.2154597292715292f, - 0.2153319022089814f, - 0.2152040714567792f, - 0.21507623701711334f, - 0.2149483988921747f, - 0.2148205570841529f, - 0.2146927115952393f, - 0.2145648624276237f, - 0.21443700958349754f, - 0.21430915306505074f, - 0.21418129287447493f, - 0.2140534290139601f, - 0.21392556148569802f, - 0.2137976902918788f, - 0.21366981543469393f, - 0.21354193691633494f, - 0.2134140547389921f, - 0.21328616890485755f, - 0.21315827941612164f, - 0.21303038627497667f, - 0.21290248948361312f, - 0.2127745890442234f, - 0.2126466849589981f, - 0.21251877723012977f, - 0.21239086585980915f, - 0.2122629508502289f, - 0.21213503220357985f, - 0.2120071099220548f, - 0.21187918400784472f, - 0.21175125446314255f, - 0.2116233212901394f, - 0.21149538449102823f, - 0.21136744406800076f, - 0.21123950002324884f, - 0.2111115523589656f, - 0.2109836010773425f, - 0.2108556461805728f, - 0.21072768767084815f, - 0.21059972555036194f, - 0.2104717598213059f, - 0.21034379048587312f, - 0.21021581754625673f, - 0.2100878410046487f, - 0.20995986086324267f, - 0.20983187712423074f, - 0.2097038897898067f, - 0.20957589886216274f, - 0.20944790434349278f, - 0.20931990623598917f, - 0.2091919045418459f, - 0.20906389926325547f, - 0.20893589040241162f, - 0.20880787796150813f, - 0.20867986194273763f, - 0.20855184234829452f, - 0.2084238191803715f, - 0.20829579244116309f, - 0.20816776213286212f, - 0.2080397282576632f, - 0.20791169081775931f, - 0.2077836498153452f, - 0.20765560525261395f, - 0.20752755713176044f, - 0.20739950545497787f, - 0.2072714502244608f, - 0.2071433914424039f, - 0.20701532911100048f, - 0.20688726323244575f, - 0.20675919380893323f, - 0.20663112084265825f, - 0.20650304433581437f, - 0.20637496429059704f, - 0.20624688070920047f, - 0.20611879359381888f, - 0.2059907029466479f, - 0.2058626087698814f, - 0.2057345110657152f, - 0.20560640983634326f, - 0.20547830508396148f, - 0.20535019681076402f, - 0.20522208501894687f, - 0.2050939697107043f, - 0.20496585088823235f, - 0.20483772855372553f, - 0.20470960270938002f, - 0.2045814733573903f, - 0.20445334049995276f, - 0.20432520413926203f, - 0.2041970642775141f, - 0.2040689209169051f, - 0.20394077405962985f, - 0.20381262370788494f, - 0.20368446986386535f, - 0.20355631252976786f, - 0.2034281517077875f, - 0.20329998740012115f, - 0.203171819608964f, - 0.20304364833651303f, - 0.2029154735849636f, - 0.20278729535651233f, - 0.20265911365335598f, - 0.20253092847769003f, - 0.20240273983171178f, - 0.20227454771761683f, - 0.20214635213760257f, - 0.20201815309386476f, - 0.2018899505886009f, - 0.20176174462400684f, - 0.20163353520228025f, - 0.20150532232561705f, - 0.20137710599621506f, - 0.2012488862162703f, - 0.20112066298798068f, - 0.20099243631354238f, - 0.20086420619515347f, - 0.20073597263501017f, - 0.20060773563531067f, - 0.20047949519825137f, - 0.20035125132603052f, - 0.2002230040208451f, - 0.20009475328489218f, - 0.19996649912037015f, - 0.19983824152947574f, - 0.19970998051440705f, - 0.19958171607736225f, - 0.1994534482205382f, - 0.19932517694613366f, - 0.19919690225634562f, - 0.1990686241533729f, - 0.19894034263941265f, - 0.19881205771666383f, - 0.19868376938732366f, - 0.19855547765359122f, - 0.1984271825176639f, - 0.1982988839817408f, - 0.1981705820480195f, - 0.1980422767186988f, - 0.19791396799597763f, - 0.19778565588205366f, - 0.19765734037912633f, - 0.19752902148939344f, - 0.19740069921505457f, - 0.19727237355830762f, - 0.19714404452135226f, - 0.19701571210638655f, - 0.19688737631561026f, - 0.19675903715122153f, - 0.19663069461541985f, - 0.19650234871040478f, - 0.19637399943837464f, - 0.19624564680152948f, - 0.19611729080206775f, - 0.19598893144218965f, - 0.19586056872409374f, - 0.19573220264998034f, - 0.19560383322204808f, - 0.19547546044249742f, - 0.19534708431352713f, - 0.19521870483733775f, - 0.1950903220161286f, - 0.19496193585209906f, - 0.19483354634744984f, - 0.19470515350438003f, - 0.19457675732509044f, - 0.19444835781178024f, - 0.1943199549666504f, - 0.1941915487919002f, - 0.1940631392897307f, - 0.1939347264623413f, - 0.1938063103119332f, - 0.19367789084070589f, - 0.19354946805086068f, - 0.1934210419445972f, - 0.19329261252411642f, - 0.19316417979161937f, - 0.19303574374930585f, - 0.19290730439937745f, - 0.19277886174403408f, - 0.19265041578547742f, - 0.1925219665259075f, - 0.19239351396752613f, - 0.19226505811253344f, - 0.19213659896313134f, - 0.1920081365215201f, - 0.19187967078990134f, - 0.19175120177047666f, - 0.19162272946544653f, - 0.19149425387701313f, - 0.19136577500737698f, - 0.19123729285874042f, - 0.19110880743330405f, - 0.19098031873327037f, - 0.19085182676084006f, - 0.19072333151821572f, - 0.19059483300759816f, - 0.19046633123119008f, - 0.1903378261911924f, - 0.19020931788980755f, - 0.19008080632923782f, - 0.18995229151168438f, - 0.18982377343935022f, - 0.18969525211443697f, - 0.18956672753914636f, - 0.18943819971568154f, - 0.18930966864624393f, - 0.1891811343330367f, - 0.18905259677826142f, - 0.1889240559841214f, - 0.1887955119528183f, - 0.18866696468655553f, - 0.18853841418753486f, - 0.18840986045795985f, - 0.1882813035000323f, - 0.18815274331595597f, - 0.18802417990793274f, - 0.18789561327816645f, - 0.18776704342885914f, - 0.18763847036221468f, - 0.1875098940804353f, - 0.18738131458572502f, - 0.18725273188028604f, - 0.18712414596632213f, - 0.18699555684603697f, - 0.186866964521633f, - 0.1867383689953145f, - 0.1866097702692841f, - 0.18648116834574613f, - 0.18635256322690327f, - 0.18622395491496005f, - 0.1860953434121192f, - 0.18596672872058537f, - 0.18583811084256144f, - 0.1857094897802517f, - 0.18558086553586045f, - 0.18545223811159078f, - 0.18532360750964755f, - 0.18519497373223393f, - 0.18506633678155487f, - 0.18493769665981374f, - 0.18480905336921555f, - 0.18468040691196375f, - 0.18455175729026346f, - 0.18442310450631827f, - 0.18429444856233343f, - 0.18416578946051257f, - 0.18403712720306112f, - 0.18390846179218276f, - 0.183779793230083f, - 0.18365112151896618f, - 0.18352244666103654f, - 0.18339376865849982f, - 0.18326508751355997f, - 0.18313640322842278f, - 0.18300771580529238f, - 0.18287902524637464f, - 0.18275033155387377f, - 0.18262163472999535f, - 0.18249293477694498f, - 0.18236423169692706f, - 0.18223552549214772f, - 0.18210681616481145f, - 0.1819781037171245f, - 0.1818493881512915f, - 0.1817206694695188f, - 0.18159194767401104f, - 0.1814632227669748f, - 0.1813344947506148f, - 0.18120576362713767f, - 0.1810770293987483f, - 0.18094829206765295f, - 0.18081955163605795f, - 0.18069080810616833f, - 0.18056206148019097f, - 0.18043331176033103f, - 0.18030455894879546f, - 0.18017580304778957f, - 0.1800470440595204f, - 0.17991828198619333f, - 0.17978951683001554f, - 0.17966074859319253f, - 0.17953197727793113f, - 0.1794032028864382f, - 0.17927442542091948f, - 0.1791456448835823f, - 0.1790168612766325f, - 0.17888807460227754f, - 0.17875928486272333f, - 0.1786304920601775f, - 0.17850169619684647f, - 0.17837289727493666f, - 0.17824409529665586f, - 0.17811529026421022f, - 0.17798648217980761f, - 0.1778576710456543f, - 0.17772885686395828f, - 0.1776000396369259f, - 0.17747121936676521f, - 0.17734239605568272f, - 0.17721356970588661f, - 0.17708474031958343f, - 0.1769559078989815f, - 0.17682707244628745f, - 0.17669823396370973f, - 0.17656939245345507f, - 0.17644054791773203f, - 0.1763117003587474f, - 0.17618284977870943f, - 0.17605399617982637f, - 0.1759251395643052f, - 0.17579627993435473f, - 0.17566741729218205f, - 0.1755385516399961f, - 0.17540968298000403f, - 0.17528081131441486f, - 0.17515193664543593f, - 0.1750230589752763f, - 0.17489417830614343f, - 0.17476529464024604f, - 0.174636407979793f, - 0.17450751832699185f, - 0.17437862568405194f, - 0.17424973005318095f, - 0.17412083143658835f, - 0.17399192983648193f, - 0.1738630252550712f, - 0.1737341176945641f, - 0.17360520715717023f, - 0.17347629364509762f, - 0.17334737716055604f, - 0.17321845770575353f, - 0.17308953528289997f, - 0.17296060989420356f, - 0.17283168154187425f, - 0.17270275022812034f, - 0.17257381595515192f, - 0.17244487872517733f, - 0.17231593854040678f, - 0.17218699540304916f, - 0.17205804931531346f, - 0.17192910027941002f, - 0.17180014829754744f, - 0.17167119337193573f, - 0.17154223550478495f, - 0.17141327469830386f, - 0.17128431095470306f, - 0.17115534427619145f, - 0.17102637466497966f, - 0.17089740212327673f, - 0.17076842665329342f, - 0.1706394482572388f, - 0.1705104669373238f, - 0.17038148269575754f, - 0.17025249553475108f, - 0.17012350545651364f, - 0.1699945124632559f, - 0.16986551655718857f, - 0.16973651774052104f, - 0.1696075160154646f, - 0.16947851138422873f, - 0.1693495038490248f, - 0.16922049341206244f, - 0.16909148007555308f, - 0.16896246384170646f, - 0.1688334447127341f, - 0.16870442269084585f, - 0.16857539777825287f, - 0.16844636997716644f, - 0.16831733928979653f, - 0.16818830571835494f, - 0.16805926926505171f, - 0.16793022993209875f, - 0.1678011877217062f, - 0.16767214263608612f, - 0.1675430946774487f, - 0.1674140438480061f, - 0.16728499014996862f, - 0.16715593358554845f, - 0.16702687415695655f, - 0.16689781186640382f, - 0.16676874671610262f, - 0.16663967870826357f, - 0.16651060784509908f, - 0.16638153412881984f, - 0.16625245756163845f, - 0.16612337814576564f, - 0.16599429588341408f, - 0.16586521077679467f, - 0.1657361228281201f, - 0.16560703203960145f, - 0.16547793841345101f, - 0.16534884195188124f, - 0.1652197426571033f, - 0.16509064053133016f, - 0.16496153557677304f, - 0.164832427795645f, - 0.16470331719015743f, - 0.16457420376252344f, - 0.16444508751495449f, - 0.16431596844966384f, - 0.164186846568863f, - 0.16405772187476536f, - 0.16392859436958254f, - 0.16379946405552756f, - 0.16367033093481342f, - 0.16354119500965195f, - 0.16341205628225675f, - 0.16328291475483964f, - 0.16315377042961435f, - 0.16302462330879283f, - 0.1628954733945889f, - 0.16276632068921457f, - 0.16263716519488378f, - 0.16250800691380865f, - 0.16237884584820314f, - 0.16224968200027956f, - 0.1621205153722515f, - 0.16199134596633266f, - 0.16186217378473589f, - 0.161732998829674f, - 0.16160382110336138f, - 0.16147464060801048f, - 0.16134545734583566f, - 0.1612162713190496f, - 0.1610870825298667f, - 0.16095789098049973f, - 0.1608286966731632f, - 0.16069949961007002f, - 0.16057029979343473f, - 0.16044109722547029f, - 0.16031189190839146f, - 0.1601826838444112f, - 0.16005347303574438f, - 0.15992425948460412f, - 0.15979504319320528f, - 0.15966582416376113f, - 0.15953660239848666f, - 0.15940737789959517f, - 0.15927815066930176f, - 0.15914892070981984f, - 0.15901968802336414f, - 0.15889045261214949f, - 0.15876121447838942f, - 0.1586319736242993f, - 0.1585027300520927f, - 0.15837348376398508f, - 0.15824423476219018f, - 0.1581149830489235f, - 0.15798572862639884f, - 0.15785647149683188f, - 0.15772721166243647f, - 0.15759794912542788f, - 0.1574686838880215f, - 0.15733941595243128f, - 0.15721014532087313f, - 0.15708087199556114f, - 0.15695159597871133f, - 0.15682231727253787f, - 0.15669303587925681f, - 0.15656375180108248f, - 0.15643446504023098f, - 0.15630517559891677f, - 0.15617588347935601f, - 0.15604658868376328f, - 0.15591729121435483f, - 0.15578799107334526f, - 0.155658688262951f, - 0.1555293827853872f, - 0.15540007464286898f, - 0.1552707638376129f, - 0.1551414503718338f, - 0.15501213424774832f, - 0.15488281546757132f, - 0.15475349403351957f, - 0.1546241699478081f, - 0.15449484321265322f, - 0.1543655138302714f, - 0.15423618180287774f, - 0.1541068471326892f, - 0.15397750982192107f, - 0.15384816987279032f, - 0.15371882728751232f, - 0.15358948206830417f, - 0.1534601342173813f, - 0.15333078373696093f, - 0.1532014306292586f, - 0.15307207489649152f, - 0.1529427165408754f, - 0.15281335556462713f, - 0.15268399196996374f, - 0.15255462575910098f, - 0.15242525693425632f, - 0.15229588549764567f, - 0.15216651145148657f, - 0.15203713479799497f, - 0.1519077555393886f, - 0.1517783736778834f, - 0.15164898921569725f, - 0.15151960215504617f, - 0.15139021249814769f, - 0.1512608202472192f, - 0.15113142540447702f, - 0.15100202797213913f, - 0.15087262795242182f, - 0.15074322534754325f, - 0.1506138201597198f, - 0.15048441239116966f, - 0.1503550020441098f, - 0.15022558912075712f, - 0.15009617362333f, - 0.14996675555404507f, - 0.14983733491512075f, - 0.1497079117087737f, - 0.1495784859372225f, - 0.1494490576026839f, - 0.14931962670737653f, - 0.14919019325351723f, - 0.14906075724332474f, - 0.148931318679016f, - 0.14880187756280977f, - 0.14867243389692314f, - 0.14854298768357496f, - 0.14841353892498238f, - 0.14828408762336392f, - 0.1481546337809381f, - 0.14802517739992221f, - 0.14789571848253535f, - 0.14776625703099489f, - 0.14763679304751995f, - 0.147507326534328f, - 0.1473778574936383f, - 0.1472483859276684f, - 0.14711891183863762f, - 0.14698943522876362f, - 0.14685995610026578f, - 0.1467304744553618f, - 0.14660099029627083f, - 0.1464715036252119f, - 0.1463420144444029f, - 0.14621252275606345f, - 0.14608302856241148f, - 0.14595353186566676f, - 0.14582403266804722f, - 0.14569453097177273f, - 0.14556502677906138f, - 0.14543552009213306f, - 0.14530601091320594f, - 0.14517649924450005f, - 0.14504698508823358f, - 0.14491746844662667f, - 0.14478794932189767f, - 0.1446584277162667f, - 0.1445289036319522f, - 0.14439937707117442f, - 0.14426984803615234f, - 0.14414031652910494f, - 0.1440107825522526f, - 0.14388124610781397f, - 0.1437517071980095f, - 0.14362216582505793f, - 0.14349262199117935f, - 0.14336307569859388f, - 0.1432335269495204f, - 0.1431039757461796f, - 0.1429744220907904f, - 0.1428448659855735f, - 0.142715307432748f, - 0.1425857464345347f, - 0.1424561829931527f, - 0.14232661711082295f, - 0.14219704878976464f, - 0.1420674780321987f, - 0.14193790484034452f, - 0.14180832921642267f, - 0.14167875116265385f, - 0.14154917068125747f, - 0.14141958777445474f, - 0.1412900024444651f, - 0.1411604146935099f, - 0.14103082452380872f, - 0.14090123193758286f, - 0.14077163693705205f, - 0.14064203952443768f, - 0.14051243970195954f, - 0.1403828374718387f, - 0.14025323283629632f, - 0.14012362579755222f, - 0.1399940163578281f, - 0.1398644045193439f, - 0.13973479028432134f, - 0.13960517365498049f, - 0.1394755546335431f, - 0.13934593322222935f, - 0.1392163094232611f, - 0.1390866832388586f, - 0.13895705467124375f, - 0.13882742372263734f, - 0.1386977903952601f, - 0.1385681546913341f, - 0.13843851661307977f, - 0.1383088761627193f, - 0.13817923334247317f, - 0.13804958815456367f, - 0.1379199406012113f, - 0.13779029068463847f, - 0.13766063840706577f, - 0.13753098377071568f, - 0.1374013267778089f, - 0.13727166743056748f, - 0.1371420057312136f, - 0.13701234168196805f, - 0.13688267528505346f, - 0.1367530065426908f, - 0.13662333545710273f, - 0.1364936620305103f, - 0.1363639862651363f, - 0.13623430816320176f, - 0.1361046277269296f, - 0.13597494495854098f, - 0.13584525986025886f, - 0.13571557243430446f, - 0.13558588268290042f, - 0.13545619060826933f, - 0.13532649621263257f, - 0.13519679949821328f, - 0.13506710046723294f, - 0.13493739912191477f, - 0.13480769546448026f, - 0.13467798949715276f, - 0.13454828122215384f, - 0.13441857064170692f, - 0.13428885775803368f, - 0.13415914257335712f, - 0.13402942508990034f, - 0.13389970530988515f, - 0.1337699832355351f, - 0.13364025886907255f, - 0.1335105322127198f, - 0.1333808032687006f, - 0.13325107203923695f, - 0.1331213385265526f, - 0.13299160273286964f, - 0.13286186466041194f, - 0.1327321243114021f, - 0.1326023816880627f, - 0.13247263679261734f, - 0.13234288962728957f, - 0.1322131401943017f, - 0.1320833884958778f, - 0.13195363453424033f, - 0.1318238783116134f, - 0.13169411983021947f, - 0.13156435909228284f, - 0.13143459610002603f, - 0.13130483085567335f, - 0.1311750633614474f, - 0.13104529361957223f, - 0.13091552163227177f, - 0.13078574740176876f, - 0.13065597093028777f, - 0.13052619222005157f, - 0.13039641127328475f, - 0.13026662809221023f, - 0.13013684267905268f, - 0.13000705503603502f, - 0.12987726516538203f, - 0.12974747306931678f, - 0.12961767875006405f, - 0.129487882209847f, - 0.12935808345089006f, - 0.12922828247541773f, - 0.12909847928565327f, - 0.12896867388382166f, - 0.12883886627214625f, - 0.1287090564528521f, - 0.12857924442816263f, - 0.12844943020030294f, - 0.12831961377149656f, - 0.1281897951439687f, - 0.12805997431994287f, - 0.12793015130164442f, - 0.12780032609129696f, - 0.12767049869112587f, - 0.1275406691033553f, - 0.12741083733020936f, - 0.1272810033739136f, - 0.1271511672366918f, - 0.1270213289207695f, - 0.12689148842837064f, - 0.12676164576172083f, - 0.12663180092304405f, - 0.12650195391456598f, - 0.12637210473851068f, - 0.12624225339710352f, - 0.12611239989256987f, - 0.1259825442271339f, - 0.1258526864030215f, - 0.12572282642245686f, - 0.12559296428766603f, - 0.1254631000008732f, - 0.12533323356430454f, - 0.1252033649801843f, - 0.12507349425073871f, - 0.12494362137819212f, - 0.12481374636477077f, - 0.12468386921269917f, - 0.12455398992420315f, - 0.12442410850150859f, - 0.12429422494684012f, - 0.12416433926242412f, - 0.12403445145048526f, - 0.12390456151325004f, - 0.12377466945294319f, - 0.12364477527179125f, - 0.12351487897201906f, - 0.12338498055585323f, - 0.12325508002551865f, - 0.12312517738324155f, - 0.12299527263124826f, - 0.12286536577176377f, - 0.12273545680701485f, - 0.1226055457392266f, - 0.12247563257062591f, - 0.12234571730343788f, - 0.12221579993988949f, - 0.12208588048220638f, - 0.12195595893261424f, - 0.12182603529334014f, - 0.12169610956660941f, - 0.12156618175464914f, - 0.12143625185968476f, - 0.12130631988394346f, - 0.12117638582965069f, - 0.12104644969903373f, - 0.12091651149431812f, - 0.12078657121773118f, - 0.12065662887149854f, - 0.1205266844578476f, - 0.12039673797900405f, - 0.12026678943719535f, - 0.12013683883464728f, - 0.12000688617358692f, - 0.11987693145624143f, - 0.11974697468483667f, - 0.11961701586160028f, - 0.11948705498875821f, - 0.11935709206853817f, - 0.11922712710316616f, - 0.11909716009486998f, - 0.11896719104587569f, - 0.11883721995841118f, - 0.11870724683470256f, - 0.11857727167697776f, - 0.11844729448746302f, - 0.1183173152683859f, - 0.11818733402197397f, - 0.11805735075045357f, - 0.1179273654560528f, - 0.11779737814099804f, - 0.11766738880751747f, - 0.11753739745783755f, - 0.1174074040941865f, - 0.11727740871879087f, - 0.11714741133387897f, - 0.11701741194167738f, - 0.11688741054441448f, - 0.11675740714431695f, - 0.11662740174361325f, - 0.11649739434453006f, - 0.11636738494929594f, - 0.11623737356013768f, - 0.11610736017928387f, - 0.11597734480896181f, - 0.11584732745139883f, - 0.11571730810882364f, - 0.1155872867834632f, - 0.11545726347754626f, - 0.11532723819329986f, - 0.1151972109329524f, - 0.11506718169873228f, - 0.11493715049286667f, - 0.11480711731758446f, - 0.11467708217511288f, - 0.11454704506768092f, - 0.11441700599751584f, - 0.11428696496684672f, - 0.11415692197790088f, - 0.11402687703290748f, - 0.1138968301340939f, - 0.11376678128368935f, - 0.11363673048392128f, - 0.11350667773701854f, - 0.11337662304521f, - 0.1132465664107232f, - 0.11311650783578753f, - 0.1129864473226306f, - 0.11285638487348187f, - 0.11272632049056903f, - 0.1125962541761216f, - 0.11246618593236732f, - 0.11233611576153577f, - 0.11220604366585478f, - 0.11207596964755355f, - 0.1119458937088613f, - 0.11181581585200596f, - 0.11168573607921727f, - 0.11155565439272322f, - 0.11142557079475361f, - 0.11129548528753652f, - 0.11116539787330178f, - 0.11103530855427755f, - 0.11090521733269375f, - 0.11077512421077901f, - 0.110645029190762f, - 0.11051493227487273f, - 0.11038483346533953f, - 0.11025473276439247f, - 0.11012463017425991f, - 0.10999452569717201f, - 0.10986441933535718f, - 0.10973431109104564f, - 0.1096042009664659f, - 0.10947408896384822f, - 0.10934397508542117f, - 0.10921385933341507f, - 0.10908374171005857f, - 0.10895362221758162f, - 0.10882350085821423f, - 0.10869337763418511f, - 0.10856325254772477f, - 0.108433125601062f, - 0.10830299679642734f, - 0.10817286613604965f, - 0.10804273362215958f, - 0.107912599256986f, - 0.10778246304275962f, - 0.10765232498170943f, - 0.10752218507606617f, - 0.10739204332805888f, - 0.10726189973991794f, - 0.10713175431387377f, - 0.10700160705215549f, - 0.10687145795699401f, - 0.10674130703061854f, - 0.10661115427526005f, - 0.1064809996931478f, - 0.10635084328651281f, - 0.10622068505758443f, - 0.10609052500859374f, - 0.10596036314177013f, - 0.10583019945934431f, - 0.10570003396354707f, - 0.10556986665660831f, - 0.10543969754075795f, - 0.1053095266182273f, - 0.10517935389124593f, - 0.10504917936204518f, - 0.10491900303285467f, - 0.10478882490590585f, - 0.10465864498342838f, - 0.10452846326765373f, - 0.10439827976081212f, - 0.10426809446513374f, - 0.10413790738284973f, - 0.10400771851619126f, - 0.10387752786738817f, - 0.10374733543867216f, - 0.10361714123227315f, - 0.10348694525042286f, - 0.10335674749535127f, - 0.10322654796929018f, - 0.10309634667446964f, - 0.1029661436131215f, - 0.10283593878747585f, - 0.10270573219976417f, - 0.10257552385221796f, - 0.10244531374706743f, - 0.10231510188654457f, - 0.10218488827287962f, - 0.10205467290830467f, - 0.10192445579505002f, - 0.10179423693534781f, - 0.10166401633142841f, - 0.10153379398552398f, - 0.101403569899865f, - 0.10127334407668367f, - 0.10114311651821052f, - 0.10101288722667738f, - 0.10088265620431616f, - 0.10075242345335744f, - 0.1006221889760336f, - 0.1004919527745753f, - 0.10036171485121498f, - 0.10023147520818333f, - 0.1001012338477129f, - 0.0999709907720344f, - 0.09984074598338044f, - 0.09971049948398183f, - 0.0995802512760712f, - 0.09945000136187941f, - 0.09931974974363916f, - 0.09918949642358184f, - 0.09905924140393883f, - 0.09892898468694294f, - 0.09879872627482518f, - 0.09866846616981839f, - 0.09853820437415363f, - 0.09840794089006381f, - 0.09827767571978006f, - 0.09814740886553533f, - 0.09801714032956083f, - 0.09788687011408911f, - 0.09775659822135276f, - 0.09762632465358305f, - 0.0974960494130131f, - 0.09736577250187424f, - 0.09723549392239961f, - 0.09710521367682062f, - 0.09697493176737047f, - 0.09684464819628062f, - 0.09671436296578433f, - 0.09658407607811312f, - 0.0964537875355003f, - 0.09632349734017745f, - 0.09619320549437749f, - 0.09606291200033339f, - 0.09593261686027679f, - 0.09580232007644117f, - 0.09567202165105823f, - 0.0955417215863615f, - 0.09541141988458272f, - 0.0952811165479555f, - 0.09515081157871164f, - 0.09502050497908476f, - 0.09489019675130676f, - 0.09475988689761089f, - 0.09462957542023039f, - 0.09449926232139724f, - 0.0943689476033452f, - 0.0942386312683063f, - 0.09410831331851435f, - 0.09397799375620187f, - 0.09384767258360142f, - 0.09371734980294691f, - 0.09358702541647047f, - 0.09345669942640608f, - 0.09332637183498596f, - 0.0931960426444441f, - 0.09306571185701279f, - 0.0929353794749261f, - 0.09280504550041634f, - 0.09267470993571764f, - 0.09254437278306238f, - 0.09241403404468473f, - 0.09228369372281715f, - 0.09215335181969384f, - 0.0920230083375473f, - 0.09189266327861183f, - 0.09176231664511994f, - 0.09163196843930554f, - 0.09150161866340258f, - 0.09137126731964365f, - 0.09124091441026318f, - 0.09111055993749385f, - 0.09098020390357014f, - 0.09084984631072476f, - 0.09071948716119227f, - 0.09058912645720542f, - 0.0904587642009988f, - 0.09032840039480526f, - 0.09019803504085942f, - 0.09006766814139418f, - 0.08993729969864378f, - 0.08980692971484248f, - 0.08967655819222327f, - 0.0895461851330209f, - 0.0894158105394684f, - 0.08928543441380057f, - 0.08915505675825053f, - 0.0890246775750531f, - 0.08889429686644143f, - 0.08876391463465044f, - 0.08863353088191332f, - 0.08850314561046503f, - 0.08837275882253881f, - 0.08824237052036969f, - 0.08811198070619095f, - 0.08798158938223764f, - 0.08785119655074315f, - 0.08772080221394257f, - 0.08759040637406976f, - 0.08746000903335854f, - 0.08732961019404414f, - 0.08719920985836004f, - 0.08706880802854146f, - 0.08693840470682193f, - 0.08680799989543633f, - 0.08667759359661954f, - 0.08654718581260518f, - 0.0864167765456286f, - 0.08628636579792345f, - 0.08615595357172519f, - 0.08602553986926749f, - 0.08589512469278585f, - 0.08576470804451401f, - 0.0856342899266875f, - 0.08550387034154015f, - 0.08537344929130707f, - 0.08524302677822344f, - 0.08511260280452314f, - 0.08498217737244182f, - 0.08485175048421341f, - 0.08472132214207362f, - 0.08459089234825642f, - 0.08446046110499758f, - 0.0843300284145311f, - 0.08419959427909283f, - 0.0840691587009168f, - 0.0839387216822389f, - 0.08380828322529324f, - 0.08367784333231529f, - 0.08354740200554053f, - 0.08341695924720317f, - 0.0832865150595392f, - 0.08315606944478285f, - 0.08302562240517015f, - 0.08289517394293541f, - 0.0827647240603147f, - 0.08263427275954235f, - 0.08250382004285452f, - 0.08237336591248601f, - 0.08224291037067169f, - 0.08211245341964776f, - 0.08198199506164869f, - 0.08185153529891072f, - 0.08172107413366836f, - 0.08159061156815792f, - 0.08146014760461395f, - 0.0813296822452728f, - 0.08119921549236907f, - 0.08106874734813917f, - 0.08093827781481774f, - 0.08080780689464122f, - 0.08067733458984433f, - 0.08054686090266311f, - 0.08041638583533361f, - 0.08028590939009064f, - 0.08015543156917075f, - 0.08002495237480874f, - 0.07989447180924124f, - 0.0797639898747031f, - 0.07963350657343099f, - 0.07950302190765982f, - 0.07937253587962628f, - 0.07924204849156535f, - 0.07911155974571377f, - 0.07898106964430654f, - 0.07885057818958001f, - 0.07872008538377058f, - 0.07858959122911331f, - 0.07845909572784507f, - 0.07832859888220096f, - 0.07819810069441793f, - 0.07806760116673113f, - 0.07793710030137752f, - 0.0778065981005923f, - 0.07767609456661248f, - 0.07754558970167333f, - 0.07741508350801145f, - 0.07728457598786348f, - 0.07715406714346516f, - 0.07702355697705232f, - 0.07689304549086207f, - 0.07676253268712982f, - 0.07663201856809275f, - 0.0765015031359863f, - 0.07637098639304772f, - 0.07624046834151291f, - 0.07610994898361782f, - 0.07597942832159978f, - 0.07584890635769431f, - 0.07571838309413832f, - 0.07558785853316873f, - 0.07545733267702116f, - 0.07532680552793304f, - 0.07519627708814f, - 0.07506574735987952f, - 0.07493521634538729f, - 0.07480468404690081f, - 0.07467415046665585f, - 0.07454361560688992f, - 0.07441307946983884f, - 0.07428254205773975f, - 0.07415200337282982f, - 0.07402146341734489f, - 0.07389092219352263f, - 0.07376037970359894f, - 0.07362983594981151f, - 0.07349929093439629f, - 0.07336874465959102f, - 0.07323819712763169f, - 0.07310764834075609f, - 0.07297709830120022f, - 0.07284654701120195f, - 0.07271599447299733f, - 0.07258544068882379f, - 0.07245488566091877f, - 0.07232432939151842f, - 0.07219377188286066f, - 0.0720632131371817f, - 0.07193265315671947f, - 0.07180209194371023f, - 0.07167152950039199f, - 0.07154096582900102f, - 0.07141040093177535f, - 0.07127983481095132f, - 0.07114926746876703f, - 0.07101869890745881f, - 0.0708881291292648f, - 0.07075755813642187f, - 0.07062698593116684f, - 0.07049641251573795f, - 0.07036583789237161f, - 0.0702352620633061f, - 0.07010468503077791f, - 0.06997410679702533f, - 0.06984352736428488f, - 0.0697129467347949f, - 0.06958236491079198f, - 0.06945178189451402f, - 0.069321197688199f, - 0.06919061229408353f, - 0.06906002571440606f, - 0.06892943795140326f, - 0.06879884900731362f, - 0.06866825888437382f, - 0.06853766758482242f, - 0.06840707511089615f, - 0.06827648146483357f, - 0.06814588664887149f, - 0.06801529066524804f, - 0.06788469351620142f, - 0.06775409520396847f, - 0.06762349573078784f, - 0.06749289509889644f, - 0.06736229331053295f, - 0.06723169036793433f, - 0.0671010862733393f, - 0.06697048102898484f, - 0.06683987463710973f, - 0.06670926709995098f, - 0.0665786584197474f, - 0.06644804859873606f, - 0.06631743763915535f, - 0.0661868255432437f, - 0.06605621231323824f, - 0.06592559795137787f, - 0.06579498245989975f, - 0.06566436584104282f, - 0.06553374809704472f, - 0.06540312923014312f, - 0.06527250924257699f, - 0.06514188813658363f, - 0.06501126591440204f, - 0.06488064257826955f, - 0.06475001813042519f, - 0.06461939257310634f, - 0.0644887659085521f, - 0.06435813813899983f, - 0.06422750926668869f, - 0.0640968792938561f, - 0.06396624822274123f, - 0.06383561605558154f, - 0.06370498279461626f, - 0.06357434844208286f, - 0.06344371300022063f, - 0.06331307647126706f, - 0.06318243885746104f, - 0.06305180016104144f, - 0.06292116038424583f, - 0.06279051952931358f, - 0.06265987759848231f, - 0.0625292345939914f, - 0.0623985905180785f, - 0.06226794537298306f, - 0.06213729916094275f, - 0.06200665188419706f, - 0.06187600354498369f, - 0.06174535414554216f, - 0.06161470368811022f, - 0.06148405217492699f, - 0.061353399608231565f, - 0.06122274599026178f, - 0.06109209132325722f, - 0.060961435609455744f, - 0.06083077885109697f, - 0.060700121050418804f, - 0.0605694622096609f, - 0.060438802331061185f, - 0.060308141416859355f, - 0.06017747946929338f, - 0.06004681649060299f, - 0.05991615248302618f, - 0.05978548744880273f, - 0.059654821390170656f, - 0.05952415430936978f, - 0.0593934862086386f, - 0.05926281709021564f, - 0.05913214695634076f, - 0.05900147580925208f, - 0.05887080365118949f, - 0.05874013048439114f, - 0.058609456311096965f, - 0.05847878113354515f, - 0.058348104953975216f, - 0.05821742777462671f, - 0.05808674959773787f, - 0.057956070425548706f, - 0.057825390260297496f, - 0.05769470910422428f, - 0.057564026959567374f, - 0.05743334382856686f, - 0.05730265971346107f, - 0.05717197461649013f, - 0.05704128853989241f, - 0.05691060148590762f, - 0.056779913456775494f, - 0.05664922445473444f, - 0.05651853448202468f, - 0.056387843540884657f, - 0.05625715163355461f, - 0.05612645876227303f, - 0.05599576492928018f, - 0.05586507013681458f, - 0.05573437438711654f, - 0.055603677682424614f, - 0.055472980024979135f, - 0.055342281417018684f, - 0.0552115818607832f, - 0.05508088135851261f, - 0.05495017991244556f, - 0.05481947752482246f, - 0.054688774197881984f, - 0.054558069933864584f, - 0.05442736473500895f, - 0.054296658603555564f, - 0.054165951541743605f, - 0.05403524355181226f, - 0.053904534636002054f, - 0.05377382479655177f, - 0.05364311403570196f, - 0.05351240235569145f, - 0.05338168975876082f, - 0.05325097624714892f, - 0.053120261823096364f, - 0.052989546488842035f, - 0.05285883024662659f, - 0.05272811309868892f, - 0.05259739504726972f, - 0.05246667609460792f, - 0.05233595624294425f, - 0.05220523549451766f, - 0.052074513851568464f, - 0.05194379131633699f, - 0.051813067891062235f, - 0.051682343577985006f, - 0.05155161837934434f, - 0.05142089229738107f, - 0.051290165334334246f, - 0.05115943749244475f, - 0.05102870877395166f, - 0.050897979181095884f, - 0.050767248716116535f, - 0.0506365173812541f, - 0.05050578517874906f, - 0.05037505211084059f, - 0.05024431817976966f, - 0.05011358338777547f, - 0.049982847737099004f, - 0.049852111229979505f, - 0.04972137386865799f, - 0.04959063565537373f, - 0.04945989659236776f, - 0.049329156681879385f, - 0.04919841592614968f, - 0.049067674327417966f, - 0.04893693188792491f, - 0.04880618860991119f, - 0.048675444495616615f, - 0.048544699547281f, - 0.04841395376714552f, - 0.04828320715744958f, - 0.048152459720434374f, - 0.04802171145833933f, - 0.047890962373405684f, - 0.047760212467873334f, - 0.0476294617439822f, - 0.04749871020397355f, - 0.04736795785008689f, - 0.04723720468456308f, - 0.04710645070964296f, - 0.04697569592756609f, - 0.046844940340573814f, - 0.04671418395090569f, - 0.04658342676080309f, - 0.04645266877250561f, - 0.04632190998825465f, - 0.04619115041028983f, - 0.04606039004085257f, - 0.04592962888218253f, - 0.0457988669365207f, - 0.04566810420610811f, - 0.04553734069318445f, - 0.0454065763999912f, - 0.04527581132876808f, - 0.045145045481756615f, - 0.04501427886119655f, - 0.04488351146932942f, - 0.044752743308395f, - 0.04462197438063486f, - 0.0444912046882888f, - 0.044360434233598416f, - 0.044229663018803524f, - 0.04409889104614531f, - 0.04396811831786495f, - 0.04383734483620232f, - 0.04370657060339908f, - 0.04357579562169511f, - 0.043445019893332104f, - 0.04331424342054997f, - 0.04318346620559042f, - 0.0430526882506934f, - 0.04292190955810064f, - 0.04279113013005212f, - 0.04266034996878958f, - 0.04252956907655348f, - 0.04239878745558425f, - 0.0422680051081237f, - 0.042137222036411855f, - 0.04200643824269054f, - 0.04187565372919981f, - 0.04174486849818151f, - 0.04161408255187572f, - 0.041483295892524315f, - 0.041352508522367395f, - 0.04122172044364686f, - 0.041090931658602836f, - 0.040960142169476806f, - 0.040829351978510245f, - 0.04069856108794332f, - 0.040567769500017996f, - 0.04043697721697445f, - 0.04030618424105468f, - 0.04017539057449888f, - 0.04004459621954906f, - 0.03991380117844546f, - 0.0397830054534301f, - 0.03965220904674325f, - 0.03952141196062651f, - 0.0393906141973215f, - 0.039259815759068506f, - 0.039129016648109624f, - 0.03899821686668517f, - 0.03886741641703725f, - 0.0387366153014062f, - 0.03860581352203416f, - 0.0384750110811615f, - 0.03834420798103035f, - 0.038213404223881114f, - 0.03808259981195597f, - 0.03795179474749532f, - 0.03782098903274092f, - 0.037690182669934534f, - 0.03755937566131661f, - 0.03742856800912937f, - 0.03729775971561373f, - 0.03716695078301061f, - 0.037036141213562274f, - 0.03690533100950922f, - 0.03677452017309374f, - 0.03664370870655634f, - 0.036512896612139335f, - 0.03638208389208327f, - 0.03625127054863047f, - 0.03612045658402149f, - 0.0359896420004987f, - 0.035858826800302675f, - 0.035728010985675775f, - 0.03559719455885862f, - 0.0354663775220936f, - 0.03533555987762133f, - 0.03520474162768424f, - 0.03507392277452297f, - 0.03494310332037995f, - 0.034812283267495844f, - 0.03468146261811268f, - 0.03455064137447246f, - 0.0344198195388159f, - 0.03428899711338546f, - 0.034158174100421886f, - 0.034027350502167666f, - 0.03389652632086355f, - 0.033765701558752054f, - 0.033634876218073935f, - 0.033504050301071744f, - 0.033373223809986266f, - 0.03324239674705961f, - 0.03311156911453391f, - 0.032980740914649975f, - 0.0328499121496504f, - 0.032719082821776005f, - 0.03258825293326941f, - 0.03245742248637147f, - 0.0323265914833248f, - 0.032195759926370277f, - 0.03206492781775055f, - 0.03193409515970651f, - 0.031803261954480806f, - 0.031672428204314367f, - 0.03154159391144987f, - 0.031410759078128236f, - 0.03127992370659218f, - 0.031149087799082632f, - 0.03101825135784233f, - 0.030887414385112666f, - 0.03075657688313506f, - 0.03062573885415226f, - 0.030494900300405255f, - 0.030364061224136818f, - 0.030233221627587948f, - 0.03010238151300144f, - 0.029971540882618313f, - 0.02984069973868093f, - 0.02970985808343166f, - 0.029579015919111558f, - 0.029448173247963453f, - 0.02931733007222841f, - 0.02918648639414928f, - 0.029055642215967147f, - 0.028924797539924878f, - 0.028793952368263574f, - 0.02866310670322612f, - 0.028532260547053632f, - 0.028401413901988568f, - 0.02827056677027339f, - 0.02813971915414925f, - 0.028008871055859065f, - 0.027878022477644f, - 0.02774717342174699f, - 0.02761632389040922f, - 0.027485473885873645f, - 0.027354623410381456f, - 0.02722377246617563f, - 0.02709292105549737f, - 0.026962069180589673f, - 0.026831216843693762f, - 0.0267003640470522f, - 0.026569510792907557f, - 0.02643865708350108f, - 0.026307802921075797f, - 0.02617694830787298f, - 0.026046093246135667f, - 0.025915237738105137f, - 0.025784381786024456f, - 0.02565352539213536f, - 0.02552266855867959f, - 0.025391811287900235f, - 0.02526095358203861f, - 0.025130095443337813f, - 0.024999236874039175f, - 0.024868377876385815f, - 0.02473751845261907f, - 0.024606658604982075f, - 0.02447579833571619f, - 0.024344937647064555f, - 0.02421407654126855f, - 0.024083215020571324f, - 0.023952353087214273f, - 0.023821490743440567f, - 0.02369062799149161f, - 0.023559764833610143f, - 0.02342890127203891f, - 0.023298037309019345f, - 0.023167172946794646f, - 0.023036308187606255f, - 0.02290544303369739f, - 0.022774577487309502f, - 0.022643711550685824f, - 0.022512845226067824f, - 0.022381978515698748f, - 0.022251111421820072f, - 0.022120243946674615f, - 0.021989376092505196f, - 0.021858507861553314f, - 0.021727639256062248f, - 0.021596770278273513f, - 0.021465900930430395f, - 0.02133503121477442f, - 0.021204161133548893f, - 0.021073290688995352f, - 0.02094241988335711f, - 0.02081154871887572f, - 0.020680677197794504f, - 0.020549805322355032f, - 0.02041893309480064f, - 0.0202880605173729f, - 0.02015718759231517f, - 0.02002631432186903f, - 0.019895440708277853f, - 0.019764566753783228f, - 0.019633692460628533f, - 0.019502817831055383f, - 0.01937194286730716f, - 0.019241067571625928f, - 0.019110191946253758f, - 0.018979315993433613f, - 0.01884843971540846f, - 0.01871756311441994f, - 0.018586686192711473f, - 0.01845580895252472f, - 0.01832493139610311f, - 0.018194053525688307f, - 0.018063175343523755f, - 0.01793229685185113f, - 0.017801418052913888f, - 0.017670538948953714f, - 0.01753965954221407f, - 0.017408779834936657f, - 0.017277899829364503f, - 0.01714701952774065f, - 0.0170161389323068f, - 0.016885258045306457f, - 0.01675437686898133f, - 0.01662349540557493f, - 0.01649261365732898f, - 0.016361731626486995f, - 0.016230849315290716f, - 0.016099966725983662f, - 0.015969083860807587f, - 0.015838200722006014f, - 0.01570731731182071f, - 0.015576433632494764f, - 0.015445549686271282f, - 0.015314665475392035f, - 0.015183781002100575f, - 0.015052896268638687f, - 0.014922011277249932f, - 0.0147911260301761f, - 0.014660240529660765f, - 0.014529354777945723f, - 0.014398468777274558f, - 0.014267582529889076f, - 0.014136696038032866f, - 0.014005809303948189f, - 0.013874922329877307f, - 0.013744035118063826f, - 0.013613147670749571f, - 0.013482259990178153f, - 0.01335137207859141f, - 0.013220483938232955f, - 0.013089595571344636f, - 0.012958706980170077f, - 0.012827818166951131f, - 0.012696929133931431f, - 0.012566039883352836f, - 0.012435150417458542f, - 0.012304260738491751f, - 0.012173370848694331f, - 0.012042480750309933f, - 0.011911590445580439f, - 0.011780699936749503f, - 0.011649809226059014f, - 0.011518918315752634f, - 0.011388027208072258f, - 0.011257135905261555f, - 0.011126244409562426f, - 0.010995352723218103f, - 0.010864460848471829f, - 0.010733568787565506f, - 0.010602676542742828f, - 0.010471784116245709f, - 0.01034089151031784f, - 0.010209998727201144f, - 0.010079105769139325f, - 0.009948212638374306f, - 0.009817319337149796f, - 0.009686425867707725f, - 0.00955553223229181f, - 0.009424638433143987f, - 0.009293744472507531f, - 0.009162850352625717f, - 0.009031956075740494f, - 0.00890106164409559f, - 0.008770167059933397f, - 0.008639272325496317f, - 0.008508377443028084f, - 0.008377482414770659f, - 0.00824658724296778f, - 0.008115691929861411f, - 0.007984796477695299f, - 0.007853900888711412f, - 0.007723005165153498f, - 0.007592109309263535f, - 0.007461213323285272f, - 0.007330317209460692f, - 0.007199420970033551f, - 0.007068524607245831f, - 0.006937628123341297f, - 0.006806731520561935f, - 0.006675834801151511f, - 0.006544937967352018f, - 0.006414041021407225f, - 0.006283143965559127f, - 0.006152246802051055f, - 0.0060213495331263404f, - 0.005890452161026984f, - 0.0057595546879967655f, - 0.005628657116277689f, - 0.005497759448113538f, - 0.00536686168574632f, - 0.005235963831419821f, - 0.005105065887376052f, - 0.004974167855858802f, - 0.004843269739110086f, - 0.004712371539373252f, - 0.004581473258891648f, - 0.004450574899907293f, - 0.004319676464663985f, - 0.0041887779554037425f, - 0.004057879374370366f, - 0.003926980723805878f, - 0.0037960820059540815f, - 0.0036651832230570006f, - 0.003534284377358439f, - 0.003403385471100426f, - 0.0032724865065267665f, - 0.0031415874858794902f, - 0.0030106884114024057f, - 0.002879789285337544f, - 0.0027488901099287154f, - 0.002617990887418397f, - 0.0024870916200490684f, - 0.002356192310064541f, - 0.0022252929597068507f, - 0.0020943935712198106f, - 0.001963494146845458f, - 0.0018325946888276086f, - 0.0017016951994082998f, - 0.0015707956808309034f, - 0.0014398961353387918f, - 0.0013089965651740046f, - 0.001178096972580359f, - 0.001047197359799896f, - 0.0009162977290764331f, - 0.0007853980826520122f, - 0.0006544984227704515f, - 0.0005235987516737929f, - 0.0003926990716058553f, - 0.0002617993848086811f, - 0.00013089969352608925f, - 1.2246467991473532e-16f, - -0.00013089969352584433f, - -0.00026179938480888024f, - -0.0003926990716051663f, - -0.000523598751673548f, - -0.0006544984227702064f, - -0.0007853980826522113f, - -0.0009162977290757441f, - -0.001047197359799651f, - -0.001178096972580114f, - -0.0013089965651742036f, - -0.0014398961353381027f, - -0.0015707956808306586f, - -0.0017016951994080548f, - -0.0018325946888273635f, - -0.0019634941468452136f, - -0.0020943935712191214f, - -0.0022252929597066057f, - -0.002356192310064296f, - -0.002487091620048824f, - -0.0026179908874177085f, - -0.0027488901099284703f, - -0.002879789285337299f, - -0.0030106884114021607f, - -0.003141587485879245f, - -0.0032724865065265215f, - -0.003403385471100181f, - -0.003534284377358194f, - -0.0036651832230571997f, - -0.0037960820059533924f, - -0.0039269807238056335f, - -0.004057879374370121f, - -0.004188777955403942f, - -0.004319676464663295f, - -0.004450574899907049f, - -0.004581473258891403f, - -0.004712371539373451f, - -0.004843269739110285f, - -0.004974167855858113f, - -0.005105065887375807f, - -0.005235963831419576f, - -0.005366861685746519f, - -0.005497759448112849f, - -0.005628657116277444f, - -0.00575955468799652f, - -0.005890452161027183f, - -0.006021349533125651f, - -0.0061522468020508096f, - -0.006283143965558882f, - -0.006414041021406979f, - -0.006544937967352216f, - -0.006675834801150822f, - -0.00680673152056169f, - -0.006937628123341052f, - -0.007068524607246031f, - -0.007199420970032861f, - -0.007330317209460447f, - -0.007461213323285028f, - -0.007592109309263733f, - -0.00772300516515281f, - -0.007853900888711166f, - -0.007984796477695054f, - -0.008115691929861167f, - -0.008246587242967535f, - -0.008377482414770415f, - -0.00850837744302784f, - -0.008639272325496073f, - -0.008770167059933153f, - -0.008901061644095345f, - -0.00903195607574025f, - -0.009162850352625472f, - -0.00929374447250773f, - -0.009424638433143742f, - -0.00955553223229112f, - -0.00968642586770748f, - -0.009817319337149551f, - -0.009948212638374506f, - -0.010079105769138636f, - -0.0102099987272009f, - -0.010340891510317595f, - -0.010471784116245907f, - -0.01060267654274214f, - -0.010733568787565262f, - -0.010864460848471584f, - -0.010995352723218303f, - -0.011126244409562624f, - -0.011257135905260866f, - -0.011388027208072013f, - -0.011518918315752389f, - -0.011649809226059214f, - -0.011780699936748814f, - -0.011911590445580194f, - -0.012042480750309689f, - -0.012173370848694529f, - -0.01230426073849106f, - -0.012435150417458298f, - -0.012566039883352592f, - -0.012696929133931186f, - -0.01282781816695133f, - -0.012958706980169389f, - -0.013089595571344391f, - -0.01322048393823271f, - -0.013351372078591163f, - -0.013482259990177464f, - -0.013613147670749327f, - -0.013744035118063581f, - -0.013874922329877063f, - -0.0140058093039475f, - -0.014136696038032621f, - -0.014267582529888832f, - -0.014398468777274314f, - -0.014529354777945922f, - -0.01466024052966052f, - -0.014791126030175855f, - -0.014922011277249686f, - -0.015052896268638885f, - -0.01518378100210033f, - -0.01531466547539179f, - -0.015445549686271038f, - -0.015576433632494963f, - -0.01570731731182002f, - -0.015838200722005327f, - -0.01596908386080734f, - -0.01609996672598342f, - -0.016230849315290917f, - -0.016361731626486308f, - -0.016492613657328736f, - -0.016623495405574683f, - -0.01675437686898153f, - -0.016885258045305766f, - -0.017016138932306555f, - -0.017147019527740403f, - -0.0172778998293647f, - -0.017408779834935967f, - -0.01753965954221338f, - -0.017670538948953467f, - -0.017801418052913645f, - -0.01793229685185133f, - -0.01806317534352307f, - -0.01819405352568806f, - -0.018324931396102865f, - -0.01845580895252492f, - -0.018586686192710786f, - -0.018717563114419692f, - -0.018848439715408213f, - -0.01897931599343381f, - -0.01911019194625351f, - -0.019241067571625237f, - -0.019371942867306913f, - -0.019502817831055137f, - -0.01963369246062829f, - -0.01976456675378298f, - -0.019895440708277607f, - -0.02002631432186879f, - -0.020157187592314926f, - -0.020288060517372655f, - -0.020418933094800393f, - -0.020549805322354786f, - -0.02068067719779426f, - -0.020811548718875916f, - -0.020942419883356423f, - -0.02107329068899511f, - -0.02120416113354865f, - -0.02133503121477462f, - -0.021465900930429705f, - -0.021596770278273267f, - -0.021727639256062005f, - -0.021858507861553512f, - -0.021989376092504506f, - -0.02212024394667437f, - -0.022251111421819826f, - -0.022381978515698505f, - -0.022512845226068025f, - -0.022643711550685137f, - -0.022774577487309256f, - -0.022905443033697143f, - -0.023036308187606453f, - -0.02316717294679396f, - -0.0232980373090191f, - -0.023428901272038668f, - -0.02355976483361034f, - -0.023690627991490923f, - -0.02382149074343988f, - -0.02395235308721403f, - -0.02408321502057108f, - -0.024214076541268746f, - -0.02434493764706387f, - -0.024475798335715945f, - -0.024606658604981832f, - -0.02473751845261927f, - -0.024868377876385125f, - -0.024999236874038933f, - -0.02513009544333757f, - -0.025260953582038365f, - -0.02539181128789999f, - -0.025522668558679344f, - -0.025653525392135113f, - -0.02578438178602421f, - -0.025915237738105334f, - -0.02604609324613542f, - -0.026176948307872733f, - -0.026307802921075554f, - -0.026438657083501276f, - -0.02656951079290731f, - -0.026700364047051953f, - -0.02683121684369352f, - -0.02696206918058943f, - -0.02709292105549757f, - -0.02722377246617494f, - -0.02735462341038121f, - -0.0274854738858734f, - -0.02761632389040942f, - -0.027747173421746305f, - -0.027878022477643753f, - -0.02800887105585882f, - -0.028139719154149447f, - -0.028270566770272704f, - -0.02840141390198832f, - -0.028532260547053385f, - -0.028663106703225874f, - -0.028793952368263775f, - -0.02892479753992419f, - -0.0290556422159669f, - -0.029186486394149034f, - -0.029317330072228608f, - -0.029448173247962763f, - -0.02957901591911131f, - -0.029709858083431417f, - -0.02984069973868113f, - -0.029971540882617623f, - -0.03010238151300075f, - -0.030233221627587705f, - -0.03036406122413657f, - -0.030494900300405012f, - -0.030625738854151572f, - -0.030756576883134813f, - -0.03088741438511242f, - -0.031018251357842083f, - -0.03114908779908239f, - -0.03127992370659193f, - -0.031410759078127994f, - -0.031541593911449624f, - -0.03167242820431457f, - -0.03180326195448056f, - -0.03193409515970626f, - -0.032064927817750305f, - -0.03219575992637048f, - -0.03232659148332411f, - -0.03245742248637122f, - -0.03258825293326917f, - -0.032719082821776206f, - -0.032849912149649704f, - -0.032980740914649725f, - -0.03311156911453366f, - -0.0332423967470598f, - -0.03337322380998646f, - -0.03350405030107106f, - -0.03363487621807369f, - -0.033765701558751804f, - -0.03389652632086375f, - -0.03402735050216698f, - -0.03415817410042164f, - -0.03428899711338522f, - -0.03441981953881609f, - -0.03455064137447177f, - -0.03468146261811243f, - -0.0348122832674956f, - -0.034943103320379705f, - -0.03507392277452317f, - -0.035204741627683556f, - -0.03533555987762109f, - -0.035466377522093355f, - -0.03559719455885882f, - -0.03572801098567509f, - -0.035858826800302425f, - -0.03598964200049846f, - -0.036120456584021694f, - -0.036251270548629776f, - -0.03638208389208302f, - -0.03651289661213909f, - -0.036643708706556095f, - -0.03677452017309349f, - -0.036905331009508976f, - -0.03703614121356203f, - -0.03716695078301037f, - -0.037297759715613485f, - -0.03742856800912912f, - -0.03755937566131636f, - -0.03769018266993429f, - -0.03782098903274112f, - -0.03795179474749508f, - -0.03808259981195528f, - -0.03821340422388087f, - -0.03834420798103011f, - -0.03847501108116169f, - -0.038605813522033475f, - -0.03873661530140596f, - -0.038867416417037004f, - -0.03899821686668537f, - -0.03912901664810894f, - -0.03925981575906826f, - -0.039390614197321254f, - -0.03952141196062671f, - -0.03965220904674345f, - -0.039783005453429415f, - -0.039913801178445216f, - -0.04004459621954881f, - -0.04017539057449908f, - -0.040306184241053984f, - -0.04043697721697421f, - -0.040567769500017746f, - -0.04069856108794352f, - -0.04082935197850955f, - -0.04096014216947656f, - -0.04109093165860259f, - -0.041221720443646616f, - -0.0413525085223676f, - -0.04148329589252363f, - -0.04161408255187548f, - -0.041744868498181265f, - -0.04187565372919957f, - -0.042006438242689854f, - -0.04213722203641161f, - -0.04226800510812345f, - -0.04239878745558401f, - -0.04252956907655279f, - -0.04266034996878934f, - -0.042791130130051876f, - -0.0429219095581004f, - -0.0430526882506936f, - -0.043183466205590174f, - -0.04331424342054972f, - -0.043445019893331854f, - -0.043575795621695314f, - -0.043706570603398394f, - -0.04383734483620208f, - -0.04396811831786471f, - -0.044098891046145505f, - -0.04422966301880284f, - -0.04436043423359772f, - -0.04449120468828856f, - -0.044621974380634616f, - -0.0447527433083952f, - -0.04488351146932873f, - -0.04501427886119631f, - -0.04514504548175637f, - -0.04527581132876828f, - -0.04540657639999051f, - -0.0455373406931842f, - -0.04566810420610787f, - -0.0457988669365209f, - -0.04592962888218273f, - -0.046060390040851884f, - -0.04619115041028959f, - -0.0463219099882544f, - -0.04645266877250581f, - -0.0465834267608024f, - -0.046714183950905444f, - -0.046844940340573564f, - -0.04697569592756629f, - -0.04710645070964227f, - -0.04723720468456283f, - -0.04736795785008665f, - -0.04749871020397331f, - -0.04762946174398196f, - -0.04776021246787265f, - -0.04789096237340544f, - -0.04802171145833909f, - -0.04815245972043413f, - -0.04828320715744934f, - -0.04841395376714528f, - -0.04854469954728076f, - -0.04867544449561637f, - -0.04880618860991095f, - -0.04893693188792467f, - -0.049067674327417724f, - -0.04919841592614944f, - -0.049329156681879587f, - -0.049459896592367075f, - -0.049590635655373486f, - -0.04972137386865775f, - -0.049852111229979706f, - -0.04998284773709832f, - -0.050113583387775225f, - -0.05024431817976942f, - -0.05037505211084079f, - -0.05050578517874837f, - -0.050636517381253854f, - -0.05076724871611629f, - -0.050897979181095634f, - -0.05102870877395186f, - -0.05115943749244406f, - -0.051290165334334004f, - -0.05142089229738082f, - -0.05155161837934454f, - -0.05168234357798432f, - -0.05181306789106199f, - -0.051943791316336745f, - -0.052074513851568666f, - -0.05220523549451697f, - -0.052335956242943564f, - -0.05246667609460768f, - -0.05259739504726947f, - -0.05272811309868912f, - -0.052858830246625896f, - -0.05298954648884179f, - -0.05312026182309612f, - -0.053250976247148675f, - -0.053381689758760134f, - -0.053512402355691206f, - -0.05364311403570172f, - -0.053773824796551524f, - -0.05390453463600181f, - -0.054035243551812016f, - -0.05416595154174336f, - -0.05429665860355532f, - -0.05442736473500915f, - -0.05455806993386434f, - -0.05468877419788174f, - -0.05481947752482222f, - -0.05495017991244575f, - -0.055080881358512364f, - -0.05521158186078295f, - -0.05534228141701844f, - -0.05547298002497889f, - -0.055603677682424815f, - -0.055734374387115856f, - -0.055865070136814333f, - -0.055995764929279934f, - -0.05612645876227323f, - -0.05625715163355392f, - -0.056387843540884414f, - -0.056518534482024436f, - -0.056649224454734644f, - -0.05677991345677481f, - -0.056910601485907375f, - -0.05704128853989217f, - -0.05717197461648989f, - -0.05730265971346127f, - -0.05743334382856617f, - -0.05756402695956713f, - -0.057694709104224036f, - -0.05782539026029769f, - -0.05795607042554802f, - -0.05808674959773762f, - -0.05821742777462647f, - -0.05834810495397542f, - -0.05847878113354446f, - -0.05860945631109628f, - -0.05874013048439089f, - -0.05887080365118924f, - -0.05900147580925183f, - -0.05913214695634007f, - -0.0592628170902154f, - -0.05939348620863836f, - -0.05952415430936954f, - -0.059654821390170414f, - -0.059785487448802486f, - -0.05991615248302594f, - -0.06004681649060275f, - -0.060177479469293575f, - -0.06030814141685911f, - -0.060438802331060935f, - -0.060569462209660654f, - -0.060700121050419005f, - -0.060830778851096286f, - -0.060961435609455494f, - -0.06109209132325698f, - -0.06122274599026198f, - -0.06135339960823088f, - -0.06148405217492674f, - -0.06161470368810998f, - -0.061745354145541914f, - -0.06187600354498388f, - -0.062006651884196365f, - -0.06213729916094251f, - -0.062267945372982816f, - -0.0623985905180787f, - -0.0625292345939907f, - -0.06265987759848206f, - -0.06279051952931335f, - -0.06292116038424603f, - -0.06305180016104076f, - -0.06318243885746079f, - -0.06331307647126681f, - -0.06344371300022038f, - -0.06357434844208305f, - -0.06370498279461558f, - -0.0638356160555813f, - -0.06396624822274098f, - -0.0640968792938563f, - -0.06422750926668801f, - -0.06435813813899958f, - -0.06448876590855185f, - -0.06461939257310655f, - -0.06475001813042451f, - -0.0648806425782693f, - -0.0650112659144018f, - -0.06514188813658338f, - -0.06527250924257676f, - -0.06540312923014287f, - -0.06553374809704447f, - -0.06566436584104257f, - -0.06579498245989995f, - -0.06592559795137763f, - -0.066056212313238f, - -0.06618682554324345f, - -0.06631743763915554f, - -0.0664480485987358f, - -0.06657865841974671f, - -0.06670926709995073f, - -0.06683987463710948f, - -0.06697048102898505f, - -0.06710108627333862f, - -0.06723169036793408f, - -0.06736229331053271f, - -0.06749289509889664f, - -0.06762349573078714f, - -0.06775409520396822f, - -0.06788469351620117f, - -0.06801529066524825f, - -0.0681458866488717f, - -0.06827648146483288f, - -0.0684070751108959f, - -0.06853766758482217f, - -0.06866825888437403f, - -0.06879884900731292f, - -0.06892943795140302f, - -0.06906002571440581f, - -0.06919061229408373f, - -0.0693211976881983f, - -0.06945178189451379f, - -0.06958236491079173f, - -0.06971294673479465f, - -0.06984352736428508f, - -0.06997410679702463f, - -0.07010468503077767f, - -0.07023526206330585f, - -0.07036583789237137f, - -0.07049641251573725f, - -0.0706269859311666f, - -0.07075755813642162f, - -0.07088812912926457f, - -0.07101869890745856f, - -0.07114926746876678f, - -0.07127983481095107f, - -0.07141040093177511f, - -0.07154096582900121f, - -0.07167152950039175f, - -0.07180209194371f, - -0.07193265315671923f, - -0.07206321313718189f, - -0.07219377188285998f, - -0.07232432939151817f, - -0.07245488566091852f, - -0.07258544068882399f, - -0.07271599447299663f, - -0.07284654701120126f, - -0.07297709830119999f, - -0.07310764834075584f, - -0.07323819712763188f, - -0.07336874465959034f, - -0.07349929093439604f, - -0.07362983594981126f, - -0.07376037970359914f, - -0.07389092219352195f, - -0.07402146341734464f, - -0.07415200337282957f, - -0.07428254205773996f, - -0.07441307946983905f, - -0.07454361560688924f, - -0.0746741504666556f, - -0.07480468404690056f, - -0.07493521634538748f, - -0.07506574735987882f, - -0.07519627708813975f, - -0.07532680552793279f, - -0.07545733267702137f, - -0.07558785853316805f, - -0.07571838309413807f, - -0.07584890635769406f, - -0.07597942832159954f, - -0.07610994898361759f, - -0.07624046834151223f, - -0.07637098639304747f, - -0.07650150313598607f, - -0.07663201856809251f, - -0.07676253268712957f, - -0.07689304549086183f, - -0.07702355697705207f, - -0.07715406714346491f, - -0.07728457598786323f, - -0.07741508350801121f, - -0.07754558970167309f, - -0.07767609456661224f, - -0.0778065981005925f, - -0.07793710030137682f, - -0.0780676011667309f, - -0.0781981006944177f, - -0.07832859888220117f, - -0.07845909572784437f, - -0.07858959122911306f, - -0.07872008538377033f, - -0.07885057818958022f, - -0.07898106964430585f, - -0.07911155974571307f, - -0.0792420484915651f, - -0.07937253587962605f, - -0.07950302190766001f, - -0.07963350657343031f, - -0.07976398987470286f, - -0.07989447180924099f, - -0.08002495237480894f, - -0.08015543156917006f, - -0.08028590939009041f, - -0.08041638583533338f, - -0.0805468609026633f, - -0.08067733458984452f, - -0.08080780689464054f, - -0.0809382778148175f, - -0.08106874734813892f, - -0.08119921549236928f, - -0.08132968224527211f, - -0.0814601476046137f, - -0.08159061156815768f, - -0.08172107413366812f, - -0.08185153529891002f, - -0.08198199506164844f, - -0.08211245341964753f, - -0.08224291037067145f, - -0.08237336591248577f, - -0.08250382004285427f, - -0.08263427275954212f, - -0.08276472406031446f, - -0.08289517394293561f, - -0.08302562240516992f, - -0.08315606944478261f, - -0.08328651505953896f, - -0.08341695924720338f, - -0.08354740200553985f, - -0.08367784333231504f, - -0.08380828322529299f, - -0.08393872168223866f, - -0.08406915870091701f, - -0.08419959427909214f, - -0.08433002841453087f, - -0.08446046110499733f, - -0.08459089234825662f, - -0.08472132214207292f, - -0.08485175048421316f, - -0.08498217737244157f, - -0.08511260280452333f, - -0.08524302677822275f, - -0.08537344929130682f, - -0.0855038703415399f, - -0.08563428992668727f, - -0.0857647080445142f, - -0.08589512469278517f, - -0.08602553986926724f, - -0.08615595357172494f, - -0.08628636579792365f, - -0.0864167765456279f, - -0.08654718581260493f, - -0.0866775935966193f, - -0.08680799989543653f, - -0.08693840470682125f, - -0.08706880802854076f, - -0.08719920985835979f, - -0.08732961019404391f, - -0.08746000903335831f, - -0.08759040637406908f, - -0.08772080221394234f, - -0.0878511965507429f, - -0.08798158938223741f, - -0.0881119807061907f, - -0.08824237052036944f, - -0.08837275882253857f, - -0.0885031456104648f, - -0.08863353088191352f, - -0.0887639146346502f, - -0.0888942968664412f, - -0.08902467757505285f, - -0.08915505675825072f, - -0.0892854344137999f, - -0.08941581053946815f, - -0.08954618513302065f, - -0.08967655819222346f, - -0.08980692971484179f, - -0.08993729969864353f, - -0.09006766814139394f, - -0.09019803504085917f, - -0.09032840039480546f, - -0.09045876420099812f, - -0.09058912645720517f, - -0.09071948716119202f, - -0.09084984631072497f, - -0.09098020390356945f, - -0.0911105599374936f, - -0.09124091441026294f, - -0.09137126731964385f, - -0.0915016186634019f, - -0.09163196843930531f, - -0.09176231664511969f, - -0.09189266327861158f, - -0.09202300833754751f, - -0.09215335181969316f, - -0.0922836937228169f, - -0.0924140340446845f, - -0.09254437278306259f, - -0.09267470993571696f, - -0.0928050455004161f, - -0.09293537947492585f, - -0.093065711857013f, - -0.09319604264444341f, - -0.09332637183498571f, - -0.09345669942640583f, - -0.09358702541647022f, - -0.09371734980294666f, - -0.09384767258360119f, - -0.09397799375620164f, - -0.0941083133185141f, - -0.09423863126830649f, - -0.09436894760334495f, - -0.09449926232139699f, - -0.09462957542023015f, - -0.09475988689761108f, - -0.09489019675130697f, - -0.09502050497908408f, - -0.09515081157871139f, - -0.09528111654795525f, - -0.09541141988458292f, - -0.0955417215863608f, - -0.095672021651058f, - -0.09580232007644092f, - -0.09593261686027699f, - -0.09606291200033269f, - -0.09619320549437724f, - -0.0963234973401772f, - -0.09645378753550006f, - -0.09658407607811331f, - -0.09671436296578365f, - -0.09684464819628037f, - -0.09697493176737022f, - -0.09710521367682082f, - -0.09723549392239893f, - -0.09736577250187399f, - -0.09749604941301286f, - -0.09762632465358326f, - -0.09775659822135206f, - -0.09788687011408886f, - -0.09801714032956059f, - -0.0981474088655351f, - -0.09827767571978026f, - -0.09840794089006312f, - -0.0985382043741534f, - -0.09866846616981814f, - -0.09879872627482494f, - -0.09892898468694226f, - -0.0990592414039386f, - -0.09918949642358159f, - -0.09931974974363891f, - -0.09945000136187916f, - -0.09958025127607095f, - -0.0997104994839816f, - -0.0998407459833802f, - -0.09997099077203461f, - -0.10010123384771265f, - -0.1002314752081831f, - -0.10036171485121473f, - -0.1004919527745755f, - -0.10062218897603291f, - -0.10075242345335719f, - -0.10088265620431591f, - -0.10101288722667759f, - -0.10114311651820983f, - -0.10127334407668298f, - -0.10140356989986475f, - -0.10153379398552374f, - -0.1016640163314286f, - -0.10179423693534713f, - -0.10192445579504979f, - -0.10205467290830443f, - -0.10218488827287982f, - -0.10231510188654387f, - -0.10244531374706718f, - -0.10257552385221773f, - -0.10270573219976437f, - -0.10283593878747604f, - -0.1029661436131208f, - -0.10309634667446939f, - -0.10322654796928994f, - -0.10335674749535147f, - -0.10348694525042217f, - -0.1036171412322729f, - -0.10374733543867193f, - -0.10387752786738838f, - -0.10400771851619058f, - -0.10413790738284949f, - -0.10426809446513349f, - -0.10439827976081187f, - -0.1045284632676535f, - -0.10465864498342813f, - -0.1047888249059056f, - -0.10491900303285444f, - -0.10504917936204493f, - -0.10517935389124568f, - -0.10530952661822705f, - -0.1054396975407577f, - -0.10556986665660806f, - -0.10570003396354682f, - -0.10583019945934408f, - -0.10596036314176989f, - -0.10609052500859349f, - -0.10622068505758463f, - -0.10635084328651213f, - -0.10648099969314755f, - -0.1066111542752598f, - -0.10674130703061874f, - -0.10687145795699332f, - -0.10700160705215524f, - -0.10713175431387352f, - -0.10726189973991813f, - -0.1073920433280582f, - -0.1075221850760655f, - -0.1076523249817092f, - -0.10778246304275939f, - -0.1079125992569862f, - -0.10804273362215888f, - -0.1081728661360494f, - -0.10830299679642709f, - -0.10843312560106219f, - -0.10856325254772409f, - -0.10869337763418487f, - -0.10882350085821399f, - -0.10895362221758181f, - -0.10908374171005877f, - -0.10921385933341439f, - -0.10934397508542092f, - -0.10947408896384798f, - -0.1096042009664661f, - -0.10973431109104496f, - -0.10986441933535694f, - -0.10999452569717176f, - -0.11012463017425968f, - -0.1102547327643918f, - -0.1103848334653393f, - -0.1105149322748725f, - -0.11064502919076175f, - -0.11077512421077876f, - -0.1109052173326935f, - -0.1110353085542773f, - -0.11116539787330154f, - -0.11129548528753672f, - -0.11142557079475338f, - -0.11155565439272298f, - -0.11168573607921703f, - -0.11181581585200616f, - -0.11194589370886061f, - -0.11207596964755331f, - -0.11220604366585454f, - -0.11233611576153553f, - -0.11246618593236751f, - -0.11259625417612092f, - -0.1127263204905688f, - -0.11285638487348164f, - -0.1129864473226308f, - -0.11311650783578683f, - -0.11324656641072296f, - -0.11337662304520976f, - -0.11350667773701875f, - -0.1136367304839206f, - -0.11376678128368865f, - -0.11389683013409366f, - -0.11402687703290723f, - -0.11415692197790109f, - -0.11428696496684604f, - -0.1144170059975156f, - -0.11454704506768067f, - -0.11467708217511308f, - -0.11480711731758378f, - -0.11493715049286643f, - -0.11506718169873205f, - -0.1151972109329526f, - -0.11532723819329918f, - -0.11545726347754558f, - -0.11558728678346294f, - -0.1157173081088234f, - -0.11584732745139859f, - -0.11597734480896112f, - -0.11610736017928362f, - -0.11623737356013744f, - -0.1163673849492957f, - -0.11649739434452981f, - -0.116627401743613f, - -0.11675740714431672f, - -0.11688741054441425f, - -0.11701741194167757f, - -0.11714741133387828f, - -0.11727740871879062f, - -0.11740740409418626f, - -0.11753739745783774f, - -0.11766738880751679f, - -0.11779737814099779f, - -0.11792736545605256f, - -0.11805735075045377f, - -0.11818733402197329f, - -0.11831731526838565f, - -0.11844729448746279f, - -0.11857727167697753f, - -0.11870724683470275f, - -0.11883721995841048f, - -0.11896719104587546f, - -0.11909716009486973f, - -0.11922712710316635f, - -0.11935709206853748f, - -0.11948705498875796f, - -0.11961701586160003f, - -0.11974697468483686f, - -0.11987693145624075f, - -0.12000688617358668f, - -0.12013683883464703f, - -0.12026678943719511f, - -0.12039673797900424f, - -0.12052668445784692f, - -0.12065662887149829f, - -0.12078657121773094f, - -0.12091651149431831f, - -0.12104644969903304f, - -0.12117638582965044f, - -0.12130631988394322f, - -0.12143625185968453f, - -0.12156618175464846f, - -0.12169610956660916f, - -0.12182603529333991f, - -0.121955958932614f, - -0.12208588048220613f, - -0.12221579993988924f, - -0.12234571730343764f, - -0.12247563257062566f, - -0.1226055457392268f, - -0.12273545680701461f, - -0.12286536577176352f, - -0.12299527263124801f, - -0.12312517738324176f, - -0.12325508002551884f, - -0.12338498055585254f, - -0.12351487897201882f, - -0.12364477527179102f, - -0.12377466945294338f, - -0.12390456151324936f, - -0.12403445145048503f, - -0.12416433926242387f, - -0.12429422494684031f, - -0.12442410850150791f, - -0.1245539899242029f, - -0.12468386921269892f, - -0.12481374636477054f, - -0.12494362137819232f, - -0.12507349425073802f, - -0.12520336498018408f, - -0.12533323356430429f, - -0.1254631000008734f, - -0.12559296428766534f, - -0.12572282642245663f, - -0.12585268640302125f, - -0.1259825442271341f, - -0.12611239989256917f, - -0.12624225339710327f, - -0.12637210473851043f, - -0.12650195391456573f, - -0.1266318009230438f, - -0.12676164576172014f, - -0.1268914884283704f, - -0.12702132892076926f, - -0.12715116723669154f, - -0.1272810033739129f, - -0.1274108373302091f, - -0.12754066910335507f, - -0.12767049869112565f, - -0.1278003260912967f, - -0.12793015130164417f, - -0.12805997431994262f, - -0.12818979514396844f, - -0.12831961377149675f, - -0.1284494302003027f, - -0.12857924442816238f, - -0.12870905645285186f, - -0.12883886627214644f, - -0.128968673883821f, - -0.12909847928565302f, - -0.12922828247541748f, - -0.12935808345089025f, - -0.1294878822098472f, - -0.1296176787500634f, - -0.12974747306931655f, - -0.1298772651653818f, - -0.1300070550360352f, - -0.13013684267905198f, - -0.13026662809220999f, - -0.13039641127328452f, - -0.13052619222005177f, - -0.13065597093028708f, - -0.13078574740176852f, - -0.13091552163227152f, - -0.13104529361957243f, - -0.1311750633614476f, - -0.13130483085567266f, - -0.13143459610002578f, - -0.13156435909228262f, - -0.13169411983021967f, - -0.1318238783116127f, - -0.13195363453424008f, - -0.13208338849587759f, - -0.1322131401943019f, - -0.13234288962728888f, - -0.1324726367926171f, - -0.13260238168806246f, - -0.13273212431140186f, - -0.13286186466041172f, - -0.13299160273286942f, - -0.13312133852655236f, - -0.1332510720392367f, - -0.13338080326870036f, - -0.13351053221271955f, - -0.1336402588690723f, - -0.13376998323553485f, - -0.13389970530988535f, - -0.1340294250899001f, - -0.13415914257335687f, - -0.13428885775803343f, - -0.13441857064170668f, - -0.13454828122215404f, - -0.13467798949715207f, - -0.13480769546448002f, - -0.13493739912191452f, - -0.13506710046723314f, - -0.13519679949821262f, - -0.13532649621263232f, - -0.13545619060826908f, - -0.13558588268290062f, - -0.1357155724343038f, - -0.1358452598602582f, - -0.13597494495854073f, - -0.13610462772692936f, - -0.13623430816320195f, - -0.1363639862651356f, - -0.13649366203051005f, - -0.1366233354571025f, - -0.13675300654269099f, - -0.1368826752850528f, - -0.1370123416819678f, - -0.13714200573121335f, - -0.13727166743056768f, - -0.13740132677780909f, - -0.137530983770715f, - -0.13766063840706552f, - -0.13779029068463822f, - -0.1379199406012115f, - -0.13804958815456297f, - -0.13817923334247295f, - -0.13830887616271909f, - -0.13843851661307954f, - -0.1385681546913334f, - -0.13869779039525984f, - -0.1388274237226371f, - -0.13895705467124353f, - -0.13908668323885878f, - -0.13921630942326088f, - -0.1393459332222291f, - -0.13947555463354286f, - -0.13960517365498068f, - -0.1397347902843211f, - -0.13986440451934365f, - -0.13999401635782788f, - -0.14012362579755241f, - -0.14025323283629562f, - -0.14038283747183847f, - -0.14051243970195929f, - -0.14064203952443743f, - -0.14077163693705225f, - -0.1409012319375822f, - -0.14103082452380847f, - -0.14116041469350968f, - -0.1412900024444653f, - -0.14141958777445404f, - -0.14154917068125722f, - -0.1416787511626536f, - -0.14180832921642286f, - -0.14193790484034385f, - -0.14206747803219805f, - -0.14219704878976439f, - -0.1423266171108227f, - -0.1424561829931529f, - -0.142585746434534f, - -0.14271530743274777f, - -0.14284486598557325f, - -0.1429744220907906f, - -0.14310397574617892f, - -0.14323352694952018f, - -0.14336307569859363f, - -0.14349262199117954f, - -0.14362216582505768f, - -0.14375170719800884f, - -0.14388124610781375f, - -0.14401078255225236f, - -0.1441403165291047f, - -0.14426984803615167f, - -0.14439937707117417f, - -0.14452890363195195f, - -0.14465842771626644f, - -0.14478794932189742f, - -0.14491746844662645f, - -0.14504698508823335f, - -0.1451764992444998f, - -0.14530601091320614f, - -0.14543552009213237f, - -0.14556502677906114f, - -0.14569453097177248f, - -0.14582403266804742f, - -0.14595353186566606f, - -0.14608302856241126f, - -0.14621252275606322f, - -0.1463420144444031f, - -0.14647150362521122f, - -0.14660099029627058f, - -0.14673047445536158f, - -0.14685995610026553f, - -0.14698943522876382f, - -0.14711891183863696f, - -0.14724838592766817f, - -0.14737785749363808f, - -0.1475073265343282f, - -0.14763679304751925f, - -0.14776625703099464f, - -0.14789571848253513f, - -0.14802517739992244f, - -0.14815463378093743f, - -0.14828408762336368f, - -0.14841353892498216f, - -0.14854298768357474f, - -0.14867243389692336f, - -0.1488018775628091f, - -0.14893131867901574f, - -0.1490607572433245f, - -0.14919019325351743f, - -0.14931962670737584f, - -0.14944905760268368f, - -0.14957848593722226f, - -0.14970791170877348f, - -0.14983733491512005f, - -0.14996675555404484f, - -0.15009617362332978f, - -0.15022558912075687f, - -0.15035500204410954f, - -0.15048441239116941f, - -0.15061382015971955f, - -0.150743225347543f, - -0.150872627952422f, - -0.15100202797213888f, - -0.15113142540447677f, - -0.15126082024721896f, - -0.15139021249814788f, - -0.1515196021550464f, - -0.15164898921569656f, - -0.15177837367788316f, - -0.15190775553938834f, - -0.15203713479799516f, - -0.15216651145148588f, - -0.15229588549764542f, - -0.1524252569342561f, - -0.15255462575910117f, - -0.15268399196996307f, - -0.15281335556462688f, - -0.15294271654087516f, - -0.1530720748964913f, - -0.15320143062925878f, - -0.15333078373696027f, - -0.15346013421738106f, - -0.15358948206830392f, - -0.15371882728751252f, - -0.15384816987278965f, - -0.15397750982192082f, - -0.15410684713268896f, - -0.15423618180287793f, - -0.1543655138302707f, - -0.15449484321265297f, - -0.15462416994780784f, - -0.15475349403351935f, - -0.15488281546757107f, - -0.15501213424774762f, - -0.15514145037183358f, - -0.15527076383761268f, - -0.15540007464286873f, - -0.15552938278538653f, - -0.1556586882629508f, - -0.15578799107334504f, - -0.15591729121435458f, - -0.15604658868376303f, - -0.1561758834793558f, - -0.15630517559891652f, - -0.15643446504023073f, - -0.15656375180108267f, - -0.15669303587925656f, - -0.15682231727253762f, - -0.15695159597871108f, - -0.15708087199556134f, - -0.15721014532087244f, - -0.15733941595243103f, - -0.15746868388802124f, - -0.1575979491254281f, - -0.15772721166243667f, - -0.15785647149683119f, - -0.15798572862639862f, - -0.15811498304892324f, - -0.15824423476219038f, - -0.1583734837639844f, - -0.15850273005209245f, - -0.15863197362429904f, - -0.15876121447838962f, - -0.15889045261214882f, - -0.1590196880233639f, - -0.1591489207098196f, - -0.1592781506693015f, - -0.15940737789959536f, - -0.159536602398486f, - -0.1596658241637609f, - -0.15979504319320506f, - -0.15992425948460431f, - -0.16005347303574372f, - -0.16018268384441095f, - -0.1603118919083912f, - -0.16044109722547048f, - -0.16057029979343404f, - -0.16069949961006977f, - -0.160828696673163f, - -0.16095789098049948f, - -0.16108708252986645f, - -0.16121627131904934f, - -0.1613454573458354f, - -0.16147464060801023f, - -0.16160382110336113f, - -0.1617329988296738f, - -0.16186217378473564f, - -0.16199134596633244f, - -0.16212051537225172f, - -0.1622496820002793f, - -0.16237884584820247f, - -0.1625080069138084f, - -0.16263716519488353f, - -0.16276632068921476f, - -0.1628954733945882f, - -0.16302462330879258f, - -0.1631537704296141f, - -0.16328291475483983f, - -0.16341205628225605f, - -0.16354119500965172f, - -0.16367033093481317f, - -0.16379946405552775f, - -0.16392859436958188f, - -0.1640577218747647f, - -0.16418684656886276f, - -0.1643159684496636f, - -0.16444508751495468f, - -0.16457420376252274f, - -0.16470331719015718f, - -0.16483242779564475f, - -0.16496153557677323f, - -0.16509064053132946f, - -0.16521974265710307f, - -0.165348841951881f, - -0.1654779384134512f, - -0.16560703203960164f, - -0.16573612282811945f, - -0.16586521077679442f, - -0.16599429588341386f, - -0.16612337814576583f, - -0.16625245756163776f, - -0.16638153412881962f, - -0.16651060784509883f, - -0.16663967870826332f, - -0.16676874671610195f, - -0.16689781186640357f, - -0.1670268741569563f, - -0.1671559335855482f, - -0.1672849901499688f, - -0.16741404384800584f, - -0.1675430946774485f, - -0.16767214263608587f, - -0.1678011877217064f, - -0.1679302299320985f, - -0.16805926926505146f, - -0.1681883057183547f, - -0.16831733928979672f, - -0.16844636997716575f, - -0.16857539777825262f, - -0.1687044226908456f, - -0.16883344471273384f, - -0.16896246384170666f, - -0.16909148007555241f, - -0.1692204934120622f, - -0.16934950384902456f, - -0.16947851138422892f, - -0.1696075160154639f, - -0.1697365177405208f, - -0.16986551655718832f, - -0.1699945124632561f, - -0.17012350545651295f, - -0.1702524955347504f, - -0.1703814826957573f, - -0.17051046693732355f, - -0.170639448257239f, - -0.17076842665329273f, - -0.17089740212327648f, - -0.17102637466497944f, - -0.17115534427619164f, - -0.1712843109547024f, - -0.17141327469830364f, - -0.1715422355047847f, - -0.17167119337193593f, - -0.1718001482975472f, - -0.17192910027940933f, - -0.1720580493153132f, - -0.1721869954030489f, - -0.17231593854040653f, - -0.17244487872517708f, - -0.17257381595515167f, - -0.17270275022812012f, - -0.172831681541874f, - -0.1729606098942033f, - -0.17308953528289972f, - -0.17321845770575328f, - -0.1733473771605558f, - -0.1734762936450978f, - -0.17360520715716957f, - -0.17373411769456384f, - -0.17386302525507097f, - -0.17399192983648212f, - -0.1741208314365877f, - -0.1742497300531807f, - -0.17437862568405169f, - -0.17450751832699204f, - -0.17463640797979232f, - -0.17476529464024582f, - -0.17489417830614318f, - -0.1750230589752761f, - -0.17515193664543613f, - -0.1752808113144142f, - -0.17540968298000378f, - -0.17553855163999585f, - -0.17566741729218227f, - -0.17579627993435404f, - -0.17592513956430494f, - -0.17605399617982612f, - -0.17618284977870963f, - -0.17631170035874671f, - -0.17644054791773134f, - -0.17656939245345485f, - -0.1766982339637095f, - -0.17682707244628765f, - -0.17695590789898083f, - -0.17708474031958318f, - -0.1772135697058864f, - -0.17734239605568292f, - -0.17747121936676455f, - -0.17760003963692564f, - -0.17772885686395806f, - -0.17785767104565406f, - -0.1779864821798074f, - -0.17811529026420997f, - -0.1782440952966556f, - -0.1783728972749364f, - -0.17850169619684622f, - -0.17863049206017728f, - -0.1787592848627231f, - -0.1788880746022773f, - -0.1790168612766327f, - -0.17914564488358206f, - -0.17927442542091923f, - -0.179403202886438f, - -0.17953197727793133f, - -0.17966074859319273f, - -0.17978951683001487f, - -0.17991828198619308f, - -0.18004704405952016f, - -0.18017580304778977f, - -0.1803045589487948f, - -0.18043331176033078f, - -0.18056206148019072f, - -0.18069080810616853f, - -0.18081955163605726f, - -0.18094829206765273f, - -0.18107702939874806f, - -0.18120576362713745f, - -0.181334494750615f, - -0.18146322276697413f, - -0.18159194767401082f, - -0.18172066946951854f, - -0.1818493881512917f, - -0.18197810371712383f, - -0.1821068161648112f, - -0.18223552549214747f, - -0.18236423169692725f, - -0.1824929347769443f, - -0.1826216347299951f, - -0.18275033155387355f, - -0.1828790252463744f, - -0.18300771580529215f, - -0.18313640322842212f, - -0.18326508751355972f, - -0.18339376865849957f, - -0.18352244666103631f, - -0.1836511215189655f, - -0.18377979323008278f, - -0.1839084617921825f, - -0.18403712720306087f, - -0.18416578946051235f, - -0.1842944485623332f, - -0.18442310450631805f, - -0.18455175729026324f, - -0.18468040691196394f, - -0.18480905336921488f, - -0.1849376966598135f, - -0.18506633678155465f, - -0.18519497373223412f, - -0.18532360750964685f, - -0.18545223811159053f, - -0.1855808655358602f, - -0.1857094897802519f, - -0.18583811084256163f, - -0.1859667287205847f, - -0.18609534341211897f, - -0.1862239549149598f, - -0.18635256322690347f, - -0.18648116834574546f, - -0.18660977026928388f, - -0.1867383689953143f, - -0.1868669645216332f, - -0.18699555684603628f, - -0.1871241459663219f, - -0.18725273188028582f, - -0.18738131458572477f, - -0.1875098940804355f, - -0.187638470362214f, - -0.1877670434288589f, - -0.1878956132781662f, - -0.18802417990793294f, - -0.18815274331595527f, - -0.18828130350003208f, - -0.1884098604579596f, - -0.18853841418753506f, - -0.18866696468655486f, - -0.18879551195281807f, - -0.18892405598412118f, - -0.1890525967782612f, - -0.18918113433303646f, - -0.18930966864624368f, - -0.18943819971568132f, - -0.18956672753914613f, - -0.18969525211443672f, - -0.18982377343934997f, - -0.18995229151168416f, - -0.19008080632923757f, - -0.19020931788980774f, - -0.1903378261911922f, - -0.1904663312311894f, - -0.1905948330075979f, - -0.19072333151821547f, - -0.19085182676084025f, - -0.19098031873326968f, - -0.19110880743330383f, - -0.19123729285874017f, - -0.19136577500737717f, - -0.19149425387701244f, - -0.19162272946544628f, - -0.19175120177047641f, - -0.19187967078990154f, - -0.1920081365215203f, - -0.19213659896313068f, - -0.1922650581125332f, - -0.19239351396752588f, - -0.1925219665259077f, - -0.19265041578547673f, - -0.19277886174403383f, - -0.1929073043993772f, - -0.19303574374930604f, - -0.1931641797916187f, - -0.19329261252411617f, - -0.19342104194459697f, - -0.19354946805086046f, - -0.19367789084070608f, - -0.19380631031193252f, - -0.19393472646234106f, - -0.19406313928973046f, - -0.19419154879189995f, - -0.19431995496664972f, - -0.19444835781178f, - -0.1945767573250902f, - -0.19470515350437978f, - -0.19483354634744918f, - -0.1949619358520988f, - -0.19509032201612836f, - -0.1952187048373375f, - -0.19534708431352732f, - -0.1954754604424972f, - -0.19560383322204783f, - -0.1957322026499801f, - -0.19586056872409394f, - -0.19598893144218943f, - -0.1961172908020675f, - -0.19624564680152923f, - -0.19637399943837483f, - -0.19650234871040412f, - -0.19663069461541963f, - -0.19675903715122128f, - -0.19688737631561f, - -0.19701571210638674f, - -0.1971440445213516f, - -0.19727237355830737f, - -0.19740069921505432f, - -0.19752902148939364f, - -0.19765734037912566f, - -0.1977856558820534f, - -0.19791396799597738f, - -0.198042276718699f, - -0.19817058204801882f, - -0.19829888398174014f, - -0.19842718251766364f, - -0.198555477653591f, - -0.19868376938732388f, - -0.19881205771666316f, - -0.19894034263941243f, - -0.19906862415337268f, - -0.19919690225634581f, - -0.199325176946133f, - -0.19945344822053798f, - -0.199581716077362f, - -0.19970998051440725f, - -0.19983824152947552f, - -0.19996649912036948f, - -0.20009475328489196f, - -0.20022300402084486f, - -0.2003512513260303f, - -0.20047949519825115f, - -0.20060773563531042f, - -0.20073597263500995f, - -0.20086420619515322f, - -0.20099243631354216f, - -0.20112066298798043f, - -0.20124888621627005f, - -0.2013771059962148f, - -0.20150532232561724f, - -0.20163353520227958f, - -0.20176174462400662f, - -0.20188995058860065f, - -0.20201815309386495f, - -0.2021463521376019f, - -0.20227454771761658f, - -0.20240273983171153f, - -0.20253092847769022f, - -0.20265911365335532f, - -0.2027872953565121f, - -0.20291547358496337f, - -0.2030436483365128f, - -0.2031718196089642f, - -0.20329998740012045f, - -0.20342815170778725f, - -0.2035563125297676f, - -0.20368446986386554f, - -0.20381262370788428f, - -0.2039407740596296f, - -0.20406892091690487f, - -0.2041970642775143f, - -0.20432520413926133f, - -0.2044533404999521f, - -0.20458147335739005f, - -0.20470960270937977f, - -0.20483772855372573f, - -0.2049658508882317f, - -0.20509396971070404f, - -0.20522208501894662f, - -0.20535019681076422f, - -0.2054783050839608f, - -0.205606409836343f, - -0.20573451106571494f, - -0.2058626087698812f, - -0.20599070294664765f, - -0.20611879359381866f, - -0.20624688070920025f, - -0.20637496429059682f, - -0.20650304433581457f, - -0.206631120842658f, - -0.206759193808933f, - -0.20688726323244552f, - -0.20701532911100068f, - -0.20714339144240365f, - -0.20727145022446058f, - -0.20739950545497765f, - -0.20752755713176022f, - -0.20765560525261414f, - -0.20778364981534453f, - -0.20791169081775907f, - -0.20803972825766295f, - -0.2081677621328623f, - -0.20829579244116242f, - -0.20842381918037128f, - -0.2085518423482943f, - -0.20867986194273783f, - -0.20880787796150746f, - -0.20893589040241137f, - -0.20906389926325525f, - -0.2091919045418457f, - -0.20931990623598937f, - -0.20944790434349211f, - -0.2095758988621625f, - -0.20970388978980645f, - -0.20983187712423093f, - -0.209959860863242f, - -0.21008784100464845f, - -0.2102158175462565f, - -0.21034379048587332f, - -0.21047175982130523f, - -0.21059972555036127f, - -0.2107276876708479f, - -0.21085564618057256f, - -0.21098360107734224f, - -0.21111155235896492f, - -0.2112395000232486f, - -0.21136744406800054f, - -0.21149538449102798f, - -0.21162332129013914f, - -0.2117512544631423f, - -0.2118791840078445f, - -0.21200710992205454f, - -0.2121350322035796f, - -0.21226295085022864f, - -0.21239086585980893f, - -0.21251877723012952f, - -0.2126466849589983f, - -0.2127745890442227f, - -0.21290248948361287f, - -0.21303038627497642f, - -0.21315827941612184f, - -0.21328616890485685f, - -0.21341405473899186f, - -0.2135419369163347f, - -0.21366981543469413f, - -0.213797690291879f, - -0.21392556148569736f, - -0.21405342901395988f, - -0.2141812928744747f, - -0.21430915306505094f, - -0.21443700958349687f, - -0.21456486242762346f, - -0.2146927115952391f, - -0.2148205570841531f, - -0.21494839889217404f, - -0.2150762370171131f, - -0.21520407145677894f, - -0.21533190220898116f, - -0.2154597292715294f, - -0.21558755264223253f, - -0.21571537231890206f, - -0.21584318829934698f, - -0.21597100058137716f, - -0.21609880916280172f, - -0.21622661404143245f, - -0.21635441521507853f, - -0.21648221268155018f, - -0.21661000643865674f, - -0.21673779648421024f, - -0.2168655828160201f, - -0.2169933654318964f, - -0.21712114432965043f, - -0.21724891950709188f, - -0.21737669096203222f, - -0.21750445869228124f, - -0.21763222269565055f, - -0.2177599829699501f, - -0.21788773951299117f, - -0.21801549232258513f, - -0.2181432413965425f, - -0.21827098673267395f, - -0.218398728328791f, - -0.2185264661827053f, - -0.21865420029222762f, - -0.2187819306551693f, - -0.21890965726934083f, - -0.21903738013255541f, - -0.21916509924262365f, - -0.2192928145973571f, - -0.21942052619456656f, - -0.21954823403206547f, - -0.21967593810766467f, - -0.21980363841917605f, - -0.21993133496441145f, - -0.22005902774118197f, - -0.2201867167473014f, - -0.2203144019805809f, - -0.22044208343883262f, - -0.22056976111986795f, - -0.22069743502150088f, - -0.2208251051415429f, - -0.2209527714778064f, - -0.22108043402810296f, - -0.2212080927902469f, - -0.22133574776204992f, - -0.22146339894132472f, - -0.22159104632588397f, - -0.22171868991353968f, - -0.22184632970210638f, - -0.22197396568939617f, - -0.2221015978732216f, - -0.22222922625139613f, - -0.22235685082173334f, - -0.22248447158204598f, - -0.22261208853014688f, - -0.22273970166384982f, - -0.22286731098096854f, - -0.22299491647931569f, - -0.22312251815670558f, - -0.22325011601095143f, - -0.22337771003986642f, - -0.22350530024126472f, - -0.2236328866129605f, - -0.22376046915276715f, - -0.22388804785849778f, - -0.22401562272796807f, - -0.22414319375899117f, - -0.2242707609493812f, - -0.22439832429695147f, - -0.22452588379951793f, - -0.22465343945489405f, - -0.22478099126089415f, - -0.22490853921533271f, - -0.22503608331602334f, - -0.22516362356078234f, - -0.2252911599474235f, - -0.2254186924737615f, - -0.22554622113761022f, - -0.22567374593678624f, - -0.2258012668691036f, - -0.22592878393237725f, - -0.22605629712442224f, - -0.22618380644305278f, - -0.22631131188608575f, - -0.22643881345133554f, - -0.22656631113661746f, - -0.22669380493974595f, - -0.22682129485853822f, - -0.22694878089080886f, - -0.22707626303437348f, - -0.2272037412870468f, - -0.22733121564664627f, - -0.22745868611098677f, - -0.22758615267788412f, - -0.2277136153451538f, - -0.22784107411061222f, - -0.2279685289720758f, - -0.2280959799273598f, - -0.22822342697428125f, - -0.2283508701106555f, - -0.22847830933429972f, - -0.22860574464302938f, - -0.2287331760346618f, - -0.22886060350701262f, - -0.22898802705789928f, - -0.2291154466851375f, - -0.2292428623865449f, - -0.22937027415993777f, - -0.2294976820031321f, - -0.22962508591394648f, - -0.2297524858901971f, - -0.2298798819297009f, - -0.23000727403027418f, - -0.23013466218973583f, - -0.23026204640590223f, - -0.23038942667659065f, - -0.23051680299961763f, - -0.23064417537280232f, - -0.2307715437939614f, - -0.23089890826091242f, - -0.231026268771473f, - -0.23115362532346004f, - -0.23128097791469301f, - -0.2314083265429889f, - -0.23153567120616564f, - -0.23166301190204036f, - -0.2317903486284328f, - -0.23191768138316024f, - -0.23204501016404086f, - -0.23217233496889209f, - -0.2322996557955339f, - -0.2324269726417839f, - -0.2325542855054605f, - -0.23268159438438227f, - -0.2328088992763669f, - -0.23293620017923478f, - -0.23306349709080382f, - -0.23319079000889237f, - -0.23331807893131973f, - -0.23344536385590528f, - -0.23357264478046758f, - -0.2336999217028253f, - -0.2338271946207984f, - -0.23395446353220528f, - -0.23408172843486608f, - -0.23420898932659923f, - -0.23433624620522508f, - -0.23446349906856223f, - -0.23459074791443066f, - -0.23471799274065042f, - -0.2348452335450408f, - -0.23497247032542112f, - -0.23509970307961164f, - -0.2352269318054327f, - -0.23535415650070382f, - -0.23548137716324508f, - -0.23560859379087565f, - -0.2357358063814175f, - -0.23586301493269002f, - -0.23599021944251347f, - -0.2361174199087074f, - -0.23624461632909402f, - -0.23637180870149296f, - -0.2364989970237248f, - -0.23662618129360935f, - -0.23675336150896908f, - -0.23688053766762393f, - -0.23700770976739477f, - -0.2371348778061025f, - -0.23726204178156735f, - -0.23738920169161204f, - -0.23751635753405692f, - -0.23764350930672315f, - -0.23777065700743122f, - -0.23789780063400415f, - -0.23802494018426254f, - -0.23815207565602792f, - -0.2382792070471209f, - -0.23840633435536496f, - -0.23853345757858088f, - -0.23866057671459043f, - -0.23878769176121503f, - -0.23891480271627707f, - -0.23904190957759894f, - -0.23916901234300225f, - -0.23929611101030873f, - -0.239423205577341f, - -0.23955029604192177f, - -0.23967738240187247f, - -0.23980446465501642f, - -0.23993154279917567f, - -0.2400586168321723f, - -0.24018568675182939f, - -0.24031275255597007f, - -0.24043981424241664f, - -0.2405668718089911f, - -0.24069392525351807f, - -0.24082097457381965f, - -0.2409480197677189f, - -0.24107506083303806f, - -0.24120209776760204f, - -0.24132913056923322f, - -0.24145615923575497f, - -0.24158318376499066f, - -0.2417102041547629f, - -0.24183722040289696f, - -0.24196423250721558f, - -0.24209124046554242f, - -0.24221824427570043f, - -0.2423452439355151f, - -0.24247223944280952f, - -0.2425992307954076f, - -0.24272621799113253f, - -0.24285320102781016f, - -0.24298017990326382f, - -0.24310715461531773f, - -0.2432341251617962f, - -0.24336109154052282f, - -0.24348805374932372f, - -0.24361501178602263f, - -0.2437419656484441f, - -0.243868915334412f, - -0.24399586084175276f, - -0.24412280216829035f, - -0.2442497393118497f, - -0.2443766722702549f, - -0.2445036010413327f, - -0.24463052562290732f, - -0.24475744601280358f, - -0.24488436220884754f, - -0.2450112742088637f, - -0.24513818201067827f, - -0.2452650856121159f, - -0.24539198501100298f, - -0.24551888020516427f, - -0.2456457711924259f, - -0.24577265797061398f, - -0.245899540537554f, - -0.24602641889107138f, - -0.24615329302899255f, - -0.24628016294914398f, - -0.24640702864935132f, - -0.24653389012744084f, - -0.24666074738123786f, - -0.2467876004085705f, - -0.24691444920726427f, - -0.24704129377514564f, - -0.24716813411004035f, - -0.2472949702097767f, - -0.24742180207218054f, - -0.24754862969507865f, - -0.24767545307629787f, - -0.24780227221366427f, - -0.24792908710500652f, - -0.24805589774815087f, - -0.24818270414092442f, - -0.2483095062811535f, - -0.24843630416666715f, - -0.24856309779529184f, - -0.24868988716485502f, - -0.24881667227318327f, - -0.24894345311810595f, - -0.24907022969744982f, - -0.24919700200904257f, - -0.24932377005071205f, - -0.2494505338202852f, - -0.2495772933155917f, - -0.24970404853445874f, - -0.2498307994747139f, - -0.24995754613418583f, - -0.25008428851070313f, - -0.25021102660209377f, - -0.2503377604061856f, - -0.25046448992080755f, - -0.2505912151437885f, - -0.25071793607295634f, - -0.2508446527061405f, - -0.25097136504116924f, - -0.25109807307587106f, - -0.2512247768080752f, - -0.2513514762356111f, - -0.2514781713563074f, - -0.25160486216799227f, - -0.2517315486684967f, - -0.251858230855649f, - -0.2519849087272786f, - -0.252111582281214f, - -0.2522382515152864f, - -0.2523649164273245f, - -0.25249157701515795f, - -0.2526182332766164f, - -0.25274488520952887f, - -0.25287153281172686f, - -0.2529981760810394f, - -0.2531248150152966f, - -0.2532514496123276f, - -0.2533780798699643f, - -0.253504705786036f, - -0.2536313273583731f, - -0.25375794458480594f, - -0.2538845574631641f, - -0.2540111659912798f, - -0.2541377701669828f, - -0.25426436998810376f, - -0.2543909654524726f, - -0.25451755655792174f, - -0.2546441433022814f, - -0.25477072568338244f, - -0.25489730369905506f, - -0.2550238773471321f, - -0.2551504466254439f, - -0.25527701153182175f, - -0.25540357206409653f, - -0.2555301282201001f, - -0.2556566799976644f, - -0.25578322739462006f, - -0.2559097704087997f, - -0.25603630903803415f, - -0.25616284328015604f, - -0.2562893731329964f, - -0.25641589859438796f, - -0.256542419662162f, - -0.25666893633415094f, - -0.2567954486081875f, - -0.25692195648210336f, - -0.25704845995373093f, - -0.2571749590209017f, - -0.2573014536814499f, - -0.2574279439332072f, - -0.2575544297740062f, - -0.25768091120167885f, - -0.2578073882140595f, - -0.25793386080898023f, - -0.25806032898427395f, - -0.25818679273777273f, - -0.2583132520673115f, - -0.25843970697072244f, - -0.25856615744583883f, - -0.25869260349049394f, - -0.25881904510252035f, - -0.25894548227975317f, - -0.25907191502002513f, - -0.25919834332116987f, - -0.2593247671810201f, - -0.2594511865974114f, - -0.25957760156817666f, - -0.2597040120911499f, - -0.2598304181641642f, - -0.25995681978505525f, - -0.26008321695165654f, - -0.26020960966180207f, - -0.2603359979133263f, - -0.26046238170406266f, - -0.26058876103184736f, - -0.260715135894514f, - -0.26084150628989683f, - -0.2609678722158309f, - -0.2610942336701514f, - -0.26122059065069275f, - -0.26134694315528945f, - -0.2614732911817773f, - -0.26159963472799047f, - -0.26172597379176465f, - -0.26185230837093537f, - -0.2619786384633375f, - -0.26210496406680606f, - -0.2622312851791768f, - -0.2623576017982858f, - -0.2624839139219682f, - -0.2626102215480592f, - -0.26273652467439496f, - -0.2628628232988118f, - -0.26298911741914516f, - -0.26311540703323105f, - -0.2632416921389047f, - -0.2633679727340039f, - -0.2634942488163641f, - -0.26362052038382144f, - -0.26374678743421154f, - -0.2638730499653726f, - -0.2639993079751402f, - -0.264125561461351f, - -0.2642518104218408f, - -0.2643780548544481f, - -0.2645042947570088f, - -0.2646305301273599f, - -0.26475676096333833f, - -0.26488298726278037f, - -0.2650092090235248f, - -0.2651354262434081f, - -0.26526163892026744f, - -0.2653878470519394f, - -0.2655140506362632f, - -0.26564024967107547f, - -0.2657664441542138f, - -0.26589263408351504f, - -0.2660188194568187f, - -0.26614500027196175f, - -0.26627117652678217f, - -0.2663973482191174f, - -0.26652351534680613f, - -0.2666496779076868f, - -0.2667758358995973f, - -0.2669019893203755f, - -0.2670281381678602f, - -0.26715428243989037f, - -0.2672804221343036f, - -0.26740655724893947f, - -0.2675326877816362f, - -0.26765881373023215f, - -0.2677849350925667f, - -0.2679110518664791f, - -0.26803716404980804f, - -0.2681632716403917f, - -0.26828937463607105f, - -0.26841547303468444f, - -0.2685415668340712f, - -0.26866765603206993f, - -0.2687937406265218f, - -0.26891982061526554f, - -0.26904589599614076f, - -0.2691719667669873f, - -0.269298032925644f, - -0.2694240944699526f, - -0.26955015139775207f, - -0.2696762037068825f, - -0.2698022513951832f, - -0.2699282944604961f, - -0.27005433290066055f, - -0.270180366713517f, - -0.27030639589690497f, - -0.2704324204486668f, - -0.27055844036664206f, - -0.2706844556486716f, - -0.2708104662925961f, - -0.27093647229625556f, - -0.27106247365749264f, - -0.2711884703741475f, - -0.27131446244406116f, - -0.27144044986507393f, - -0.2715664326350288f, - -0.27169241075176614f, - -0.2718183842131275f, - -0.2719443530169534f, - -0.27207031716108715f, - -0.27219627664336954f, - -0.2723222314616418f, - -0.2724481816137466f, - -0.27257412709752504f, - -0.27270006791081985f, - -0.2728260040514723f, - -0.2729519355173252f, - -0.27307786230622005f, - -0.2732037844159995f, - -0.2733297018445064f, - -0.2734556145895826f, - -0.2735815226490708f, - -0.27370742602081266f, - -0.27383332470265254f, - -0.2739592186924324f, - -0.27408510798799507f, - -0.27421099258718257f, - -0.27433687248783967f, - -0.2744627476878086f, - -0.27458861818493246f, - -0.27471448397705367f, - -0.27484034506201727f, - -0.27496620143766587f, - -0.2750920531018428f, - -0.2752179000523918f, - -0.2753437422871555f, - -0.2754695798039795f, - -0.27559541260070664f, - -0.27572124067518083f, - -0.2758470640252452f, - -0.27597288264874553f, - -0.27609869654352504f, - -0.276224505707428f, - -0.2763503101382978f, - -0.2764761098339806f, - -0.2766019047923199f, - -0.2767276950111603f, - -0.2768534804883464f, - -0.27697926122172206f, - -0.2771050372091338f, - -0.27723080844842557f, - -0.27735657493744187f, - -0.2774823366740282f, - -0.2776080936560301f, - -0.27773384588129235f, - -0.2778595933476597f, - -0.277985336052978f, - -0.2781110739950931f, - -0.2782368071718497f, - -0.2783625355810941f, - -0.2784882592206717f, - -0.2786139780884278f, - -0.2787396921822087f, - -0.27886540149986067f, - -0.2789911060392293f, - -0.27911680579815984f, - -0.2792425007745002f, - -0.2793681909660958f, - -0.2794938763707928f, - -0.279619556986437f, - -0.27974523281087643f, - -0.2798709038419569f, - -0.279996570077525f, - -0.28012223151542753f, - -0.2802478881535105f, - -0.2803735399896224f, - -0.2804991870216095f, - -0.28062482924731874f, - -0.2807504666645965f, - -0.2808760992712918f, - -0.28100172706525095f, - -0.28112735004432143f, - -0.28125296820635076f, - -0.28137858154918555f, - -0.28150419007067523f, - -0.2816297937686667f, - -0.28175539264100774f, - -0.28188098668554534f, - -0.2820065759001293f, - -0.28213216028260674f, - -0.2822577398308258f, - -0.28238331454263393f, - -0.2825088844158811f, - -0.28263444944841487f, - -0.2827600096380837f, - -0.2828855649827357f, - -0.28301111548022f, - -0.28313666112838576f, - -0.28326220192508084f, - -0.283387737868155f, - -0.2835132689554565f, - -0.28363879518483515f, - -0.2837643165541392f, - -0.2838898330612188f, - -0.28401534470392237f, - -0.2841408514800997f, - -0.28426635338760076f, - -0.2843918504242747f, - -0.28451734258797107f, - -0.28464282987653877f, - -0.2847683122878294f, - -0.2848937898196919f, - -0.2850192624699762f, - -0.2851447302365317f, - -0.2852701931172101f, - -0.28539565110986076f, - -0.28552110421233406f, - -0.28564655242247955f, - -0.2857719957381494f, - -0.28589743415719326f, - -0.2860228676774619f, - -0.2861482962968059f, - -0.28627372001307533f, - -0.28639913882412277f, - -0.2865245527277983f, - -0.28664996172195306f, - -0.2867753658044373f, - -0.28690076497310396f, - -0.28702615922580355f, - -0.28715154856038744f, - -0.28727693297470713f, - -0.28740231246661335f, - -0.28752768703395937f, - -0.28765305667459623f, - -0.28777842138637566f, - -0.2879037811671487f, - -0.2880291360147691f, - -0.28815448592708803f, - -0.28827983090195736f, - -0.2884051709372296f, - -0.2885305060307576f, - -0.2886558361803933f, - -0.28878116138398885f, - -0.2889064816393976f, - -0.28903179694447145f, - -0.2891571072970635f, - -0.2892824126950271f, - -0.2894077131362147f, - -0.2895330086184789f, - -0.2896582991396732f, - -0.28978358469765125f, - -0.2899088652902658f, - -0.2900341409153695f, - -0.29015941157081737f, - -0.2902846772544621f, - -0.29040993796415737f, - -0.29053519369775677f, - -0.29066044445311323f, - -0.29078569022808237f, - -0.2909109310205173f, - -0.291036166828272f, - -0.29116139764919974f, - -0.29128662348115647f, - -0.2914118443219956f, - -0.2915370601695715f, - -0.29166227102173775f, - -0.29178747687635065f, - -0.291912677731264f, - -0.2920378735843324f, - -0.29216306443341084f, - -0.2922882502763532f, - -0.2924134311110162f, - -0.2925386069352541f, - -0.2926637777469219f, - -0.2927889435438742f, - -0.2929141043239678f, - -0.29303926008505743f, - -0.2931644108249985f, - -0.29328955654164574f, - -0.2934146972328565f, - -0.29353983289648566f, - -0.2936649635303891f, - -0.2937900891324224f, - -0.29391520970044177f, - -0.2940403252323039f, - -0.29416543572586407f, - -0.2942905411789794f, - -0.2944156415895054f, - -0.2945407369552993f, - -0.29466582727421686f, - -0.2947909125441155f, - -0.29491599276285146f, - -0.2950410679282808f, - -0.2951661380382619f, - -0.295291203090651f, - -0.2954162630833051f, - -0.2955413180140805f, - -0.29566636788083617f, - -0.29579141268142845f, - -0.2959164524137148f, - -0.2960414870755518f, - -0.29616651666479876f, - -0.29629154117931245f, - -0.29641656061695065f, - -0.29654157497557115f, - -0.29666658425303105f, - -0.29679158844719006f, - -0.29691658755590533f, - -0.2970415815770351f, - -0.29716657050843676f, - -0.2972915543479704f, - -0.29741653309349353f, - -0.2975415067428648f, - -0.2976664752939418f, - -0.297791438744585f, - -0.2979163970926524f, - -0.2980413503360028f, - -0.2981662984724952f, - -0.29829124149998776f, - -0.29841617941634135f, - -0.2985411122194143f, - -0.29866603990706597f, - -0.2987909624771549f, - -0.29891587992754226f, - -0.2990407922560867f, - -0.29916569946064764f, - -0.29929060153908504f, - -0.2994154984892593f, - -0.2995403903090299f, - -0.29966527699625645f, - -0.2997901585487998f, - -0.2999150349645194f, - -0.30003990624127624f, - -0.30016477237692996f, - -0.30028963336934184f, - -0.30041448921637154f, - -0.30053933991588017f, - -0.30066418546572876f, - -0.3007890258637778f, - -0.30091386110788815f, - -0.3010386911959199f, - -0.30116351612573594f, - -0.30128833589519644f, - -0.30141315050216266f, - -0.30153795994449517f, - -0.30166276422005706f, - -0.301787563326709f, - -0.30191235726231247f, - -0.30203714602472853f, - -0.3021619296118205f, - -0.3022867080214494f, - -0.30241148125147727f, - -0.3025362492997661f, - -0.3026610121641772f, - -0.30278576984257444f, - -0.3029105223328193f, - -0.3030352696327742f, - -0.3031600117403008f, - -0.3032847486532634f, - -0.30340948036952364f, - -0.3035342068869445f, - -0.30365892820338786f, - -0.3037836443167184f, - -0.3039083552247982f, - -0.3040330609254905f, - -0.3041577614166584f, - -0.3042824566961644f, - -0.3044071467618735f, - -0.30453183161164843f, - -0.3046565112433523f, - -0.30478118565484913f, - -0.30490585484400307f, - -0.3050305188086776f, - -0.30515517754673616f, - -0.3052798310560432f, - -0.30540447933446324f, - -0.30552912237985963f, - -0.30565376019009743f, - -0.3057783927630407f, - -0.3059030200965533f, - -0.30602764218850037f, - -0.30615225903674687f, - -0.3062768706391571f, - -0.30640147699359505f, - -0.3065260780979273f, - -0.30665067395001805f, - -0.30677526454773235f, - -0.3068998498889345f, - -0.3070244299714915f, - -0.30714900479326784f, - -0.30727357435212893f, - -0.3073981386459404f, - -0.3075226976725669f, - -0.3076472514298759f, - -0.30777179991573245f, - -0.3078963431280023f, - -0.3080208810645506f, - -0.3081454137232452f, - -0.3082699411019514f, - -0.3083944631985354f, - -0.30851898001086364f, - -0.30864349153680165f, - -0.30876799777421765f, - -0.30889249872097746f, - -0.30901699437494773f, - -0.30914148473399444f, - -0.30926596979598614f, - -0.309390449558789f, - -0.30951492402027014f, - -0.30963939317829586f, - -0.309763857030735f, - -0.30988831557545415f, - -0.31001276881032075f, - -0.3101372167332019f, - -0.3102616593419656f, - -0.31038609663448f, - -0.3105105286086121f, - -0.3106349552622306f, - -0.31075937659320263f, - -0.31088379259939714f, - -0.3110082032786814f, - -0.31113260862892456f, - -0.3112570086479941f, - -0.31138140333375885f, - -0.31150579268408785f, - -0.3116301766968492f, - -0.31175455536991176f, - -0.3118789287011433f, - -0.31200329668841453f, - -0.3121276593295936f, - -0.3122520166225495f, - -0.3123763685651506f, - -0.3125007151552679f, - -0.3126250563907698f, - -0.3127493922695259f, - -0.3128737227894048f, - -0.3129980479482778f, - -0.31312236774401386f, - -0.3132466821744827f, - -0.31337099123755424f, - -0.31349529493109773f, - -0.31361959325298483f, - -0.31374388620108495f, - -0.3138681737732683f, - -0.3139924559674045f, - -0.31411673278136565f, - -0.31424100421302137f, - -0.31436527026024247f, - -0.31448953092089954f, - -0.3146137861928626f, - -0.3147380360740043f, - -0.3148622805621948f, - -0.31498651965530516f, - -0.31511075335120575f, - -0.3152349816477696f, - -0.31535920454286714f, - -0.3154834220343695f, - -0.3156076341201487f, - -0.31573184079807676f, - -0.315856042066025f, - -0.3159802379218649f, - -0.3161044283634692f, - -0.31622861338870906f, - -0.3163527929954571f, - -0.3164769671815859f, - -0.3166011359449674f, - -0.31672529928347354f, - -0.31684945719497726f, - -0.3169736096773515f, - -0.3170977567284686f, - -0.31722189834620046f, - -0.31734603452842164f, - -0.31747016527300426f, - -0.3175942905778214f, - -0.3177184104407461f, - -0.31784252485965087f, - -0.3179666338324107f, - -0.31809073735689813f, - -0.3182148354309867f, - -0.3183389280525492f, - -0.3184630152194611f, - -0.31858709692959514f, - -0.3187111731808254f, - -0.318835243971025f, - -0.31895930929806965f, - -0.3190833691598327f, - -0.3192074235541884f, - -0.31933147247901117f, - -0.3194555159321746f, - -0.31957955391155485f, - -0.31970358641502583f, - -0.31982761344046223f, - -0.31995163498573803f, - -0.3200756510487298f, - -0.32019966162731184f, - -0.32032366671935913f, - -0.3204476663227465f, - -0.32057166043534974f, - -0.32069564905504455f, - -0.3208196321797061f, - -0.3209436098072095f, - -0.3210675819354308f, - -0.32119154856224624f, - -0.3213155096855309f, - -0.32143946530316153f, - -0.3215634154130133f, - -0.3216873600129633f, - -0.3218112991008868f, - -0.3219352326746611f, - -0.3220591607321622f, - -0.32218308327126566f, - -0.32230700028984993f, - -0.3224309117857908f, - -0.3225548177569651f, - -0.32267871820124894f, - -0.3228026131165209f, - -0.32292650250065735f, - -0.3230503863515354f, - -0.3231742646670315f, - -0.3232981374450247f, - -0.3234220046833917f, - -0.32354586638001004f, - -0.32366972253275733f, - -0.32379357313951057f, - -0.3239174181981492f, - -0.3240412577065504f, - -0.3241650916625922f, - -0.3242889200641519f, - -0.3244127429091094f, - -0.32453656019534216f, - -0.32466037192072866f, - -0.3247841780831466f, - -0.32490797868047616f, - -0.32503177371059533f, - -0.3251555631713829f, - -0.32527934706071765f, - -0.32540312537647786f, - -0.3255268981165443f, - -0.32565066527879527f, - -0.3257744268611101f, - -0.32589818286136724f, - -0.32602193327744794f, - -0.3261456781072309f, - -0.32626941734859527f, - -0.3263931509994214f, - -0.32651687905758947f, - -0.326640601520979f, - -0.3267643183874697f, - -0.3268880296549425f, - -0.3270117353212768f, - -0.32713543538435336f, - -0.327259129842053f, - -0.3273828186922559f, - -0.3275065019328422f, - -0.32763017956169305f, - -0.32775385157668974f, - -0.32787751797571274f, - -0.32800117875664303f, - -0.3281248339173609f, - -0.32824848345574925f, - -0.3283721273696885f, - -0.32849576565706007f, - -0.32861939831574455f, - -0.3287430253436253f, - -0.3288666467385831f, - -0.32899026249849983f, - -0.3291138726212564f, - -0.3292374771047365f, - -0.3293610759468214f, - -0.32948466914539326f, - -0.3296082566983343f, - -0.32973183860352606f, - -0.3298554148588527f, - -0.32997898546219595f, - -0.3301025504114384f, - -0.330226109704462f, - -0.3303496633391513f, - -0.33047321131338825f, - -0.3305967536250561f, - -0.33072029027203703f, - -0.330843821252216f, - -0.33096734656347543f, - -0.3310908662036988f, - -0.33121438017076926f, - -0.33133788846257073f, - -0.33146139107698747f, - -0.3315848880119028f, - -0.3317083792652002f, - -0.3318318648347642f, - -0.3319553447184792f, - -0.33207881891422864f, - -0.33220228741989766f, - -0.33232575023336985f, - -0.3324492073525305f, - -0.3325726587752633f, - -0.33269610449945397f, - -0.33281954452298673f, - -0.3329429788437461f, - -0.3330664074596174f, - -0.3331898303684863f, - -0.33331324756823744f, - -0.3334366590567553f, - -0.3335600648319269f, - -0.3336834648916369f, - -0.33380685923377096f, - -0.3339302478562146f, - -0.33405363075685285f, - -0.3341770079335732f, - -0.33430037938426077f, - -0.33442374510680173f, - -0.33454710509908125f, - -0.33467045935898737f, - -0.3347938078844056f, - -0.3349171506732224f, - -0.33504048772332345f, - -0.33516381903259707f, - -0.3352871445989292f, - -0.3354104644202067f, - -0.33553377849431654f, - -0.33565708681914486f, - -0.33578038939258054f, - -0.33590368621250993f, - -0.33602697727682046f, - -0.33615026258339864f, - -0.3362735421301337f, - -0.3363968159149125f, - -0.3365200839356227f, - -0.3366433461901514f, - -0.33676660267638814f, - -0.3368898533922201f, - -0.33701309833553544f, - -0.33713633750422195f, - -0.3372595708961684f, - -0.33738279850926367f, - -0.3375060203413954f, - -0.33762923639045306f, - -0.3377524466543246f, - -0.33787565113089957f, - -0.33799884981806616f, - -0.33812204271371415f, - -0.3382452298157319f, - -0.338368411122009f, - -0.3384915866304352f, - -0.33861475633889954f, - -0.3387379202452915f, - -0.3388610783474999f, - -0.33898423064341604f, - -0.33910737713092903f, - -0.3392305178079287f, - -0.3393536526723043f, - -0.3394767817219475f, - -0.3395999049547478f, - -0.3397230223685955f, - -0.3398461339613801f, - -0.33996923973099386f, - -0.3400923396753266f, - -0.34021543379226893f, - -0.3403385220797117f, - -0.340461604535545f, - -0.3405846811576616f, - -0.34070775194395164f, - -0.3408308168923064f, - -0.3409538760006164f, - -0.34107692926677463f, - -0.3411999766886718f, - -0.3413230182641996f, - -0.34144605399124967f, - -0.34156908386771306f, - -0.34169210789148324f, - -0.3418151260604515f, - -0.34193813837250997f, - -0.3420611448255499f, - -0.3421841454174654f, - -0.342307140146148f, - -0.3424301290094898f, - -0.3425531120053839f, - -0.34267608913172337f, - -0.3427990603864006f, - -0.3429220257673082f, - -0.34304498527233984f, - -0.343167938899388f, - -0.3432908866463462f, - -0.34341382851110824f, - -0.3435367644915671f, - -0.3436596945856159f, - -0.34378261879114863f, - -0.34390553710605953f, - -0.34402844952824196f, - -0.344151356055589f, - -0.34427425668599637f, - -0.3443971514173574f, - -0.3445200402475662f, - -0.3446429231745172f, - -0.34476580019610403f, - -0.3448886713102228f, - -0.34501153651476746f, - -0.3451343958076326f, - -0.34525724918671225f, - -0.34538009664990305f, - -0.34550293819509925f, - -0.3456257738201959f, - -0.34574860352308745f, - -0.3458714273016709f, - -0.345994245153841f, - -0.3461170570774931f, - -0.3462398630705229f, - -0.34636266313082537f, - -0.34648545725629804f, - -0.34660824544483604f, - -0.34673102769433534f, - -0.34685380400269133f, - -0.34697657436780194f, - -0.34709933878756266f, - -0.34722209725987f, - -0.34734484978262015f, - -0.34746759635371005f, - -0.34759033697103703f, - -0.3477130716324975f, - -0.34783580033598793f, - -0.34795852307940595f, - -0.3480812398606491f, - -0.34820395067761384f, - -0.34832665552819836f, - -0.34844935441029934f, - -0.3485720473218151f, - -0.3486947342606427f, - -0.34881741522468057f, - -0.3489400902118263f, - -0.34906275921997704f, - -0.34918542224703253f, - -0.34930807929089014f, - -0.34943073034944816f, - -0.34955337542060416f, - -0.3496760145022584f, - -0.3497986475923086f, - -0.3499212746886534f, - -0.35004389578919093f, - -0.3501665108918217f, - -0.3502891199944439f, - -0.35041172309495666f, - -0.35053432019125924f, - -0.3506569112812501f, - -0.35077949636283035f, - -0.3509020754338987f, - -0.3510246484923547f, - -0.35114721553609746f, - -0.3512697765630283f, - -0.3513923315710465f, - -0.35151488055805197f, - -0.35163742352194416f, - -0.35175996046062485f, - -0.3518824913719937f, - -0.3520050162539511f, - -0.35212753510439765f, - -0.3522500479212332f, - -0.3523725547023602f, - -0.3524950554456786f, - -0.3526175501490895f, - -0.3527400388104931f, - -0.3528625214277923f, - -0.3529849979988875f, - -0.3531074685216797f, - -0.3532299329940708f, - -0.35335239141396285f, - -0.35347484377925714f, - -0.3535972900878551f, - -0.3537197303376594f, - -0.3538421645265713f, - -0.35396459265249325f, - -0.354087014713328f, - -0.3542094307069774f, - -0.3543318406313435f, - -0.35445424448432916f, - -0.3545766422638376f, - -0.354699033967771f, - -0.35482141959403235f, - -0.35494379914052365f, - -0.3550661726051497f, - -0.35518853998581285f, - -0.35531090128041626f, - -0.3554332564868625f, - -0.3555556056030569f, - -0.3556779486269019f, - -0.3558002855563014f, - -0.3559226163891583f, - -0.35604494112337814f, - -0.35616725975686414f, - -0.35628957228752034f, - -0.356411878713251f, - -0.35653417903195955f, - -0.3566564732415521f, - -0.3567787613399323f, - -0.3569010433250049f, - -0.3570233191946736f, - -0.3571455889468451f, - -0.3572678525794234f, - -0.3573901100903135f, - -0.3575123614774199f, - -0.35763460673864933f, - -0.3577568458719064f, - -0.35787907887509657f, - -0.358001305746125f, - -0.3581235264828978f, - -0.3582457410833211f, - -0.35836794954530043f, - -0.3584901518667413f, - -0.35861234804555037f, - -0.35873453807963407f, - -0.358856721966898f, - -0.3589788997052493f, - -0.3591010712925938f, - -0.35922323672683887f, - -0.3593453960058904f, - -0.359467549127656f, - -0.3595896960900423f, - -0.3597118368909555f, - -0.3598339715283044f, - -0.35995609999999534f, - -0.3600782223039358f, - -0.3602003384380324f, - -0.3603224484001943f, - -0.3604445521883284f, - -0.3605666498003425f, - -0.3606887412341444f, - -0.3608108264876414f, - -0.36093290555874313f, - -0.3610549784453571f, - -0.3611770451453915f, - -0.36129910565675405f, - -0.3614211599773548f, - -0.36154320810510165f, - -0.3616652500379033f, - -0.36178728577366775f, - -0.3619093153103056f, - -0.3620313386457252f, - -0.36215335577783553f, - -0.362275366704546f, - -0.3623973714237651f, - -0.36251936993340395f, - -0.3626413622313714f, - -0.362763348315577f, - -0.3628853281839298f, - -0.36300730183434143f, - -0.363129269264721f, - -0.36325123047297864f, - -0.36337318545702374f, - -0.3634951342147683f, - -0.3636170767441219f, - -0.3637390130429948f, - -0.36386094310929834f, - -0.3639828669409425f, - -0.364104784535839f, - -0.364226695891898f, - -0.3643486010070313f, - -0.3644704998791494f, - -0.3645923925061644f, - -0.3647142788859868f, - -0.36483615901652894f, - -0.36495803289570167f, - -0.36507990052141714f, - -0.36520176189158754f, - -0.3653236170041244f, - -0.36544546585693977f, - -0.365567308447945f, - -0.365689144775054f, - -0.36581097483617825f, - -0.36593279862923034f, - -0.3660546161521219f, - -0.3661764274027674f, - -0.3662982323790787f, - -0.36642003107896876f, - -0.3665418235003506f, - -0.3666636096411364f, - -0.3667853894992412f, - -0.3669071630725775f, - -0.3670289303590586f, - -0.36715069135659734f, - -0.367272446063109f, - -0.3673941944765065f, - -0.3675159365947038f, - -0.3676376724156139f, - -0.3677594019371527f, - -0.3678811251572334f, - -0.36800284207377054f, - -0.3681245526846783f, - -0.36824625698787056f, - -0.36836795498126346f, - -0.368489646662771f, - -0.36861133203030755f, - -0.3687330110817885f, - -0.3688546838151294f, - -0.36897635022824493f, - -0.36909801031904993f, - -0.36921966408546025f, - -0.3693413115253918f, - -0.36946295263675977f, - -0.3695845874174794f, - -0.3697062158654674f, - -0.3698278379786389f, - -0.3699494537549103f, - -0.3700710631921981f, - -0.3701926662884183f, - -0.37031426304148674f, - -0.37043585344932034f, - -0.37055743750983605f, - -0.37067901522095015f, - -0.3708005865805787f, - -0.37092215158664016f, - -0.3710437102370508f, - -0.37116526252972765f, - -0.37128680846258805f, - -0.37140834803354844f, - -0.371529881240528f, - -0.37165140808144337f, - -0.3717729285542123f, - -0.3718944426567517f, - -0.3720159503869811f, - -0.3721374517428177f, - -0.37225894672217963f, - -0.37238043532298426f, - -0.37250191754315154f, - -0.3726233933805991f, - -0.3727448628332454f, - -0.3728663258990093f, - -0.37298778257580856f, - -0.3731092328615638f, - -0.3732306767541931f, - -0.3733521142516156f, - -0.3734735453517496f, - -0.3735949700525162f, - -0.3737163883518339f, - -0.3738378002476222f, - -0.37395920573780045f, - -0.3740806048202887f, - -0.37420199749300725f, - -0.3743233837538757f, - -0.3744447636008137f, - -0.3745661370317418f, - -0.37468750404458073f, - -0.3748088646372501f, - -0.3749302188076713f, - -0.37505156655376404f, - -0.3751729078734499f, - -0.37529424276464896f, - -0.37541557122528296f, - -0.3755368932532726f, - -0.37565820884653817f, - -0.3757795180030027f, - -0.3759008207205866f, - -0.3760221169972116f, - -0.37614340683079833f, - -0.3762646902192703f, - -0.37638596716054834f, - -0.3765072376525546f, - -0.3766285016932102f, - -0.376749759280439f, - -0.3768710104121625f, - -0.376992255086303f, - -0.3771134933007831f, - -0.3772347250535245f, - -0.3773559503424517f, - -0.37747716916548657f, - -0.37759838152055214f, - -0.37771958740557066f, - -0.3778407868184669f, - -0.37796197975716334f, - -0.3780831662195833f, - -0.3782043462036496f, - -0.37832551970728745f, - -0.3784466867284197f, - -0.37856784726497017f, - -0.37868900131486294f, - -0.3788101488760211f, - -0.37893128994637054f, - -0.37905242452383464f, - -0.37917355260633795f, - -0.37929467419180396f, - -0.37941578927815905f, - -0.3795368978633271f, - -0.3796579999452326f, - -0.37977909552180117f, - -0.37990018459095715f, - -0.3800212671506265f, - -0.3801423431987337f, - -0.38026341273320496f, - -0.380384475751965f, - -0.38050553225293976f, - -0.38062658223405543f, - -0.3807476256932375f, - -0.3808686626284114f, - -0.3809896930375037f, - -0.38111071691844095f, - -0.38123173426914897f, - -0.3813527450875543f, - -0.3814737493715825f, - -0.38159474711916186f, - -0.38171573832821837f, - -0.3818367229966788f, - -0.38195770112246935f, - -0.3820786727035187f, - -0.3821996377377532f, - -0.38232059622310016f, - -0.38244154815748616f, - -0.38256249353884036f, - -0.38268343236508967f, - -0.3828043646341617f, - -0.3829252903439843f, - -0.38304620949248475f, - -0.38316712207759274f, - -0.38328802809723556f, - -0.3834089275493415f, - -0.38352982043183836f, - -0.3836507067426561f, - -0.38377158647972265f, - -0.38389245964096674f, - -0.38401332622431644f, - -0.3841341862277024f, - -0.3842550396490528f, - -0.3843758864862969f, - -0.3844967267373636f, - -0.38461756040018286f, - -0.38473838747268446f, - -0.38485920795279777f, - -0.3849800218384521f, - -0.38510082912757776f, - -0.38522162981810515f, - -0.3853424239079636f, - -0.3854632113950841f, - -0.38558399227739626f, - -0.38570476655283126f, - -0.38582553421931887f, - -0.3859462952747906f, - -0.3860670497171768f, - -0.38618779754440763f, - -0.3863085387544157f, - -0.3864292733451313f, - -0.3865500013144857f, - -0.3866707226604094f, - -0.3867914373808356f, - -0.386912145473695f, - -0.38703284693691936f, - -0.3871535417684404f, - -0.38727422996618927f, - -0.3873949115280997f, - -0.38751558645210293f, - -0.38763625473613134f, - -0.3877569163781164f, - -0.38787757137599227f, - -0.3879982197276907f, - -0.38811886143114455f, - -0.3882394964842857f, - -0.3883601248850488f, - -0.388480746631366f, - -0.38860136172117066f, - -0.3887219701523959f, - -0.38884257192297444f, - -0.38896316703084133f, - -0.3890837554739295f, - -0.38920433725017256f, - -0.38932491235750366f, - -0.3894454807938584f, - -0.38956604255717003f, - -0.3896865976453727f, - -0.3898071460564001f, - -0.3899276877881881f, - -0.3900482228386706f, - -0.39016875120578165f, - -0.390289272887457f, - -0.3904097878816307f, - -0.39053029618623863f, - -0.39065079779921497f, - -0.39077129271849587f, - -0.3908917809420158f, - -0.3910122624677107f, - -0.3911327372935165f, - -0.3912532054173685f, - -0.39137366683720215f, - -0.39149412155095376f, - -0.39161456955655977f, - -0.3917350108519559f, - -0.39185544543507844f, - -0.391975873303863f, - -0.3920962944562477f, - -0.3922167088901683f, - -0.3923371166035616f, - -0.39245751759436354f, - -0.3925779118605127f, - -0.3926982993999455f, - -0.392818680210599f, - -0.39293905429041054f, - -0.3930594216373167f, - -0.3931797822492567f, - -0.39330013612416737f, - -0.39342048325998646f, - -0.393540823654651f, - -0.3936611573061007f, - -0.39378148421227277f, - -0.39390180437110556f, - -0.3940221177805365f, - -0.3941424244385057f, - -0.39426272434295095f, - -0.394383017491811f, - -0.3945033038830245f, - -0.3946235835145297f, - -0.3947438563842672f, - -0.3948641224901754f, - -0.3949843818301931f, - -0.3951046344022601f, - -0.3952248802043164f, - -0.3953451192343011f, - -0.3954653514901536f, - -0.39558557696981417f, - -0.3957057956712231f, - -0.3958260075923198f, - -0.39594621273104513f, - -0.39606641108533913f, - -0.3961866026531417f, - -0.39630678743239395f, - -0.39642696542103684f, - -0.39654713661701074f, - -0.3966673010182562f, - -0.39678745862271464f, - -0.3969076094283276f, - -0.3970277534330358f, - -0.39714789063478f, - -0.39726802103150316f, - -0.39738814462114613f, - -0.3975082614016506f, - -0.39762837137095836f, - -0.3977484745270106f, - -0.397868570867751f, - -0.39798866039112096f, - -0.3981087430950627f, - -0.3982288189775179f, - -0.3983488880364307f, - -0.3984689502697429f, - -0.3985890056753973f, - -0.3987090542513359f, - -0.3988290959955034f, - -0.39894913090584216f, - -0.39906915898029527f, - -0.3991891802168062f, - -0.39930919461331754f, - -0.39942920216777456f, - -0.39954920287812007f, - -0.3996691967422979f, - -0.39978918375825123f, - -0.3999091639239258f, - -0.4000291372372648f, - -0.4001491036962126f, - -0.4002690632987132f, - -0.4003890160427116f, - -0.40050896192615276f, - -0.4006289009469806f, - -0.4007488331031409f, - -0.40086875839257785f, - -0.4009886768132373f, - -0.4011085883630637f, - -0.4012284930400032f, - -0.40134839084200047f, - -0.4014682817670019f, - -0.40158816581295237f, - -0.4017080429777985f, - -0.40182791325948586f, - -0.40194777665595965f, - -0.4020676331651677f, - -0.4021874827850555f, - -0.4023073255135694f, - -0.4024271613486552f, - -0.40254699028826113f, - -0.4026668123303331f, - -0.402786627472818f, - -0.4029064357136621f, - -0.40302623705081403f, - -0.40314603148222034f, - -0.40326581900582825f, - -0.4033855996195853f, - -0.4035053733214383f, - -0.4036251401093366f, - -0.4037448999812271f, - -0.4038646529350578f, - -0.403984398968776f, - -0.40410413808033147f, - -0.4042238702676717f, - -0.40434359552874516f, - -0.4044633138614995f, - -0.40458302526388507f, - -0.40470272973384974f, - -0.40482242726934253f, - -0.40494211786831236f, - -0.40506180152870763f, - -0.40518147824847917f, - -0.4053011480255755f, - -0.4054208108579462f, - -0.40554046674354f, - -0.40566011568030824f, - -0.40577975766620006f, - -0.4058993926991649f, - -0.40601902077715374f, - -0.40613864189811594f, - -0.40625825606000265f, - -0.40637786326076347f, - -0.4064974634983498f, - -0.4066170567707115f, - -0.4067366430757998f, - -0.406856222411566f, - -0.4069757947759608f, - -0.4070953601669348f, - -0.40721491858243986f, - -0.4073344700204277f, - -0.40745401447884944f, - -0.4075735519556567f, - -0.4076930824488005f, - -0.4078126059562342f, - -0.4079321224759091f, - -0.4080516320057773f, - -0.4081711345437902f, - -0.40829063008790184f, - -0.4084101186360638f, - -0.40852960018622875f, - -0.40864907473634854f, - -0.40876854228437765f, - -0.4088880028282682f, - -0.4090074563659733f, - -0.4091269028954461f, - -0.4092463424146392f, - -0.40936577492150755f, - -0.409485200414004f, - -0.4096046188900821f, - -0.40972403034769495f, - -0.409843434784798f, - -0.40996283219934454f, - -0.4100822225892887f, - -0.410201605952584f, - -0.41032098228718633f, - -0.4104403515910495f, - -0.4105597138621282f, - -0.41067906909837665f, - -0.41079841729775024f, - -0.41091775845820433f, - -0.4110370925776936f, - -0.411156419654173f, - -0.41127573968559816f, - -0.41139505266992504f, - -0.4115143586051085f, - -0.41163365748910496f, - -0.4117529493198699f, - -0.4118722340953589f, - -0.41199151181352844f, - -0.4121107824723351f, - -0.4122300460697349f, - -0.4123493026036834f, - -0.4124685520721388f, - -0.412587794473057f, - -0.4127070298043948f, - -0.41282625806410833f, - -0.41294547925015623f, - -0.41306469336049495f, - -0.4131839003930818f, - -0.41330310034587403f, - -0.41342229321682855f, - -0.41354147900390453f, - -0.41366065770505905f, - -0.4137798293182499f, - -0.4138989938414344f, - -0.41401815127257224f, - -0.4141373016096209f, - -0.41425644485053886f, - -0.41437558099328364f, - -0.41449471003581567f, - -0.4146138319760928f, - -0.41473294681207395f, - -0.41485205454171803f, - -0.4149711551629835f, - -0.4150902486738311f, - -0.41520933507221947f, - -0.415328414356108f, - -0.4154474865234556f, - -0.41556655157222355f, - -0.4156856095003709f, - -0.41580466030585767f, - -0.4159237039866431f, - -0.41604274054068896f, - -0.41616176996595494f, - -0.416280792260401f, - -0.41639980742198857f, - -0.41651881544867747f, - -0.41663781633842945f, - -0.4167568100892046f, - -0.4168757966989648f, - -0.41699477616567043f, - -0.4171137484872832f, - -0.41723271366176506f, - -0.41735167168707704f, - -0.41747062256118045f, - -0.4175895662820376f, - -0.4177085028476107f, - -0.41782743225586144f, - -0.41794635450475204f, - -0.41806526959224394f, - -0.4181841775163012f, - -0.4183030782748856f, - -0.41842197186595975f, - -0.4185408582874856f, - -0.41865973753742775f, - -0.4187786096137484f, - -0.41889747451441073f, - -0.419016332237378f, - -0.4191351827806128f, - -0.4192540261420803f, - -0.4193728623197433f, - -0.4194916913115656f, - -0.41961051311551034f, - -0.4197293277295431f, - -0.41984813515162717f, - -0.4199669353797269f, - -0.42008572841180586f, - -0.4202045142458301f, - -0.42032329287976355f, - -0.420442064311571f, - -0.42056082853921717f, - -0.4206795855606664f, - -0.4207983353738854f, - -0.4209170779768386f, - -0.42103581336749096f, - -0.4211545415438084f, - -0.42127326250375696f, - -0.421391976245302f, - -0.42151068276640896f, - -0.42162938206504424f, - -0.42174807413917437f, - -0.4218667589867648f, - -0.42198543660578264f, - -0.4221041069941941f, - -0.4222227701499653f, - -0.42234142607106334f, - -0.4224600747554556f, - -0.4225787162011086f, - -0.42269735040598866f, - -0.42281597736806464f, - -0.42293459708530307f, - -0.42305320955567144f, - -0.42317181477713656f, - -0.4232904127476677f, - -0.423409003465232f, - -0.42352758692779746f, - -0.42364616313333214f, - -0.4237647320798034f, - -0.42388329376518136f, - -0.4240018481874335f, - -0.4241203953445286f, - -0.42423893523443446f, - -0.4243574678551216f, - -0.42447599320455814f, - -0.42459451128071324f, - -0.4247130220815561f, - -0.4248315256050552f, - -0.4249500218491818f, - -0.4250685108119045f, - -0.4251869924911931f, - -0.4253054668850167f, - -0.4254239339913468f, - -0.42554239380815273f, - -0.42566084633340473f, - -0.42577929156507227f, - -0.42589772950112753f, - -0.42601616013954025f, - -0.42613458347828115f, - -0.42625299951532064f, - -0.4263714082486302f, - -0.4264898096761812f, - -0.4266082037959442f, - -0.4267265906058913f, - -0.42684497010399314f, - -0.4269633422882221f, - -0.42708170715654914f, - -0.42720006470694694f, - -0.4273184149373866f, - -0.4274367578458407f, - -0.4275550934302818f, - -0.42767342168868194f, - -0.4277917426190135f, - -0.4279100562192483f, - -0.42802836248736076f, - -0.4281466614213228f, - -0.4282649530191075f, - -0.4283832372786871f, - -0.4285015141980365f, - -0.4286197837751282f, - -0.4287380460079357f, - -0.42885630089443183f, - -0.42897454843259186f, - -0.4290927886203889f, - -0.429211021455797f, - -0.42932924693679014f, - -0.42944746506134185f, - -0.42956567582742805f, - -0.4296838792330225f, - -0.4298020752760997f, - -0.4299202639546337f, - -0.43003844526660084f, - -0.43015661920997544f, - -0.43027478578273265f, - -0.43039294498284675f, - -0.43051109680829486f, - -0.43062924125705165f, - -0.43074737832709276f, - -0.43086550801639384f, - -0.4309836303229301f, - -0.43110174524467904f, - -0.43121985277961605f, - -0.431337952925717f, - -0.43145604568095863f, - -0.43157413104331793f, - -0.43169220901077104f, - -0.4318102795812944f, - -0.4319283427528657f, - -0.4320463985234611f, - -0.4321644468910586f, - -0.43228248785363466f, - -0.43240052140916746f, - -0.4325185475556338f, - -0.4326365662910116f, - -0.4327545776132792f, - -0.4328725815204139f, - -0.4329905780103936f, - -0.43310856708119666f, - -0.4332265487308018f, - -0.4333445229571871f, - -0.43346248975833107f, - -0.4335804491322116f, - -0.43369840107680907f, - -0.43381634559010157f, - -0.4339342826700682f, - -0.4340522123146874f, - -0.4341701345219399f, - -0.4342880492898045f, - -0.4344059566162607f, - -0.4345238564992874f, - -0.43464174893686597f, - -0.43475963392697564f, - -0.4348775114675964f, - -0.4349953815567085f, - -0.43511324419229147f, - -0.43523109937232735f, - -0.43534894709479593f, - -0.4354667873576779f, - -0.43558462015895333f, - -0.43570244549660475f, - -0.4358202633686125f, - -0.43593807377295773f, - -0.4360558767076211f, - -0.4361736721705856f, - -0.43629146015983206f, - -0.43640924067334225f, - -0.4365270137090976f, - -0.43664477926508044f, - -0.4367625373392734f, - -0.4368802879296583f, - -0.4369980310342171f, - -0.43711576665093266f, - -0.43723349477778806f, - -0.4373512154127652f, - -0.4374689285538479f, - -0.43758663419901866f, - -0.43770433234626027f, - -0.4378220229935564f, - -0.4379397061388908f, - -0.4380573817802467f, - -0.4381750499156069f, - -0.4382927105429568f, - -0.4384103636602795f, - -0.4385280092655591f, - -0.4386456473567789f, - -0.4387632779319249f, - -0.4388809009889806f, - -0.43899851652593064f, - -0.43911612454075966f, - -0.4392337250314518f, - -0.4393513179959935f, - -0.43946890343236905f, - -0.43958648133856365f, - -0.4397040517125619f, - -0.43982161455235075f, - -0.4399391698559151f, - -0.4400567176212406f, - -0.44017425784631237f, - -0.44029179052911793f, - -0.44040931566764263f, - -0.44052683325987263f, - -0.44064434330379443f, - -0.4407618457973936f, - -0.4408793407386584f, - -0.4409968281255749f, - -0.4411143079561298f, - -0.44123178022830944f, - -0.4413492449401025f, - -0.4414667020894955f, - -0.44158415167447584f, - -0.44170159369303025f, - -0.441819028143148f, - -0.44193645502281603f, - -0.4420538743300219f, - -0.44217128606275447f, - -0.4422886902190011f, - -0.4424060867967509f, - -0.44252347579399154f, - -0.4426408572087124f, - -0.44275823103890133f, - -0.44287559728254755f, - -0.4429929559376405f, - -0.44311030700216886f, - -0.4432276504741214f, - -0.44334498635148784f, - -0.44346231463225816f, - -0.4435796353144215f, - -0.4436969483959676f, - -0.44381425387488566f, - -0.4439315517491671f, - -0.4440488420168014f, - -0.4441661246757787f, - -0.44428339972408865f, - -0.4444006671597234f, - -0.4445179269806728f, - -0.44463517918492756f, - -0.44475242377047863f, - -0.4448696607353163f, - -0.44498689007743336f, - -0.44510411179482023f, - -0.4452213258854684f, - -0.4453385323473687f, - -0.4454557311785143f, - -0.4455729223768963f, - -0.4456901059405066f, - -0.44580728186733665f, - -0.44592445015538007f, - -0.44604161080262855f, - -0.44615876380707453f, - -0.4462759091667106f, - -0.4463930468795288f, - -0.4465101769435235f, - -0.44662729935668694f, - -0.4467444141170119f, - -0.44686152122249195f, - -0.44697862067112104f, - -0.44709571246089214f, - -0.4472127965897987f, - -0.4473298730558347f, - -0.44744694185699463f, - -0.4475640029912717f, - -0.44768105645666084f, - -0.44779810225115607f, - -0.44791514037275143f, - -0.4480321708194418f, - -0.4481491935892224f, - -0.44826620868008765f, - -0.4483832160900317f, - -0.44850021581705124f, - -0.44861720785914083f, - -0.4487341922142957f, - -0.44885116888051063f, - -0.4489681378557829f, - -0.44908509913810735f, - -0.44920205272547997f, - -0.44931899861589675f, - -0.4494359368073531f, - -0.44955286729784694f, - -0.4496697900853738f, - -0.4497867051679303f, - -0.4499036125435123f, - -0.4500205122101183f, - -0.4501374041657444f, - -0.4502542884083876f, - -0.4503711649360453f, - -0.4504880337467139f, - -0.4506048948383926f, - -0.4507217482090781f, - -0.4508385938567683f, - -0.4509554317794601f, - -0.45107226197515327f, - -0.4511890844418451f, - -0.45130589917753383f, - -0.4514227061802171f, - -0.45153950544789506f, - -0.45165629697856563f, - -0.4517730807702275f, - -0.45188985682087934f, - -0.4520066251285205f, - -0.45212338569115074f, - -0.4522401385067685f, - -0.452356883573374f, - -0.45247362088896614f, - -0.4525903504515454f, - -0.4527070722591109f, - -0.45282378630966347f, - -0.45294049260120234f, - -0.45305719113172827f, - -0.45317388189924196f, - -0.4532905649017437f, - -0.453407240137234f, - -0.453523907603713f, - -0.4536405672991831f, - -0.4537572192216447f, - -0.4538738633690989f, - -0.45399049973954625f, - -0.4541071283309899f, - -0.45422374914143054f, - -0.45434036216886997f, - -0.45445696741130925f, - -0.45457356486675193f, - -0.4546901545331994f, - -0.45480673640865393f, - -0.4549233104911179f, - -0.45503987677859303f, - -0.4551564352690836f, - -0.4552729859605917f, - -0.45538952885112005f, - -0.45550606393867116f, - -0.45562259122124965f, - -0.4557391106968582f, - -0.45585562236350013f, - -0.4559721262191792f, - -0.4560886222618983f, - -0.4562051104896628f, - -0.45632159090047597f, - -0.456438063492342f, - -0.4565545282632643f, - -0.45667098521124894f, - -0.4567874343342996f, - -0.45690387563042056f, - -0.4570203090976171f, - -0.45713673473389443f, - -0.4572531525372574f, - -0.4573695625057107f, - -0.4574859646372605f, - -0.45760235892991147f, - -0.4577187453816697f, - -0.45783512399054127f, - -0.4579514947545317f, - -0.4580678576716465f, - -0.4581842127398924f, - -0.4583005599572759f, - -0.45841689932180324f, - -0.45853323083148f, - -0.45864955448431455f, - -0.45876587027831284f, - -0.4588821782114819f, - -0.4589984782818288f, - -0.45911477048736005f, - -0.4592310548260845f, - -0.4593473312960089f, - -0.45946359989514085f, - -0.45957986062148737f, - -0.45969611347305794f, - -0.4598123584478598f, - -0.4599285955439011f, - -0.4600448247591894f, - -0.4601610460917347f, - -0.46027725953954474f, - -0.46039346510062834f, - -0.4605096627729943f, - -0.4606258525546508f, - -0.46074203444360856f, - -0.460858208437876f, - -0.4609743745354626f, - -0.461090532734377f, - -0.46120668303263046f, - -0.46132282542823205f, - -0.46143895991919165f, - -0.4615550865035185f, - -0.4616712051792245f, - -0.4617873159443191f, - -0.46190341879681274f, - -0.4620195137347158f, - -0.4621356007560392f, - -0.4622516798587944f, - -0.46236775104099154f, - -0.46248381430064256f, - -0.462599869635758f, - -0.46271591704435f, - -0.4628319565244294f, - -0.46294798807400867f, - -0.46306401169109923f, - -0.4631800273737126f, - -0.4632960351198614f, - -0.4634120349275582f, - -0.463528026794815f, - -0.46364401071964345f, - -0.4637599867000578f, - -0.4638759547340701f, - -0.46399191481969326f, - -0.4641078669549395f, - -0.4642238111378236f, - -0.46433974736635814f, - -0.46445567563855655f, - -0.4645715959524324f, - -0.4646875083059987f, - -0.4648034126972709f, - -0.46491930912426216f, - -0.4650351975849867f, - -0.4651510780774579f, - -0.4652669505996919f, - -0.46538281514970237f, - -0.4654986717255041f, - -0.46561452032511097f, - -0.46573036094653963f, - -0.4658461935878044f, - -0.46596201824692046f, - -0.46607783492190324f, - -0.4661936436107675f, - -0.4663094443115304f, - -0.4664252370222069f, - -0.46654102174081297f, - -0.4666567984653639f, - -0.4667725671938775f, - -0.4668883279243692f, - -0.46700408065485555f, - -0.4671198253833524f, - -0.467235562107878f, - -0.46735129082644844f, - -0.4674670115370804f, - -0.4675827242377918f, - -0.4676984289265992f, - -0.4678141256015207f, - -0.4679298142605732f, - -0.4680454949017751f, - -0.4681611675231435f, - -0.4682768321226968f, - -0.46839248869845346f, - -0.4685081372484314f, - -0.46862377777064895f, - -0.46873941026312393f, - -0.4688550347238765f, - -0.46897065115092473f, - -0.46908625954228755f, - -0.46920185989598323f, - -0.4693174522100326f, - -0.4694330364824542f, - -0.4695486127112676f, - -0.4696641808944916f, - -0.46977974103014747f, - -0.4698952931162544f, - -0.4700108371508324f, - -0.47012637313190175f, - -0.4702419010574819f, - -0.4703574209255949f, - -0.47047293273426055f, - -0.4705884364814996f, - -0.4707039321653322f, - -0.47081941978378083f, - -0.4709348993348659f, - -0.47105037081660867f, - -0.47116583422702984f, - -0.4712812895641525f, - -0.47139673682599764f, - -0.471512176010587f, - -0.4716276071159426f, - -0.4717430301400858f, - -0.4718584450810404f, - -0.47197385193682806f, - -0.4720892507054708f, - -0.47220464138499185f, - -0.4723200239734143f, - -0.47243539846876076f, - -0.4725507648690539f, - -0.4726661231723174f, - -0.47278147337657483f, - -0.4728968154798492f, - -0.4730121494801647f, - -0.47312747537554484f, - -0.4732427931640131f, - -0.4733581028435939f, - -0.473473404412312f, - -0.47358869786819113f, - -0.47370398320925516f, - -0.4738192604335302f, - -0.47393452953904014f, - -0.47404979052380997f, - -0.47416504338586396f, - -0.4742802881232288f, - -0.4743955247339291f, - -0.4745107532159902f, - -0.4746259735674377f, - -0.4747411857862966f, - -0.47485638987059436f, - -0.47497158581835613f, - -0.4750867736276081f, - -0.47520195329637577f, - -0.4753171248226872f, - -0.475432288204568f, - -0.47554744344004507f, - -0.47566259052714516f, - -0.47577772946389446f, - -0.47589286024832167f, - -0.4760079828784533f, - -0.4761230973523168f, - -0.4762382036679388f, - -0.4763533018233486f, - -0.47646839181657336f, - -0.4765834736456409f, - -0.4766985473085786f, - -0.4768136128034162f, - -0.47692867012818146f, - -0.4770437192809028f, - -0.4771587602596084f, - -0.47727379306232764f, - -0.47738881768708974f, - -0.47750383413192304f, - -0.4776188423948575f, - -0.47773384247392175f, - -0.4778488343671461f, - -0.4779638180725594f, - -0.4780787935881921f, - -0.4781937609120735f, - -0.478308720042234f, - -0.4784236709767042f, - -0.478538613713514f, - -0.478653548250694f, - -0.4787684745862739f, - -0.4788833927182862f, - -0.4789983026447609f, - -0.4791132043637291f, - -0.47922809787322124f, - -0.4793429831712701f, - -0.4794578602559065f, - -0.47957272912516197f, - -0.4796875897770675f, - -0.47980244220965657f, - -0.4799172864209604f, - -0.48003212240901116f, - -0.4801469501718412f, - -0.48026176970748224f, - -0.48037658101396835f, - -0.48049138408933156f, - -0.4806061789316047f, - -0.48072096553881993f, - -0.4808357439090122f, - -0.48095051404021383f, - -0.48106527593045834f, - -0.48118002957777933f, - -0.4812947749802097f, - -0.4814095121357849f, - -0.4815242410425382f, - -0.48163896169850373f, - -0.481753674101715f, - -0.48186837825020795f, - -0.48198307414201647f, - -0.4820977617751748f, - -0.4822124411477182f, - -0.48232711225768216f, - -0.4824417751031013f, - -0.4825564296820106f, - -0.48267107599244624f, - -0.48278571403244297f, - -0.48290034380003694f, - -0.4830149652932644f, - -0.48312957851016086f, - -0.4832441834487622f, - -0.4833587801071049f, - -0.483473368483226f, - -0.48358794857516146f, - -0.48370252038094735f, - -0.483817083898622f, - -0.48393163912622156f, - -0.4840461860617833f, - -0.48416072470334437f, - -0.4842752550489415f, - -0.4843897770966137f, - -0.4845042908443979f, - -0.484618796290332f, - -0.4847332934324532f, - -0.4848477822688011f, - -0.4849622627974133f, - -0.4850767350163281f, - -0.4851911989235833f, - -0.48530565451721924f, - -0.48542010179527384f, - -0.48553454075578617f, - -0.4856489713967953f, - -0.4857633937163397f, - -0.4858778077124604f, - -0.48599221338319615f, - -0.48610661072658656f, - -0.4862209997406708f, - -0.48633538042349034f, - -0.4864497527730845f, - -0.48656411678749356f, - -0.48667847246475715f, - -0.4867928198029174f, - -0.4869071588000142f, - -0.48702148945408835f, - -0.4871358117631805f, - -0.4872501257253321f, - -0.4873644313385848f, - -0.4874787286009793f, - -0.4875930175105578f, - -0.48770729806536134f, - -0.4878215702634324f, - -0.4879358341028124f, - -0.48805008958154394f, - -0.4881643366976691f, - -0.48827857544922953f, - -0.4883928058342692f, - -0.48850702785083006f, - -0.488621241496955f, - -0.4887354467706862f, - -0.48884964367006833f, - -0.4889638321931439f, - -0.4890780123379563f, - -0.4891921841025483f, - -0.48930634748496515f, - -0.48942050248325f, - -0.48953464909544664f, - -0.48964878731959943f, - -0.4897629171537517f, - -0.4898770385959495f, - -0.48999115164423657f, - -0.49010525629665763f, - -0.4902193525512568f, - -0.4903334404060805f, - -0.49044751985917323f, - -0.4905615909085802f, - -0.49067565355234605f, - -0.49078970778851794f, - -0.49090375361514077f, - -0.4910177910302604f, - -0.4911318200319228f, - -0.4912458406181734f, - -0.49135985278706f, - -0.49147385653662834f, - -0.4915878518649248f, - -0.49170183876999557f, - -0.4918158172498889f, - -0.4919297873026511f, - -0.49204374892632885f, - -0.4921577021189699f, - -0.4922716468786221f, - -0.4923855832033326f, - -0.4924995110911488f, - -0.4926134305401193f, - -0.4927273415482914f, - -0.49284124411371355f, - -0.4929551382344346f, - -0.49306902390850244f, - -0.49318290113396546f, - -0.49329676990887267f, - -0.49341063023127335f, - -0.49352448209921623f, - -0.49363832551075043f, - -0.4937521604639245f, - -0.4938659869567895f, - -0.4939798049873942f, - -0.4940936145537884f, - -0.49420741565402126f, - -0.49432120828614434f, - -0.494434992448207f, - -0.4945487681382597f, - -0.49466253535435206f, - -0.49477629409453633f, - -0.49489004435686246f, - -0.49500378613938134f, - -0.4951175194401441f, - -0.49523124425720116f, - -0.4953449605886054f, - -0.49545866843240755f, - -0.4955723677866593f, - -0.4956860586494116f, - -0.49579974101871804f, - -0.49591341489262986f, - -0.4960270802691992f, - -0.49614073714647783f, - -0.4962543855225197f, - -0.49636802539537683f, - -0.49648165676310185f, - -0.49659527962374744f, - -0.4967088939753671f, - -0.49682249981601445f, - -0.4969360971437425f, - -0.4970496859566043f, - -0.4971632662526541f, - -0.497276838029946f, - -0.49739040128653367f, - -0.49750395602047076f, - -0.49761750222981194f, - -0.4977310399126121f, - -0.497844569066925f, - -0.497958089690806f, - -0.4980716017823097f, - -0.4981851053394907f, - -0.49829860036040446f, - -0.4984120868431068f, - -0.49852556478565263f, - -0.4986390341860968f, - -0.49875249504249664f, - -0.4988659473529072f, - -0.49897939111538453f, - -0.4990928263279848f, - -0.49920625298876353f, - -0.4993196710957788f, - -0.49943308064708636f, - -0.499546481640743f, - -0.49965987407480494f, - -0.49977325794733063f, - -0.49988663325637656f, - -0.5000000000000001f, - -0.500113358176258f, - -0.5002267077832093f, - -0.5003400488189111f, - -0.5004533812814215f, - -0.5005667051687983f, - -0.500680020479099f, - -0.5007933272103837f, - -0.50090662536071f, - -0.5010199149281366f, - -0.5011331959107215f, - -0.5012464683065253f, - -0.5013597321136062f, - -0.5014729873300237f, - -0.5015862339538361f, - -0.5016994719831047f, - -0.5018127014158884f, - -0.5019259222502471f, - -0.5020391344842403f, - -0.5021523381159285f, - -0.5022655331433725f, - -0.5023787195646319f, - -0.502491897377768f, - -0.5026050665808408f, - -0.5027182271719121f, - -0.5028313791490419f, - -0.5029445225102922f, - -0.5030576572537236f, - -0.503170783377398f, - -0.5032839008793774f, - -0.5033970097577231f, - -0.503510110010497f, - -0.5036232016357604f, - -0.503736284631577f, - -0.5038493589960086f, - -0.5039624247271175f, - -0.5040754818229657f, - -0.5041885302816174f, - -0.5043015701011349f, - -0.5044146012795812f, - -0.5045276238150187f, - -0.5046406377055126f, - -0.5047536429491254f, - -0.504866639543921f, - -0.504979627487963f, - -0.5050926067793149f, - -0.5052055774160421f, - -0.5053185393962082f, - -0.5054314927178777f, - -0.5055444373791144f, - -0.5056573733779843f, - -0.5057703007125519f, - -0.505883219380882f, - -0.5059961293810399f, - -0.5061090307110899f, - -0.5062219233690992f, - -0.5063348073531326f, - -0.506447682661256f, - -0.5065605492915343f, - -0.5066734072420351f, - -0.5067862565108241f, - -0.5068990970959671f, - -0.507011928995531f, - -0.5071247522075829f, - -0.5072375667301892f, - -0.5073503725614164f, - -0.5074631696993324f, - -0.5075759581420036f, - -0.507688737887498f, - -0.5078015089338834f, - -0.5079142712792272f, - -0.5080270249215967f, - -0.5081397698590604f, - -0.5082525060896869f, - -0.5083652336115438f, - -0.5084779524226992f, - -0.508590662521223f, - -0.5087033639051831f, - -0.5088160565726485f, - -0.5089287405216883f, - -0.5090414157503709f, - -0.5091540822567671f, - -0.5092667400389456f, - -0.509379389094976f, - -0.5094920294229276f, - -0.5096046610208717f, - -0.5097172838868774f, - -0.5098298980190153f, - -0.5099425034153549f, - -0.5100551000739681f, - -0.5101676879929251f, - -0.5102802671702965f, - -0.5103928376041534f, - -0.5105053992925662f, - -0.5106179522336076f, - -0.5107304964253484f, - -0.5108430318658601f, - -0.5109555585532136f, - -0.5110680764854826f, - -0.511180585660738f, - -0.5112930860770523f, - -0.5114055777324973f, - -0.5115180606251458f, - -0.511630534753071f, - -0.5117430001143451f, - -0.5118554567070408f, - -0.5119679045292316f, - -0.512080343578991f, - -0.5121927738543917f, - -0.5123051953535079f, - -0.5124176080744127f, - -0.5125300120151806f, - -0.5126424071738848f, - -0.5127547935486002f, - -0.5128671711374008f, - -0.5129795399383602f, - -0.5130918999495545f, - -0.5132042511690577f, - -0.5133165935949447f, - -0.5134289272252899f, - -0.5135412520581698f, - -0.5136535680916591f, - -0.5137658753238332f, - -0.5138781737527672f, - -0.5139904633765382f, - -0.5141027441932216f, - -0.5142150162008933f, - -0.5143272793976296f, - -0.5144395337815061f, - -0.5145517793506009f, - -0.5146640161029901f, - -0.5147762440367504f, - -0.5148884631499581f, - -0.5150006734406918f, - -0.5151128749070281f, - -0.5152250675470443f, - -0.5153372513588176f, - -0.515449426340427f, - -0.5155615924899498f, - -0.515673749805464f, - -0.5157858982850477f, - -0.5158980379267787f, - -0.516010168728737f, - -0.5161222906890004f, - -0.5162344038056478f, - -0.5163465080767574f, - -0.5164586035004098f, - -0.5165706900746836f, - -0.5166827677976578f, - -0.5167948366674123f, - -0.5169068966820274f, - -0.5170189478395824f, - -0.517130990138157f, - -0.5172430235758322f, - -0.5173550481506876f, - -0.517467063860804f, - -0.5175790707042623f, - -0.5176910686791432f, - -0.5178030577835271f, - -0.5179150380154954f, - -0.51802700937313f, - -0.5181389718545116f, - -0.518250925457722f, - -0.5183628701808419f, - -0.518474806021955f, - -0.5185867329791423f, - -0.518698651050486f, - -0.5188105602340677f, - -0.5189224605279713f, - -0.5190343519302789f, - -0.5191462344390729f, - -0.5192581080524359f, - -0.5193699727684521f, - -0.5194818285852042f, - -0.5195936755007754f, - -0.5197055135132495f, - -0.5198173426207091f, - -0.5199291628212399f, - -0.5200409741129248f, - -0.5201527764938483f, - -0.5202645699620936f, - -0.5203763545157468f, - -0.5204881301528917f, - -0.5205998968716132f, - -0.5207116546699955f, - -0.5208234035461248f, - -0.5209351434980859f, - -0.521046874523964f, - -0.5211585966218443f, - -0.5212703097898128f, - -0.5213820140259559f, - -0.5214937093283589f, - -0.5216053956951078f, - -0.521717073124289f, - -0.5218287416139896f, - -0.5219404011622953f, - -0.5220520517672936f, - -0.5221636934270707f, - -0.5222753261397144f, - -0.522386949903311f, - -0.5224985647159487f, - -0.5226101705757148f, - -0.5227217674806963f, - -0.5228333554289816f, - -0.522944934418659f, - -0.5230565044478162f, - -0.5231680655145406f, - -0.5232796176169225f, - -0.5233911607530495f, - -0.5235026949210102f, - -0.5236142201188938f, - -0.5237257363447885f, - -0.5238372435967849f, - -0.5239487418729715f, - -0.5240602311714381f, - -0.5241717114902734f, - -0.5242831828275688f, - -0.5243946451814135f, - -0.5245060985498977f, - -0.5246175429311108f, - -0.5247289783231448f, - -0.5248404047240895f, - -0.5249518221320357f, - -0.5250632305450742f, - -0.5251746299612954f, - -0.5252860203787919f, - -0.5253974017956544f, - -0.5255087742099743f, - -0.5256201376198426f, - -0.5257314920233526f, - -0.5258428374185955f, - -0.5259541738036635f, - -0.526065501176648f, - -0.5261768195356431f, - -0.5262881288787404f, - -0.5263994292040326f, - -0.526510720509613f, - -0.5266220027935742f, - -0.52673327605401f, - -0.526844540289013f, - -0.5269557954966775f, - -0.5270670416750964f, - -0.5271782788223645f, - -0.5272895069365747f, - -0.527400726015822f, - -0.5275119360582f, - -0.5276231370618035f, - -0.5277343290247275f, - -0.5278455119450663f, - -0.5279566858209149f, - -0.5280678506503675f, - -0.5281790064315209f, - -0.5282901531624699f, - -0.5284012908413096f, - -0.5285124194661353f, - -0.5286235390350442f, - -0.5287346495461316f, - -0.5288457509974935f, - -0.5289568433872258f, - -0.5290679267134261f, - -0.5291790009741905f, - -0.5292900661676155f, - -0.5294011222917984f, - -0.5295121693448352f, - -0.5296232073248249f, - -0.529734236229864f, - -0.5298452560580501f, - -0.5299562668074801f, - -0.5300672684762533f, - -0.5301782610624672f, - -0.5302892445642198f, - -0.5304002189796094f, - -0.5305111843067338f, - -0.5306221405436932f, - -0.5307330876885855f, - -0.5308440257395097f, - -0.5309549546945642f, - -0.5310658745518498f, - -0.5311767853094651f, - -0.5312876869655093f, - -0.5313985795180826f, - -0.5315094629652851f, - -0.5316203373052165f, - -0.5317312025359767f, - -0.5318420586556668f, - -0.5319529056623865f, - -0.5320637435542369f, - -0.5321745723293192f, - -0.532285391985734f, - -0.5323962025215819f, - -0.5325070039349649f, - -0.5326177962239844f, - -0.532728579386742f, - -0.5328393534213385f, - -0.5329501183258775f, - -0.53306087409846f, - -0.5331716207371886f, - -0.5332823582401655f, - -0.5333930866054925f, - -0.5335038058312738f, - -0.5336145159156115f, - -0.5337252168566086f, - -0.5338359086523676f, - -0.5339465913009933f, - -0.5340572648005883f, - -0.5341679291492565f, - -0.5342785843451008f, - -0.5343892303862265f, - -0.5344998672707372f, - -0.5346104949967371f, - -0.5347211135623305f, - -0.5348317229656214f, - -0.534942323204716f, - -0.5350529142777184f, - -0.5351634961827336f, - -0.5352740689178662f, - -0.5353846324812229f, - -0.5354951868709087f, - -0.535605732085029f, - -0.5357162681216895f, - -0.5358267949789964f, - -0.5359373126550564f, - -0.5360478211479752f, - -0.5361583204558591f, - -0.5362688105768151f, - -0.5363792915089503f, - -0.5364897632503707f, - -0.5366002257991844f, - -0.5367106791534979f, - -0.5368211233114192f, - -0.5369315582710552f, - -0.5370419840305144f, - -0.5371524005879044f, - -0.5372628079413322f, - -0.5373732060889078f, - -0.5374835950287387f, - -0.5375939747589333f, - -0.5377043452775998f, - -0.5378147065828482f, - -0.537925058672787f, - -0.5380354015455252f, - -0.5381457351991714f, - -0.5382560596318365f, - -0.5383663748416296f, - -0.5384766808266602f, - -0.5385869775850384f, - -0.5386972651148735f, - -0.5388075434142772f, - -0.5389178124813592f, - -0.5390280723142301f, - -0.5391383229109998f, - -0.5392485642697809f, - -0.5393587963886833f, - -0.5394690192658186f, - -0.5395792328992972f, - -0.5396894372872322f, - -0.5397996324277345f, - -0.5399098183189159f, - -0.5400199949588884f, - -0.5401301623457635f, - -0.5402403204776549f, - -0.5403504693526744f, - -0.5404606089689346f, - -0.5405707393245475f, - -0.5406808604176275f, - -0.540790972246287f, - -0.5409010748086391f, - -0.5410111681027977f, - -0.5411212521268757f, - -0.5412313268789876f, - -0.5413413923572465f, - -0.5414514485597675f, - -0.5415614954846636f, - -0.5416715331300499f, - -0.5417815614940411f, - -0.5418915805747517f, - -0.542001590370296f, - -0.5421115908787896f, - -0.5422215820983478f, - -0.5423315640270858f, - -0.5424415366631189f, - -0.5425515000045621f, - -0.5426614540495326f, - -0.5427713987961458f, - -0.5428813342425176f, - -0.5429912603867637f, - -0.543101177227002f, - -0.5432110847613484f, - -0.5433209829879195f, - -0.5434308719048317f, - -0.5435407515102034f, - -0.5436506218021513f, - -0.5437604827787925f, - -0.5438703344382448f, - -0.5439801767786252f, - -0.5440900097980529f, - -0.5441998334946452f, - -0.5443096478665205f, - -0.5444194529117962f, - -0.5445292486285924f, - -0.5446390350150271f, - -0.544748812069219f, - -0.5448585797892865f, - -0.5449683381733501f, - -0.5450780872195286f, - -0.5451878269259411f, - -0.5452975572907074f, - -0.5454072783119471f, - -0.545516989987781f, - -0.5456266923163285f, - -0.5457363852957098f, - -0.5458460689240455f, - -0.5459557431994567f, - -0.5460654081200633f, - -0.546175063683987f, - -0.5462847098893483f, - -0.546394346734269f, - -0.5465039742168698f, - -0.546613592335273f, - -0.5467232010876f, - -0.5468328004719718f, - -0.5469423904865122f, - -0.5470519711293423f, - -0.5471615423985849f, - -0.5472711042923615f, - -0.5473806568087962f, - -0.5474901999460113f, - -0.5475997337021297f, - -0.5477092580752747f, - -0.5478187730635686f, - -0.5479282786651367f, - -0.5480377748781018f, - -0.5481472617005877f, - -0.5482567391307176f, - -0.5483662071666171f, - -0.5484756658064097f, - -0.54858511504822f, - -0.5486945548901719f, - -0.5488039853303915f, - -0.5489134063670031f, - -0.5490228179981318f, - -0.5491322202219029f, - -0.5492416130364409f, - -0.5493509964398731f, - -0.5494603704303243f, - -0.5495697350059204f, - -0.549679090164787f, - -0.5497884359050516f, - -0.5498977722248398f, - -0.5500070991222783f, - -0.550116416595493f, - -0.5502257246426122f, - -0.5503350232617623f, - -0.5504443124510702f, - -0.5505535922086637f, - -0.5506628625326699f, - -0.5507721234212171f, - -0.5508813748724323f, - -0.5509906168844443f, - -0.5510998494553807f, - -0.5512090725833699f, - -0.5513182862665411f, - -0.5514274905030223f, - -0.5515366852909421f, - -0.5516458706284298f, - -0.551755046513615f, - -0.5518642129446264f, - -0.5519733699195936f, - -0.5520825174366455f, - -0.5521916554939135f, - -0.5523007840895264f, - -0.5524099032216148f, - -0.552519012888308f, - -0.5526281130877378f, - -0.5527372038180343f, - -0.552846285077328f, - -0.5529553568637501f, - -0.5530644191754307f, - -0.5531734720105027f, - -0.5532825153670967f, - -0.5533915492433443f, - -0.5535005736373764f, - -0.5536095885473264f, - -0.5537185939713258f, - -0.5538275899075067f, - -0.5539365763540006f, - -0.5540455533089418f, - -0.554154520770462f, - -0.5542634787366942f, - -0.5543724272057715f, - -0.5544813661758262f, - -0.5545902956449933f, - -0.5546992156114056f, - -0.5548081260731962f, - -0.5549170270284994f, - -0.5550259184754498f, - -0.5551348004121809f, - -0.5552436728368269f, - -0.5553525357475225f, - -0.5554613891424028f, - -0.555570233019602f, - -0.5556790673772556f, - -0.5557878922134984f, - -0.5558967075264657f, - -0.5560055133142929f, - -0.5561143095751163f, - -0.5562230963070713f, - -0.5563318735082934f, - -0.5564406411769192f, - -0.5565493993110852f, - -0.5566581479089276f, - -0.5567668869685823f, - -0.5568756164881876f, - -0.5569843364658796f, - -0.5570930468997956f, - -0.5572017477880726f, - -0.5573104391288475f, - -0.5574191209202594f, - -0.5575277931604451f, - -0.5576364558475428f, - -0.5577451089796897f, - -0.5578537525550256f, - -0.5579623865716882f, - -0.558071011027816f, - -0.558179625921547f, - -0.5582882312510217f, - -0.5583968270143784f, - -0.5585054132097563f, - -0.5586139898352949f, - -0.5587225568891329f, - -0.5588311143694116f, - -0.55893966227427f, - -0.5590482006018485f, - -0.5591567293502862f, - -0.5592652485177252f, - -0.5593737581023053f, - -0.5594822581021671f, - -0.5595907485154513f, - -0.5596992293402991f, - -0.5598077005748523f, - -0.5599161622172517f, - -0.5600246142656385f, - -0.5601330567181549f, - -0.5602414895729432f, - -0.5603499128281444f, - -0.5604583264819016f, - -0.5605667305323565f, - -0.5606751249776523f, - -0.5607835098159308f, - -0.5608918850453358f, - -0.5610002506640099f, - -0.5611086066700955f, - -0.5612169530617376f, - -0.5613252898370786f, - -0.5614336169942625f, - -0.5615419345314324f, - -0.5616502424467336f, - -0.5617585407383097f, - -0.5618668294043049f, - -0.561975108442863f, - -0.5620833778521303f, - -0.5621916376302507f, - -0.5622998877753692f, - -0.5624081282856311f, - -0.562516359159181f, - -0.5626245803941657f, - -0.5627327919887303f, - -0.5628409939410205f, - -0.5629491862491816f, - -0.5630573689113612f, - -0.5631655419257048f, - -0.5632737052903591f, - -0.5633818590034699f, - -0.5634900030631854f, - -0.5635981374676521f, - -0.5637062622150169f, - -0.5638143773034271f, - -0.5639224827310295f, - -0.5640305784959734f, - -0.5641386645964056f, - -0.5642467410304743f, - -0.5643548077963267f, - -0.5644628648921127f, - -0.56457091231598f, - -0.5646789500660769f, - -0.5647869781405529f, - -0.5648949965375563f, - -0.5650030052552368f, - -0.5651110042917432f, - -0.5652189936452255f, - -0.5653269733138326f, - -0.565434943295715f, - -0.5655429035890226f, - -0.5656508541919053f, - -0.5657587951025131f, - -0.5658667263189968f, - -0.5659746478395073f, - -0.5660825596621953f, - -0.5661904617852115f, - -0.5662983542067063f, - -0.5664062369248326f, - -0.566514109937741f, - -0.5666219732435832f, - -0.5667298268405102f, - -0.5668376707266756f, - -0.5669455049002304f, - -0.5670533293593274f, - -0.5671611441021179f, - -0.5672689491267562f, - -0.5673767444313943f, - -0.5674845300141852f, - -0.5675923058732819f, - -0.5677000720068371f, - -0.5678078284130057f, - -0.5679155750899406f, - -0.5680233120357955f, - -0.5681310392487237f, - -0.5682387567268807f, - -0.5683464644684202f, - -0.5684541624714965f, - -0.5685618507342636f, - -0.5686695292548777f, - -0.5687771980314931f, - -0.5688848570622648f, - -0.5689925063453478f, - -0.569100145878898f, - -0.5692077756610713f, - -0.5693153956900231f, - -0.569423005963909f, - -0.5695306064808856f, - -0.5696381972391096f, - -0.5697457782367364f, - -0.5698533494719237f, - -0.5699609109428274f, - -0.5700684626476052f, - -0.5701760045844136f, - -0.5702835367514106f, - -0.5703910591467533f, - -0.5704985717685984f, - -0.5706060746151055f, - -0.5707135676844315f, - -0.5708210509747348f, - -0.5709285244841729f, - -0.5710359882109057f, - -0.5711434421530911f, - -0.5712508863088879f, - -0.5713583206764551f, - -0.5714657452539511f, - -0.5715731600395366f, - -0.5716805650313705f, - -0.5717879602276125f, - -0.5718953456264213f, - -0.5720027212259587f, - -0.572110087024384f, - -0.5722174430198576f, - -0.5723247892105391f, - -0.5724321255945907f, - -0.5725394521701724f, - -0.5726467689354453f, - -0.5727540758885705f, - -0.5728613730277087f, - -0.5729686603510228f, - -0.5730759378566735f, - -0.573183205542823f, - -0.5732904634076323f, - -0.5733977114492653f, - -0.5735049496658833f, - -0.5736121780556489f, - -0.5737193966167241f, - -0.5738266053472731f, - -0.5739338042454584f, - -0.5740409933094425f, - -0.5741481725373897f, - -0.5742553419274626f, - -0.5743625014778259f, - -0.5744696511866425f, - -0.5745767910520772f, - -0.5746839210722933f, - -0.5747910412454558f, - -0.5748981515697293f, - -0.5750052520432785f, - -0.5751123426642676f, - -0.5752194234308621f, - -0.5753264943412275f, - -0.5754335553935289f, - -0.5755406065859318f, - -0.5756476479166012f, - -0.5757546793837043f, - -0.5758617009854066f, - -0.575968712719874f, - -0.5760757145852726f, - -0.5761827065797702f, - -0.5762896887015327f, - -0.5763966609487272f, - -0.5765036233195205f, - -0.5766105758120793f, - -0.5767175184245724f, - -0.5768244511551666f, - -0.5769313740020297f, - -0.5770382869633288f, - -0.5771451900372334f, - -0.5772520832219112f, - -0.5773589665155305f, - -0.5774658399162592f, - -0.5775727034222674f, - -0.5776795570317234f, - -0.5777864007427962f, - -0.5778932345536552f, - -0.5780000584624689f, - -0.5781068724674086f, - -0.5782136765666431f, - -0.5783204707583423f, - -0.5784272550406763f, - -0.578534029411816f, - -0.5786407938699314f, - -0.5787475484131926f, - -0.5788542930397711f, - -0.578961027747838f, - -0.5790677525355638f, - -0.5791744674011203f, - -0.5792811723426788f, - -0.5793878673584107f, - -0.579494552446488f, - -0.5796012276050829f, - -0.5797078928323675f, - -0.5798145481265131f, - -0.5799211934856939f, - -0.5800278289080817f, - -0.5801344543918494f, - -0.5802410699351691f, - -0.5803476755362157f, - -0.5804542711931616f, - -0.5805608569041804f, - -0.5806674326674457f, - -0.5807739984811308f, - -0.5808805543434109f, - -0.5809871002524597f, - -0.5810936362064516f, - -0.5812001622035602f, - -0.5813066782419618f, - -0.5814131843198305f, - -0.5815196804353414f, - -0.5816261665866697f, - -0.5817326427719899f, - -0.5818391089894792f, - -0.5819455652373127f, - -0.582052011513666f, - -0.5821584478167147f, - -0.5822648741446363f, - -0.5823712904956068f, - -0.5824776968678024f, - -0.5825840932593993f, - -0.5826904796685759f, - -0.5827968560935085f, - -0.5829032225323746f, - -0.5830095789833509f, - -0.5831159254446157f, - -0.5832222619143469f, - -0.583328588390722f, - -0.5834349048719195f, - -0.5835412113561173f, - -0.5836475078414944f, - -0.5837537943262288f, - -0.5838600708085f, - -0.5839663372864863f, - -0.5840725937583675f, - -0.5841788402223222f, - -0.5842850766765306f, - -0.5843913031191722f, - -0.584497519548426f, - -0.5846037259624733f, - -0.5847099223594938f, - -0.5848161087376677f, - -0.5849222850951749f, - -0.5850284514301974f, - -0.5851346077409154f, - -0.5852407540255101f, - -0.5853468902821618f, - -0.5854530165090535f, - -0.5855591327043658f, - -0.5856652388662806f, - -0.5857713349929797f, - -0.5858774210826446f, - -0.5859834971334589f, - -0.5860895631436043f, - -0.5861956191112633f, - -0.586301665034618f, - -0.5864077009118528f, - -0.5865137267411501f, - -0.5866197425206932f, - -0.5867257482486646f, - -0.5868317439232498f, - -0.5869377295426313f, - -0.5870437051049936f, - -0.5871496706085205f, - -0.5872556260513958f, - -0.5873615714318052f, - -0.5874675067479328f, - -0.5875734319979631f, - -0.5876793471800813f, - -0.587785252292473f, - -0.5878911473333233f, - -0.5879970323008171f, - -0.5881029071931411f, - -0.5882087720084802f, - -0.5883146267450213f, - -0.5884204714009499f, - -0.5885263059744531f, - -0.5886321304637165f, - -0.5887379448669275f, - -0.5888437491822732f, - -0.5889495434079404f, - -0.5890553275421159f, - -0.5891611015829874f, - -0.5892668655287431f, - -0.5893726193775701f, - -0.5894783631276567f, - -0.5895840967771899f, - -0.5896898203243597f, - -0.5897955337673536f, - -0.5899012371043605f, - -0.5900069303335683f, - -0.5901126134531676f, - -0.5902182864613466f, - -0.5903239493562946f, - -0.5904296021362007f, - -0.5905352447992556f, - -0.5906408773436487f, - -0.59074649976757f, - -0.5908521120692095f, - -0.590957714246757f, - -0.5910633062984045f, - -0.5911688882223419f, - -0.5912744600167602f, - -0.5913800216798495f, - -0.5914855732098027f, - -0.5915911146048104f, - -0.5916966458630641f, - -0.591802166982755f, - -0.5919076779620763f, - -0.5920131787992196f, - -0.5921186694923768f, - -0.5922241500397403f, - -0.592329620439503f, - -0.5924350806898581f, - -0.592540530788998f, - -0.5926459707351157f, - -0.5927514005264048f, - -0.5928568201610591f, - -0.5929622296372717f, - -0.5930676289532371f, - -0.5931730181071487f, - -0.5932783970972006f, - -0.5933837659215875f, - -0.5934891245785042f, - -0.5935944730661451f, - -0.5936998113827043f, - -0.5938051395263785f, - -0.593910457495362f, - -0.5940157652878502f, - -0.594121062902038f, - -0.5942263503361227f, - -0.5943316275882994f, - -0.5944368946567642f, - -0.5945421515397133f, - -0.5946473982353427f, - -0.5947526347418503f, - -0.5948578610574321f, - -0.5949630771802852f, - -0.595068283108606f, - -0.5951734788405932f, - -0.5952786643744437f, - -0.5953838397083551f, - -0.5954890048405245f, - -0.5955941597691514f, - -0.5956993044924332f, - -0.5958044390085685f, - -0.5959095633157556f, - -0.5960146774121927f, - -0.59611978129608f, - -0.5962248749656158f, - -0.5963299584189996f, - -0.5964350316544299f, - -0.5965400946701077f, - -0.5966451474642323f, - -0.5967501900350034f, - -0.5968552223806205f, - -0.5969602444992853f, - -0.5970652563891976f, - -0.5971702580485576f, - -0.5972752494755671f, - -0.597380230668426f, - -0.5974852016253366f, - -0.5975901623444991f, - -0.5976951128241161f, - -0.5978000530623885f, - -0.5979049830575185f, - -0.5980099028077084f, - -0.5981148123111603f, - -0.598219711566076f, - -0.5983246005706586f, - -0.5984294793231112f, - -0.5985343478216363f, - -0.5986392060644371f, - -0.5987440540497161f, - -0.5988488917756782f, - -0.5989537192405263f, - -0.5990585364424643f, - -0.5991633433796953f, - -0.5992681400504252f, - -0.5993729264528572f, - -0.5994777025851961f, - -0.5995824684456466f, - -0.5996872240324127f, - -0.5997919693437009f, - -0.5998967043777158f, - -0.6000014291326627f, - -0.6001061436067465f, - -0.6002108477981745f, - -0.6003155417051517f, - -0.6004202253258842f, - -0.6005248986585777f, - -0.60062956170144f, - -0.600734214452677f, - -0.6008388569104957f, - -0.6009434890731027f, - -0.6010481109387047f, - -0.6011527225055104f, - -0.6012573237717267f, - -0.6013619147355608f, - -0.6014664953952209f, - -0.6015710657489155f, - -0.6016756257948523f, - -0.6017801755312396f, - -0.6018847149562861f, - -0.6019892440682011f, - -0.6020937628651925f, - -0.6021982713454703f, - -0.6023027695072435f, - -0.6024072573487211f, - -0.602511734868113f, - -0.6026162020636296f, - -0.6027206589334803f, - -0.6028251054758746f, - -0.6029295416890244f, - -0.6030339675711393f, - -0.6031383831204301f, - -0.6032427883351069f, - -0.6033471832133822f, - -0.6034515677534666f, - -0.6035559419535714f, - -0.6036603058119081f, - -0.603764659326688f, - -0.6038690024961242f, - -0.6039733353184281f, - -0.6040776577918122f, - -0.604181969914488f, - -0.6042862716846698f, - -0.6043905631005695f, - -0.6044948441604002f, - -0.6045991148623752f, - -0.6047033752047068f, - -0.6048076251856103f, - -0.6049118648032984f, - -0.6050160940559851f, - -0.6051203129418838f, - -0.6052245214592102f, - -0.605328719606178f, - -0.6054329073810016f, - -0.6055370847818953f, - -0.6056412518070752f, - -0.605745408454756f, - -0.6058495547231527f, - -0.6059536906104808f, - -0.606057816114956f, - -0.6061619312347947f, - -0.606266035968212f, - -0.606370130313425f, - -0.6064742142686493f, - -0.6065782878321021f, - -0.6066823510019994f, - -0.606786403776559f, - -0.6068904461539971f, - -0.6069944781325314f, - -0.6070984997103795f, - -0.6072025108857589f, - -0.6073065116568874f, - -0.6074105020219821f, - -0.6075144819792627f, - -0.6076184515269467f, - -0.6077224106632528f, - -0.6078263593863988f, - -0.607930297694605f, - -0.60803422558609f, - -0.6081381430590727f, - -0.6082420501117718f, - -0.6083459467424085f, - -0.6084498329492017f, - -0.6085537087303714f, - -0.6086575740841378f, - -0.6087614290087203f, - -0.6088652735023409f, - -0.6089691075632195f, - -0.6090729311895771f, - -0.6091767443796338f, - -0.6092805471316122f, - -0.609384339443733f, - -0.6094881213142179f, - -0.6095918927412877f, - -0.6096956537231659f, - -0.6097994042580737f, - -0.6099031443442335f, - -0.6100068739798676f, - -0.6101105931631982f, - -0.6102143018924492f, - -0.610318000165843f, - -0.6104216879816025f, - -0.6105253653379511f, - -0.6106290322331129f, - -0.6107326886653114f, - -0.6108363346327698f, - -0.6109399701337129f, - -0.6110435951663644f, - -0.6111472097289489f, - -0.6112508138196915f, - -0.6113544074368165f, - -0.6114579905785485f, - -0.6115615632431132f, - -0.611665125428736f, - -0.611768677133642f, - -0.6118722183560568f, - -0.6119757490942063f, - -0.6120792693463171f, - -0.612182779110615f, - -0.6122862783853263f, - -0.612389767168677f, - -0.6124932454588952f, - -0.6125967132542071f, - -0.6127001705528398f, - -0.6128036173530198f, - -0.6129070536529763f, - -0.6130104794509358f, - -0.6131138947451265f, - -0.6132172995337755f, - -0.6133206938151123f, - -0.613424077587365f, - -0.6135274508487616f, - -0.6136308135975312f, - -0.6137341658319019f, - -0.6138375075501041f, - -0.6139408387503665f, - -0.6140441594309185f, - -0.614147469589989f, - -0.6142507692258092f, - -0.6143540583366084f, - -0.6144573369206169f, - -0.6145606049760641f, - -0.6146638625011821f, - -0.6147671094942009f, - -0.6148703459533514f, - -0.6149735718768642f, - -0.6150767872629711f, - -0.6151799921099037f, - -0.6152831864158933f, - -0.6153863701791714f, - -0.6154895433979704f, - -0.6155927060705225f, - -0.6156958581950598f, - -0.615798999769815f, - -0.6159021307930209f, - -0.6160052512629097f, - -0.6161083611777151f, - -0.6162114605356703f, - -0.6163145493350087f, - -0.6164176275739632f, - -0.6165206952507688f, - -0.6166237523636589f, - -0.6167267989108676f, - -0.6168298348906284f, - -0.6169328603011774f, - -0.6170358751407485f, - -0.6171388794075766f, - -0.6172418730998966f, - -0.6173448562159434f, - -0.6174478287539533f, - -0.6175507907121617f, - -0.617653742088804f, - -0.6177566828821157f, - -0.6178596130903341f, - -0.6179625327116951f, - -0.6180654417444349f, - -0.6181683401867898f, - -0.6182712280369977f, - -0.6183741052932953f, - -0.6184769719539196f, - -0.6185798280171081f, - -0.6186826734810976f, - -0.6187855083441274f, - -0.6188883326044347f, - -0.6189911462602575f, - -0.6190939493098337f, - -0.6191967417514029f, - -0.6192995235832033f, - -0.6194022948034736f, - -0.6195050554104523f, - -0.6196078054023799f, - -0.6197105447774952f, - -0.6198132735340374f, - -0.6199159916702468f, - -0.6200186991843629f, - -0.6201213960746265f, - -0.6202240823392772f, - -0.620326757976556f, - -0.6204294229847032f, - -0.6205320773619597f, - -0.6206347211065671f, - -0.6207373542167662f, - -0.6208399766907985f, - -0.6209425885269049f, - -0.6210451897233283f, - -0.6211477802783103f, - -0.6212503601900928f, - -0.6213529294569177f, - -0.6214554880770286f, - -0.6215580360486676f, - -0.6216605733700775f, - -0.6217631000395007f, - -0.6218656160551821f, - -0.621968121415364f, - -0.6220706161182902f, - -0.6221731001622044f, - -0.62227557354535f, - -0.6223780362659724f, - -0.6224804883223153f, - -0.6225829297126232f, - -0.6226853604351401f, - -0.6227877804881123f, - -0.6228901898697842f, - -0.6229925885784009f, - -0.6230949766122071f, - -0.6231973539694501f, - -0.6232997206483747f, - -0.623402076647227f, - -0.6235044219642532f, - -0.6236067565976988f, - -0.6237090805458118f, - -0.6238113938068381f, - -0.6239136963790246f, - -0.6240159882606183f, - -0.624118269449867f, - -0.6242205399450178f, - -0.6243227997443179f, - -0.6244250488460156f, - -0.6245272872483589f, - -0.6246295149495957f, - -0.6247317319479748f, - -0.6248339382417445f, - -0.6249361338291531f, - -0.6250383187084498f, - -0.6251404928778843f, - -0.6252426563357052f, - -0.6253448090801614f, - -0.625446951109504f, - -0.625549082421982f, - -0.6256512030158455f, - -0.625753312889344f, - -0.6258554120407293f, - -0.625957500468251f, - -0.6260595781701602f, - -0.6261616451447076f, - -0.6262637013901438f, - -0.6263657469047211f, - -0.6264677816866908f, - -0.6265698057343042f, - -0.6266718190458126f, - -0.6267738216194693f, - -0.6268758134535259f, - -0.6269777945462349f, - -0.6270797648958487f, - -0.6271817245006195f, - -0.6272836733588015f, - -0.6273856114686472f, - -0.6274875388284101f, - -0.6275894554363428f, - -0.6276913612907004f, - -0.627793256389736f, - -0.6278951407317039f, - -0.6279970143148574f, - -0.6280988771374525f, - -0.6282007291977431f, - -0.6283025704939837f, - -0.6284044010244293f, - -0.6285062207873352f, - -0.6286080297809572f, - -0.6287098280035501f, - -0.6288116154533703f, - -0.6289133921286729f, - -0.6290151580277149f, - -0.6291169131487516f, - -0.6292186574900405f, - -0.6293203910498373f, - -0.6294221138263991f, - -0.6295238258179835f, - -0.6296255270228471f, - -0.6297272174392474f, - -0.6298288970654414f, - -0.629930565899688f, - -0.6300322239402446f, - -0.6301338711853691f, - -0.6302355076333195f, - -0.6303371332823553f, - -0.6304387481307345f, - -0.6305403521767162f, - -0.6306419454185587f, - -0.6307435278545224f, - -0.6308450994828663f, - -0.6309466603018496f, - -0.6310482103097326f, - -0.6311497495047741f, - -0.6312512778852359f, - -0.6313527954493777f, - -0.6314543021954598f, - -0.6315557981217425f, - -0.6316572832264877f, - -0.6317587575079561f, - -0.6318602209644089f, - -0.6319616735941075f, - -0.6320631153953128f, - -0.6321645463662882f, - -0.6322659665052947f, - -0.6323673758105948f, - -0.63246877428045f, - -0.6325701619131244f, - -0.6326715387068799f, - -0.6327729046599792f, - -0.6328742597706857f, - -0.632975604037263f, - -0.6330769374579746f, - -0.6331782600310834f, - -0.633279571754854f, - -0.63338087262755f, - -0.6334821626474358f, - -0.6335834418127764f, - -0.6336847101218357f, - -0.6337859675728785f, - -0.6338872141641698f, - -0.6339884498939754f, - -0.6340896747605602f, - -0.634190888762189f, - -0.634292091897129f, - -0.6343932841636453f, - -0.6344944655600041f, - -0.6345956360844716f, - -0.6346967957353137f, - -0.6347979445107983f, - -0.6348990824091917f, - -0.6350002094287608f, - -0.6351013255677721f, - -0.6352024308244946f, - -0.6353035251971949f, - -0.6354046086841411f, - -0.6355056812836002f, - -0.6356067429938418f, - -0.6357077938131336f, - -0.6358088337397441f, - -0.6359098627719421f, - -0.6360108809079955f, - -0.6361118881461751f, - -0.6362128844847494f, - -0.6363138699219878f, - -0.6364148444561591f, - -0.6365158080855349f, - -0.6366167608083841f, - -0.6367177026229772f, - -0.6368186335275837f, - -0.6369195535204757f, - -0.6370204625999233f, - -0.6371213607641972f, - -0.6372222480115685f, - -0.6373231243403087f, - -0.6374239897486896f, - -0.6375248442349825f, - -0.6376256877974595f, - -0.6377265204343925f, - -0.6378273421440541f, - -0.6379281529247162f, - -0.6380289527746521f, - -0.6381297416921342f, - -0.6382305196754349f, - -0.6383312867228288f, - -0.6384320428325885f, - -0.6385327880029876f, - -0.6386335222322993f, - -0.6387342455187988f, - -0.6388349578607595f, - -0.6389356592564559f, - -0.6390363497041616f, - -0.6391370292021528f, - -0.6392376977487036f, - -0.6393383553420893f, - -0.6394390019805849f, - -0.6395396376624654f, - -0.6396402623860075f, - -0.6397408761494866f, - -0.6398414789511786f, - -0.639942070789359f, - -0.6400426516623057f, - -0.6401432215682944f, - -0.6402437805056019f, - -0.6403443284725046f, - -0.6404448654672809f, - -0.6405453914882073f, - -0.6406459065335616f, - -0.6407464106016214f, - -0.6408469036906638f, - -0.6409473857989684f, - -0.6410478569248126f, - -0.641148317066475f, - -0.6412487662222336f, - -0.6413492043903684f, - -0.6414496315691579f, - -0.641550047756881f, - -0.6416504529518172f, - -0.6417508471522466f, - -0.6418512303564486f, - -0.641951602562703f, - -0.6420519637692903f, - -0.6421523139744904f, - -0.6422526531765844f, - -0.6423529813738523f, - -0.6424532985645758f, - -0.6425536047470353f, - -0.6426538999195123f, - -0.6427541840802887f, - -0.6428544572276458f, - -0.6429547193598655f, - -0.6430549704752291f, - -0.6431552105720201f, - -0.6432554396485204f, - -0.6433556577030125f, - -0.6434558647337785f, - -0.6435560607391029f, - -0.6436562457172679f, - -0.6437564196665572f, - -0.6438565825852534f, - -0.6439567344716416f, - -0.6440568753240051f, - -0.6441570051406282f, - -0.644257123919795f, - -0.6443572316597893f, - -0.6444573283588972f, - -0.644557414015403f, - -0.6446574886275915f, - -0.6447575521937475f, - -0.6448576047121577f, - -0.6449576461811071f, - -0.6450576765988814f, - -0.6451576959637659f, - -0.6452577042740485f, - -0.6453577015280145f, - -0.6454576877239507f, - -0.6455576628601438f, - -0.64565762693488f, - -0.6457575799464479f, - -0.6458575218931342f, - -0.6459574527732259f, - -0.6460573725850113f, - -0.6461572813267784f, - -0.646257178996815f, - -0.6463570655934092f, - -0.6464569411148496f, - -0.6465568055594254f, - -0.6466566589254247f, - -0.646756501211137f, - -0.6468563324148515f, - -0.6469561525348573f, - -0.647055961569444f, - -0.6471557595169021f, - -0.647255546375521f, - -0.6473553221435903f, - -0.6474550868194017f, - -0.6475548404012451f, - -0.6476545828874114f, - -0.6477543142761906f, - -0.6478540345658753f, - -0.6479537437547561f, - -0.6480534418411247f, - -0.6481531288232725f, - -0.648252804699491f, - -0.6483524694680733f, - -0.6484521231273114f, - -0.6485517656754975f, - -0.6486513971109236f, - -0.648751017431884f, - -0.6488506266366709f, - -0.6489502247235777f, - -0.6490498116908976f, - -0.6491493875369236f, - -0.649248952259951f, - -0.6493485058582731f, - -0.6494480483301839f, - -0.6495475796739771f, - -0.6496470998879488f, - -0.6497466089703928f, - -0.6498461069196043f, - -0.6499455937338777f, - -0.6500450694115095f, - -0.6501445339507947f, - -0.650243987350029f, - -0.6503434296075079f, - -0.6504428607215278f, - -0.6505422806903853f, - -0.6506416895123762f, - -0.650741087185798f, - -0.6508404737089467f, - -0.65093984908012f, - -0.6510392132976146f, - -0.6511385663597284f, - -0.6512379082647585f, - -0.6513372390110029f, - -0.6514365585967601f, - -0.6515358670203278f, - -0.6516351642800046f, - -0.6517344503740881f, - -0.6518337253008785f, - -0.6519329890586741f, - -0.6520322416457742f, - -0.6521314830604772f, - -0.6522307133010842f, - -0.6523299323658941f, - -0.6524291402532068f, - -0.6525283369613217f, - -0.6526275224885406f, - -0.6527266968331633f, - -0.6528258599934903f, - -0.6529250119678225f, - -0.6530241527544605f, - -0.6531232823517066f, - -0.6532224007578618f, - -0.6533215079712275f, - -0.653420603990105f, - -0.6535196888127978f, - -0.6536187624376072f, - -0.6537178248628357f, - -0.653816876086786f, - -0.6539159161077599f, - -0.654014944924062f, - -0.6541139625339947f, - -0.6542129689358613f, - -0.6543119641279649f, - -0.6544109481086103f, - -0.6545099208761009f, - -0.6546088824287406f, - -0.6547078327648339f, - -0.6548067718826857f, - -0.6549056997806003f, - -0.6550046164568825f, - -0.6551035219098377f, - -0.6552024161377707f, - -0.6553012991389875f, - -0.6554001709117938f, - -0.6554990314544952f, - -0.6555978807653975f, - -0.6556967188428072f, - -0.6557955456850311f, - -0.6558943612903755f, - -0.6559931656571466f, - -0.6560919587836527f, - -0.6561907406682003f, - -0.6562895113090967f, - -0.6563882707046499f, - -0.6564870188531665f, - -0.6565857557529562f, - -0.6566844814023264f, - -0.6567831957995853f, - -0.6568818989430409f, - -0.6569805908310034f, - -0.6570792714617809f, - -0.6571779408336826f, - -0.6572765989450172f, - -0.6573752457940955f, - -0.6574738813792266f, - -0.6575725056987203f, - -0.6576711187508867f, - -0.6577697205340356f, - -0.6578683110464787f, - -0.657966890286526f, - -0.6580654582524884f, - -0.6581640149426763f, - -0.6582625603554023f, - -0.6583610944889771f, - -0.6584596173417124f, - -0.6585581289119198f, - -0.6586566291979116f, - -0.6587551181980003f, - -0.6588535959104979f, - -0.6589520623337168f, - -0.6590505174659703f, - -0.6591489613055715f, - -0.659247393850833f, - -0.6593458151000688f, - -0.659444225051592f, - -0.6595426237037166f, - -0.6596410110547565f, - -0.659739387103026f, - -0.6598377518468395f, - -0.6599361052845106f, - -0.6600344474143555f, - -0.6601327782346885f, - -0.6602310977438247f, - -0.6603294059400787f, - -0.6604277028217674f, - -0.6605259883872059f, - -0.66062426263471f, - -0.6607225255625951f, - -0.660820777169179f, - -0.6609190174527773f, - -0.6610172464117069f, - -0.6611154640442845f, - -0.6612136703488266f, - -0.6613118653236517f, - -0.6614100489670767f, - -0.6615082212774192f, - -0.6616063822529963f, - -0.6617045318921275f, - -0.6618026701931303f, - -0.6619007971543233f, - -0.6619989127740241f, - -0.6620970170505531f, - -0.6621951099822285f, - -0.6622931915673698f, - -0.662391261804296f, - -0.6624893206913263f, - -0.6625873682267817f, - -0.6626854044089815f, - -0.662783429236246f, - -0.6628814427068949f, - -0.6629794448192499f, - -0.6630774355716313f, - -0.6631754149623597f, - -0.6632733829897564f, - -0.6633713396521432f, - -0.6634692849478414f, - -0.6635672188751723f, - -0.6636651414324585f, - -0.6637630526180215f, - -0.6638609524301838f, - -0.6639588408672685f, - -0.6640567179275978f, - -0.6641545836094942f, - -0.6642524379112813f, - -0.6643502808312828f, - -0.6644481123678215f, - -0.6645459325192214f, - -0.6646437412838057f, - -0.6647415386598996f, - -0.6648393246458268f, - -0.664937099239912f, - -0.6650348624404788f, - -0.6651326142458536f, - -0.6652303546543608f, - -0.6653280836643255f, - -0.6654258012740726f, - -0.665523507481929f, - -0.66562120228622f, - -0.6657188856852714f, - -0.6658165576774097f, - -0.6659142182609603f, - -0.6660118674342514f, - -0.6661095051956092f, - -0.6662071315433605f, - -0.6663047464758319f, - -0.6664023499913523f, - -0.6664999420882483f, - -0.6665975227648478f, - -0.6666950920194783f, - -0.6667926498504692f, - -0.6668901962561481f, - -0.6669877312348437f, - -0.6670852547848843f, - -0.6671827669045994f, - -0.6672802675923184f, - -0.6673777568463701f, - -0.6674752346650841f, - -0.6675727010467902f, - -0.6676701559898187f, - -0.6677675994924992f, - -0.6678650315531627f, - -0.6679624521701388f, - -0.6680598613417592f, - -0.6681572590663539f, - -0.6682546453422549f, - -0.668352020167793f, - -0.6684493835412997f, - -0.6685467354611065f, - -0.6686440759255461f, - -0.6687414049329501f, - -0.6688387224816501f, - -0.66893602856998f, - -0.6690333231962717f, - -0.6691306063588582f, - -0.6692278780560725f, - -0.6693251382862473f, - -0.6694223870477173f, - -0.6695196243388155f, - -0.6696168501578759f, - -0.6697140645032318f, - -0.6698112673732188f, - -0.6699084587661707f, - -0.6700056386804221f, - -0.6701028071143073f, - -0.6701999640661624f, - -0.6702971095343224f, - -0.6703942435171224f, - -0.6704913660128983f, - -0.6705884770199849f, - -0.6706855765367199f, - -0.6707826645614388f, - -0.6708797410924778f, - -0.6709768061281731f, - -0.6710738596668628f, - -0.6711709017068832f, - -0.6712679322465716f, - -0.6713649512842645f, - -0.6714619588183011f, - -0.6715589548470184f, - -0.6716559393687545f, - -0.6717529123818471f, - -0.6718498738846351f, - -0.6719468238754573f, - -0.672043762352652f, - -0.6721406893145586f, - -0.6722376047595158f, - -0.6723345086858635f, - -0.6724314010919408f, - -0.672528281976088f, - -0.6726251513366445f, - -0.6727220091719507f, - -0.6728188554803474f, - -0.6729156902601746f, - -0.6730125135097734f, - -0.6731093252274839f, - -0.6732061254116487f, - -0.6733029140606084f, - -0.6733996911727045f, - -0.6734964567462781f, - -0.6735932107796726f, - -0.6736899532712295f, - -0.6737866842192909f, - -0.6738834036221989f, - -0.6739801114782975f, - -0.674076807785929f, - -0.6741734925434365f, - -0.6742701657491633f, - -0.6743668274014524f, - -0.6744634774986487f, - -0.6745601160390955f, - -0.674656743021137f, - -0.6747533584431168f, - -0.6748499623033808f, - -0.6749465546002729f, - -0.6750431353321382f, - -0.6751397044973217f, - -0.6752362620941682f, - -0.6753328081210244f, - -0.6754293425762353f, - -0.675525865458147f, - -0.6756223767651047f, - -0.6757188764954563f, - -0.6758153646475474f, - -0.6759118412197246f, - -0.6760083062103349f, - -0.6761047596177259f, - -0.6762012014402444f, - -0.6762976316762378f, - -0.6763940503240542f, - -0.676490457382041f, - -0.6765868528485466f, - -0.6766832367219195f, - -0.6767796090005082f, - -0.6768759696826605f, - -0.6769723187667261f, - -0.6770686562510543f, - -0.6771649821339938f, - -0.6772612964138938f, - -0.677357599089105f, - -0.6774538901579767f, - -0.677550169618859f, - -0.6776464374701023f, - -0.6777426937100564f, - -0.6778389383370731f, - -0.6779351713495027f, - -0.6780313927456962f, - -0.6781276025240044f, - -0.67822380068278f, - -0.678319987220374f, - -0.6784161621351382f, - -0.6785123254254242f, - -0.6786084770895855f, - -0.6787046171259737f, - -0.6788007455329418f, - -0.6788968623088424f, - -0.6789929674520281f, - -0.6790890609608534f, - -0.679185142833671f, - -0.6792812130688348f, - -0.6793772716646979f, - -0.6794733186196155f, - -0.6795693539319414f, - -0.6796653776000301f, - -0.6797613896222358f, - -0.6798573899969136f, - -0.6799533787224191f, - -0.6800493557971072f, - -0.680145321219333f, - -0.6802412749874525f, - -0.6803372170998218f, - -0.6804331475547963f, - -0.6805290663507331f, - -0.6806249734859877f, - -0.6807208689589177f, - -0.6808167527678792f, - -0.6809126249112298f, - -0.6810084853873267f, - -0.6811043341945264f, - -0.681200171331188f, - -0.6812959967956688f, - -0.6813918105863266f, - -0.6814876127015193f, - -0.6815834031396064f, - -0.6816791818989462f, - -0.6817749489778971f, - -0.681870704374818f, - -0.6819664480880693f, - -0.6820621801160096f, - -0.6821579004569988f, - -0.6822536091093966f, - -0.6823493060715625f, - -0.682444991341858f, - -0.682540664918643f, - -0.6826363268002781f, - -0.6827319769851234f, - -0.6828276154715416f, - -0.6829232422578929f, - -0.6830188573425391f, - -0.6831144607238409f, - -0.6832100524001616f, - -0.6833056323698627f, - -0.6834012006313065f, - -0.6834967571828552f, - -0.683592302022871f, - -0.6836878351497181f, - -0.6837833565617588f, - -0.6838788662573564f, - -0.6839743642348738f, - -0.6840698504926759f, - -0.6841653250291257f, - -0.6842607878425875f, - -0.6843562389314254f, - -0.6844516782940043f, - -0.6845471059286887f, - -0.684642521833843f, - -0.684737926007833f, - -0.6848333184490233f, - -0.6849286991557797f, - -0.6850240681264682f, - -0.6851194253594544f, - -0.685214770853104f, - -0.6853101046057836f, - -0.68540542661586f, - -0.6855007368816997f, - -0.6855960354016694f, - -0.6856913221741355f, - -0.6857865971974668f, - -0.6858818604700301f, - -0.6859771119901928f, - -0.6860723517563225f, - -0.6861675797667885f, - -0.6862627960199583f, - -0.6863580005142006f, - -0.6864531932478832f, - -0.6865483742193765f, - -0.6866435434270489f, - -0.6867387008692698f, - -0.6868338465444084f, - -0.6869289804508341f, - -0.6870241025869178f, - -0.6871192129510292f, - -0.6872143115415386f, - -0.6873093983568156f, - -0.6874044733952325f, - -0.6874995366551594f, - -0.6875945881349675f, - -0.6876896278330275f, - -0.6877846557477121f, - -0.6878796718773925f, - -0.6879746762204405f, - -0.688069668775228f, - -0.6881646495401276f, - -0.6882596185135121f, - -0.6883545756937541f, - -0.688449521079226f, - -0.6885444546683014f, - -0.6886393764593539f, - -0.6887342864507564f, - -0.6888291846408833f, - -0.6889240710281078f, - -0.6890189456108049f, - -0.6891138083873481f, - -0.6892086593561129f, - -0.6893034985154733f, - -0.6893983258638039f, - -0.689493141399481f, - -0.6895879451208795f, - -0.689682737026375f, - -0.6897775171143422f, - -0.6898722853831588f, - -0.6899670418312001f, - -0.6900617864568426f, - -0.6901565192584628f, - -0.6902512402344368f, - -0.690345949383143f, - -0.6904406467029578f, - -0.6905353321922587f, - -0.6906300058494226f, - -0.6907246676728285f, - -0.6908193176608538f, - -0.6909139558118769f, - -0.6910085821242752f, - -0.6911031965964288f, - -0.691197799226716f, - -0.6912923900135155f, - -0.6913869689552067f, - -0.6914815360501683f, - -0.6915760912967812f, - -0.6916706346934247f, - -0.6917651662384786f, - -0.6918596859303228f, - -0.6919541937673387f, - -0.6920486897479066f, - -0.6921431738704069f, - -0.6922376461332205f, - -0.6923321065347297f, - -0.6924265550733151f, - -0.6925209917473584f, - -0.6926154165552418f, - -0.6927098294953469f, - -0.6928042305660566f, - -0.6928986197657525f, - -0.6929929970928181f, - -0.6930873625456356f, - -0.6931817161225888f, - -0.6932760578220603f, - -0.693370387642434f, - -0.6934647055820932f, - -0.6935590116394219f, - -0.6936533058128047f, - -0.6937475881006255f, - -0.6938418585012689f, - -0.6939361170131187f, - -0.6940303636345614f, - -0.6941245983639812f, - -0.6942188211997636f, - -0.6943130321402934f, - -0.6944072311839576f, - -0.6945014183291415f, - -0.6945955935742313f, - -0.6946897569176131f, - -0.694783908357673f, - -0.6948780478927991f, - -0.6949721755213775f, - -0.6950662912417954f, - -0.6951603950524395f, - -0.6952544869516988f, - -0.6953485669379602f, - -0.6954426350096118f, - -0.695536691165041f, - -0.6956307354026376f, - -0.6957247677207896f, - -0.6958187881178856f, - -0.6959127965923145f, - -0.6960067931424652f, - -0.6961007777667281f, - -0.6961947504634922f, - -0.6962887112311471f, - -0.6963826600680829f, - -0.6964765969726904f, - -0.6965705219433596f, - -0.6966644349784806f, - -0.6967583360764449f, - -0.6968522252356435f, - -0.6969461024544676f, - -0.6970399677313082f, - -0.6971338210645576f, - -0.6972276624526069f, - -0.6973214918938486f, - -0.6974153093866753f, - -0.6975091149294791f, - -0.6976029085206523f, - -0.6976966901585882f, - -0.69779045984168f, - -0.6978842175683209f, - -0.6979779633369034f, - -0.698071697145823f, - -0.6981654189934725f, - -0.6982591288782461f, - -0.6983528267985384f, - -0.6984465127527428f, - -0.6985401867392557f, - -0.6986338487564712f, - -0.6987274988027844f, - -0.69882113687659f, - -0.698914762976285f, - -0.6990083771002642f, - -0.6991019792469237f, - -0.6991955694146591f, - -0.699289147601868f, - -0.6993827138069462f, - -0.6994762680282905f, - -0.699569810264298f, - -0.6996633405133651f, - -0.6997568587738906f, - -0.6998503650442713f, - -0.699943859322905f, - -0.7000373416081893f, - -0.7001308118985234f, - -0.7002242701923053f, - -0.7003177164879334f, - -0.7004111507838063f, - -0.7005045730783235f, - -0.7005979833698842f, - -0.7006913816568878f, - -0.7007847679377336f, - -0.7008781422108217f, - -0.7009715044745526f, - -0.7010648547273257f, - -0.7011581929675422f, - -0.7012515191936023f, - -0.7013448334039073f, - -0.7014381355968579f, - -0.7015314257708556f, - -0.701624703924302f, - -0.701717970055598f, - -0.7018112241631468f, - -0.7019044662453499f, - -0.7019976963006096f, - -0.7020909143273277f, - -0.7021841203239083f, - -0.7022773142887538f, - -0.7023704962202673f, - -0.7024636661168513f, - -0.7025568239769109f, - -0.7026499697988491f, - -0.7027431035810698f, - -0.7028362253219774f, - -0.7029293350199755f, - -0.70302243267347f, - -0.7031155182808649f, - -0.7032085918405655f, - -0.7033016533509762f, - -0.7033947028105036f, - -0.703487740217553f, - -0.70358076557053f, - -0.7036737788678399f, - -0.7037667801078904f, - -0.7038597692890872f, - -0.7039527464098371f, - -0.7040457114685468f, - -0.7041386644636228f, - -0.7042316053934736f, - -0.7043245342565062f, - -0.7044174510511282f, - -0.7045103557757468f, - -0.7046032484287714f, - -0.7046961290086098f, - -0.70478899751367f, - -0.7048818539423615f, - -0.7049746982930924f, - -0.7050675305642728f, - -0.7051603507543112f, - -0.7052531588616178f, - -0.7053459548846016f, - -0.7054387388216732f, - -0.7055315106712429f, - -0.7056242704317206f, - -0.7057170181015169f, - -0.7058097536790428f, - -0.7059024771627094f, - -0.7059951885509279f, - -0.7060878878421095f, - -0.7061805750346652f, - -0.7062732501270084f, - -0.70636591311755f, - -0.7064585640047026f, - -0.706551202786878f, - -0.70664382946249f, - -0.706736444029951f, - -0.7068290464876739f, - -0.7069216368340713f, - -0.7070142150675581f, - -0.7071067811865475f, - -0.7071993351894531f, - -0.7072918770746891f, - -0.7073844068406693f, - -0.7074769244858095f, - -0.7075694300085237f, - -0.7076619234072268f, - -0.7077544046803333f, - -0.7078468738262601f, - -0.707939330843422f, - -0.7080317757302346f, - -0.7081242084851134f, - -0.7082166291064758f, - -0.7083090375927377f, - -0.7084014339423155f, - -0.7084938181536258f, - -0.708586190225086f, - -0.7086785501551135f, - -0.7087708979421254f, - -0.7088632335845394f, - -0.7089555570807732f, - -0.7090478684292455f, - -0.7091401676283737f, - -0.709232454676577f, - -0.7093247295722737f, - -0.7094169923138829f, - -0.7095092428998233f, - -0.7096014813285149f, - -0.7096937075983768f, - -0.7097859217078281f, - -0.70987812365529f, - -0.7099703134391822f, - -0.7100624910579246f, - -0.7101546565099377f, - -0.7102468097936431f, - -0.7103389509074612f, - -0.7104310798498135f, - -0.710523196619121f, - -0.7106153012138049f, - -0.7107073936322883f, - -0.7107994738729925f, - -0.7108915419343397f, - -0.7109835978147517f, - -0.7110756415126526f, - -0.7111676730264643f, - -0.7112596923546102f, - -0.7113516994955128f, - -0.7114436944475968f, - -0.7115356772092852f, - -0.7116276477790021f, - -0.7117196061551716f, - -0.7118115523362172f, - -0.7119034863205648f, - -0.7119954081066384f, - -0.7120873176928633f, - -0.7121792150776635f, - -0.7122711002594659f, - -0.7123629732366955f, - -0.712454834007778f, - -0.7125466825711387f, - -0.7126385189252052f, - -0.7127303430684032f, - -0.712822154999159f, - -0.7129139547159001f, - -0.7130057422170528f, - -0.7130975175010451f, - -0.7131892805663038f, - -0.7132810314112572f, - -0.7133727700343324f, - -0.7134644964339579f, - -0.7135562106085624f, - -0.713647912556574f, - -0.7137396022764211f, - -0.7138312797665329f, - -0.7139229450253389f, - -0.7140145980512682f, - -0.7141062388427502f, - -0.714197867398214f, - -0.714289483716091f, - -0.7143810877948107f, - -0.7144726796328035f, - -0.7145642592284992f, - -0.71465582658033f, - -0.7147473816867264f, - -0.7148389245461194f, - -0.7149304551569406f, - -0.715021973517621f, - -0.7151134796265937f, - -0.7152049734822901f, - -0.7152964550831423f, - -0.7153879244275826f, - -0.7154793815140447f, - -0.7155708263409608f, - -0.7156622589067642f, - -0.7157536792098874f, - -0.7158450872487653f, - -0.7159364830218311f, - -0.7160278665275187f, - -0.7161192377642622f, - -0.7162105967304955f, - -0.7163019434246541f, - -0.7163932778451727f, - -0.7164845999904855f, - -0.7165759098590284f, - -0.716667207449237f, - -0.7167584927595465f, - -0.7168497657883925f, - -0.7169410265342117f, - -0.7170322749954401f, - -0.717123511170514f, - -0.7172147350578706f, - -0.7173059466559465f, - -0.7173971459631785f, - -0.7174883329780042f, - -0.7175795076988614f, - -0.7176706701241876f, - -0.7177618202524205f, - -0.7178529580819984f, - -0.7179440836113603f, - -0.7180351968389442f, - -0.7181262977631884f, - -0.7182173863825331f, - -0.7183084626954168f, - -0.7183995267002792f, - -0.7184905783955597f, - -0.7185816177796978f, - -0.7186726448511344f, - -0.7187636596083096f, - -0.7188546620496634f, - -0.7189456521736364f, - -0.7190366299786705f, - -0.719127595463206f, - -0.7192185486256846f, - -0.719309489464547f, - -0.7194004179782363f, - -0.7194913341651937f, - -0.7195822380238616f, - -0.7196731295526821f, - -0.7197640087500974f, - -0.7198548756145515f, - -0.7199457301444868f, - -0.7200365723383465f, - -0.7201274021945734f, - -0.7202182197116125f, - -0.7203090248879069f, - -0.7203998177219008f, - -0.7204905982120382f, - -0.7205813663567637f, - -0.7206721221545226f, - -0.720762865603759f, - -0.7208535967029188f, - -0.7209443154504466f, - -0.7210350218447886f, - -0.7211257158843901f, - -0.7212163975676975f, - -0.7213070668931565f, - -0.7213977238592141f, - -0.7214883684643163f, - -0.7215790007069105f, - -0.7216696205854435f, - -0.7217602280983618f, - -0.7218508232441143f, - -0.7219414060211479f, - -0.7220319764279106f, - -0.7221225344628498f, - -0.7222130801244151f, - -0.7223036134110543f, - -0.7223941343212164f, - -0.7224846428533493f, - -0.7225751390059039f, - -0.7226656227773286f, - -0.7227560941660731f, - -0.7228465531705872f, - -0.7229369997893202f, - -0.7230274340207238f, - -0.7231178558632475f, - -0.7232082653153421f, - -0.7232986623754579f, - -0.7233890470420471f, - -0.7234794193135605f, - -0.7235697791884494f, - -0.7236601266651651f, - -0.7237504617421606f, - -0.7238407844178875f, - -0.723931094690798f, - -0.724021392559345f, - -0.7241116780219802f, - -0.7242019510771581f, - -0.7242922117233312f, - -0.724382459958953f, - -0.7244726957824763f, - -0.7245629191923565f, - -0.7246531301870467f, - -0.724743328765001f, - -0.7248335149246745f, - -0.7249236886645212f, - -0.7250138499829967f, - -0.7251039988785554f, - -0.7251941353496532f, - -0.7252842593947452f, - -0.7253743710122873f, - -0.7254644702007359f, - -0.7255545569585468f, - -0.725644631284176f, - -0.7257346931760805f, - -0.7258247426327175f, - -0.7259147796525436f, - -0.7260048042340159f, - -0.7260948163755916f, - -0.7261848160757293f, - -0.7262748033328864f, - -0.7263647781455209f, - -0.7264547405120906f, - -0.7265446904310552f, - -0.7266346279008729f, - -0.7267245529200024f, - -0.7268144654869024f, - -0.7269043656000336f, - -0.7269942532578548f, - -0.727084128458826f, - -0.727173991201407f, - -0.7272638414840575f, - -0.7273536793052392f, - -0.727443504663412f, - -0.7275333175570371f, - -0.7276231179845746f, - -0.7277129059444871f, - -0.7278026814352356f, - -0.7278924444552819f, - -0.727982195003087f, - -0.7280719330771146f, - -0.7281616586758263f, - -0.7282513717976847f, - -0.7283410724411523f, - -0.7284307606046924f, - -0.7285204362867684f, - -0.7286100994858438f, - -0.7286997502003815f, - -0.7287893884288458f, - -0.7288790141697011f, - -0.7289686274214113f, - -0.7290582281824411f, - -0.7291478164512554f, - -0.7292373922263183f, - -0.7293269555060956f, - -0.7294165062890529f, - -0.7295060445736553f, - -0.7295955703583682f, - -0.7296850836416586f, - -0.7297745844219923f, - -0.7298640726978357f, - -0.7299535484676547f, - -0.7300430117299175f, - -0.7301324624830906f, - -0.7302219007256411f, - -0.7303113264560367f, - -0.7304007396727443f, - -0.7304901403742332f, - -0.7305795285589709f, - -0.7306689042254259f, - -0.7307582673720658f, - -0.7308476179973609f, - -0.7309369560997795f, - -0.7310262816777908f, - -0.7311155947298638f, - -0.7312048952544691f, - -0.731294183250076f, - -0.7313834587151548f, - -0.7314727216481755f, - -0.7315619720476082f, - -0.7316512099119247f, - -0.7317404352395953f, - -0.7318296480290913f, - -0.7319188482788835f, - -0.7320080359874445f, - -0.7320972111532456f, - -0.7321863737747586f, - -0.7322755238504555f, - -0.7323646613788096f, - -0.7324537863582932f, - -0.7325428987873785f, - -0.7326319986645398f, - -0.7327210859882491f, - -0.7328101607569811f, - -0.7328992229692085f, - -0.7329882726234062f, - -0.7330773097180474f, - -0.7331663342516069f, - -0.7332553462225598f, - -0.7333443456293804f, - -0.7334333324705434f, - -0.7335223067445245f, - -0.7336112684497993f, - -0.7337002175848432f, - -0.7337891541481321f, - -0.7338780781381414f, - -0.7339669895533487f, - -0.73405588839223f, - -0.7341447746532619f, - -0.7342336483349209f, - -0.7343225094356853f, - -0.7344113579540318f, - -0.7345001938884381f, - -0.7345890172373821f, - -0.7346778279993411f, - -0.7347666261727946f, - -0.7348554117562205f, - -0.7349441847480974f, - -0.7350329451469038f, - -0.7351216929511196f, - -0.7352104281592239f, - -0.7352991507696962f, - -0.7353878607810155f, - -0.7354765581916631f, - -0.7355652430001187f, - -0.7356539152048626f, - -0.7357425748043752f, - -0.735831221797137f, - -0.7359198561816302f, - -0.7360084779563357f, - -0.7360970871197343f, - -0.7361856836703081f, - -0.7362742676065396f, - -0.7363628389269102f, - -0.7364513976299024f, - -0.7365399437139988f, - -0.7366284771776825f, - -0.736716998019436f, - -0.7368055062377431f, - -0.7368940018310868f, - -0.7369824847979506f, - -0.7370709551368186f, - -0.7371594128461754f, - -0.7372478579245046f, - -0.7373362903702905f, - -0.7374247101820186f, - -0.7375131173581737f, - -0.7376015118972408f, - -0.7376898937977047f, - -0.737778263058052f, - -0.7378666196767683f, - -0.7379549636523393f, - -0.7380432949832513f, - -0.7381316136679903f, - -0.7382199197050441f, - -0.738308213092899f, - -0.7383964938300421f, - -0.7384847619149603f, - -0.738573017346142f, - -0.7386612601220748f, - -0.7387494902412464f, - -0.738837707702145f, - -0.7389259125032585f, - -0.7390141046430767f, - -0.7391022841200879f, - -0.7391904509327812f, - -0.7392786050796452f, - -0.7393667465591706f, - -0.7394548753698466f, - -0.739542991510163f, - -0.7396310949786095f, - -0.7397191857736775f, - -0.7398072638938572f, - -0.7398953293376392f, - -0.7399833821035144f, - -0.7400714221899743f, - -0.7401594495955106f, - -0.7402474643186143f, - -0.740335466357778f, - -0.7404234557114934f, - -0.740511432378253f, - -0.740599396356549f, - -0.7406873476448748f, - -0.7407752862417226f, - -0.740863212145586f, - -0.7409511253549589f, - -0.7410390258683343f, - -0.7411269136842061f, - -0.7412147888010681f, - -0.7413026512174153f, - -0.741390500931742f, - -0.7414783379425427f, - -0.7415661622483118f, - -0.7416539738475457f, - -0.7417417727387391f, - -0.7418295589203876f, - -0.7419173323909865f, - -0.7420050931490327f, - -0.7420928411930223f, - -0.7421805765214515f, - -0.7422682991328171f, - -0.7423560090256153f, - -0.7424437061983443f, - -0.7425313906495011f, - -0.7426190623775831f, - -0.7427067213810876f, - -0.7427943676585136f, - -0.7428820012083587f, - -0.7429696220291214f, - -0.7430572301192999f, - -0.743144825477394f, - -0.7432324081019024f, - -0.7433199779913241f, - -0.7434075351441589f, - -0.7434950795589058f, - -0.743582611234066f, - -0.7436701301681391f, - -0.743757636359625f, - -0.7438451298070248f, - -0.7439326105088395f, - -0.74402007846357f, - -0.7441075336697172f, - -0.744194976125783f, - -0.7442824058302687f, - -0.7443698227816767f, - -0.7444572269785087f, - -0.7445446184192674f, - -0.744631997102455f, - -0.7447193630265745f, - -0.7448067161901292f, - -0.744894056591622f, - -0.7449813842295562f, - -0.7450686991024354f, - -0.7451560012087644f, - -0.7452432905470463f, - -0.7453305671157858f, - -0.7454178309134869f, - -0.7455050819386555f, - -0.7455923201897958f, - -0.7456795456654132f, - -0.7457667583640124f, - -0.7458539582841003f, - -0.7459411454241821f, - -0.7460283197827638f, - -0.7461154813583514f, - -0.7462026301494522f, - -0.7462897661545727f, - -0.7463768893722196f, - -0.7464639998009001f, - -0.7465510974391211f, - -0.7466381822853912f, - -0.7467252543382179f, - -0.7468123135961091f, - -0.7468993600575724f, - -0.7469863937211176f, - -0.7470734145852527f, - -0.7471604226484867f, - -0.7472474179093281f, - -0.7473344003662875f, - -0.7474213700178738f, - -0.7475083268625969f, - -0.7475952708989664f, - -0.747682202125493f, - -0.7477691205406873f, - -0.7478560261430598f, - -0.747942918931121f, - -0.7480297989033823f, - -0.7481166660583554f, - -0.7482035203945513f, - -0.7482903619104823f, - -0.74837719060466f, - -0.7484640064755965f, - -0.7485508095218045f, - -0.7486375997417969f, - -0.7487243771340862f, - -0.748811141697185f, - -0.7488978934296079f, - -0.7489846323298676f, - -0.749071358396478f, - -0.7491580716279524f, - -0.7492447720228064f, - -0.7493314595795535f, - -0.7494181342967084f, - -0.7495047961727862f, - -0.7495914452063012f, - -0.7496780813957699f, - -0.749764704739707f, - -0.7498513152366286f, - -0.74993791288505f, - -0.7500244976834883f, - -0.7501110696304595f, - -0.7501976287244801f, - -0.7502841749640666f, - -0.750370708347737f, - -0.7504572288740079f, - -0.750543736541397f, - -0.750630231348422f, - -0.7507167132936002f, - -0.7508031823754509f, - -0.7508896385924918f, - -0.7509760819432417f, - -0.7510625124262187f, - -0.7511489300399431f, - -0.7512353347829335f, - -0.7513217266537093f, - -0.7514081056507897f, - -0.7514944717726959f, - -0.7515808250179473f, - -0.7516671653850641f, - -0.7517534928725673f, - -0.7518398074789773f, - -0.7519261092028154f, - -0.7520123980426027f, - -0.7520986739968609f, - -0.7521849370641113f, - -0.7522711872428759f, - -0.7523574245316773f, - -0.7524436489290375f, - -0.7525298604334787f, - -0.7526160590435241f, - -0.7527022447576969f, - -0.7527884175745201f, - -0.7528745774925172f, - -0.7529607245102112f, - -0.7530468586261272f, - -0.7531329798387887f, - -0.75321908814672f, - -0.7533051835484452f, - -0.7533912660424902f, - -0.7534773356273793f, - -0.7535633923016379f, - -0.7536494360637913f, - -0.7537354669123647f, - -0.7538214848458851f, - -0.7539074898628779f, - -0.7539934819618697f, - -0.7540794611413861f, - -0.7541654273999554f, - -0.7542513807361038f, - -0.7543373211483586f, - -0.7544232486352466f, - -0.7545091631952965f, - -0.7545950648270359f, - -0.7546809535289927f, - -0.7547668292996952f, - -0.7548526921376714f, - -0.7549385420414512f, - -0.7550243790095631f, - -0.7551102030405359f, - -0.7551960141328994f, - -0.7552818122851835f, - -0.7553675974959179f, - -0.7554533697636322f, - -0.755539129086857f, - -0.7556248754641235f, - -0.7557106088939615f, - -0.7557963293749025f, - -0.7558820369054777f, - -0.7559677314842181f, - -0.7560534131096557f, - -0.7561390817803226f, - -0.7562247374947506f, - -0.7563103802514716f, - -0.7563960100490189f, - -0.756481626885925f, - -0.7565672307607229f, - -0.756652821671945f, - -0.756738399618126f, - -0.7568239645977993f, - -0.7569095166094978f, - -0.7569950556517562f, - -0.757080581723109f, - -0.757166094822091f, - -0.7572515949472359f, - -0.7573370820970794f, - -0.7574225562701566f, - -0.7575080174650035f, - -0.7575934656801545f, - -0.7576789009141462f, - -0.7577643231655152f, - -0.7578497324327967f, - -0.7579351287145277f, - -0.7580205120092451f, - -0.7581058823154865f, - -0.7581912396317871f, - -0.7582765839566868f, - -0.7583619152887215f, - -0.7584472336264304f, - -0.7585325389683496f, - -0.7586178313130197f, - -0.7587031106589778f, - -0.7587883770047636f, - -0.7588736303489151f, - -0.7589588706899718f, - -0.7590440980264733f, - -0.7591293123569598f, - -0.7592145136799702f, - -0.7592997019940448f, - -0.7593848772977243f, - -0.7594700395895496f, - -0.7595551888680605f, - -0.7596403251317982f, - -0.7597254483793043f, - -0.7598105586091207f, - -0.7598956558197879f, - -0.7599807400098488f, - -0.7600658111778439f, - -0.7601508693223179f, - -0.7602359144418114f, - -0.7603209465348686f, - -0.7604059656000306f, - -0.7604909716358429f, - -0.7605759646408473f, - -0.7606609446135887f, - -0.7607459115526091f, - -0.760830865456455f, - -0.760915806323669f, - -0.7610007341527961f, - -0.7610856489423818f, - -0.7611705506909702f, - -0.7612554393971066f, - -0.7613403150593369f, - -0.761425177676207f, - -0.7615100272462618f, - -0.7615948637680481f, - -0.7616796872401121f, - -0.7617644976610011f, - -0.7618492950292606f, - -0.7619340793434383f, - -0.7620188506020813f, - -0.7621036088037378f, - -0.7621883539469544f, - -0.7622730860302793f, - -0.7623578050522608f, - -0.7624425110114479f, - -0.7625272039063881f, - -0.7626118837356305f, - -0.7626965504977243f, - -0.7627812041912194f, - -0.762865844814664f, - -0.7629504723666091f, - -0.7630350868456028f, - -0.7631196882501976f, - -0.7632042765789421f, - -0.7632888518303881f, - -0.7633734140030847f, - -0.7634579630955851f, - -0.7635424991064391f, - -0.7636270220341993f, - -0.7637115318774155f, - -0.7637960286346421f, - -0.7638805123044297f, - -0.7639649828853314f, - -0.7640494403758991f, - -0.764133884774686f, - -0.7642183160802453f, - -0.7643027342911307f, - -0.7643871394058946f, - -0.7644715314230915f, - -0.7645559103412752f, - -0.7646402761590005f, - -0.7647246288748207f, - -0.764808968487291f, - -0.7648932949949662f, - -0.7649776083964014f, - -0.7650619086901526f, - -0.7651461958747741f, - -0.7652304699488223f, - -0.765314730910853f, - -0.7653989787594231f, - -0.765483213493088f, - -0.7655674351104048f, - -0.7656516436099305f, - -0.7657358389902227f, - -0.7658200212498375f, - -0.7659041903873332f, - -0.7659883464012676f, - -0.766072489290199f, - -0.7661566190526847f, - -0.7662407356872845f, - -0.766324839192555f, - -0.7664089295670576f, - -0.7664930068093496f, - -0.7665770709179917f, - -0.7666611218915416f, - -0.7667451597285614f, - -0.7668291844276095f, - -0.7669131959872473f, - -0.766997194406034f, - -0.7670811796825311f, - -0.7671651518152993f, - -0.7672491108029006f, - -0.767333056643895f, - -0.7674169893368448f, - -0.7675009088803117f, - -0.7675848152728586f, - -0.7676687085130465f, - -0.7677525885994384f, - -0.7678364555305972f, - -0.7679203093050863f, - -0.7680041499214677f, - -0.7680879773783056f, - -0.7681717916741635f, - -0.7682555928076058f, - -0.7683393807771954f, - -0.7684231555814974f, - -0.7685069172190763f, - -0.7685906656884973f, - -0.7686744009883243f, - -0.7687581231171231f, - -0.7688418320734591f, - -0.7689255278558982f, - -0.7690092104630065f, - -0.7690928798933493f, - -0.7691765361454939f, - -0.7692601792180052f, - -0.7693438091094522f, - -0.7694274258184004f, - -0.7695110293434182f, - -0.7695946196830711f, - -0.7696781968359293f, - -0.769761760800559f, - -0.7698453115755294f, - -0.7699288491594073f, - -0.7700123735507635f, - -0.7700958847481651f, - -0.7701793827501824f, - -0.7702628675553833f, - -0.7703463391623383f, - -0.7704297975696167f, - -0.7705132427757894f, - -0.7705966747794252f, - -0.7706800935790951f, - -0.7707634991733698f, - -0.7708468915608209f, - -0.7709302707400181f, - -0.7710136367095339f, - -0.7710969894679383f, - -0.7711803290138052f, - -0.771263655345705f, - -0.7713469684622108f, - -0.7714302683618937f, - -0.7715135550433285f, - -0.7715968285050864f, - -0.771680088745741f, - -0.7717633357638659f, - -0.771846569558035f, - -0.7719297901268212f, - -0.7720129974687988f, - -0.7720961915825431f, - -0.7721793724666269f, - -0.7722625401196259f, - -0.7723456945401149f, - -0.7724288357266696f, - -0.7725119636778645f, - -0.7725950783922754f, - -0.7726781798684784f, - -0.7727612681050502f, - -0.7728443431005652f, - -0.7729274048536023f, - -0.7730104533627367f, - -0.7730934886265463f, - -0.7731765106436073f, - -0.7732595194124975f, - -0.773342514931795f, - -0.7734254972000778f, - -0.7735084662159232f, - -0.7735914219779099f, - -0.7736743644846167f, - -0.7737572937346228f, - -0.7738402097265061f, - -0.7739231124588465f, - -0.7740060019302235f, - -0.7740888781392172f, - -0.7741717410844067f, - -0.7742545907643731f, - -0.774337427177695f, - -0.7744202503229556f, - -0.7745030601987337f, - -0.7745858568036117f, - -0.7746686401361692f, - -0.77475141019499f, - -0.7748341669786541f, - -0.7749169104857447f, - -0.7749996407148422f, - -0.7750823576645314f, - -0.7751650613333931f, - -0.7752477517200117f, - -0.7753304288229688f, - -0.7754130926408485f, - -0.7754957431722342f, - -0.77557838041571f, - -0.7756610043698604f, - -0.7757436150332684f, - -0.7758262124045191f, - -0.7759087964821973f, - -0.7759913672648885f, - -0.7760739247511766f, - -0.7761564689396477f, - -0.7762389998288874f, - -0.7763215174174821f, - -0.7764040217040168f, - -0.7764865126870784f, - -0.7765689903652533f, - -0.7766514547371288f, - -0.7767339058012911f, - -0.7768163435563277f, - -0.776898768000826f, - -0.7769811791333745f, - -0.7770635769525598f, - -0.7771459614569711f, - -0.7772283326451953f, - -0.7773106905158231f, - -0.7773930350674417f, - -0.7774753662986411f, - -0.7775576842080092f, - -0.7776399887941374f, - -0.7777222800556141f, - -0.77780455799103f, - -0.7778868225989739f, - -0.7779690738780384f, - -0.7780513118268124f, - -0.7781335364438879f, - -0.778215747727855f, - -0.7782979456773055f, - -0.7783801302908309f, - -0.7784623015670236f, - -0.7785444595044746f, - -0.7786266041017765f, - -0.778708735357522f, - -0.7787908532703043f, - -0.778872957838715f, - -0.7789550490613482f, - -0.7790371269367969f, - -0.7791191914636555f, - -0.7792012426405167f, - -0.7792832804659752f, - -0.7793653049386251f, - -0.7794473160570616f, - -0.7795293138198784f, - -0.779611298225671f, - -0.7796932692730347f, - -0.7797752269605648f, - -0.7798571712868576f, - -0.7799391022505079f, - -0.780021019850113f, - -0.7801029240842675f, - -0.7801848149515703f, - -0.7802666924506165f, - -0.7803485565800042f, - -0.7804304073383292f, - -0.7805122447241911f, - -0.780594068736186f, - -0.7806758793729129f, - -0.7807576766329686f, - -0.7808394605149533f, - -0.7809212310174644f, - -0.7810029881391017f, - -0.7810847318784633f, - -0.7811664622341489f, - -0.7812481792047583f, - -0.7813298827888917f, - -0.7814115729851482f, - -0.7814932497921284f, - -0.781574913208433f, - -0.7816565632326631f, - -0.7817381998634186f, - -0.7818198230993012f, - -0.7819014329389125f, - -0.7819830293808544f, - -0.7820646124237278f, - -0.782146182066136f, - -0.7822277383066795f, - -0.7823092811439631f, - -0.7823908105765881f, - -0.7824723266031578f, - -0.7825538292222757f, - -0.7826353184325456f, - -0.7827167942325702f, - -0.782798256620954f, - -0.7828797055963013f, - -0.7829611411572167f, - -0.783042563302304f, - -0.7831239720301685f, - -0.7832053673394159f, - -0.7832867492286504f, - -0.7833681176964781f, - -0.7834494727415046f, - -0.7835308143623366f, - -0.7836121425575788f, - -0.7836934573258396f, - -0.7837747586657243f, - -0.7838560465758407f, - -0.7839373210547945f, - -0.7840185821011952f, - -0.7840998297136488f, - -0.784181063890764f, - -0.7842622846311481f, - -0.7843434919334099f, - -0.7844246857961578f, - -0.7845058662180011f, - -0.784587033197548f, - -0.7846681867334078f, - -0.7847493268241903f, - -0.7848304534685057f, - -0.7849115666649626f, - -0.7849926664121726f, - -0.7850737527087441f, - -0.7851548255532902f, - -0.7852358849444198f, - -0.7853169308807453f, - -0.7853979633608761f, - -0.7854789823834262f, - -0.7855599879470055f, - -0.7856409800502273f, - -0.785721958691702f, - -0.7858029238700444f, - -0.7858838755838653f, - -0.785964813831779f, - -0.7860457386123972f, - -0.7861266499243341f, - -0.7862075477662034f, - -0.7862884321366186f, - -0.7863693030341945f, - -0.7864501604575443f, - -0.7865310044052831f, - -0.7866118348760257f, - -0.7866926518683875f, - -0.7867734553809828f, - -0.7868542454124273f, - -0.786935021961337f, - -0.7870157850263282f, - -0.787096534606016f, - -0.7871772706990173f, - -0.7872579933039489f, - -0.7873387024194278f, - -0.7874193980440704f, - -0.7875000801764942f, - -0.7875807488153169f, - -0.7876614039591567f, - -0.7877420456066307f, - -0.7878226737563576f, - -0.7879032884069558f, - -0.7879838895570446f, - -0.7880644772052416f, - -0.7881450513501674f, - -0.7882256119904396f, - -0.7883061591246799f, - -0.7883866927515066f, - -0.7884672128695409f, - -0.7885477194774014f, - -0.7886282125737109f, - -0.7887086921570884f, - -0.7887891582261561f, - -0.7888696107795342f, - -0.7889500498158446f, - -0.7890304753337091f, - -0.7891108873317499f, - -0.7891912858085885f, - -0.7892716707628477f, - -0.7893520421931498f, - -0.7894324000981187f, - -0.789512744476376f, - -0.7895930753265457f, - -0.7896733926472514f, - -0.7897536964371175f, - -0.7898339866947667f, - -0.789914263418824f, - -0.7899945266079137f, - -0.7900747762606607f, - -0.7901550123756904f, - -0.7902352349516268f, - -0.7903154439870961f, - -0.7903956394807237f, - -0.790475821431136f, - -0.7905559898369583f, - -0.7906361446968171f, - -0.7907162860093393f, - -0.790796413773152f, - -0.7908765279868814f, - -0.7909566286491555f, - -0.7910367157586006f, - -0.7911167893138462f, - -0.7911968493135189f, - -0.7912768957562477f, - -0.7913569286406598f, - -0.7914369479653857f, - -0.7915169537290527f, - -0.7915969459302912f, - -0.7916769245677288f, - -0.7917568896399971f, - -0.7918368411457247f, - -0.7919167790835423f, - -0.7919967034520794f, - -0.7920766142499669f, - -0.7921565114758357f, - -0.7922363951283171f, - -0.7923162652060415f, - -0.7923961217076406f, - -0.7924759646317463f, - -0.7925557939769909f, - -0.7926356097420056f, - -0.7927154119254234f, - -0.7927952005258766f, - -0.7928749755419988f, - -0.792954736972422f, - -0.7930344848157801f, - -0.7931142190707064f, - -0.7931939397358354f, - -0.7932736468098f, - -0.7933533402912349f, - -0.7934330201787748f, - -0.7935126864710548f, - -0.7935923391667086f, - -0.7936719782643722f, - -0.7937516037626813f, - -0.79383121566027f, - -0.7939108139557766f, - -0.793990398647835f, - -0.7940699697350833f, - -0.794149527216156f, - -0.7942290710896921f, - -0.7943086013543271f, - -0.7943881180086995f, - -0.7944676210514449f, - -0.7945471104812033f, - -0.7946265862966111f, - -0.7947060484963077f, - -0.7947854970789301f, - -0.7948649320431179f, - -0.7949443533875098f, - -0.7950237611107455f, - -0.7951031552114632f, - -0.7951825356883032f, - -0.7952619025399054f, - -0.7953412557649101f, - -0.7954205953619568f, - -0.7954999213296865f, - -0.79557923366674f, - -0.7956585323717587f, - -0.7957378174433829f, - -0.7958170888802552f, - -0.7958963466810155f, - -0.795975590844308f, - -0.7960548213687734f, - -0.7961340382530548f, - -0.7962132414957936f, - -0.7962924310956347f, - -0.7963716070512197f, - -0.7964507693611922f, - -0.7965299180241959f, - -0.7966090530388753f, - -0.7966881744038732f, - -0.7967672821178344f, - -0.7968463761794041f, - -0.7969254565872259f, - -0.7970045233399452f, - -0.7970835764362074f, - -0.7971626158746584f, - -0.7972416416539427f, - -0.797320653772707f, - -0.7973996522295972f, - -0.7974786370232604f, - -0.797557608152342f, - -0.7976365656154895f, - -0.7977155094113498f, - -0.7977944395385711f, - -0.7978733559957996f, - -0.7979522587816836f, - -0.7980311478948713f, - -0.7981100233340115f, - -0.7981888850977514f, - -0.7982677331847404f, - -0.7983465675936275f, - -0.7984253883230624f, - -0.7985041953716935f, - -0.7985829887381714f, - -0.7986617684211444f, - -0.798740534419265f, - -0.7988192867311816f, - -0.7988980253555461f, - -0.7989767502910078f, - -0.7990554615362198f, - -0.7991341590898318f, - -0.7992128429504963f, - -0.7992915131168636f, - -0.799370169587588f, - -0.7994488123613198f, - -0.7995274414367127f, - -0.7996060568124185f, - -0.7996846584870905f, - -0.7997632464593819f, - -0.7998418207279466f, - -0.7999203812914374f, - -0.7999989281485085f, - -0.8000774612978141f, - -0.8001559807380085f, - -0.800234486467747f, - -0.8003129784856831f, - -0.8003914567904725f, - -0.8004699213807707f, - -0.8005483722552335f, - -0.8006268094125156f, - -0.8007052328512737f, - -0.8007836425701639f, - -0.8008620385678433f, - -0.8009404208429676f, - -0.801018789394194f, - -0.80109714422018f, - -0.8011754853195833f, - -0.8012538126910606f, - -0.8013321263332708f, - -0.8014104262448704f, - -0.8014887124245199f, - -0.8015669848708764f, - -0.8016452435825997f, - -0.8017234885583472f, - -0.8018017197967805f, - -0.8018799372965573f, - -0.8019581410563386f, - -0.8020363310747827f, - -0.802114507350552f, - -0.8021926698823054f, - -0.8022708186687048f, - -0.8023489537084098f, - -0.8024270750000821f, - -0.8025051825423835f, - -0.8025832763339759f, - -0.80266135637352f, - -0.8027394226596787f, - -0.8028174751911143f, - -0.8028955139664898f, - -0.8029735389844671f, - -0.8030515502437098f, - -0.803129547742881f, - -0.803207531480645f, - -0.8032855014556645f, - -0.8033634576666038f, - -0.8034414001121273f, - -0.8035193287909f, - -0.8035972437015857f, - -0.8036751448428496f, - -0.803753032213357f, - -0.8038309058117739f, - -0.8039087656367648f, - -0.8039866116869964f, - -0.8040644439611344f, - -0.8041422624578454f, - -0.8042200671757965f, - -0.8042978581136536f, - -0.8043756352700847f, - -0.8044533986437554f, - -0.8045311482333357f, - -0.8046088840374915f, - -0.804686606054892f, - -0.8047643142842038f, - -0.8048420087240976f, - -0.8049196893732404f, - -0.8049973562303024f, - -0.8050750092939511f, - -0.8051526485628581f, - -0.8052302740356915f, - -0.8053078857111221f, - -0.8053854835878191f, - -0.8054630676644535f, - -0.8055406379396959f, - -0.8056181944122176f, - -0.8056957370806885f, - -0.8057732659437807f, - -0.8058507810001657f, - -0.8059282822485159f, - -0.806005769687502f, - -0.8060832433157977f, - -0.8061607031320737f, - -0.8062381491350048f, - -0.8063155813232625f, - -0.8063929996955211f, - -0.8064704042504526f, - -0.8065477949867326f, - -0.8066251719030334f, - -0.8067025349980298f, - -0.8067798842703963f, - -0.8068572197188079f, - -0.8069345413419384f, - -0.8070118491384637f, - -0.8070891431070595f, - -0.8071664232464003f, - -0.8072436895551626f, - -0.8073209420320222f, - -0.8073981806756562f, - -0.80747540548474f, - -0.8075526164579507f, - -0.8076298135939657f, - -0.8077069968914624f, - -0.807784166349117f, - -0.8078613219656091f, - -0.8079384637396152f, - -0.8080155916698145f, - -0.8080927057548845f, - -0.8081698059935042f, - -0.8082468923843527f, - -0.8083239649261095f, - -0.808401023617453f, - -0.8084780684570635f, - -0.8085550994436206f, - -0.808632116575805f, - -0.8087091198522961f, - -0.8087861092717749f, - -0.8088630848329222f, - -0.8089400465344196f, - -0.8090169943749473f, - -0.8090939283531879f, - -0.8091708484678216f, - -0.8092477547175325f, - -0.8093246471010012f, - -0.8094015256169113f, - -0.8094783902639437f, - -0.8095552410407837f, - -0.8096320779461129f, - -0.8097089009786157f, - -0.8097857101369746f, - -0.8098625054198743f, - -0.8099392868259986f, - -0.8100160543540326f, - -0.8100928080026598f, - -0.8101695477705657f, - -0.8102462736564352f, - -0.8103229856589537f, - -0.8103996837768073f, - -0.8104763680086806f, - -0.8105530383532605f, - -0.810629694809233f, - -0.8107063373752852f, - -0.8107829660501027f, - -0.8108595808323733f, - -0.810936181720784f, - -0.8110127687140227f, - -0.8110893418107763f, - -0.8111659010097331f, - -0.8112424463095814f, - -0.8113189777090101f, - -0.8113954952067066f, - -0.8114719988013607f, - -0.8115484884916612f, - -0.8116249642762982f, - -0.8117014261539601f, - -0.8117778741233379f, - -0.8118543081831201f, - -0.8119307283319992f, - -0.812007134568664f, - -0.8120835268918065f, - -0.8121599053001161f, - -0.8122362697922861f, - -0.8123126203670066f, - -0.8123889570229703f, - -0.8124652797588677f, - -0.8125415885733931f, - -0.8126178834652373f, - -0.8126941644330942f, - -0.8127704314756555f, - -0.8128466845916151f, - -0.8129229237796665f, - -0.8129991490385036f, - -0.8130753603668194f, - -0.8131515577633085f, - -0.8132277412266654f, - -0.8133039107555853f, - -0.8133800663487618f, - -0.8134562080048906f, - -0.813532335722667f, - -0.8136084495007871f, - -0.8136845493379459f, - -0.8137606352328396f, - -0.8138367071841647f, - -0.8139127651906177f, - -0.8139888092508959f, - -0.8140648393636952f, - -0.8141408555277134f, - -0.8142168577416481f, - -0.8142928460041973f, - -0.8143688203140581f, - -0.8144447806699296f, - -0.8145207270705089f, - -0.8145966595144967f, - -0.8146725780005901f, - -0.8147484825274897f, - -0.814824373093893f, - -0.8149002496985018f, - -0.8149761123400145f, - -0.8150519610171322f, - -0.8151277957285538f, - -0.8152036164729818f, - -0.8152794232491155f, - -0.8153552160556571f, - -0.8154309948913069f, - -0.8155067597547668f, - -0.8155825106447387f, - -0.8156582475599252f, - -0.8157339704990274f, - -0.8158096794607484f, - -0.8158853744437911f, - -0.8159610554468586f, - -0.8160367224686536f, - -0.8161123755078796f, - -0.8161880145632406f, - -0.816263639633441f, - -0.8163392507171839f, - -0.8164148478131743f, - -0.816490430920117f, - -0.8165660000367171f, - -0.8166415551616789f, - -0.8167170962937083f, - -0.8167926234315108f, - -0.816868136573793f, - -0.8169436357192599f, - -0.8170191208666182f, - -0.8170945920145746f, - -0.8171700491618364f, - -0.8172454923071097f, - -0.8173209214491023f, - -0.8173963365865222f, - -0.8174717377180758f, - -0.8175471248424729f, - -0.8176224979584205f, - -0.8176978570646278f, - -0.8177732021598023f, - -0.817848533242655f, - -0.8179238503118935f, - -0.8179991533662283f, - -0.8180744424043681f, - -0.8181497174250233f, - -0.8182249784269041f, - -0.8183002254087215f, - -0.8183754583691851f, - -0.8184506773070064f, - -0.8185258822208963f, - -0.818601073109567f, - -0.8186762499717288f, - -0.8187514128060943f, - -0.8188265616113756f, - -0.8189016963862854f, - -0.8189768171295354f, - -0.8190519238398395f, - -0.819127016515909f, - -0.8192020951564595f, - -0.8192771597602028f, - -0.8193522103258538f, - -0.8194272468521251f, - -0.819502269337733f, - -0.8195772777813902f, - -0.8196522721818128f, - -0.8197272525377141f, - -0.8198022188478113f, - -0.8198771711108186f, - -0.819952109325452f, - -0.8200270334904282f, - -0.820101943604462f, - -0.8201768396662706f, - -0.8202517216745707f, - -0.8203265896280797f, - -0.8204014435255136f, - -0.8204762833655904f, - -0.8205511091470278f, - -0.8206259208685441f, - -0.8207007185288565f, - -0.8207755021266837f, - -0.8208502716607444f, - -0.8209250271297581f, - -0.8209997685324427f, - -0.821074495867518f, - -0.8211492091337037f, - -0.82122390832972f, - -0.821298593454286f, - -0.8213732645061226f, - -0.8214479214839501f, - -0.8215225643864899f, - -0.821597193212462f, - -0.8216718079605887f, - -0.8217464086295899f, - -0.8218209952181894f, - -0.8218955677251076f, - -0.821970126149068f, - -0.8220446704887912f, - -0.822119200743002f, - -0.8221937169104221f, - -0.8222682189897753f, - -0.8223427069797838f, - -0.8224171808791731f, - -0.8224916406866659f, - -0.8225660864009869f, - -0.8226405180208599f, - -0.8227149355450097f, - -0.8227893389721616f, - -0.8228637283010407f, - -0.8229381035303718f, - -0.8230124646588808f, - -0.8230868116852934f, - -0.8231611446083366f, - -0.8232354634267353f, - -0.8233097681392167f, - -0.8233840587445078f, - -0.8234583352413359f, - -0.8235325976284275f, - -0.8236068459045104f, - -0.8236810800683125f, - -0.8237553001185619f, - -0.8238295060539873f, - -0.8239036978733161f, - -0.8239778755752777f, - -0.8240520391586009f, - -0.8241261886220157f, - -0.8242003239642502f, - -0.824274445184035f, - -0.8243485522800998f, - -0.8244226452511754f, - -0.8244967240959911f, - -0.8245707888132787f, - -0.8246448394017677f, - -0.8247188758601911f, - -0.8247928981872789f, - -0.8248669063817636f, - -0.8249409004423759f, - -0.8250148803678495f, - -0.8250888461569157f, - -0.8251627978083079f, - -0.8252367353207575f, - -0.8253106586929995f, - -0.8253845679237659f, - -0.8254584630117912f, - -0.8255323439558082f, - -0.8256062107545515f, - -0.8256800634067555f, - -0.8257539019111552f, - -0.8258277262664844f, - -0.8259015364714785f, - -0.825975332524873f, - -0.8260491144254037f, - -0.8261228821718056f, - -0.826196635762815f, - -0.8262703751971684f, - -0.8263441004736025f, - -0.8264178115908533f, - -0.8264915085476581f, - -0.8265651913427542f, - -0.8266388599748795f, - -0.8267125144427708f, - -0.8267861547451666f, - -0.8268597808808049f, - -0.8269333928484248f, - -0.8270069906467639f, - -0.8270805742745616f, - -0.8271541437305576f, - -0.8272276990134899f, - -0.8273012401221f, - -0.8273747670551264f, - -0.8274482798113102f, - -0.8275217783893902f, - -0.8275952627881091f, - -0.8276687330062062f, - -0.8277421890424238f, - -0.8278156308955016f, - -0.8278890585641832f, - -0.8279624720472089f, - -0.8280358713433218f, - -0.8281092564512633f, - -0.8281826273697763f, - -0.8282559840976039f, - -0.8283293266334893f, - -0.8284026549761752f, - -0.8284759691244052f, - -0.8285492690769234f, - -0.8286225548324742f, - -0.8286958263898009f, - -0.8287690837476483f, - -0.8288423269047617f, - -0.828915555859886f, - -0.8289887706117658f, - -0.8290619711591474f, - -0.829135157500775f, - -0.8292083296353969f, - -0.8292814875617576f, - -0.8293546312786044f, - -0.8294277607846827f, - -0.8295008760787415f, - -0.8295739771595262f, - -0.829647064025785f, - -0.829720136676266f, - -0.8297931951097162f, - -0.829866239324884f, - -0.8299392693205182f, - -0.8300122850953676f, - -0.8300852866481803f, - -0.8301582739777058f, - -0.8302312470826936f, - -0.8303042059618937f, - -0.8303771506140551f, - -0.8304500810379284f, - -0.830522997232264f, - -0.8305958991958127f, - -0.8306687869273247f, - -0.8307416604255514f, - -0.8308145196892442f, - -0.8308873647171552f, - -0.8309601955080351f, - -0.8310330120606366f, - -0.8311058143737119f, - -0.8311786024460142f, - -0.8312513762762951f, - -0.8313241358633083f, - -0.831396881205807f, - -0.8314696123025452f, - -0.8315423291522759f, - -0.8316150317537537f, - -0.8316877201057318f, - -0.8317603942069665f, - -0.8318330540562109f, - -0.8319056996522213f, - -0.8319783309937512f, - -0.8320509480795582f, - -0.8321235509083964f, - -0.8321961394790229f, - -0.8322687137901925f, - -0.8323412738406634f, - -0.832413819629191f, - -0.8324863511545332f, - -0.8325588684154461f, - -0.8326313714106878f, - -0.8327038601390159f, - -0.8327763345991888f, - -0.8328487947899637f, - -0.8329212407100994f, - -0.8329936723583548f, - -0.8330660897334886f, - -0.8331384928342606f, - -0.8332108816594289f, - -0.833283256207754f, - -0.8333556164779956f, - -0.8334279624689144f, - -0.8335002941792696f, - -0.8335726116078226f, - -0.833644914753334f, - -0.8337172036145656f, - -0.8337894781902775f, - -0.8338617384792321f, - -0.833933984480191f, - -0.8340062161919168f, - -0.834078433613171f, - -0.8341506367427172f, - -0.8342228255793164f, - -0.8342950001217339f, - -0.8343671603687315f, - -0.8344393063190737f, - -0.8345114379715228f, - -0.834583555324845f, - -0.8346556583778028f, - -0.8347277471291619f, - -0.8347998215776856f, - -0.8348718817221409f, - -0.8349439275612915f, - -0.835015959093904f, - -0.8350879763187432f, - -0.8351599792345754f, - -0.8352319678401671f, - -0.8353039421342852f, - -0.8353759021156952f, - -0.835447847783165f, - -0.8355197791354616f, - -0.835591696171353f, - -0.835663598889606f, - -0.8357354872889888f, - -0.83580736136827f, - -0.8358792211262183f, - -0.8359510665616016f, - -0.836022897673189f, - -0.83609471445975f, - -0.8361665169200544f, - -0.836238305052871f, - -0.8363100788569702f, - -0.836381838331122f, - -0.836453583474097f, - -0.8365253142846665f, - -0.8365970307616f, - -0.8366687329036695f, - -0.8367404207096463f, - -0.8368120941783025f, - -0.8368837533084091f, - -0.8369553980987392f, - -0.8370270285480637f, - -0.837098644655157f, - -0.8371702464187908f, - -0.8372418338377391f, - -0.8373134069107738f, - -0.8373849656366704f, - -0.8374565100142014f, - -0.8375280400421419f, - -0.8375995557192651f, - -0.8376710570443463f, - -0.8377425440161601f, - -0.8378140166334823f, - -0.8378854748950872f, - -0.8379569187997509f, - -0.8380283483462491f, - -0.8380997635333585f, - -0.8381711643598543f, - -0.8382425508245137f, - -0.8383139229261135f, - -0.8383852806634311f, - -0.838456624035243f, - -0.8385279530403276f, - -0.8385992676774613f, - -0.8386705679454242f, - -0.8387418538429928f, - -0.8388131253689465f, - -0.8388843825220638f, - -0.8389556253011243f, - -0.8390268537049065f, - -0.8390980677321901f, - -0.839169267381755f, - -0.8392404526523818f, - -0.8393116235428495f, - -0.8393827800519394f, - -0.8394539221784326f, - -0.8395250499211092f, - -0.8395961632787509f, - -0.8396672622501391f, - -0.8397383468340561f, - -0.8398094170292829f, - -0.8398804728346022f, - -0.8399515142487965f, - -0.8400225412706491f, - -0.8400935538989414f, - -0.8401645521324586f, - -0.8402355359699826f, - -0.8403065054102983f, - -0.8403774604521884f, - -0.8404484010944379f, - -0.840519327335831f, - -0.8405902391751531f, - -0.8406611366111879f, - -0.8407320196427214f, - -0.8408028882685388f, - -0.8408737424874263f, - -0.840944582298169f, - -0.8410154076995534f, - -0.8410862186903661f, - -0.8411570152693941f, - -0.8412277974354234f, - -0.8412985651872421f, - -0.8413693185236363f, - -0.8414400574433955f, - -0.841510781945306f, - -0.8415814920281572f, - -0.8416521876907359f, - -0.8417228689318328f, - -0.8417935357502352f, - -0.8418641881447332f, - -0.8419348261141154f, - -0.8420054496571717f, - -0.8420760587726922f, - -0.8421466534594669f, - -0.8422172337162867f, - -0.8422877995419412f, - -0.8423583509352218f, - -0.8424288878949197f, - -0.8424994104198267f, - -0.8425699185087333f, - -0.8426404121604321f, - -0.842710891373715f, - -0.8427813561473749f, - -0.8428518064802036f, - -0.8429222423709942f, - -0.84299266381854f, - -0.8430630708216347f, - -0.8431334633790709f, - -0.843203841489643f, - -0.8432742051521451f, - -0.843344554365372f, - -0.8434148891281174f, - -0.8434852094391764f, - -0.8435555152973443f, - -0.8436258067014167f, - -0.8436960836501884f, - -0.8437663461424562f, - -0.8438365941770146f, - -0.8439068277526619f, - -0.8439770468681932f, - -0.8440472515224062f, - -0.8441174417140968f, - -0.8441876174420639f, - -0.8442577787051039f, - -0.8443279255020153f, - -0.8443980578315948f, - -0.8444681756926428f, - -0.8445382790839563f, - -0.8446083680043349f, - -0.8446784424525768f, - -0.8447485024274819f, - -0.8448185479278496f, - -0.8448885789524802f, - -0.8449585955001727f, - -0.845028597569728f, - -0.8450985851599466f, - -0.8451685582696297f, - -0.8452385168975773f, - -0.8453084610425915f, - -0.8453783907034734f, - -0.8454483058790255f, - -0.8455182065680489f, - -0.8455880927693461f, - -0.8456579644817199f, - -0.8457278217039729f, - -0.8457976644349087f, - -0.8458674926733294f, - -0.8459373064180392f, - -0.8460071056678418f, - -0.8460768904215417f, - -0.8461466606779422f, - -0.8462164164358487f, - -0.8462861576940646f, - -0.8463558844513966f, - -0.846425596706649f, - -0.8464952944586277f, - -0.8465649777061374f, - -0.8466346464479858f, - -0.8467043006829779f, - -0.8467739404099208f, - -0.8468435656276203f, - -0.8469131763348848f, - -0.8469827725305206f, - -0.8470523542133357f, - -0.8471219213821372f, - -0.8471914740357334f, - -0.8472610121729325f, - -0.8473305357925436f, - -0.8474000448933744f, - -0.8474695394742343f, - -0.8475390195339327f, - -0.8476084850712794f, - -0.8476779360850832f, - -0.8477473725741547f, - -0.8478167945373039f, - -0.8478862019733417f, - -0.8479555948810782f, - -0.8480249732593247f, - -0.8480943371068923f, - -0.8481636864225931f, - -0.8482330212052377f, - -0.8483023414536387f, - -0.8483716471666083f, - -0.8484409383429593f, - -0.8485102149815036f, - -0.8485794770810546f, - -0.8486487246404261f, - -0.8487179576584303f, - -0.8487871761338817f, - -0.8488563800655942f, - -0.8489255694523823f, - -0.8489947442930592f, - -0.8490639045864415f, - -0.8491330503313428f, - -0.849202181526579f, - -0.8492712981709644f, - -0.8493404002633165f, - -0.8494094878024497f, - -0.8494785607871814f, - -0.8495476192163269f, - -0.8496166630887035f, - -0.8496856924031282f, - -0.8497547071584184f, - -0.849823707353391f, - -0.8498926929868638f, - -0.8499616640576549f, - -0.8500306205645831f, - -0.8500995625064658f, - -0.850168489882122f, - -0.850237402690371f, - -0.8503063009300321f, - -0.8503751845999241f, - -0.8504440536988676f, - -0.8505129082256809f, - -0.8505817481791863f, - -0.8506505735582027f, - -0.8507193843615519f, - -0.8507881805880533f, - -0.85085696223653f, - -0.850925729305802f, - -0.8509944817946921f, - -0.8510632197020207f, - -0.8511319430266119f, - -0.8512006517672867f, - -0.8512693459228683f, - -0.8513380254921801f, - -0.8514066904740443f, - -0.8514753408672849f, - -0.8515439766707257f, - -0.8516125978831908f, - -0.8516812045035037f, - -0.8517497965304893f, - -0.8518183739629722f, - -0.851886936799778f, - -0.8519554850397306f, - -0.8520240186816563f, - -0.8520925377243805f, - -0.8521610421667298f, - -0.8522295320075294f, - -0.8522980072456062f, - -0.8523664678797869f, - -0.8524349139088989f, - -0.8525033453317685f, - -0.8525717621472236f, - -0.8526401643540918f, - -0.8527085519512018f, - -0.8527769249373806f, - -0.8528452833114575f, - -0.85291362707226f, - -0.8529819562186189f, - -0.853050270749362f, - -0.8531185706633195f, - -0.85318685595932f, - -0.8532551266361951f, - -0.8533233826927736f, - -0.8533916241278869f, - -0.8534598509403645f, - -0.853528063129039f, - -0.8535962606927402f, - -0.8536644436303006f, - -0.8537326119405508f, - -0.8538007656223234f, - -0.8538689046744506f, - -0.8539370290957653f, - -0.8540051388850992f, - -0.8540732340412858f, - -0.8541413145631582f, - -0.8542093804495504f, - -0.8542774316992952f, - -0.854345468311227f, - -0.85441349028418f, - -0.8544814976169888f, - -0.8545494903084883f, - -0.8546174683575127f, - -0.8546854317628977f, - -0.8547533805234787f, - -0.854821314638092f, - -0.8548892341055724f, - -0.8549571389247568f, - -0.8550250290944816f, - -0.855092904613584f, - -0.8551607654809f, - -0.8552286116952674f, - -0.8552964432555235f, - -0.8553642601605066f, - -0.8554320624090538f, - -0.8554998500000041f, - -0.8555676229321946f, - -0.855635381204466f, - -0.8557031248156559f, - -0.8557708537646044f, - -0.8558385680501496f, - -0.855906267671133f, - -0.8559739526263932f, - -0.8560416229147716f, - -0.8561092785351075f, - -0.8561769194862422f, - -0.8562445457670168f, - -0.8563121573762728f, - -0.8563797543128508f, - -0.8564473365755932f, - -0.8565149041633419f, - -0.8565824570749394f, - -0.8566499953092276f, - -0.8567175188650495f, - -0.8567850277412482f, - -0.8568525219366674f, - -0.8569200014501496f, - -0.8569874662805391f, - -0.85705491642668f, - -0.8571223518874167f, - -0.8571897726615931f, - -0.8572571787480544f, - -0.8573245701456454f, - -0.8573919468532121f, - -0.8574593088695989f, - -0.8575266561936521f, - -0.8575939888242178f, - -0.8576613067601421f, - -0.857728610000272f, - -0.8577958985434535f, - -0.8578631723885345f, - -0.8579304315343609f, - -0.857997675979782f, - -0.8580649057236444f, - -0.8581321207647967f, - -0.8581993211020862f, - -0.858266506734363f, - -0.8583336776604747f, - -0.8584008338792711f, - -0.8584679753896003f, - -0.8585351021903135f, - -0.8586022142802593f, - -0.8586693116582885f, - -0.8587363943232506f, - -0.8588034622739965f, - -0.8588705155093772f, - -0.858937554028244f, - -0.8590045778294475f, - -0.8590715869118396f, - -0.8591385812742721f, - -0.8592055609155976f, - -0.8592725258346675f, - -0.8593394760303349f, - -0.8594064115014524f, - -0.8594733322468737f, - -0.8595402382654512f, - -0.8596071295560395f, - -0.8596740061174908f, - -0.8597408679486612f, - -0.8598077150484037f, - -0.8598745474155732f, - -0.8599413650490247f, - -0.8600081679476137f, - -0.8600749561101946f, - -0.8601417295356235f, - -0.8602084882227566f, - -0.8602752321704493f, - -0.8603419613775584f, - -0.8604086758429402f, - -0.8604753755654524f, - -0.860542060543951f, - -0.8606087307772939f, - -0.8606753862643387f, - -0.8607420270039438f, - -0.8608086529949662f, - -0.8608752642362649f, - -0.8609418607266986f, - -0.8610084424651266f, - -0.861075009450407f, - -0.8611415616813999f, - -0.8612080991569646f, - -0.8612746218759617f, - -0.8613411298372504f, - -0.8614076230396915f, - -0.8614741014821459f, - -0.8615405651634745f, - -0.8616070140825379f, - -0.8616734482381979f, - -0.8617398676293162f, - -0.861806272254755f, - -0.8618726621133759f, - -0.8619390372040419f, - -0.8620053975256144f, - -0.8620717430769583f, - -0.8621380738569353f, - -0.8622043898644098f, - -0.8622706910982442f, - -0.862336977557304f, - -0.8624032492404522f, - -0.8624695061465543f, - -0.8625357482744733f, - -0.8626019756230764f, - -0.8626681881912271f, - -0.8627343859777921f, - -0.8628005689816358f, - -0.862866737201625f, - -0.8629328906366256f, - -0.8629990292855049f, - -0.8630651531471284f, - -0.8631312622203636f, - -0.863197356504078f, - -0.8632634359971388f, - -0.8633295006984143f, - -0.8633955506067716f, - -0.8634615857210793f, - -0.8635276060402062f, - -0.8635936115630212f, - -0.8636596022883926f, - -0.8637255782151899f, - -0.8637915393422828f, - -0.8638574856685416f, - -0.8639234171928352f, - -0.8639893339140345f, - -0.86405523583101f, - -0.8641211229426329f, - -0.8641869952477733f, - -0.8642528527453035f, - -0.8643186954340937f, - -0.8643845233130174f, - -0.8644503363809454f, - -0.8645161346367508f, - -0.864581918079305f, - -0.8646476867074825f, - -0.8647134405201549f, - -0.8647791795161966f, - -0.86484490369448f, - -0.8649106130538803f, - -0.8649763075932705f, - -0.8650419873115258f, - -0.86510765220752f, - -0.8651733022801282f, - -0.8652389375282257f, - -0.8653045579506881f, - -0.8653701635463902f, - -0.8654357543142084f, - -0.8655013302530188f, - -0.8655668913616981f, - -0.8656324376391221f, - -0.8656979690841683f, - -0.8657634856957135f, - -0.8658289874726358f, - -0.8658944744138118f, - -0.86595994651812f, - -0.8660254037844385f, - -0.866090846211646f, - -0.8661562737986204f, - -0.866221686544241f, - -0.8662870844473872f, - -0.8663524675069382f, - -0.8664178357217741f, - -0.866483189090774f, - -0.8665485276128185f, - -0.8666138512867883f, - -0.8666791601115641f, - -0.8667444540860263f, - -0.8668097332090569f, - -0.8668749974795359f, - -0.866940246896347f, - -0.8670054814583708f, - -0.8670707011644903f, - -0.8671359060135866f, - -0.8672010960045443f, - -0.8672662711362452f, - -0.8673314314075732f, - -0.867396576817411f, - -0.8674617073646429f, - -0.8675268230481527f, - -0.8675919238668252f, - -0.867657009819544f, - -0.8677220809051944f, - -0.8677871371226614f, - -0.8678521784708306f, - -0.8679172049485868f, - -0.8679822165548161f, - -0.8680472132884047f, - -0.8681121951482393f, - -0.8681771621332054f, - -0.8682421142421909f, - -0.8683070514740814f, - -0.8683719738277661f, - -0.8684368813021311f, - -0.8685017738960649f, - -0.8685666516084554f, - -0.8686315144381913f, - -0.8686963623841605f, - -0.8687611954452522f, - -0.8688260136203556f, - -0.8688908169083603f, - -0.8689556053081552f, - -0.8690203788186306f, - -0.869085137438677f, - -0.869149881167184f, - -0.8692146100030425f, - -0.8692793239451435f, - -0.8693440229923786f, - -0.8694087071436378f, - -0.8694733763978145f, - -0.8695380307537995f, - -0.8696026702104857f, - -0.8696672947667641f, - -0.8697319044215293f, - -0.8697964991736727f, - -0.8698610790220888f, - -0.8699256439656696f, - -0.8699901940033097f, - -0.8700547291339027f, - -0.8701192493563435f, - -0.8701837546695256f, - -0.8702482450723442f, - -0.8703127205636941f, - -0.8703771811424712f, - -0.87044162680757f, - -0.8705060575578871f, - -0.8705704733923172f, - -0.8706348743097583f, - -0.8706992603091056f, - -0.8707636313892567f, - -0.8708279875491075f, - -0.8708923287875567f, - -0.8709566551035008f, - -0.8710209664958383f, - -0.871085262963466f, - -0.8711495445052839f, - -0.8712138111201894f, - -0.8712780628070819f, - -0.8713422995648598f, - -0.8714065213924227f, - -0.8714707282886704f, - -0.8715349202525026f, - -0.8715990972828198f, - -0.8716632593785215f, - -0.8717274065385088f, - -0.8717915387616824f, - -0.8718556560469439f, - -0.871919758393194f, - -0.8719838457993345f, - -0.8720479182642674f, - -0.8721119757868953f, - -0.8721760183661196f, - -0.8722400460008435f, - -0.8723040586899699f, - -0.8723680564324022f, - -0.8724320392270433f, - -0.872496007072797f, - -0.8725599599685673f, - -0.8726238979132588f, - -0.8726878209057752f, - -0.8727517289450216f, - -0.8728156220299029f, - -0.8728795001593247f, - -0.8729433633321917f, - -0.8730072115474103f, - -0.8730710448038855f, - -0.873134863100525f, - -0.8731986664362341f, - -0.8732624548099204f, - -0.8733262282204896f, - -0.8733899866668506f, - -0.8734537301479097f, - -0.8735174586625756f, - -0.8735811722097554f, - -0.8736448707883578f, - -0.8737085543972914f, - -0.8737722230354654f, - -0.873835876701788f, - -0.8738995153951689f, - -0.8739631391145176f, - -0.8740267478587446f, - -0.8740903416267589f, - -0.8741539204174713f, - -0.8742174842297925f, - -0.8742810330626337f, - -0.8743445669149053f, - -0.8744080857855188f, - -0.874471589673386f, - -0.8745350785774187f, - -0.8745985524965297f, - -0.8746620114296302f, - -0.8747254553756335f, - -0.8747888843334525f, - -0.8748522983020006f, - -0.8749156972801906f, - -0.8749790812669365f, - -0.8750424502611521f, - -0.8751058042617522f, - -0.8751691432676504f, - -0.8752324672777622f, - -0.8752957762910012f, - -0.8753590703062843f, - -0.8754223493225259f, - -0.8754856133386426f, - -0.8755488623535489f, - -0.8756120963661628f, - -0.8756753153753996f, - -0.8757385193801768f, - -0.8758017083794103f, - -0.8758648823720189f, - -0.8759280413569189f, - -0.8759911853330291f, - -0.8760543142992666f, - -0.87611742825455f, - -0.8761805271977979f, - -0.8762436111279298f, - -0.8763066800438636f, - -0.8763697339445192f, - -0.8764327728288162f, - -0.8764957966956748f, - -0.8765588055440143f, - -0.8766217993727554f, - -0.8766847781808189f, - -0.876747741967126f, - -0.876810690730597f, - -0.8768736244701536f, - -0.8769365431847176f, - -0.8769994468732113f, - -0.8770623355345559f, - -0.8771252091676744f, - -0.8771880677714894f, - -0.8772509113449243f, - -0.8773137398869013f, - -0.8773765533963445f, - -0.8774393518721778f, - -0.8775021353133245f, - -0.8775649037187092f, - -0.8776276570872563f, - -0.8776903954178911f, - -0.8777531187095372f, - -0.8778158269611216f, - -0.8778785201715685f, - -0.8779411983398046f, - -0.8780038614647546f, - -0.8780665095453465f, - -0.8781291425805055f, - -0.8781917605691593f, - -0.8782543635102341f, - -0.8783169514026576f, - -0.8783795242453576f, - -0.878442082037262f, - -0.8785046247772984f, - -0.8785671524643953f, - -0.8786296650974814f, - -0.878692162675486f, - -0.8787546451973374f, - -0.8788171126619653f, - -0.8788795650682993f, - -0.87894200241527f, - -0.8790044247018064f, - -0.8790668319268399f, - -0.8791292240892998f, - -0.879191601188119f, - -0.879253963222227f, - -0.8793163101905564f, - -0.8793786420920376f, - -0.8794409589256041f, - -0.879503260690187f, - -0.8795655473847196f, - -0.8796278190081332f, - -0.8796900755593627f, - -0.8797523170373399f, - -0.879814543440999f, - -0.8798767547692738f, - -0.8799389510210978f, - -0.8800011321954055f, - -0.8800632982911317f, - -0.8801254493072114f, - -0.8801875852425789f, - -0.8802497060961698f, - -0.88031181186692f, - -0.8803739025537654f, - -0.8804359781556415f, - -0.8804980386714848f, - -0.8805600841002322f, - -0.880622114440821f, - -0.8806841296921871f, - -0.8807461298532687f, - -0.8808081149230034f, - -0.8808700849003293f, - -0.8809320397841839f, - -0.8809939795735059f, - -0.8810559042672341f, - -0.881117813864308f, - -0.8811797083636657f, - -0.8812415877642474f, - -0.8813034520649919f, - -0.8813653012648407f, - -0.8814271353627326f, - -0.8814889543576092f, - -0.8815507582484099f, - -0.8816125470340773f, - -0.8816743207135516f, - -0.8817360792857748f, - -0.8817978227496878f, - -0.8818595511042342f, - -0.8819212643483549f, - -0.8819829624809935f, - -0.8820446455010919f, - -0.8821063134075935f, - -0.8821679661994418f, - -0.8822296038755807f, - -0.8822912264349534f, - -0.8823528338765041f, - -0.8824144261991775f, - -0.8824760034019185f, - -0.8825375654836711f, - -0.8825991124433811f, - -0.8826606442799936f, - -0.8827221609924545f, - -0.8827836625797101f, - -0.8828451490407055f, - -0.882906620374388f, - -0.8829680765797041f, - -0.8830295176556011f, - -0.8830909436010255f, - -0.883152354414925f, - -0.8832137500962477f, - -0.8832751306439417f, - -0.8833364960569546f, - -0.8833978463342352f, - -0.8834591814747325f, - -0.8835205014773958f, - -0.8835818063411734f, - -0.8836430960650161f, - -0.8837043706478721f, - -0.8837656300886934f, - -0.8838268743864289f, - -0.8838881035400301f, - -0.8839493175484466f, - -0.8840105164106312f, - -0.884071700125534f, - -0.8841328686921075f, - -0.8841940221093028f, - -0.8842551603760722f, - -0.8843162834913685f, - -0.8843773914541446f, - -0.8844384842633525f, - -0.884499561917946f, - -0.8845606244168784f, - -0.884621671759104f, - -0.8846827039435757f, - -0.8847437209692484f, - -0.8848047228350764f, - -0.8848657095400149f, - -0.8849266810830181f, - -0.8849876374630418f, - -0.8850485786790413f, - -0.885109504729973f, - -0.885170415614792f, - -0.8852313113324551f, - -0.8852921918819188f, - -0.8853530572621404f, - -0.8854139074720762f, - -0.8854747425106838f, - -0.8855355623769209f, - -0.8855963670697454f, - -0.885657156588116f, - -0.8857179309309898f, - -0.8857786900973267f, - -0.8858394340860842f, - -0.8859001628962231f, - -0.8859608765267017f, - -0.8860215749764804f, - -0.886082258244518f, - -0.8861429263297763f, - -0.8862035792312145f, - -0.8862642169477942f, - -0.8863248394784753f, - -0.8863854468222204f, - -0.8864460389779899f, - -0.8865066159447466f, - -0.8865671777214513f, - -0.886627724307067f, - -0.8866882557005563f, - -0.8867487719008822f, - -0.8868092729070071f, - -0.8868697587178945f, - -0.8869302293325084f, - -0.8869906847498128f, - -0.887051124968771f, - -0.8871115499883482f, - -0.8871719598075078f, - -0.8872323544252165f, - -0.887292733840438f, - -0.8873530980521387f, - -0.8874134470592829f, - -0.8874737808608384f, - -0.8875340994557699f, - -0.8875944028430444f, - -0.8876546910216285f, - -0.8877149639904898f, - -0.8877752217485946f, - -0.8878354642949108f, - -0.8878956916284065f, - -0.8879559037480491f, - -0.8880161006528072f, - -0.8880762823416493f, - -0.8881364488135446f, - -0.8881966000674614f, - -0.8882567361023694f, - -0.8883168569172383f, - -0.8883769625110381f, - -0.8884370528827379f, - -0.8884971280313096f, - -0.8885571879557228f, - -0.8886172326549489f, - -0.8886772621279584f, - -0.8887372763737231f, - -0.8887972753912147f, - -0.8888572591794055f, - -0.8889172277372669f, - -0.8889771810637717f, - -0.8890371191578927f, - -0.8890970420186033f, - -0.8891569496448758f, - -0.8892168420356842f, - -0.8892767191900023f, - -0.8893365811068045f, - -0.8893964277850641f, - -0.8894562592237567f, - -0.8895160754218557f, - -0.889575876378338f, - -0.8896356620921775f, - -0.8896954325623507f, - -0.8897551877878322f, - -0.8898149277675997f, - -0.8898746525006285f, - -0.8899343619858959f, - -0.8899940562223776f, - -0.8900537352090524f, - -0.8901133989448966f, - -0.8901730474288885f, - -0.8902326806600053f, - -0.8902922986372257f, - -0.890351901359528f, - -0.890411488825891f, - -0.8904710610352942f, - -0.8905306179867158f, - -0.890590159679136f, - -0.8906496861115343f, - -0.8907091972828913f, - -0.8907686931921864f, - -0.8908281738384007f, - -0.8908876392205148f, - -0.8909470893375103f, - -0.8910065241883678f, - -0.8910659437720692f, - -0.8911253480875964f, - -0.8911847371339318f, - -0.8912441109100572f, - -0.8913034694149554f, - -0.8913628126476095f, - -0.8914221406070031f, - -0.8914814532921187f, - -0.8915407507019408f, - -0.8916000328354523f, - -0.8916592996916389f, - -0.8917185512694839f, - -0.8917777875679727f, - -0.8918370085860894f, - -0.8918962143228205f, - -0.8919554047771507f, - -0.8920145799480663f, - -0.8920737398345523f, - -0.8921328844355967f, - -0.8921920137501845f, - -0.8922511277773038f, - -0.8923102265159405f, - -0.8923693099650827f, - -0.8924283781237178f, - -0.892487430990834f, - -0.892546468565419f, - -0.8926054908464612f, - -0.8926644978329497f, - -0.8927234895238734f, - -0.892782465918221f, - -0.8928414270149821f, - -0.8929003728131466f, - -0.8929593033117049f, - -0.8930182185096464f, - -0.8930771184059619f, - -0.8931360029996424f, - -0.8931948722896786f, - -0.8932537262750624f, - -0.8933125649547846f, - -0.8933713883278374f, - -0.8934301963932126f, - -0.8934889891499033f, - -0.8935477665969012f, - -0.8936065287331998f, - -0.8936652755577912f, - -0.8937240070696704f, - -0.8937827232678297f, - -0.8938414241512639f, - -0.893900109718966f, - -0.8939587799699321f, - -0.8940174349031556f, - -0.8940760745176322f, - -0.894134698812356f, - -0.8941933077863241f, - -0.8942519014385311f, - -0.8943104797679737f, - -0.8943690427736475f, - -0.8944275904545493f, - -0.8944861228096761f, - -0.8945446398380252f, - -0.8946031415385931f, - -0.894661627910378f, - -0.8947200989523775f, - -0.8947785546635902f, - -0.8948369950430137f, - -0.8948954200896471f, - -0.8949538298024892f, - -0.8950122241805396f, - -0.895070603222797f, - -0.8951289669282614f, - -0.8951873152959328f, - -0.8952456483248117f, - -0.895303966013898f, - -0.8953622683621927f, - -0.8954205553686967f, - -0.8954788270324119f, - -0.895537083352339f, - -0.8955953243274799f, - -0.895653549956837f, - -0.8957117602394129f, - -0.8957699551742093f, - -0.8958281347602296f, - -0.8958862989964772f, - -0.8959444478819547f, - -0.8960025814156662f, - -0.8960606995966155f, - -0.8961188024238071f, - -0.8961768898962444f, - -0.8962349620129336f, - -0.8962930187728785f, - -0.896351060175085f, - -0.8964090862185579f, - -0.8964670969023032f, - -0.8965250922253271f, - -0.896583072186636f, - -0.8966410367852359f, - -0.8966989860201338f, - -0.8967569198903368f, - -0.8968148383948528f, - -0.8968727415326883f, - -0.8969306293028517f, - -0.8969885017043511f, - -0.8970463587361952f, - -0.8971042003973919f, - -0.897162026686951f, - -0.8972198376038802f, - -0.8972776331471908f, - -0.8973354133158912f, - -0.897393178108992f, - -0.8974509275255024f, - -0.8975086615644343f, - -0.8975663802247974f, - -0.8976240835056035f, - -0.8976817714058627f, - -0.897739443924588f, - -0.89779710106079f, - -0.8978547428134818f, - -0.8979123691816746f, - -0.8979699801643816f, - -0.8980275757606155f, - -0.8980851559693895f, - -0.8981427207897175f, - -0.8982002702206122f, - -0.8982578042610879f, - -0.8983153229101588f, - -0.8983728261668397f, - -0.8984303140301445f, - -0.8984877864990887f, - -0.8985452435726874f, - -0.8986026852499565f, - -0.8986601115299109f, - -0.898717522411567f, - -0.8987749178939413f, - -0.8988322979760505f, - -0.8988896626569107f, - -0.8989470119355395f, - -0.899004345810954f, - -0.8990616642821723f, - -0.8991189673482115f, - -0.8991762550080902f, - -0.8992335272608266f, - -0.8992907841054398f, - -0.8993480255409481f, - -0.8994052515663712f, - -0.8994624621807277f, - -0.8995196573830385f, - -0.8995768371723227f, - -0.8996340015476012f, - -0.8996911505078933f, - -0.8997482840522214f, - -0.8998054021796054f, - -0.8998625048890673f, - -0.8999195921796278f, - -0.8999766640503093f, - -0.9000337205001339f, - -0.9000907615281241f, - -0.9001477871333019f, - -0.9002047973146905f, - -0.9002617920713132f, - -0.9003187714021936f, - -0.9003757353063548f, - -0.9004326837828209f, - -0.9004896168306163f, - -0.9005465344487659f, - -0.9006034366362934f, - -0.9006603233922243f, - -0.900717194715584f, - -0.9007740506053978f, - -0.900830891060692f, - -0.9008877160804919f, - -0.9009445256638241f, - -0.9010013198097153f, - -0.9010580985171928f, - -0.9011148617852827f, - -0.9011716096130129f, - -0.901228341999411f, - -0.9012850589435054f, - -0.9013417604443233f, - -0.9013984465008942f, - -0.9014551171122454f, - -0.9015117722774074f, - -0.9015684119954085f, - -0.9016250362652787f, - -0.9016816450860468f, - -0.9017382384567442f, - -0.9017948163764f, - -0.9018513788440459f, - -0.9019079258587112f, - -0.9019644574194285f, - -0.9020209735252283f, - -0.9020774741751426f, - -0.9021339593682028f, - -0.9021904291034414f, - -0.9022468833798907f, - -0.9023033221965837f, - -0.9023597455525527f, - -0.9024161534468313f, - -0.9024725458784528f, - -0.9025289228464516f, - -0.9025852843498606f, - -0.9026416303877146f, - -0.9026979609590482f, - -0.9027542760628965f, - -0.9028105756982937f, - -0.9028668598642756f, - -0.9029231285598779f, - -0.9029793817841366f, - -0.9030356195360871f, - -0.9030918418147663f, - -0.9031480486192108f, - -0.9032042399484579f, - -0.9032604158015439f, - -0.9033165761775067f, - -0.9033727210753845f, - -0.9034288504942138f, - -0.9034849644330347f, - -0.9035410628908845f, - -0.9035971458668026f, - -0.9036532133598271f, - -0.9037092653689985f, - -0.9037653018933555f, - -0.9038213229319385f, - -0.9038773284837867f, - -0.9039333185479417f, - -0.9039892931234431f, - -0.9040452522093326f, - -0.9041011958046506f, - -0.9041571239084389f, - -0.904213036519739f, - -0.9042689336375935f, - -0.9043248152610438f, - -0.9043806813891326f, - -0.9044365320209028f, - -0.9044923671553977f, - -0.9045481867916599f, - -0.9046039909287333f, - -0.9046597795656617f, - -0.9047155527014895f, - -0.9047713103352605f, - -0.9048270524660198f, - -0.9048827790928112f, - -0.9049384902146814f, - -0.9049941858306748f, - -0.9050498659398376f, - -0.9051055305412148f, - -0.9051611796338539f, - -0.9052168132168004f, - -0.9052724312891014f, - -0.9053280338498038f, - -0.9053836208979553f, - -0.9054391924326026f, - -0.9054947484527941f, - -0.905550288957578f, - -0.905605813946002f, - -0.9056613234171151f, - -0.905716817369966f, - -0.9057722958036044f, - -0.9058277587170788f, - -0.9058832061094392f, - -0.9059386379797356f, - -0.9059940543270186f, - -0.906049455150338f, - -0.9061048404487446f, - -0.9061602102212896f, - -0.9062155644670246f, - -0.9062709031850004f, - -0.906326226374269f, - -0.9063815340338826f, - -0.9064368261628939f, - -0.9064921027603546f, - -0.9065473638253181f, - -0.9066026093568375f, - -0.9066578393539664f, - -0.9067130538157577f, - -0.9067682527412664f, - -0.9068234361295451f, - -0.90687860397965f, - -0.9069337562906348f, - -0.906988893061555f, - -0.9070440142914646f, - -0.907099119979421f, - -0.9071542101244787f, - -0.9072092847256944f, - -0.9072643437821234f, - -0.9073193872928237f, - -0.907374415256851f, - -0.9074294276732632f, - -0.907484424541117f, - -0.9075394058594703f, - -0.9075943716273811f, - -0.9076493218439079f, - -0.9077042565081085f, - -0.9077591756190417f, - -0.9078140791757668f, - -0.9078689671773429f, - -0.9079238396228299f, - -0.9079786965112867f, - -0.908033537841774f, - -0.9080883636133519f, - -0.9081431738250814f, - -0.9081979684760225f, - -0.9082527475652368f, - -0.9083075110917856f, - -0.9083622590547311f, - -0.9084169914531343f, - -0.9084717082860577f, - -0.9085264095525638f, - -0.9085810952517157f, - -0.9086357653825757f, - -0.9086904199442076f, - -0.908745058935674f, - -0.9087996823560401f, - -0.9088542902043687f, - -0.908908882479725f, - -0.9089634591811724f, - -0.9090180203077772f, - -0.9090725658586034f, - -0.9091270958327172f, - -0.9091816102291831f, - -0.9092361090470685f, - -0.9092905922854384f, - -0.90934505994336f, - -0.9093995120198993f, - -0.9094539485141238f, - -0.9095083694251004f, - -0.9095627747518973f, - -0.9096171644935813f, - -0.909671538649221f, - -0.9097258972178847f, - -0.9097802401986411f, - -0.9098345675905587f, - -0.9098888793927067f, - -0.9099431756041545f, - -0.9099974562239723f, - -0.9100517212512291f, - -0.9101059706849955f, - -0.9101602045243421f, - -0.9102144227683397f, - -0.9102686254160588f, - -0.910322812466571f, - -0.9103769839189476f, - -0.9104311397722609f, - -0.9104852800255823f, - -0.9105394046779843f, - -0.9105935137285397f, - -0.9106476071763212f, - -0.9107016850204023f, - -0.9107557472598558f, - -0.9108097938937558f, - -0.9108638249211755f, - -0.9109178403411903f, - -0.9109718401528737f, - -0.911025824355301f, - -0.9110797929475463f, - -0.9111337459286861f, - -0.911187683297795f, - -0.9112416050539495f, - -0.9112955111962244f, - -0.9113494017236978f, - -0.9114032766354451f, - -0.9114571359305438f, - -0.9115109796080703f, - -0.9115648076671024f, - -0.9116186201067178f, - -0.9116724169259949f, - -0.9117261981240109f, - -0.9117799636998449f, - -0.9118337136525756f, - -0.9118874479812823f, - -0.9119411666850435f, - -0.9119948697629396f, - -0.9120485572140492f, - -0.912102229037454f, - -0.9121558852322331f, - -0.912209525797468f, - -0.9122631507322382f, - -0.9123167600356266f, - -0.9123703537067134f, - -0.9124239317445807f, - -0.9124774941483105f, - -0.9125310409169852f, - -0.9125845720496868f, - -0.9126380875454982f, - -0.9126915874035029f, - -0.9127450716227835f, - -0.9127985402024239f, - -0.9128519931415079f, - -0.91290543043912f, - -0.9129588520943437f, - -0.9130122581062642f, - -0.9130656484739663f, - -0.9131190231965356f, - -0.9131723822730564f, - -0.9132257257026158f, - -0.9132790534842988f, - -0.9133323656171923f, - -0.9133856621003821f, - -0.9134389429329554f, - -0.9134922081139991f, - -0.913545457642601f, - -0.9135986915178479f, - -0.913651909738828f, - -0.9137051123046296f, - -0.9137582992143412f, - -0.9138114704670508f, - -0.9138646260618478f, - -0.9139177659978214f, - -0.9139708902740612f, - -0.9140239988896565f, - -0.9140770918436978f, - -0.9141301691352743f, - -0.9141832307634781f, - -0.9142362767273988f, - -0.9142893070261283f, - -0.9143423216587568f, - -0.9143953206243775f, - -0.9144483039220809f, - -0.91450127155096f, - -0.9145542235101065f, - -0.9146071597986135f, - -0.914660080415574f, - -0.9147129853600814f, - -0.9147658746312286f, - -0.9148187482281096f, - -0.9148716061498186f, - -0.9149244483954497f, - -0.914977274964098f, - -0.9150300858548575f, - -0.9150828810668236f, - -0.9151356605990918f, - -0.915188424450758f, - -0.9152411726209175f, - -0.9152939051086668f, - -0.9153466219131022f, - -0.915399323033321f, - -0.9154520084684193f, - -0.9155046782174948f, - -0.9155573322796449f, - -0.9156099706539679f, - -0.915662593339561f, - -0.9157152003355229f, - -0.9157677916409523f, - -0.9158203672549483f, - -0.9158729271766095f, - -0.9159254714050358f, - -0.9159779999393258f, - -0.916030512778581f, - -0.9160830099219005f, - -0.9161354913683855f, - -0.9161879571171356f, - -0.9162404071672533f, - -0.9162928415178389f, - -0.9163452601679944f, - -0.9163976631168208f, - -0.9164500503634215f, - -0.9165024219068978f, - -0.9165547777463531f, - -0.9166071178808896f, - -0.9166594423096107f, - -0.9167117510316198f, - -0.9167640440460213f, - -0.916816321351918f, - -0.9168685829484149f, - -0.9169208288346162f, - -0.9169730590096272f, - -0.9170252734725522f, - -0.917077472222497f, - -0.9171296552585669f, - -0.9171818225798685f, - -0.9172339741855068f, - -0.9172861100745888f, - -0.9173382302462212f, - -0.9173903346995108f, - -0.9174424234335652f, - -0.9174944964474911f, - -0.9175465537403968f, - -0.9175985953113902f, - -0.9176506211595798f, - -0.9177026312840737f, - -0.9177546256839813f, - -0.9178066043584105f, - -0.9178585673064723f, - -0.9179105145272751f, - -0.9179624460199296f, - -0.9180143617835449f, - -0.9180662618172328f, - -0.918118146120103f, - -0.9181700146912671f, - -0.9182218675298354f, - -0.9182737046349208f, - -0.9183255260056339f, - -0.9183773316410877f, - -0.9184291215403936f, - -0.9184808957026646f, - -0.9185326541270136f, - -0.9185843968125541f, - -0.9186361237583988f, - -0.9186878349636617f, - -0.9187395304274567f, - -0.9187912101488984f, - -0.9188428741271005f, - -0.9188945223611784f, - -0.9189461548502468f, - -0.9189977715934214f, - -0.9190493725898172f, - -0.9191009578385503f, - -0.9191525273387366f, - -0.9192040810894933f, - -0.9192556190899358f, - -0.9193071413391818f, - -0.9193586478363482f, - -0.9194101385805529f, - -0.9194616135709129f, - -0.9195130728065466f, - -0.9195645162865722f, - -0.9196159440101086f, - -0.9196673559762739f, - -0.9197187521841875f, - -0.9197701326329691f, - -0.9198214973217373f, - -0.9198728462496133f, - -0.9199241794157162f, - -0.9199754968191673f, - -0.9200267984590861f, - -0.9200780843345948f, - -0.9201293544448138f, - -0.9201806087888653f, - -0.9202318473658704f, - -0.9202830701749513f, - -0.9203342772152303f, - -0.9203854684858306f, - -0.9204366439858742f, - -0.9204878037144846f, - -0.920538947670785f, - -0.9205900758538997f, - -0.9206411882629518f, - -0.9206922848970659f, - -0.9207433657553663f, - -0.9207944308369783f, - -0.9208454801410262f, - -0.9208965136666358f, - -0.9209475314129318f, - -0.9209985333790415f, - -0.9210495195640896f, - -0.9211004899672034f, - -0.9211514445875085f, - -0.9212023834241331f, - -0.9212533064762034f, - -0.9213042137428475f, - -0.9213551052231922f, - -0.9214059809163667f, - -0.9214568408214984f, - -0.921507684937716f, - -0.9215585132641487f, - -0.9216093257999249f, - -0.9216601225441743f, - -0.9217109034960265f, - -0.9217616686546117f, - -0.9218124180190594f, - -0.9218631515885004f, - -0.9219138693620653f, - -0.9219645713388855f, - -0.9220152575180915f, - -0.9220659278988151f, - -0.9221165824801882f, - -0.9221672212613431f, - -0.9222178442414114f, - -0.9222684514195262f, - -0.9223190427948201f, - -0.9223696183664268f, - -0.922420178133479f, - -0.9224707220951106f, - -0.9225212502504555f, - -0.9225717625986485f, - -0.9226222591388231f, - -0.922672739870115f, - -0.922723204791658f, - -0.922773653902589f, - -0.9228240872020422f, - -0.9228745046891546f, - -0.9229249063630607f, - -0.9229752922228988f, - -0.923025662267804f, - -0.9230760164969144f, - -0.9231263549093659f, - -0.9231766775042974f, - -0.9232269842808456f, - -0.9232772752381491f, - -0.9233275503753456f, - -0.9233778096915741f, - -0.9234280531859732f, - -0.9234782808576825f, - -0.9235284927058405f, - -0.9235786887295873f, - -0.9236288689280627f, - -0.9236790333004075f, - -0.9237291818457611f, - -0.9237793145632648f, - -0.9238294314520595f, - -0.9238795325112865f, - -0.9239296177400876f, - -0.923979687137604f, - -0.9240297407029782f, - -0.9240797784353523f, - -0.9241298003338694f, - -0.9241798063976716f, - -0.9242297966259027f, - -0.9242797710177058f, - -0.924329729572225f, - -0.9243796722886038f, - -0.9244295991659865f, - -0.9244795102035179f, - -0.924529405400343f, - -0.9245792847556061f, - -0.9246291482684533f, - -0.9246789959380292f, - -0.924728827763481f, - -0.9247786437439537f, - -0.9248284438785946f, - -0.9248782281665493f, - -0.9249279966069661f, - -0.9249777491989912f, - -0.9250274859417729f, - -0.9250772068344577f, - -0.9251269118761952f, - -0.9251766010661328f, - -0.9252262744034194f, - -0.9252759318872036f, - -0.9253255735166346f, - -0.9253751992908619f, - -0.9254248092090355f, - -0.9254744032703047f, - -0.92552398147382f, - -0.9255735438187319f, - -0.9256230903041915f, - -0.9256726209293492f, - -0.9257221356933566f, - -0.9257716345953654f, - -0.9258211176345276f, - -0.9258705848099947f, - -0.9259200361209196f, - -0.9259694715664547f, - -0.9260188911457534f, - -0.9260682948579683f, - -0.9261176827022531f, - -0.9261670546777617f, - -0.9262164107836482f, - -0.9262657510190666f, - -0.9263150753831715f, - -0.9263643838751182f, - -0.9264136764940607f, - -0.926462953239156f, - -0.9265122141095583f, - -0.9265614591044246f, - -0.9266106882229099f, - -0.9266599014641721f, - -0.9267090988273669f, - -0.926758280311652f, - -0.9268074459161836f, - -0.9268565956401207f, - -0.9269057294826202f, - -0.9269548474428406f, - -0.9270039495199399f, - -0.927053035713077f, - -0.9271021060214106f, - -0.9271511604441006f, - -0.9272001989803056f, - -0.9272492216291855f, - -0.9272982283899007f, - -0.9273472192616116f, - -0.927396194243478f, - -0.9274451533346612f, - -0.9274940965343222f, - -0.9275430238416229f, - -0.927591935255724f, - -0.9276408307757883f, - -0.9276897104009769f, - -0.9277385741304536f, - -0.9277874219633802f, - -0.9278362538989202f, - -0.927885069936236f, - -0.9279338700744925f, - -0.9279826543128525f, - -0.9280314226504804f, - -0.928080175086541f, - -0.9281289116201981f, - -0.9281776322506171f, - -0.9282263369769631f, - -0.9282750257984019f, - -0.9283236987140987f, - -0.9283723557232196f, - -0.9284209968249311f, - -0.9284696220183999f, - -0.9285182313027922f, - -0.9285668246772755f, - -0.9286154021410171f, - -0.928663963693185f, - -0.9287125093329465f, - -0.92876103905947f, - -0.928809552871924f, - -0.9288580507694776f, - -0.9289065327512991f, - -0.9289549988165582f, - -0.9290034489644242f, - -0.9290518831940675f, - -0.9291003015046575f, - -0.9291487038953647f, - -0.92919709036536f, - -0.9292454609138144f, - -0.9292938155398988f, - -0.9293421542427848f, - -0.9293904770216435f, - -0.929438783875648f, - -0.9294870748039699f, - -0.9295353498057821f, - -0.9295836088802566f, - -0.9296318520265677f, - -0.9296800792438878f, - -0.9297282905313914f, - -0.9297764858882511f, - -0.9298246653136427f, - -0.9298728288067394f, - -0.9299209763667168f, - -0.9299691079927491f, - -0.9300172236840121f, - -0.9300653234396812f, - -0.9301134072589324f, - -0.9301614751409415f, - -0.930209527084885f, - -0.9302575630899396f, - -0.930305583155282f, - -0.93035358728009f, - -0.9304015754635403f, - -0.930449547704811f, - -0.9304975040030801f, - -0.9305454443575261f, - -0.9305933687673269f, - -0.9306412772316619f, - -0.9306891697497099f, - -0.9307370463206509f, - -0.9307849069436636f, - -0.9308327516179284f, - -0.9308805803426256f, - -0.9309283931169358f, - -0.9309761899400391f, - -0.9310239708111172f, - -0.9310717357293505f, - -0.9311194846939218f, - -0.9311672177040119f, - -0.9312149347588037f, - -0.9312626358574785f, - -0.9313103209992203f, - -0.931357990183211f, - -0.9314056434086344f, - -0.9314532806746731f, - -0.9315009019805123f, - -0.9315485073253347f, - -0.9315960967083254f, - -0.9316436701286684f, - -0.9316912275855489f, - -0.9317387690781518f, - -0.931786294605663f, - -0.9318338041672675f, - -0.9318812977621513f, - -0.931928775389501f, - -0.9319762370485032f, - -0.932023682738344f, - -0.9320711124582108f, - -0.932118526207291f, - -0.9321659239847723f, - -0.9322133057898421f, - -0.9322606716216887f, - -0.9323080214795004f, - -0.9323553553624665f, - -0.9324026732697752f, - -0.9324499752006159f, - -0.9324972611541782f, - -0.9325445311296519f, - -0.9325917851262272f, - -0.932639023143094f, - -0.9326862451794431f, - -0.9327334512344653f, - -0.9327806413073522f, - -0.9328278153972944f, - -0.9328749735034844f, - -0.9329221156251131f, - -0.932969241761374f, - -0.9330163519114587f, - -0.9330634460745606f, - -0.9331105242498717f, - -0.9331575864365869f, - -0.9332046326338984f, - -0.9332516628410011f, - -0.9332986770570884f, - -0.9333456752813549f, - -0.9333926575129954f, - -0.9334396237512053f, - -0.9334865739951791f, - -0.9335335082441125f, - -0.9335804264972016f, - -0.9336273287536425f, - -0.9336742150126311f, - -0.9337210852733644f, - -0.933767939535039f, - -0.9338147777968525f, - -0.9338616000580019f, - -0.9339084063176852f, - -0.9339551965750998f, - -0.934001970829445f, - -0.9340487290799184f, - -0.9340954713257194f, - -0.9341421975660466f, - -0.9341889078001f, - -0.9342356020270786f, - -0.9342822802461824f, - -0.9343289424566118f, - -0.9343755886575675f, - -0.9344222188482497f, - -0.9344688330278595f, - -0.9345154311955988f, - -0.9345620133506681f, - -0.9346085794922699f, - -0.9346551296196063f, - -0.9347016637318797f, - -0.9347481818282921f, - -0.9347946839080475f, - -0.9348411699703483f, - -0.9348876400143984f, - -0.9349340940394008f, - -0.9349805320445607f, - -0.9350269540290814f, - -0.9350733599921683f, - -0.9351197499330254f, - -0.9351661238508583f, - -0.9352124817448723f, - -0.9352588236142733f, - -0.9353051494582667f, - -0.9353514592760591f, - -0.935397753066857f, - -0.9354440308298674f, - -0.9354902925642967f, - -0.9355365382693529f, - -0.9355827679442426f, - -0.935628981588175f, - -0.9356751792003573f, - -0.9357213607799983f, - -0.9357675263263062f, - -0.9358136758384908f, - -0.9358598093157607f, - -0.9359059267573259f, - -0.9359520281623952f, - -0.93599811353018f, - -0.9360441828598897f, - -0.9360902361507355f, - -0.9361362734019277f, - -0.9361822946126778f, - -0.9362282997821971f, - -0.9362742889096974f, - -0.9363202619943911f, - -0.9363662190354898f, - -0.9364121600322063f, - -0.9364580849837534f, - -0.9365039938893445f, - -0.9365498867481923f, - -0.9365957635595109f, - -0.9366416243225141f, - -0.9366874690364164f, - -0.9367332977004317f, - -0.9367791103137749f, - -0.9368249068756612f, - -0.9368706873853062f, - -0.9369164518419247f, - -0.936962200244733f, - -0.937007932592947f, - -0.9370536488857836f, - -0.9370993491224587f, - -0.9371450333021898f, - -0.9371907014241937f, - -0.9372363534876886f, - -0.9372819894918915f, - -0.9373276094360209f, - -0.9373732133192944f, - -0.9374188011409317f, - -0.9374643729001508f, - -0.9375099285961715f, - -0.9375554682282122f, - -0.9376009917954938f, - -0.9376464992972355f, - -0.9376919907326581f, - -0.9377374661009811f, - -0.9377829254014265f, - -0.9378283686332146f, - -0.9378737957955672f, - -0.9379192068877055f, - -0.9379646019088514f, - -0.9380099808582274f, - -0.9380553437350561f, - -0.9381006905385595f, - -0.9381460212679611f, - -0.938191335922484f, - -0.9382366345013522f, - -0.9382819170037888f, - -0.9383271834290182f, - -0.9383724337762649f, - -0.9384176680447537f, - -0.938462886233709f, - -0.9385080883423562f, - -0.938553274369921f, - -0.9385984443156289f, - -0.9386435981787065f, - -0.9386887359583791f, - -0.938733857653874f, - -0.9387789632644177f, - -0.9388240527892379f, - -0.9388691262275611f, - -0.938914183578616f, - -0.9389592248416293f, - -0.9390042500158307f, - -0.9390492591004475f, - -0.9390942520947092f, - -0.9391392289978441f, - -0.9391841898090826f, - -0.9392291345276534f, - -0.9392740631527872f, - -0.9393189756837129f, - -0.9393638721196624f, - -0.9394087524598654f, - -0.9394536167035535f, - -0.9394984648499575f, - -0.939543296898309f, - -0.9395881128478399f, - -0.9396329126977827f, - -0.9396776964473691f, - -0.939722464095832f, - -0.9397672156424044f, - -0.9398119510863198f, - -0.9398566704268109f, - -0.9399013736631119f, - -0.9399460607944568f, - -0.9399907318200802f, - -0.940035386739216f, - -0.9400800255510995f, - -0.9401246482549657f, - -0.9401692548500503f, - -0.9402138453355884f, - -0.9402584197108164f, - -0.9403029779749702f, - -0.940347520127287f, - -0.9403920461670027f, - -0.9404365560933547f, - -0.9404810499055808f, - -0.9405255276029177f, - -0.940569989184604f, - -0.9406144346498775f, - -0.9406588639979772f, - -0.9407032772281406f, - -0.9407476743396083f, - -0.9407920553316184f, - -0.940836420203411f, - -0.9408807689542251f, - -0.9409251015833021f, - -0.9409694180898814f, - -0.9410137184732043f, - -0.941058002732511f, - -0.9411022708670429f, - -0.9411465228760418f, - -0.9411907587587496f, - -0.9412349785144076f, - -0.9412791821422587f, - -0.9413233696415452f, - -0.9413675410115104f, - -0.9414116962513968f, - -0.9414558353604481f, - -0.941499958337908f, - -0.9415440651830208f, - -0.9415881558950301f, - -0.941632230473181f, - -0.9416762889167175f, - -0.9417203312248857f, - -0.9417643573969302f, - -0.9418083674320972f, - -0.9418523613296317f, - -0.9418963390887809f, - -0.9419403007087905f, - -0.941984246188908f, - -0.9420281755283791f, - -0.9420720887264526f, - -0.9421159857823752f, - -0.9421598666953948f, - -0.9422037314647599f, - -0.9422475800897183f, - -0.942291412569519f, - -0.9423352289034109f, - -0.9423790290906436f, - -0.9424228131304658f, - -0.9424665810221279f, - -0.9425103327648796f, - -0.9425540683579717f, - -0.9425977878006542f, - -0.9426414910921783f, - -0.9426851782317951f, - -0.9427288492187563f, - -0.942772504052313f, - -0.9428161427317177f, - -0.9428597652562224f, - -0.9429033716250801f, - -0.9429469618375429f, - -0.9429905358928643f, - -0.9430340937902977f, - -0.9430776355290968f, - -0.9431211611085153f, - -0.9431646705278076f, - -0.9432081637862276f, - -0.9432516408830312f, - -0.9432951018174723f, - -0.943338546588807f, - -0.9433819751962901f, - -0.9434253876391784f, - -0.9434687839167273f, - -0.9435121640281937f, - -0.9435555279728336f, - -0.9435988757499049f, - -0.9436422073586642f, - -0.9436855227983695f, - -0.9437288220682779f, - -0.943772105167648f, - -0.9438153720957381f, - -0.9438586228518069f, - -0.943901857435113f, - -0.9439450758449158f, - -0.9439882780804747f, - -0.9440314641410499f, - -0.9440746340259005f, - -0.9441177877342875f, - -0.9441609252654711f, - -0.9442040466187124f, - -0.9442471517932728f, - -0.944290240788413f, - -0.944333313603395f, - -0.9443763702374809f, - -0.944419410689933f, - -0.9444624349600134f, - -0.9445054430469851f, - -0.9445484349501113f, - -0.9445914106686555f, - -0.9446343702018807f, - -0.9446773135490513f, - -0.9447202407094313f, - -0.9447631516822854f, - -0.9448060464668779f, - -0.9448489250624744f, - -0.9448917874683391f, - -0.9449346336837391f, - -0.944977463707939f, - -0.9450202775402057f, - -0.9450630751798046f, - -0.9451058566260037f, - -0.9451486218780689f, - -0.9451913709352681f, - -0.9452341037968682f, - -0.9452768204621375f, - -0.9453195209303437f, - -0.9453622052007555f, - -0.9454048732726411f, - -0.9454475251452696f, - -0.9454901608179103f, - -0.9455327802898327f, - -0.9455753835603061f, - -0.9456179706286008f, - -0.9456605414939869f, - -0.9457030961557356f, - -0.9457456346131168f, - -0.9457881568654021f, - -0.9458306629118629f, - -0.945873152751771f, - -0.945915626384398f, - -0.9459580838090161f, - -0.9460005250248982f, - -0.9460429500313171f, - -0.9460853588275453f, - -0.9461277514128565f, - -0.9461701277865243f, - -0.9462124879478225f, - -0.9462548318960258f, - -0.9462971596304077f, - -0.9463394711502439f, - -0.9463817664548083f, - -0.9464240455433773f, - -0.9464663084152257f, - -0.94650855506963f, - -0.9465507855058652f, - -0.9465929997232091f, - -0.9466351977209374f, - -0.9466773794983275f, - -0.946719545054656f, - -0.9467616943892014f, - -0.9468038275012407f, - -0.9468459443900524f, - -0.9468880450549144f, - -0.9469301294951056f, - -0.9469721977099048f, - -0.9470142496985915f, - -0.9470562854604446f, - -0.9470983049947442f, - -0.9471403083007701f, - -0.9471822953778031f, - -0.947224266225123f, - -0.947266220842011f, - -0.9473081592277482f, - -0.9473500813816164f, - -0.9473919873028964f, - -0.9474338769908711f, - -0.9474757504448217f, - -0.9475176076640318f, - -0.9475594486477835f, - -0.9476012733953599f, - -0.9476430819060446f, - -0.9476848741791213f, - -0.9477266502138735f, - -0.9477684100095856f, - -0.9478101535655422f, - -0.9478518808810278f, - -0.9478935919553273f, - -0.9479352867877263f, - -0.9479769653775105f, - -0.9480186277239652f, - -0.9480602738263768f, - -0.9481019036840319f, - -0.9481435172962172f, - -0.9481851146622191f, - -0.9482266957813253f, - -0.9482682606528233f, - -0.9483098092760012f, - -0.9483513416501462f, - -0.9483928577745473f, - -0.948434357648493f, - -0.9484758412712725f, - -0.9485173086421744f, - -0.9485587597604884f, - -0.9486001946255045f, - -0.9486416132365126f, - -0.9486830155928029f, - -0.9487244016936658f, - -0.9487657715383925f, - -0.9488071251262743f, - -0.948848462456602f, - -0.948889783528668f, - -0.9489310883417633f, - -0.9489723768951813f, - -0.9490136491882138f, - -0.9490549052201541f, - -0.9490961449902944f, - -0.9491373684979292f, - -0.9491785757423513f, - -0.9492197667228552f, - -0.9492609414387344f, - -0.9493020998892844f, - -0.9493432420737989f, - -0.9493843679915739f, - -0.9494254776419039f, - -0.9494665710240848f, - -0.9495076481374126f, - -0.9495487089811836f, - -0.9495897535546937f, - -0.9496307818572399f, - -0.9496717938881193f, - -0.949712789646629f, - -0.9497537691320669f, - -0.9497947323437302f, - -0.9498356792809175f, - -0.949876609942927f, - -0.9499175243290577f, - -0.949958422438608f, - -0.9499993042708773f, - -0.9500401698251651f, - -0.9500810191007717f, - -0.9501218520969964f, - -0.9501626688131398f, - -0.9502034692485026f, - -0.9502442534023859f, - -0.9502850212740904f, - -0.9503257728629181f, - -0.9503665081681698f, - -0.9504072271891487f, - -0.9504479299251564f, - -0.9504886163754956f, - -0.9505292865394688f, - -0.9505699404163799f, - -0.9506105780055317f, - -0.9506511993062283f, - -0.9506918043177729f, - -0.9507323930394708f, - -0.9507729654706256f, - -0.950813521610543f, - -0.9508540614585271f, - -0.9508945850138839f, - -0.9509350922759188f, - -0.9509755832439382f, - -0.9510160579172474f, - -0.9510565162951535f, - -0.9510969583769632f, - -0.9511373841619836f, - -0.9511777936495217f, - -0.9512181868388853f, - -0.9512585637293821f, - -0.9512989243203208f, - -0.9513392686110091f, - -0.9513795966007561f, - -0.9514199082888708f, - -0.9514602036746626f, - -0.9515004827574406f, - -0.9515407455365149f, - -0.9515809920111956f, - -0.951621222180793f, - -0.9516614360446182f, - -0.9517016336019816f, - -0.9517418148521947f, - -0.9517819797945685f, - -0.9518221284284157f, - -0.9518622607530477f, - -0.9519023767677772f, - -0.9519424764719161f, - -0.9519825598647784f, - -0.9520226269456765f, - -0.9520626777139244f, - -0.9521027121688349f, - -0.9521427303097232f, - -0.9521827321359028f, - -0.9522227176466888f, - -0.9522626868413954f, - -0.9523026397193383f, - -0.9523425762798327f, - -0.9523824965221945f, - -0.9524224004457393f, - -0.9524622880497836f, - -0.9525021593336439f, - -0.9525420142966373f, - -0.9525818529380804f, - -0.9526216752572908f, - -0.9526614812535861f, - -0.9527012709262846f, - -0.952741044274704f, - -0.9527808012981631f, - -0.9528205419959802f, - -0.9528602663674751f, - -0.9528999744119666f, - -0.9529396661287746f, - -0.9529793415172186f, - -0.9530190005766195f, - -0.953058643306297f, - -0.9530982697055721f, - -0.9531378797737657f, - -0.9531774735101998f, - -0.9532170509141948f, - -0.9532566119850734f, - -0.9532961567221577f, - -0.9533356851247696f, - -0.9533751971922321f, - -0.9534146929238682f, - -0.9534541723190013f, - -0.9534936353769543f, - -0.9535330820970519f, - -0.9535725124786175f, - -0.953611926520976f, - -0.9536513242234512f, - -0.9536907055853693f, - -0.9537300706060543f, - -0.9537694192848326f, - -0.9538087516210293f, - -0.9538480676139707f, - -0.9538873672629832f, - -0.9539266505673936f, - -0.9539659175265283f, - -0.9540051681397147f, - -0.9540444024062803f, - -0.954083620325553f, - -0.9541228218968605f, - -0.9541620071195314f, - -0.9542011759928936f, - -0.9542403285162769f, - -0.9542794646890097f, - -0.9543185845104221f, - -0.9543576879798427f, - -0.9543967750966027f, - -0.9544358458600315f, - -0.9544749002694602f, - -0.9545139383242189f, - -0.9545529600236397f, - -0.9545919653670529f, - -0.9546309543537912f, - -0.9546699269831856f, - -0.9547088832545688f, - -0.9547478231672731f, - -0.9547867467206315f, - -0.9548256539139771f, - -0.954864544746643f, - -0.9549034192179627f, - -0.9549422773272703f, - -0.9549811190739004f, - -0.9550199444571866f, - -0.9550587534764641f, - -0.9550975461310679f, - -0.9551363224203335f, - -0.955175082343596f, - -0.9552138259001915f, - -0.9552525530894562f, - -0.9552912639107268f, - -0.9553299583633393f, - -0.9553686364466312f, - -0.9554072981599395f, - -0.9554459435026021f, - -0.9554845724739564f, - -0.9555231850733407f, - -0.9555617813000933f, - -0.9556003611535532f, - -0.9556389246330588f, - -0.9556774717379499f, - -0.9557160024675652f, - -0.9557545168212455f, - -0.95579301479833f, - -0.9558314963981598f, - -0.9558699616200746f, - -0.9559084104634163f, - -0.9559468429275255f, - -0.955985259011744f, - -0.9560236587154131f, - -0.956062042037875f, - -0.9561004089784723f, - -0.9561387595365475f, - -0.9561770937114431f, - -0.9562154115025026f, - -0.9562537129090694f, - -0.9562919979304872f, - -0.9563302665661f, - -0.9563685188152519f, - -0.9564067546772875f, - -0.9564449741515522f, - -0.9564831772373903f, - -0.9565213639341476f, - -0.9565595342411697f, - -0.9565976881578027f, - -0.9566358256833929f, - -0.9566739468172865f, - -0.9567120515588303f, - -0.9567501399073718f, - -0.9567882118622583f, - -0.9568262674228369f, - -0.956864306588456f, - -0.9569023293584638f, - -0.9569403357322088f, - -0.9569783257090395f, - -0.9570162992883054f, - -0.957054256469355f, - -0.957092197251539f, - -0.9571301216342066f, - -0.9571680296167083f, - -0.957205921198394f, - -0.9572437963786152f, - -0.9572816551567225f, - -0.9573194975320674f, - -0.9573573235040008f, - -0.9573951330718756f, - -0.9574329262350433f, - -0.9574707029928566f, - -0.9575084633446679f, - -0.9575462072898303f, - -0.9575839348276972f, - -0.9576216459576223f, - -0.957659340678959f, - -0.9576970189910615f, - -0.9577346808932844f, - -0.9577723263849826f, - -0.9578099554655104f, - -0.9578475681342233f, - -0.9578851643904771f, - -0.9579227442336276f, - -0.9579603076630302f, - -0.957997854678042f, - -0.9580353852780192f, - -0.9580728994623192f, - -0.9581103972302987f, - -0.9581478785813153f, - -0.958185343514727f, - -0.9582227920298918f, - -0.9582602241261677f, - -0.9582976398029136f, - -0.9583350390594886f, - -0.9583724218952511f, - -0.9584097883095615f, - -0.9584471383017789f, - -0.9584844718712637f, - -0.9585217890173756f, - -0.9585590897394761f, - -0.9585963740369253f, - -0.958633641909085f, - -0.9586708933553155f, - -0.9587081283749799f, - -0.9587453469674392f, - -0.9587825491320562f, - -0.958819734868193f, - -0.9588569041752127f, - -0.9588940570524785f, - -0.9589311934993539f, - -0.9589683135152021f, - -0.9590054170993872f, - -0.9590425042512737f, - -0.9590795749702262f, - -0.959116629255609f, - -0.9591536671067875f, - -0.9591906885231272f, - -0.9592276935039936f, - -0.9592646820487525f, - -0.9593016541567704f, - -0.9593386098274131f, - -0.9593755490600485f, - -0.9594124718540428f, - -0.9594493782087637f, - -0.9594862681235784f, - -0.9595231415978556f, - -0.9595599986309626f, - -0.9595968392222683f, - -0.9596336633711415f, - -0.9596704710769514f, - -0.9597072623390667f, - -0.9597440371568573f, - -0.9597807955296934f, - -0.9598175374569446f, - -0.9598542629379816f, - -0.9598909719721752f, - -0.9599276645588964f, - -0.9599643406975163f, - -0.9600010003874067f, - -0.9600376436279391f, - -0.9600742704184861f, - -0.9601108807584197f, - -0.9601474746471126f, - -0.9601840520839381f, - -0.9602206130682693f, - -0.9602571575994796f, - -0.960293685676943f, - -0.9603301973000334f, - -0.9603666924681257f, - -0.9604031711805938f, - -0.960439633436813f, - -0.9604760792361586f, - -0.9605125085780064f, - -0.9605489214617315f, - -0.9605853178867106f, - -0.9606216978523194f, - -0.9606580613579353f, - -0.9606944084029346f, - -0.9607307389866951f, - -0.9607670531085934f, - -0.9608033507680084f, - -0.9608396319643171f, - -0.9608758966968987f, - -0.9609121449651309f, - -0.9609483767683935f, - -0.960984592106065f, - -0.9610207909775255f, - -0.9610569733821541f, - -0.961093139319331f, - -0.9611292887884367f, - -0.961165421788852f, - -0.9612015383199571f, - -0.9612376383811336f, - -0.9612737219717629f, - -0.9613097890912269f, - -0.961345839738907f, - -0.961381873914186f, - -0.9614178916164462f, - -0.9614538928450707f, - -0.9614898775994426f, - -0.961525845878945f, - -0.9615617976829618f, - -0.961597733010877f, - -0.9616336518620751f, - -0.9616695542359401f, - -0.9617054401318571f, - -0.9617413095492111f, - -0.961777162487388f, - -0.9618129989457727f, - -0.9618488189237515f, - -0.9618846224207107f, - -0.961920409436037f, - -0.9619561799691168f, - -0.9619919340193374f, - -0.9620276715860857f, - -0.9620633926687502f, - -0.9620990972667182f, - -0.9621347853793782f, - -0.9621704570061183f, - -0.9622061121463279f, - -0.9622417507993956f, - -0.9622773729647109f, - -0.9623129786416633f, - -0.9623485678296428f, - -0.9623841405280396f, - -0.9624196967362443f, - -0.9624552364536473f, - -0.9624907596796398f, - -0.9625262664136133f, - -0.9625617566549594f, - -0.9625972304030695f, - -0.9626326876573362f, - -0.962668128417152f, - -0.9627035526819095f, - -0.9627389604510017f, - -0.9627743517238218f, - -0.9628097264997635f, - -0.9628450847782208f, - -0.9628804265585875f, - -0.9629157518402583f, - -0.9629510606226278f, - -0.9629863529050913f, - -0.9630216286870436f, - -0.9630568879678804f, - -0.9630921307469975f, - -0.9631273570237913f, - -0.9631625667976581f, - -0.9631977600679944f, - -0.9632329368341975f, - -0.9632680970956641f, - -0.9633032408517924f, - -0.9633383681019798f, - -0.9633734788456247f, - -0.9634085730821248f, - -0.9634436508108798f, - -0.963478712031288f, - -0.9635137567427489f, - -0.9635487849446613f, - -0.9635837966364261f, - -0.9636187918174428f, - -0.9636537704871119f, - -0.9636887326448338f, - -0.9637236782900096f, - -0.9637586074220406f, - -0.9637935200403285f, - -0.9638284161442744f, - -0.9638632957332809f, - -0.9638981588067502f, - -0.9639330053640852f, - -0.9639678354046883f, - -0.9640026489279633f, - -0.9640374459333128f, - -0.9640722264201416f, - -0.964106990387853f, - -0.9641417378358519f, - -0.964176468763542f, - -0.9642111831703294f, - -0.9642458810556183f, - -0.9642805624188145f, - -0.964315227259324f, - -0.9643498755765526f, - -0.9643845073699066f, - -0.9644191226387924f, - -0.9644537213826174f, - -0.9644883036007882f, - -0.9645228692927125f, - -0.964557418457798f, - -0.9645919510954529f, - -0.9646264672050852f, - -0.9646609667861035f, - -0.9646954498379168f, - -0.9647299163599343f, - -0.964764366351565f, - -0.9647987998122194f, - -0.9648332167413067f, - -0.9648676171382378f, - -0.9649020010024226f, - -0.9649363683332723f, - -0.9649707191301982f, - -0.9650050533926116f, - -0.9650393711199239f, - -0.9650736723115473f, - -0.965107956966894f, - -0.965142225085377f, - -0.9651764766664083f, - -0.9652107117094015f, - -0.9652449302137699f, - -0.9652791321789275f, - -0.9653133176042876f, - -0.965347486489265f, - -0.9653816388332738f, - -0.9654157746357293f, - -0.9654498938960461f, - -0.96548399661364f, - -0.9655180827879261f, - -0.965552152418321f, - -0.9655862055042406f, - -0.9656202420451014f, - -0.9656542620403202f, - -0.9656882654893141f, - -0.9657222523915003f, - -0.965756222746297f, - -0.9657901765531215f, - -0.9658241138113922f, - -0.9658580345205277f, - -0.9658919386799466f, - -0.9659258262890683f, - -0.9659596973473118f, - -0.9659935518540967f, - -0.9660273898088433f, - -0.9660612112109715f, - -0.9660950160599019f, - -0.966128804355055f, - -0.9661625760958521f, - -0.9661963312817148f, - -0.9662300699120641f, - -0.9662637919863221f, - -0.9662974975039111f, - -0.9663311864642539f, - -0.9663648588667725f, - -0.9663985147108904f, - -0.9664321539960308f, - -0.9664657767216176f, - -0.9664993828870742f, - -0.9665329724918251f, - -0.9665665455352943f, - -0.9666001020169073f, - -0.9666336419360885f, - -0.9666671652922635f, - -0.9667006720848574f, - -0.9667341623132969f, - -0.9667676359770075f, - -0.9668010930754161f, - -0.9668345336079486f, - -0.9668679575740331f, - -0.9669013649730961f, - -0.9669347558045657f, - -0.9669681300678692f, - -0.967001487762435f, - -0.9670348288876917f, - -0.967068153443068f, - -0.9671014614279925f, - -0.9671347528418947f, - -0.9671680276842043f, - -0.9672012859543512f, - -0.9672345276517651f, - -0.9672677527758767f, - -0.9673009613261168f, - -0.9673341533019163f, - -0.9673673287027064f, - -0.9674004875279185f, - -0.9674336297769847f, - -0.9674667554493369f, - -0.9674998645444078f, - -0.9675329570616299f, - -0.967566033000436f, - -0.9675990923602596f, - -0.9676321351405344f, - -0.9676651613406937f, - -0.9676981709601721f, - -0.9677311639984034f, - -0.9677641404548231f, - -0.9677971003288653f, - -0.967830043619966f, - -0.96786297032756f, - -0.9678958804510839f, - -0.9679287739899731f, - -0.9679616509436645f, - -0.9679945113115941f, - -0.9680273550931996f, - -0.9680601822879178f, - -0.9680929928951865f, - -0.9681257869144431f, - -0.9681585643451258f, - -0.9681913251866731f, - -0.9682240694385238f, - -0.9682567971001165f, - -0.9682895081708905f, - -0.9683222026502855f, - -0.9683548805377412f, - -0.9683875418326976f, - -0.9684201865345949f, - -0.9684528146428741f, - -0.9684854261569761f, - -0.9685180210763418f, - -0.9685505994004128f, - -0.968583161128631f, - -0.9686157062604386f, - -0.9686482347952775f, - -0.9686807467325906f, - -0.9687132420718209f, - -0.9687457208124116f, - -0.9687781829538059f, - -0.9688106284954479f, - -0.9688430574367813f, - -0.968875469777251f, - -0.968907865516301f, - -0.9689402446533766f, - -0.968972607187923f, - -0.9690049531193854f, - -0.9690372824472097f, - -0.9690695951708419f, - -0.9691018912897287f, - -0.9691341708033159f, - -0.9691664337110513f, - -0.9691986800123815f, - -0.9692309097067544f, - -0.9692631227936174f, - -0.9692953192724185f, - -0.9693274991426062f, - -0.9693596624036294f, - -0.9693918090549363f, - -0.9694239390959765f, - -0.9694560525261994f, - -0.969488149345055f, - -0.9695202295519928f, - -0.9695522931464634f, - -0.9695843401279175f, - -0.969616370495806f, - -0.9696483842495798f, - -0.9696803813886906f, - -0.9697123619125897f, - -0.9697443258207299f, - -0.9697762731125628f, - -0.9698082037875414f, - -0.9698401178451181f, - -0.9698720152847468f, - -0.9699038961058803f, - -0.9699357603079728f, - -0.9699676078904778f, - -0.9699994388528501f, - -0.970031253194544f, - -0.9700630509150145f, - -0.9700948320137166f, - -0.9701265964901058f, - -0.9701583443436379f, - -0.9701900755737689f, - -0.9702217901799551f, - -0.970253488161653f, - -0.9702851695183194f, - -0.9703168342494117f, - -0.9703484823543873f, - -0.9703801138327036f, - -0.9704117286838189f, - -0.9704433269071913f, - -0.9704749085022796f, - -0.9705064734685425f, - -0.970538021805439f, - -0.9705695535124288f, - -0.9706010685889717f, - -0.9706325670345273f, - -0.9706640488485561f, - -0.9706955140305186f, - -0.970726962579876f, - -0.9707583944960889f, - -0.970789809778619f, - -0.9708212084269279f, - -0.970852590440478f, - -0.970883955818731f, - -0.9709153045611498f, - -0.9709466366671969f, - -0.9709779521363361f, - -0.9710092509680301f, - -0.9710405331617432f, - -0.9710717987169386f, - -0.9711030476330816f, - -0.971134279909636f, - -0.971165495546067f, - -0.9711966945418395f, - -0.971227876896419f, - -0.9712590426092712f, - -0.9712901916798623f, - -0.9713213241076581f, - -0.9713524398921256f, - -0.9713835390327313f, - -0.9714146215289428f, - -0.971445687380227f, - -0.9714767365860517f, - -0.971507769145885f, - -0.9715387850591954f, - -0.9715697843254509f, - -0.9716007669441207f, - -0.9716317329146739f, - -0.9716626822365797f, - -0.9716936149093083f, - -0.971724530932329f, - -0.9717554303051125f, - -0.971786313027129f, - -0.97181717909785f, - -0.9718480285167459f, - -0.9718788612832884f, - -0.9719096773969492f, - -0.9719404768572004f, - -0.9719712596635139f, - -0.9720020258153628f, - -0.972032775312219f, - -0.9720635081535567f, - -0.9720942243388486f, - -0.9721249238675688f, - -0.9721556067391905f, - -0.9721862729531892f, - -0.9722169225090384f, - -0.9722475554062134f, - -0.972278171644189f, - -0.9723087712224411f, - -0.9723393541404448f, - -0.9723699203976767f, - -0.9724004699936124f, - -0.9724310029277288f, - -0.9724615191995027f, - -0.9724920188084114f, - -0.9725225017539318f, - -0.9725529680355419f, - -0.9725834176527197f, - -0.9726138506049435f, - -0.9726442668916917f, - -0.972674666512443f, - -0.9727050494666767f, - -0.9727354157538725f, - -0.9727657653735093f, - -0.9727960983250676f, - -0.9728264146080277f, - -0.9728567142218701f, - -0.9728869971660754f, - -0.9729172634401247f, - -0.9729475130434997f, - -0.972977745975682f, - -0.9730079622361534f, - -0.9730381618243961f, - -0.973068344739893f, - -0.9730985109821264f, - -0.97312866055058f, - -0.9731587934447368f, - -0.9731889096640807f, - -0.9732190092080951f, - -0.9732490920762653f, - -0.9732791582680749f, - -0.9733092077830092f, - -0.973339240620553f, - -0.973369256780192f, - -0.9733992562614118f, - -0.9734292390636984f, - -0.9734592051865377f, - -0.9734891546294167f, - -0.9735190873918219f, - -0.9735490034732407f, - -0.9735789028731603f, - -0.9736087855910683f, - -0.9736386516264528f, - -0.9736685009788023f, - -0.9736983336476048f, - -0.9737281496323494f, - -0.9737579489325253f, - -0.9737877315476221f, - -0.9738174974771289f, - -0.9738472467205361f, - -0.9738769792773335f, - -0.9739066951470123f, - -0.9739363943290629f, - -0.9739660768229766f, - -0.9739957426282444f, - -0.9740253917443586f, - -0.9740550241708107f, - -0.9740846399070932f, - -0.9741142389526984f, - -0.9741438213071195f, - -0.9741733869698492f, - -0.9742029359403812f, - -0.9742324682182093f, - -0.9742619838028269f, - -0.9742914826937288f, - -0.9743209648904092f, - -0.9743504303923634f, - -0.9743798791990859f, - -0.9744093113100725f, - -0.9744387267248187f, - -0.9744681254428208f, - -0.9744975074635748f, - -0.9745268727865771f, - -0.9745562214113247f, - -0.974585553337315f, - -0.974614868564045f, - -0.9746441670910124f, - -0.9746734489177155f, - -0.9747027140436524f, - -0.9747319624683215f, - -0.9747611941912216f, - -0.9747904092118522f, - -0.9748196075297126f, - -0.9748487891443022f, - -0.9748779540551213f, - -0.9749071022616697f, - -0.9749362337634486f, - -0.9749653485599584f, - -0.9749944466507006f, - -0.9750235280351759f, - -0.9750525927128869f, - -0.9750816406833349f, - -0.9751106719460226f, - -0.975139686500452f, - -0.9751686843461267f, - -0.9751976654825493f, - -0.9752266299092235f, - -0.9752555776256527f, - -0.9752845086313411f, - -0.9753134229257928f, - -0.9753423205085128f, - -0.9753712013790053f, - -0.9754000655367759f, - -0.9754289129813299f, - -0.975457743712173f, - -0.9754865577288113f, - -0.9755153550307508f, - -0.9755441356174983f, - -0.9755728994885606f, - -0.975601646643445f, - -0.9756303770816586f, - -0.9756590908027092f, - -0.9756877878061048f, - -0.975716468091354f, - -0.975745131657965f, - -0.9757737785054467f, - -0.9758024086333084f, - -0.9758310220410595f, - -0.9758596187282096f, - -0.9758881986942689f, - -0.9759167619387472f, - -0.9759453084611559f, - -0.9759738382610051f, - -0.9760023513378066f, - -0.9760308476910708f, - -0.9760593273203108f, - -0.9760877902250376f, - -0.9761162364047641f, - -0.9761446658590021f, - -0.9761730785872653f, - -0.9762014745890665f, - -0.9762298538639193f, - -0.976258216411337f, - -0.976286562230834f, - -0.9763148913219245f, - -0.9763432036841233f, - -0.9763714993169449f, - -0.9763997782199045f, - -0.9764280403925178f, - -0.9764562858343007f, - -0.9764845145447686f, - -0.9765127265234382f, - -0.9765409217698261f, - -0.9765691002834493f, - -0.9765972620638246f, - -0.9766254071104696f, - -0.9766535354229021f, - -0.9766816470006404f, - -0.9767097418432024f, - -0.9767378199501067f, - -0.9767658813208723f, - -0.9767939259550187f, - -0.9768219538520648f, - -0.9768499650115308f, - -0.9768779594329363f, - -0.9769059371158021f, - -0.9769338980596487f, - -0.9769618422639966f, - -0.9769897697283676f, - -0.9770176804522824f, - -0.9770455744352636f, - -0.9770734516768327f, - -0.9771013121765122f, - -0.9771291559338244f, - -0.9771569829482929f, - -0.9771847932194403f, - -0.9772125867467905f, - -0.9772403635298668f, - -0.9772681235681934f, - -0.9772958668612948f, - -0.9773235934086957f, - -0.9773513032099207f, - -0.9773789962644952f, - -0.9774066725719446f, - -0.977434332131795f, - -0.9774619749435719f, - -0.9774896010068019f, - -0.9775172103210117f, - -0.9775448028857284f, - -0.9775723787004789f, - -0.9775999377647908f, - -0.9776274800781916f, - -0.97765500564021f, - -0.9776825144503738f, - -0.9777100065082119f, - -0.9777374818132532f, - -0.977764940365027f, - -0.9777923821630625f, - -0.9778198072068898f, - -0.9778472154960388f, - -0.9778746070300401f, - -0.977901981808424f, - -0.9779293398307217f, - -0.9779566810964646f, - -0.9779840056051837f, - -0.9780113133564111f, - -0.9780386043496788f, - -0.9780658785845195f, - -0.9780931360604654f, - -0.9781203767770497f, - -0.9781476007338056f, - -0.9781748079302667f, - -0.9782019983659664f, - -0.9782291720404396f, - -0.9782563289532199f, - -0.9782834691038426f, - -0.978310592491842f, - -0.9783376991167538f, - -0.9783647889781135f, - -0.9783918620754569f, - -0.97841891840832f, - -0.9784459579762392f, - -0.9784729807787513f, - -0.9784999868153934f, - -0.9785269760857024f, - -0.978553948589216f, - -0.978580904325472f, - -0.9786078432940087f, - -0.9786347654943645f, - -0.9786616709260779f, - -0.9786885595886877f, - -0.9787154314817338f, - -0.9787422866047552f, - -0.9787691249572921f, - -0.9787959465388841f, - -0.9788227513490724f, - -0.978849539387397f, - -0.9788763106533995f, - -0.9789030651466206f, - -0.9789298028666022f, - -0.9789565238128861f, - -0.9789832279850147f, - -0.9790099153825298f, - -0.9790365860049747f, - -0.979063239851892f, - -0.9790898769228253f, - -0.9791164972173182f, - -0.9791431007349143f, - -0.9791696874751579f, - -0.9791962574375934f, - -0.9792228106217657f, - -0.9792493470272197f, - -0.9792758666535005f, - -0.979302369500154f, - -0.9793288555667261f, - -0.9793553248527627f, - -0.9793817773578104f, - -0.9794082130814159f, - -0.9794346320231264f, - -0.979461034182489f, - -0.9794874195590513f, - -0.9795137881523613f, - -0.9795401399619674f, - -0.9795664749874177f, - -0.9795927932282611f, - -0.9796190946840464f, - -0.9796453793543235f, - -0.9796716472386415f, - -0.9796978983365507f, - -0.9797241326476007f, - -0.9797503501713428f, - -0.9797765509073271f, - -0.979802734855105f, - -0.9798289020142276f, - -0.9798550523842469f, - -0.9798811859647144f, - -0.9799073027551827f, - -0.9799334027552039f, - -0.979959485964331f, - -0.979985552382117f, - -0.9800116020081157f, - -0.98003763484188f, - -0.9800636508829642f, - -0.9800896501309225f, - -0.9801156325853098f, - -0.9801415982456801f, - -0.980167547111589f, - -0.9801934791825918f, - -0.9802193944582444f, - -0.9802452929381023f, - -0.9802711746217218f, - -0.9802970395086597f, - -0.9803228875984725f, - -0.9803487188907177f, - -0.9803745333849524f, - -0.9804003310807342f, - -0.9804261119776212f, - -0.9804518760751719f, - -0.9804776233729443f, - -0.9805033538704978f, - -0.9805290675673908f, - -0.9805547644631836f, - -0.9805804445574351f, - -0.9806061078497058f, - -0.9806317543395554f, - -0.9806573840265452f, - -0.9806829969102355f, - -0.9807085929901878f, - -0.9807341722659629f, - -0.9807597347371233f, - -0.9807852804032303f, - -0.9808108092638469f, - -0.9808363213185349f, - -0.9808618165668576f, - -0.980887295008378f, - -0.9809127566426599f, - -0.9809382014692665f, - -0.980963629487762f, - -0.9809890406977106f, - -0.9810144350986774f, - -0.9810398126902266f, - -0.9810651734719236f, - -0.981090517443334f, - -0.9811158446040236f, - -0.981141154953558f, - -0.9811664484915039f, - -0.9811917252174277f, - -0.9812169851308965f, - -0.9812422282314773f, - -0.9812674545187375f, - -0.981292663992245f, - -0.981317856651568f, - -0.9813430324962745f, - -0.9813681915259332f, - -0.9813933337401132f, - -0.9814184591383835f, - -0.9814435677203137f, - -0.9814686594854733f, - -0.9814937344334329f, - -0.9815187925637622f, - -0.9815438338760324f, - -0.9815688583698141f, - -0.9815938660446787f, - -0.9816188569001972f, - -0.9816438309359422f, - -0.9816687881514853f, - -0.9816937285463989f, - -0.9817186521202556f, - -0.9817435588726284f, - -0.9817684488030906f, - -0.9817933219112157f, - -0.9818181781965774f, - -0.9818430176587498f, - -0.9818678402973074f, - -0.981892646111825f, - -0.9819174351018772f, - -0.9819422072670395f, - -0.9819669626068872f, - -0.9819917011209965f, - -0.9820164228089433f, - -0.982041127670304f, - -0.982065815704655f, - -0.9820904869115739f, - -0.9821151412906374f, - -0.9821397788414236f, - -0.9821643995635095f, - -0.9821890034564742f, - -0.9822135905198954f, - -0.9822381607533525f, - -0.9822627141564235f, - -0.9822872507286887f, - -0.9823117704697271f, - -0.9823362733791186f, - -0.9823607594564436f, - -0.9823852287012823f, - -0.9824096811132155f, - -0.9824341166918242f, - -0.9824585354366899f, - -0.9824829373473938f, - -0.9825073224235181f, - -0.9825316906646447f, - -0.9825560420703566f, - -0.9825803766402359f, - -0.9826046943738659f, - -0.9826289952708299f, - -0.9826532793307118f, - -0.9826775465530949f, - -0.9827017969375639f, - -0.982726030483703f, - -0.9827502471910973f, - -0.9827744470593314f, - -0.9827986300879907f, - -0.9828227962766612f, - -0.9828469456249287f, - -0.9828710781323792f, - -0.9828951937985995f, - -0.9829192926231757f, - -0.9829433746056958f, - -0.9829674397457465f, - -0.9829914880429159f, - -0.9830155194967914f, - -0.983039534106962f, - -0.9830635318730154f, - -0.983087512794541f, - -0.9831114768711273f, - -0.9831354241023644f, - -0.9831593544878415f, - -0.9831832680271488f, - -0.9832071647198762f, - -0.9832310445656145f, - -0.9832549075639545f, - -0.9832787537144875f, - -0.9833025830168044f, - -0.9833263954704973f, - -0.9833501910751581f, - -0.9833739698303791f, - -0.9833977317357527f, - -0.9834214767908718f, - -0.9834452049953296f, - -0.9834689163487195f, - -0.9834926108506354f, - -0.983516288500671f, - -0.9835399492984206f, - -0.9835635932434789f, - -0.9835872203354409f, - -0.9836108305739015f, - -0.9836344239584562f, - -0.9836580004887008f, - -0.9836815601642315f, - -0.9837051029846442f, - -0.9837286289495358f, - -0.983752138058503f, - -0.9837756303111433f, - -0.9837991057070539f, - -0.9838225642458327f, - -0.9838460059270773f, - -0.9838694307503867f, - -0.983892838715359f, - -0.9839162298215935f, - -0.9839396040686891f, - -0.9839629614562455f, - -0.9839863019838623f, - -0.9840096256511398f, - -0.9840329324576779f, - -0.9840562224030779f, - -0.9840794954869401f, - -0.9841027517088663f, - -0.9841259910684574f, - -0.9841492135653157f, - -0.984172419199043f, - -0.984195607969242f, - -0.984218779875515f, - -0.984241934917465f, - -0.9842650730946954f, - -0.9842881944068098f, - -0.9843112988534118f, - -0.9843343864341056f, - -0.9843574571484957f, - -0.9843805109961868f, - -0.9844035479767836f, - -0.9844265680898916f, - -0.9844495713351162f, - -0.9844725577120637f, - -0.9844955272203396f, - -0.9845184798595507f, - -0.9845414156293035f, - -0.9845643345292054f, - -0.9845872365588633f, - -0.9846101217178848f, - -0.984632990005878f, - -0.9846558414224507f, - -0.9846786759672118f, - -0.9847014936397697f, - -0.9847242944397336f, - -0.9847470783667126f, - -0.9847698454203166f, - -0.9847925956001554f, - -0.9848153289058391f, - -0.984838045336978f, - -0.9848607448931833f, - -0.9848834275740657f, - -0.9849060933792367f, - -0.9849287423083078f, - -0.9849513743608911f, - -0.9849739895365985f, - -0.984996587835043f, - -0.9850191692558368f, - -0.9850417337985933f, - -0.9850642814629258f, - -0.9850868122484481f, - -0.9851093261547739f, - -0.9851318231815175f, - -0.9851543033282935f, - -0.9851767665947168f, - -0.9851992129804021f, - -0.9852216424849654f, - -0.9852440551080216f, - -0.9852664508491874f, - -0.9852888297080785f, - -0.985311191684312f, - -0.985333536777504f, - -0.9853558649872725f, - -0.9853781763132342f, - -0.985400470755007f, - -0.9854227483122092f, - -0.9854450089844587f, - -0.9854672527713741f, - -0.9854894796725745f, - -0.985511689687679f, - -0.9855338828163067f, - -0.9855560590580776f, - -0.9855782184126118f, - -0.9856003608795296f, - -0.9856224864584513f, - -0.9856445951489979f, - -0.9856666869507908f, - -0.9856887618634514f, - -0.9857108198866011f, - -0.9857328610198623f, - -0.9857548852628574f, - -0.9857768926152087f, - -0.9857988830765393f, - -0.9858208566464723f, - -0.9858428133246313f, - -0.9858647531106401f, - -0.9858866760041226f, - -0.9859085820047033f, - -0.9859304711120067f, - -0.9859523433256581f, - -0.9859741986452822f, - -0.985996037070505f, - -0.9860178586009518f, - -0.9860396632362493f, - -0.9860614509760233f, - -0.9860832218199009f, - -0.9861049757675087f, - -0.9861267128184743f, - -0.986148432972425f, - -0.986170136228989f, - -0.9861918225877937f, - -0.9862134920484682f, - -0.9862351446106409f, - -0.9862567802739409f, - -0.9862783990379974f, - -0.98630000090244f, - -0.9863215858668984f, - -0.9863431539310031f, - -0.9863647050943842f, - -0.9863862393566726f, - -0.9864077567174991f, - -0.9864292571764954f, - -0.9864507407332929f, - -0.9864722073875233f, - -0.986493657138819f, - -0.9865150899868124f, - -0.9865365059311363f, - -0.9865579049714236f, - -0.9865792871073078f, - -0.9866006523384223f, - -0.9866220006644014f, - -0.986643332084879f, - -0.9866646465994895f, - -0.9866859442078679f, - -0.9867072249096495f, - -0.986728488704469f, - -0.9867497355919627f, - -0.9867709655717659f, - -0.9867921786435155f, - -0.9868133748068476f, - -0.9868345540613993f, - -0.9868557164068071f, - -0.9868768618427093f, - -0.9868979903687428f, - -0.986919101984546f, - -0.9869401966897567f, - -0.9869612744840142f, - -0.9869823353669567f, - -0.9870033793382236f, - -0.9870244063974541f, - -0.9870454165442881f, - -0.9870664097783656f, - -0.9870873860993268f, - -0.9871083455068124f, - -0.987129288000463f, - -0.9871502135799199f, - -0.987171122244825f, - -0.9871920139948192f, - -0.987212888829545f, - -0.9872337467486447f, - -0.987254587751761f, - -0.9872754118385365f, - -0.9872962190086146f, - -0.9873170092616387f, - -0.9873377825972527f, - -0.9873585390151003f, - -0.9873792785148262f, - -0.9874000010960748f, - -0.9874207067584914f, - -0.9874413955017208f, - -0.9874620673254086f, - -0.9874827222292007f, - -0.9875033602127431f, - -0.9875239812756824f, - -0.9875445854176649f, - -0.9875651726383379f, - -0.9875857429373481f, - -0.9876062963143437f, - -0.9876268327689721f, - -0.9876473523008817f, - -0.9876678549097205f, - -0.9876883405951377f, - -0.9877088093567818f, - -0.9877292611943025f, - -0.9877496961073491f, - -0.9877701140955714f, - -0.9877905151586196f, - -0.9878108992961444f, - -0.9878312665077962f, - -0.9878516167932261f, - -0.9878719501520854f, - -0.9878922665840258f, - -0.987912566088699f, - -0.9879328486657574f, - -0.9879531143148532f, - -0.9879733630356394f, - -0.9879935948277689f, - -0.9880138096908953f, - -0.9880340076246715f, - -0.9880541886287523f, - -0.9880743527027914f, - -0.9880944998464434f, - -0.988114630059363f, - -0.9881347433412055f, - -0.9881548396916261f, - -0.9881749191102804f, - -0.9881949815968245f, - -0.9882150271509147f, - -0.9882350557722072f, - -0.988255067460359f, - -0.9882750622150274f, - -0.9882950400358693f, - -0.9883150009225429f, - -0.9883349448747059f, - -0.9883548718920167f, - -0.9883747819741335f, - -0.9883946751207158f, - -0.9884145513314222f, - -0.9884344106059124f, - -0.9884542529438458f, - -0.9884740783448828f, - -0.9884938868086834f, - -0.9885136783349086f, - -0.9885334529232186f, - -0.988553210573275f, - -0.9885729512847393f, - -0.9885926750572733f, - -0.9886123818905387f, - -0.9886320717841981f, - -0.988651744737914f, - -0.9886714007513494f, - -0.9886910398241674f, - -0.9887106619560316f, - -0.9887302671466055f, - -0.9887498553955536f, - -0.98876942670254f, - -0.9887889810672296f, - -0.9888085184892867f, - -0.9888280389683773f, - -0.9888475425041665f, - -0.9888670290963203f, - -0.9888864987445045f, - -0.9889059514483859f, - -0.9889253872076309f, - -0.9889448060219067f, - -0.9889642078908802f, - -0.9889835928142193f, - -0.9890029607915917f, - -0.9890223118226655f, - -0.9890416459071093f, - -0.9890609630445917f, - -0.9890802632347816f, - -0.9890995464773484f, - -0.9891188127719618f, - -0.9891380621182915f, - -0.9891572945160076f, - -0.9891765099647809f, - -0.989195708464282f, - -0.9892148900141816f, - -0.9892340546141515f, - -0.989253202263863f, - -0.9892723329629883f, - -0.9892914467111994f, - -0.9893105435081687f, - -0.9893296233535691f, - -0.989348686247074f, - -0.9893677321883562f, - -0.9893867611770895f, - -0.989405773212948f, - -0.9894247682956061f, - -0.9894437464247379f, - -0.9894627076000185f, - -0.9894816518211227f, - -0.9895005790877264f, - -0.9895194893995048f, - -0.9895383827561343f, - -0.9895572591572906f, - -0.9895761186026509f, - -0.9895949610918917f, - -0.9896137866246902f, - -0.9896325952007237f, - -0.9896513868196702f, - -0.9896701614812075f, - -0.989688919185014f, - -0.9897076599307681f, - -0.9897263837181489f, - -0.9897450905468355f, - -0.9897637804165075f, - -0.9897824533268443f, - -0.9898011092775262f, - -0.9898197482682335f, - -0.989838370298647f, - -0.9898569753684473f, - -0.9898755634773158f, - -0.9898941346249338f, - -0.9899126888109834f, - -0.9899312260351465f, - -0.9899497462971054f, - -0.9899682495965428f, - -0.9899867359331418f, - -0.9900052053065855f, - -0.9900236577165575f, - -0.9900420931627416f, - -0.9900605116448218f, - -0.9900789131624828f, - -0.990097297715409f, - -0.9901156653032855f, - -0.9901340159257974f, - -0.9901523495826308f, - -0.9901706662734708f, - -0.9901889659980042f, - -0.990207248755917f, - -0.9902255145468963f, - -0.9902437633706288f, - -0.990261995226802f, - -0.9902802101151033f, - -0.990298408035221f, - -0.9903165889868428f, - -0.9903347529696576f, - -0.9903528999833537f, - -0.9903710300276205f, - -0.9903891431021473f, - -0.9904072392066238f, - -0.9904253183407397f, - -0.9904433805041852f, - -0.9904614256966512f, - -0.9904794539178282f, - -0.9904974651674073f, - -0.9905154594450799f, - -0.9905334367505377f, - -0.9905513970834728f, - -0.9905693404435773f, - -0.9905872668305437f, - -0.9906051762440647f, - -0.990623068683834f, - -0.9906409441495444f, - -0.9906588026408899f, - -0.9906766441575645f, - -0.9906944686992625f, - -0.9907122762656784f, - -0.990730066856507f, - -0.9907478404714436f, - -0.9907655971101836f, - -0.9907833367724228f, - -0.9908010594578571f, - -0.9908187651661832f, - -0.9908364538970971f, - -0.9908541256502963f, - -0.9908717804254775f, - -0.9908894182223388f, - -0.9909070390405772f, - -0.9909246428798915f, - -0.9909422297399796f, - -0.9909597996205404f, - -0.9909773525212727f, - -0.9909948884418758f, - -0.9910124073820491f, - -0.9910299093414928f, - -0.9910473943199065f, - -0.9910648623169909f, - -0.9910823133324467f, - -0.9910997473659748f, - -0.9911171644172765f, - -0.9911345644860532f, - -0.991151947572007f, - -0.9911693136748401f, - -0.9911866627942545f, - -0.9912039949299535f, - -0.9912213100816395f, - -0.9912386082490164f, - -0.9912558894317876f, - -0.9912731536296568f, - -0.9912904008423282f, - -0.9913076310695066f, - -0.9913248443108964f, - -0.991342040566203f, - -0.9913592198351313f, - -0.9913763821173874f, - -0.991393527412677f, - -0.9914106557207062f, - -0.9914277670411819f, - -0.9914448613738104f, - -0.9914619387182991f, - -0.9914789990743554f, - -0.991496042441687f, - -0.9915130688200017f, - -0.9915300782090077f, - -0.9915470706084138f, - -0.9915640460179288f, - -0.9915810044372617f, - -0.9915979458661219f, - -0.9916148703042192f, - -0.9916317777512638f, - -0.9916486682069655f, - -0.9916655416710353f, - -0.9916823981431839f, - -0.9916992376231227f, - -0.9917160601105628f, - -0.9917328656052162f, - -0.9917496541067948f, - -0.9917664256150112f, - -0.9917831801295777f, - -0.9917999176502075f, - -0.9918166381766134f, - -0.9918333417085092f, - -0.9918500282456088f, - -0.9918666977876262f, - -0.9918833503342753f, - -0.9918999858852715f, - -0.9919166044403293f, - -0.9919332059991641f, - -0.9919497905614912f, - -0.9919663581270269f, - -0.991982908695487f, - -0.991999442266588f, - -0.9920159588400465f, - -0.9920324584155794f, - -0.9920489409929042f, - -0.9920654065717386f, - -0.9920818551518f, - -0.992098286732807f, - -0.9921147013144778f, - -0.9921310988965314f, - -0.9921474794786864f, - -0.9921638430606625f, - -0.9921801896421791f, - -0.9921965192229564f, - -0.9922128318027144f, - -0.9922291273811734f, - -0.9922454059580544f, - -0.9922616675330784f, - -0.992277912105967f, - -0.9922941396764415f, - -0.992310350244224f, - -0.9923265438090367f, - -0.9923427203706023f, - -0.9923588799286434f, - -0.9923750224828831f, - -0.9923911480330451f, - -0.9924072565788528f, - -0.9924233481200302f, - -0.9924394226563017f, - -0.9924554801873917f, - -0.9924715207130254f, - -0.9924875442329275f, - -0.9925035507468237f, - -0.9925195402544397f, - -0.9925355127555016f, - -0.9925514682497356f, - -0.9925674067368684f, - -0.9925833282166268f, - -0.9925992326887378f, - -0.9926151201529293f, - -0.992630990608929f, - -0.9926468440564647f, - -0.992662680495265f, - -0.9926784999250583f, - -0.9926943023455739f, - -0.9927100877565406f, - -0.9927258561576882f, - -0.9927416075487464f, - -0.9927573419294455f, - -0.9927730592995158f, - -0.9927887596586877f, - -0.9928044430066925f, - -0.9928201093432615f, - -0.992835758668126f, - -0.9928513909810182f, - -0.9928670062816698f, - -0.9928826045698137f, - -0.9928981858451823f, - -0.9929137501075087f, - -0.9929292973565262f, - -0.9929448275919686f, - -0.9929603408135695f, - -0.9929758370210633f, - -0.9929913162141845f, - -0.9930067783926675f, - -0.9930222235562478f, - -0.9930376517046605f, - -0.9930530628376414f, - -0.9930684569549262f, - -0.9930838340562514f, - -0.9930991941413534f, - -0.9931145372099691f, - -0.9931298632618353f, - -0.9931451722966897f, - -0.9931604643142699f, - -0.9931757393143139f, - -0.9931909972965598f, - -0.9932062382607463f, - -0.9932214622066122f, - -0.9932366691338969f, - -0.9932518590423394f, - -0.9932670319316796f, - -0.9932821878016577f, - -0.9932973266520139f, - -0.9933124484824886f, - -0.993327553292823f, - -0.9933426410827579f, - -0.9933577118520353f, - -0.9933727656003964f, - -0.9933878023275837f, - -0.9934028220333393f, - -0.993417824717406f, - -0.9934328103795266f, - -0.9934477790194444f, - -0.9934627306369028f, - -0.9934776652316459f, - -0.9934925828034175f, - -0.993507483351962f, - -0.9935223668770244f, - -0.9935372333783493f, - -0.9935520828556822f, - -0.9935669153087685f, - -0.9935817307373542f, - -0.9935965291411853f, - -0.9936113105200084f, - -0.99362607487357f, - -0.9936408222016174f, - -0.9936555525038976f, - -0.9936702657801585f, - -0.9936849620301478f, - -0.9936996412536138f, - -0.9937143034503048f, - -0.9937289486199696f, - -0.9937435767623574f, - -0.9937581878772176f, - -0.9937727819642996f, - -0.9937873590233535f, - -0.9938019190541294f, - -0.9938164620563781f, - -0.99383098802985f, - -0.9938454969742966f, - -0.9938599888894689f, - -0.993874463775119f, - -0.9938889216309986f, - -0.9939033624568601f, - -0.9939177862524557f, - -0.9939321930175389f, - -0.9939465827518623f, - -0.9939609554551797f, - -0.9939753111272445f, - -0.993989649767811f, - -0.9940039713766333f, - -0.9940182759534661f, - -0.9940325634980642f, - -0.9940468340101831f, - -0.9940610874895779f, - -0.9940753239360046f, - -0.9940895433492192f, - -0.9941037457289779f, - -0.9941179310750375f, - -0.994132099387155f, - -0.9941462506650875f, - -0.9941603849085927f, - -0.9941745021174282f, - -0.9941886022913521f, - -0.994202685430123f, - -0.9942167515334995f, - -0.9942308006012405f, - -0.9942448326331054f, - -0.9942588476288536f, - -0.9942728455882451f, - -0.9942868265110401f, - -0.9943007903969988f, - -0.9943147372458823f, - -0.9943286670574512f, - -0.994342579831467f, - -0.9943564755676914f, - -0.9943703542658863f, - -0.9943842159258137f, - -0.9943980605472363f, - -0.9944118881299167f, - -0.9944256986736181f, - -0.9944394921781038f, - -0.9944532686431374f, - -0.9944670280684829f, - -0.9944807704539047f, - -0.994494495799167f, - -0.994508204104035f, - -0.9945218953682733f, - -0.9945355695916478f, - -0.9945492267739239f, - -0.9945628669148678f, - -0.9945764900142456f, - -0.9945900960718239f, - -0.9946036850873696f, - -0.9946172570606501f, - -0.9946308119914323f, - -0.9946443498794844f, - -0.9946578707245742f, - -0.9946713745264703f, - -0.9946848612849409f, - -0.9946983309997551f, - -0.9947117836706822f, - -0.9947252192974918f, - -0.9947386378799533f, - -0.9947520394178371f, - -0.9947654239109133f, - -0.9947787913589529f, - -0.9947921417617265f, - -0.9948054751190055f, - -0.9948187914305615f, - -0.9948320906961662f, - -0.9948453729155919f, - -0.9948586380886109f, - -0.9948718862149959f, - -0.9948851172945198f, - -0.9948983313269562f, - -0.9949115283120782f, - -0.9949247082496602f, - -0.9949378711394758f, - -0.9949510169813002f, - -0.9949641457749074f, - -0.9949772575200729f, - -0.9949903522165718f, - -0.99500342986418f, - -0.995016490462673f, - -0.9950295340118275f, - -0.9950425605114196f, - -0.9950555699612262f, - -0.9950685623610246f, - -0.9950815377105919f, - -0.9950944960097059f, - -0.9951074372581445f, - -0.9951203614556862f, - -0.9951332686021092f, - -0.9951461586971925f, - -0.9951590317407152f, - -0.9951718877324567f, - -0.9951847266721969f, - -0.9951975485597155f, - -0.9952103533947932f, - -0.9952231411772101f, - -0.9952359119067475f, - -0.9952486655831865f, - -0.9952614022063083f, - -0.9952741217758949f, - -0.9952868242917284f, - -0.995299509753591f, - -0.9953121781612654f, - -0.9953248295145345f, - -0.9953374638131817f, - -0.9953500810569901f, - -0.9953626812457439f, - -0.9953752643792271f, - -0.995387830457224f, - -0.9954003794795193f, - -0.995412911445898f, - -0.9954254263561456f, - -0.9954379242100472f, - -0.995450405007389f, - -0.9954628687479571f, - -0.9954753154315379f, - -0.9954877450579179f, - -0.9955001576268845f, - -0.9955125531382248f, - -0.9955249315917265f, - -0.9955372929871774f, - -0.9955496373243657f, - -0.99556196460308f, - -0.995574274823109f, - -0.9955865679842417f, - -0.9955988440862675f, - -0.9956111031289762f, - -0.9956233451121576f, - -0.9956355700356019f, - -0.9956477778990998f, - -0.9956599687024418f, - -0.9956721424454195f, - -0.9956842991278237f, - -0.9956964387494468f, - -0.9957085613100801f, - -0.9957206668095163f, - -0.995732755247548f, - -0.9957448266239679f, - -0.9957568809385691f, - -0.9957689181911452f, - -0.99578093838149f, - -0.9957929415093975f, - -0.9958049275746618f, - -0.9958168965770777f, - -0.9958288485164402f, - -0.9958407833925442f, - -0.9958527012051857f, - -0.99586460195416f, - -0.9958764856392636f, - -0.9958883522602925f, - -0.9959002018170436f, - -0.9959120343093137f, - -0.9959238497369003f, - -0.9959356480996007f, - -0.9959474293972129f, - -0.9959591936295349f, - -0.9959709407963652f, - -0.9959826708975025f, - -0.9959943839327459f, - -0.9960060799018944f, - -0.996017758804748f, - -0.9960294206411062f, - -0.9960410654107695f, - -0.9960526931135383f, - -0.9960643037492132f, - -0.9960758973175954f, - -0.9960874738184862f, - -0.9960990332516871f, - -0.9961105756170004f, - -0.9961221009142279f, - -0.9961336091431725f, - -0.9961451003036367f, - -0.9961565743954238f, - -0.996168031418337f, - -0.9961794713721802f, - -0.9961908942567572f, - -0.9962023000718725f, - -0.9962136888173304f, - -0.9962250604929359f, - -0.9962364150984943f, - -0.9962477526338107f, - -0.996259073098691f, - -0.9962703764929413f, - -0.9962816628163678f, - -0.9962929320687772f, - -0.9963041842499764f, - -0.9963154193597724f, - -0.996326637397973f, - -0.9963378383643859f, - -0.996349022258819f, - -0.9963601890810808f, - -0.99637133883098f, - -0.9963824715083254f, - -0.9963935871129264f, - -0.9964046856445924f, - -0.9964157671031333f, - -0.9964268314883593f, - -0.9964378788000807f, - -0.9964489090381082f, - -0.996459922202253f, - -0.996470918292326f, - -0.9964818973081393f, - -0.9964928592495043f, - -0.9965038041162335f, - -0.9965147319081391f, - -0.9965256426250341f, - -0.9965365362667313f, - -0.9965474128330444f, - -0.9965582723237866f, - -0.9965691147387721f, - -0.996579940077815f, - -0.99659074834073f, - -0.9966015395273317f, - -0.9966123136374353f, - -0.9966230706708561f, - -0.9966338106274099f, - -0.9966445335069125f, - -0.9966552393091803f, - -0.9966659280340299f, - -0.9966765996812781f, - -0.9966872542507419f, - -0.9966978917422389f, - -0.9967085121555869f, - -0.9967191154906038f, - -0.9967297017471077f, - -0.9967402709249177f, - -0.9967508230238523f, - -0.996761358043731f, - -0.9967718759843729f, - -0.9967823768455981f, - -0.9967928606272266f, - -0.9968033273290787f, - -0.9968137769509751f, - -0.9968242094927366f, - -0.9968346249541847f, - -0.9968450233351408f, - -0.9968554046354268f, - -0.9968657688548646f, - -0.9968761159932769f, - -0.9968864460504862f, - -0.9968967590263156f, - -0.9969070549205883f, - -0.996917333733128f, - -0.9969275954637584f, - -0.9969378401123039f, - -0.9969480676785888f, - -0.996958278162438f, - -0.9969684715636763f, - -0.9969786478821292f, - -0.9969888071176224f, - -0.9969989492699818f, - -0.9970090743390334f, - -0.9970191823246038f, - -0.99702927322652f, - -0.9970393470446091f, - -0.9970494037786981f, - -0.997059443428615f, - -0.9970694659941877f, - -0.9970794714752446f, - -0.9970894598716139f, - -0.9970994311831248f, - -0.9971093854096064f, - -0.997119322550888f, - -0.9971292426067994f, - -0.9971391455771705f, - -0.9971490314618319f, - -0.9971589002606139f, - -0.9971687519733476f, - -0.9971785865998642f, - -0.997188404139995f, - -0.997198204593572f, - -0.9972079879604271f, - -0.9972177542403927f, - -0.9972275034333015f, - -0.9972372355389866f, - -0.9972469505572809f, - -0.9972566484880182f, - -0.9972663293310322f, - -0.9972759930861571f, - -0.9972856397532273f, - -0.9972952693320775f, - -0.9973048818225426f, - -0.9973144772244581f, - -0.9973240555376593f, - -0.9973336167619824f, - -0.9973431608972635f, - -0.9973526879433389f, - -0.9973621979000453f, - -0.99737169076722f, - -0.9973811665447002f, - -0.9973906252323237f, - -0.9974000668299281f, - -0.9974094913373519f, - -0.9974188987544336f, - -0.9974282890810118f, - -0.9974376623169258f, - -0.9974470184620149f, - -0.9974563575161188f, - -0.9974656794790775f, - -0.9974749843507313f, - -0.9974842721309207f, - -0.9974935428194865f, - -0.99750279641627f, - -0.9975120329211127f, - -0.997521252333856f, - -0.9975304546543422f, - -0.9975396398824136f, - -0.9975488080179128f, - -0.9975579590606825f, - -0.9975670930105662f, - -0.9975762098674072f, - -0.9975853096310495f, - -0.997594392301337f, - -0.9976034578781139f, - -0.9976125063612252f, - -0.9976215377505158f, - -0.9976305520458307f, - -0.9976395492470157f, - -0.9976485293539165f, - -0.9976574923663794f, - -0.9976664382842505f, - -0.9976753671073768f, - -0.9976842788356053f, - -0.9976931734687831f, - -0.997702051006758f, - -0.9977109114493777f, - -0.9977197547964906f, - -0.9977285810479449f, - -0.9977373902035896f, - -0.9977461822632737f, - -0.9977549572268465f, - -0.9977637150941576f, - -0.9977724558650571f, - -0.997781179539395f, - -0.9977898861170221f, - -0.997798575597789f, - -0.9978072479815469f, - -0.9978159032681471f, - -0.9978245414574415f, - -0.9978331625492818f, - -0.9978417665435205f, - -0.99785035344001f, - -0.9978589232386035f, - -0.9978674759391538f, - -0.9978760115415145f, - -0.9978845300455393f, - -0.9978930314510823f, - -0.9979015157579979f, - -0.9979099829661404f, - -0.9979184330753651f, - -0.997926866085527f, - -0.9979352819964817f, - -0.9979436808080849f, - -0.9979520625201928f, - -0.9979604271326616f, - -0.9979687746453482f, - -0.9979771050581093f, - -0.9979854183708025f, - -0.9979937145832851f, - -0.998001993695415f, - -0.9980102557070504f, - -0.9980185006180496f, - -0.9980267284282716f, - -0.9980349391375751f, - -0.9980431327458196f, - -0.9980513092528646f, - -0.9980594686585701f, - -0.9980676109627962f, - -0.9980757361654035f, - -0.9980838442662525f, - -0.9980919352652047f, - -0.9981000091621212f, - -0.9981080659568636f, - -0.998116105649294f, - -0.9981241282392745f, - -0.9981321337266679f, - -0.9981401221113367f, - -0.9981480933931443f, - -0.9981560475719538f, - -0.9981639846476291f, - -0.9981719046200342f, - -0.9981798074890336f, - -0.9981876932544914f, - -0.9981955619162729f, - -0.9982034134742431f, - -0.9982112479282674f, - -0.9982190652782118f, - -0.998226865523942f, - -0.9982346486653247f, - -0.9982424147022264f, - -0.9982501636345139f, - -0.9982578954620546f, - -0.9982656101847158f, - -0.9982733078023657f, - -0.998280988314872f, - -0.9982886517221033f, - -0.9982962980239283f, - -0.9983039272202159f, - -0.9983115393108354f, - -0.9983191342956564f, - -0.9983267121745487f, - -0.9983342729473825f, - -0.9983418166140283f, - -0.9983493431743568f, - -0.9983568526282389f, - -0.9983643449755463f, - -0.9983718202161501f, - -0.9983792783499226f, - -0.9983867193767358f, - -0.9983941432964624f, - -0.998401550108975f, - -0.9984089398141468f, - -0.9984163124118512f, - -0.9984236679019618f, - -0.9984310062843526f, - -0.9984383275588977f, - -0.998445631725472f, - -0.9984529187839499f, - -0.9984601887342069f, - -0.9984674415761184f, - -0.9984746773095601f, - -0.9984818959344077f, - -0.9984890974505379f, - -0.9984962818578271f, - -0.9985034491561524f, - -0.9985105993453908f, - -0.9985177324254197f, - -0.9985248483961172f, - -0.9985319472573612f, - -0.9985390290090299f, - -0.9985460936510022f, - -0.998553141183157f, - -0.9985601716053734f, - -0.998567184917531f, - -0.9985741811195098f, - -0.9985811602111896f, - -0.9985881221924512f, - -0.9985950670631749f, - -0.9986019948232421f, - -0.9986089054725338f, - -0.9986157990109317f, - -0.9986226754383176f, - -0.9986295347545739f, - -0.9986363769595828f, - -0.9986432020532272f, - -0.9986500100353901f, - -0.998656800905955f, - -0.9986635746648053f, - -0.998670331311825f, - -0.9986770708468985f, - -0.9986837932699101f, - -0.9986904985807449f, - -0.9986971867792875f, - -0.9987038578654238f, - -0.9987105118390394f, - -0.99871714870002f, - -0.9987237684482522f, - -0.9987303710836224f, - -0.9987369566060175f, - -0.9987435250153247f, - -0.9987500763114313f, - -0.9987566104942253f, - -0.9987631275635945f, - -0.9987696275194275f, - -0.9987761103616126f, - -0.998782576090039f, - -0.9987890247045957f, - -0.9987954562051724f, - -0.9988018705916587f, - -0.9988082678639448f, - -0.9988146480219211f, - -0.9988210110654783f, - -0.9988273569945072f, - -0.9988336858088992f, - -0.9988399975085459f, - -0.9988462920933391f, - -0.9988525695631708f, - -0.9988588299179337f, - -0.9988650731575204f, - -0.9988712992818238f, - -0.9988775082907375f, - -0.998883700184155f, - -0.99888987496197f, - -0.9988960326240769f, - -0.9989021731703701f, - -0.9989082966007445f, - -0.998914402915095f, - -0.9989204921133172f, - -0.9989265641953066f, - -0.9989326191609592f, - -0.9989386570101713f, - -0.9989446777428392f, - -0.9989506813588601f, - -0.9989566678581309f, - -0.9989626372405491f, - -0.9989685895060123f, - -0.9989745246544187f, - -0.9989804426856664f, - -0.9989863435996542f, - -0.9989922273962809f, - -0.9989980940754456f, - -0.9990039436370479f, - -0.9990097760809875f, - -0.9990155914071644f, - -0.9990213896154793f, - -0.9990271707058322f, - -0.9990329346781247f, - -0.9990386815322577f, - -0.9990444112681328f, - -0.9990501238856517f, - -0.9990558193847169f, - -0.9990614977652303f, - -0.999067159027095f, - -0.9990728031702136f, - -0.9990784301944899f, - -0.9990840400998271f, - -0.9990896328861292f, - -0.9990952085533004f, - -0.999100767101245f, - -0.9991063085298679f, - -0.9991118328390742f, - -0.9991173400287692f, - -0.9991228300988584f, - -0.9991283030492478f, - -0.9991337588798437f, - -0.9991391975905526f, - -0.9991446191812813f, - -0.9991500236519367f, - -0.9991554110024267f, - -0.9991607812326584f, - -0.9991661343425401f, - -0.9991714703319801f, - -0.9991767892008868f, - -0.9991820909491692f, - -0.9991873755767364f, - -0.9991926430834979f, - -0.9991978934693634f, - -0.9992031267342429f, - -0.9992083428780468f, - -0.9992135419006857f, - -0.9992187238020704f, - -0.9992238885821124f, - -0.9992290362407229f, - -0.9992341667778138f, - -0.9992392801932973f, - -0.9992443764870856f, - -0.9992494556590916f, - -0.999254517709228f, - -0.9992595626374082f, - -0.9992645904435459f, - -0.9992696011275547f, - -0.9992745946893489f, - -0.9992795711288428f, - -0.9992845304459512f, - -0.9992894726405892f, - -0.9992943977126721f, - -0.9992993056621154f, - -0.9993041964888351f, - -0.9993090701927473f, - -0.9993139267737686f, - -0.9993187662318158f, - -0.9993235885668059f, - -0.9993283937786562f, - -0.9993331818672846f, - -0.9993379528326087f, - -0.9993427066745472f, - -0.9993474433930183f, - -0.9993521629879409f, - -0.9993568654592342f, - -0.9993615508068177f, - -0.9993662190306107f, - -0.9993708701305338f, - -0.999375504106507f, - -0.999380120958451f, - -0.9993847206862865f, - -0.9993893032899348f, - -0.9993938687693175f, - -0.9993984171243561f, - -0.9994029483549729f, - -0.9994074624610901f, - -0.9994119594426306f, - -0.9994164392995171f, - -0.9994209020316729f, - -0.9994253476390215f, - -0.9994297761214869f, - -0.9994341874789929f, - -0.9994385817114643f, - -0.9994429588188255f, - -0.9994473188010017f, - -0.999451661657918f, - -0.9994559873895001f, - -0.999460295995674f, - -0.9994645874763657f, - -0.9994688618315016f, - -0.9994731190610087f, - -0.9994773591648138f, - -0.9994815821428444f, - -0.9994857879950282f, - -0.999489976721293f, - -0.999494148321567f, - -0.9994983027957789f, - -0.9995024401438574f, - -0.9995065603657316f, - -0.9995106634613309f, - -0.9995147494305849f, - -0.9995188182734238f, - -0.9995228699897779f, - -0.9995269045795775f, - -0.9995309220427536f, - -0.9995349223792375f, - -0.9995389055889605f, - -0.9995428716718544f, - -0.9995468206278512f, - -0.9995507524568833f, - -0.9995546671588833f, - -0.999558564733784f, - -0.9995624451815189f, - -0.9995663085020212f, - -0.999570154695225f, - -0.9995739837610641f, - -0.9995777956994731f, - -0.9995815905103866f, - -0.9995853681937397f, - -0.9995891287494675f, - -0.9995928721775056f, - -0.9995965984777899f, - -0.9996003076502565f, - -0.9996039996948419f, - -0.9996076746114829f, - -0.9996113324001163f, - -0.9996149730606797f, - -0.9996185965931106f, - -0.9996222029973468f, - -0.9996257922733267f, - -0.9996293644209887f, - -0.9996329194402717f, - -0.9996364573311145f, - -0.9996399780934567f, - -0.999643481727238f, - -0.9996469682323983f, - -0.9996504376088778f, - -0.9996538898566173f, - -0.9996573249755573f, - -0.9996607429656391f, - -0.9996641438268041f, - -0.9996675275589942f, - -0.9996708941621513f, - -0.9996742436362176f, - -0.9996775759811358f, - -0.9996808911968489f, - -0.9996841892832999f, - -0.9996874702404326f, - -0.9996907340681903f, - -0.9996939807665175f, - -0.9996972103353584f, - -0.9997004227746578f, - -0.9997036180843604f, - -0.9997067962644115f, - -0.9997099573147569f, - -0.9997131012353422f, - -0.9997162280261135f, - -0.9997193376870174f, - -0.9997224302180006f, - -0.99972550561901f, - -0.9997285638899929f, - -0.999731605030897f, - -0.99973462904167f, - -0.9997376359222604f, - -0.9997406256726165f, - -0.9997435982926869f, - -0.9997465537824209f, - -0.9997494921417679f, - -0.9997524133706773f, - -0.9997553174690993f, - -0.999758204436984f, - -0.999761074274282f, - -0.9997639269809441f, - -0.9997667625569213f, - -0.9997695810021652f, - -0.9997723823166274f, - -0.99977516650026f, - -0.9997779335530151f, - -0.9997806834748455f, - -0.9997834162657039f, - -0.9997861319255437f, - -0.9997888304543181f, - -0.9997915118519811f, - -0.9997941761184866f, - -0.999796823253789f, - -0.9997994532578429f, - -0.9998020661306034f, - -0.9998046618720255f, - -0.9998072404820648f, - -0.9998098019606773f, - -0.9998123463078188f, - -0.9998148735234459f, - -0.9998173836075153f, - -0.9998198765599838f, - -0.999822352380809f, - -0.9998248110699482f, - -0.9998272526273595f, - -0.9998296770530009f, - -0.9998320843468308f, - -0.999834474508808f, - -0.9998368475388918f, - -0.9998392034370412f, - -0.999841542203216f, - -0.9998438638373761f, - -0.9998461683394817f, - -0.9998484557094933f, - -0.9998507259473718f, - -0.9998529790530782f, - -0.9998552150265739f, - -0.9998574338678207f, - -0.9998596355767804f, - -0.9998618201534154f, - -0.9998639875976882f, - -0.9998661379095618f, - -0.9998682710889991f, - -0.9998703871359639f, - -0.9998724860504196f, - -0.9998745678323304f, - -0.9998766324816606f, - -0.9998786799983749f, - -0.999880710382438f, - -0.9998827236338154f, - -0.9998847197524724f, - -0.9998866987383749f, - -0.9998886605914888f, - -0.9998906053117809f, - -0.9998925328992174f, - -0.9998944433537655f, - -0.9998963366753925f, - -0.9998982128640659f, - -0.9999000719197535f, - -0.9999019138424236f, - -0.9999037386320444f, - -0.999905546288585f, - -0.9999073368120139f, - -0.999909110202301f, - -0.9999108664594155f, - -0.9999126055833274f, - -0.999914327574007f, - -0.9999160324314248f, - -0.9999177201555514f, - -0.999919390746358f, - -0.9999210442038161f, - -0.9999226805278972f, - -0.9999242997185733f, - -0.9999259017758166f, - -0.9999274866995999f, - -0.9999290544898957f, - -0.9999306051466773f, - -0.9999321386699181f, - -0.999933655059592f, - -0.9999351543156727f, - -0.9999366364381348f, - -0.9999381014269527f, - -0.9999395492821014f, - -0.999940980003556f, - -0.9999423935912921f, - -0.9999437900452854f, - -0.9999451693655121f, - -0.9999465315519485f, - -0.9999478766045711f, - -0.999949204523357f, - -0.9999505153082835f, - -0.999951808959328f, - -0.9999530854764684f, - -0.9999543448596829f, - -0.9999555871089498f, - -0.9999568122242479f, - -0.9999580202055561f, - -0.9999592110528538f, - -0.9999603847661206f, - -0.9999615413453363f, - -0.9999626807904812f, - -0.9999638031015358f, - -0.9999649082784806f, - -0.999965996321297f, - -0.9999670672299661f, - -0.9999681210044697f, - -0.9999691576447897f, - -0.9999701771509083f, - -0.9999711795228081f, - -0.9999721647604719f, - -0.9999731328638829f, - -0.9999740838330242f, - -0.9999750176678799f, - -0.9999759343684338f, - -0.9999768339346702f, - -0.9999777163665737f, - -0.9999785816641292f, - -0.9999794298273218f, - -0.9999802608561371f, - -0.9999810747505607f, - -0.9999818715105789f, - -0.9999826511361778f, - -0.9999834136273441f, - -0.9999841589840648f, - -0.999984887206327f, - -0.9999855982941185f, - -0.9999862922474267f, - -0.9999869690662402f, - -0.9999876287505469f, - -0.999988271300336f, - -0.999988896715596f, - -0.9999895049963164f, - -0.9999900961424869f, - -0.9999906701540973f, - -0.9999912270311376f, - -0.9999917667735985f, - -0.9999922893814706f, - -0.999992794854745f, - -0.999993283193413f, - -0.9999937543974662f, - -0.9999942084668966f, - -0.9999946454016965f, - -0.9999950652018582f, - -0.9999954678673746f, - -0.9999958533982388f, - -0.9999962217944444f, - -0.9999965730559848f, - -0.999996907182854f, - -0.9999972241750464f, - -0.9999975240325565f, - -0.9999978067553793f, - -0.9999980723435097f, - -0.9999983207969434f, - -0.999998552115676f, - -0.9999987662997035f, - -0.9999989633490224f, - -0.9999991432636292f, - -0.9999993060435208f, - -0.9999994516886945f, - -0.9999995801991477f, - -0.9999996915748783f, - -0.9999997858158843f, - -0.9999998629221643f, - -0.9999999228937166f, - -0.9999999657305405f, - -0.9999999914326351f, - -1.0f, - -0.9999999914326351f, - -0.9999999657305405f, - -0.9999999228937166f, - -0.9999998629221643f, - -0.9999997858158843f, - -0.9999996915748783f, - -0.9999995801991477f, - -0.9999994516886945f, - -0.9999993060435208f, - -0.9999991432636292f, - -0.9999989633490224f, - -0.9999987662997035f, - -0.999998552115676f, - -0.9999983207969434f, - -0.9999980723435097f, - -0.9999978067553793f, - -0.9999975240325565f, - -0.9999972241750464f, - -0.999996907182854f, - -0.9999965730559848f, - -0.9999962217944444f, - -0.9999958533982388f, - -0.9999954678673746f, - -0.9999950652018582f, - -0.9999946454016965f, - -0.9999942084668966f, - -0.9999937543974662f, - -0.999993283193413f, - -0.999992794854745f, - -0.9999922893814706f, - -0.9999917667735985f, - -0.9999912270311376f, - -0.9999906701540973f, - -0.9999900961424869f, - -0.9999895049963164f, - -0.999988896715596f, - -0.999988271300336f, - -0.9999876287505469f, - -0.9999869690662402f, - -0.9999862922474267f, - -0.9999855982941185f, - -0.999984887206327f, - -0.9999841589840648f, - -0.9999834136273441f, - -0.9999826511361778f, - -0.9999818715105789f, - -0.9999810747505607f, - -0.9999802608561371f, - -0.9999794298273218f, - -0.9999785816641292f, - -0.9999777163665737f, - -0.9999768339346702f, - -0.9999759343684338f, - -0.9999750176678799f, - -0.9999740838330242f, - -0.9999731328638829f, - -0.9999721647604719f, - -0.9999711795228081f, - -0.9999701771509083f, - -0.9999691576447897f, - -0.9999681210044697f, - -0.9999670672299661f, - -0.999965996321297f, - -0.9999649082784806f, - -0.9999638031015358f, - -0.9999626807904812f, - -0.9999615413453363f, - -0.9999603847661206f, - -0.9999592110528538f, - -0.9999580202055561f, - -0.9999568122242479f, - -0.9999555871089498f, - -0.9999543448596829f, - -0.9999530854764684f, - -0.999951808959328f, - -0.9999505153082835f, - -0.999949204523357f, - -0.9999478766045711f, - -0.9999465315519485f, - -0.9999451693655121f, - -0.9999437900452854f, - -0.9999423935912921f, - -0.999940980003556f, - -0.9999395492821014f, - -0.9999381014269527f, - -0.9999366364381348f, - -0.9999351543156727f, - -0.999933655059592f, - -0.9999321386699181f, - -0.9999306051466773f, - -0.9999290544898957f, - -0.9999274866995999f, - -0.9999259017758166f, - -0.9999242997185733f, - -0.9999226805278972f, - -0.9999210442038161f, - -0.999919390746358f, - -0.9999177201555515f, - -0.9999160324314248f, - -0.999914327574007f, - -0.9999126055833274f, - -0.9999108664594155f, - -0.999909110202301f, - -0.9999073368120139f, - -0.999905546288585f, - -0.9999037386320444f, - -0.9999019138424236f, - -0.9999000719197535f, - -0.9998982128640659f, - -0.9998963366753925f, - -0.9998944433537655f, - -0.9998925328992174f, - -0.9998906053117809f, - -0.9998886605914888f, - -0.9998866987383749f, - -0.9998847197524724f, - -0.9998827236338154f, - -0.999880710382438f, - -0.9998786799983749f, - -0.9998766324816606f, - -0.9998745678323304f, - -0.9998724860504196f, - -0.9998703871359639f, - -0.9998682710889991f, - -0.9998661379095618f, - -0.9998639875976882f, - -0.9998618201534154f, - -0.9998596355767804f, - -0.9998574338678207f, - -0.9998552150265739f, - -0.9998529790530782f, - -0.9998507259473718f, - -0.9998484557094933f, - -0.9998461683394817f, - -0.9998438638373761f, - -0.9998415422032161f, - -0.9998392034370412f, - -0.9998368475388918f, - -0.9998344745088081f, - -0.9998320843468308f, - -0.9998296770530009f, - -0.9998272526273595f, - -0.9998248110699482f, - -0.999822352380809f, - -0.9998198765599838f, - -0.9998173836075153f, - -0.9998148735234459f, - -0.9998123463078188f, - -0.9998098019606773f, - -0.9998072404820648f, - -0.9998046618720255f, - -0.9998020661306034f, - -0.9997994532578429f, - -0.999796823253789f, - -0.9997941761184866f, - -0.9997915118519811f, - -0.9997888304543181f, - -0.9997861319255437f, - -0.9997834162657039f, - -0.9997806834748455f, - -0.9997779335530151f, - -0.99977516650026f, - -0.9997723823166274f, - -0.9997695810021652f, - -0.9997667625569213f, - -0.9997639269809441f, - -0.999761074274282f, - -0.999758204436984f, - -0.9997553174690993f, - -0.9997524133706773f, - -0.9997494921417679f, - -0.9997465537824209f, - -0.9997435982926869f, - -0.9997406256726165f, - -0.9997376359222604f, - -0.9997346290416701f, - -0.999731605030897f, - -0.9997285638899929f, - -0.99972550561901f, - -0.9997224302180006f, - -0.9997193376870174f, - -0.9997162280261135f, - -0.9997131012353422f, - -0.9997099573147569f, - -0.9997067962644115f, - -0.9997036180843604f, - -0.9997004227746578f, - -0.9996972103353584f, - -0.9996939807665175f, - -0.9996907340681904f, - -0.9996874702404326f, - -0.9996841892832999f, - -0.9996808911968489f, - -0.9996775759811358f, - -0.9996742436362176f, - -0.9996708941621513f, - -0.9996675275589942f, - -0.9996641438268042f, - -0.9996607429656391f, - -0.9996573249755573f, - -0.9996538898566173f, - -0.9996504376088778f, - -0.9996469682323983f, - -0.999643481727238f, - -0.9996399780934567f, - -0.9996364573311145f, - -0.9996329194402717f, - -0.9996293644209887f, - -0.9996257922733267f, - -0.9996222029973468f, - -0.9996185965931106f, - -0.9996149730606797f, - -0.9996113324001163f, - -0.9996076746114829f, - -0.9996039996948419f, - -0.9996003076502565f, - -0.9995965984777899f, - -0.9995928721775056f, - -0.9995891287494675f, - -0.9995853681937397f, - -0.9995815905103868f, - -0.9995777956994731f, - -0.9995739837610642f, - -0.999570154695225f, - -0.9995663085020213f, - -0.9995624451815189f, - -0.999558564733784f, - -0.9995546671588833f, - -0.9995507524568833f, - -0.9995468206278513f, - -0.9995428716718544f, - -0.9995389055889605f, - -0.9995349223792375f, - -0.9995309220427537f, - -0.9995269045795775f, - -0.9995228699897779f, - -0.9995188182734238f, - -0.9995147494305849f, - -0.9995106634613309f, - -0.9995065603657316f, - -0.9995024401438574f, - -0.9994983027957789f, - -0.999494148321567f, - -0.999489976721293f, - -0.9994857879950282f, - -0.9994815821428444f, - -0.9994773591648138f, - -0.9994731190610087f, - -0.9994688618315016f, - -0.9994645874763657f, - -0.999460295995674f, - -0.9994559873895001f, - -0.999451661657918f, - -0.9994473188010017f, - -0.9994429588188255f, - -0.9994385817114643f, - -0.9994341874789929f, - -0.9994297761214869f, - -0.9994253476390216f, - -0.9994209020316729f, - -0.9994164392995171f, - -0.9994119594426306f, - -0.9994074624610901f, - -0.9994029483549729f, - -0.9993984171243561f, - -0.9993938687693175f, - -0.9993893032899348f, - -0.9993847206862865f, - -0.999380120958451f, - -0.999375504106507f, - -0.9993708701305338f, - -0.9993662190306108f, - -0.9993615508068177f, - -0.9993568654592342f, - -0.9993521629879409f, - -0.9993474433930183f, - -0.9993427066745472f, - -0.9993379528326088f, - -0.9993331818672846f, - -0.9993283937786562f, - -0.9993235885668059f, - -0.9993187662318158f, - -0.9993139267737687f, - -0.9993090701927474f, - -0.9993041964888351f, - -0.9992993056621154f, - -0.9992943977126721f, - -0.9992894726405892f, - -0.9992845304459512f, - -0.9992795711288428f, - -0.9992745946893489f, - -0.9992696011275547f, - -0.9992645904435459f, - -0.9992595626374082f, - -0.999254517709228f, - -0.9992494556590916f, - -0.9992443764870856f, - -0.9992392801932973f, - -0.999234166777814f, - -0.9992290362407229f, - -0.9992238885821124f, - -0.9992187238020706f, - -0.9992135419006857f, - -0.9992083428780468f, - -0.9992031267342429f, - -0.9991978934693634f, - -0.9991926430834979f, - -0.9991873755767364f, - -0.9991820909491692f, - -0.9991767892008868f, - -0.9991714703319801f, - -0.9991661343425401f, - -0.9991607812326584f, - -0.9991554110024267f, - -0.9991500236519368f, - -0.9991446191812813f, - -0.9991391975905526f, - -0.9991337588798438f, - -0.9991283030492478f, - -0.9991228300988584f, - -0.9991173400287692f, - -0.9991118328390742f, - -0.9991063085298679f, - -0.999100767101245f, - -0.9990952085533004f, - -0.9990896328861292f, - -0.9990840400998271f, - -0.9990784301944899f, - -0.9990728031702137f, - -0.999067159027095f, - -0.9990614977652303f, - -0.9990558193847169f, - -0.9990501238856518f, - -0.9990444112681328f, - -0.9990386815322577f, - -0.9990329346781247f, - -0.9990271707058322f, - -0.9990213896154793f, - -0.9990155914071644f, - -0.9990097760809875f, - -0.9990039436370479f, - -0.9989980940754456f, - -0.9989922273962809f, - -0.9989863435996542f, - -0.9989804426856664f, - -0.9989745246544187f, - -0.9989685895060123f, - -0.9989626372405491f, - -0.998956667858131f, - -0.9989506813588601f, - -0.9989446777428392f, - -0.9989386570101713f, - -0.9989326191609592f, - -0.9989265641953067f, - -0.9989204921133172f, - -0.9989144029150951f, - -0.9989082966007445f, - -0.9989021731703701f, - -0.9988960326240769f, - -0.99888987496197f, - -0.998883700184155f, - -0.9988775082907375f, - -0.9988712992818239f, - -0.9988650731575204f, - -0.9988588299179337f, - -0.9988525695631708f, - -0.9988462920933391f, - -0.9988399975085459f, - -0.9988336858088993f, - -0.9988273569945072f, - -0.9988210110654783f, - -0.9988146480219211f, - -0.9988082678639448f, - -0.9988018705916587f, - -0.9987954562051724f, - -0.9987890247045957f, - -0.9987825760900391f, - -0.9987761103616127f, - -0.9987696275194275f, - -0.9987631275635946f, - -0.9987566104942254f, - -0.9987500763114314f, - -0.9987435250153247f, - -0.9987369566060175f, - -0.9987303710836224f, - -0.9987237684482522f, - -0.99871714870002f, - -0.9987105118390394f, - -0.9987038578654238f, - -0.9986971867792876f, - -0.9986904985807449f, - -0.9986837932699102f, - -0.9986770708468985f, - -0.998670331311825f, - -0.9986635746648053f, - -0.998656800905955f, - -0.9986500100353901f, - -0.9986432020532272f, - -0.9986363769595828f, - -0.9986295347545739f, - -0.9986226754383176f, - -0.9986157990109317f, - -0.9986089054725338f, - -0.9986019948232421f, - -0.9985950670631749f, - -0.9985881221924512f, - -0.9985811602111896f, - -0.9985741811195098f, - -0.998567184917531f, - -0.9985601716053734f, - -0.998553141183157f, - -0.9985460936510022f, - -0.9985390290090299f, - -0.9985319472573612f, - -0.9985248483961172f, - -0.9985177324254199f, - -0.9985105993453908f, - -0.9985034491561524f, - -0.9984962818578272f, - -0.9984890974505379f, - -0.9984818959344077f, - -0.9984746773095601f, - -0.9984674415761184f, - -0.998460188734207f, - -0.9984529187839499f, - -0.998445631725472f, - -0.9984383275588977f, - -0.9984310062843526f, - -0.9984236679019618f, - -0.9984163124118512f, - -0.9984089398141468f, - -0.998401550108975f, - -0.9983941432964625f, - -0.9983867193767358f, - -0.9983792783499226f, - -0.9983718202161501f, - -0.9983643449755463f, - -0.9983568526282389f, - -0.9983493431743568f, - -0.9983418166140283f, - -0.9983342729473826f, - -0.9983267121745487f, - -0.9983191342956564f, - -0.9983115393108355f, - -0.998303927220216f, - -0.9982962980239283f, - -0.9982886517221033f, - -0.998280988314872f, - -0.9982733078023657f, - -0.9982656101847159f, - -0.9982578954620546f, - -0.9982501636345139f, - -0.9982424147022264f, - -0.9982346486653247f, - -0.9982268655239421f, - -0.9982190652782118f, - -0.9982112479282675f, - -0.9982034134742431f, - -0.9981955619162729f, - -0.9981876932544914f, - -0.9981798074890336f, - -0.9981719046200344f, - -0.9981639846476292f, - -0.9981560475719538f, - -0.9981480933931443f, - -0.9981401221113367f, - -0.9981321337266679f, - -0.9981241282392745f, - -0.9981161056492941f, - -0.9981080659568636f, - -0.9981000091621212f, - -0.9980919352652047f, - -0.9980838442662526f, - -0.9980757361654035f, - -0.9980676109627962f, - -0.9980594686585701f, - -0.9980513092528646f, - -0.9980431327458196f, - -0.9980349391375751f, - -0.9980267284282716f, - -0.9980185006180496f, - -0.9980102557070504f, - -0.9980019936954151f, - -0.9979937145832851f, - -0.9979854183708025f, - -0.9979771050581093f, - -0.9979687746453482f, - -0.9979604271326616f, - -0.9979520625201928f, - -0.9979436808080849f, - -0.9979352819964817f, - -0.997926866085527f, - -0.9979184330753651f, - -0.9979099829661405f, - -0.9979015157579979f, - -0.9978930314510824f, - -0.9978845300455393f, - -0.9978760115415145f, - -0.9978674759391538f, - -0.9978589232386036f, - -0.9978503534400102f, - -0.9978417665435205f, - -0.9978331625492818f, - -0.9978245414574415f, - -0.9978159032681472f, - -0.997807247981547f, - -0.9977985755977891f, - -0.9977898861170222f, - -0.9977811795393952f, - -0.9977724558650571f, - -0.9977637150941576f, - -0.9977549572268465f, - -0.9977461822632737f, - -0.9977373902035898f, - -0.9977285810479449f, - -0.9977197547964906f, - -0.9977109114493777f, - -0.997702051006758f, - -0.9976931734687832f, - -0.9976842788356053f, - -0.9976753671073769f, - -0.9976664382842506f, - -0.9976574923663794f, - -0.9976485293539166f, - -0.9976395492470157f, - -0.9976305520458307f, - -0.9976215377505158f, - -0.9976125063612252f, - -0.997603457878114f, - -0.997594392301337f, - -0.9975853096310495f, - -0.9975762098674072f, - -0.9975670930105662f, - -0.9975579590606826f, - -0.9975488080179128f, - -0.9975396398824137f, - -0.9975304546543423f, - -0.997521252333856f, - -0.9975120329211127f, - -0.9975027964162702f, - -0.9974935428194867f, - -0.9974842721309207f, - -0.9974749843507313f, - -0.9974656794790776f, - -0.9974563575161188f, - -0.9974470184620149f, - -0.9974376623169258f, - -0.9974282890810118f, - -0.9974188987544336f, - -0.9974094913373519f, - -0.9974000668299281f, - -0.9973906252323237f, - -0.9973811665447003f, - -0.99737169076722f, - -0.9973621979000453f, - -0.9973526879433389f, - -0.9973431608972635f, - -0.9973336167619825f, - -0.9973240555376595f, - -0.9973144772244581f, - -0.9973048818225427f, - -0.9972952693320775f, - -0.9972856397532273f, - -0.9972759930861571f, - -0.9972663293310322f, - -0.9972566484880182f, - -0.997246950557281f, - -0.9972372355389866f, - -0.9972275034333016f, - -0.9972177542403927f, - -0.9972079879604271f, - -0.997198204593572f, - -0.997188404139995f, - -0.9971785865998642f, - -0.9971687519733476f, - -0.9971589002606139f, - -0.9971490314618319f, - -0.9971391455771706f, - -0.9971292426067994f, - -0.997119322550888f, - -0.9971093854096064f, - -0.9970994311831248f, - -0.997089459871614f, - -0.9970794714752446f, - -0.9970694659941877f, - -0.997059443428615f, - -0.9970494037786981f, - -0.9970393470446091f, - -0.99702927322652f, - -0.9970191823246038f, - -0.9970090743390334f, - -0.9969989492699818f, - -0.9969888071176224f, - -0.9969786478821293f, - -0.9969684715636763f, - -0.996958278162438f, - -0.9969480676785889f, - -0.9969378401123039f, - -0.9969275954637584f, - -0.9969173337331281f, - -0.9969070549205883f, - -0.9968967590263156f, - -0.9968864460504862f, - -0.996876115993277f, - -0.9968657688548647f, - -0.9968554046354268f, - -0.9968450233351409f, - -0.9968346249541847f, - -0.9968242094927366f, - -0.9968137769509751f, - -0.9968033273290787f, - -0.9967928606272266f, - -0.9967823768455981f, - -0.996771875984373f, - -0.996761358043731f, - -0.9967508230238523f, - -0.9967402709249177f, - -0.9967297017471078f, - -0.9967191154906038f, - -0.9967085121555869f, - -0.996697891742239f, - -0.9966872542507419f, - -0.9966765996812781f, - -0.9966659280340299f, - -0.9966552393091803f, - -0.9966445335069125f, - -0.9966338106274099f, - -0.9966230706708561f, - -0.9966123136374353f, - -0.9966015395273317f, - -0.9965907483407301f, - -0.9965799400778151f, - -0.9965691147387722f, - -0.9965582723237866f, - -0.9965474128330444f, - -0.9965365362667313f, - -0.9965256426250341f, - -0.9965147319081391f, - -0.9965038041162335f, - -0.9964928592495044f, - -0.9964818973081393f, - -0.996470918292326f, - -0.996459922202253f, - -0.9964489090381083f, - -0.9964378788000807f, - -0.9964268314883593f, - -0.9964157671031334f, - -0.9964046856445924f, - -0.9963935871129264f, - -0.9963824715083254f, - -0.99637133883098f, - -0.9963601890810808f, - -0.996349022258819f, - -0.9963378383643859f, - -0.996326637397973f, - -0.9963154193597725f, - -0.9963041842499764f, - -0.9962929320687772f, - -0.9962816628163678f, - -0.9962703764929413f, - -0.996259073098691f, - -0.9962477526338107f, - -0.9962364150984943f, - -0.996225060492936f, - -0.9962136888173305f, - -0.9962023000718726f, - -0.9961908942567572f, - -0.9961794713721802f, - -0.996168031418337f, - -0.9961565743954238f, - -0.9961451003036367f, - -0.9961336091431725f, - -0.9961221009142279f, - -0.9961105756170004f, - -0.9960990332516872f, - -0.9960874738184862f, - -0.9960758973175954f, - -0.9960643037492132f, - -0.9960526931135383f, - -0.9960410654107696f, - -0.9960294206411062f, - -0.996017758804748f, - -0.9960060799018945f, - -0.9959943839327459f, - -0.9959826708975025f, - -0.9959709407963652f, - -0.9959591936295349f, - -0.9959474293972129f, - -0.9959356480996007f, - -0.9959238497369003f, - -0.9959120343093137f, - -0.9959002018170436f, - -0.9958883522602925f, - -0.9958764856392636f, - -0.9958646019541602f, - -0.9958527012051858f, - -0.9958407833925443f, - -0.9958288485164402f, - -0.9958168965770777f, - -0.9958049275746618f, - -0.9957929415093975f, - -0.99578093838149f, - -0.9957689181911453f, - -0.9957568809385691f, - -0.9957448266239679f, - -0.995732755247548f, - -0.9957206668095164f, - -0.9957085613100801f, - -0.9956964387494468f, - -0.9956842991278239f, - -0.9956721424454195f, - -0.9956599687024418f, - -0.9956477778990999f, - -0.9956355700356019f, - -0.9956233451121577f, - -0.9956111031289762f, - -0.9955988440862675f, - -0.9955865679842417f, - -0.995574274823109f, - -0.99556196460308f, - -0.9955496373243657f, - -0.9955372929871774f, - -0.9955249315917265f, - -0.9955125531382248f, - -0.9955001576268845f, - -0.9954877450579179f, - -0.9954753154315379f, - -0.9954628687479571f, - -0.9954504050073891f, - -0.9954379242100473f, - -0.9954254263561456f, - -0.9954129114458982f, - -0.9954003794795194f, - -0.995387830457224f, - -0.9953752643792272f, - -0.9953626812457439f, - -0.9953500810569902f, - -0.9953374638131817f, - -0.9953248295145345f, - -0.9953121781612654f, - -0.995299509753591f, - -0.9952868242917284f, - -0.9952741217758949f, - -0.9952614022063083f, - -0.9952486655831865f, - -0.9952359119067475f, - -0.9952231411772101f, - -0.9952103533947932f, - -0.9951975485597157f, - -0.9951847266721969f, - -0.9951718877324568f, - -0.9951590317407152f, - -0.9951461586971925f, - -0.9951332686021093f, - -0.9951203614556862f, - -0.9951074372581447f, - -0.995094496009706f, - -0.995081537710592f, - -0.9950685623610246f, - -0.9950555699612263f, - -0.9950425605114197f, - -0.9950295340118276f, - -0.9950164904626732f, - -0.99500342986418f, - -0.9949903522165718f, - -0.994977257520073f, - -0.9949641457749074f, - -0.9949510169813002f, - -0.994937871139476f, - -0.9949247082496603f, - -0.9949115283120783f, - -0.9948983313269562f, - -0.9948851172945198f, - -0.9948718862149959f, - -0.9948586380886109f, - -0.9948453729155919f, - -0.9948320906961663f, - -0.9948187914305615f, - -0.9948054751190055f, - -0.9947921417617265f, - -0.9947787913589529f, - -0.9947654239109133f, - -0.9947520394178371f, - -0.9947386378799533f, - -0.9947252192974918f, - -0.9947117836706824f, - -0.9946983309997552f, - -0.9946848612849409f, - -0.9946713745264703f, - -0.9946578707245742f, - -0.9946443498794845f, - -0.9946308119914324f, - -0.9946172570606501f, - -0.9946036850873697f, - -0.994590096071824f, - -0.9945764900142456f, - -0.9945628669148678f, - -0.994549226773924f, - -0.9945355695916478f, - -0.9945218953682733f, - -0.994508204104035f, - -0.994494495799167f, - -0.9944807704539047f, - -0.994467028068483f, - -0.9944532686431375f, - -0.9944394921781038f, - -0.9944256986736181f, - -0.9944118881299167f, - -0.9943980605472363f, - -0.9943842159258137f, - -0.9943703542658863f, - -0.9943564755676915f, - -0.994342579831467f, - -0.9943286670574512f, - -0.9943147372458823f, - -0.9943007903969988f, - -0.9942868265110402f, - -0.9942728455882452f, - -0.9942588476288537f, - -0.9942448326331054f, - -0.9942308006012406f, - -0.9942167515334995f, - -0.9942026854301231f, - -0.9941886022913522f, - -0.9941745021174282f, - -0.9941603849085927f, - -0.9941462506650877f, - -0.994132099387155f, - -0.9941179310750375f, - -0.994103745728978f, - -0.9940895433492192f, - -0.9940753239360046f, - -0.9940610874895779f, - -0.9940468340101831f, - -0.9940325634980642f, - -0.9940182759534663f, - -0.9940039713766333f, - -0.993989649767811f, - -0.9939753111272445f, - -0.9939609554551798f, - -0.9939465827518624f, - -0.993932193017539f, - -0.9939177862524559f, - -0.9939033624568602f, - -0.9938889216309986f, - -0.993874463775119f, - -0.993859988889469f, - -0.9938454969742966f, - -0.99383098802985f, - -0.9938164620563781f, - -0.9938019190541295f, - -0.9937873590233535f, - -0.9937727819642996f, - -0.9937581878772176f, - -0.9937435767623575f, - -0.9937289486199696f, - -0.9937143034503048f, - -0.9936996412536138f, - -0.9936849620301478f, - -0.9936702657801585f, - -0.9936555525038976f, - -0.9936408222016174f, - -0.99362607487357f, - -0.9936113105200084f, - -0.9935965291411853f, - -0.9935817307373542f, - -0.9935669153087685f, - -0.9935520828556822f, - -0.9935372333783494f, - -0.9935223668770244f, - -0.9935074833519622f, - -0.9934925828034176f, - -0.9934776652316459f, - -0.9934627306369028f, - -0.9934477790194444f, - -0.9934328103795266f, - -0.993417824717406f, - -0.9934028220333393f, - -0.9933878023275838f, - -0.9933727656003964f, - -0.9933577118520353f, - -0.9933426410827579f, - -0.993327553292823f, - -0.9933124484824887f, - -0.9932973266520139f, - -0.9932821878016578f, - -0.9932670319316798f, - -0.9932518590423395f, - -0.993236669133897f, - -0.9932214622066123f, - -0.9932062382607464f, - -0.9931909972965598f, - -0.9931757393143139f, - -0.9931604643142699f, - -0.9931451722966897f, - -0.9931298632618353f, - -0.9931145372099691f, - -0.9930991941413535f, - -0.9930838340562514f, - -0.9930684569549263f, - -0.9930530628376415f, - -0.9930376517046605f, - -0.9930222235562478f, - -0.9930067783926675f, - -0.9929913162141845f, - -0.9929758370210633f, - -0.9929603408135695f, - -0.9929448275919686f, - -0.9929292973565262f, - -0.9929137501075087f, - -0.9928981858451823f, - -0.9928826045698137f, - -0.9928670062816698f, - -0.9928513909810182f, - -0.9928357586681261f, - -0.9928201093432616f, - -0.9928044430066926f, - -0.9927887596586877f, - -0.9927730592995158f, - -0.9927573419294456f, - -0.9927416075487465f, - -0.9927258561576883f, - -0.9927100877565407f, - -0.9926943023455739f, - -0.9926784999250583f, - -0.992662680495265f, - -0.9926468440564647f, - -0.992630990608929f, - -0.9926151201529294f, - -0.992599232688738f, - -0.9925833282166268f, - -0.9925674067368684f, - -0.9925514682497356f, - -0.9925355127555017f, - -0.9925195402544397f, - -0.9925035507468238f, - -0.9924875442329275f, - -0.9924715207130254f, - -0.9924554801873917f, - -0.9924394226563018f, - -0.9924233481200302f, - -0.9924072565788528f, - -0.9923911480330451f, - -0.9923750224828832f, - -0.9923588799286435f, - -0.9923427203706023f, - -0.9923265438090367f, - -0.9923103502442241f, - -0.9922941396764415f, - -0.992277912105967f, - -0.9922616675330785f, - -0.9922454059580544f, - -0.9922291273811734f, - -0.9922128318027144f, - -0.9921965192229564f, - -0.9921801896421792f, - -0.9921638430606625f, - -0.9921474794786865f, - -0.9921310988965314f, - -0.9921147013144779f, - -0.992098286732807f, - -0.9920818551518f, - -0.9920654065717386f, - -0.9920489409929042f, - -0.9920324584155794f, - -0.9920159588400465f, - -0.991999442266588f, - -0.991982908695487f, - -0.991966358127027f, - -0.9919497905614914f, - -0.9919332059991642f, - -0.9919166044403294f, - -0.9918999858852715f, - -0.9918833503342753f, - -0.9918666977876262f, - -0.9918500282456089f, - -0.9918333417085093f, - -0.9918166381766134f, - -0.9917999176502075f, - -0.9917831801295778f, - -0.9917664256150113f, - -0.9917496541067949f, - -0.9917328656052162f, - -0.9917160601105629f, - -0.9916992376231227f, - -0.991682398143184f, - -0.9916655416710354f, - -0.9916486682069656f, - -0.9916317777512638f, - -0.9916148703042192f, - -0.9915979458661219f, - -0.9915810044372617f, - -0.9915640460179289f, - -0.9915470706084138f, - -0.9915300782090078f, - -0.9915130688200017f, - -0.9914960424416871f, - -0.9914789990743554f, - -0.9914619387182992f, - -0.9914448613738105f, - -0.9914277670411819f, - -0.9914106557207062f, - -0.991393527412677f, - -0.9913763821173874f, - -0.9913592198351313f, - -0.991342040566203f, - -0.9913248443108965f, - -0.9913076310695066f, - -0.9912904008423282f, - -0.9912731536296568f, - -0.9912558894317876f, - -0.9912386082490166f, - -0.9912213100816396f, - -0.9912039949299536f, - -0.9911866627942546f, - -0.9911693136748401f, - -0.9911519475720071f, - -0.9911345644860533f, - -0.9911171644172765f, - -0.9910997473659748f, - -0.9910823133324467f, - -0.991064862316991f, - -0.9910473943199066f, - -0.9910299093414928f, - -0.9910124073820492f, - -0.9909948884418758f, - -0.9909773525212727f, - -0.9909597996205405f, - -0.9909422297399796f, - -0.9909246428798915f, - -0.9909070390405772f, - -0.9908894182223388f, - -0.9908717804254776f, - -0.9908541256502963f, - -0.9908364538970971f, - -0.9908187651661832f, - -0.9908010594578572f, - -0.9907833367724228f, - -0.9907655971101837f, - -0.9907478404714437f, - -0.990730066856507f, - -0.9907122762656784f, - -0.9906944686992626f, - -0.9906766441575645f, - -0.99065880264089f, - -0.9906409441495445f, - -0.9906230686838341f, - -0.9906051762440649f, - -0.9905872668305437f, - -0.9905693404435773f, - -0.9905513970834728f, - -0.9905334367505377f, - -0.99051545944508f, - -0.9904974651674073f, - -0.9904794539178283f, - -0.9904614256966512f, - -0.9904433805041853f, - -0.9904253183407397f, - -0.9904072392066238f, - -0.9903891431021473f, - -0.9903710300276206f, - -0.9903528999833537f, - -0.9903347529696576f, - -0.9903165889868428f, - -0.990298408035221f, - -0.9902802101151034f, - -0.9902619952268021f, - -0.9902437633706288f, - -0.9902255145468963f, - -0.990207248755917f, - -0.9901889659980043f, - -0.990170666273471f, - -0.9901523495826308f, - -0.9901340159257975f, - -0.9901156653032855f, - -0.990097297715409f, - -0.9900789131624829f, - -0.9900605116448219f, - -0.9900420931627416f, - -0.9900236577165575f, - -0.9900052053065856f, - -0.9899867359331418f, - -0.9899682495965428f, - -0.9899497462971054f, - -0.9899312260351465f, - -0.9899126888109835f, - -0.9898941346249338f, - -0.9898755634773158f, - -0.9898569753684473f, - -0.9898383702986471f, - -0.9898197482682336f, - -0.9898011092775263f, - -0.9897824533268443f, - -0.9897637804165075f, - -0.9897450905468356f, - -0.9897263837181489f, - -0.9897076599307681f, - -0.989688919185014f, - -0.9896701614812075f, - -0.9896513868196702f, - -0.9896325952007238f, - -0.9896137866246904f, - -0.9895949610918917f, - -0.989576118602651f, - -0.9895572591572906f, - -0.9895383827561344f, - -0.9895194893995048f, - -0.9895005790877265f, - -0.9894816518211228f, - -0.9894627076000185f, - -0.9894437464247379f, - -0.9894247682956061f, - -0.9894057732129481f, - -0.9893867611770896f, - -0.9893677321883562f, - -0.989348686247074f, - -0.9893296233535692f, - -0.9893105435081687f, - -0.9892914467111994f, - -0.9892723329629883f, - -0.989253202263863f, - -0.9892340546141515f, - -0.9892148900141817f, - -0.989195708464282f, - -0.9891765099647809f, - -0.9891572945160078f, - -0.9891380621182916f, - -0.9891188127719619f, - -0.9890995464773484f, - -0.9890802632347816f, - -0.9890609630445917f, - -0.9890416459071094f, - -0.9890223118226655f, - -0.9890029607915918f, - -0.9889835928142193f, - -0.9889642078908804f, - -0.9889448060219067f, - -0.988925387207631f, - -0.988905951448386f, - -0.9888864987445045f, - -0.9888670290963204f, - -0.9888475425041665f, - -0.9888280389683773f, - -0.9888085184892867f, - -0.9887889810672296f, - -0.9887694267025401f, - -0.9887498553955537f, - -0.9887302671466055f, - -0.9887106619560316f, - -0.9886910398241674f, - -0.9886714007513494f, - -0.988651744737914f, - -0.9886320717841981f, - -0.9886123818905388f, - -0.9885926750572733f, - -0.9885729512847394f, - -0.9885532105732752f, - -0.9885334529232187f, - -0.9885136783349086f, - -0.9884938868086836f, - -0.9884740783448829f, - -0.9884542529438458f, - -0.9884344106059124f, - -0.9884145513314222f, - -0.9883946751207159f, - -0.9883747819741336f, - -0.9883548718920168f, - -0.9883349448747059f, - -0.988315000922543f, - -0.9882950400358694f, - -0.9882750622150274f, - -0.9882550674603591f, - -0.9882350557722073f, - -0.9882150271509147f, - -0.9881949815968245f, - -0.9881749191102805f, - -0.9881548396916262f, - -0.9881347433412057f, - -0.9881146300593631f, - -0.9880944998464434f, - -0.9880743527027914f, - -0.9880541886287524f, - -0.9880340076246716f, - -0.9880138096908953f, - -0.987993594827769f, - -0.9879733630356395f, - -0.9879531143148532f, - -0.9879328486657574f, - -0.9879125660886992f, - -0.9878922665840258f, - -0.9878719501520854f, - -0.9878516167932261f, - -0.9878312665077962f, - -0.9878108992961445f, - -0.9877905151586197f, - -0.9877701140955714f, - -0.9877496961073491f, - -0.9877292611943026f, - -0.987708809356782f, - -0.9876883405951378f, - -0.9876678549097205f, - -0.9876473523008819f, - -0.9876268327689722f, - -0.9876062963143438f, - -0.9875857429373481f, - -0.9875651726383379f, - -0.987544585417665f, - -0.9875239812756824f, - -0.9875033602127432f, - -0.9874827222292007f, - -0.9874620673254088f, - -0.9874413955017208f, - -0.9874207067584914f, - -0.987400001096075f, - -0.9873792785148262f, - -0.9873585390151004f, - -0.9873377825972527f, - -0.9873170092616387f, - -0.9872962190086146f, - -0.9872754118385366f, - -0.9872545877517611f, - -0.9872337467486448f, - -0.987212888829545f, - -0.9871920139948193f, - -0.987171122244825f, - -0.98715021357992f, - -0.9871292880004631f, - -0.9871083455068124f, - -0.9870873860993269f, - -0.9870664097783656f, - -0.9870454165442881f, - -0.9870244063974541f, - -0.9870033793382236f, - -0.9869823353669567f, - -0.9869612744840143f, - -0.9869401966897569f, - -0.986919101984546f, - -0.9868979903687428f, - -0.9868768618427093f, - -0.9868557164068072f, - -0.9868345540613993f, - -0.9868133748068477f, - -0.9867921786435156f, - -0.986770965571766f, - -0.9867497355919628f, - -0.986728488704469f, - -0.9867072249096495f, - -0.986685944207868f, - -0.9866646465994896f, - -0.986643332084879f, - -0.9866220006644015f, - -0.9866006523384224f, - -0.9865792871073078f, - -0.9865579049714237f, - -0.9865365059311364f, - -0.9865150899868125f, - -0.9864936571388191f, - -0.9864722073875234f, - -0.986450740733293f, - -0.9864292571764954f, - -0.9864077567174993f, - -0.9863862393566726f, - -0.9863647050943842f, - -0.9863431539310031f, - -0.9863215858668984f, - -0.98630000090244f, - -0.9862783990379975f, - -0.986256780273941f, - -0.986235144610641f, - -0.9862134920484683f, - -0.9861918225877937f, - -0.986170136228989f, - -0.986148432972425f, - -0.9861267128184744f, - -0.9861049757675087f, - -0.9860832218199009f, - -0.9860614509760234f, - -0.9860396632362493f, - -0.9860178586009518f, - -0.9859960370705051f, - -0.9859741986452822f, - -0.9859523433256582f, - -0.9859304711120068f, - -0.9859085820047033f, - -0.9858866760041227f, - -0.9858647531106401f, - -0.9858428133246313f, - -0.9858208566464723f, - -0.9857988830765394f, - -0.9857768926152088f, - -0.9857548852628574f, - -0.9857328610198625f, - -0.9857108198866013f, - -0.9856887618634514f, - -0.9856666869507908f, - -0.985644595148998f, - -0.9856224864584514f, - -0.9856003608795296f, - -0.9855782184126118f, - -0.9855560590580777f, - -0.9855338828163068f, - -0.985511689687679f, - -0.9854894796725746f, - -0.9854672527713743f, - -0.9854450089844587f, - -0.9854227483122093f, - -0.9854004707550071f, - -0.9853781763132342f, - -0.9853558649872726f, - -0.9853335367775041f, - -0.985311191684312f, - -0.9852888297080786f, - -0.9852664508491874f, - -0.9852440551080216f, - -0.9852216424849654f, - -0.9851992129804023f, - -0.9851767665947169f, - -0.9851543033282936f, - -0.9851318231815176f, - -0.985109326154774f, - -0.9850868122484482f, - -0.9850642814629259f, - -0.9850417337985934f, - -0.9850191692558369f, - -0.9849965878350431f, - -0.9849739895365985f, - -0.9849513743608911f, - -0.984928742308308f, - -0.9849060933792368f, - -0.9848834275740658f, - -0.9848607448931834f, - -0.984838045336978f, - -0.9848153289058392f, - -0.9847925956001554f, - -0.9847698454203168f, - -0.9847470783667127f, - -0.9847242944397337f, - -0.9847014936397698f, - -0.9846786759672118f, - -0.9846558414224507f, - -0.984632990005878f, - -0.9846101217178848f, - -0.9845872365588633f, - -0.9845643345292054f, - -0.9845414156293036f, - -0.9845184798595508f, - -0.9844955272203397f, - -0.9844725577120638f, - -0.9844495713351163f, - -0.9844265680898917f, - -0.9844035479767836f, - -0.9843805109961868f, - -0.9843574571484958f, - -0.9843343864341058f, - -0.984311298853412f, - -0.9842881944068099f, - -0.9842650730946955f, - -0.984241934917465f, - -0.984218779875515f, - -0.984195607969242f, - -0.9841724191990431f, - -0.9841492135653157f, - -0.9841259910684576f, - -0.9841027517088663f, - -0.9840794954869402f, - -0.9840562224030779f, - -0.984032932457678f, - -0.9840096256511398f, - -0.9839863019838624f, - -0.9839629614562456f, - -0.9839396040686891f, - -0.9839162298215937f, - -0.9838928387153592f, - -0.9838694307503868f, - -0.9838460059270774f, - -0.9838225642458327f, - -0.983799105707054f, - -0.9837756303111435f, - -0.9837521380585031f, - -0.9837286289495358f, - -0.9837051029846443f, - -0.9836815601642316f, - -0.9836580004887009f, - -0.9836344239584562f, - -0.9836108305739015f, - -0.983587220335441f, - -0.983563593243479f, - -0.9835399492984206f, - -0.983516288500671f, - -0.9834926108506354f, - -0.9834689163487196f, - -0.9834452049953297f, - -0.9834214767908719f, - -0.9833977317357527f, - -0.9833739698303792f, - -0.9833501910751581f, - -0.9833263954704974f, - -0.9833025830168045f, - -0.9832787537144876f, - -0.9832549075639546f, - -0.9832310445656146f, - -0.9832071647198763f, - -0.9831832680271488f, - -0.9831593544878415f, - -0.9831354241023645f, - -0.9831114768711274f, - -0.9830875127945411f, - -0.9830635318730154f, - -0.983039534106962f, - -0.9830155194967916f, - -0.982991488042916f, - -0.9829674397457466f, - -0.9829433746056959f, - -0.9829192926231758f, - -0.9828951937985995f, - -0.9828710781323793f, - -0.9828469456249288f, - -0.9828227962766612f, - -0.9827986300879908f, - -0.9827744470593314f, - -0.9827502471910973f, - -0.9827260304837031f, - -0.982701796937564f, - -0.982677546553095f, - -0.9826532793307118f, - -0.98262899527083f, - -0.982604694373866f, - -0.982580376640236f, - -0.9825560420703566f, - -0.9825316906646449f, - -0.9825073224235181f, - -0.9824829373473939f, - -0.9824585354366899f, - -0.9824341166918242f, - -0.9824096811132156f, - -0.9823852287012824f, - -0.9823607594564437f, - -0.9823362733791187f, - -0.9823117704697271f, - -0.9822872507286887f, - -0.9822627141564235f, - -0.9822381607533525f, - -0.9822135905198955f, - -0.9821890034564743f, - -0.9821643995635095f, - -0.9821397788414236f, - -0.9821151412906375f, - -0.982090486911574f, - -0.982065815704655f, - -0.982041127670304f, - -0.9820164228089433f, - -0.9819917011209967f, - -0.9819669626068873f, - -0.9819422072670395f, - -0.9819174351018773f, - -0.9818926461118251f, - -0.9818678402973076f, - -0.9818430176587499f, - -0.9818181781965775f, - -0.9817933219112158f, - -0.9817684488030906f, - -0.9817435588726284f, - -0.9817186521202557f, - -0.981693728546399f, - -0.9816687881514853f, - -0.9816438309359423f, - -0.9816188569001973f, - -0.9815938660446788f, - -0.9815688583698141f, - -0.9815438338760325f, - -0.9815187925637623f, - -0.981493734433433f, - -0.9814686594854735f, - -0.9814435677203137f, - -0.9814184591383837f, - -0.9813933337401132f, - -0.9813681915259334f, - -0.9813430324962746f, - -0.9813178566515681f, - -0.9812926639922451f, - -0.9812674545187376f, - -0.9812422282314773f, - -0.9812169851308966f, - -0.9811917252174278f, - -0.9811664484915039f, - -0.9811411549535581f, - -0.9811158446040237f, - -0.9810905174433341f, - -0.9810651734719237f, - -0.9810398126902267f, - -0.9810144350986774f, - -0.9809890406977106f, - -0.980963629487762f, - -0.9809382014692665f, - -0.9809127566426599f, - -0.9808872950083781f, - -0.9808618165668577f, - -0.9808363213185349f, - -0.9808108092638469f, - -0.9807852804032304f, - -0.9807597347371233f, - -0.9807341722659629f, - -0.9807085929901879f, - -0.9806829969102356f, - -0.9806573840265453f, - -0.9806317543395555f, - -0.9806061078497058f, - -0.9805804445574351f, - -0.9805547644631836f, - -0.9805290675673909f, - -0.9805033538704979f, - -0.9804776233729444f, - -0.9804518760751719f, - -0.9804261119776213f, - -0.9804003310807342f, - -0.9803745333849524f, - -0.9803487188907178f, - -0.9803228875984725f, - -0.9802970395086597f, - -0.9802711746217219f, - -0.9802452929381023f, - -0.9802193944582445f, - -0.9801934791825919f, - -0.9801675471115892f, - -0.9801415982456803f, - -0.9801156325853098f, - -0.9800896501309226f, - -0.9800636508829643f, - -0.98003763484188f, - -0.9800116020081157f, - -0.9799855523821172f, - -0.9799594859643311f, - -0.979933402755204f, - -0.9799073027551828f, - -0.9798811859647144f, - -0.979855052384247f, - -0.9798289020142276f, - -0.9798027348551052f, - -0.9797765509073272f, - -0.9797503501713428f, - -0.9797241326476008f, - -0.9796978983365507f, - -0.9796716472386416f, - -0.9796453793543236f, - -0.9796190946840465f, - -0.9795927932282612f, - -0.9795664749874177f, - -0.9795401399619674f, - -0.9795137881523613f, - -0.9794874195590514f, - -0.979461034182489f, - -0.9794346320231265f, - -0.9794082130814159f, - -0.9793817773578104f, - -0.9793553248527628f, - -0.9793288555667262f, - -0.9793023695001541f, - -0.9792758666535006f, - -0.9792493470272198f, - -0.9792228106217659f, - -0.9791962574375935f, - -0.979169687475158f, - -0.9791431007349144f, - -0.9791164972173183f, - -0.9790898769228253f, - -0.9790632398518921f, - -0.9790365860049747f, - -0.9790099153825299f, - -0.9789832279850147f, - -0.9789565238128862f, - -0.9789298028666024f, - -0.9789030651466207f, - -0.9788763106533996f, - -0.9788495393873972f, - -0.9788227513490725f, - -0.9787959465388841f, - -0.9787691249572922f, - -0.9787422866047553f, - -0.9787154314817338f, - -0.9786885595886877f, - -0.9786616709260779f, - -0.9786347654943645f, - -0.9786078432940089f, - -0.9785809043254721f, - -0.978553948589216f, - -0.9785269760857024f, - -0.9784999868153934f, - -0.9784729807787513f, - -0.9784459579762393f, - -0.9784189184083201f, - -0.978391862075457f, - -0.9783647889781135f, - -0.978337699116754f, - -0.9783105924918422f, - -0.9782834691038426f, - -0.97825632895322f, - -0.9782291720404396f, - -0.9782019983659666f, - -0.9781748079302668f, - -0.9781476007338056f, - -0.9781203767770498f, - -0.9780931360604654f, - -0.9780658785845195f, - -0.9780386043496789f, - -0.9780113133564111f, - -0.9779840056051837f, - -0.9779566810964646f, - -0.9779293398307218f, - -0.9779019818084241f, - -0.9778746070300401f, - -0.9778472154960388f, - -0.9778198072068899f, - -0.9777923821630626f, - -0.977764940365027f, - -0.9777374818132533f, - -0.9777100065082119f, - -0.9776825144503739f, - -0.9776550056402101f, - -0.9776274800781917f, - -0.9775999377647909f, - -0.9775723787004789f, - -0.9775448028857285f, - -0.9775172103210118f, - -0.9774896010068019f, - -0.9774619749435719f, - -0.977434332131795f, - -0.9774066725719447f, - -0.9773789962644953f, - -0.9773513032099208f, - -0.9773235934086958f, - -0.9772958668612949f, - -0.9772681235681935f, - -0.9772403635298669f, - -0.9772125867467906f, - -0.9771847932194404f, - -0.977156982948293f, - -0.9771291559338245f, - -0.9771013121765123f, - -0.9770734516768327f, - -0.9770455744352636f, - -0.9770176804522824f, - -0.9769897697283677f, - -0.9769618422639967f, - -0.9769338980596487f, - -0.9769059371158022f, - -0.9768779594329364f, - -0.9768499650115308f, - -0.9768219538520649f, - -0.9767939259550188f, - -0.9767658813208724f, - -0.9767378199501068f, - -0.9767097418432024f, - -0.9766816470006405f, - -0.9766535354229022f, - -0.9766254071104697f, - -0.9765972620638247f, - -0.9765691002834493f, - -0.9765409217698262f, - -0.9765127265234383f, - -0.9764845145447687f, - -0.9764562858343008f, - -0.976428040392518f, - -0.9763997782199046f, - -0.976371499316945f, - -0.9763432036841234f, - -0.9763148913219246f, - -0.9762865622308341f, - -0.9762582164113371f, - -0.9762298538639194f, - -0.9762014745890666f, - -0.9761730785872654f, - -0.9761446658590022f, - -0.9761162364047641f, - -0.9760877902250377f, - -0.9760593273203109f, - -0.976030847691071f, - -0.9760023513378066f, - -0.9759738382610053f, - -0.975945308461156f, - -0.9759167619387473f, - -0.975888198694269f, - -0.9758596187282097f, - -0.9758310220410596f, - -0.9758024086333085f, - -0.9757737785054468f, - -0.9757451316579651f, - -0.9757164680913541f, - -0.9756877878061049f, - -0.9756590908027092f, - -0.9756303770816586f, - -0.9756016466434451f, - -0.9755728994885606f, - -0.9755441356174984f, - -0.9755153550307509f, - -0.9754865577288114f, - -0.9754577437121731f, - -0.9754289129813299f, - -0.975400065536776f, - -0.9753712013790055f, - -0.9753423205085129f, - -0.9753134229257929f, - -0.9752845086313411f, - -0.9752555776256527f, - -0.9752266299092236f, - -0.9751976654825494f, - -0.9751686843461268f, - -0.9751396865004521f, - -0.9751106719460226f, - -0.9750816406833349f, - -0.9750525927128869f, - -0.975023528035176f, - -0.9749944466507007f, - -0.9749653485599585f, - -0.9749362337634487f, - -0.9749071022616698f, - -0.9748779540551215f, - -0.9748487891443023f, - -0.9748196075297126f, - -0.9747904092118522f, - -0.9747611941912218f, - -0.9747319624683215f, - -0.9747027140436525f, - -0.9746734489177156f, - -0.9746441670910125f, - -0.9746148685640451f, - -0.9745855533373151f, - -0.9745562214113248f, - -0.9745268727865771f, - -0.9744975074635748f, - -0.9744681254428209f, - -0.9744387267248188f, - -0.9744093113100726f, - -0.974379879199086f, - -0.9743504303923635f, - -0.9743209648904093f, - -0.9742914826937288f, - -0.974261983802827f, - -0.9742324682182093f, - -0.9742029359403813f, - -0.9741733869698493f, - -0.9741438213071196f, - -0.9741142389526984f, - -0.9740846399070933f, - -0.9740550241708108f, - -0.9740253917443588f, - -0.9739957426282445f, - -0.9739660768229768f, - -0.973936394329063f, - -0.9739066951470124f, - -0.9738769792773336f, - -0.9738472467205362f, - -0.973817497477129f, - -0.9737877315476221f, - -0.9737579489325254f, - -0.9737281496323495f, - -0.9736983336476049f, - -0.9736685009788023f, - -0.9736386516264529f, - -0.9736087855910683f, - -0.9735789028731603f, - -0.9735490034732408f, - -0.9735190873918219f, - -0.9734891546294168f, - -0.9734592051865378f, - -0.9734292390636985f, - -0.9733992562614119f, - -0.9733692567801921f, - -0.973339240620553f, - -0.9733092077830093f, - -0.973279158268075f, - -0.9732490920762653f, - -0.9732190092080952f, - -0.9731889096640808f, - -0.9731587934447369f, - -0.9731286605505801f, - -0.9730985109821264f, - -0.9730683447398931f, - -0.9730381618243962f, - -0.9730079622361534f, - -0.9729777459756821f, - -0.9729475130434998f, - -0.9729172634401249f, - -0.9728869971660754f, - -0.9728567142218703f, - -0.9728264146080278f, - -0.9727960983250677f, - -0.9727657653735095f, - -0.9727354157538725f, - -0.9727050494666768f, - -0.972674666512443f, - -0.9726442668916917f, - -0.9726138506049437f, - -0.9725834176527198f, - -0.972552968035542f, - -0.972522501753932f, - -0.9724920188084114f, - -0.9724615191995027f, - -0.9724310029277289f, - -0.9724004699936125f, - -0.9723699203976768f, - -0.9723393541404449f, - -0.9723087712224411f, - -0.9722781716441891f, - -0.9722475554062135f, - -0.9722169225090385f, - -0.9721862729531893f, - -0.9721556067391907f, - -0.9721249238675689f, - -0.9720942243388487f, - -0.9720635081535568f, - -0.9720327753122191f, - -0.9720020258153629f, - -0.971971259663514f, - -0.9719404768572005f, - -0.9719096773969493f, - -0.9718788612832885f, - -0.971848028516746f, - -0.9718171790978501f, - -0.9717863130271291f, - -0.9717554303051125f, - -0.971724530932329f, - -0.9716936149093083f, - -0.9716626822365798f, - -0.971631732914674f, - -0.9716007669441208f, - -0.971569784325451f, - -0.9715387850591954f, - -0.9715077691458851f, - -0.9714767365860518f, - -0.9714456873802271f, - -0.9714146215289429f, - -0.9713835390327314f, - -0.9713524398921257f, - -0.9713213241076583f, - -0.9712901916798624f, - -0.9712590426092713f, - -0.9712278768964191f, - -0.9711966945418397f, - -0.9711654955460671f, - -0.9711342799096361f, - -0.9711030476330816f, - -0.9710717987169387f, - -0.9710405331617433f, - -0.9710092509680301f, - -0.9709779521363361f, - -0.9709466366671969f, - -0.9709153045611499f, - -0.970883955818731f, - -0.970852590440478f, - -0.970821208426928f, - -0.9707898097786191f, - -0.970758394496089f, - -0.9707269625798761f, - -0.9706955140305187f, - -0.9706640488485562f, - -0.9706325670345274f, - -0.9706010685889718f, - -0.9705695535124289f, - -0.9705380218054391f, - -0.9705064734685426f, - -0.9704749085022797f, - -0.9704433269071914f, - -0.9704117286838189f, - -0.9703801138327037f, - -0.9703484823543874f, - -0.9703168342494117f, - -0.9702851695183196f, - -0.9702534881616531f, - -0.9702217901799552f, - -0.9701900755737689f, - -0.970158344343638f, - -0.9701265964901059f, - -0.9700948320137167f, - -0.9700630509150147f, - -0.970031253194544f, - -0.9699994388528502f, - -0.9699676078904778f, - -0.9699357603079729f, - -0.9699038961058805f, - -0.9698720152847469f, - -0.9698401178451181f, - -0.9698082037875415f, - -0.9697762731125629f, - -0.9697443258207299f, - -0.9697123619125898f, - -0.9696803813886907f, - -0.9696483842495799f, - -0.9696163704958061f, - -0.9695843401279176f, - -0.9695522931464635f, - -0.9695202295519929f, - -0.9694881493450551f, - -0.9694560525261995f, - -0.9694239390959766f, - -0.9693918090549364f, - -0.9693596624036294f, - -0.9693274991426063f, - -0.9692953192724186f, - -0.9692631227936175f, - -0.9692309097067545f, - -0.9691986800123816f, - -0.9691664337110514f, - -0.969134170803316f, - -0.9691018912897287f, - -0.969069595170842f, - -0.9690372824472098f, - -0.9690049531193855f, - -0.9689726071879231f, - -0.9689402446533767f, - -0.9689078655163011f, - -0.9688754697772511f, - -0.9688430574367815f, - -0.968810628495448f, - -0.968778182953806f, - -0.9687457208124117f, - -0.968713242071821f, - -0.9686807467325907f, - -0.9686482347952776f, - -0.9686157062604387f, - -0.9685831611286311f, - -0.9685505994004129f, - -0.9685180210763419f, - -0.9684854261569762f, - -0.9684528146428742f, - -0.968420186534595f, - -0.9683875418326977f, - -0.9683548805377413f, - -0.9683222026502856f, - -0.9682895081708907f, - -0.9682567971001166f, - -0.9682240694385239f, - -0.9681913251866732f, - -0.9681585643451259f, - -0.9681257869144432f, - -0.9680929928951866f, - -0.9680601822879179f, - -0.9680273550931997f, - -0.9679945113115942f, - -0.9679616509436646f, - -0.9679287739899732f, - -0.967895880451084f, - -0.9678629703275601f, - -0.9678300436199662f, - -0.9677971003288655f, - -0.9677641404548232f, - -0.9677311639984035f, - -0.9676981709601722f, - -0.9676651613406938f, - -0.9676321351405345f, - -0.9675990923602596f, - -0.9675660330004361f, - -0.96753295706163f, - -0.967499864544408f, - -0.9674667554493369f, - -0.9674336297769847f, - -0.9674004875279185f, - -0.9673673287027064f, - -0.9673341533019164f, - -0.9673009613261169f, - -0.9672677527758768f, - -0.9672345276517652f, - -0.9672012859543513f, - -0.9671680276842043f, - -0.9671347528418948f, - -0.9671014614279926f, - -0.967068153443068f, - -0.9670348288876918f, - -0.9670014877624351f, - -0.9669681300678693f, - -0.9669347558045658f, - -0.9669013649730962f, - -0.9668679575740332f, - -0.9668345336079487f, - -0.9668010930754162f, - -0.9667676359770075f, - -0.966734162313297f, - -0.9667006720848575f, - -0.9666671652922636f, - -0.9666336419360886f, - -0.9666001020169074f, - -0.9665665455352944f, - -0.9665329724918252f, - -0.9664993828870743f, - -0.9664657767216177f, - -0.9664321539960309f, - -0.9663985147108904f, - -0.9663648588667726f, - -0.966331186464254f, - -0.9662974975039113f, - -0.9662637919863222f, - -0.9662300699120642f, - -0.9661963312817148f, - -0.9661625760958522f, - -0.9661288043550551f, - -0.9660950160599019f, - -0.9660612112109717f, - -0.9660273898088433f, - -0.9659935518540969f, - -0.9659596973473119f, - -0.9659258262890684f, - -0.9658919386799466f, - -0.9658580345205278f, - -0.9658241138113923f, - -0.9657901765531216f, - -0.9657562227462971f, - -0.9657222523915004f, - -0.9656882654893142f, - -0.9656542620403203f, - -0.9656202420451016f, - -0.9655862055042406f, - -0.9655521524183212f, - -0.9655180827879262f, - -0.9654839966136401f, - -0.9654498938960462f, - -0.9654157746357294f, - -0.9653816388332738f, - -0.9653474864892652f, - -0.9653133176042877f, - -0.9652791321789276f, - -0.96524493021377f, - -0.9652107117094015f, - -0.9651764766664084f, - -0.9651422250853771f, - -0.9651079569668941f, - -0.9650736723115474f, - -0.965039371119924f, - -0.9650050533926117f, - -0.9649707191301982f, - -0.9649363683332725f, - -0.9649020010024227f, - -0.9648676171382378f, - -0.9648332167413067f, - -0.9647987998122195f, - -0.9647643663515652f, - -0.9647299163599344f, - -0.9646954498379169f, - -0.9646609667861036f, - -0.9646264672050853f, - -0.964591951095453f, - -0.9645574184577981f, - -0.9645228692927126f, - -0.9644883036007883f, - -0.9644537213826175f, - -0.9644191226387925f, - -0.9643845073699066f, - -0.9643498755765527f, - -0.9643152272593241f, - -0.9642805624188147f, - -0.9642458810556184f, - -0.9642111831703294f, - -0.9641764687635421f, - -0.964141737835852f, - -0.9641069903878531f, - -0.9640722264201417f, - -0.9640374459333129f, - -0.9640026489279634f, - -0.9639678354046884f, - -0.9639330053640853f, - -0.9638981588067503f, - -0.963863295733281f, - -0.9638284161442745f, - -0.9637935200403285f, - -0.9637586074220407f, - -0.9637236782900097f, - -0.9636887326448339f, - -0.963653770487112f, - -0.9636187918174428f, - -0.9635837966364262f, - -0.9635487849446615f, - -0.9635137567427489f, - -0.963478712031288f, - -0.9634436508108799f, - -0.9634085730821249f, - -0.9633734788456249f, - -0.9633383681019799f, - -0.9633032408517925f, - -0.9632680970956642f, - -0.9632329368341976f, - -0.9631977600679945f, - -0.9631625667976582f, - -0.9631273570237914f, - -0.9630921307469976f, - -0.9630568879678804f, - -0.9630216286870437f, - -0.9629863529050914f, - -0.9629510606226279f, - -0.9629157518402585f, - -0.9628804265585876f, - -0.962845084778221f, - -0.9628097264997636f, - -0.9627743517238219f, - -0.9627389604510018f, - -0.9627035526819097f, - -0.9626681284171521f, - -0.9626326876573363f, - -0.9625972304030697f, - -0.9625617566549595f, - -0.9625262664136134f, - -0.9624907596796399f, - -0.9624552364536474f, - -0.9624196967362444f, - -0.9623841405280397f, - -0.962348567829643f, - -0.9623129786416634f, - -0.962277372964711f, - -0.9622417507993957f, - -0.962206112146328f, - -0.9621704570061184f, - -0.9621347853793784f, - -0.9620990972667183f, - -0.9620633926687503f, - -0.9620276715860858f, - -0.9619919340193375f, - -0.9619561799691168f, - -0.9619204094360371f, - -0.9618846224207108f, - -0.9618488189237516f, - -0.9618129989457728f, - -0.9617771624873881f, - -0.9617413095492112f, - -0.9617054401318572f, - -0.9616695542359401f, - -0.9616336518620752f, - -0.9615977330108771f, - -0.9615617976829619f, - -0.9615258458789451f, - -0.9614898775994427f, - -0.9614538928450708f, - -0.9614178916164463f, - -0.9613818739141861f, - -0.9613458397389071f, - -0.961309789091227f, - -0.961273721971763f, - -0.9612376383811337f, - -0.9612015383199572f, - -0.9611654217888521f, - -0.9611292887884368f, - -0.9610931393193312f, - -0.9610569733821542f, - -0.9610207909775256f, - -0.9609845921060651f, - -0.9609483767683936f, - -0.9609121449651309f, - -0.9608758966968988f, - -0.9608396319643172f, - -0.9608033507680084f, - -0.9607670531085936f, - -0.9607307389866953f, - -0.9606944084029347f, - -0.9606580613579354f, - -0.9606216978523194f, - -0.9605853178867108f, - -0.9605489214617317f, - -0.9605125085780065f, - -0.9604760792361587f, - -0.9604396334368132f, - -0.9604031711805938f, - -0.9603666924681258f, - -0.9603301973000336f, - -0.9602936856769431f, - -0.9602571575994797f, - -0.9602206130682694f, - -0.9601840520839382f, - -0.9601474746471127f, - -0.9601108807584198f, - -0.9600742704184863f, - -0.9600376436279392f, - -0.9600010003874068f, - -0.9599643406975165f, - -0.9599276645588966f, - -0.9598909719721753f, - -0.9598542629379817f, - -0.9598175374569448f, - -0.9597807955296935f, - -0.9597440371568574f, - -0.9597072623390668f, - -0.9596704710769514f, - -0.9596336633711415f, - -0.9595968392222685f, - -0.9595599986309628f, - -0.9595231415978557f, - -0.9594862681235785f, - -0.9594493782087639f, - -0.9594124718540429f, - -0.9593755490600486f, - -0.9593386098274133f, - -0.9593016541567705f, - -0.9592646820487526f, - -0.9592276935039937f, - -0.9591906885231272f, - -0.9591536671067876f, - -0.9591166292556091f, - -0.9590795749702263f, - -0.9590425042512738f, - -0.9590054170993874f, - -0.9589683135152022f, - -0.958931193499354f, - -0.9588940570524785f, - -0.9588569041752129f, - -0.9588197348681932f, - -0.9587825491320563f, - -0.9587453469674393f, - -0.95870812837498f, - -0.9586708933553156f, - -0.9586336419090851f, - -0.9585963740369254f, - -0.9585590897394762f, - -0.9585217890173757f, - -0.9584844718712638f, - -0.958447138301779f, - -0.9584097883095616f, - -0.9583724218952512f, - -0.9583350390594887f, - -0.9582976398029137f, - -0.9582602241261678f, - -0.9582227920298919f, - -0.9581853435147271f, - -0.9581478785813154f, - -0.9581103972302988f, - -0.9580728994623193f, - -0.9580353852780193f, - -0.957997854678042f, - -0.9579603076630303f, - -0.9579227442336276f, - -0.9578851643904772f, - -0.9578475681342234f, - -0.9578099554655105f, - -0.9577723263849827f, - -0.9577346808932845f, - -0.9576970189910616f, - -0.9576593406789591f, - -0.9576216459576224f, - -0.9575839348276973f, - -0.9575462072898304f, - -0.957508463344668f, - -0.9574707029928567f, - -0.9574329262350434f, - -0.9573951330718757f, - -0.9573573235040009f, - -0.9573194975320675f, - -0.9572816551567226f, - -0.9572437963786153f, - -0.9572059211983941f, - -0.9571680296167084f, - -0.9571301216342067f, - -0.9570921972515392f, - -0.9570542564693552f, - -0.9570162992883056f, - -0.9569783257090396f, - -0.9569403357322089f, - -0.9569023293584639f, - -0.9568643065884561f, - -0.956826267422837f, - -0.9567882118622584f, - -0.9567501399073719f, - -0.9567120515588304f, - -0.9566739468172866f, - -0.956635825683393f, - -0.9565976881578028f, - -0.9565595342411698f, - -0.9565213639341477f, - -0.9564831772373904f, - -0.9564449741515523f, - -0.9564067546772876f, - -0.956368518815252f, - -0.9563302665661f, - -0.9562919979304874f, - -0.9562537129090695f, - -0.9562154115025027f, - -0.9561770937114432f, - -0.9561387595365476f, - -0.9561004089784724f, - -0.9560620420378751f, - -0.9560236587154132f, - -0.9559852590117441f, - -0.9559468429275256f, - -0.9559084104634165f, - -0.9558699616200748f, - -0.9558314963981599f, - -0.9557930147983301f, - -0.9557545168212456f, - -0.9557160024675653f, - -0.9556774717379499f, - -0.9556389246330589f, - -0.9556003611535533f, - -0.9555617813000934f, - -0.9555231850733408f, - -0.9554845724739565f, - -0.9554459435026023f, - -0.9554072981599395f, - -0.9553686364466313f, - -0.9553299583633394f, - -0.9552912639107269f, - -0.9552525530894563f, - -0.9552138259001917f, - -0.9551750823435962f, - -0.9551363224203336f, - -0.955097546131068f, - -0.9550587534764642f, - -0.9550199444571867f, - -0.9549811190739005f, - -0.9549422773272704f, - -0.9549034192179628f, - -0.9548645447466431f, - -0.9548256539139772f, - -0.9547867467206316f, - -0.9547478231672732f, - -0.9547088832545689f, - -0.9546699269831858f, - -0.9546309543537913f, - -0.954591965367053f, - -0.9545529600236398f, - -0.9545139383242189f, - -0.9544749002694604f, - -0.9544358458600316f, - -0.9543967750966028f, - -0.9543576879798428f, - -0.9543185845104222f, - -0.9542794646890098f, - -0.954240328516277f, - -0.9542011759928937f, - -0.9541620071195315f, - -0.9541228218968606f, - -0.9540836203255532f, - -0.9540444024062804f, - -0.9540051681397148f, - -0.9539659175265284f, - -0.9539266505673937f, - -0.9538873672629833f, - -0.9538480676139709f, - -0.9538087516210294f, - -0.9537694192848327f, - -0.9537300706060544f, - -0.9536907055853694f, - -0.9536513242234513f, - -0.9536119265209761f, - -0.9535725124786176f, - -0.953533082097052f, - -0.9534936353769544f, - -0.9534541723190014f, - -0.9534146929238683f, - -0.9533751971922322f, - -0.9533356851247697f, - -0.9532961567221578f, - -0.9532566119850735f, - -0.9532170509141951f, - -0.9531774735101999f, - -0.9531378797737659f, - -0.9530982697055722f, - -0.9530586433062971f, - -0.9530190005766196f, - -0.9529793415172187f, - -0.9529396661287747f, - -0.9528999744119667f, - -0.9528602663674752f, - -0.9528205419959803f, - -0.9527808012981632f, - -0.9527410442747041f, - -0.9527012709262848f, - -0.9526614812535862f, - -0.9526216752572909f, - -0.9525818529380805f, - -0.9525420142966374f, - -0.952502159333644f, - -0.9524622880497837f, - -0.9524224004457394f, - -0.9523824965221946f, - -0.9523425762798328f, - -0.9523026397193384f, - -0.9522626868413956f, - -0.9522227176466889f, - -0.9521827321359029f, - -0.9521427303097233f, - -0.952102712168835f, - -0.9520626777139245f, - -0.9520226269456766f, - -0.9519825598647785f, - -0.9519424764719162f, - -0.9519023767677773f, - -0.9518622607530478f, - -0.9518221284284158f, - -0.9517819797945686f, - -0.9517418148521948f, - -0.9517016336019817f, - -0.9516614360446183f, - -0.9516212221807931f, - -0.9515809920111957f, - -0.951540745536515f, - -0.9515004827574407f, - -0.9514602036746627f, - -0.9514199082888709f, - -0.9513795966007563f, - -0.9513392686110093f, - -0.9512989243203209f, - -0.9512585637293822f, - -0.9512181868388854f, - -0.9511777936495218f, - -0.9511373841619837f, - -0.9510969583769633f, - -0.9510565162951536f, - -0.9510160579172475f, - -0.9509755832439383f, - -0.9509350922759189f, - -0.950894585013884f, - -0.9508540614585272f, - -0.9508135216105431f, - -0.9507729654706257f, - -0.9507323930394709f, - -0.950691804317773f, - -0.9506511993062284f, - -0.9506105780055318f, - -0.9505699404163801f, - -0.9505292865394689f, - -0.9504886163754958f, - -0.9504479299251565f, - -0.9504072271891488f, - -0.9503665081681699f, - -0.9503257728629182f, - -0.9502850212740905f, - -0.950244253402386f, - -0.9502034692485027f, - -0.9501626688131399f, - -0.9501218520969965f, - -0.9500810191007718f, - -0.9500401698251654f, - -0.9499993042708774f, - -0.9499584224386081f, - -0.9499175243290578f, - -0.9498766099429271f, - -0.9498356792809176f, - -0.9497947323437304f, - -0.949753769132067f, - -0.9497127896466291f, - -0.9496717938881194f, - -0.94963078185724f, - -0.9495897535546938f, - -0.9495487089811837f, - -0.9495076481374127f, - -0.9494665710240849f, - -0.949425477641904f, - -0.949384367991574f, - -0.949343242073799f, - -0.9493020998892845f, - -0.9492609414387345f, - -0.9492197667228555f, - -0.9491785757423514f, - -0.9491373684979293f, - -0.9490961449902945f, - -0.9490549052201542f, - -0.949013649188214f, - -0.9489723768951814f, - -0.9489310883417634f, - -0.9488897835286682f, - -0.9488484624566021f, - -0.9488071251262744f, - -0.9487657715383926f, - -0.9487244016936659f, - -0.948683015592803f, - -0.9486416132365127f, - -0.9486001946255046f, - -0.9485587597604885f, - -0.9485173086421745f, - -0.9484758412712726f, - -0.9484343576484932f, - -0.9483928577745474f, - -0.9483513416501463f, - -0.9483098092760013f, - -0.9482682606528234f, - -0.9482266957813255f, - -0.9481851146622192f, - -0.9481435172962173f, - -0.948101903684032f, - -0.948060273826377f, - -0.9480186277239653f, - -0.9479769653775106f, - -0.9479352867877264f, - -0.9478935919553274f, - -0.9478518808810279f, - -0.9478101535655423f, - -0.9477684100095857f, - -0.9477266502138736f, - -0.9476848741791215f, - -0.9476430819060447f, - -0.94760127339536f, - -0.9475594486477836f, - -0.9475176076640319f, - -0.9474757504448218f, - -0.9474338769908712f, - -0.9473919873028965f, - -0.9473500813816165f, - -0.9473081592277484f, - -0.9472662208420111f, - -0.9472242662251231f, - -0.9471822953778032f, - -0.9471403083007702f, - -0.9470983049947443f, - -0.9470562854604447f, - -0.9470142496985916f, - -0.9469721977099049f, - -0.9469301294951057f, - -0.9468880450549145f, - -0.9468459443900525f, - -0.9468038275012408f, - -0.9467616943892015f, - -0.9467195450546562f, - -0.9466773794983276f, - -0.9466351977209375f, - -0.9465929997232092f, - -0.9465507855058654f, - -0.9465085550696302f, - -0.9464663084152259f, - -0.9464240455433774f, - -0.9463817664548084f, - -0.946339471150244f, - -0.9462971596304078f, - -0.9462548318960259f, - -0.9462124879478226f, - -0.9461701277865244f, - -0.9461277514128567f, - -0.9460853588275454f, - -0.9460429500313172f, - -0.9460005250248983f, - -0.9459580838090162f, - -0.9459156263843981f, - -0.9458731527517711f, - -0.945830662911863f, - -0.9457881568654022f, - -0.9457456346131169f, - -0.9457030961557357f, - -0.9456605414939872f, - -0.9456179706286009f, - -0.9455753835603062f, - -0.9455327802898328f, - -0.9454901608179104f, - -0.9454475251452698f, - -0.9454048732726412f, - -0.9453622052007556f, - -0.9453195209303438f, - -0.9452768204621376f, - -0.9452341037968683f, - -0.9451913709352682f, - -0.945148621878069f, - -0.9451058566260038f, - -0.9450630751798047f, - -0.9450202775402058f, - -0.9449774637079391f, - -0.9449346336837392f, - -0.9448917874683394f, - -0.9448489250624745f, - -0.944806046466878f, - -0.9447631516822855f, - -0.9447202407094314f, - -0.9446773135490514f, - -0.9446343702018809f, - -0.9445914106686556f, - -0.9445484349501114f, - -0.9445054430469852f, - -0.9444624349600135f, - -0.9444194106899331f, - -0.944376370237481f, - -0.9443333136033951f, - -0.9442902407884131f, - -0.9442471517932729f, - -0.9442040466187126f, - -0.9441609252654712f, - -0.9441177877342876f, - -0.9440746340259006f, - -0.94403146414105f, - -0.9439882780804748f, - -0.9439450758449159f, - -0.9439018574351131f, - -0.9438586228518071f, - -0.9438153720957382f, - -0.9437721051676481f, - -0.943728822068278f, - -0.9436855227983696f, - -0.9436422073586643f, - -0.9435988757499051f, - -0.9435555279728337f, - -0.9435121640281938f, - -0.9434687839167274f, - -0.9434253876391785f, - -0.9433819751962902f, - -0.9433385465888072f, - -0.9432951018174724f, - -0.9432516408830313f, - -0.9432081637862277f, - -0.9431646705278077f, - -0.9431211611085154f, - -0.943077635529097f, - -0.9430340937902978f, - -0.9429905358928644f, - -0.9429469618375431f, - -0.9429033716250802f, - -0.9428597652562225f, - -0.9428161427317178f, - -0.9427725040523132f, - -0.9427288492187564f, - -0.9426851782317952f, - -0.9426414910921784f, - -0.9425977878006544f, - -0.9425540683579718f, - -0.9425103327648797f, - -0.942466581022128f, - -0.942422813130466f, - -0.9423790290906437f, - -0.942335228903411f, - -0.9422914125695191f, - -0.9422475800897184f, - -0.94220373146476f, - -0.9421598666953949f, - -0.9421159857823753f, - -0.9420720887264528f, - -0.9420281755283793f, - -0.9419842461889081f, - -0.9419403007087906f, - -0.941896339088781f, - -0.9418523613296318f, - -0.9418083674320974f, - -0.9417643573969304f, - -0.9417203312248859f, - -0.9416762889167176f, - -0.9416322304731812f, - -0.9415881558950302f, - -0.9415440651830209f, - -0.9414999583379081f, - -0.9414558353604482f, - -0.9414116962513969f, - -0.9413675410115105f, - -0.9413233696415453f, - -0.9412791821422588f, - -0.9412349785144077f, - -0.9411907587587497f, - -0.941146522876042f, - -0.9411022708670431f, - -0.9410580027325111f, - -0.9410137184732044f, - -0.9409694180898815f, - -0.9409251015833023f, - -0.9408807689542253f, - -0.9408364202034111f, - -0.9407920553316185f, - -0.9407476743396084f, - -0.9407032772281408f, - -0.9406588639979773f, - -0.9406144346498777f, - -0.9405699891846041f, - -0.940525527602918f, - -0.9404810499055809f, - -0.9404365560933549f, - -0.9403920461670028f, - -0.9403475201272871f, - -0.9403029779749704f, - -0.9402584197108165f, - -0.9402138453355886f, - -0.9401692548500504f, - -0.9401246482549658f, - -0.9400800255510996f, - -0.9400353867392162f, - -0.9399907318200803f, - -0.939946060794457f, - -0.939901373663112f, - -0.939856670426811f, - -0.9398119510863199f, - -0.9397672156424045f, - -0.9397224640958322f, - -0.9396776964473692f, - -0.9396329126977828f, - -0.93958811284784f, - -0.9395432968983091f, - -0.9394984648499576f, - -0.9394536167035537f, - -0.9394087524598655f, - -0.9393638721196625f, - -0.939318975683713f, - -0.9392740631527873f, - -0.9392291345276536f, - -0.9391841898090828f, - -0.9391392289978442f, - -0.9390942520947093f, - -0.9390492591004476f, - -0.9390042500158308f, - -0.9389592248416294f, - -0.9389141835786161f, - -0.9388691262275612f, - -0.938824052789238f, - -0.9387789632644178f, - -0.9387338576538741f, - -0.9386887359583792f, - -0.9386435981787066f, - -0.9385984443156291f, - -0.9385532743699211f, - -0.9385080883423564f, - -0.9384628862337091f, - -0.9384176680447538f, - -0.938372433776265f, - -0.9383271834290183f, - -0.9382819170037889f, - -0.9382366345013523f, - -0.9381913359224842f, - -0.9381460212679612f, - -0.9381006905385596f, - -0.9380553437350562f, - -0.9380099808582275f, - -0.9379646019088516f, - -0.9379192068877056f, - -0.9378737957955673f, - -0.9378283686332147f, - -0.9377829254014266f, - -0.9377374661009812f, - -0.9376919907326582f, - -0.9376464992972356f, - -0.937600991795494f, - -0.9375554682282123f, - -0.9375099285961717f, - -0.9374643729001509f, - -0.9374188011409318f, - -0.9373732133192945f, - -0.937327609436021f, - -0.9372819894918916f, - -0.9372363534876887f, - -0.9371907014241939f, - -0.9371450333021899f, - -0.9370993491224588f, - -0.9370536488857837f, - -0.9370079325929471f, - -0.9369622002447331f, - -0.9369164518419248f, - -0.9368706873853063f, - -0.9368249068756614f, - -0.936779110313775f, - -0.9367332977004318f, - -0.9366874690364165f, - -0.9366416243225142f, - -0.936595763559511f, - -0.9365498867481924f, - -0.9365039938893446f, - -0.9364580849837535f, - -0.9364121600322064f, - -0.93636621903549f, - -0.9363202619943913f, - -0.9362742889096975f, - -0.9362282997821972f, - -0.9361822946126779f, - -0.9361362734019278f, - -0.9360902361507356f, - -0.9360441828598898f, - -0.9359981135301801f, - -0.9359520281623953f, - -0.935905926757326f, - -0.9358598093157608f, - -0.935813675838491f, - -0.9357675263263063f, - -0.9357213607799986f, - -0.9356751792003574f, - -0.9356289815881751f, - -0.9355827679442428f, - -0.935536538269353f, - -0.9354902925642968f, - -0.9354440308298675f, - -0.9353977530668571f, - -0.9353514592760592f, - -0.9353051494582668f, - -0.9352588236142734f, - -0.9352124817448724f, - -0.9351661238508584f, - -0.9351197499330256f, - -0.9350733599921685f, - -0.9350269540290816f, - -0.9349805320445609f, - -0.934934094039401f, - -0.9348876400143985f, - -0.9348411699703484f, - -0.9347946839080477f, - -0.9347481818282922f, - -0.9347016637318799f, - -0.9346551296196064f, - -0.93460857949227f, - -0.9345620133506682f, - -0.9345154311955989f, - -0.9344688330278597f, - -0.9344222188482498f, - -0.9343755886575678f, - -0.9343289424566119f, - -0.9342822802461825f, - -0.9342356020270787f, - -0.9341889078001001f, - -0.9341421975660467f, - -0.9340954713257195f, - -0.9340487290799186f, - -0.9340019708294451f, - -0.9339551965751f, - -0.9339084063176855f, - -0.933861600058002f, - -0.9338147777968527f, - -0.9337679395350391f, - -0.9337210852733645f, - -0.9336742150126313f, - -0.9336273287536427f, - -0.9335804264972017f, - -0.9335335082441126f, - -0.9334865739951792f, - -0.9334396237512054f, - -0.9333926575129956f, - -0.933345675281355f, - -0.9332986770570885f, - -0.9332516628410013f, - -0.9332046326338985f, - -0.933157586436587f, - -0.9331105242498718f, - -0.9330634460745607f, - -0.9330163519114588f, - -0.9329692417613742f, - -0.9329221156251132f, - -0.9328749735034846f, - -0.9328278153972945f, - -0.9327806413073523f, - -0.9327334512344655f, - -0.9326862451794432f, - -0.9326390231430941f, - -0.9325917851262273f, - -0.932544531129652f, - -0.9324972611541783f, - -0.932449975200616f, - -0.9324026732697753f, - -0.9323553553624667f, - -0.9323080214795006f, - -0.9322606716216888f, - -0.9322133057898422f, - -0.9321659239847725f, - -0.9321185262072912f, - -0.9320711124582111f, - -0.9320236827383442f, - -0.9319762370485034f, - -0.9319287753895011f, - -0.9318812977621516f, - -0.9318338041672676f, - -0.9317862946056632f, - -0.931738769078152f, - -0.931691227585549f, - -0.9316436701286687f, - -0.9315960967083255f, - -0.9315485073253348f, - -0.9315009019805124f, - -0.9314532806746733f, - -0.9314056434086345f, - -0.9313579901832111f, - -0.9313103209992204f, - -0.9312626358574786f, - -0.9312149347588038f, - -0.9311672177040121f, - -0.9311194846939219f, - -0.9310717357293506f, - -0.9310239708111173f, - -0.9309761899400392f, - -0.9309283931169359f, - -0.9308805803426257f, - -0.9308327516179286f, - -0.9307849069436638f, - -0.930737046320651f, - -0.93068916974971f, - -0.930641277231662f, - -0.9305933687673271f, - -0.9305454443575262f, - -0.9304975040030802f, - -0.9304495477048111f, - -0.9304015754635405f, - -0.9303535872800902f, - -0.9303055831552822f, - -0.9302575630899397f, - -0.9302095270848851f, - -0.9301614751409417f, - -0.9301134072589327f, - -0.9300653234396813f, - -0.9300172236840122f, - -0.9299691079927493f, - -0.929920976366717f, - -0.9298728288067396f, - -0.9298246653136428f, - -0.9297764858882512f, - -0.9297282905313915f, - -0.9296800792438881f, - -0.9296318520265678f, - -0.9295836088802567f, - -0.9295353498057822f, - -0.92948707480397f, - -0.9294387838756482f, - -0.9293904770216436f, - -0.9293421542427849f, - -0.9292938155398989f, - -0.9292454609138147f, - -0.9291970903653601f, - -0.9291487038953649f, - -0.9291003015046576f, - -0.9290518831940676f, - -0.9290034489644243f, - -0.9289549988165583f, - -0.9289065327512993f, - -0.9288580507694778f, - -0.9288095528719241f, - -0.9287610390594702f, - -0.9287125093329467f, - -0.9286639636931852f, - -0.9286154021410172f, - -0.9285668246772757f, - -0.9285182313027923f, - -0.9284696220184f, - -0.9284209968249312f, - -0.9283723557232197f, - -0.9283236987140988f, - -0.928275025798402f, - -0.9282263369769632f, - -0.9281776322506172f, - -0.9281289116201983f, - -0.9280801750865411f, - -0.9280314226504806f, - -0.9279826543128527f, - -0.9279338700744927f, - -0.9278850699362361f, - -0.9278362538989203f, - -0.9277874219633803f, - -0.9277385741304537f, - -0.927689710400977f, - -0.9276408307757884f, - -0.9275919352557241f, - -0.927543023841623f, - -0.9274940965343224f, - -0.9274451533346614f, - -0.9273961942434782f, - -0.9273472192616117f, - -0.9272982283899008f, - -0.9272492216291858f, - -0.9272001989803057f, - -0.9271511604441007f, - -0.9271021060214109f, - -0.9270530357130771f, - -0.92700394951994f, - -0.9269548474428407f, - -0.9269057294826203f, - -0.9268565956401209f, - -0.9268074459161838f, - -0.9267582803116521f, - -0.9267090988273671f, - -0.9266599014641722f, - -0.92661068822291f, - -0.9265614591044248f, - -0.9265122141095585f, - -0.9264629532391561f, - -0.9264136764940609f, - -0.9263643838751183f, - -0.9263150753831717f, - -0.9262657510190667f, - -0.9262164107836485f, - -0.9261670546777618f, - -0.9261176827022533f, - -0.9260682948579685f, - -0.9260188911457535f, - -0.9259694715664548f, - -0.9259200361209197f, - -0.9258705848099948f, - -0.9258211176345277f, - -0.9257716345953655f, - -0.9257221356933568f, - -0.9256726209293493f, - -0.9256230903041917f, - -0.925573543818732f, - -0.9255239814738201f, - -0.9254744032703048f, - -0.9254248092090357f, - -0.9253751992908621f, - -0.9253255735166348f, - -0.9252759318872038f, - -0.9252262744034196f, - -0.9251766010661329f, - -0.9251269118761954f, - -0.9250772068344579f, - -0.925027485941773f, - -0.9249777491989913f, - -0.9249279966069662f, - -0.9248782281665495f, - -0.9248284438785948f, - -0.9247786437439539f, - -0.9247288277634811f, - -0.9246789959380294f, - -0.9246291482684534f, - -0.9245792847556062f, - -0.9245294054003431f, - -0.924479510203518f, - -0.9244295991659868f, - -0.924379672288604f, - -0.9243297295722251f, - -0.9242797710177059f, - -0.9242297966259028f, - -0.9241798063976718f, - -0.9241298003338695f, - -0.9240797784353524f, - -0.9240297407029783f, - -0.9239796871376041f, - -0.9239296177400877f, - -0.9238795325112866f, - -0.9238294314520596f, - -0.923779314563265f, - -0.9237291818457612f, - -0.9236790333004076f, - -0.923628868928063f, - -0.9235786887295874f, - -0.9235284927058406f, - -0.9234782808576826f, - -0.9234280531859733f, - -0.9233778096915742f, - -0.9233275503753458f, - -0.9232772752381493f, - -0.9232269842808457f, - -0.9231766775042975f, - -0.923126354909366f, - -0.9230760164969145f, - -0.9230256622678042f, - -0.9229752922228989f, - -0.9229249063630609f, - -0.9228745046891547f, - -0.9228240872020425f, - -0.9227736539025891f, - -0.9227232047916583f, - -0.9226727398701151f, - -0.9226222591388233f, - -0.9225717625986486f, - -0.9225212502504557f, - -0.9224707220951107f, - -0.9224201781334791f, - -0.922369618366427f, - -0.9223190427948202f, - -0.9222684514195263f, - -0.9222178442414116f, - -0.9221672212613432f, - -0.9221165824801884f, - -0.9220659278988153f, - -0.9220152575180917f, - -0.9219645713388857f, - -0.9219138693620654f, - -0.9218631515885005f, - -0.9218124180190596f, - -0.9217616686546118f, - -0.9217109034960267f, - -0.9216601225441744f, - -0.921609325799925f, - -0.9215585132641488f, - -0.9215076849377161f, - -0.9214568408214985f, - -0.9214059809163668f, - -0.9213551052231923f, - -0.9213042137428478f, - -0.9212533064762036f, - -0.9212023834241333f, - -0.9211514445875086f, - -0.9211004899672035f, - -0.9210495195640898f, - -0.9209985333790416f, - -0.9209475314129321f, - -0.920896513666636f, - -0.9208454801410263f, - -0.9207944308369785f, - -0.9207433657553665f, - -0.920692284897066f, - -0.9206411882629519f, - -0.9205900758538998f, - -0.9205389476707851f, - -0.9204878037144847f, - -0.9204366439858743f, - -0.9203854684858308f, - -0.9203342772152305f, - -0.9202830701749514f, - -0.9202318473658705f, - -0.9201806087888654f, - -0.920129354444814f, - -0.9200780843345949f, - -0.9200267984590862f, - -0.9199754968191675f, - -0.9199241794157165f, - -0.9198728462496135f, - -0.9198214973217375f, - -0.9197701326329693f, - -0.9197187521841876f, - -0.919667355976274f, - -0.9196159440101088f, - -0.9195645162865724f, - -0.9195130728065468f, - -0.919461613570913f, - -0.9194101385805531f, - -0.9193586478363484f, - -0.9193071413391819f, - -0.919255619089936f, - -0.9192040810894934f, - -0.9191525273387369f, - -0.9191009578385504f, - -0.9190493725898173f, - -0.9189977715934216f, - -0.9189461548502469f, - -0.9188945223611785f, - -0.9188428741271008f, - -0.9187912101488985f, - -0.9187395304274568f, - -0.9186878349636618f, - -0.9186361237583989f, - -0.9185843968125542f, - -0.9185326541270138f, - -0.9184808957026648f, - -0.9184291215403937f, - -0.9183773316410878f, - -0.9183255260056341f, - -0.918273704634921f, - -0.9182218675298356f, - -0.9181700146912672f, - -0.9181181461201031f, - -0.9180662618172329f, - -0.918014361783545f, - -0.9179624460199298f, - -0.9179105145272752f, - -0.9178585673064724f, - -0.9178066043584107f, - -0.9177546256839815f, - -0.9177026312840739f, - -0.9176506211595801f, - -0.9175985953113903f, - -0.9175465537403971f, - -0.9174944964474914f, - -0.9174424234335653f, - -0.9173903346995109f, - -0.9173382302462213f, - -0.9172861100745889f, - -0.917233974185507f, - -0.9171818225798686f, - -0.9171296552585672f, - -0.9170774722224971f, - -0.9170252734725525f, - -0.9169730590096273f, - -0.9169208288346163f, - -0.916868582948415f, - -0.9168163213519182f, - -0.9167640440460214f, - -0.9167117510316201f, - -0.9166594423096108f, - -0.9166071178808897f, - -0.9165547777463533f, - -0.916502421906898f, - -0.9164500503634216f, - -0.9163976631168209f, - -0.9163452601679946f, - -0.916292841517839f, - -0.9162404071672535f, - -0.9161879571171357f, - -0.9161354913683857f, - -0.9160830099219007f, - -0.9160305127785812f, - -0.9159779999393259f, - -0.9159254714050359f, - -0.9158729271766096f, - -0.9158203672549485f, - -0.9157677916409525f, - -0.9157152003355231f, - -0.9156625933395611f, - -0.915609970653968f, - -0.9155573322796451f, - -0.9155046782174949f, - -0.9154520084684195f, - -0.9153993230333212f, - -0.9153466219131023f, - -0.9152939051086669f, - -0.9152411726209176f, - -0.9151884244507582f, - -0.9151356605990919f, - -0.9150828810668237f, - -0.9150300858548576f, - -0.9149772749640981f, - -0.9149244483954498f, - -0.9148716061498187f, - -0.9148187482281097f, - -0.9147658746312287f, - -0.9147129853600815f, - -0.9146600804155741f, - -0.9146071597986137f, - -0.9145542235101067f, - -0.9145012715509602f, - -0.914448303922081f, - -0.9143953206243776f, - -0.9143423216587571f, - -0.9142893070261285f, - -0.914236276727399f, - -0.9141832307634783f, - -0.9141301691352745f, - -0.9140770918436979f, - -0.9140239988896566f, - -0.9139708902740614f, - -0.9139177659978215f, - -0.913864626061848f, - -0.913811470467051f, - -0.9137582992143413f, - -0.9137051123046297f, - -0.9136519097388281f, - -0.913598691517848f, - -0.9135454576426011f, - -0.9134922081139992f, - -0.9134389429329555f, - -0.9133856621003823f, - -0.9133323656171924f, - -0.9132790534842989f, - -0.913225725702616f, - -0.9131723822730565f, - -0.9131190231965358f, - -0.9130656484739665f, - -0.9130122581062644f, - -0.9129588520943439f, - -0.9129054304391201f, - -0.912851993141508f, - -0.912798540202424f, - -0.9127450716227836f, - -0.9126915874035031f, - -0.9126380875454984f, - -0.9125845720496869f, - -0.9125310409169853f, - -0.9124774941483106f, - -0.9124239317445809f, - -0.9123703537067136f, - -0.9123167600356268f, - -0.9122631507322384f, - -0.9122095257974681f, - -0.9121558852322332f, - -0.9121022290374542f, - -0.9120485572140494f, - -0.9119948697629398f, - -0.9119411666850437f, - -0.9118874479812824f, - -0.9118337136525757f, - -0.911779963699845f, - -0.9117261981240111f, - -0.911672416925995f, - -0.911618620106718f, - -0.9115648076671026f, - -0.9115109796080704f, - -0.9114571359305439f, - -0.9114032766354452f, - -0.911349401723698f, - -0.9112955111962247f, - -0.9112416050539496f, - -0.9111876832977951f, - -0.9111337459286862f, - -0.9110797929475464f, - -0.9110258243553011f, - -0.9109718401528738f, - -0.9109178403411905f, - -0.9108638249211757f, - -0.910809793893756f, - -0.9107557472598559f, - -0.9107016850204025f, - -0.9106476071763213f, - -0.9105935137285398f, - -0.9105394046779844f, - -0.9104852800255824f, - -0.9104311397722611f, - -0.9103769839189477f, - -0.9103228124665711f, - -0.910268625416059f, - -0.9102144227683399f, - -0.9101602045243422f, - -0.9101059706849958f, - -0.9100517212512292f, - -0.9099974562239724f, - -0.9099431756041547f, - -0.9098888793927068f, - -0.9098345675905588f, - -0.9097802401986412f, - -0.9097258972178848f, - -0.9096715386492211f, - -0.9096171644935814f, - -0.9095627747518974f, - -0.9095083694251006f, - -0.9094539485141239f, - -0.9093995120198995f, - -0.9093450599433602f, - -0.9092905922854385f, - -0.9092361090470686f, - -0.9091816102291833f, - -0.9091270958327174f, - -0.9090725658586036f, - -0.9090180203077773f, - -0.9089634591811725f, - -0.9089088824797251f, - -0.9088542902043688f, - -0.9087996823560403f, - -0.9087450589356743f, - -0.9086904199442079f, - -0.9086357653825758f, - -0.9085810952517159f, - -0.908526409552564f, - -0.9084717082860578f, - -0.9084169914531344f, - -0.9083622590547312f, - -0.9083075110917859f, - -0.908252747565237f, - -0.9081979684760226f, - -0.9081431738250815f, - -0.908088363613352f, - -0.9080335378417741f, - -0.9079786965112869f, - -0.90792383962283f, - -0.907868967177343f, - -0.907814079175767f, - -0.9077591756190418f, - -0.9077042565081086f, - -0.9076493218439081f, - -0.9075943716273813f, - -0.9075394058594705f, - -0.9074844245411171f, - -0.9074294276732634f, - -0.9073744152568511f, - -0.9073193872928238f, - -0.9072643437821235f, - -0.9072092847256945f, - -0.9071542101244788f, - -0.9070991199794212f, - -0.9070440142914649f, - -0.9069888930615551f, - -0.9069337562906349f, - -0.9068786039796503f, - -0.9068234361295453f, - -0.9067682527412665f, - -0.906713053815758f, - -0.9066578393539665f, - -0.9066026093568376f, - -0.9065473638253183f, - -0.9064921027603547f, - -0.906436826162894f, - -0.9063815340338828f, - -0.9063262263742692f, - -0.9062709031850005f, - -0.9062155644670248f, - -0.9061602102212898f, - -0.9061048404487447f, - -0.9060494551503381f, - -0.9059940543270188f, - -0.9059386379797358f, - -0.9058832061094394f, - -0.9058277587170789f, - -0.9057722958036045f, - -0.9057168173699662f, - -0.9056613234171152f, - -0.9056058139460023f, - -0.9055502889575782f, - -0.9054947484527943f, - -0.9054391924326028f, - -0.9053836208979554f, - -0.9053280338498039f, - -0.9052724312891015f, - -0.9052168132168006f, - -0.9051611796338541f, - -0.9051055305412149f, - -0.9050498659398378f, - -0.9049941858306749f, - -0.9049384902146816f, - -0.9048827790928113f, - -0.9048270524660199f, - -0.9047713103352606f, - -0.9047155527014897f, - -0.9046597795656619f, - -0.9046039909287334f, - -0.90454818679166f, - -0.9044923671553979f, - -0.9044365320209029f, - -0.9043806813891327f, - -0.9043248152610439f, - -0.9042689336375938f, - -0.9042130365197393f, - -0.904157123908439f, - -0.9041011958046508f, - -0.9040452522093329f, - -0.9039892931234433f, - -0.9039333185479419f, - -0.9038773284837868f, - -0.9038213229319387f, - -0.9037653018933556f, - -0.9037092653689986f, - -0.9036532133598272f, - -0.9035971458668028f, - -0.9035410628908846f, - -0.9034849644330349f, - -0.9034288504942141f, - -0.9033727210753846f, - -0.9033165761775068f, - -0.903260415801544f, - -0.903204239948458f, - -0.903148048619211f, - -0.9030918418147665f, - -0.9030356195360874f, - -0.9029793817841367f, - -0.902923128559878f, - -0.9028668598642758f, - -0.9028105756982938f, - -0.9027542760628966f, - -0.9026979609590483f, - -0.9026416303877148f, - -0.9025852843498607f, - -0.9025289228464517f, - -0.902472545878453f, - -0.9024161534468315f, - -0.9023597455525529f, - -0.9023033221965838f, - -0.9022468833798908f, - -0.9021904291034415f, - -0.9021339593682031f, - -0.9020774741751428f, - -0.9020209735252284f, - -0.9019644574194287f, - -0.9019079258587113f, - -0.901851378844046f, - -0.9017948163764002f, - -0.9017382384567443f, - -0.9016816450860469f, - -0.9016250362652788f, - -0.9015684119954086f, - -0.9015117722774076f, - -0.9014551171122456f, - -0.9013984465008943f, - -0.9013417604443236f, - -0.9012850589435055f, - -0.9012283419994112f, - -0.901171609613013f, - -0.9011148617852828f, - -0.9010580985171929f, - -0.9010013198097155f, - -0.9009445256638243f, - -0.900887716080492f, - -0.9008308910606921f, - -0.900774050605398f, - -0.9007171947155841f, - -0.9006603233922245f, - -0.9006034366362935f, - -0.900546534448766f, - -0.9004896168306166f, - -0.9004326837828212f, - -0.900375735306355f, - -0.9003187714021939f, - -0.9002617920713133f, - -0.9002047973146907f, - -0.900147787133302f, - -0.9000907615281242f, - -0.900033720500134f, - -0.8999766640503095f, - -0.899919592179628f, - -0.8998625048890674f, - -0.8998054021796056f, - -0.8997482840522216f, - -0.8996911505078935f, - -0.8996340015476013f, - -0.8995768371723228f, - -0.8995196573830386f, - -0.8994624621807278f, - -0.8994052515663714f, - -0.8993480255409482f, - -0.8992907841054399f, - -0.8992335272608267f, - -0.8991762550080903f, - -0.8991189673482117f, - -0.8990616642821725f, - -0.8990043458109541f, - -0.8989470119355396f, - -0.898889662656911f, - -0.8988322979760507f, - -0.8987749178939415f, - -0.8987175224115672f, - -0.898660111529911f, - -0.8986026852499566f, - -0.8985452435726875f, - -0.8984877864990889f, - -0.8984303140301447f, - -0.8983728261668399f, - -0.8983153229101589f, - -0.898257804261088f, - -0.8982002702206123f, - -0.8981427207897177f, - -0.8980851559693898f, - -0.8980275757606156f, - -0.8979699801643817f, - -0.8979123691816747f, - -0.8978547428134819f, - -0.8977971010607902f, - -0.8977394439245882f, - -0.8976817714058628f, - -0.8976240835056037f, - -0.8975663802247976f, - -0.8975086615644344f, - -0.8974509275255025f, - -0.8973931781089921f, - -0.8973354133158913f, - -0.897277633147191f, - -0.8972198376038805f, - -0.8971620266869511f, - -0.8971042003973921f, - -0.8970463587361954f, - -0.8969885017043512f, - -0.8969306293028518f, - -0.8968727415326884f, - -0.8968148383948529f, - -0.896756919890337f, - -0.896698986020134f, - -0.896641036785236f, - -0.8965830721866361f, - -0.8965250922253272f, - -0.8964670969023033f, - -0.896409086218558f, - -0.8963510601750851f, - -0.8962930187728786f, - -0.8962349620129337f, - -0.8961768898962446f, - -0.8961188024238073f, - -0.8960606995966156f, - -0.8960025814156664f, - -0.8959444478819549f, - -0.8958862989964774f, - -0.8958281347602298f, - -0.8957699551742095f, - -0.895711760239413f, - -0.8956535499568372f, - -0.8955953243274801f, - -0.8955370833523391f, - -0.8954788270324121f, - -0.8954205553686969f, - -0.8953622683621928f, - -0.8953039660138982f, - -0.8952456483248119f, - -0.8951873152959329f, - -0.8951289669282615f, - -0.8950706032227972f, - -0.8950122241805398f, - -0.8949538298024894f, - -0.8948954200896473f, - -0.8948369950430138f, - -0.8947785546635904f, - -0.8947200989523776f, - -0.8946616279103781f, - -0.8946031415385933f, - -0.8945446398380253f, - -0.8944861228096763f, - -0.8944275904545496f, - -0.8943690427736477f, - -0.894310479767974f, - -0.8942519014385313f, - -0.8941933077863243f, - -0.8941346988123562f, - -0.8940760745176323f, - -0.8940174349031557f, - -0.8939587799699322f, - -0.8939001097189662f, - -0.8938414241512641f, - -0.8937827232678298f, - -0.8937240070696705f, - -0.8936652755577914f, - -0.8936065287332f, - -0.8935477665969013f, - -0.8934889891499035f, - -0.8934301963932129f, - -0.8933713883278375f, - -0.8933125649547848f, - -0.8932537262750626f, - -0.8931948722896788f, - -0.8931360029996425f, - -0.893077118405962f, - -0.8930182185096466f, - -0.892959303311705f, - -0.8929003728131468f, - -0.8928414270149823f, - -0.8927824659182211f, - -0.8927234895238736f, - -0.8926644978329498f, - -0.8926054908464615f, - -0.8925464685654191f, - -0.8924874309908343f, - -0.8924283781237179f, - -0.8923693099650828f, - -0.8923102265159407f, - -0.892251127777304f, - -0.8921920137501848f, - -0.8921328844355968f, - -0.8920737398345525f, - -0.8920145799480665f, - -0.8919554047771509f, - -0.8918962143228207f, - -0.8918370085860895f, - -0.8917777875679729f, - -0.891718551269484f, - -0.891659299691639f, - -0.8916000328354525f, - -0.891540750701941f, - -0.8914814532921189f, - -0.8914221406070033f, - -0.8913628126476097f, - -0.8913034694149556f, - -0.8912441109100573f, - -0.891184737133932f, - -0.8911253480875965f, - -0.8910659437720694f, - -0.891006524188368f, - -0.8909470893375105f, - -0.890887639220515f, - -0.8908281738384008f, - -0.8907686931921867f, - -0.8907091972828914f, - -0.8906496861115345f, - -0.8905901596791361f, - -0.8905306179867161f, - -0.8904710610352944f, - -0.8904114888258912f, - -0.8903519013595281f, - -0.8902922986372258f, - -0.8902326806600055f, - -0.8901730474288886f, - -0.8901133989448967f, - -0.8900537352090526f, - -0.8899940562223778f, - -0.889934361985896f, - -0.8898746525006287f, - -0.8898149277676f, - -0.8897551877878324f, - -0.8896954325623508f, - -0.8896356620921777f, - -0.8895758763783381f, - -0.889516075421856f, - -0.8894562592237568f, - -0.8893964277850643f, - -0.8893365811068046f, - -0.8892767191900025f, - -0.8892168420356844f, - -0.889156949644876f, - -0.8890970420186034f, - -0.8890371191578929f, - -0.8889771810637719f, - -0.888917227737267f, - -0.8888572591794056f, - -0.8887972753912149f, - -0.8887372763737232f, - -0.8886772621279585f, - -0.8886172326549491f, - -0.8885571879557229f, - -0.8884971280313099f, - -0.8884370528827381f, - -0.8883769625110383f, - -0.8883168569172384f, - -0.8882567361023697f, - -0.8881966000674616f, - -0.8881364488135448f, - -0.8880762823416495f, - -0.8880161006528074f, - -0.8879559037480493f, - -0.8878956916284068f, - -0.887835464294911f, - -0.8877752217485948f, - -0.88771496399049f, - -0.8876546910216288f, - -0.8875944028430445f, - -0.88753409945577f, - -0.8874737808608385f, - -0.8874134470592832f, - -0.8873530980521389f, - -0.8872927338404383f, - -0.8872323544252168f, - -0.8871719598075081f, - -0.8871115499883484f, - -0.8870511249687711f, - -0.8869906847498129f, - -0.8869302293325085f, - -0.8868697587178948f, - -0.8868092729070072f, - -0.8867487719008823f, - -0.8866882557005564f, - -0.8866277243070673f, - -0.8865671777214515f, - -0.8865066159447467f, - -0.8864460389779901f, - -0.8863854468222205f, - -0.8863248394784754f, - -0.8862642169477944f, - -0.8862035792312147f, - -0.8861429263297764f, - -0.8860822582445181f, - -0.8860215749764806f, - -0.8859608765267019f, - -0.8859001628962233f, - -0.8858394340860843f, - -0.8857786900973269f, - -0.88571793093099f, - -0.8856571565881161f, - -0.8855963670697456f, - -0.8855355623769211f, - -0.8854747425106839f, - -0.8854139074720763f, - -0.8853530572621405f, - -0.885292191881919f, - -0.8852313113324553f, - -0.8851704156147921f, - -0.8851095047299732f, - -0.8850485786790415f, - -0.8849876374630419f, - -0.8849266810830183f, - -0.8848657095400151f, - -0.8848047228350765f, - -0.8847437209692485f, - -0.884682703943576f, - -0.8846216717591041f, - -0.8845606244168787f, - -0.8844995619179462f, - -0.8844384842633527f, - -0.8843773914541447f, - -0.8843162834913687f, - -0.8842551603760724f, - -0.8841940221093029f, - -0.8841328686921077f, - -0.8840717001255342f, - -0.8840105164106313f, - -0.8839493175484467f, - -0.8838881035400302f, - -0.883826874386429f, - -0.8837656300886936f, - -0.8837043706478723f, - -0.8836430960650162f, - -0.8835818063411737f, - -0.8835205014773959f, - -0.8834591814747327f, - -0.8833978463342355f, - -0.8833364960569547f, - -0.8832751306439419f, - -0.8832137500962478f, - -0.8831523544149252f, - -0.8830909436010256f, - -0.8830295176556012f, - -0.8829680765797042f, - -0.8829066203743883f, - -0.8828451490407058f, - -0.8827836625797102f, - -0.8827221609924547f, - -0.8826606442799938f, - -0.8825991124433812f, - -0.8825375654836713f, - -0.8824760034019187f, - -0.8824144261991776f, - -0.8823528338765043f, - -0.8822912264349535f, - -0.8822296038755809f, - -0.8821679661994419f, - -0.8821063134075937f, - -0.882044645501092f, - -0.8819829624809936f, - -0.881921264348355f, - -0.8818595511042343f, - -0.881797822749688f, - -0.881736079285775f, - -0.8816743207135517f, - -0.8816125470340775f, - -0.8815507582484101f, - -0.8814889543576094f, - -0.8814271353627329f, - -0.8813653012648408f, - -0.881303452064992f, - -0.8812415877642477f, - -0.8811797083636658f, - -0.8811178138643081f, - -0.8810559042672343f, - -0.8809939795735061f, - -0.880932039784184f, - -0.8808700849003295f, - -0.8808081149230035f, - -0.8807461298532689f, - -0.8806841296921873f, - -0.8806221144408211f, - -0.8805600841002325f, - -0.880498038671485f, - -0.8804359781556416f, - -0.8803739025537656f, - -0.8803118118669201f, - -0.88024970609617f, - -0.880187585242579f, - -0.8801254493072116f, - -0.8800632982911318f, - -0.8800011321954058f, - -0.879938951021098f, - -0.879876754769274f, - -0.8798145434409991f, - -0.8797523170373401f, - -0.8796900755593628f, - -0.8796278190081334f, - -0.8795655473847197f, - -0.8795032606901872f, - -0.8794409589256044f, - -0.8793786420920379f, - -0.8793163101905567f, - -0.8792539632222273f, - -0.8791916011881191f, - -0.8791292240893f, - -0.8790668319268401f, - -0.8790044247018065f, - -0.8789420024152701f, - -0.8788795650682995f, - -0.8788171126619654f, - -0.8787546451973375f, - -0.8786921626754861f, - -0.8786296650974815f, - -0.8785671524643954f, - -0.8785046247772985f, - -0.8784420820372623f, - -0.8783795242453578f, - -0.8783169514026579f, - -0.8782543635102342f, - -0.8781917605691595f, - -0.8781291425805057f, - -0.8780665095453466f, - -0.8780038614647547f, - -0.8779411983398048f, - -0.8778785201715686f, - -0.8778158269611218f, - -0.8777531187095374f, - -0.8776903954178913f, - -0.8776276570872565f, - -0.8775649037187094f, - -0.8775021353133248f, - -0.877439351872178f, - -0.8773765533963447f, - -0.8773137398869015f, - -0.8772509113449245f, - -0.8771880677714896f, - -0.8771252091676747f, - -0.8770623355345561f, - -0.8769994468732115f, - -0.8769365431847178f, - -0.8768736244701538f, - -0.8768106907305971f, - -0.8767477419671262f, - -0.8766847781808191f, - -0.8766217993727556f, - -0.8765588055440144f, - -0.876495796695675f, - -0.8764327728288164f, - -0.8763697339445193f, - -0.8763066800438638f, - -0.8762436111279299f, - -0.8761805271977982f, - -0.8761174282545502f, - -0.8760543142992667f, - -0.8759911853330293f, - -0.8759280413569192f, - -0.8758648823720191f, - -0.8758017083794104f, - -0.875738519380177f, - -0.8756753153753998f, - -0.875612096366163f, - -0.875548862353549f, - -0.8754856133386427f, - -0.8754223493225262f, - -0.8753590703062846f, - -0.8752957762910013f, - -0.8752324672777623f, - -0.8751691432676506f, - -0.8751058042617524f, - -0.8750424502611522f, - -0.8749790812669366f, - -0.8749156972801907f, - -0.8748522983020008f, - -0.8747888843334526f, - -0.8747254553756337f, - -0.8746620114296304f, - -0.8745985524965298f, - -0.874535078577419f, - -0.8744715896733861f, - -0.874408085785519f, - -0.8743445669149054f, - -0.8742810330626339f, - -0.8742174842297927f, - -0.8741539204174715f, - -0.874090341626759f, - -0.8740267478587448f, - -0.8739631391145178f, - -0.873899515395169f, - -0.8738358767017881f, - -0.8737722230354655f, - -0.8737085543972916f, - -0.8736448707883581f, - -0.8735811722097556f, - -0.8735174586625758f, - -0.87345373014791f, - -0.8733899866668507f, - -0.8733262282204897f, - -0.8732624548099205f, - -0.8731986664362342f, - -0.8731348631005252f, - -0.8730710448038856f, - -0.8730072115474106f, - -0.8729433633321918f, - -0.8728795001593248f, - -0.872815622029903f, - -0.8727517289450217f, - -0.8726878209057755f, - -0.872623897913259f, - -0.8725599599685674f, - -0.8724960070727971f, - -0.8724320392270434f, - -0.8723680564324025f, - -0.8723040586899701f, - -0.8722400460008437f, - -0.8721760183661198f, - -0.8721119757868955f, - -0.8720479182642676f, - -0.8719838457993347f, - -0.8719197583931942f, - -0.8718556560469441f, - -0.8717915387616826f, - -0.8717274065385089f, - -0.8716632593785216f, - -0.8715990972828199f, - -0.8715349202525028f, - -0.8714707282886706f, - -0.8714065213924229f, - -0.87134229956486f, - -0.8712780628070821f, - -0.8712138111201895f, - -0.8711495445052841f, - -0.8710852629634662f, - -0.8710209664958385f, - -0.870956655103501f, - -0.8708923287875568f, - -0.8708279875491076f, - -0.8707636313892569f, - -0.8706992603091058f, - -0.8706348743097585f, - -0.8705704733923174f, - -0.8705060575578872f, - -0.8704416268075702f, - -0.8703771811424714f, - -0.8703127205636944f, - -0.8702482450723443f, - -0.8701837546695258f, - -0.8701192493563437f, - -0.8700547291339029f, - -0.8699901940033098f, - -0.8699256439656698f, - -0.8698610790220889f, - -0.869796499173673f, - -0.8697319044215295f, - -0.8696672947667643f, - -0.8696026702104859f, - -0.8695380307537997f, - -0.8694733763978147f, - -0.8694087071436379f, - -0.8693440229923787f, - -0.8692793239451436f, - -0.8692146100030427f, - -0.8691498811671842f, - -0.8690851374386772f, - -0.8690203788186308f, - -0.8689556053081554f, - -0.8688908169083606f, - -0.8688260136203557f, - -0.8687611954452524f, - -0.8686963623841607f, - -0.8686315144381915f, - -0.8685666516084555f, - -0.8685017738960651f, - -0.8684368813021314f, - -0.8683719738277663f, - -0.8683070514740816f, - -0.8682421142421911f, - -0.8681771621332056f, - -0.8681121951482395f, - -0.868047213288405f, - -0.8679822165548163f, - -0.867917204948587f, - -0.8678521784708308f, - -0.8677871371226615f, - -0.8677220809051945f, - -0.8676570098195442f, - -0.8675919238668254f, - -0.8675268230481529f, - -0.867461707364643f, - -0.8673965768174112f, - -0.8673314314075734f, - -0.8672662711362453f, - -0.8672010960045445f, - -0.8671359060135868f, - -0.8670707011644904f, - -0.867005481458371f, - -0.8669402468963472f, - -0.8668749974795361f, - -0.8668097332090571f, - -0.8667444540860265f, - -0.8666791601115643f, - -0.8666138512867884f, - -0.8665485276128188f, - -0.8664831890907742f, - -0.8664178357217742f, - -0.8663524675069383f, - -0.8662870844473873f, - -0.8662216865442413f, - -0.8661562737986206f, - -0.8660908462116461f, - -0.8660254037844386f, - -0.8659599465181201f, - -0.8658944744138121f, - -0.8658289874726359f, - -0.8657634856957137f, - -0.8656979690841684f, - -0.8656324376391223f, - -0.8655668913616983f, - -0.865501330253019f, - -0.8654357543142086f, - -0.8653701635463904f, - -0.8653045579506883f, - -0.8652389375282258f, - -0.8651733022801283f, - -0.8651076522075202f, - -0.865041987311526f, - -0.8649763075932707f, - -0.8649106130538805f, - -0.8648449036944801f, - -0.8647791795161969f, - -0.8647134405201551f, - -0.8646476867074826f, - -0.8645819180793052f, - -0.864516134636751f, - -0.8644503363809456f, - -0.8643845233130175f, - -0.8643186954340938f, - -0.8642528527453037f, - -0.8641869952477734f, - -0.864121122942633f, - -0.8640552358310102f, - -0.8639893339140347f, - -0.8639234171928354f, - -0.8638574856685418f, - -0.863791539342283f, - -0.8637255782151901f, - -0.8636596022883928f, - -0.8635936115630214f, - -0.8635276060402064f, - -0.8634615857210796f, - -0.8633955506067718f, - -0.8633295006984145f, - -0.863263435997139f, - -0.8631973565040781f, - -0.8631312622203638f, - -0.8630651531471286f, - -0.862999029285505f, - -0.8629328906366258f, - -0.8628667372016251f, - -0.862800568981636f, - -0.8627343859777922f, - -0.8626681881912274f, - -0.8626019756230766f, - -0.8625357482744735f, - -0.8624695061465544f, - -0.8624032492404524f, - -0.8623369775573041f, - -0.8622706910982443f, - -0.8622043898644101f, - -0.8621380738569355f, - -0.8620717430769586f, - -0.8620053975256147f, - -0.8619390372040421f, - -0.8618726621133761f, - -0.8618062722547553f, - -0.8617398676293164f, - -0.8616734482381981f, - -0.8616070140825381f, - -0.8615405651634747f, - -0.861474101482146f, - -0.8614076230396918f, - -0.8613411298372506f, - -0.8612746218759619f, - -0.8612080991569648f, - -0.8611415616814f, - -0.8610750094504073f, - -0.8610084424651268f, - -0.8609418607266989f, - -0.8608752642362651f, - -0.8608086529949663f, - -0.8607420270039439f, - -0.8606753862643389f, - -0.860608730777294f, - -0.8605420605439512f, - -0.8604753755654526f, - -0.8604086758429405f, - -0.8603419613775585f, - -0.8602752321704495f, - -0.8602084882227569f, - -0.8601417295356236f, - -0.8600749561101948f, - -0.8600081679476139f, - -0.859941365049025f, - -0.8598745474155735f, - -0.8598077150484039f, - -0.8597408679486614f, - -0.859674006117491f, - -0.8596071295560397f, - -0.8595402382654515f, - -0.8594733322468739f, - -0.8594064115014526f, - -0.859339476030335f, - -0.8592725258346677f, - -0.8592055609155979f, - -0.8591385812742723f, - -0.8590715869118398f, - -0.8590045778294477f, - -0.8589375540282442f, - -0.8588705155093773f, - -0.8588034622739967f, - -0.8587363943232508f, - -0.8586693116582886f, - -0.8586022142802594f, - -0.8585351021903137f, - -0.8584679753896005f, - -0.8584008338792714f, - -0.858333677660475f, - -0.8582665067343632f, - -0.8581993211020864f, - -0.858132120764797f, - -0.8580649057236446f, - -0.8579976759797823f, - -0.8579304315343611f, - -0.8578631723885347f, - -0.8577958985434537f, - -0.8577286100002722f, - -0.8576613067601422f, - -0.8575939888242179f, - -0.8575266561936523f, - -0.8574593088695991f, - -0.8573919468532123f, - -0.8573245701456457f, - -0.8572571787480545f, - -0.8571897726615934f, - -0.8571223518874169f, - -0.8570549164266801f, - -0.8569874662805393f, - -0.8569200014501498f, - -0.8568525219366676f, - -0.8567850277412484f, - -0.8567175188650498f, - -0.8566499953092278f, - -0.8565824570749396f, - -0.8565149041633421f, - -0.8564473365755935f, - -0.8563797543128511f, - -0.856312157376273f, - -0.856244545767017f, - -0.8561769194862424f, - -0.8561092785351078f, - -0.8560416229147718f, - -0.8559739526263934f, - -0.8559062676711331f, - -0.8558385680501497f, - -0.8557708537646046f, - -0.8557031248156561f, - -0.8556353812044662f, - -0.8555676229321948f, - -0.8554998500000043f, - -0.8554320624090539f, - -0.8553642601605068f, - -0.8552964432555237f, - -0.8552286116952675f, - -0.8551607654809003f, - -0.8550929046135842f, - -0.8550250290944817f, - -0.854957138924757f, - -0.8548892341055726f, - -0.8548213146380921f, - -0.8547533805234788f, - -0.8546854317628979f, - -0.8546174683575128f, - -0.8545494903084885f, - -0.8544814976169889f, - -0.8544134902841802f, - -0.8543454683112273f, - -0.8542774316992954f, - -0.8542093804495506f, - -0.8541413145631583f, - -0.854073234041286f, - -0.8540051388850994f, - -0.8539370290957655f, - -0.8538689046744509f, - -0.8538007656223237f, - -0.8537326119405511f, - -0.8536644436303007f, - -0.8535962606927403f, - -0.8535280631290391f, - -0.8534598509403646f, - -0.8533916241278872f, - -0.8533233826927737f, - -0.8532551266361953f, - -0.8531868559593202f, - -0.8531185706633198f, - -0.8530502707493621f, - -0.8529819562186192f, - -0.8529136270722603f, - -0.8528452833114577f, - -0.8527769249373807f, - -0.852708551951202f, - -0.8526401643540921f, - -0.8525717621472239f, - -0.8525033453317687f, - -0.8524349139088991f, - -0.8523664678797871f, - -0.8522980072456064f, - -0.8522295320075296f, - -0.85216104216673f, - -0.8520925377243808f, - -0.8520240186816564f, - -0.8519554850397308f, - -0.8518869367997781f, - -0.8518183739629724f, - -0.8517497965304895f, - -0.8516812045035039f, - -0.851612597883191f, - -0.8515439766707258f, - -0.8514753408672852f, - -0.8514066904740445f, - -0.8513380254921802f, - -0.8512693459228684f, - -0.8512006517672869f, - -0.851131943026612f, - -0.8510632197020208f, - -0.8509944817946923f, - -0.8509257293058022f, - -0.8508569622365302f, - -0.8507881805880535f, - -0.850719384361552f, - -0.850650573558203f, - -0.8505817481791864f, - -0.850512908225681f, - -0.8504440536988677f, - -0.8503751845999243f, - -0.8503063009300323f, - -0.8502374026903712f, - -0.8501684898821222f, - -0.8500995625064659f, - -0.8500306205645833f, - -0.8499616640576552f, - -0.849892692986864f, - -0.8498237073533911f, - -0.8497547071584186f, - -0.8496856924031283f, - -0.8496166630887038f, - -0.8495476192163272f, - -0.8494785607871815f, - -0.8494094878024498f, - -0.8493404002633166f, - -0.8492712981709646f, - -0.8492021815265792f, - -0.849133050331343f, - -0.8490639045864418f, - -0.8489947442930594f, - -0.8489255694523825f, - -0.8488563800655944f, - -0.8487871761338819f, - -0.8487179576584305f, - -0.8486487246404262f, - -0.8485794770810549f, - -0.8485102149815038f, - -0.8484409383429595f, - -0.8483716471666084f, - -0.8483023414536389f, - -0.8482330212052379f, - -0.8481636864225932f, - -0.8480943371068925f, - -0.8480249732593249f, - -0.8479555948810784f, - -0.847886201973342f, - -0.8478167945373041f, - -0.8477473725741548f, - -0.8476779360850835f, - -0.8476084850712796f, - -0.8475390195339328f, - -0.8474695394742345f, - -0.8474000448933746f, - -0.8473305357925438f, - -0.8472610121729327f, - -0.8471914740357336f, - -0.8471219213821374f, - -0.8470523542133359f, - -0.8469827725305208f, - -0.846913176334885f, - -0.8468435656276204f, - -0.846773940409921f, - -0.846704300682978f, - -0.846634646447986f, - -0.8465649777061376f, - -0.8464952944586279f, - -0.8464255967066491f, - -0.8463558844513969f, - -0.8462861576940647f, - -0.8462164164358489f, - -0.8461466606779423f, - -0.8460768904215419f, - -0.846007105667842f, - -0.8459373064180394f, - -0.8458674926733296f, - -0.8457976644349088f, - -0.8457278217039731f, - -0.8456579644817201f, - -0.8455880927693463f, - -0.8455182065680491f, - -0.8454483058790258f, - -0.8453783907034736f, - -0.8453084610425916f, - -0.8452385168975776f, - -0.8451685582696299f, - -0.8450985851599467f, - -0.8450285975697281f, - -0.8449585955001729f, - -0.8448885789524804f, - -0.8448185479278497f, - -0.8447485024274821f, - -0.8446784424525771f, - -0.844608368004335f, - -0.8445382790839564f, - -0.844468175692643f, - -0.844398057831595f, - -0.8443279255020155f, - -0.844257778705104f, - -0.8441876174420642f, - -0.844117441714097f, - -0.8440472515224064f, - -0.8439770468681934f, - -0.843906827752662f, - -0.8438365941770147f, - -0.8437663461424564f, - -0.8436960836501887f, - -0.843625806701417f, - -0.8435555152973444f, - -0.8434852094391766f, - -0.8434148891281176f, - -0.8433445543653723f, - -0.8432742051521454f, - -0.8432038414896432f, - -0.8431334633790711f, - -0.8430630708216349f, - -0.8429926638185402f, - -0.8429222423709944f, - -0.8428518064802039f, - -0.8427813561473751f, - -0.8427108913737152f, - -0.8426404121604323f, - -0.8425699185087335f, - -0.8424994104198268f, - -0.8424288878949199f, - -0.842358350935222f, - -0.8422877995419413f, - -0.8422172337162869f, - -0.842146653459467f, - -0.8420760587726923f, - -0.842005449657172f, - -0.8419348261141155f, - -0.8418641881447334f, - -0.8417935357502354f, - -0.841722868931833f, - -0.8416521876907361f, - -0.8415814920281575f, - -0.8415107819453063f, - -0.8414400574433957f, - -0.8413693185236365f, - -0.8412985651872423f, - -0.8412277974354235f, - -0.8411570152693942f, - -0.8410862186903663f, - -0.8410154076995536f, - -0.8409445822981693f, - -0.8408737424874265f, - -0.840802888268539f, - -0.8407320196427216f, - -0.8406611366111881f, - -0.8405902391751532f, - -0.8405193273358312f, - -0.8404484010944381f, - -0.8403774604521886f, - -0.8403065054102984f, - -0.8402355359699828f, - -0.8401645521324588f, - -0.8400935538989416f, - -0.8400225412706493f, - -0.8399515142487968f, - -0.8398804728346024f, - -0.8398094170292831f, - -0.8397383468340563f, - -0.8396672622501393f, - -0.8395961632787511f, - -0.8395250499211094f, - -0.8394539221784328f, - -0.8393827800519397f, - -0.8393116235428497f, - -0.8392404526523819f, - -0.8391692673817552f, - -0.8390980677321903f, - -0.8390268537049066f, - -0.8389556253011246f, - -0.838884382522064f, - -0.8388131253689466f, - -0.838741853842993f, - -0.8386705679454243f, - -0.8385992676774615f, - -0.8385279530403278f, - -0.8384566240352432f, - -0.8383852806634313f, - -0.8383139229261136f, - -0.8382425508245139f, - -0.8381711643598545f, - -0.8380997635333587f, - -0.8380283483462493f, - -0.8379569187997511f, - -0.8378854748950875f, - -0.8378140166334825f, - -0.8377425440161603f, - -0.8376710570443464f, - -0.8375995557192653f, - -0.8375280400421421f, - -0.8374565100142016f, - -0.8373849656366706f, - -0.8373134069107739f, - -0.8372418338377393f, - -0.837170246418791f, - -0.8370986446551573f, - -0.8370270285480638f, - -0.8369553980987394f, - -0.8368837533084094f, - -0.8368120941783027f, - -0.8367404207096465f, - -0.8366687329036697f, - -0.8365970307616002f, - -0.8365253142846666f, - -0.8364535834740973f, - -0.8363818383311222f, - -0.8363100788569704f, - -0.8362383050528712f, - -0.8361665169200546f, - -0.8360947144597501f, - -0.8360228976731892f, - -0.8359510665616017f, - -0.8358792211262185f, - -0.8358073613682702f, - -0.835735487288989f, - -0.8356635988896062f, - -0.8355916961713532f, - -0.8355197791354618f, - -0.8354478477831653f, - -0.8353759021156955f, - -0.8353039421342853f, - -0.8352319678401673f, - -0.8351599792345756f, - -0.8350879763187433f, - -0.8350159590939042f, - -0.8349439275612918f, - -0.8348718817221411f, - -0.8347998215776858f, - -0.8347277471291621f, - -0.834655658377803f, - -0.8345835553248452f, - -0.834511437971523f, - -0.8344393063190739f, - -0.8343671603687317f, - -0.8342950001217341f, - -0.8342228255793166f, - -0.8341506367427173f, - -0.8340784336131712f, - -0.8340062161919171f, - -0.8339339844801912f, - -0.8338617384792323f, - -0.8337894781902777f, - -0.8337172036145657f, - -0.8336449147533342f, - -0.8335726116078228f, - -0.8335002941792699f, - -0.8334279624689146f, - -0.8333556164779958f, - -0.8332832562077542f, - -0.8332108816594291f, - -0.8331384928342608f, - -0.8330660897334888f, - -0.832993672358355f, - -0.8329212407100997f, - -0.8328487947899639f, - -0.832776334599189f, - -0.8327038601390161f, - -0.832631371410688f, - -0.8325588684154464f, - -0.8324863511545334f, - -0.8324138196291913f, - -0.8323412738406636f, - -0.8322687137901926f, - -0.8321961394790232f, - -0.8321235509083966f, - -0.8320509480795584f, - -0.8319783309937513f, - -0.8319056996522214f, - -0.8318330540562111f, - -0.8317603942069666f, - -0.831687720105732f, - -0.831615031753754f, - -0.8315423291522761f, - -0.8314696123025455f, - -0.8313968812058072f, - -0.8313241358633086f, - -0.8312513762762953f, - -0.8311786024460144f, - -0.8311058143737121f, - -0.8310330120606368f, - -0.8309601955080353f, - -0.8308873647171554f, - -0.8308145196892445f, - -0.8307416604255516f, - -0.8306687869273249f, - -0.8305958991958129f, - -0.8305229972322641f, - -0.8304500810379286f, - -0.8303771506140554f, - -0.8303042059618939f, - -0.8302312470826938f, - -0.830158273977706f, - -0.8300852866481805f, - -0.8300122850953678f, - -0.8299392693205183f, - -0.8298662393248842f, - -0.8297931951097164f, - -0.8297201366762662f, - -0.8296470640257853f, - -0.8295739771595264f, - -0.8295008760787416f, - -0.8294277607846829f, - -0.8293546312786045f, - -0.8292814875617577f, - -0.8292083296353971f, - -0.8291351575007753f, - -0.8290619711591476f, - -0.8289887706117659f, - -0.8289155558598862f, - -0.8288423269047618f, - -0.8287690837476486f, - -0.8286958263898011f, - -0.8286225548324744f, - -0.8285492690769236f, - -0.8284759691244055f, - -0.8284026549761754f, - -0.8283293266334896f, - -0.8282559840976041f, - -0.8281826273697765f, - -0.8281092564512634f, - -0.828035871343322f, - -0.8279624720472091f, - -0.8278890585641834f, - -0.8278156308955018f, - -0.827742189042424f, - -0.8276687330062065f, - -0.8275952627881094f, - -0.8275217783893903f, - -0.8274482798113104f, - -0.8273747670551266f, - -0.8273012401221003f, - -0.8272276990134901f, - -0.8271541437305578f, - -0.8270805742745618f, - -0.8270069906467641f, - -0.826933392848425f, - -0.8268597808808051f, - -0.8267861547451668f, - -0.826712514442771f, - -0.8266388599748797f, - -0.8265651913427544f, - -0.8264915085476583f, - -0.8264178115908535f, - -0.8263441004736027f, - -0.8262703751971686f, - -0.8261966357628152f, - -0.8261228821718059f, - -0.826049114425404f, - -0.8259753325248732f, - -0.8259015364714787f, - -0.8258277262664846f, - -0.8257539019111554f, - -0.8256800634067557f, - -0.8256062107545518f, - -0.8255323439558084f, - -0.8254584630117914f, - -0.8253845679237661f, - -0.8253106586929997f, - -0.8252367353207577f, - -0.8251627978083081f, - -0.8250888461569159f, - -0.8250148803678498f, - -0.824940900442376f, - -0.8248669063817639f, - -0.8247928981872791f, - -0.8247188758601913f, - -0.8246448394017679f, - -0.8245707888132789f, - -0.8244967240959913f, - -0.8244226452511756f, - -0.8243485522801f, - -0.8242744451840351f, - -0.8242003239642505f, - -0.8241261886220158f, - -0.8240520391586011f, - -0.8239778755752779f, - -0.8239036978733163f, - -0.8238295060539875f, - -0.8237553001185621f, - -0.8236810800683128f, - -0.8236068459045106f, - -0.8235325976284277f, - -0.8234583352413362f, - -0.823384058744508f, - -0.823309768139217f, - -0.8232354634267355f, - -0.8231611446083368f, - -0.8230868116852936f, - -0.823012464658881f, - -0.822938103530372f, - -0.8228637283010409f, - -0.8227893389721618f, - -0.82271493554501f, - -0.8226405180208601f, - -0.8225660864009872f, - -0.822491640686666f, - -0.8224171808791734f, - -0.8223427069797841f, - -0.8222682189897755f, - -0.8221937169104223f, - -0.8221192007430023f, - -0.8220446704887914f, - -0.8219701261490682f, - -0.8218955677251079f, - -0.8218209952181896f, - -0.8217464086295901f, - -0.8216718079605889f, - -0.8215971932124622f, - -0.8215225643864901f, - -0.8214479214839503f, - -0.8213732645061228f, - -0.8212985934542862f, - -0.8212239083297203f, - -0.8211492091337039f, - -0.8210744958675182f, - -0.8209997685324429f, - -0.8209250271297583f, - -0.8208502716607446f, - -0.8207755021266839f, - -0.8207007185288566f, - -0.8206259208685444f, - -0.820551109147028f, - -0.8204762833655906f, - -0.8204014435255138f, - -0.8203265896280798f, - -0.8202517216745709f, - -0.8201768396662709f, - -0.8201019436044622f, - -0.8200270334904284f, - -0.8199521093254523f, - -0.8198771711108188f, - -0.8198022188478116f, - -0.8197272525377143f, - -0.819652272181813f, - -0.8195772777813904f, - -0.8195022693377331f, - -0.8194272468521253f, - -0.819352210325854f, - -0.819277159760203f, - -0.8192020951564597f, - -0.8191270165159092f, - -0.8190519238398396f, - -0.8189768171295356f, - -0.8189016963862856f, - -0.8188265616113758f, - -0.8187514128060945f, - -0.818676249971729f, - -0.8186010731095672f, - -0.8185258822208965f, - -0.8184506773070066f, - -0.8183754583691853f, - -0.8183002254087217f, - -0.8182249784269043f, - -0.8181497174250235f, - -0.8180744424043683f, - -0.8179991533662285f, - -0.8179238503118937f, - -0.8178485332426553f, - -0.8177732021598025f, - -0.817697857064628f, - -0.8176224979584206f, - -0.817547124842473f, - -0.8174717377180759f, - -0.8173963365865224f, - -0.8173209214491025f, - -0.81724549230711f, - -0.8171700491618367f, - -0.8170945920145748f, - -0.8170191208666184f, - -0.8169436357192601f, - -0.8168681365737932f, - -0.816792623431511f, - -0.8167170962937085f, - -0.816641555161679f, - -0.8165660000367172f, - -0.8164904309201171f, - -0.8164148478131745f, - -0.8163392507171842f, - -0.8162636396334412f, - -0.8161880145632407f, - -0.8161123755078797f, - -0.8160367224686537f, - -0.8159610554468588f, - -0.8158853744437913f, - -0.8158096794607487f, - -0.8157339704990276f, - -0.8156582475599253f, - -0.815582510644739f, - -0.8155067597547669f, - -0.8154309948913071f, - -0.8153552160556573f, - -0.8152794232491157f, - -0.815203616472982f, - -0.815127795728554f, - -0.8150519610171324f, - -0.8149761123400148f, - -0.814900249698502f, - -0.8148243730938931f, - -0.8147484825274899f, - -0.8146725780005903f, - -0.8145966595144969f, - -0.8145207270705092f, - -0.8144447806699299f, - -0.8143688203140583f, - -0.8142928460041975f, - -0.8142168577416482f, - -0.8141408555277136f, - -0.8140648393636954f, - -0.8139888092508961f, - -0.813912765190618f, - -0.8138367071841649f, - -0.8137606352328398f, - -0.813684549337946f, - -0.8136084495007874f, - -0.8135323357226673f, - -0.8134562080048907f, - -0.8133800663487619f, - -0.8133039107555855f, - -0.8132277412266656f, - -0.8131515577633087f, - -0.8130753603668196f, - -0.8129991490385038f, - -0.8129229237796666f, - -0.8128466845916154f, - -0.8127704314756558f, - -0.8126941644330944f, - -0.8126178834652374f, - -0.8125415885733933f, - -0.812465279758868f, - -0.8123889570229705f, - -0.8123126203670068f, - -0.8122362697922864f, - -0.8121599053001163f, - -0.8120835268918067f, - -0.8120071345686642f, - -0.8119307283319994f, - -0.8118543081831203f, - -0.8117778741233381f, - -0.8117014261539603f, - -0.8116249642762984f, - -0.8115484884916614f, - -0.8114719988013609f, - -0.8113954952067068f, - -0.8113189777090103f, - -0.8112424463095815f, - -0.8111659010097333f, - -0.8110893418107765f, - -0.811012768714023f, - -0.8109361817207841f, - -0.8108595808323735f, - -0.8107829660501029f, - -0.8107063373752854f, - -0.8106296948092332f, - -0.8105530383532608f, - -0.8104763680086808f, - -0.8103996837768075f, - -0.8103229856589539f, - -0.8102462736564354f, - -0.8101695477705659f, - -0.81009280800266f, - -0.8100160543540328f, - -0.8099392868259988f, - -0.8098625054198745f, - -0.8097857101369749f, - -0.8097089009786158f, - -0.8096320779461131f, - -0.8095552410407839f, - -0.809478390263944f, - -0.8094015256169114f, - -0.8093246471010014f, - -0.8092477547175327f, - -0.8091708484678218f, - -0.8090939283531882f, - -0.8090169943749476f, - -0.8089400465344199f, - -0.8088630848329225f, - -0.8087861092717751f, - -0.8087091198522963f, - -0.8086321165758052f, - -0.8085550994436208f, - -0.8084780684570637f, - -0.8084010236174533f, - -0.8083239649261097f, - -0.8082468923843529f, - -0.8081698059935044f, - -0.8080927057548847f, - -0.8080155916698147f, - -0.8079384637396154f, - -0.8078613219656093f, - -0.8077841663491172f, - -0.8077069968914626f, - -0.8076298135939659f, - -0.807552616457951f, - -0.8074754054847402f, - -0.8073981806756564f, - -0.8073209420320224f, - -0.8072436895551627f, - -0.8071664232464005f, - -0.8070891431070597f, - -0.8070118491384639f, - -0.8069345413419386f, - -0.8068572197188081f, - -0.8067798842703965f, - -0.80670253499803f, - -0.8066251719030336f, - -0.8065477949867328f, - -0.8064704042504528f, - -0.8063929996955214f, - -0.8063155813232628f, - -0.806238149135005f, - -0.8061607031320739f, - -0.806083243315798f, - -0.8060057696875023f, - -0.8059282822485161f, - -0.805850781000166f, - -0.805773265943781f, - -0.8056957370806888f, - -0.8056181944122177f, - -0.8055406379396961f, - -0.8054630676644537f, - -0.8053854835878194f, - -0.8053078857111223f, - -0.8052302740356916f, - -0.8051526485628583f, - -0.8050750092939514f, - -0.8049973562303027f, - -0.8049196893732407f, - -0.8048420087240978f, - -0.804764314284204f, - -0.8046866060548922f, - -0.8046088840374918f, - -0.8045311482333359f, - -0.8044533986437558f, - -0.8043756352700849f, - -0.8042978581136538f, - -0.8042200671757967f, - -0.8041422624578457f, - -0.8040644439611346f, - -0.8039866116869965f, - -0.803908765636765f, - -0.8038309058117741f, - -0.8037530322133573f, - -0.8036751448428497f, - -0.8035972437015859f, - -0.8035193287909003f, - -0.8034414001121275f, - -0.803363457666604f, - -0.8032855014556647f, - -0.8032075314806453f, - -0.8031295477428813f, - -0.80305155024371f, - -0.8029735389844673f, - -0.8028955139664901f, - -0.8028174751911145f, - -0.8027394226596789f, - -0.8026613563735202f, - -0.8025832763339761f, - -0.8025051825423837f, - -0.8024270750000824f, - -0.80234895370841f, - -0.802270818668705f, - -0.8021926698823056f, - -0.8021145073505522f, - -0.8020363310747829f, - -0.8019581410563388f, - -0.8018799372965575f, - -0.8018017197967806f, - -0.8017234885583474f, - -0.8016452435825999f, - -0.8015669848708766f, - -0.8014887124245201f, - -0.8014104262448706f, - -0.8013321263332709f, - -0.8012538126910608f, - -0.8011754853195835f, - -0.8010971442201802f, - -0.8010187893941942f, - -0.8009404208429677f, - -0.8008620385678435f, - -0.8007836425701641f, - -0.8007052328512739f, - -0.8006268094125158f, - -0.8005483722552337f, - -0.8004699213807709f, - -0.8003914567904727f, - -0.8003129784856833f, - -0.8002344864677471f, - -0.8001559807380088f, - -0.8000774612978143f, - -0.7999989281485087f, - -0.7999203812914376f, - -0.7998418207279469f, - -0.7997632464593821f, - -0.7996846584870907f, - -0.7996060568124187f, - -0.7995274414367131f, - -0.79944881236132f, - -0.7993701695875882f, - -0.7992915131168639f, - -0.7992128429504965f, - -0.799134159089832f, - -0.79905546153622f, - -0.798976750291008f, - -0.7988980253555463f, - -0.7988192867311819f, - -0.7987405344192651f, - -0.7986617684211447f, - -0.7985829887381716f, - -0.7985041953716937f, - -0.7984253883230626f, - -0.7983465675936278f, - -0.7982677331847406f, - -0.7981888850977517f, - -0.7981100233340117f, - -0.7980311478948716f, - -0.7979522587816839f, - -0.7978733559957998f, - -0.7977944395385713f, - -0.79771550941135f, - -0.7976365656154897f, - -0.7975576081523422f, - -0.7974786370232606f, - -0.7973996522295974f, - -0.7973206537727072f, - -0.797241641653943f, - -0.7971626158746585f, - -0.7970835764362076f, - -0.7970045233399454f, - -0.796925456587226f, - -0.7968463761794043f, - -0.7967672821178347f, - -0.7966881744038734f, - -0.7966090530388754f, - -0.7965299180241961f, - -0.7964507693611924f, - -0.7963716070512198f, - -0.796292431095635f, - -0.7962132414957939f, - -0.7961340382530551f, - -0.7960548213687736f, - -0.7959755908443082f, - -0.7958963466810157f, - -0.7958170888802554f, - -0.7957378174433831f, - -0.795658532371759f, - -0.7955792336667402f, - -0.7954999213296867f, - -0.7954205953619571f, - -0.7953412557649103f, - -0.7952619025399056f, - -0.7951825356883034f, - -0.7951031552114635f, - -0.7950237611107457f, - -0.79494435338751f, - -0.7948649320431181f, - -0.7947854970789304f, - -0.7947060484963079f, - -0.7946265862966113f, - -0.7945471104812035f, - -0.7944676210514451f, - -0.7943881180086997f, - -0.7943086013543273f, - -0.7942290710896923f, - -0.7941495272161562f, - -0.7940699697350835f, - -0.7939903986478354f, - -0.7939108139557768f, - -0.7938312156602703f, - -0.7937516037626815f, - -0.7936719782643723f, - -0.7935923391667088f, - -0.793512686471055f, - -0.793433020178775f, - -0.7933533402912352f, - -0.7932736468098002f, - -0.7931939397358356f, - -0.7931142190707066f, - -0.7930344848157802f, - -0.7929547369724222f, - -0.792874975541999f, - -0.7927952005258768f, - -0.7927154119254236f, - -0.7926356097420059f, - -0.7925557939769912f, - -0.7924759646317465f, - -0.7923961217076408f, - -0.7923162652060416f, - -0.7922363951283173f, - -0.7921565114758359f, - -0.7920766142499671f, - -0.7919967034520796f, - -0.7919167790835425f, - -0.7918368411457248f, - -0.7917568896399974f, - -0.791676924567729f, - -0.7915969459302914f, - -0.791516953729053f, - -0.7914369479653859f, - -0.79135692864066f, - -0.7912768957562479f, - -0.7911968493135191f, - -0.7911167893138464f, - -0.7910367157586008f, - -0.7909566286491558f, - -0.7908765279868816f, - -0.7907964137731522f, - -0.7907162860093395f, - -0.7906361446968173f, - -0.7905559898369585f, - -0.7904758214311363f, - -0.7903956394807239f, - -0.7903154439870963f, - -0.7902352349516271f, - -0.7901550123756906f, - -0.7900747762606609f, - -0.7899945266079139f, - -0.7899142634188242f, - -0.7898339866947669f, - -0.7897536964371177f, - -0.7896733926472517f, - -0.7895930753265459f, - -0.7895127444763762f, - -0.7894324000981189f, - -0.78935204219315f, - -0.7892716707628479f, - -0.7891912858085888f, - -0.7891108873317503f, - -0.7890304753337093f, - -0.7889500498158448f, - -0.7888696107795344f, - -0.7887891582261564f, - -0.7887086921570886f, - -0.7886282125737111f, - -0.7885477194774017f, - -0.7884672128695411f, - -0.7883866927515069f, - -0.7883061591246802f, - -0.7882256119904398f, - -0.7881450513501677f, - -0.788064477205242f, - -0.7879838895570448f, - -0.787903288406956f, - -0.7878226737563578f, - -0.787742045606631f, - -0.787661403959157f, - -0.7875807488153171f, - -0.7875000801764944f, - -0.7874193980440706f, - -0.787338702419428f, - -0.7872579933039491f, - -0.7871772706990176f, - -0.7870965346060163f, - -0.7870157850263284f, - -0.7869350219613372f, - -0.7868542454124275f, - -0.7867734553809829f, - -0.7866926518683878f, - -0.7866118348760259f, - -0.7865310044052835f, - -0.7864501604575446f, - -0.7863693030341947f, - -0.7862884321366188f, - -0.7862075477662036f, - -0.7861266499243345f, - -0.7860457386123975f, - -0.7859648138317792f, - -0.7858838755838655f, - -0.7858029238700446f, - -0.7857219586917022f, - -0.7856409800502275f, - -0.7855599879470058f, - -0.7854789823834264f, - -0.7853979633608763f, - -0.7853169308807455f, - -0.78523588494442f, - -0.7851548255532904f, - -0.7850737527087444f, - -0.7849926664121728f, - -0.7849115666649629f, - -0.7848304534685059f, - -0.7847493268241905f, - -0.784668186733408f, - -0.7845870331975481f, - -0.7845058662180013f, - -0.784424685796158f, - -0.7843434919334101f, - -0.7842622846311483f, - -0.7841810638907643f, - -0.784099829713649f, - -0.7840185821011955f, - -0.7839373210547947f, - -0.783856046575841f, - -0.7837747586657245f, - -0.7836934573258398f, - -0.783612142557579f, - -0.7835308143623368f, - -0.7834494727415048f, - -0.7833681176964783f, - -0.7832867492286506f, - -0.7832053673394161f, - -0.7831239720301688f, - -0.7830425633023043f, - -0.7829611411572169f, - -0.7828797055963015f, - -0.7827982566209543f, - -0.7827167942325705f, - -0.7826353184325457f, - -0.7825538292222759f, - -0.782472326603158f, - -0.7823908105765883f, - -0.7823092811439634f, - -0.7822277383066797f, - -0.7821461820661362f, - -0.782064612423728f, - -0.7819830293808546f, - -0.7819014329389127f, - -0.7818198230993014f, - -0.7817381998634189f, - -0.7816565632326633f, - -0.7815749132084332f, - -0.7814932497921286f, - -0.7814115729851484f, - -0.7813298827888919f, - -0.7812481792047585f, - -0.7811664622341491f, - -0.7810847318784635f, - -0.781002988139102f, - -0.7809212310174647f, - -0.7808394605149536f, - -0.7807576766329688f, - -0.7806758793729132f, - -0.7805940687361863f, - -0.7805122447241913f, - -0.7804304073383295f, - -0.7803485565800045f, - -0.7802666924506168f, - -0.7801848149515705f, - -0.7801029240842677f, - -0.7800210198501133f, - -0.7799391022505082f, - -0.7798571712868578f, - -0.779775226960565f, - -0.779693269273035f, - -0.7796112982256713f, - -0.7795293138198787f, - -0.7794473160570619f, - -0.7793653049386253f, - -0.7792832804659754f, - -0.7792012426405169f, - -0.7791191914636557f, - -0.7790371269367972f, - -0.7789550490613484f, - -0.7788729578387152f, - -0.7787908532703045f, - -0.7787087353575223f, - -0.7786266041017768f, - -0.7785444595044748f, - -0.7784623015670239f, - -0.7783801302908311f, - -0.7782979456773057f, - -0.7782157477278552f, - -0.7781335364438882f, - -0.7780513118268126f, - -0.7779690738780386f, - -0.7778868225989741f, - -0.7778045579910302f, - -0.7777222800556143f, - -0.7776399887941376f, - -0.7775576842080094f, - -0.7774753662986414f, - -0.777393035067442f, - -0.7773106905158234f, - -0.7772283326451955f, - -0.7771459614569713f, - -0.77706357695256f, - -0.7769811791333747f, - -0.7768987680008262f, - -0.7768163435563279f, - -0.7767339058012913f, - -0.776651454737129f, - -0.7765689903652535f, - -0.7764865126870786f, - -0.776404021704017f, - -0.7763215174174823f, - -0.7762389998288877f, - -0.776156468939648f, - -0.7760739247511769f, - -0.7759913672648887f, - -0.7759087964821976f, - -0.7758262124045193f, - -0.7757436150332686f, - -0.7756610043698606f, - -0.7755783804157103f, - -0.7754957431722345f, - -0.7754130926408487f, - -0.775330428822969f, - -0.7752477517200119f, - -0.7751650613333934f, - -0.7750823576645316f, - -0.7749996407148424f, - -0.774916910485745f, - -0.7748341669786544f, - -0.7747514101949903f, - -0.7746686401361694f, - -0.7745858568036119f, - -0.7745030601987339f, - -0.7744202503229558f, - -0.7743374271776953f, - -0.7742545907643733f, - -0.7741717410844069f, - -0.7740888781392175f, - -0.7740060019302237f, - -0.7739231124588467f, - -0.7738402097265064f, - -0.773757293734623f, - -0.7736743644846169f, - -0.7735914219779102f, - -0.7735084662159234f, - -0.773425497200078f, - -0.7733425149317952f, - -0.7732595194124977f, - -0.7731765106436075f, - -0.7730934886265465f, - -0.7730104533627369f, - -0.7729274048536026f, - -0.7728443431005654f, - -0.7727612681050504f, - -0.7726781798684786f, - -0.7725950783922756f, - -0.7725119636778647f, - -0.7724288357266699f, - -0.7723456945401151f, - -0.7722625401196261f, - -0.7721793724666272f, - -0.7720961915825433f, - -0.7720129974687991f, - -0.7719297901268214f, - -0.7718465695580352f, - -0.7717633357638661f, - -0.7716800887457412f, - -0.7715968285050866f, - -0.7715135550433287f, - -0.771430268361894f, - -0.7713469684622111f, - -0.7712636553457052f, - -0.7711803290138054f, - -0.7710969894679385f, - -0.7710136367095342f, - -0.7709302707400183f, - -0.7708468915608211f, - -0.7707634991733701f, - -0.7706800935790954f, - -0.7705966747794254f, - -0.7705132427757896f, - -0.7704297975696169f, - -0.7703463391623385f, - -0.7702628675553836f, - -0.7701793827501826f, - -0.7700958847481654f, - -0.7700123735507637f, - -0.7699288491594075f, - -0.7698453115755297f, - -0.7697617608005592f, - -0.7696781968359295f, - -0.7695946196830713f, - -0.7695110293434184f, - -0.7694274258184007f, - -0.7693438091094524f, - -0.7692601792180054f, - -0.7691765361454941f, - -0.7690928798933495f, - -0.7690092104630067f, - -0.7689255278558984f, - -0.7688418320734595f, - -0.7687581231171233f, - -0.7686744009883245f, - -0.7685906656884975f, - -0.7685069172190765f, - -0.7684231555814977f, - -0.7683393807771957f, - -0.768255592807606f, - -0.7681717916741637f, - -0.7680879773783058f, - -0.7680041499214679f, - -0.7679203093050865f, - -0.7678364555305974f, - -0.7677525885994386f, - -0.7676687085130467f, - -0.7675848152728588f, - -0.7675009088803121f, - -0.767416989336845f, - -0.7673330566438952f, - -0.7672491108029008f, - -0.7671651518152995f, - -0.7670811796825313f, - -0.7669971944060342f, - -0.7669131959872475f, - -0.7668291844276097f, - -0.7667451597285616f, - -0.7666611218915418f, - -0.766577070917992f, - -0.7664930068093498f, - -0.7664089295670579f, - -0.7663248391925552f, - -0.7662407356872847f, - -0.7661566190526851f, - -0.7660724892901992f, - -0.7659883464012678f, - -0.7659041903873334f, - -0.7658200212498377f, - -0.7657358389902229f, - -0.7656516436099308f, - -0.765567435110405f, - -0.7654832134930882f, - -0.7653989787594234f, - -0.7653147309108532f, - -0.7652304699488225f, - -0.7651461958747743f, - -0.7650619086901529f, - -0.7649776083964017f, - -0.7648932949949664f, - -0.7648089684872912f, - -0.764724628874821f, - -0.7646402761590008f, - -0.7645559103412755f, - -0.7644715314230918f, - -0.7643871394058949f, - -0.7643027342911309f, - -0.7642183160802455f, - -0.7641338847746862f, - -0.7640494403758993f, - -0.7639649828853317f, - -0.7638805123044299f, - -0.7637960286346424f, - -0.7637115318774157f, - -0.7636270220341995f, - -0.7635424991064393f, - -0.7634579630955853f, - -0.7633734140030849f, - -0.7632888518303883f, - -0.7632042765789423f, - -0.7631196882501978f, - -0.7630350868456031f, - -0.7629504723666093f, - -0.7628658448146642f, - -0.7627812041912196f, - -0.7626965504977246f, - -0.7626118837356307f, - -0.7625272039063883f, - -0.7624425110114482f, - -0.762357805052261f, - -0.7622730860302795f, - -0.7621883539469546f, - -0.7621036088037381f, - -0.7620188506020816f, - -0.7619340793434385f, - -0.7618492950292608f, - -0.7617644976610014f, - -0.7616796872401124f, - -0.7615948637680483f, - -0.761510027246262f, - -0.7614251776762072f, - -0.7613403150593371f, - -0.7612554393971068f, - -0.7611705506909704f, - -0.7610856489423822f, - -0.7610007341527963f, - -0.7609158063236692f, - -0.7608308654564552f, - -0.7607459115526093f, - -0.7606609446135889f, - -0.7605759646408475f, - -0.7604909716358431f, - -0.7604059656000308f, - -0.7603209465348688f, - -0.7602359144418117f, - -0.760150869322318f, - -0.7600658111778441f, - -0.7599807400098489f, - -0.759895655819788f, - -0.759810558609121f, - -0.7597254483793046f, - -0.7596403251317985f, - -0.7595551888680606f, - -0.7594700395895498f, - -0.7593848772977245f, - -0.7592997019940451f, - -0.7592145136799704f, - -0.7591293123569601f, - -0.7590440980264735f, - -0.758958870689972f, - -0.7588736303489152f, - -0.7587883770047639f, - -0.7587031106589781f, - -0.7586178313130201f, - -0.7585325389683498f, - -0.7584472336264306f, - -0.7583619152887218f, - -0.7582765839566871f, - -0.7581912396317873f, - -0.7581058823154867f, - -0.7580205120092454f, - -0.7579351287145281f, - -0.757849732432797f, - -0.7577643231655155f, - -0.7576789009141465f, - -0.7575934656801547f, - -0.7575080174650036f, - -0.7574225562701568f, - -0.7573370820970796f, - -0.7572515949472362f, - -0.7571660948220912f, - -0.7570805817231091f, - -0.7569950556517565f, - -0.756909516609498f, - -0.7568239645977995f, - -0.7567383996181263f, - -0.7566528216719455f, - -0.7565672307607231f, - -0.7564816268859256f, - -0.7563960100490191f, - -0.756310380251472f, - -0.7562247374947509f, - -0.7561390817803232f, - -0.756053413109656f, - -0.7559677314842185f, - -0.755882036905478f, - -0.755796329374903f, - -0.7557106088939616f, - -0.7556248754641237f, - -0.755539129086857f, - -0.7554533697636328f, - -0.7553675974959178f, - -0.7552818122851838f, - -0.7551960141328994f, - -0.7551102030405364f, - -0.755024379009563f, - -0.7549385420414514f, - -0.7548526921376713f, - -0.7547668292996953f, - -0.7546809535289926f, - -0.7545950648270361f, - -0.7545091631952965f, - -0.7544232486352468f, - -0.7543373211483585f, - -0.754251380736104f, - -0.7541654273999554f, - -0.7540794611413864f, - -0.7539934819618695f, - -0.7539074898628783f, - -0.7538214848458851f, - -0.7537354669123649f, - -0.7536494360637913f, - -0.7535633923016382f, - -0.7534773356273798f, - -0.7533912660424904f, - -0.7533051835484458f, - -0.7532190881467202f, - -0.7531329798387892f, - -0.7530468586261274f, - -0.7529607245102117f, - -0.7528745774925174f, - -0.7527884175745206f, - -0.7527022447576972f, - -0.7526160590435246f, - -0.7525298604334786f, - -0.752443648929038f, - -0.7523574245316775f, - -0.7522711872428764f, - -0.7521849370641112f, - -0.7520986739968615f, - -0.7520123980426029f, - -0.7519261092028158f, - -0.7518398074789772f, - -0.7517534928725679f, - -0.7516671653850644f, - -0.7515808250179477f, - -0.7514944717726959f, - -0.75140810565079f, - -0.7513217266537092f, - -0.7512353347829337f, - -0.751148930039943f, - -0.7510625124262189f, - -0.7509760819432416f, - -0.750889638592492f, - -0.7508031823754507f, - -0.7507167132936003f, - -0.7506302313484219f, - -0.7505437365413973f, - -0.7504572288740079f, - -0.7503707083477372f, - -0.7502841749640671f, - -0.7501976287244804f, - -0.7501110696304595f, - -0.7500244976834886f, - -0.7499379128850505f, - -0.7498513152366288f, - -0.7497647047397069f, - -0.74967808139577f, - -0.7495914452063016f, - -0.7495047961727864f, - -0.749418134296709f, - -0.7493314595795537f, - -0.7492447720228068f, - -0.7491580716279527f, - -0.7490713583964785f, - -0.7489846323298678f, - -0.7488978934296083f, - -0.7488111416971853f, - -0.7487243771340867f, - -0.7486375997417971f, - -0.7485508095218051f, - -0.7484640064755965f, - -0.7483771906046606f, - -0.7482903619104825f, - -0.7482035203945518f, - -0.7481166660583554f, - -0.7480297989033825f, - -0.7479429189311212f, - -0.74785602614306f, - -0.7477691205406872f, - -0.7476822021254933f, - -0.7475952708989667f, - -0.7475083268625972f, - -0.7474213700178738f, - -0.7473344003662877f, - -0.747247417909328f, - -0.7471604226484869f, - -0.7470734145852527f, - -0.7469863937211179f, - -0.7468993600575724f, - -0.7468123135961093f, - -0.7467252543382179f, - -0.7466381822853915f, - -0.7465510974391216f, - -0.7464639998009003f, - -0.7463768893722195f, - -0.7462897661545729f, - -0.7462026301494528f, - -0.7461154813583516f, - -0.7460283197827638f, - -0.7459411454241823f, - -0.7458539582841008f, - -0.7457667583640126f, - -0.7456795456654132f, - -0.745592320189796f, - -0.745505081938656f, - -0.7454178309134872f, - -0.7453305671157864f, - -0.7452432905470465f, - -0.7451560012087648f, - -0.7450686991024358f, - -0.7449813842295564f, - -0.7448940565916223f, - -0.7448067161901297f, - -0.7447193630265747f, - -0.7446319971024553f, - -0.7445446184192677f, - -0.7444572269785092f, - -0.7443698227816767f, - -0.744282405830269f, - -0.7441949761257832f, - -0.7441075336697177f, - -0.74402007846357f, - -0.7439326105088399f, - -0.7438451298070248f, - -0.7437576363596256f, - -0.743670130168139f, - -0.7435826112340663f, - -0.7434950795589057f, - -0.7434075351441591f, - -0.7433199779913241f, - -0.7432324081019026f, - -0.743144825477394f, - -0.7430572301193001f, - -0.7429696220291214f, - -0.7428820012083589f, - -0.7427943676585135f, - -0.7427067213810878f, - -0.7426190623775831f, - -0.7425313906495014f, - -0.7424437061983449f, - -0.7423560090256155f, - -0.742268299132817f, - -0.7421805765214518f, - -0.7420928411930229f, - -0.7420050931490331f, - -0.741917332390987f, - -0.7418295589203878f, - -0.7417417727387396f, - -0.7416539738475459f, - -0.7415661622483124f, - -0.7414783379425429f, - -0.7413905009317425f, - -0.7413026512174156f, - -0.7412147888010686f, - -0.7411269136842065f, - -0.7410390258683348f, - -0.7409511253549591f, - -0.7408632121455866f, - -0.7407752862417226f, - -0.7406873476448753f, - -0.7405993963565493f, - -0.7405114323782532f, - -0.7404234557114933f, - -0.7403354663577786f, - -0.7402474643186145f, - -0.7401594495955108f, - -0.7400714221899742f, - -0.739983382103515f, - -0.7398953293376391f, - -0.7398072638938574f, - -0.7397191857736775f, - -0.7396310949786097f, - -0.7395429915101629f, - -0.7394548753698468f, - -0.7393667465591706f, - -0.7392786050796454f, - -0.7391904509327811f, - -0.7391022841200882f, - -0.7390141046430767f, - -0.7389259125032588f, - -0.7388377077021449f, - -0.7387494902412466f, - -0.7386612601220747f, - -0.7385730173461423f, - -0.7384847619149608f, - -0.7383964938300424f, - -0.7383082130928995f, - -0.7382199197050443f, - -0.7381316136679907f, - -0.7380432949832515f, - -0.7379549636523398f, - -0.7378666196767685f, - -0.7377782630580526f, - -0.7376898937977049f, - -0.7376015118972413f, - -0.737513117358174f, - -0.7374247101820192f, - -0.7373362903702907f, - -0.7372478579245052f, - -0.7371594128461756f, - -0.7370709551368192f, - -0.7369824847979506f, - -0.7368940018310873f, - -0.7368055062377433f, - -0.7367169980194365f, - -0.7366284771776824f, - -0.736539943713999f, - -0.7364513976299026f, - -0.7363628389269106f, - -0.7362742676065395f, - -0.7361856836703085f, - -0.7360970871197345f, - -0.736008477956336f, - -0.7359198561816302f, - -0.7358312217971373f, - -0.7357425748043751f, - -0.7356539152048628f, - -0.7355652430001186f, - -0.7354765581916635f, - -0.735387860781016f, - -0.7352991507696964f, - -0.7352104281592239f, - -0.7351216929511198f, - -0.7350329451469042f, - -0.7349441847480976f, - -0.7348554117562205f, - -0.7347666261727949f, - -0.7346778279993417f, - -0.7345890172373823f, - -0.7345001938884381f, - -0.7344113579540321f, - -0.7343225094356858f, - -0.7342336483349212f, - -0.7341447746532619f, - -0.7340558883922302f, - -0.7339669895533493f, - -0.7338780781381417f, - -0.7337891541481326f, - -0.7337002175848434f, - -0.7336112684497998f, - -0.7335223067445248f, - -0.7334333324705437f, - -0.7333443456293807f, - -0.7332553462225604f, - -0.7331663342516073f, - -0.7330773097180476f, - -0.7329882726234064f, - -0.7328992229692091f, - -0.732810160756981f, - -0.7327210859882495f, - -0.73263199866454f, - -0.7325428987873791f, - -0.7324537863582931f, - -0.7323646613788098f, - -0.7322755238504554f, - -0.7321863737747588f, - -0.7320972111532454f, - -0.7320080359874447f, - -0.7319188482788834f, - -0.7318296480290917f, - -0.7317404352395953f, - -0.7316512099119249f, - -0.7315619720476081f, - -0.7314727216481757f, - -0.7313834587151546f, - -0.7312941832500763f, - -0.7312048952544696f, - -0.731115594729864f, - -0.7310262816777908f, - -0.7309369560997798f, - -0.7308476179973614f, - -0.7307582673720661f, - -0.7306689042254257f, - -0.7305795285589711f, - -0.7304901403742338f, - -0.7304007396727445f, - -0.7303113264560366f, - -0.7302219007256413f, - -0.7301324624830912f, - -0.7300430117299177f, - -0.7299535484676553f, - -0.7298640726978359f, - -0.7297745844219928f, - -0.7296850836416588f, - -0.7295955703583686f, - -0.7295060445736555f, - -0.7294165062890534f, - -0.7293269555060958f, - -0.7292373922263186f, - -0.7291478164512556f, - -0.7290582281824418f, - -0.7289686274214116f, - -0.7288790141697015f, - -0.7287893884288458f, - -0.728699750200382f, - -0.7286100994858437f, - -0.7285204362867688f, - -0.7284307606046924f, - -0.7283410724411529f, - -0.7282513717976847f, - -0.7281616586758266f, - -0.7280719330771146f, - -0.7279821950030873f, - -0.7278924444552818f, - -0.7278026814352359f, - -0.7277129059444871f, - -0.7276231179845748f, - -0.727533317557037f, - -0.7274435046634123f, - -0.7273536793052391f, - -0.7272638414840578f, - -0.7271739912014069f, - -0.7270841284588262f, - -0.7269942532578548f, - -0.7269043656000338f, - -0.726814465486903f, - -0.7267245529200026f, - -0.7266346279008734f, - -0.7265446904310554f, - -0.7264547405120911f, - -0.7263647781455211f, - -0.726274803332887f, - -0.7261848160757295f, - -0.7260948163755921f, - -0.7260048042340163f, - -0.7259147796525441f, - -0.7258247426327178f, - -0.7257346931760811f, - -0.725644631284176f, - -0.7255545569585473f, - -0.7254644702007361f, - -0.7253743710122879f, - -0.7252842593947452f, - -0.7251941353496537f, - -0.7251039988785556f, - -0.7250138499829969f, - -0.7249236886645212f, - -0.7248335149246751f, - -0.7247433287650012f, - -0.7246531301870469f, - -0.7245629191923564f, - -0.7244726957824766f, - -0.7243824599589529f, - -0.7242922117233315f, - -0.724201951077158f, - -0.7241116780219804f, - -0.7240213925593448f, - -0.7239310946907983f, - -0.7238407844178875f, - -0.7237504617421608f, - -0.7236601266651657f, - -0.7235697791884497f, - -0.7234794193135604f, - -0.7233890470420474f, - -0.7232986623754585f, - -0.7232082653153423f, - -0.7231178558632474f, - -0.723027434020724f, - -0.7229369997893208f, - -0.7228465531705874f, - -0.722756094166073f, - -0.7226656227773288f, - -0.7225751390059044f, - -0.7224846428533496f, - -0.7223941343212169f, - -0.7223036134110545f, - -0.7222130801244157f, - -0.72212253446285f, - -0.7220319764279112f, - -0.7219414060211481f, - -0.7218508232441149f, - -0.721760228098362f, - -0.7216696205854439f, - -0.7215790007069107f, - -0.7214883684643169f, - -0.7213977238592141f, - -0.7213070668931567f, - -0.7212163975676977f, - -0.7211257158843907f, - -0.7210350218447886f, - -0.7209443154504468f, - -0.720853596702919f, - -0.7207628656037596f, - -0.7206721221545225f, - -0.720581366356764f, - -0.7204905982120384f, - -0.720399817721901f, - -0.7203090248879068f, - -0.7202182197116127f, - -0.7201274021945733f, - -0.7200365723383467f, - -0.7199457301444867f, - -0.7198548756145517f, - -0.7197640087500974f, - -0.7196731295526824f, - -0.7195822380238615f, - -0.719491334165194f, - -0.7194004179782368f, - -0.7193094894645473f, - -0.7192185486256846f, - -0.7191275954632063f, - -0.719036629978671f, - -0.7189456521736366f, - -0.7188546620496634f, - -0.7187636596083098f, - -0.718672644851135f, - -0.718581617779698f, - -0.7184905783955596f, - -0.7183995267002794f, - -0.7183084626954174f, - -0.7182173863825333f, - -0.7181262977631889f, - -0.7180351968389445f, - -0.7179440836113609f, - -0.7178529580819987f, - -0.7177618202524207f, - -0.7176706701241878f, - -0.7175795076988619f, - -0.7174883329780044f, - -0.7173971459631787f, - -0.7173059466559468f, - -0.7172147350578713f, - -0.7171235111705143f, - -0.7170322749954404f, - -0.7169410265342115f, - -0.7168497657883931f, - -0.7167584927595464f, - -0.7166672074492372f, - -0.7165759098590283f, - -0.7164845999904861f, - -0.7163932778451726f, - -0.7163019434246545f, - -0.7162105967304954f, - -0.7161192377642625f, - -0.7160278665275186f, - -0.7159364830218313f, - -0.7158450872487653f, - -0.7157536792098876f, - -0.715662258906764f, - -0.715570826340961f, - -0.7154793815140446f, - -0.7153879244275828f, - -0.7152964550831423f, - -0.7152049734822903f, - -0.7151134796265942f, - -0.7150219735176212f, - -0.7149304551569405f, - -0.7148389245461196f, - -0.7147473816867269f, - -0.7146558265803302f, - -0.7145642592284998f, - -0.7144726796328037f, - -0.7143810877948112f, - -0.7142894837160914f, - -0.7141978673982146f, - -0.7141062388427504f, - -0.7140145980512688f, - -0.7139229450253392f, - -0.7138312797665335f, - -0.7137396022764211f, - -0.7136479125565746f, - -0.7135562106085627f, - -0.7134644964339586f, - -0.7133727700343323f, - -0.7132810314112578f, - -0.713189280566304f, - -0.7130975175010454f, - -0.7130057422170528f, - -0.7129139547159007f, - -0.7128221549991594f, - -0.7127303430684035f, - -0.7126385189252052f, - -0.7125466825711391f, - -0.712454834007778f, - -0.7123629732366957f, - -0.7122711002594658f, - -0.7121792150776637f, - -0.7120873176928632f, - -0.7119954081066387f, - -0.7119034863205648f, - -0.7118115523362174f, - -0.7117196061551715f, - -0.7116276477790024f, - -0.7115356772092852f, - -0.711443694447597f, - -0.7113516994955134f, - -0.7112596923546105f, - -0.7111676730264643f, - -0.7110756415126528f, - -0.7109835978147523f, - -0.7108915419343399f, - -0.710799473872993f, - -0.7107073936322885f, - -0.7106153012138055f, - -0.7105231966191212f, - -0.710431079849814f, - -0.7103389509074615f, - -0.7102468097936436f, - -0.7101546565099379f, - -0.7100624910579252f, - -0.7099703134391824f, - -0.7098781236552906f, - -0.7097859217078284f, - -0.7096937075983774f, - -0.7096014813285152f, - -0.709509242899824f, - -0.7094169923138828f, - -0.7093247295722739f, - -0.7092324546765774f, - -0.7091401676283743f, - -0.7090478684292454f, - -0.7089555570807735f, - -0.7088632335845396f, - -0.7087708979421258f, - -0.7086785501551134f, - -0.7085861902250862f, - -0.708493818153626f, - -0.7084014339423157f, - -0.7083090375927376f, - -0.7082166291064761f, - -0.7081242084851134f, - -0.7080317757302348f, - -0.7079393308434219f, - -0.7078468738262604f, - -0.707754404680334f, - -0.707661923407227f, - -0.7075694300085236f, - -0.7074769244858097f, - -0.7073844068406699f, - -0.7072918770746893f, - -0.707199335189453f, - -0.7071067811865477f, - -0.7070142150675587f, - -0.7069216368340716f, - -0.7068290464876738f, - -0.7067364440299512f, - -0.7066438294624906f, - -0.7065512027868783f, - -0.7064585640047025f, - -0.7063659131175503f, - -0.7062732501270089f, - -0.7061805750346655f, - -0.7060878878421101f, - -0.7059951885509281f, - -0.7059024771627099f, - -0.705809753679043f, - -0.7057170181015172f, - -0.7056242704317209f, - -0.7055315106712434f, - -0.7054387388216734f, - -0.7053459548846019f, - -0.705253158861618f, - -0.7051603507543117f, - -0.7050675305642727f, - -0.7049746982930927f, - -0.7048818539423617f, - -0.7047889975136705f, - -0.7046961290086097f, - -0.7046032484287716f, - -0.7045103557757467f, - -0.7044174510511284f, - -0.7043245342565062f, - -0.704231605393474f, - -0.7041386644636227f, - -0.704045711468547f, - -0.703952746409837f, - -0.7038597692890874f, - -0.7037667801078903f, - -0.7036737788678401f, - -0.7035807655705298f, - -0.7034877402175532f, - -0.7033947028105036f, - -0.7033016533509765f, - -0.7032085918405655f, - -0.7031155182808653f, - -0.7030224326734705f, - -0.7029293350199758f, - -0.7028362253219773f, - -0.7027431035810701f, - -0.7026499697988496f, - -0.7025568239769111f, - -0.7024636661168518f, - -0.7023704962202675f, - -0.7022773142887544f, - -0.7021841203239086f, - -0.7020909143273283f, - -0.7019976963006098f, - -0.7019044662453504f, - -0.7018112241631471f, - -0.7017179700555987f, - -0.7016247039243023f, - -0.7015314257708563f, - -0.7014381355968581f, - -0.7013448334039076f, - -0.7012515191936023f, - -0.7011581929675428f, - -0.7010648547273259f, - -0.7009715044745528f, - -0.7008781422108217f, - -0.7007847679377343f, - -0.7006913816568878f, - -0.7005979833698845f, - -0.7005045730783234f, - -0.7004111507838069f, - -0.7003177164879333f, - -0.7002242701923056f, - -0.7001308118985234f, - -0.7000373416081895f, - -0.699943859322905f, - -0.6998503650442716f, - -0.6997568587738905f, - -0.6996633405133654f, - -0.699569810264298f, - -0.6994762680282908f, - -0.6993827138069462f, - -0.6992891476018682f, - -0.6991955694146597f, - -0.699101979246924f, - -0.6990083771002641f, - -0.6989147629762852f, - -0.6988211368765906f, - -0.6987274988027846f, - -0.6986338487564717f, - -0.698540186739256f, - -0.6984465127527435f, - -0.6983528267985386f, - -0.6982591288782467f, - -0.6981654189934727f, - -0.6980716971458235f, - -0.6979779633369038f, - -0.6978842175683214f, - -0.6977904598416802f, - -0.6976966901585887f, - -0.6976029085206522f, - -0.6975091149294796f, - -0.6974153093866756f, - -0.6973214918938493f, - -0.6972276624526068f, - -0.6971338210645581f, - -0.6970399677313085f, - -0.6969461024544679f, - -0.6968522252356435f, - -0.6967583360764451f, - -0.696664434978481f, - -0.6965705219433598f, - -0.6964765969726904f, - -0.6963826600680832f, - -0.6962887112311473f, - -0.6961947504634924f, - -0.6961007777667281f, - -0.6960067931424655f, - -0.6959127965923145f, - -0.6958187881178859f, - -0.6957247677207895f, - -0.695630735402638f, - -0.6955366911650417f, - -0.695442635009612f, - -0.6953485669379601f, - -0.695254486951699f, - -0.6951603950524401f, - -0.6950662912417956f, - -0.6949721755213774f, - -0.6948780478927994f, - -0.6947839083576737f, - -0.6946897569176134f, - -0.6945955935742312f, - -0.6945014183291418f, - -0.6944072311839582f, - -0.6943130321402937f, - -0.6942188211997642f, - -0.6941245983639815f, - -0.6940303636345619f, - -0.693936117013119f, - -0.6938418585012694f, - -0.6937475881006259f, - -0.6936533058128054f, - -0.6935590116394221f, - -0.6934647055820934f, - -0.6933703876424342f, - -0.6932760578220608f, - -0.6931817161225887f, - -0.693087362545636f, - -0.6929929970928184f, - -0.6928986197657531f, - -0.6928042305660564f, - -0.6927098294953471f, - -0.6926154165552421f, - -0.6925209917473589f, - -0.6924265550733151f, - -0.6923321065347299f, - -0.6922376461332205f, - -0.6921431738704072f, - -0.6920486897479065f, - -0.691954193767339f, - -0.6918596859303228f, - -0.691765166238479f, - -0.6916706346934246f, - -0.6915760912967814f, - -0.6914815360501682f, - -0.6913869689552069f, - -0.6912923900135154f, - -0.6911977992267162f, - -0.6911031965964294f, - -0.6910085821242755f, - -0.6909139558118768f, - -0.6908193176608541f, - -0.690724667672829f, - -0.6906300058494228f, - -0.6905353321922586f, - -0.690440646702958f, - -0.6903459493831435f, - -0.6902512402344371f, - -0.6901565192584627f, - -0.6900617864568428f, - -0.6899670418312007f, - -0.689872285383159f, - -0.6897775171143428f, - -0.6896827370263752f, - -0.6895879451208802f, - -0.6894931413994814f, - -0.6893983258638046f, - -0.6893034985154736f, - -0.6892086593561134f, - -0.6891138083873485f, - -0.6890189456108052f, - -0.6889240710281078f, - -0.6888291846408838f, - -0.6887342864507566f, - -0.6886393764593541f, - -0.6885444546683013f, - -0.6884495210792266f, - -0.688354575693754f, - -0.6882596185135124f, - -0.6881646495401275f, - -0.6880696687752286f, - -0.6879746762204404f, - -0.6878796718773927f, - -0.6877846557477121f, - -0.6876896278330278f, - -0.6875945881349674f, - -0.6874995366551597f, - -0.6874044733952325f, - -0.6873093983568159f, - -0.6872143115415384f, - -0.6871192129510295f, - -0.6870241025869178f, - -0.6869289804508343f, - -0.6868338465444084f, - -0.68673870086927f, - -0.6866435434270496f, - -0.6865483742193769f, - -0.6864531932478839f, - -0.6863580005142008f, - -0.686262796019959f, - -0.6861675797667888f, - -0.6860723517563232f, - -0.6859771119901932f, - -0.6858818604700306f, - -0.685786597197467f, - -0.6856913221741361f, - -0.6855960354016696f, - -0.6855007368817002f, - -0.6854054266158602f, - -0.6853101046057842f, - -0.6852147708531039f, - -0.685119425359455f, - -0.6850240681264685f, - -0.6849286991557804f, - -0.6848333184490233f, - -0.6847379260078336f, - -0.6846425218338432f, - -0.684547105928689f, - -0.6844516782940042f, - -0.6843562389314256f, - -0.6842607878425877f, - -0.6841653250291261f, - -0.6840698504926758f, - -0.683974364234874f, - -0.6838788662573564f, - -0.683783356561759f, - -0.683687835149718f, - -0.6835923020228714f, - -0.6834967571828552f, - -0.6834012006313067f, - -0.6833056323698627f, - -0.683210052400162f, - -0.6831144607238415f, - -0.6830188573425393f, - -0.6829232422578929f, - -0.6828276154715418f, - -0.6827319769851241f, - -0.6826363268002784f, - -0.682540664918643f, - -0.6824449913418583f, - -0.6823493060715631f, - -0.6822536091093968f, - -0.6821579004569986f, - -0.6820621801160098f, - -0.6819664480880698f, - -0.6818707043748183f, - -0.6817749489778978f, - -0.6816791818989464f, - -0.6815834031396071f, - -0.6814876127015196f, - -0.6813918105863273f, - -0.681295996795669f, - -0.6812001713311886f, - -0.6811043341945267f, - -0.6810084853873273f, - -0.6809126249112302f, - -0.6808167527678798f, - -0.6807208689589177f, - -0.680624973485988f, - -0.6805290663507333f, - -0.6804331475547969f, - -0.6803372170998218f, - -0.6802412749874528f, - -0.6801453212193334f, - -0.6800493557971076f, - -0.6799533787224191f, - -0.6798573899969139f, - -0.679761389622236f, - -0.6796653776000303f, - -0.6795693539319414f, - -0.6794733186196158f, - -0.6793772716646977f, - -0.679281213068835f, - -0.679185142833671f, - -0.6790890609608536f, - -0.6789929674520288f, - -0.6788968623088427f, - -0.6788007455329417f, - -0.678704617125974f, - -0.678608477089586f, - -0.6785123254254245f, - -0.6784161621351382f, - -0.6783199872203742f, - -0.6782238006827807f, - -0.6781276025240047f, - -0.6780313927456961f, - -0.6779351713495029f, - -0.6778389383370736f, - -0.6777426937100566f, - -0.6776464374701023f, - -0.6775501696188594f, - -0.6774538901579773f, - -0.6773575990891052f, - -0.6772612964138943f, - -0.6771649821339941f, - -0.6770686562510548f, - -0.6769723187667264f, - -0.6768759696826608f, - -0.6767796090005084f, - -0.6766832367219202f, - -0.6765868528485469f, - -0.6764904573820413f, - -0.6763940503240545f, - -0.6762976316762384f, - -0.6762012014402444f, - -0.6761047596177262f, - -0.6760083062103348f, - -0.6759118412197251f, - -0.6758153646475474f, - -0.6757188764954566f, - -0.6756223767651047f, - -0.6755258654581473f, - -0.6754293425762352f, - -0.6753328081210246f, - -0.6752362620941681f, - -0.675139704497322f, - -0.6750431353321381f, - -0.6749465546002732f, - -0.6748499623033807f, - -0.6747533584431171f, - -0.674656743021137f, - -0.6745601160390958f, - -0.6744634774986487f, - -0.6743668274014527f, - -0.6742701657491633f, - -0.6741734925434368f, - -0.6740768077859296f, - -0.6739801114782978f, - -0.6738834036221996f, - -0.6737866842192912f, - -0.67368995327123f, - -0.6735932107796729f, - -0.6734964567462787f, - -0.6733996911727047f, - -0.6733029140606089f, - -0.6732061254116489f, - -0.6731093252274846f, - -0.6730125135097736f, - -0.6729156902601753f, - -0.6728188554803476f, - -0.6727220091719512f, - -0.6726251513366444f, - -0.6725282819760886f, - -0.6724314010919411f, - -0.6723345086858639f, - -0.6722376047595157f, - -0.6721406893145592f, - -0.6720437623526522f, - -0.6719468238754576f, - -0.671849873884635f, - -0.6717529123818478f, - -0.6716559393687545f, - -0.6715589548470187f, - -0.6714619588183011f, - -0.6713649512842648f, - -0.6712679322465714f, - -0.6711709017068835f, - -0.6710738596668628f, - -0.6709768061281735f, - -0.6708797410924778f, - -0.670782664561439f, - -0.6706855765367199f, - -0.6705884770199853f, - -0.6704913660128982f, - -0.6703942435171227f, - -0.6702971095343223f, - -0.6701999640661628f, - -0.6701028071143078f, - -0.6700056386804224f, - -0.6699084587661706f, - -0.669811267373219f, - -0.6697140645032325f, - -0.6696168501578762f, - -0.6695196243388162f, - -0.6694223870477176f, - -0.6693251382862478f, - -0.6692278780560728f, - -0.6691306063588588f, - -0.669033323196272f, - -0.6689360285699806f, - -0.6688387224816504f, - -0.6687414049329508f, - -0.6686440759255464f, - -0.6685467354611072f, - -0.6684493835412996f, - -0.6683520201677937f, - -0.6682546453422552f, - -0.6681572590663545f, - -0.6680598613417591f, - -0.667962452170139f, - -0.6678650315531629f, - -0.6677675994924999f, - -0.6676701559898187f, - -0.6675727010467905f, - -0.6674752346650844f, - -0.6673777568463705f, - -0.6672802675923183f, - -0.6671827669045998f, - -0.6670852547848847f, - -0.666987731234844f, - -0.6668901962561481f, - -0.6667926498504695f, - -0.6666950920194783f, - -0.6665975227648482f, - -0.6664999420882483f, - -0.6664023499913525f, - -0.6663047464758325f, - -0.6662071315433608f, - -0.6661095051956092f, - -0.6660118674342518f, - -0.665914218260961f, - -0.6658165576774099f, - -0.6657188856852714f, - -0.6656212022862202f, - -0.6655235074819297f, - -0.6654258012740728f, - -0.6653280836643254f, - -0.665230354654361f, - -0.6651326142458542f, - -0.665034862440479f, - -0.6649370992399126f, - -0.6648393246458272f, - -0.6647415386599003f, - -0.664643741283806f, - -0.664545932519222f, - -0.6644481123678219f, - -0.6643502808312833f, - -0.6642524379112816f, - -0.6641545836094945f, - -0.664056717927598f, - -0.6639588408672691f, - -0.6638609524301841f, - -0.6637630526180217f, - -0.6636651414324588f, - -0.6635672188751729f, - -0.6634692849478413f, - -0.6633713396521435f, - -0.6632733829897564f, - -0.6631754149623602f, - -0.6630774355716312f, - -0.6629794448192502f, - -0.6628814427068948f, - -0.6627834292362463f, - -0.6626854044089815f, - -0.662587368226782f, - -0.6624893206913263f, - -0.6623912618042963f, - -0.6622931915673697f, - -0.6621951099822289f, - -0.662097017050553f, - -0.6619989127740243f, - -0.6619007971543232f, - -0.6618026701931307f, - -0.6617045318921282f, - -0.6616063822529966f, - -0.6615082212774192f, - -0.661410048967077f, - -0.6613118653236523f, - -0.6612136703488268f, - -0.6611154640442845f, - -0.6610172464117071f, - -0.6609190174527779f, - -0.6608207771691792f, - -0.6607225255625957f, - -0.6606242626347102f, - -0.6605259883872064f, - -0.6604277028217677f, - -0.6603294059400793f, - -0.6602310977438249f, - -0.6601327782346891f, - -0.6600344474143558f, - -0.6599361052845112f, - -0.6598377518468397f, - -0.6597393871030266f, - -0.6596410110547567f, - -0.659542623703717f, - -0.6594442250515918f, - -0.6593458151000694f, - -0.6592473938508333f, - -0.6591489613055718f, - -0.6590505174659702f, - -0.6589520623337175f, - -0.6588535959104979f, - -0.6587551181980005f, - -0.6586566291979115f, - -0.6585581289119204f, - -0.6584596173417124f, - -0.6583610944889774f, - -0.6582625603554022f, - -0.6581640149426766f, - -0.6580654582524883f, - -0.6579668902865263f, - -0.6578683110464787f, - -0.6577697205340359f, - -0.6576711187508867f, - -0.6575725056987205f, - -0.6574738813792265f, - -0.6573752457940958f, - -0.6572765989450178f, - -0.6571779408336829f, - -0.6570792714617815f, - -0.6569805908310037f, - -0.6568818989430415f, - -0.6567831957995856f, - -0.6566844814023269f, - -0.6565857557529565f, - -0.6564870188531672f, - -0.6563882707046501f, - -0.6562895113090974f, - -0.6561907406682005f, - -0.6560919587836532f, - -0.6559931656571468f, - -0.6558943612903761f, - -0.6557955456850314f, - -0.6556967188428078f, - -0.6555978807653974f, - -0.6554990314544958f, - -0.655400170911794f, - -0.655301299138988f, - -0.6552024161377707f, - -0.6551035219098383f, - -0.6550046164568827f, - -0.6549056997806006f, - -0.6548067718826857f, - -0.6547078327648341f, - -0.6546088824287408f, - -0.6545099208761012f, - -0.6544109481086102f, - -0.6543119641279651f, - -0.6542129689358612f, - -0.6541139625339949f, - -0.6540149449240619f, - -0.6539159161077601f, - -0.6538168760867858f, - -0.653717824862836f, - -0.6536187624376072f, - -0.6535196888127981f, - -0.6534206039901057f, - -0.6533215079712278f, - -0.6532224007578616f, - -0.6531232823517068f, - -0.653024152754461f, - -0.6529250119678228f, - -0.6528258599934902f, - -0.6527266968331635f, - -0.6526275224885413f, - -0.6525283369613221f, - -0.6524291402532068f, - -0.6523299323658943f, - -0.6522307133010848f, - -0.6521314830604775f, - -0.6520322416457748f, - -0.6519329890586745f, - -0.6518337253008791f, - -0.6517344503740883f, - -0.6516351642800051f, - -0.6515358670203282f, - -0.6514365585967608f, - -0.6513372390110033f, - -0.6512379082647588f, - -0.6511385663597287f, - -0.6510392132976152f, - -0.6509398490801199f, - -0.6508404737089469f, - -0.6507410871857983f, - -0.6506416895123769f, - -0.6505422806903852f, - -0.650442860721528f, - -0.6503434296075081f, - -0.6502439873500293f, - -0.6501445339507946f, - -0.6500450694115099f, - -0.6499455937338776f, - -0.6498461069196046f, - -0.6497466089703928f, - -0.6496470998879491f, - -0.6495475796739771f, - -0.6494480483301841f, - -0.6493485058582731f, - -0.6492489522599514f, - -0.6491493875369236f, - -0.6490498116908978f, - -0.6489502247235776f, - -0.6488506266366711f, - -0.6487510174318846f, - -0.6486513971109239f, - -0.6485517656754974f, - -0.6484521231273117f, - -0.648352469468074f, - -0.6482528046994912f, - -0.6481531288232725f, - -0.6480534418411249f, - -0.6479537437547568f, - -0.6478540345658755f, - -0.6477543142761912f, - -0.6476545828874116f, - -0.6475548404012458f, - -0.647455086819402f, - -0.6473553221435909f, - -0.6472555463755212f, - -0.6471557595169026f, - -0.6470559615694443f, - -0.6469561525348575f, - -0.6468563324148519f, - -0.6467565012111377f, - -0.6466566589254249f, - -0.6465568055594257f, - -0.6464569411148496f, - -0.6463570655934098f, - -0.646257178996815f, - -0.6461572813267786f, - -0.6460573725850112f, - -0.6459574527732266f, - -0.6458575218931342f, - -0.6457575799464482f, - -0.6456576269348799f, - -0.645557662860144f, - -0.6454576877239506f, - -0.6453577015280147f, - -0.6452577042740484f, - -0.6451576959637663f, - -0.6450576765988814f, - -0.6449576461811073f, - -0.6448576047121577f, - -0.6447575521937478f, - -0.6446574886275914f, - -0.6445574140154032f, - -0.6444573283588972f, - -0.6443572316597896f, - -0.644257123919795f, - -0.6441570051406285f, - -0.6440568753240058f, - -0.6439567344716418f, - -0.6438565825852539f, - -0.6437564196665574f, - -0.6436562457172685f, - -0.6435560607391031f, - -0.6434558647337791f, - -0.6433556577030127f, - -0.643255439648521f, - -0.6431552105720204f, - -0.6430549704752296f, - -0.6429547193598657f, - -0.6428544572276464f, - -0.642754184080289f, - -0.6426538999195129f, - -0.6425536047470352f, - -0.6424532985645764f, - -0.6423529813738527f, - -0.6422526531765846f, - -0.6421523139744904f, - -0.642051963769291f, - -0.6419516025627032f, - -0.641851230356449f, - -0.6417508471522466f, - -0.6416504529518174f, - -0.6415500477568812f, - -0.6414496315691582f, - -0.6413492043903684f, - -0.6412487662222338f, - -0.641148317066475f, - -0.6410478569248129f, - -0.6409473857989683f, - -0.6408469036906641f, - -0.6407464106016213f, - -0.6406459065335619f, - -0.6405453914882073f, - -0.6404448654672811f, - -0.6403443284725052f, - -0.6402437805056022f, - -0.6401432215682943f, - -0.6400426516623059f, - -0.6399420707893596f, - -0.6398414789511788f, - -0.6397408761494865f, - -0.6396402623860078f, - -0.6395396376624659f, - -0.6394390019805852f, - -0.6393383553420899f, - -0.639237697748704f, - -0.6391370292021534f, - -0.6390363497041619f, - -0.6389356592564565f, - -0.6388349578607598f, - -0.6387342455187994f, - -0.6386335222322996f, - -0.6385327880029883f, - -0.6384320428325888f, - -0.6383312867228295f, - -0.6382305196754352f, - -0.6381297416921348f, - -0.6380289527746523f, - -0.6379281529247168f, - -0.637827342144054f, - -0.6377265204343928f, - -0.6376256877974599f, - -0.6375248442349831f, - -0.6374239897486896f, - -0.637323124340309f, - -0.6372222480115688f, - -0.6371213607641976f, - -0.6370204625999232f, - -0.636919553520476f, - -0.6368186335275836f, - -0.6367177026229774f, - -0.636616760808384f, - -0.6365158080855351f, - -0.6364148444561591f, - -0.636313869921988f, - -0.6362128844847493f, - -0.6361118881461755f, - -0.6360108809079962f, - -0.6359098627719423f, - -0.6358088337397441f, - -0.6357077938131339f, - -0.6356067429938425f, - -0.6355056812836004f, - -0.635404608684141f, - -0.6353035251971952f, - -0.6352024308244951f, - -0.6351013255677724f, - -0.6350002094287607f, - -0.6348990824091919f, - -0.634797944510799f, - -0.634696795735314f, - -0.6345956360844722f, - -0.6344944655600043f, - -0.6343932841636459f, - -0.6342920918971293f, - -0.6341908887621897f, - -0.6340896747605606f, - -0.6339884498939761f, - -0.6338872141641702f, - -0.6337859675728788f, - -0.633684710121836f, - -0.633583441812777f, - -0.6334821626474362f, - -0.6333808726275503f, - -0.6332795717548543f, - -0.6331782600310839f, - -0.6330769374579744f, - -0.6329756040372634f, - -0.6328742597706857f, - -0.6327729046599798f, - -0.6326715387068799f, - -0.6325701619131247f, - -0.63246877428045f, - -0.6323673758105951f, - -0.6322659665052947f, - -0.6321645463662884f, - -0.6320631153953127f, - -0.6319616735941077f, - -0.6318602209644089f, - -0.6317587575079564f, - -0.6316572832264876f, - -0.6315557981217427f, - -0.6314543021954597f, - -0.631352795449378f, - -0.6312512778852366f, - -0.6311497495047744f, - -0.6310482103097325f, - -0.63094666030185f, - -0.6308450994828668f, - -0.6307435278545227f, - -0.6306419454185593f, - -0.6305403521767166f, - -0.6304387481307352f, - -0.6303371332823555f, - -0.63023550763332f, - -0.6301338711853695f, - -0.6300322239402452f, - -0.6299305658996883f, - -0.629828897065442f, - -0.6297272174392478f, - -0.6296255270228477f, - -0.6295238258179837f, - -0.6294221138263997f, - -0.6293203910498372f, - -0.6292186574900411f, - -0.629116913148752f, - -0.6290151580277151f, - -0.6289133921286728f, - -0.6288116154533708f, - -0.6287098280035504f, - -0.6286080297809575f, - -0.6285062207873352f, - -0.62840440102443f, - -0.6283025704939836f, - -0.6282007291977433f, - -0.6280988771374525f, - -0.6279970143148578f, - -0.6278951407317038f, - -0.6277932563897364f, - -0.6276913612907002f, - -0.627589455436343f, - -0.62748753882841f, - -0.6273856114686476f, - -0.6272836733588014f, - -0.6271817245006197f, - -0.6270797648958486f, - -0.6269777945462351f, - -0.6268758134535258f, - -0.6267738216194696f, - -0.6266718190458131f, - -0.6265698057343044f, - -0.6264677816866907f, - -0.6263657469047215f, - -0.6262637013901443f, - -0.6261616451447078f, - -0.6260595781701608f, - -0.6259575004682514f, - -0.6258554120407299f, - -0.6257533128893443f, - -0.6256512030158462f, - -0.6255490824219824f, - -0.6254469511095047f, - -0.6253448090801618f, - -0.6252426563357059f, - -0.6251404928778845f, - -0.6250383187084505f, - -0.624936133829153f, - -0.6248339382417452f, - -0.6247317319479752f, - -0.6246295149495964f, - -0.6245272872483589f, - -0.6244250488460158f, - -0.6243227997443183f, - -0.6242205399450181f, - -0.6241182694498669f, - -0.6240159882606185f, - -0.6239136963790248f, - -0.6238113938068385f, - -0.6237090805458118f, - -0.623606756597699f, - -0.623504421964253f, - -0.6234020766472274f, - -0.6232997206483747f, - -0.6231973539694504f, - -0.6230949766122071f, - -0.6229925885784011f, - -0.6228901898697841f, - -0.6227877804881126f, - -0.6226853604351408f, - -0.6225829297126235f, - -0.6224804883223153f, - -0.6223780362659727f, - -0.6222755735453506f, - -0.6221731001622047f, - -0.6220706161182901f, - -0.6219681214153643f, - -0.6218656160551826f, - -0.6217631000395011f, - -0.6216605733700774f, - -0.6215580360486678f, - -0.6214554880770291f, - -0.6213529294569179f, - -0.6212503601900935f, - -0.6211477802783106f, - -0.621045189723329f, - -0.6209425885269051f, - -0.6208399766907992f, - -0.6207373542167666f, - -0.6206347211065677f, - -0.62053207736196f, - -0.6204294229847034f, - -0.6203267579765563f, - -0.6202240823392777f, - -0.6201213960746265f, - -0.6200186991843633f, - -0.6199159916702471f, - -0.619813273534038f, - -0.6197105447774951f, - -0.6196078054023803f, - -0.6195050554104523f, - -0.619402294803474f, - -0.6192995235832033f, - -0.6191967417514033f, - -0.6190939493098336f, - -0.6189911462602579f, - -0.6188883326044347f, - -0.6187855083441277f, - -0.6186826734810975f, - -0.6185798280171084f, - -0.6184769719539196f, - -0.6183741052932956f, - -0.6182712280369976f, - -0.61816834018679f, - -0.6180654417444349f, - -0.6179625327116953f, - -0.6178596130903348f, - -0.6177566828821159f, - -0.617653742088804f, - -0.617550790712162f, - -0.617447828753954f, - -0.6173448562159436f, - -0.6172418730998966f, - -0.6171388794075768f, - -0.6170358751407491f, - -0.6169328603011777f, - -0.616829834890629f, - -0.6167267989108678f, - -0.6166237523636595f, - -0.6165206952507691f, - -0.6164176275739639f, - -0.6163145493350091f, - -0.616211460535671f, - -0.6161083611777153f, - -0.6160052512629101f, - -0.6159021307930211f, - -0.6157989997698157f, - -0.61569585819506f, - -0.6155927060705229f, - -0.6154895433979702f, - -0.6153863701791721f, - -0.6152831864158933f, - -0.6151799921099039f, - -0.615076787262971f, - -0.6149735718768649f, - -0.6148703459533513f, - -0.6147671094942012f, - -0.6146638625011821f, - -0.6145606049760644f, - -0.6144573369206168f, - -0.6143540583366087f, - -0.6142507692258091f, - -0.6141474695899892f, - -0.6140441594309184f, - -0.6139408387503668f, - -0.613837507550104f, - -0.6137341658319022f, - -0.6136308135975311f, - -0.6135274508487619f, - -0.6134240775873648f, - -0.6133206938151127f, - -0.6132172995337761f, - -0.6131138947451268f, - -0.6130104794509365f, - -0.6129070536529765f, - -0.6128036173530205f, - -0.6127001705528401f, - -0.6125967132542077f, - -0.6124932454588955f, - -0.6123897671686777f, - -0.6122862783853267f, - -0.6121827791106156f, - -0.6120792693463174f, - -0.6119757490942069f, - -0.6118722183560567f, - -0.6117686771336427f, - -0.6116651254287362f, - -0.6115615632431138f, - -0.6114579905785485f, - -0.6113544074368171f, - -0.6112508138196918f, - -0.6111472097289495f, - -0.6110435951663643f, - -0.6109399701337135f, - -0.61083633463277f, - -0.6107326886653116f, - -0.6106290322331129f, - -0.6105253653379514f, - -0.6104216879816027f, - -0.6103180001658433f, - -0.6102143018924492f, - -0.6101105931631985f, - -0.6100068739798676f, - -0.6099031443442338f, - -0.6097994042580737f, - -0.6096956537231661f, - -0.6095918927412883f, - -0.6094881213142181f, - -0.6093843394437329f, - -0.6092805471316125f, - -0.6091767443796343f, - -0.6090729311895774f, - -0.6089691075632195f, - -0.6088652735023412f, - -0.608761429008721f, - -0.608657574084138f, - -0.6085537087303714f, - -0.608449832949202f, - -0.6083459467424092f, - -0.6082420501117721f, - -0.6081381430590732f, - -0.6080342255860902f, - -0.6079302976946057f, - -0.6078263593863991f, - -0.6077224106632535f, - -0.607618451526947f, - -0.6075144819792634f, - -0.6074105020219824f, - -0.607306511656888f, - -0.6072025108857593f, - -0.6070984997103802f, - -0.6069944781325316f, - -0.6068904461539973f, - -0.6067864037765593f, - -0.6066823510020001f, - -0.606578287832102f, - -0.6064742142686496f, - -0.6063701303134253f, - -0.6062660359682127f, - -0.6061619312347947f, - -0.6060578161149563f, - -0.6059536906104811f, - -0.605849554723153f, - -0.6057454084547559f, - -0.6056412518070755f, - -0.6055370847818952f, - -0.6054329073810019f, - -0.605328719606178f, - -0.6052245214592106f, - -0.6051203129418838f, - -0.6050160940559854f, - -0.6049118648032983f, - -0.6048076251856105f, - -0.6047033752047074f, - -0.6045991148623754f, - -0.6044948441604002f, - -0.6043905631005698f, - -0.6042862716846704f, - -0.6041819699144884f, - -0.6040776577918121f, - -0.6039733353184285f, - -0.6038690024961249f, - -0.6037646593266882f, - -0.6036603058119081f, - -0.6035559419535717f, - -0.6034515677534673f, - -0.6033471832133825f, - -0.6032427883351076f, - -0.6031383831204303f, - -0.6030339675711399f, - -0.6029295416890247f, - -0.6028251054758753f, - -0.6027206589334806f, - -0.6026162020636302f, - -0.6025117348681134f, - -0.6024072573487214f, - -0.6023027695072438f, - -0.602198271345471f, - -0.6020937628651928f, - -0.6019892440682013f, - -0.601884714956286f, - -0.6017801755312403f, - -0.6016756257948523f, - -0.6015710657489158f, - -0.6014664953952208f, - -0.6013619147355614f, - -0.6012573237717266f, - -0.6011527225055108f, - -0.6010481109387047f, - -0.6009434890731029f, - -0.6008388569104955f, - -0.6007342144526774f, - -0.60062956170144f, - -0.600524898658578f, - -0.6004202253258841f, - -0.600315541705152f, - -0.6002108477981745f, - -0.6001061436067469f, - -0.6000014291326627f, - -0.5998967043777161f, - -0.5997919693437016f, - -0.5996872240324129f, - -0.5995824684456464f, - -0.5994777025851964f, - -0.5993729264528579f, - -0.5992681400504254f, - -0.599163343379696f, - -0.5990585364424645f, - -0.598953719240527f, - -0.5988488917756785f, - -0.5987440540497168f, - -0.5986392060644374f, - -0.598534347821637f, - -0.5984294793231115f, - -0.5983246005706593f, - -0.598219711566076f, - -0.5981148123111609f, - -0.5980099028077087f, - -0.5979049830575192f, - -0.5978000530623885f, - -0.5976951128241168f, - -0.5975901623444995f, - -0.5974852016253368f, - -0.5973802306684259f, - -0.5972752494755676f, - -0.597170258048558f, - -0.5970652563891978f, - -0.5969602444992852f, - -0.5968552223806207f, - -0.5967501900350033f, - -0.5966451474642326f, - -0.5965400946701077f, - -0.5964350316544302f, - -0.5963299584189996f, - -0.5962248749656162f, - -0.5961197812960799f, - -0.596014677412193f, - -0.5959095633157556f, - -0.5958044390085688f, - -0.5956993044924332f, - -0.5955941597691516f, - -0.5954890048405251f, - -0.5953838397083554f, - -0.5952786643744437f, - -0.5951734788405935f, - -0.5950682831086066f, - -0.5949630771802855f, - -0.594857861057432f, - -0.5947526347418506f, - -0.5946473982353434f, - -0.5945421515397137f, - -0.5944368946567649f, - -0.5943316275882996f, - -0.5942263503361234f, - -0.5941210629020384f, - -0.5940157652878508f, - -0.5939104574953622f, - -0.5938051395263791f, - -0.5936998113827047f, - -0.5935944730661458f, - -0.5934891245785046f, - -0.5933837659215881f, - -0.5932783970972005f, - -0.5931730181071494f, - -0.5930676289532373f, - -0.5929622296372724f, - -0.5928568201610591f, - -0.5927514005264051f, - -0.592645970735116f, - -0.5925405307889983f, - -0.592435080689858f, - -0.5923296204395033f, - -0.5922241500397406f, - -0.5921186694923771f, - -0.5920131787992194f, - -0.5919076779620767f, - -0.5918021669827549f, - -0.5916966458630645f, - -0.5915911146048103f, - -0.591485573209803f, - -0.5913800216798495f, - -0.5912744600167604f, - -0.5911688882223419f, - -0.5910633062984049f, - -0.5909577142467577f, - -0.5908521120692098f, - -0.5907464997675699f, - -0.590640877343649f, - -0.5905352447992562f, - -0.5904296021362009f, - -0.5903239493562946f, - -0.5902182864613468f, - -0.5901126134531682f, - -0.5900069303335687f, - -0.5899012371043605f, - -0.5897955337673539f, - -0.5896898203243603f, - -0.5895840967771901f, - -0.5894783631276573f, - -0.5893726193775705f, - -0.5892668655287437f, - -0.5891611015829877f, - -0.5890553275421162f, - -0.5889495434079407f, - -0.5888437491822739f, - -0.5887379448669279f, - -0.5886321304637169f, - -0.5885263059744533f, - -0.5884204714009506f, - -0.5883146267450213f, - -0.5882087720084805f, - -0.5881029071931414f, - -0.5879970323008178f, - -0.5878911473333231f, - -0.5877852522924734f, - -0.5876793471800812f, - -0.5875734319979637f, - -0.5874675067479328f, - -0.5873615714318056f, - -0.5872556260513957f, - -0.5871496706085209f, - -0.5870437051049935f, - -0.5869377295426317f, - -0.5868317439232497f, - -0.586725748248665f, - -0.5866197425206932f, - -0.5865137267411504f, - -0.5864077009118528f, - -0.5863016650346183f, - -0.5861956191112632f, - -0.5860895631436045f, - -0.5859834971334595f, - -0.585877421082645f, - -0.5857713349929797f, - -0.585665238866281f, - -0.5855591327043664f, - -0.5854530165090538f, - -0.5853468902821625f, - -0.5852407540255105f, - -0.5851346077409161f, - -0.5850284514301977f, - -0.5849222850951755f, - -0.584816108737668f, - -0.5847099223594945f, - -0.5846037259624737f, - -0.5844975195484267f, - -0.5843913031191725f, - -0.5842850766765313f, - -0.5841788402223225f, - -0.5840725937583677f, - -0.5839663372864862f, - -0.5838600708085007f, - -0.5837537943262291f, - -0.5836475078414948f, - -0.5835412113561173f, - -0.5834349048719202f, - -0.5833285883907222f, - -0.5832222619143472f, - -0.5831159254446157f, - -0.5830095789833516f, - -0.5829032225323745f, - -0.5827968560935088f, - -0.5826904796685758f, - -0.5825840932593995f, - -0.5824776968678023f, - -0.582371290495607f, - -0.5822648741446363f, - -0.582158447816715f, - -0.5820520115136659f, - -0.581945565237313f, - -0.5818391089894792f, - -0.5817326427719902f, - -0.5816261665866695f, - -0.5815196804353416f, - -0.5814131843198305f, - -0.5813066782419621f, - -0.5812001622035609f, - -0.5810936362064518f, - -0.5809871002524604f, - -0.5808805543434112f, - -0.5807739984811314f, - -0.580667432667446f, - -0.580560856904181f, - -0.5804542711931618f, - -0.5803476755362164f, - -0.5802410699351694f, - -0.5801344543918501f, - -0.580027828908082f, - -0.5799211934856946f, - -0.5798145481265135f, - -0.5797078928323681f, - -0.5796012276050833f, - -0.5794945524464886f, - -0.5793878673584106f, - -0.5792811723426795f, - -0.5791744674011207f, - -0.5790677525355644f, - -0.578961027747838f, - -0.5788542930397714f, - -0.578747548413193f, - -0.5786407938699316f, - -0.5785340294118159f, - -0.5784272550406766f, - -0.5783204707583426f, - -0.5782136765666435f, - -0.5781068724674086f, - -0.5780000584624693f, - -0.577893234553655f, - -0.5777864007427965f, - -0.5776795570317232f, - -0.5775727034222677f, - -0.5774658399162599f, - -0.5773589665155309f, - -0.5772520832219111f, - -0.5771451900372337f, - -0.5770382869633295f, - -0.57693137400203f, - -0.5768244511551666f, - -0.5767175184245726f, - -0.57661057581208f, - -0.5765036233195209f, - -0.5763966609487271f, - -0.5762896887015331f, - -0.5761827065797709f, - -0.576075714585273f, - -0.5759687127198747f, - -0.5758617009854068f, - -0.575754679383705f, - -0.5756476479166014f, - -0.5755406065859324f, - -0.5754335553935293f, - -0.5753264943412282f, - -0.5752194234308624f, - -0.5751123426642679f, - -0.5750052520432788f, - -0.57489815156973f, - -0.5747910412454561f, - -0.5746839210722936f, - -0.5745767910520774f, - -0.5744696511866431f, - -0.5743625014778259f, - -0.574255341927463f, - -0.57414817253739f, - -0.5740409933094431f, - -0.5739338042454583f, - -0.5738266053472735f, - -0.573719396616724f, - -0.5736121780556492f, - -0.5735049496658832f, - -0.5733977114492655f, - -0.5732904634076323f, - -0.5731832055428233f, - -0.5730759378566735f, - -0.572968660351023f, - -0.5728613730277087f, - -0.5727540758885709f, - -0.5726467689354453f, - -0.5725394521701727f, - -0.5724321255945913f, - -0.5723247892105393f, - -0.5722174430198574f, - -0.5721100870243844f, - -0.5720027212259594f, - -0.5718953456264216f, - -0.5717879602276124f, - -0.5716805650313709f, - -0.5715731600395373f, - -0.5714657452539513f, - -0.571358320676455f, - -0.5712508863088882f, - -0.5711434421530918f, - -0.571035988210906f, - -0.5709285244841735f, - -0.5708210509747351f, - -0.5707135676844322f, - -0.5706060746151057f, - -0.5704985717685991f, - -0.5703910591467536f, - -0.5702835367514113f, - -0.570176004584414f, - -0.5700684626476056f, - -0.5699609109428273f, - -0.5698533494719243f, - -0.5697457782367367f, - -0.5696381972391098f, - -0.5695306064808856f, - -0.5694230059639097f, - -0.569315395690023f, - -0.5692077756610716f, - -0.5691001458788979f, - -0.5689925063453485f, - -0.5688848570622648f, - -0.5687771980314934f, - -0.5686695292548776f, - -0.5685618507342639f, - -0.5684541624714964f, - -0.5683464644684204f, - -0.5682387567268806f, - -0.568131039248724f, - -0.5680233120357955f, - -0.567915575089941f, - -0.5678078284130057f, - -0.5677000720068375f, - -0.5675923058732819f, - -0.5674845300141855f, - -0.5673767444313942f, - -0.5672689491267565f, - -0.5671611441021186f, - -0.5670533293593276f, - -0.5669455049002311f, - -0.5668376707266758f, - -0.5667298268405109f, - -0.5666219732435835f, - -0.5665141099377417f, - -0.5664062369248329f, - -0.566298354206707f, - -0.5661904617852118f, - -0.566082559662196f, - -0.5659746478395077f, - -0.5658667263189975f, - -0.565758795102513f, - -0.565650854191906f, - -0.5655429035890228f, - -0.5654349432957156f, - -0.5653269733138326f, - -0.5652189936452262f, - -0.5651110042917434f, - -0.5650030052552372f, - -0.5648949965375563f, - -0.5647869781405536f, - -0.5646789500660773f, - -0.5645709123159803f, - -0.5644628648921126f, - -0.5643548077963271f, - -0.5642467410304742f, - -0.5641386645964059f, - -0.5640305784959734f, - -0.5639224827310299f, - -0.563814377303427f, - -0.5637062622150171f, - -0.563598137467652f, - -0.5634900030631858f, - -0.5633818590034706f, - -0.5632737052903594f, - -0.5631655419257048f, - -0.5630573689113615f, - -0.5629491862491822f, - -0.5628409939410207f, - -0.5627327919887302f, - -0.5626245803941661f, - -0.5625163591591816f, - -0.5624081282856315f, - -0.5622998877753692f, - -0.5621916376302509f, - -0.5620833778521309f, - -0.5619751084428634f, - -0.5618668294043055f, - -0.56175854073831f, - -0.5616502424467342f, - -0.5615419345314326f, - -0.5614336169942632f, - -0.561325289837079f, - -0.5612169530617382f, - -0.5611086066700959f, - -0.5610002506640106f, - -0.5608918850453362f, - -0.5607835098159315f, - -0.5606751249776522f, - -0.5605667305323568f, - -0.560458326481902f, - -0.5603499128281451f, - -0.5602414895729431f, - -0.5601330567181553f, - -0.5600246142656389f, - -0.559916162217252f, - -0.5598077005748522f, - -0.5596992293402995f, - -0.5595907485154517f, - -0.5594822581021675f, - -0.5593737581023053f, - -0.5592652485177255f, - -0.5591567293502862f, - -0.5590482006018487f, - -0.5589396622742699f, - -0.5588311143694118f, - -0.5587225568891327f, - -0.5586139898352951f, - -0.5585054132097562f, - -0.5583968270143786f, - -0.5582882312510223f, - -0.5581796259215474f, - -0.5580710110278159f, - -0.5579623865716885f, - -0.5578537525550262f, - -0.55774510897969f, - -0.5576364558475427f, - -0.5575277931604454f, - -0.55741912092026f, - -0.5573104391288478f, - -0.5572017477880725f, - -0.5570930468997959f, - -0.5569843364658803f, - -0.556875616488188f, - -0.556766886968583f, - -0.5566581479089279f, - -0.5565493993110858f, - -0.5564406411769194f, - -0.5563318735082937f, - -0.5562230963070716f, - -0.556114309575117f, - -0.5560055133142933f, - -0.555896707526466f, - -0.5557878922134988f, - -0.5556790673772563f, - -0.5555702330196022f, - -0.5554613891424031f, - -0.5553525357475224f, - -0.5552436728368275f, - -0.5551348004121809f, - -0.5550259184754501f, - -0.5549170270284994f, - -0.5548081260731969f, - -0.5546992156114054f, - -0.5545902956449936f, - -0.5544813661758262f, - -0.5543724272057718f, - -0.5542634787366941f, - -0.5541545207704622f, - -0.5540455533089417f, - -0.553936576354001f, - -0.5538275899075066f, - -0.5537185939713262f, - -0.5536095885473264f, - -0.5535005736373767f, - -0.5533915492433442f, - -0.553282515367097f, - -0.5531734720105034f, - -0.553064419175431f, - -0.55295535686375f, - -0.5528462850773284f, - -0.5527372038180349f, - -0.5526281130877381f, - -0.5525190128883086f, - -0.5524099032216151f, - -0.5523007840895271f, - -0.5521916554939137f, - -0.5520825174366462f, - -0.5519733699195939f, - -0.5518642129446271f, - -0.5517550465136152f, - -0.5516458706284305f, - -0.551536685290942f, - -0.551427490503023f, - -0.5513182862665413f, - -0.5512090725833706f, - -0.5510998494553806f, - -0.550990616884445f, - -0.5508813748724326f, - -0.5507721234212173f, - -0.5506628625326698f, - -0.5505535922086644f, - -0.5504443124510705f, - -0.5503350232617626f, - -0.5502257246426122f, - -0.5501164165954933f, - -0.5500070991222782f, - -0.5498977722248402f, - -0.5497884359050516f, - -0.5496790901647873f, - -0.5495697350059204f, - -0.5494603704303246f, - -0.549350996439873f, - -0.5492416130364413f, - -0.5491322202219028f, - -0.5490228179981321f, - -0.5489134063670031f, - -0.5488039853303919f, - -0.5486945548901726f, - -0.5485851150482204f, - -0.5484756658064097f, - -0.5483662071666173f, - -0.5482567391307183f, - -0.548147261700588f, - -0.5480377748781025f, - -0.547928278665137f, - -0.5478187730635694f, - -0.5477092580752749f, - -0.5475997337021304f, - -0.5474901999460116f, - -0.5473806568087969f, - -0.5472711042923617f, - -0.5471615423985856f, - -0.5470519711293427f, - -0.5469423904865128f, - -0.5468328004719721f, - -0.5467232010876006f, - -0.5466135923352733f, - -0.5465039742168705f, - -0.5463943467342689f, - -0.5462847098893486f, - -0.5461750636839874f, - -0.546065408120064f, - -0.5459557431994566f, - -0.5458460689240459f, - -0.5457363852957101f, - -0.5456266923163289f, - -0.545516989987781f, - -0.5454072783119475f, - -0.5452975572907076f, - -0.5451878269259415f, - -0.5450780872195284f, - -0.5449683381733504f, - -0.5448585797892864f, - -0.5447488120692193f, - -0.544639035015027f, - -0.5445292486285928f, - -0.5444194529117968f, - -0.5443096478665208f, - -0.5441998334946452f, - -0.5440900097980531f, - -0.5439801767786259f, - -0.5438703344382452f, - -0.5437604827787925f, - -0.5436506218021515f, - -0.5435407515102041f, - -0.543430871904832f, - -0.5433209829879195f, - -0.5432110847613487f, - -0.5431011772270027f, - -0.542991260386764f, - -0.5428813342425175f, - -0.542771398796146f, - -0.5426614540495333f, - -0.5425515000045624f, - -0.5424415366631196f, - -0.542331564027086f, - -0.5422215820983485f, - -0.5421115908787899f, - -0.5420015903702964f, - -0.541891580574752f, - -0.5417815614940418f, - -0.5416715331300502f, - -0.5415614954846639f, - -0.5414514485597678f, - -0.5413413923572472f, - -0.5412313268789876f, - -0.541121252126876f, - -0.541011168102798f, - -0.5409010748086398f, - -0.540790972246287f, - -0.5406808604176278f, - -0.5405707393245474f, - -0.5404606089689349f, - -0.5403504693526743f, - -0.5402403204776552f, - -0.5401301623457635f, - -0.5400199949588887f, - -0.5399098183189158f, - -0.5397996324277348f, - -0.5396894372872322f, - -0.5395792328992975f, - -0.5394690192658186f, - -0.5393587963886837f, - -0.5392485642697815f, - -0.5391383229110002f, - -0.53902807231423f, - -0.5389178124813595f, - -0.5388075434142778f, - -0.5386972651148737f, - -0.5385869775850383f, - -0.5384766808266606f, - -0.5383663748416303f, - -0.5382560596318369f, - -0.5381457351991721f, - -0.5380354015455255f, - -0.5379250586727876f, - -0.5378147065828486f, - -0.5377043452776005f, - -0.5375939747589337f, - -0.5374835950287393f, - -0.5373732060889082f, - -0.537262807941333f, - -0.5371524005879047f, - -0.5370419840305152f, - -0.5369315582710555f, - -0.5368211233114195f, - -0.5367106791534978f, - -0.5366002257991851f, - -0.536489763250371f, - -0.5363792915089505f, - -0.536268810576815f, - -0.5361583204558599f, - -0.5360478211479752f, - -0.5359373126550566f, - -0.5358267949789963f, - -0.5357162681216902f, - -0.5356057320850289f, - -0.5354951868709089f, - -0.5353846324812229f, - -0.5352740689178664f, - -0.5351634961827335f, - -0.5350529142777187f, - -0.5349423232047159f, - -0.5348317229656218f, - -0.5347211135623304f, - -0.5346104949967374f, - -0.5344998672707372f, - -0.5343892303862269f, - -0.5342785843451014f, - -0.5341679291492568f, - -0.5340572648005883f, - -0.5339465913009936f, - -0.5338359086523683f, - -0.5337252168566089f, - -0.5336145159156122f, - -0.5335038058312741f, - -0.5333930866054931f, - -0.5332823582401658f, - -0.5331716207371893f, - -0.5330608740984604f, - -0.5329501183258781f, - -0.5328393534213388f, - -0.5327285793867427f, - -0.5326177962239848f, - -0.5325070039349655f, - -0.5323962025215818f, - -0.5322853919857347f, - -0.5321745723293195f, - -0.5320637435542376f, - -0.5319529056623865f, - -0.5318420586556675f, - -0.531731202535977f, - -0.5316203373052169f, - -0.531509462965285f, - -0.5313985795180829f, - -0.5312876869655097f, - -0.5311767853094654f, - -0.5310658745518498f, - -0.5309549546945646f, - -0.5308440257395097f, - -0.5307330876885858f, - -0.530622140543693f, - -0.5305111843067342f, - -0.5304002189796093f, - -0.5302892445642201f, - -0.5301782610624671f, - -0.5300672684762536f, - -0.5299562668074808f, - -0.5298452560580504f, - -0.5297342362298639f, - -0.5296232073248253f, - -0.5295121693448359f, - -0.5294011222917987f, - -0.5292900661676155f, - -0.5291790009741908f, - -0.5290679267134268f, - -0.528956843387226f, - -0.5288457509974935f, - -0.5287346495461319f, - -0.5286235390350449f, - -0.5285124194661356f, - -0.5284012908413103f, - -0.5282901531624701f, - -0.5281790064315216f, - -0.5280678506503679f, - -0.5279566858209156f, - -0.5278455119450667f, - -0.5277343290247282f, - -0.5276231370618039f, - -0.5275119360582003f, - -0.5274007260158223f, - -0.5272895069365754f, - -0.5271782788223645f, - -0.5270670416750968f, - -0.5269557954966778f, - -0.5268445402890137f, - -0.5267332760540099f, - -0.5266220027935745f, - -0.5265107205096133f, - -0.5263994292040333f, - -0.5262881288787404f, - -0.5261768195356433f, - -0.526065501176648f, - -0.5259541738036638f, - -0.5258428374185955f, - -0.5257314920233529f, - -0.5256201376198425f, - -0.5255087742099747f, - -0.5253974017956543f, - -0.5252860203787922f, - -0.5251746299612954f, - -0.5250632305450745f, - -0.5249518221320356f, - -0.5248404047240899f, - -0.5247289783231456f, - -0.5246175429311112f, - -0.5245060985498977f, - -0.5243946451814139f, - -0.5242831828275696f, - -0.5241717114902738f, - -0.5240602311714381f, - -0.5239487418729718f, - -0.5238372435967855f, - -0.5237257363447887f, - -0.5236142201188938f, - -0.5235026949210105f, - -0.5233911607530501f, - -0.5232796176169228f, - -0.5231680655145413f, - -0.5230565044478164f, - -0.5229449344186596f, - -0.5228333554289819f, - -0.5227217674806965f, - -0.522610170575715f, - -0.5224985647159495f, - -0.5223869499033112f, - -0.5222753261397146f, - -0.5221636934270707f, - -0.5220520517672943f, - -0.5219404011622957f, - -0.52182874161399f, - -0.5217170731242889f, - -0.5216053956951084f, - -0.5214937093283588f, - -0.5213820140259562f, - -0.5212703097898128f, - -0.5211585966218449f, - -0.5210468745239639f, - -0.5209351434980861f, - -0.5208234035461248f, - -0.5207116546699957f, - -0.5205998968716132f, - -0.5204881301528921f, - -0.5203763545157467f, - -0.5202645699620939f, - -0.5201527764938482f, - -0.5200409741129252f, - -0.5199291628212398f, - -0.5198173426207094f, - -0.5197055135132493f, - -0.5195936755007757f, - -0.5194818285852049f, - -0.5193699727684524f, - -0.5192581080524366f, - -0.5191462344390733f, - -0.5190343519302796f, - -0.5189224605279716f, - -0.5188105602340684f, - -0.5186986510504863f, - -0.5185867329791429f, - -0.5184748060219553f, - -0.5183628701808427f, - -0.5182509254577223f, - -0.5181389718545123f, - -0.5180270093731303f, - -0.5179150380154962f, - -0.5178030577835271f, - -0.5176910686791439f, - -0.5175790707042627f, - -0.5174670638608047f, - -0.5173550481506874f, - -0.517243023575833f, - -0.5171309901381573f, - -0.5170189478395827f, - -0.5169068966820273f, - -0.5167948366674127f, - -0.5166827677976581f, - -0.5165706900746839f, - -0.5164586035004097f, - -0.5163465080767576f, - -0.5162344038056477f, - -0.5161222906890007f, - -0.516010168728737f, - -0.515898037926779f, - -0.5157858982850476f, - -0.5156737498054643f, - -0.5155615924899497f, - -0.5154494263404273f, - -0.5153372513588184f, - -0.5152250675470447f, - -0.515112874907028f, - -0.515000673440692f, - -0.5148884631499587f, - -0.5147762440367507f, - -0.5146640161029901f, - -0.5145517793506013f, - -0.5144395337815068f, - -0.5143272793976298f, - -0.5142150162008939f, - -0.5141027441932219f, - -0.513990463376539f, - -0.5138781737527676f, - -0.513765875323834f, - -0.5136535680916594f, - -0.5135412520581705f, - -0.5134289272252902f, - -0.5133165935949454f, - -0.513204251169058f, - -0.5130918999495552f, - -0.5129795399383604f, - -0.5128671711374014f, - -0.5127547935486005f, - -0.5126424071738854f, - -0.5125300120151806f, - -0.5124176080744131f, - -0.5123051953535083f, - -0.5121927738543924f, - -0.5120803435789909f, - -0.5119679045292319f, - -0.5118554567070411f, - -0.5117430001143454f, - -0.5116305347530709f, - -0.5115180606251462f, - -0.5114055777324975f, - -0.5112930860770526f, - -0.511180585660738f, - -0.5110680764854829f, - -0.5109555585532136f, - -0.5108430318658604f, - -0.5107304964253483f, - -0.510617952233608f, - -0.5105053992925669f, - -0.5103928376041538f, - -0.5102802671702964f, - -0.5101676879929254f, - -0.5100551000739688f, - -0.5099425034153552f, - -0.5098298980190152f, - -0.5097172838868778f, - -0.5096046610208723f, - -0.5094920294229279f, - -0.509379389094976f, - -0.5092667400389459f, - -0.5091540822567677f, - -0.5090414157503712f, - -0.5089287405216882f, - -0.5088160565726488f, - -0.5087033639051838f, - -0.5085906625212233f, - -0.5084779524226999f, - -0.5083652336115442f, - -0.5082525060896875f, - -0.5081397698590607f, - -0.508027024921597f, - -0.5079142712792275f, - -0.5078015089338841f, - -0.5076887378874984f, - -0.507575958142004f, - -0.5074631696993327f, - -0.507350372561417f, - -0.507237566730189f, - -0.5071247522075832f, - -0.5070119289955309f, - -0.5068990970959678f, - -0.5067862565108241f, - -0.5066734072420355f, - -0.5065605492915342f, - -0.5064476826612563f, - -0.5063348073531326f, - -0.5062219233690995f, - -0.5061090307110898f, - -0.5059961293810402f, - -0.505883219380882f, - -0.5057703007125522f, - -0.5056573733779843f, - -0.5055444373791147f, - -0.5054314927178776f, - -0.5053185393962085f, - -0.505205577416042f, - -0.5050926067793151f, - -0.504979627487963f, - -0.5048666395439213f, - -0.5047536429491262f, - -0.5046406377055129f, - -0.5045276238150194f, - -0.5044146012795814f, - -0.5043015701011355f, - -0.5041885302816177f, - -0.5040754818229664f, - -0.5039624247271178f, - -0.5038493589960094f, - -0.5037362846315774f, - -0.503623201635761f, - -0.5035101100104973f, - -0.5033970097577237f, - -0.5032839008793777f, - -0.5031707833773987f, - -0.5030576572537235f, - -0.5029445225102929f, - -0.5028313791490422f, - -0.5027182271719124f, - -0.5026050665808408f, - -0.5024918973777687f, - -0.5023787195646322f, - -0.5022655331433729f, - -0.5021523381159284f, - -0.502039134484241f, - -0.501925922250247f, - -0.5018127014158887f, - -0.5016994719831046f, - -0.5015862339538364f, - -0.5014729873300235f, - -0.5013597321136065f, - -0.5012464683065252f, - -0.5011331959107218f, - -0.5010199149281365f, - -0.5009066253607103f, - -0.5007933272103836f, - -0.5006800204790993f, - -0.5005667051687982f, - -0.5004533812814218f, - -0.5003400488189111f, - -0.5002267077832097f, - -0.5001133581762587f, - -0.5000000000000004f, - -0.4998866332563765f, - -0.49977325794733096f, - -0.4996598740748056f, - -0.49954648164074333f, - -0.4994330806470871f, - -0.49931967109577907f, - -0.49920625298876425f, - -0.4990928263279851f, - -0.4989793911153852f, - -0.4988659473529075f, - -0.4987524950424973f, - -0.4986390341860971f, - -0.4985255647856533f, - -0.4984120868431071f, - -0.4982986003604052f, - -0.4981851053394906f, - -0.4980716017823104f, - -0.4979580896908063f, - -0.49784456906692565f, - -0.497731039912612f, - -0.49761750222981227f, - -0.49750395602047104f, - -0.49739040128653395f, - -0.49727683802994593f, - -0.4971632662526544f, - -0.49704968595660465f, - -0.49693609714374276f, - -0.4968224998160144f, - -0.49670889397536744f, - -0.4965952796237478f, - -0.4964816567631022f, - -0.4963680253953767f, - -0.49625438552252005f, - -0.4961407371464778f, - -0.49602708026919956f, - -0.49591341489262974f, - -0.4957997410187184f, - -0.49568605864941234f, - -0.49557236778665964f, - -0.4954586684324075f, - -0.4953449605886057f, - -0.49523124425720183f, - -0.4951175194401444f, - -0.4950037861393813f, - -0.49489004435686273f, - -0.49477629409453705f, - -0.4946625353543524f, - -0.49454876813825965f, - -0.4944349924482073f, - -0.494321208286145f, - -0.4942074156540216f, - -0.49409361455378914f, - -0.4939798049873945f, - -0.4938659869567902f, - -0.49375216046392484f, - -0.49363832551075115f, - -0.49352448209921657f, - -0.49341063023127407f, - -0.49329676990887295f, - -0.4931829011339658f, - -0.49306902390850277f, - -0.49295513823443526f, - -0.4928412441137139f, - -0.4927273415482917f, - -0.49261343054011963f, - -0.49249951109114953f, - -0.49238558320333253f, - -0.4922716468786224f, - -0.49215770211896986f, - -0.4920437489263295f, - -0.49192978730265097f, - -0.4918158172498892f, - -0.4917018387699955f, - -0.49158785186492515f, - -0.49147385653662823f, - -0.49135985278706035f, - -0.49124584061817334f, - -0.4911318200319231f, - -0.49101779103026033f, - -0.49090375361514105f, - -0.4907897077885179f, - -0.4906756535523464f, - -0.49056159090858015f, - -0.49044751985917356f, - -0.49033344040608123f, - -0.4902193525512571f, - -0.4901052562966576f, - -0.4899911516442369f, - -0.4898770385959502f, - -0.48976291715375203f, - -0.4896487873195993f, - -0.48953464909544697f, - -0.48942050248325064f, - -0.4893063474849655f, - -0.489192184102549f, - -0.4890780123379566f, - -0.4889638321931446f, - -0.48884964367006867f, - -0.4887354467706869f, - -0.48862124149695535f, - -0.4885070278508308f, - -0.4883928058342695f, - -0.4882785754492302f, - -0.48816433669766945f, - -0.48805008958154467f, - -0.48793583410281266f, - -0.48782157026343276f, - -0.4877072980653612f, - -0.4875930175105585f, - -0.48747872860097957f, - -0.4873644313385851f, - -0.487250125725332f, - -0.4871358117631812f, - -0.4870214894540883f, - -0.4869071588000145f, - -0.48679281980291733f, - -0.4866784724647575f, - -0.4865641167874935f, - -0.48644975277308483f, - -0.4863353804234902f, - -0.4862209997406711f, - -0.4861066107265865f, - -0.4859922133831964f, - -0.48587780771246036f, - -0.48576339371634003f, - -0.4856489713967952f, - -0.4855345407557865f, - -0.4854201017952738f, - -0.4853056545172195f, - -0.48519119892358403f, - -0.4850767350163284f, - -0.484962262797414f, - -0.48484778226880143f, - -0.4847332934324539f, - -0.48461879629033233f, - -0.4845042908443986f, - -0.48438977709661396f, - -0.4842752550489422f, - -0.4841607247033447f, - -0.484046186061784f, - -0.4839316391262219f, - -0.48381708389862266f, - -0.4837025203809477f, - -0.4835879485751622f, - -0.4834733684832263f, - -0.48335878010710565f, - -0.48324418344876213f, - -0.4831295785101616f, - -0.4830149652932647f, - -0.48290034380003766f, - -0.4827857140324429f, - -0.48267107599244696f, - -0.48255642968201096f, - -0.48244177510310166f, - -0.4823271122576821f, - -0.48221244114771855f, - -0.4820977617751751f, - -0.4819830741420168f, - -0.4818683782502079f, - -0.4817536741017153f, - -0.4816389616985037f, - -0.48152424104253855f, - -0.48140951213578487f, - -0.48129477498021f, - -0.4811800295777792f, - -0.48106527593045867f, - -0.4809505140402138f, - -0.4808357439090125f, - -0.48072096553882065f, - -0.48060617893160495f, - -0.48049138408933145f, - -0.4803765810139687f, - -0.48026176970748297f, - -0.48014695017184156f, - -0.4800321224090111f, - -0.4799172864209607f, - -0.4798024422096573f, - -0.4796875897770678f, - -0.4795727291251619f, - -0.4794578602559068f, - -0.47934298317127083f, - -0.4792280978732215f, - -0.47911320436372984f, - -0.47899830264476123f, - -0.47888339271828695f, - -0.47876847458627425f, - -0.4786535482506947f, - -0.47853861371351436f, - -0.4784236709767049f, - -0.47830872004223435f, - -0.47819376091207383f, - -0.47807879358819244f, - -0.47796381807256005f, - -0.47784883436714604f, - -0.4777338424739221f, - -0.47761884239485786f, - -0.4775038341319237f, - -0.4773888176870897f, - -0.477273793062328f, - -0.47715876025960874f, - -0.47704371928090306f, - -0.4769286701281814f, - -0.47681361280341655f, - -0.4766985473085785f, - -0.47658347364564124f, - -0.4764683918165733f, - -0.47635330182334895f, - -0.47623820366793873f, - -0.47612309735231706f, - -0.47600798287845325f, - -0.475892860248322f, - -0.47577772946389435f, - -0.47566259052714543f, - -0.475547443440045f, - -0.47543228820456834f, - -0.4753171248226879f, - -0.4752019532963761f, - -0.47508677362760804f, - -0.47497158581835647f, - -0.4748563898705951f, - -0.4747411857862969f, - -0.47462597356743763f, - -0.4745107532159905f, - -0.47439552473392976f, - -0.47428028812322914f, - -0.4741650433858647f, - -0.4740497905238103f, - -0.47393452953904086f, - -0.47381926043353045f, - -0.4737039832092559f, - -0.47358869786819147f, - -0.47347340441231267f, - -0.47335810284359425f, - -0.4732427931640134f, - -0.4731274753755451f, - -0.4730121494801654f, - -0.4728968154798495f, - -0.47278147337657517f, - -0.47266612317231727f, - -0.4725507648690546f, - -0.4724353984687607f, - -0.47232002397341466f, - -0.4722046413849918f, - -0.47208925070547153f, - -0.47197385193682795f, - -0.47185844508104074f, - -0.47174303014008573f, - -0.4716276071159429f, - -0.4715121760105869f, - -0.4713967368259979f, - -0.47128128956415244f, - -0.4711658342270302f, - -0.4710503708166086f, - -0.4709348993348662f, - -0.4708194197837807f, - -0.4707039321653325f, - -0.47058843648149956f, - -0.4704729327342609f, - -0.47035742092559485f, - -0.4702419010574822f, - -0.4701263731319017f, - -0.47001083715083275f, - -0.4698952931162551f, - -0.46977974103014775f, - -0.46966418089449224f, - -0.4695486127112679f, - -0.46943303648245494f, - -0.46931745221003296f, - -0.46920185989598395f, - -0.46908625954228783f, - -0.46897065115092545f, - -0.4688550347238768f, - -0.46873941026312466f, - -0.4686237777706493f, - -0.4685081372484321f, - -0.4683924886984538f, - -0.4682768321226975f, - -0.46816116752314346f, - -0.4680454949017758f, - -0.4679298142605735f, - -0.467814125601521f, - -0.4676984289265991f, - -0.4675827242377925f, - -0.4674670115370807f, - -0.4673512908264488f, - -0.4672355621078779f, - -0.4671198253833527f, - -0.4670040806548555f, - -0.4668883279243695f, - -0.4667725671938774f, - -0.46665679846536423f, - -0.4665410217408129f, - -0.46642523702220723f, - -0.4663094443115303f, - -0.4661936436107678f, - -0.4660778349219032f, - -0.4659620182469208f, - -0.4658461935878043f, - -0.46573036094653997f, - -0.4656145203251117f, - -0.46549867172550435f, - -0.4653828151497023f, - -0.46526695059969225f, - -0.46515107807745865f, - -0.465035197584987f, - -0.4649193091242621f, - -0.4648034126972712f, - -0.4646875083059994f, - -0.46457159595243275f, - -0.4644556756385573f, - -0.46433974736635847f, - -0.46422381113782435f, - -0.46410786695493983f, - -0.463991914819694f, - -0.46387595473407045f, - -0.4637599867000585f, - -0.46364401071964373f, - -0.4635280267948157f, - -0.46341203492755856f, - -0.4632960351198621f, - -0.46318002737371256f, - -0.46306401169109995f, - -0.462947988074009f, - -0.4628319565244301f, - -0.46271591704434994f, - -0.4625998696357583f, - -0.4624838143006429f, - -0.46236775104099226f, - -0.46225167985879434f, - -0.46213560075603954f, - -0.4620195137347161f, - -0.46190341879681307f, - -0.461787315944319f, - -0.46167120517922483f, - -0.46155508650351845f, - -0.461438959919192f, - -0.461322825428232f, - -0.4612066830326308f, - -0.4610905327343769f, - -0.4609743745354629f, - -0.46085820843787595f, - -0.4607420344436089f, - -0.4606258525546515f, - -0.46050966277299465f, - -0.4603934651006283f, - -0.46027725953954507f, - -0.4601610460917354f, - -0.46004482475918973f, - -0.45992859554390103f, - -0.4598123584478601f, - -0.45969611347305867f, - -0.4595798606214877f, - -0.4594635998951408f, - -0.45934733129600924f, - -0.4592310548260852f, - -0.4591147704873604f, - -0.45899847828182955f, - -0.45888217821148225f, - -0.45876587027831356f, - -0.4586495544843149f, - -0.45853323083148073f, - -0.4584168993218036f, - -0.45830055995727664f, - -0.4581842127398927f, - -0.4580678576716468f, - -0.45795149475453195f, - -0.457835123990542f, - -0.45771874538167f, - -0.4576023589299118f, - -0.4574859646372608f, - -0.4573695625057114f, - -0.4572531525372573f, - -0.45713673473389477f, - -0.45702030909761704f, - -0.4569038756304213f, - -0.4567874343342995f, - -0.45667098521124927f, - -0.45655452826326426f, - -0.45643806349234234f, - -0.4563215909004759f, - -0.4562051104896631f, - -0.45608862226189817f, - -0.45597212621917954f, - -0.4558556223635001f, - -0.4557391106968585f, - -0.4556225912212496f, - -0.4555060639386715f, - -0.45538952885112f, - -0.45527298596059196f, - -0.45515643526908434f, - -0.45503987677859337f, - -0.45492331049111784f, - -0.45480673640865427f, - -0.4546901545332001f, - -0.45457356486675227f, - -0.45445696741131f, - -0.4543403621688703f, - -0.45422374914143127f, - -0.4541071283309902f, - -0.45399049973954697f, - -0.4538738633690992f, - -0.4537572192216454f, - -0.45364056729918345f, - -0.4535239076037137f, - -0.4534072401372343f, - -0.4532905649017444f, - -0.4531738818992423f, - -0.45305719113172893f, - -0.4529404926012023f, - -0.45282378630966413f, - -0.4527070722591112f, - -0.4525903504515457f, - -0.45247362088896603f, - -0.4523568835733747f, - -0.4522401385067688f, - -0.45212338569115107f, - -0.45200662512852047f, - -0.45188985682088006f, - -0.45177308077022743f, - -0.4516562969785659f, - -0.451539505447895f, - -0.45142270618021746f, - -0.4513058991775338f, - -0.4511890844418454f, - -0.4510722619751532f, - -0.45095543177946046f, - -0.4508385938567682f, - -0.45072174820907845f, - -0.45060489483839256f, - -0.45048803374671426f, - -0.45037116493604523f, - -0.45025428840838794f, - -0.45013740416574427f, - -0.45002051221011863f, - -0.4499036125435131f, - -0.4497867051679306f, - -0.4496697900853745f, - -0.44955286729784727f, - -0.44943593680735383f, - -0.4493189986158971f, - -0.4492020527254807f, - -0.4490850991381077f, - -0.4489681378557836f, - -0.44885116888051096f, - -0.44873419221429645f, - -0.44861720785914116f, - -0.448500215817052f, - -0.448383216090032f, - -0.4482662086800884f, - -0.4481491935892227f, - -0.4480321708194425f, - -0.4479151403727513f, - -0.4477981022511568f, - -0.4476810564566612f, - -0.4475640029912724f, - -0.4474469418569946f, - -0.44732987305583505f, - -0.447212796589799f, - -0.44709571246089247f, - -0.44697862067112093f, - -0.4468615212224923f, - -0.4467444141170122f, - -0.44662729935668727f, - -0.44651017694352346f, - -0.44639304687952913f, - -0.44627590916671056f, - -0.44615876380707487f, - -0.4460416108026285f, - -0.4459244501553804f, - -0.44580728186733737f, - -0.44569010594050695f, - -0.4455729223768962f, - -0.4454557311785146f, - -0.4453385323473694f, - -0.44522132588546875f, - -0.4451041117948202f, - -0.4449868900774337f, - -0.4448696607353171f, - -0.44475242377047897f, - -0.44463517918492745f, - -0.4445179269806731f, - -0.44440066715972415f, - -0.444283399724089f, - -0.4441661246757786f, - -0.4440488420168017f, - -0.4439315517491679f, - -0.443814253874886f, - -0.44369694839596835f, - -0.44357963531442185f, - -0.4434623146322589f, - -0.44334498635148817f, - -0.4432276504741217f, - -0.44311030700216913f, - -0.4429929559376412f, - -0.4428755972825479f, - -0.44275823103890166f, - -0.4426408572087127f, - -0.44252347579399226f, - -0.4424060867967508f, - -0.4422886902190014f, - -0.4421712860627548f, - -0.44205387433002263f, - -0.441936455022816f, - -0.44181902814314833f, - -0.4417015936930302f, - -0.4415841516744762f, - -0.44146670208949546f, - -0.44134924494010286f, - -0.4412317802283094f, - -0.44111430795613016f, - -0.4409968281255748f, - -0.44087934073865875f, - -0.4407618457973935f, - -0.44064434330379476f, - -0.4405268332598726f, - -0.44040931566764296f, - -0.4402917905291179f, - -0.4401742578463127f, - -0.44005671762124055f, - -0.4399391698559154f, - -0.43982161455235147f, - -0.4397040517125622f, - -0.4395864813385636f, - -0.4394689034323694f, - -0.4393513179959942f, - -0.43923372503145214f, - -0.4391161245407596f, - -0.43899851652593097f, - -0.4388809009889813f, - -0.4387632779319252f, - -0.43864564735677963f, - -0.43852800926555946f, - -0.43841036366028024f, - -0.43829271054295715f, - -0.43817504991560763f, - -0.43805738178024706f, - -0.43793970613889155f, - -0.4378220229935567f, - -0.4377043323462606f, - -0.437586634199019f, - -0.4374689285538486f, - -0.43735121541276556f, - -0.4372334947777884f, - -0.43711576665093255f, - -0.4369980310342178f, - -0.4368802879296582f, - -0.4367625373392737f, - -0.4366447792650804f, - -0.4365270137090983f, - -0.4364092406733422f, - -0.4362914601598324f, - -0.43617367217058556f, - -0.4360558767076214f, - -0.4359380737729577f, - -0.4358202633686128f, - -0.4357024454966047f, - -0.43558462015895366f, - -0.43546678735767785f, - -0.43534894709479627f, - -0.4352310993723273f, - -0.4351132441922918f, - -0.43499538155670847f, - -0.43487751146759673f, - -0.4347596339269756f, - -0.4346417489368663f, - -0.4345238564992881f, - -0.434405956616261f, - -0.43428804928980524f, - -0.43417013452194025f, - -0.4340522123146881f, - -0.43393428267006856f, - -0.4338163455901023f, - -0.4336984010768094f, - -0.43358044913221233f, - -0.4334624897583314f, - -0.43334452295718784f, - -0.43322654873080213f, - -0.4331085670811974f, - -0.4329905780103935f, - -0.4328725815204147f, - -0.4327545776132795f, - -0.4326365662910123f, - -0.4325185475556337f, - -0.43240052140916824f, - -0.432282487853635f, - -0.43216444689105893f, - -0.43204639852346105f, - -0.43192834275286646f, - -0.43181027958129475f, - -0.4316922090107714f, - -0.4315741310433179f, - -0.43145604568095897f, - -0.43133795292571736f, - -0.4312198527796164f, - -0.431101745244679f, - -0.4309836303229304f, - -0.4308655080163938f, - -0.43074737832709303f, - -0.4306292412570516f, - -0.4305110968082952f, - -0.4303929449828475f, - -0.430274785782733f, - -0.4301566192099754f, - -0.4300384452666012f, - -0.4299202639546344f, - -0.4298020752761f, - -0.42968387923302237f, - -0.4295656758274284f, - -0.42944746506134257f, - -0.4293292469367905f, - -0.4292110214557969f, - -0.42909278862038924f, - -0.4289745484325926f, - -0.42885630089443216f, - -0.4287380460079364f, - -0.42861978377512855f, - -0.4285015141980372f, - -0.42838323727868743f, - -0.4282649530191082f, - -0.4281466614213231f, - -0.4280283624873615f, - -0.42791005621924866f, - -0.4277917426190142f, - -0.4276734216886823f, - -0.42755509343028253f, - -0.427436757845841f, - -0.4273184149373869f, - -0.42720006470694727f, - -0.42708170715654986f, - -0.426963342288222f, - -0.42684497010399347f, - -0.42672659060589163f, - -0.42660820379594494f, - -0.42648980967618116f, - -0.4263714082486305f, - -0.426252999515321f, - -0.4261345834782815f, - -0.42601616013954013f, - -0.42589772950112786f, - -0.4257792915650722f, - -0.42566084633340506f, - -0.4255423938081527f, - -0.42542393399134715f, - -0.42530546688501664f, - -0.42518699249119346f, - -0.42506851081190444f, - -0.4249500218491821f, - -0.424831525605056f, - -0.4247130220815564f, - -0.4245945112807132f, - -0.4244759932045585f, - -0.4243574678551223f, - -0.4242389352344348f, - -0.4241203953445285f, - -0.42400184818743386f, - -0.4238832937651821f, - -0.42376473207980375f, - -0.4236461631333321f, - -0.4235275869277978f, - -0.4234090034652328f, - -0.42329041274766804f, - -0.4231718147771373f, - -0.42305320955567177f, - -0.4229345970853038f, - -0.422815977368065f, - -0.42269735040598944f, - -0.42257871620110893f, - -0.4224600747554563f, - -0.4223414260710637f, - -0.4222227701499656f, - -0.42210410699419443f, - -0.4219854366057834f, - -0.4218667589867651f, - -0.4217480741391747f, - -0.42162938206504413f, - -0.4215106827664097f, - -0.42139197624530195f, - -0.4212732625037573f, - -0.4211545415438083f, - -0.4210358133674917f, - -0.4209170779768385f, - -0.4207983353738857f, - -0.4206795855606663f, - -0.4205608285392175f, - -0.4204420643115709f, - -0.42032329287976394f, - -0.42020451424583005f, - -0.4200857284118062f, - -0.41996693537972685f, - -0.4198481351516275f, - -0.41972932772954297f, - -0.4196105131155107f, - -0.41949169131156555f, - -0.41937286231974363f, - -0.419254026142081f, - -0.4191351827806131f, - -0.41901633223737794f, - -0.41889747451441106f, - -0.41877860961374913f, - -0.4186597375374281f, - -0.41854085828748633f, - -0.4184219718659601f, - -0.41830307827488633f, - -0.41818417751630155f, - -0.4180652695922447f, - -0.41794635450475237f, - -0.4178274322558622f, - -0.417708502847611f, - -0.4175895662820383f, - -0.4174706225611804f, - -0.41735167168707776f, - -0.4172327136617654f, - -0.41711374848728394f, - -0.4169947761656704f, - -0.4168757966989655f, - -0.4167568100892049f, - -0.4166378163384298f, - -0.4165188154486774f, - -0.4163998074219893f, - -0.4162807922604013f, - -0.4161617699659553f, - -0.4160427405406889f, - -0.4159237039866434f, - -0.4158046603058576f, - -0.41568560950037126f, - -0.4155665515722235f, - -0.4154474865234559f, - -0.41532841435610796f, - -0.4152093350722198f, - -0.41509024867383104f, - -0.41497115516298383f, - -0.414852054541718f, - -0.4147329468120743f, - -0.41461383197609275f, - -0.414494710035816f, - -0.4143755809932844f, - -0.4142564448505392f, - -0.41413730160962087f, - -0.4140181512725726f, - -0.41389899384143514f, - -0.41377982931825025f, - -0.413660657705059f, - -0.4135414790039049f, - -0.4134222932168293f, - -0.41330310034587436f, - -0.4131839003930825f, - -0.4130646933604953f, - -0.412945479250157f, - -0.41282625806410866f, - -0.4127070298043955f, - -0.4125877944730573f, - -0.4124685520721395f, - -0.41234930260368374f, - -0.4122300460697356f, - -0.41211078247233546f, - -0.41199151181352917f, - -0.41187223409535884f, - -0.4117529493198706f, - -0.4116336574891053f, - -0.4115143586051092f, - -0.411395052669925f, - -0.4112757396855985f, - -0.4111564196541733f, - -0.41103709257769394f, - -0.4109177584582042f, - -0.4107984172977506f, - -0.410679069098377f, - -0.41055971386212853f, - -0.41044035159104947f, - -0.41032098228718666f, - -0.41020160595258387f, - -0.41008222258928906f, - -0.4099628321993445f, - -0.40984343478479834f, - -0.40972403034769483f, - -0.40960461889008243f, - -0.4094852004140039f, - -0.4093657749215079f, - -0.4092463424146399f, - -0.40912690289544645f, - -0.40900745636597324f, - -0.40888800282826854f, - -0.40876854228437837f, - -0.40864907473634887f, - -0.4085296001862287f, - -0.40841011863606413f, - -0.4082906300879026f, - -0.40817113454379056f, - -0.40805163200577727f, - -0.40793212247590943f, - -0.4078126059562349f, - -0.4076930824488008f, - -0.4075735519556574f, - -0.40745401447884977f, - -0.40733447002042844f, - -0.4072149185824402f, - -0.40709536016693515f, - -0.40697579477596113f, - -0.40685622241156677f, - -0.40673664307580015f, - -0.40661705677071186f, - -0.40649746349835014f, - -0.4063778632607642f, - -0.40625825606000254f, - -0.40613864189811627f, - -0.40601902077715407f, - -0.40589939269916564f, - -0.4057797576662f, - -0.4056601156803086f, - -0.4055404667435399f, - -0.4054208108579465f, - -0.40530114802557543f, - -0.4051814782484795f, - -0.4050618015287075f, - -0.4049421178683127f, - -0.4048224272693425f, - -0.4047027297338501f, - -0.40458302526388495f, - -0.40446331386149986f, - -0.4043435955287451f, - -0.40422387026767204f, - -0.4041041380803314f, - -0.40398439896877636f, - -0.40386465293505774f, - -0.4037448999812274f, - -0.4036251401093373f, - -0.40350537332143865f, - -0.40338559961958526f, - -0.4032658190058286f, - -0.40314603148222106f, - -0.4030262370508144f, - -0.40290643571366286f, - -0.40278662747281835f, - -0.40266681233033386f, - -0.40254699028826146f, - -0.40242716134865597f, - -0.4023073255135698f, - -0.4021874827850562f, - -0.402067633165168f, - -0.4019477766559604f, - -0.4018279132594862f, - -0.4017080429777992f, - -0.4015881658129527f, - -0.4014682817670022f, - -0.40134839084200036f, - -0.4012284930400039f, - -0.401108588363064f, - -0.40098867681323763f, - -0.4008687583925778f, - -0.4007488331031417f, - -0.40062890094698095f, - -0.4005089619261531f, - -0.40038901604271154f, - -0.400269063298714f, - -0.40014910369621254f, - -0.40002913723726513f, - -0.39990916392392567f, - -0.3997891837582516f, - -0.39966919674229784f, - -0.3995492028781204f, - -0.39942920216777444f, - -0.3993091946133179f, - -0.39918918021680616f, - -0.3990691589802956f, - -0.3989491309058421f, - -0.39882909599550376f, - -0.3987090542513366f, - -0.3985890056753976f, - -0.3984689502697428f, - -0.39834888803643104f, - -0.39822881897751866f, - -0.39810874309506306f, - -0.3979886603911217f, - -0.39786857086775135f, - -0.39774847452701134f, - -0.3976283713709587f, - -0.3975082614016513f, - -0.39738814462114647f, - -0.39726802103150394f, - -0.39714789063478034f, - -0.3970277534330366f, - -0.3969076094283279f, - -0.39678745862271536f, - -0.39666730101825615f, - -0.39654713661701146f, - -0.39642696542103717f, - -0.39630678743239467f, - -0.39618660265314165f, - -0.39606641108533985f, - -0.39594621273104547f, - -0.3958260075923205f, - -0.39570579567122305f, - -0.3955855769698145f, - -0.39546535149015394f, - -0.39534511923430143f, - -0.3952248802043163f, - -0.39510463440226046f, - -0.3949843818301934f, - -0.3948641224901757f, - -0.3947438563842671f, - -0.39462358351453003f, - -0.3945033038830244f, - -0.3943830174918113f, - -0.3942627243429509f, - -0.39414242443850606f, - -0.39402211778053725f, - -0.3939018043711059f, - -0.3937814842122727f, - -0.393661157306101f, - -0.39354082365465176f, - -0.3934204832599868f, - -0.3933001361241673f, - -0.39317978224925704f, - -0.39305942163731744f, - -0.39293905429041087f, - -0.39281868021059896f, - -0.3926982993999458f, - -0.3925779118605135f, - -0.39245751759436387f, - -0.3923371166035623f, - -0.39221670889016863f, - -0.39209629445624844f, - -0.39197587330386335f, - -0.3918554454350792f, - -0.3917350108519562f, - -0.3916145695565605f, - -0.3914941215509541f, - -0.3913736668372025f, - -0.39125320541736885f, - -0.3911327372935172f, - -0.39101226246771104f, - -0.39089178094201615f, - -0.3907712927184962f, - -0.39065079779921574f, - -0.3905302961862386f, - -0.3904097878816311f, - -0.39028927288745735f, - -0.3901687512057824f, - -0.39004822283867047f, - -0.3899276877881884f, - -0.38980714605640004f, - -0.38968659764537306f, - -0.3895660425571699f, - -0.3894454807938587f, - -0.3893249123575036f, - -0.3892043372501729f, - -0.38908375547392937f, - -0.38896316703084166f, - -0.38884257192297433f, - -0.38872197015239623f, - -0.38860136172117055f, - -0.38848074663136634f, - -0.3883601248850495f, - -0.388239496484286f, - -0.38811886143114444f, - -0.38799821972769105f, - -0.387877571375993f, - -0.3877569163781167f, - -0.3876362547361313f, - -0.38751558645210327f, - -0.38739491152810046f, - -0.38727422996618965f, - -0.3871535417684403f, - -0.3870328469369197f, - -0.3869121454736958f, - -0.38679143738083593f, - -0.38667072266041014f, - -0.386550001314486f, - -0.386429273345132f, - -0.386308538754416f, - -0.38618779754440835f, - -0.38606704971717715f, - -0.3859462952747913f, - -0.3858255342193192f, - -0.3857047665528316f, - -0.38558399227739615f, - -0.3854632113950849f, - -0.3853424239079639f, - -0.3852216298181055f, - -0.3851008291275777f, - -0.3849800218384528f, - -0.3848592079527977f, - -0.3847383874726848f, - -0.38461756040018275f, - -0.3844967267373644f, - -0.38437588648629684f, - -0.3842550396490531f, - -0.3841341862277023f, - -0.3840133262243168f, - -0.3838924596409667f, - -0.383771586479723f, - -0.38365070674265606f, - -0.3835298204318387f, - -0.38340892754934147f, - -0.3832880280972359f, - -0.3831671220775926f, - -0.38304620949248513f, - -0.38292529034398426f, - -0.382804364634162f, - -0.3826834323650904f, - -0.38256249353884075f, - -0.38244154815748693f, - -0.3823205962231005f, - -0.38219963773775395f, - -0.38207867270351903f, - -0.38195770112247013f, - -0.38183672299667915f, - -0.38171573832821915f, - -0.38159474711916225f, - -0.38147374937158324f, - -0.3813527450875546f, - -0.38123173426914975f, - -0.3811107169184413f, - -0.38098969303750446f, - -0.38086866262841135f, - -0.3807476256932382f, - -0.38062658223405577f, - -0.3805055322529405f, - -0.3803844757519649f, - -0.3802634127332057f, - -0.380142343198734f, - -0.38002126715062684f, - -0.3799001845909571f, - -0.3797790955218019f, - -0.3796579999452329f, - -0.37953689786332745f, - -0.379415789278159f, - -0.3792946741918043f, - -0.37917355260633784f, - -0.37905242452383503f, - -0.37893128994637043f, - -0.37881014887602144f, - -0.3786890013148628f, - -0.37856784726497056f, - -0.37844668672841963f, - -0.3783255197072878f, - -0.3782043462036504f, - -0.37808316621958366f, - -0.3779619797571632f, - -0.3778407868184672f, - -0.3777195874055714f, - -0.3775983815205525f, - -0.3774771691654865f, - -0.377355950342452f, - -0.3772347250535253f, - -0.3771134933007834f, - -0.37699225508630296f, - -0.3768710104121628f, - -0.37674975928043974f, - -0.37662850169321055f, - -0.37650723765255534f, - -0.3763859671605487f, - -0.376264690219271f, - -0.37614340683079867f, - -0.37602211699721233f, - -0.375900820720587f, - -0.3757795180030034f, - -0.3756582088465385f, - -0.37553689325327333f, - -0.37541557122528335f, - -0.37529424276464973f, - -0.37517290787344987f, - -0.37505156655376437f, - -0.37493021880767163f, - -0.3748088646372509f, - -0.3746875040445807f, - -0.37456613703174213f, - -0.374444763600814f, - -0.374323383753876f, - -0.3742019974930072f, - -0.37408060482028904f, - -0.3739592057378008f, - -0.3738378002476226f, - -0.3737163883518338f, - -0.3735949700525165f, - -0.37347354535174954f, - -0.3733521142516159f, - -0.373230676754193f, - -0.3731092328615641f, - -0.3729877825758085f, - -0.37286632589900964f, - -0.37274486283324537f, - -0.3726233933805994f, - -0.37250191754315226f, - -0.3723804353229846f, - -0.3722589467221796f, - -0.37213745174281804f, - -0.3720159503869819f, - -0.37189444265675203f, - -0.37177292855421223f, - -0.3716514080814437f, - -0.37152988124052877f, - -0.37140834803354883f, - -0.371286808462588f, - -0.37116526252972804f, - -0.3710437102370515f, - -0.3709221515866405f, - -0.37080058658057946f, - -0.3706790152209505f, - -0.3705574375098368f, - -0.3704358534493207f, - -0.37031426304148707f, - -0.3701926662884187f, - -0.3700710631921989f, - -0.3699494537549106f, - -0.3698278379786393f, - -0.36970621586546776f, - -0.3695845874174802f, - -0.3694629526367597f, - -0.3693413115253921f, - -0.3692196640854602f, - -0.3690980103190507f, - -0.3689763502282448f, - -0.36885468381512976f, - -0.36873301108178846f, - -0.3686113320303083f, - -0.3684896466627709f, - -0.3683679549812638f, - -0.3682462569878705f, - -0.3681245526846787f, - -0.36800284207377043f, - -0.3678811251572338f, - -0.3677594019371526f, - -0.36763767241561424f, - -0.3675159365947037f, - -0.36739419447650684f, - -0.36727244606310894f, - -0.36715069135659767f, - -0.36702893035905854f, - -0.3669071630725778f, - -0.366785389499242f, - -0.36666360964113676f, - -0.36654182350035047f, - -0.3664200310789691f, - -0.36629823237907944f, - -0.36617642740276773f, - -0.3660546161521227f, - -0.36593279862923067f, - -0.365810974836179f, - -0.3656891447750543f, - -0.36556730844794577f, - -0.3654454658569401f, - -0.36532361700412513f, - -0.3652017618915879f, - -0.36507990052141787f, - -0.3649580328957016f, - -0.3648361590165297f, - -0.3647142788859871f, - -0.3645923925061647f, - -0.36447049987914937f, - -0.3643486010070321f, - -0.3642266958918983f, - -0.36410478453583933f, - -0.36398286694094245f, - -0.3638609431092991f, - -0.3637390130429951f, - -0.36361707674412225f, - -0.3634951342147682f, - -0.3633731854570241f, - -0.3632512304729785f, - -0.36312926926472133f, - -0.3630073018343414f, - -0.36288532818393016f, - -0.36276334831557694f, - -0.3626413622313717f, - -0.3625193699334039f, - -0.36239737142376544f, - -0.3622753667045459f, - -0.3621533557778359f, - -0.3620313386457251f, - -0.36190931531030596f, - -0.36178728577366853f, - -0.3616652500379036f, - -0.36154320810510154f, - -0.36142115997735513f, - -0.36129910565675477f, - -0.36117704514539184f, - -0.36105497844535783f, - -0.36093290555874347f, - -0.3608108264876421f, - -0.36068874123414474f, - -0.3605666498003432f, - -0.3604445521883287f, - -0.36032244840019506f, - -0.36020033843803273f, - -0.36007822230393655f, - -0.35995609999999567f, - -0.35983397152830515f, - -0.35971183689095587f, - -0.3595896960900431f, - -0.3594675491276563f, - -0.3593453960058911f, - -0.35922323672683876f, - -0.35910107129259417f, - -0.35897889970524965f, - -0.3588567219668987f, - -0.358734538079634f, - -0.3586123480455507f, - -0.35849015186674166f, - -0.35836794954530077f, - -0.358245741083321f, - -0.35812352648289814f, - -0.3580013057461254f, - -0.3578790788750969f, - -0.3577568458719063f, - -0.35763460673864966f, - -0.3575123614774198f, - -0.3573901100903139f, - -0.3572678525794233f, - -0.35714558894684545f, - -0.3570233191946744f, - -0.3569010433250052f, - -0.35677876133993225f, - -0.3566564732415524f, - -0.3565341790319603f, - -0.3564118787132513f, - -0.3562895722875203f, - -0.3561672597568645f, - -0.3560449411233789f, - -0.3559226163891587f, - -0.35580028555630133f, - -0.3556779486269023f, - -0.3555556056030576f, - -0.3554332564868629f, - -0.35531090128041704f, - -0.3551885399858132f, - -0.3550661726051505f, - -0.35494379914052404f, - -0.3548214195940331f, - -0.35469903396777136f, - -0.35457664226383834f, - -0.35445424448432955f, - -0.3543318406313438f, - -0.35420943070697775f, - -0.35408701471332876f, - -0.35396459265249364f, - -0.35384216452657163f, - -0.35371973033765974f, - -0.35359729008785584f, - -0.3534748437792571f, - -0.3533523914139632f, - -0.35322993299407074f, - -0.35310746852168046f, - -0.3529849979988874f, - -0.3528625214277926f, - -0.35274003881049304f, - -0.35261755014908985f, - -0.35249505544567855f, - -0.3523725547023605f, - -0.35225004792123316f, - -0.352127535104398f, - -0.35200501625395103f, - -0.35188249137199407f, - -0.3517599604606248f, - -0.3516374235219445f, - -0.3515148805580519f, - -0.3513923315710468f, - -0.3512697765630291f, - -0.3511472155360978f, - -0.35102464849235465f, - -0.350902075433899f, - -0.35077949636283107f, - -0.3506569112812504f, - -0.3505343201912592f, - -0.350411723094957f, - -0.3502891199944447f, - -0.35016651089182205f, - -0.3500438957891917f, - -0.3499212746886538f, - -0.34979864759230933f, - -0.34967601450225877f, - -0.34955337542060494f, - -0.3494307303494485f, - -0.34930807929089086f, - -0.34918542224703286f, - -0.3490627592199778f, - -0.34894009021182665f, - -0.34881741522468135f, - -0.348694734260643f, - -0.3485720473218155f, - -0.34844935441029923f, - -0.34832665552819914f, - -0.34820395067761417f, - -0.3480812398606495f, - -0.3479585230794059f, - -0.3478358003359887f, - -0.3477130716324974f, - -0.34759033697103736f, - -0.34746759635371f, - -0.34734484978262087f, - -0.34722209725986997f, - -0.34709933878756305f, - -0.3469765743678019f, - -0.34685380400269167f, - -0.3467310276943353f, - -0.34660824544483637f, - -0.346485457256298f, - -0.34636266313082575f, - -0.34623986307052285f, - -0.3461170570774934f, - -0.34599424515384086f, - -0.34587142730167125f, - -0.3457486035230882f, - -0.3456257738201962f, - -0.34550293819509914f, - -0.34538009664990343f, - -0.345257249186713f, - -0.34513439580763294f, - -0.34501153651476824f, - -0.3448886713102232f, - -0.3447658001961048f, - -0.34464292317451756f, - -0.34452004024756694f, - -0.3443971514173577f, - -0.34427425668599715f, - -0.34415135605558933f, - -0.3440284495282427f, - -0.34390553710605987f, - -0.3437826187911494f, - -0.3436596945856158f, - -0.34353676449156784f, - -0.3434138285111086f, - -0.343290886646347f, - -0.3431679388993879f, - -0.3430449852723406f, - -0.3429220257673085f, - -0.34279906038640096f, - -0.3426760891317233f, - -0.34255311200538424f, - -0.34243012900949016f, - -0.3423071401461484f, - -0.34218414541746534f, - -0.3420611448255503f, - -0.34193813837250986f, - -0.3418151260604519f, - -0.3416921078914832f, - -0.3415690838677134f, - -0.3414460539912496f, - -0.3413230182642f, - -0.34119997668867175f, - -0.34107692926677496f, - -0.3409538760006171f, - -0.34083081689230676f, - -0.3407077519439516f, - -0.34058468115766194f, - -0.3404616045355458f, - -0.34033852207971205f, - -0.3402154337922688f, - -0.3400923396753269f, - -0.33996923973099463f, - -0.33984613396138047f, - -0.3397230223685954f, - -0.3395999049547481f, - -0.3394767817219483f, - -0.3393536526723046f, - -0.33923051780792945f, - -0.33910737713092937f, - -0.3389842306434168f, - -0.33886107834750023f, - -0.33873792024529226f, - -0.33861475633889987f, - -0.338491586630436f, - -0.3383684111220093f, - -0.33824522981573224f, - -0.3381220427137145f, - -0.3379988498180669f, - -0.3378756511308995f, - -0.3377524466543249f, - -0.3376292363904534f, - -0.33750602034139615f, - -0.3373827985092636f, - -0.33725957089616876f, - -0.3371363375042223f, - -0.3370130983355358f, - -0.33688985339222f, - -0.33676660267638847f, - -0.33664334619015135f, - -0.33652008393562305f, - -0.33639681591491244f, - -0.33627354213013405f, - -0.33615026258339853f, - -0.3360269772768208f, - -0.3359036862125099f, - -0.33578038939258087f, - -0.3356570868191448f, - -0.33553377849431687f, - -0.33541046442020667f, - -0.33528714459892955f, - -0.33516381903259784f, - -0.3350404877233238f, - -0.3349171506732223f, - -0.33479380788440594f, - -0.33467045935898815f, - -0.3345471050990816f, - -0.3344237451068016f, - -0.3343003793842611f, - -0.33417700793357397f, - -0.3340536307568532f, - -0.3339302478562145f, - -0.3338068592337713f, - -0.3336834648916377f, - -0.33356006483192724f, - -0.33343665905675607f, - -0.33331324756823777f, - -0.33318983036848704f, - -0.3330664074596178f, - -0.3329429788437464f, - -0.33281954452298707f, - -0.33269610449945475f, - -0.3325726587752637f, - -0.3324492073525308f, - -0.33232575023336974f, - -0.33220228741989843f, - -0.33207881891422897f, - -0.33195534471847954f, - -0.33183186483476407f, - -0.33170837926520097f, - -0.33158488801190267f, - -0.3314613910769878f, - -0.3313378884625707f, - -0.33121438017077f, - -0.33109086620369876f, - -0.33096734656347576f, - -0.3308438212522159f, - -0.33072029027203736f, - -0.33059675362505603f, - -0.33047321131338864f, - -0.33034966333915117f, - -0.3302261097044623f, - -0.3301025504114383f, - -0.3299789854621963f, - -0.32985541485885267f, - -0.3297318386035264f, - -0.3296082566983342f, - -0.3294846691453936f, - -0.3293610759468222f, - -0.3292374771047369f, - -0.3291138726212572f, - -0.32899026249850016f, - -0.3288666467385839f, - -0.32874302534362565f, - -0.3286193983157453f, - -0.3284957656570604f, - -0.32837212736968924f, - -0.3282484834557496f, - -0.3281248339173617f, - -0.3280011787566434f, - -0.3278775179757135f, - -0.3277538515766901f, - -0.3276301795616938f, - -0.32750650193284214f, - -0.32738281869225666f, - -0.32725912984205335f, - -0.3271354353843541f, - -0.3270117353212767f, - -0.3268880296549433f, - -0.32676431838747005f, - -0.3266406015209794f, - -0.3265168790575894f, - -0.32639315099942173f, - -0.32626941734859566f, - -0.3261456781072312f, - -0.32602193327744783f, - -0.32589818286136757f, - -0.32577442686111f, - -0.3256506652787956f, - -0.3255268981165442f, - -0.32540312537647825f, - -0.3252793470607176f, - -0.3251555631713832f, - -0.3250317737105953f, - -0.32490797868047655f, - -0.32478417808314736f, - -0.32466037192072905f, - -0.3245365601953421f, - -0.3244127429091097f, - -0.32428892006415266f, - -0.32416509166259255f, - -0.32404125770655035f, - -0.32391741819814956f, - -0.3237935731395113f, - -0.32366972253275766f, - -0.3235458663800108f, - -0.32342200468339205f, - -0.3232981374450255f, - -0.3231742646670318f, - -0.32305038635153616f, - -0.3229265025006577f, - -0.3228026131165217f, - -0.32267871820124927f, - -0.3225548177569659f, - -0.32243091178579114f, - -0.3223070002898507f, - -0.322183083271266f, - -0.32205916073216295f, - -0.32193523267466145f, - -0.32181129910088757f, - -0.3216873600129632f, - -0.32156341541301364f, - -0.32143946530316186f, - -0.3213155096855317f, - -0.3211915485622462f, - -0.32106758193543117f, - -0.3209436098072098f, - -0.32081963217970644f, - -0.3206956490550445f, - -0.32057166043535007f, - -0.3204476663227469f, - -0.32032366671935947f, - -0.3201996616273118f, - -0.32007565104873015f, - -0.3199516349857379f, - -0.31982761344046257f, - -0.3197035864150258f, - -0.31957955391155524f, - -0.31945551593217536f, - -0.3193314724790115f, - -0.31920742355418835f, - -0.31908336915983304f, - -0.3189593092980704f, - -0.31883524397102536f, - -0.31871117318082537f, - -0.3185870969295955f, - -0.31846301521946185f, - -0.3183389280525496f, - -0.31821483543098666f, - -0.31809073735689847f, - -0.31796663383241147f, - -0.3178425248596512f, - -0.31771841044074606f, - -0.31759429057782174f, - -0.31747016527300503f, - -0.317346034528422f, - -0.31722189834620124f, - -0.31709775672846896f, - -0.3169736096773523f, - -0.3168494571949776f, - -0.3167252992834739f, - -0.31660113594496775f, - -0.3164769671815867f, - -0.3163527929954575f, - -0.31622861338870945f, - -0.3161044283634695f, - -0.31598023792186564f, - -0.3158560420660249f, - -0.3157318407980771f, - -0.31560763412014864f, - -0.3154834220343703f, - -0.3153592045428671f, - -0.3152349816477699f, - -0.3151107533512057f, - -0.3149865196553055f, - -0.31486228056219473f, - -0.31473803607400463f, - -0.3146137861928625f, - -0.3144895309208999f, - -0.31436527026024236f, - -0.31424100421302176f, - -0.31411673278136554f, - -0.3139924559674049f, - -0.31386817377326826f, - -0.3137438862010853f, - -0.3136195932529848f, - -0.31349529493109807f, - -0.3133709912375542f, - -0.31324668217448304f, - -0.3131223677440146f, - -0.3129980479482782f, - -0.31287372278940556f, - -0.31274939226952625f, - -0.3126250563907706f, - -0.3125007151552682f, - -0.3123763685651514f, - -0.3122520166225498f, - -0.31212765932959435f, - -0.31200329668841487f, - -0.3118789287011441f, - -0.3117545553699121f, - -0.31163017669685f, - -0.31150579268408823f, - -0.31138140333375963f, - -0.31125700864799405f, - -0.31113260862892533f, - -0.3110082032786817f, - -0.31088379259939747f, - -0.3107593765932026f, - -0.3106349552622314f, - -0.31051052860861245f, - -0.31038609663448036f, - -0.31026165934196553f, - -0.31013721673320266f, - -0.3100127688103207f, - -0.30988831557545454f, - -0.30976385703073495f, - -0.3096393931782962f, - -0.3095149240202701f, - -0.3093904495587894f, - -0.3092659697959861f, - -0.3091414847339948f, - -0.3090169943749477f, - -0.3088924987209778f, - -0.3087679977742176f, - -0.30864349153680204f, - -0.3085189800108636f, - -0.3083944631985358f, - -0.30826994110195133f, - -0.30814541372324555f, - -0.3080208810645514f, - -0.3078963431280026f, - -0.30777179991573234f, - -0.30764725142987626f, - -0.3075226976725677f, - -0.30739813864594073f, - -0.3072735743521297f, - -0.3071490047932682f, - -0.30702442997149226f, - -0.3068998498889349f, - -0.30677526454773313f, - -0.30665067395001844f, - -0.3065260780979281f, - -0.3064014769935954f, - -0.30627687063915787f, - -0.3061522590367472f, - -0.30602764218850115f, - -0.30590302009655324f, - -0.3057783927630414f, - -0.3056537601900978f, - -0.3055291223798604f, - -0.3054044793344632f, - -0.30527983105604356f, - -0.30515517754673654f, - -0.305030518808678f, - -0.304905854844003f, - -0.30478118565484946f, - -0.30465651124335263f, - -0.30453183161164876f, - -0.3044071467618734f, - -0.3042824566961647f, - -0.3041577614166583f, - -0.3040330609254908f, - -0.30390835522479814f, - -0.3037836443167187f, - -0.3036589282033878f, - -0.3035342068869449f, - -0.3034094803695236f, - -0.3032847486532637f, - -0.3031600117403016f, - -0.30303526963277455f, - -0.30291052233281923f, - -0.30278576984257477f, - -0.30266101216417796f, - -0.3025362492997664f, - -0.3024114812514772f, - -0.30228670802144975f, - -0.30216192961182126f, - -0.30203714602472886f, - -0.3019123572623124f, - -0.3017875633267093f, - -0.30166276422005783f, - -0.3015379599444955f, - -0.30141315050216344f, - -0.30128833589519677f, - -0.3011635161257367f, - -0.3010386911959203f, - -0.3009138611078889f, - -0.30078902586377815f, - -0.30066418546572954f, - -0.3005393399158805f, - -0.3004144892163719f, - -0.3002896333693422f, - -0.30016477237693073f, - -0.3000399062412762f, - -0.2999150349645197f, - -0.29979015854880015f, - -0.2996652769962572f, - -0.29954039030902985f, - -0.2994154984892597f, - -0.299290601539085f, - -0.2991656994606484f, - -0.29904079225608665f, - -0.2989158799275426f, - -0.2987909624771548f, - -0.29866603990706636f, - -0.29854111221941426f, - -0.2984161794163417f, - -0.2982912414999877f, - -0.29816629847249554f, - -0.29804135033600276f, - -0.2979163970926528f, - -0.29779143874458497f, - -0.29766647529394213f, - -0.29754150674286467f, - -0.2974165330934939f, - -0.29729155434797117f, - -0.29716657050843714f, - -0.29704158157703503f, - -0.29691658755590566f, - -0.29679158844719083f, - -0.29666658425303144f, - -0.2965415749755711f, - -0.296416560616951f, - -0.2962915411793132f, - -0.2961665166647991f, - -0.29604148707555256f, - -0.2959164524137151f, - -0.2957914126814292f, - -0.2956663678808365f, - -0.2955413180140813f, - -0.2954162630833055f, - -0.29529120309065177f, - -0.29516613803826225f, - -0.29504106792828155f, - -0.29491599276285185f, - -0.29479091254411627f, - -0.2946658272742172f, - -0.2945407369552997f, - -0.29441564158950534f, - -0.2942905411789802f, - -0.29416543572586445f, - -0.2940403252323043f, - -0.2939152097004417f, - -0.29379008913242316f, - -0.29366496353038907f, - -0.29353983289648605f, - -0.2934146972328564f, - -0.29328955654164607f, - -0.29316441082499844f, - -0.29303926008505776f, - -0.29291410432396775f, - -0.2927889435438745f, - -0.29266377774692187f, - -0.2925386069352544f, - -0.29241343111101614f, - -0.2922882502763535f, - -0.2921630644334107f, - -0.2920378735843328f, - -0.2919126777312639f, - -0.291787476876351f, - -0.29166227102173853f, - -0.2915370601695718f, - -0.29141184432199635f, - -0.2912866234811568f, - -0.2911613976492005f, - -0.2910361668282723f, - -0.29091093102051807f, - -0.29078569022808276f, - -0.290660444453114f, - -0.2905351936977571f, - -0.29040993796415815f, - -0.2902846772544625f, - -0.29015941157081815f, - -0.2900341409153699f, - -0.2899088652902666f, - -0.2897835846976516f, - -0.289658299139674f, - -0.2895330086184788f, - -0.2894077131362155f, - -0.28928241269502747f, - -0.2891571072970643f, - -0.28903179694447134f, - -0.28890648163939836f, - -0.2887811613839892f, - -0.28865583618039364f, - -0.2885305060307575f, - -0.28840517093722995f, - -0.2882798309019577f, - -0.2881544859270884f, - -0.28802913601476904f, - -0.28790378116714904f, - -0.28777842138637555f, - -0.28765305667459656f, - -0.2875276870339593f, - -0.2874023124666137f, - -0.2872769329747071f, - -0.2871515485603878f, - -0.2870261592258035f, - -0.28690076497310435f, - -0.2867753658044381f, - -0.2866499617219534f, - -0.28652455272779825f, - -0.2863991388241231f, - -0.2862737200130761f, - -0.28614829629680627f, - -0.2860228676774618f, - -0.28589743415719365f, - -0.28577199573815015f, - -0.28564655242247994f, - -0.28552110421233484f, - -0.2853956511098611f, - -0.28527019311721086f, - -0.28514473023653203f, - -0.285019262469977f, - -0.2848937898196922f, - -0.28476831228783017f, - -0.28464282987653916f, - -0.28451734258797184f, - -0.28439185042427506f, - -0.28426635338760153f, - -0.28414085148010004f, - -0.2840153447039227f, - -0.2838898330612191f, - -0.28376431655414f, - -0.28363879518483504f, - -0.28351326895545687f, - -0.2833877378681554f, - -0.2832622019250816f, - -0.28313666112838565f, - -0.28301111548022034f, - -0.2828855649827361f, - -0.28276000963808406f, - -0.2826344494484148f, - -0.28250888441588146f, - -0.2823833145426339f, - -0.2822577398308262f, - -0.2821321602826066f, - -0.2820065759001296f, - -0.2818809866855453f, - -0.2817553926410081f, - -0.28162979376866665f, - -0.2815041900706756f, - -0.2813785815491863f, - -0.2812529682063511f, - -0.2811273500443214f, - -0.28100172706525134f, - -0.2808760992712926f, - -0.2807504666645969f, - -0.2806248292473187f, - -0.2804991870216098f, - -0.28037353998962317f, - -0.2802478881535108f, - -0.2801222315154275f, - -0.2799965700775254f, - -0.2798709038419577f, - -0.27974523281087676f, - -0.27961955698643776f, - -0.2794938763707932f, - -0.27936819096609655f, - -0.2792425007745006f, - -0.2791168057981606f, - -0.27899110603922966f, - -0.27886540149986144f, - -0.278739692182209f, - -0.2786139780884282f, - -0.27848825922067205f, - -0.2783625355810949f, - -0.27823680717185f, - -0.27811107399509344f, - -0.2779853360529779f, - -0.27785959334766047f, - -0.27773384588129224f, - -0.27760809365603045f, - -0.27748233667402816f, - -0.27735657493744265f, - -0.27723080844842546f, - -0.27710503720913415f, - -0.276979261221722f, - -0.2768534804883468f, - -0.27672769501116024f, - -0.2766019047923203f, - -0.2764761098339805f, - -0.2763503101382982f, - -0.27622450570742796f, - -0.2760986965435254f, - -0.2759728826487455f, - -0.27584706402524556f, - -0.2757212406751808f, - -0.275595412600707f, - -0.27546957980397946f, - -0.2753437422871559f, - -0.2752179000523917f, - -0.2750920531018432f, - -0.27496620143766665f, - -0.27484034506201765f, - -0.27471448397705445f, - -0.2745886181849328f, - -0.27446274768780937f, - -0.27433687248784f, - -0.27421099258718334f, - -0.2740851079879954f, - -0.27395921869243317f, - -0.27383332470265287f, - -0.27370742602081344f, - -0.27358152264907115f, - -0.2734556145895834f, - -0.2733297018445067f, - -0.2732037844160003f, - -0.27307786230622f, - -0.272951935517326f, - -0.2728260040514726f, - -0.27270006791082024f, - -0.272574127097525f, - -0.2724481816137474f, - -0.27232223146164214f, - -0.27219627664336987f, - -0.2720703171610871f, - -0.2719443530169538f, - -0.27181838421312743f, - -0.27169241075176653f, - -0.2715664326350287f, - -0.27144044986507426f, - -0.27131446244406104f, - -0.27118847037414784f, - -0.2710624736574926f, - -0.27093647229625595f, - -0.27081046629259603f, - -0.27068445564867194f, - -0.270558440366642f, - -0.2704324204486671f, - -0.27030639589690575f, - -0.27018036671351736f, - -0.2700543329006605f, - -0.26992829446049643f, - -0.269802251395184f, - -0.26967620370688283f, - -0.26955015139775196f, - -0.2694240944699529f, - -0.2692980329256448f, - -0.2691719667669876f, - -0.26904589599614154f, - -0.26891982061526587f, - -0.26879374062652256f, - -0.26866765603207027f, - -0.268541566834072f, - -0.2684154730346848f, - -0.26828937463607183f, - -0.2681632716403921f, - -0.2680371640498088f, - -0.26791105186647945f, - -0.26778493509256746f, - -0.2676588137302321f, - -0.26753268778163697f, - -0.2674065572489398f, - -0.26728042213430436f, - -0.26715428243989026f, - -0.2670281381678606f, - -0.26690198932037584f, - -0.2667758358995977f, - -0.26664967790768673f, - -0.26652351534680646f, - -0.2663973482191178f, - -0.2662711765267825f, - -0.2661450002719617f, - -0.26601881945681904f, - -0.265892634083515f, - -0.26576644415421413f, - -0.26564024967107536f, - -0.26551405063626354f, - -0.26538784705193935f, - -0.2652616389202678f, - -0.265135426243408f, - -0.2650092090235252f, - -0.26488298726278114f, - -0.2647567609633387f, - -0.2646305301273598f, - -0.26450429475700915f, - -0.2643780548544489f, - -0.26425181042184115f, - -0.2641255614613509f, - -0.26399930797514054f, - -0.26387304996537336f, - -0.2637467874342119f, - -0.2636205203838214f, - -0.2634942488163644f, - -0.2633679727340047f, - -0.2632416921389051f, - -0.26311540703323183f, - -0.26298911741914555f, - -0.26286282329881255f, - -0.2627365246743953f, - -0.2626102215480595f, - -0.26248391392196857f, - -0.2623576017982866f, - -0.2622312851791772f, - -0.2621049640668064f, - -0.26197863846333785f, - -0.26185230837093615f, - -0.261725973791765f, - -0.26159963472799086f, - -0.26147329118177765f, - -0.2613469431552902f, - -0.2612205906506927f, - -0.2610942336701518f, - -0.26096787221583084f, - -0.2608415062898976f, - -0.26071513589451395f, - -0.2605887610318477f, - -0.2604623817040626f, - -0.2603359979133267f, - -0.260209609661802f, - -0.26008321695165687f, - -0.2599568197850552f, - -0.2598304181641645f, - -0.2597040120911498f, - -0.25957760156817705f, - -0.2594511865974113f, - -0.25932476718102043f, - -0.25919834332116976f, - -0.2590719150200255f, - -0.258945482279754f, - -0.2588190451025207f, - -0.2586926034904939f, - -0.25856615744583916f, - -0.2584397069707232f, - -0.2583132520673118f, - -0.2581867927377735f, - -0.2580603289842743f, - -0.257933860808981f, - -0.25780738821405985f, - -0.25768091120167963f, - -0.2575544297740066f, - -0.257427943933208f, - -0.25730145368145024f, - -0.2571749590209025f, - -0.25704845995373127f, - -0.25692195648210414f, - -0.2567954486081878f, - -0.2566689363341517f, - -0.2565424196621619f, - -0.25641589859438874f, - -0.2562893731329967f, - -0.25616284328015637f, - -0.2560363090380341f, - -0.25590977040880053f, - -0.25578322739462045f, - -0.2556566799976647f, - -0.2555301282201f, - -0.2554035720640973f, - -0.25527701153182164f, - -0.2551504466254443f, - -0.25502387734713206f, - -0.2548973036990554f, - -0.2547707256833824f, - -0.25464414330228174f, - -0.2545175565579217f, - -0.2543909654524729f, - -0.2542643699881037f, - -0.25413777016698313f, - -0.2540111659912797f, - -0.25388455746316446f, - -0.2537579445848059f, - -0.2536313273583735f, - -0.25350470578603596f, - -0.25337807986996463f, - -0.25325144961232837f, - -0.25312481501529693f, - -0.2529981760810402f, - -0.2528715328117272f, - -0.25274488520952965f, - -0.25261823327661675f, - -0.25249157701515873f, - -0.25236491642732484f, - -0.25223825151528717f, - -0.25211158228121433f, - -0.2519849087272794f, - -0.25185823085564935f, - -0.25173154866849745f, - -0.25160486216799266f, - -0.2514781713563082f, - -0.2513514762356115f, - -0.251224776808076f, - -0.25109807307587095f, - -0.25097136504117f, - -0.2508446527061408f, - -0.2507179360729571f, - -0.25059121514378846f, - -0.2504644899208079f, - -0.25033776040618594f, - -0.2502110266020941f, - -0.2500842885107031f, - -0.2499575461341862f, - -0.24983079947471426f, - -0.24970404853445907f, - -0.24957729331559164f, - -0.24945053382028556f, - -0.24932377005071196f, - -0.24919700200904293f, - -0.24907022969744974f, - -0.2489434531181063f, - -0.24881667227318408f, - -0.24868988716485535f, - -0.24856309779529176f, - -0.2484363041666675f, - -0.24830950628115428f, - -0.24818270414092475f, - -0.2480558977481508f, - -0.24792908710500688f, - -0.24780227221366505f, - -0.24767545307629824f, - -0.2475486296950786f, - -0.2474218020721809f, - -0.24729497020977748f, - -0.2471681341100407f, - -0.24704129377514558f, - -0.2469144492072646f, - -0.24678760040857128f, - -0.24666074738123822f, - -0.24653389012744162f, - -0.24640702864935168f, - -0.24628016294914476f, - -0.24615329302899291f, - -0.24602641889107174f, - -0.24589954053755436f, - -0.2457726579706148f, - -0.24564577119242623f, - -0.24551888020516463f, - -0.24539198501100334f, - -0.2452650856121167f, - -0.24513818201067822f, - -0.24501127420886404f, - -0.2448843622088479f, - -0.24475744601280436f, - -0.24463052562290727f, - -0.24450360104133306f, - -0.24437667227025484f, - -0.24424973931185007f, - -0.2441228021682903f, - -0.24399586084175312f, - -0.2438689153344119f, - -0.24374196564844444f, - -0.24361501178602255f, - -0.24348805374932408f, - -0.24336109154052274f, - -0.24323412516179657f, - -0.24310715461531765f, - -0.24298017990326418f, - -0.2428532010278101f, - -0.2427262179911329f, - -0.24259923079540752f, - -0.24247223944280988f, - -0.2423452439355159f, - -0.2422182442757008f, - -0.24209124046554237f, - -0.24196423250721594f, - -0.24183722040289773f, - -0.24171020415476324f, - -0.24158318376499058f, - -0.24145615923575534f, - -0.24132913056923402f, - -0.24120209776760237f, - -0.24107506083303884f, - -0.24094801976771926f, - -0.24082097457382043f, - -0.24069392525351843f, - -0.2405668718089919f, - -0.240439814242417f, - -0.24031275255597087f, - -0.24018568675182975f, - -0.24005861683217267f, - -0.23993154279917603f, - -0.23980446465501723f, - -0.23967738240187283f, - -0.23955029604192213f, - -0.23942320557734093f, - -0.23929611101030954f, - -0.2391690123430022f, - -0.2390419095775993f, - -0.238914802716277f, - -0.23878769176121584f, - -0.23866057671459034f, - -0.23853345757858122f, - -0.23840633435536487f, - -0.23827920704712127f, - -0.23815207565602783f, - -0.2380249401842629f, - -0.23789780063400406f, - -0.23777065700743155f, - -0.2376435093067231f, - -0.23751635753405728f, - -0.23738920169161198f, - -0.2372620417815677f, - -0.23713487780610246f, - -0.23700770976739513f, - -0.23688053766762387f, - -0.23675336150896945f, - -0.23662618129361015f, - -0.23649899702372515f, - -0.23637180870149374f, - -0.23624461632909438f, - -0.23611741990870821f, - -0.23599021944251383f, - -0.2358630149326908f, - -0.23573580638141786f, - -0.23560859379087645f, - -0.2354813771632454f, - -0.23535415650070463f, - -0.23522693180543305f, - -0.23509970307961242f, - -0.23497247032542104f, - -0.2348452335450416f, - -0.23471799274065078f, - -0.23459074791443144f, - -0.23446349906856215f, - -0.23433624620522586f, - -0.2342089893265996f, - -0.2340817284348664f, - -0.2339544635322052f, - -0.2338271946207992f, - -0.23369992170282566f, - -0.23357264478046794f, - -0.2334453638559052f, - -0.2333180789313201f, - -0.23319079000889273f, - -0.23306349709080418f, - -0.23293620017923472f, - -0.23280889927636725f, - -0.23268159438438218f, - -0.23255428550546087f, - -0.23242697264178383f, - -0.23229965579553427f, - -0.23217233496889286f, - -0.23204501016404122f, - -0.23191768138316016f, - -0.23179034862843315f, - -0.23166301190204114f, - -0.231535671206166f, - -0.23140832654298885f, - -0.23128097791469338f, - -0.23115362532346082f, - -0.23102626877147336f, - -0.23089890826091233f, - -0.23077154379396175f, - -0.23064417537280313f, - -0.230516802999618f, - -0.23038942667659143f, - -0.2302620464059026f, - -0.23013466218973663f, - -0.23000727403027454f, - -0.22987988192970168f, - -0.22975248589019745f, - -0.22962508591394729f, - -0.22949768200313245f, - -0.22937027415993855f, - -0.22924286238654526f, - -0.2291154466851383f, - -0.2289880270578992f, - -0.22886060350701298f, - -0.22873317603466217f, - -0.22860574464303018f, - -0.22847830933429963f, - -0.22835087011065586f, - -0.2282234269742816f, - -0.2280959799273606f, - -0.22796852897207573f, - -0.22784107411061258f, - -0.22771361534515416f, - -0.22758615267788448f, - -0.22745868611098669f, - -0.22733121564664663f, - -0.22720374128704673f, - -0.22707626303437384f, - -0.2269487808908088f, - -0.22682129485853858f, - -0.22669380493974586f, - -0.2265663111366178f, - -0.22643881345133549f, - -0.2263113118860861f, - -0.22618380644305355f, - -0.2260562971244226f, - -0.2259287839323772f, - -0.22580126686910396f, - -0.22567374593678705f, - -0.22554622113761058f, - -0.22541869247376142f, - -0.22529115994742385f, - -0.22516362356078315f, - -0.2250360833160237f, - -0.22490853921533263f, - -0.2247809912608945f, - -0.22465343945489483f, - -0.2245258837995183f, - -0.22439832429695225f, - -0.22427076094938156f, - -0.22414319375899194f, - -0.22401562272796843f, - -0.22388804785849858f, - -0.2237604691527675f, - -0.22363288661296127f, - -0.22350530024126505f, - -0.22337771003986678f, - -0.2232501160109518f, - -0.2231225181567064f, - -0.22299491647931602f, - -0.2228673109809689f, - -0.22273970166384974f, - -0.2226120885301477f, - -0.22248447158204593f, - -0.2223568508217337f, - -0.22222922625139604f, - -0.22210159787322237f, - -0.2219739656893961f, - -0.22184632970210674f, - -0.2217186899135396f, - -0.22159104632588433f, - -0.22146339894132464f, - -0.22133574776205028f, - -0.22120809279024684f, - -0.22108043402810332f, - -0.22095277147780631f, - -0.22082510514154324f, - -0.22069743502150083f, - -0.2205697611198683f, - -0.22044208343883256f, - -0.22031440198058125f, - -0.22018671674730217f, - -0.22005902774118233f, - -0.21993133496441136f, - -0.2198036384191764f, - -0.21967593810766547f, - -0.2195482340320658f, - -0.21942052619456737f, - -0.21929281459735744f, - -0.21916509924262442f, - -0.21903738013255575f, - -0.21890965726934164f, - -0.21878193065516965f, - -0.21865420029222843f, - -0.21852646618270566f, - -0.2183987283287918f, - -0.2182709867326739f, - -0.2181432413965433f, - -0.2180154923225855f, - -0.21788773951299195f, - -0.21775998296995003f, - -0.21763222269565136f, - -0.21750445869228158f, - -0.21737669096203258f, - -0.2172489195070918f, - -0.2171211443296512f, - -0.21699336543189676f, - -0.21686558281602047f, - -0.21673779648421015f, - -0.2166100064386571f, - -0.21648221268155013f, - -0.2163544152150789f, - -0.21622661404143237f, - -0.21609880916280208f, - -0.21597100058137708f, - -0.21584318829934732f, - -0.215715372318902f, - -0.2155875526422329f, - -0.21545972927152934f, - -0.21533190220898152f, - -0.21520407145677886f, - -0.21507623701711345f, - -0.21494839889217482f, - -0.21482055708415346f, - -0.214692711595239f, - -0.21456486242762382f, - -0.21443700958349768f, - -0.2143091530650513f, - -0.21418129287447463f, - -0.21405342901396024f, - -0.21392556148569816f, - -0.21379769029187937f, - -0.21366981543469493f, - -0.21354193691633505f, - -0.21341405473899266f, - -0.21328616890485722f, - -0.21315827941612264f, - -0.21303038627497678f, - -0.21290248948361368f, - -0.21277458904422306f, - -0.2126466849589991f, - -0.21251877723012988f, - -0.2123908658598097f, - -0.21226295085022856f, - -0.21213503220357996f, - -0.2120071099220549f, - -0.21187918400784528f, - -0.21175125446314222f, - -0.2116233212901395f, - -0.21149538449102834f, - -0.2113674440680009f, - -0.21123950002324854f, - -0.21111155235896528f, - -0.2109836010773426f, - -0.21085564618057293f, - -0.21072768767084785f, - -0.21059972555036163f, - -0.21047175982130514f, - -0.21034379048587368f, - -0.21021581754625643f, - -0.2100878410046488f, - -0.20995986086324278f, - -0.2098318771242313f, - -0.2097038897898064f, - -0.20957589886216285f, - -0.20944790434349292f, - -0.20931990623598973f, - -0.2091919045418456f, - -0.2090638992632556f, - -0.20893589040241217f, - -0.20880787796150782f, - -0.20867986194273777f, - -0.20855184234829466f, - -0.20842381918037206f, - -0.20829579244116278f, - -0.20816776213286223f, - -0.20803972825766331f, - -0.20791169081775987f, - -0.2077836498153449f, - -0.20765560525261495f, - -0.20752755713176058f, - -0.20739950545497843f, - -0.20727145022446095f, - -0.207143391442404f, - -0.20701532911100104f, - -0.2068872632324463f, - -0.20675919380893337f, - -0.20663112084265836f, - -0.20650304433581493f, - -0.2063749642905976f, - -0.20624688070920016f, - -0.20611879359381902f, - -0.205990702946648f, - -0.20586260876988197f, - -0.2057345110657149f, - -0.20560640983634337f, - -0.20547830508396073f, - -0.20535019681076458f, - -0.20522208501894654f, - -0.2050939697107044f, - -0.2049658508882316f, - -0.2048377285537261f, - -0.20470960270937968f, - -0.2045814733573904f, - -0.204453340499952f, - -0.2043252041392617f, - -0.20419706427751422f, - -0.20406892091690523f, - -0.20394077405962951f, - -0.2038126237078846f, - -0.20368446986386549f, - -0.20355631252976797f, - -0.20342815170778805f, - -0.2032999874001208f, - -0.2031718196089641f, - -0.20304364833651317f, - -0.20291547358496415f, - -0.20278729535651246f, - -0.2026591136533561f, - -0.20253092847769058f, - -0.20240273983171234f, - -0.20227454771761694f, - -0.2021463521376027f, - -0.2020181530938653f, - -0.20188995058860146f, - -0.20176174462400698f, - -0.20163353520228036f, - -0.2015053223256176f, - -0.2013771059962156f, - -0.2012488862162704f, - -0.20112066298798079f, - -0.20099243631354208f, - -0.20086420619515402f, - -0.2007359726350103f, - -0.20060773563531079f, - -0.20047949519825106f, - -0.20035125132603107f, - -0.2002230040208448f, - -0.20009475328489232f, - -0.1999664991203694f, - -0.1998382415294763f, - -0.1997099805144072f, - -0.19958171607736236f, - -0.1994534482205379f, - -0.19932517694613336f, - -0.19919690225634573f, - -0.19906862415337304f, - -0.19894034263941235f, - -0.19881205771666352f, - -0.1986837693873238f, - -0.19855547765359136f, - -0.19842718251766356f, - -0.1982988839817405f, - -0.19817058204801963f, - -0.19804227671869937f, - -0.19791396799597732f, - -0.19778565588205377f, - -0.19765734037912644f, - -0.197529021489394f, - -0.19740069921505513f, - -0.19727237355830773f, - -0.1971440445213524f, - -0.1970157121063871f, - -0.19688737631561082f, - -0.19675903715122164f, - -0.1966306946154204f, - -0.19650234871040448f, - -0.1963739994383756f, - -0.1962456468015296f, - -0.1961172908020683f, - -0.19598893144218935f, - -0.19586056872409474f, - -0.19573220264998045f, - -0.19560383322204863f, - -0.1954754604424971f, - -0.19534708431352812f, - -0.19521870483733786f, - -0.19509032201612872f, - -0.19496193585209873f, - -0.19483354634744954f, - -0.19470515350438014f, - -0.19457675732509055f, - -0.1944483578117799f, - -0.19431995496665008f, - -0.19419154879190031f, - -0.19406313928973082f, - -0.193934726462341f, - -0.19380631031193288f, - -0.19367789084070602f, - -0.19354946805086082f, - -0.1934210419445969f, - -0.19329261252411653f, - -0.19316417979161948f, - -0.1930357437493064f, - -0.19290730439937714f, - -0.1927788617440342f, - -0.19265041578547754f, - -0.19252196652590806f, - -0.1923935139675258f, - -0.19226505811253355f, - -0.19213659896313146f, - -0.19200813652152066f, - -0.19187967078990145f, - -0.19175120177047678f, - -0.1916227294654471f, - -0.1914942538770128f, - -0.19136577500737798f, - -0.19123729285874053f, - -0.1911088074333046f, - -0.19098031873327004f, - -0.19085182676084106f, - -0.19072333151821583f, - -0.19059483300759872f, - -0.19046633123118975f, - -0.19033782619119255f, - -0.1902093178898081f, - -0.19008080632923838f, - -0.18995229151168452f, - -0.18982377343935034f, - -0.18969525211443708f, - -0.1895667275391469f, - -0.18943819971568124f, - -0.18930966864624404f, - -0.18918113433303682f, - -0.189052596778262f, - -0.1889240559841211f, - -0.18879551195281843f, - -0.18866696468655478f, - -0.18853841418753542f, - -0.18840986045795952f, - -0.18828130350003244f, - -0.18815274331595522f, - -0.1880241799079333f, - -0.18789561327816612f, - -0.18776704342885925f, - -0.18763847036221393f, - -0.18750989408043586f, - -0.18738131458572468f, - -0.18725273188028618f, - -0.18712414596632268f, - -0.18699555684603664f, - -0.18686696452163312f, - -0.18673836899531465f, - -0.18660977026928466f, - -0.18648116834574582f, - -0.1863525632269034f, - -0.18622395491496016f, - -0.18609534341211975f, - -0.18596672872058506f, - -0.18583811084256158f, - -0.18570948978025226f, - -0.185580865535861f, - -0.1854522381115909f, - -0.18532360750964766f, - -0.18519497373223448f, - -0.18506633678155543f, - -0.18493769665981385f, - -0.1848090533692157f, - -0.1846804069119643f, - -0.18455175729026402f, - -0.1844231045063184f, - -0.18429444856233357f, - -0.18416578946051226f, - -0.18403712720306167f, - -0.18390846179218287f, - -0.18377979323008314f, - -0.18365112151896543f, - -0.18352244666103712f, - -0.1833937686584995f, - -0.18326508751356008f, - -0.18313640322842203f, - -0.18300771580529293f, - -0.18287902524637434f, - -0.1827503315538739f, - -0.18262163472999504f, - -0.18249293477694467f, - -0.18236423169692717f, - -0.18223552549214783f, - -0.18210681616481111f, - -0.1819781037171242f, - -0.18184938815129162f, - -0.1817206694695189f, - -0.18159194767401074f, - -0.1814632227669745f, - -0.18133449475061494f, - -0.1812057636271378f, - -0.18107702939874887f, - -0.1809482920676531f, - -0.18081955163605806f, - -0.1806908081061689f, - -0.18056206148019152f, - -0.18043331176033114f, - -0.18030455894879557f, - -0.18017580304779013f, - -0.18004704405952096f, - -0.17991828198619345f, - -0.17978951683001568f, - -0.1796607485931931f, - -0.1795319772779321f, - -0.17940320288643835f, - -0.17927442542092004f, - -0.179145644883582f, - -0.1790168612766335f, - -0.17888807460227765f, - -0.17875928486272388f, - -0.1786304920601772f, - -0.17850169619684703f, - -0.17837289727493677f, - -0.17824409529665597f, - -0.17811529026420989f, - -0.17798648217980817f, - -0.17785767104565442f, - -0.17772885686395842f, - -0.17760003963692558f, - -0.1774712193667649f, - -0.17734239605568286f, - -0.17721356970588675f, - -0.17708474031958313f, - -0.1769559078989812f, - -0.1768270724462876f, - -0.17669823396370987f, - -0.17656939245345477f, - -0.1764405479177317f, - -0.17631170035874752f, - -0.17618284977871f, - -0.17605399617982603f, - -0.1759251395643053f, - -0.17579627993435484f, - -0.17566741729218263f, - -0.17553855163999577f, - -0.17540968298000414f, - -0.175280811314415f, - -0.1751519366454365f, - -0.175023058975276f, - -0.17489417830614357f, - -0.17476529464024662f, - -0.17463640797979268f, - -0.17450751832699282f, - -0.17437862568405205f, - -0.1742497300531815f, - -0.17412083143658805f, - -0.1739919298364829f, - -0.17386302525507133f, - -0.17373411769456465f, - -0.17360520715716993f, - -0.17347629364509862f, - -0.17334737716055615f, - -0.1732184577057541f, - -0.17308953528289966f, - -0.17296060989420367f, - -0.1728316815418744f, - -0.1727027502281209f, - -0.1725738159551516f, - -0.17244487872517744f, - -0.1723159385404069f, - -0.17218699540304927f, - -0.17205804931531316f, - -0.1719291002794097f, - -0.17180014829754756f, - -0.1716711933719363f, - -0.17154223550478465f, - -0.171413274698304f, - -0.1712843109547023f, - -0.171155344276192f, - -0.17102637466497936f, - -0.17089740212327686f, - -0.17076842665329267f, - -0.17063944825723937f, - -0.17051046693732347f, - -0.17038148269575767f, - -0.1702524955347512f, - -0.1701235054565133f, - -0.16999451246325603f, - -0.16986551655718868f, - -0.1697365177405216f, - -0.16960751601546425f, - -0.16947851138422884f, - -0.16934950384902492f, - -0.169220493412063f, - -0.16909148007555277f, - -0.16896246384170657f, - -0.1688334447127342f, - -0.1687044226908464f, - -0.16857539777825298f, - -0.16844636997716655f, - -0.16831733928979709f, - -0.1681883057183555f, - -0.16805926926505182f, - -0.16793022993209886f, - -0.1678011877217068f, - -0.16767214263608668f, - -0.16754309467744885f, - -0.1674140438480062f, - -0.16728499014996917f, - -0.167155933585549f, - -0.16702687415695622f, - -0.16689781186640393f, - -0.16676874671610187f, - -0.16663967870826413f, - -0.16651060784509875f, - -0.16638153412881998f, - -0.1662524575616377f, - -0.1661233781457662f, - -0.16599429588341377f, - -0.16586521077679478f, - -0.16573612282811936f, - -0.165607032039602f, - -0.16547793841345113f, - -0.16534884195188135f, - -0.16521974265710299f, - -0.16509064053132982f, - -0.16496153557677315f, - -0.16483242779564514f, - -0.1647033171901571f, - -0.16457420376252313f, - -0.1644450875149546f, - -0.16431596844966395f, - -0.16418684656886356f, - -0.16405772187476506f, - -0.16392859436958268f, - -0.16379946405552812f, - -0.16367033093481398f, - -0.16354119500965209f, - -0.16341205628225686f, - -0.1632829147548402f, - -0.1631537704296149f, - -0.16302462330879297f, - -0.162895473394589f, - -0.16276632068921515f, - -0.16263716519488433f, - -0.16250800691380876f, - -0.16237884584820328f, - -0.16224968200027926f, - -0.1621205153722525f, - -0.1619913459663328f, - -0.161862173784736f, - -0.1617329988296737f, - -0.16160382110336194f, - -0.1614746406080106f, - -0.16134545734583577f, - -0.16121627131904925f, - -0.16108708252986725f, - -0.16095789098049984f, - -0.16082869667316335f, - -0.16069949961006968f, - -0.1605702997934344f, - -0.16044109722547042f, - -0.16031189190839157f, - -0.1601826838444109f, - -0.16005347303574408f, - -0.15992425948460423f, - -0.15979504319320542f, - -0.15966582416376082f, - -0.15953660239848635f, - -0.1594073778995953f, - -0.15927815066930187f, - -0.1591489207098195f, - -0.15901968802336428f, - -0.15889045261214962f, - -0.15876121447838998f, - -0.15863197362429898f, - -0.1585027300520928f, - -0.1583734837639852f, - -0.15824423476219074f, - -0.15811498304892405f, - -0.15798572862639898f, - -0.157856471496832f, - -0.15772721166243703f, - -0.15759794912542888f, - -0.1574686838880216f, - -0.15733941595243184f, - -0.1572101453208728f, - -0.15708087199556214f, - -0.15695159597871144f, - -0.15682231727253843f, - -0.15669303587925648f, - -0.15656375180108348f, - -0.1564344650402311f, - -0.15630517559891732f, - -0.1561758834793557f, - -0.1560465886837634f, - -0.15591729121435494f, - -0.15578799107334584f, - -0.1556586882629507f, - -0.1555293827853869f, - -0.15540007464286912f, - -0.15527076383761304f, - -0.1551414503718335f, - -0.15501213424774798f, - -0.15488281546757143f, - -0.1547534940335197f, - -0.15462416994780775f, - -0.15449484321265333f, - -0.1543655138302706f, - -0.1542361818028783f, - -0.15410684713268888f, - -0.15397750982192118f, - -0.15384816987279043f, - -0.15371882728751288f, - -0.15358948206830386f, - -0.15346013421738142f, - -0.15333078373696107f, - -0.15320143062925914f, - -0.15307207489649122f, - -0.15294271654087552f, - -0.1528133555646277f, - -0.15268399196996343f, - -0.1525546257591011f, - -0.15242525693425646f, - -0.15229588549764622f, - -0.15216651145148624f, - -0.15203713479799597f, - -0.1519077555393887f, - -0.15177837367788397f, - -0.15164898921569694f, - -0.15151960215504717f, - -0.15139021249814824f, - -0.15126082024721976f, - -0.15113142540447713f, - -0.15100202797213924f, - -0.15087262795242237f, - -0.1507432253475438f, - -0.1506138201597199f, - -0.15048441239116978f, - -0.1503550020441099f, - -0.15022558912075767f, - -0.1500961736233297f, - -0.1499667555540452f, - -0.14983733491512f, - -0.1497079117087743f, - -0.1495784859372222f, - -0.14944905760268404f, - -0.14931962670737578f, - -0.14919019325351782f, - -0.14906075724332443f, - -0.14893131867901613f, - -0.14880187756280902f, - -0.14867243389692372f, - -0.14854298768357466f, - -0.14841353892498252f, - -0.1482840876233636f, - -0.1481546337809378f, - -0.14802517739992235f, - -0.1478957184825355f, - -0.14776625703099544f, - -0.14763679304751962f, - -0.14750732653432813f, - -0.14737785749363844f, - -0.14724838592766898f, - -0.14711891183863732f, - -0.14698943522876373f, - -0.1468599561002659f, - -0.1467304744553624f, - -0.14660099029627094f, - -0.14647150362521202f, - -0.14634201444440345f, - -0.14621252275606403f, - -0.14608302856241162f, - -0.14595353186566687f, - -0.14582403266804778f, - -0.1456945309717733f, - -0.1455650267790615f, - -0.14543552009213317f, - -0.1453060109132065f, - -0.1451764992445006f, - -0.14504698508823372f, - -0.1449174684466268f, - -0.14478794932189734f, - -0.14465842771626725f, - -0.1445289036319523f, - -0.14439937707117456f, - -0.1442698480361516f, - -0.1441403165291055f, - -0.1440107825522523f, - -0.1438812461078141f, - -0.14375170719800875f, - -0.1436221658250585f, - -0.14349262199117946f, - -0.14336307569859402f, - -0.1432335269495201f, - -0.14310397574617928f, - -0.1429744220907905f, - -0.14284486598557364f, - -0.14271530743274768f, - -0.14258574643453437f, - -0.14245618299315282f, - -0.1423266171108231f, - -0.1421970487897643f, - -0.1420674780321984f, - -0.14193790484034466f, - -0.14180832921642322f, - -0.14167875116265355f, - -0.14154917068125758f, - -0.14141958777445485f, - -0.14129000244446566f, - -0.14116041469351048f, - -0.14103082452380883f, - -0.140901231937583f, - -0.1407716369370526f, - -0.14064203952443824f, - -0.14051243970195967f, - -0.14038283747183927f, - -0.14025323283629598f, - -0.14012362579755322f, - -0.13999401635782824f, - -0.13986440451934445f, - -0.13973479028432104f, - -0.13960517365498148f, - -0.13947555463354322f, - -0.1393459332222299f, - -0.1392163094232608f, - -0.1390866832388596f, - -0.1389570546712439f, - -0.13882742372263746f, - -0.13869779039525976f, - -0.13856815469133377f, - -0.1384385166130799f, - -0.13830887616271945f, - -0.13817923334247287f, - -0.13804958815456334f, - -0.13791994060121143f, - -0.13779029068463858f, - -0.13766063840706547f, - -0.13753098377071535f, - -0.137401326777809f, - -0.13727166743056807f, - -0.13714200573121327f, - -0.13701234168196816f, - -0.1368826752850536f, - -0.13675300654269135f, - -0.13662333545710242f, - -0.13649366203051042f, - -0.1363639862651364f, - -0.1362343081632023f, - -0.1361046277269293f, - -0.13597494495854112f, - -0.135845259860259f, - -0.13571557243430415f, - -0.13558588268290053f, - -0.13545619060826944f, - -0.13532649621263312f, - -0.13519679949821298f, - -0.13506710046723394f, - -0.13493739912191488f, - -0.13480769546448082f, - -0.13467798949715243f, - -0.13454828122215484f, - -0.13441857064170704f, - -0.13428885775803423f, - -0.13415914257335723f, - -0.13402942508990046f, - -0.1338997053098857f, - -0.13376998323553566f, - -0.13364025886907221f, - -0.13351053221271994f, - -0.13338080326870075f, - -0.1332510720392375f, - -0.13312133852655228f, - -0.13299160273286978f, - -0.13286186466041208f, - -0.13273212431140222f, - -0.1326023816880624f, - -0.13247263679261745f, - -0.1323428896272888f, - -0.13221314019430225f, - -0.1320833884958775f, - -0.13195363453424044f, - -0.13182387831161263f, - -0.13169411983022006f, - -0.13156435909228253f, - -0.13143459610002614f, - -0.13130483085567257f, - -0.131175063361448f, - -0.13104529361957235f, - -0.13091552163227188f, - -0.13078574740176932f, - -0.13065597093028744f, - -0.13052619222005168f, - -0.13039641127328488f, - -0.1302666280922108f, - -0.13013684267905234f, - -0.13000705503603513f, - -0.12987726516538217f, - -0.12974747306931736f, - -0.12961767875006375f, - -0.1294878822098471f, - -0.12935808345089062f, - -0.1292282824754183f, - -0.12909847928565338f, - -0.1289686738838218f, - -0.1288388662721468f, - -0.12870905645285266f, - -0.12857924442816274f, - -0.12844943020030306f, - -0.12831961377149712f, - -0.12818979514396925f, - -0.12805997431994298f, - -0.12793015130164453f, - -0.12780032609129666f, - -0.12767049869112645f, - -0.127540669103355f, - -0.1274108373302095f, - -0.12728100337391285f, - -0.12715116723669234f, - -0.1270213289207692f, - -0.12689148842837075f, - -0.12676164576172008f, - -0.1266318009230446f, - -0.12650195391456567f, - -0.1263721047385108f, - -0.12624225339710318f, - -0.12611239989256956f, - -0.125982544227134f, - -0.1258526864030216f, - -0.12572282642245655f, - -0.1255929642876657f, - -0.12546310000087335f, - -0.12533323356430465f, - -0.125203364980184f, - -0.12507349425073838f, - -0.12494362137819225f, - -0.1248137463647709f, - -0.12468386921269972f, - -0.12455398992420326f, - -0.12442410850150872f, - -0.12429422494684068f, - -0.12416433926242468f, - -0.12403445145048539f, - -0.12390456151325016f, - -0.12377466945294376f, - -0.12364477527179182f, - -0.12351487897201918f, - -0.12338498055585334f, - -0.1232550800255192f, - -0.12312517738324256f, - -0.12299527263124839f, - -0.12286536577176432f, - -0.12273545680701453f, - -0.1226055457392276f, - -0.12247563257062602f, - -0.12234571730343845f, - -0.12221579993988917f, - -0.12208588048220693f, - -0.12195595893261436f, - -0.12182603529334027f, - -0.12169610956660909f, - -0.12156618175464882f, - -0.12143625185968489f, - -0.12130631988394358f, - -0.12117638582965037f, - -0.12104644969903341f, - -0.12091651149431823f, - -0.1207865712177313f, - -0.12065662887149822f, - -0.12052668445784728f, - -0.12039673797900417f, - -0.12026678943719547f, - -0.12013683883464696f, - -0.12000688617358704f, - -0.11987693145624155f, - -0.11974697468483723f, - -0.11961701586159997f, - -0.11948705498875833f, - -0.11935709206853828f, - -0.11922712710316673f, - -0.11909716009486966f, - -0.11896719104587582f, - -0.11883721995841129f, - -0.11870724683470311f, - -0.11857727167697833f, - -0.11844729448746315f, - -0.11831731526838646f, - -0.11818733402197365f, - -0.11805735075045458f, - -0.11792736545605292f, - -0.1177973781409986f, - -0.11766738880751715f, - -0.11753739745783855f, - -0.11740740409418662f, - -0.11727740871879143f, - -0.11714741133387865f, - -0.11701741194167838f, - -0.11688741054441461f, - -0.11675740714431752f, - -0.11662740174361293f, - -0.11649739434453019f, - -0.11636738494929606f, - -0.11623737356013825f, - -0.11610736017928355f, - -0.11597734480896149f, - -0.11584732745139895f, - -0.11571730810882376f, - -0.11558728678346288f, - -0.11545726347754594f, - -0.1153272381932991f, - -0.11519721093295296f, - -0.11506718169873197f, - -0.11493715049286679f, - -0.11480711731758371f, - -0.11467708217511344f, - -0.1145470450676806f, - -0.11441700599751596f, - -0.11428696496684684f, - -0.11415692197790145f, - -0.11402687703290716f, - -0.11389683013409402f, - -0.11376678128368946f, - -0.11363673048392096f, - -0.11350667773701867f, - -0.11337662304521012f, - -0.11324656641072377f, - -0.11311650783578721f, - -0.11298644732263073f, - -0.112856384873482f, - -0.1127263204905696f, - -0.11259625417612128f, - -0.11246618593236832f, - -0.11233611576153589f, - -0.11220604366585535f, - -0.11207596964755367f, - -0.11194589370886142f, - -0.11181581585200652f, - -0.11168573607921783f, - -0.11155565439272334f, - -0.11142557079475374f, - -0.11129548528753708f, - -0.11116539787330235f, - -0.11103530855427768f, - -0.11090521733269387f, - -0.11077512421077912f, - -0.11064502919076255f, - -0.11051493227487241f, - -0.11038483346533966f, - -0.11025473276439171f, - -0.11012463017426048f, - -0.10999452569717169f, - -0.1098644193353573f, - -0.1097343110910449f, - -0.10960420096646646f, - -0.1094740889638479f, - -0.10934397508542129f, - -0.10921385933341432f, - -0.10908374171005913f, - -0.10895362221758174f, - -0.10882350085821435f, - -0.1086933776341848f, - -0.10856325254772445f, - -0.10843312560106211f, - -0.10830299679642746f, - -0.10817286613605022f, - -0.10804273362215924f, - -0.10791259925698611f, - -0.10778246304275975f, - -0.10765232498171f, - -0.10752218507606585f, - -0.107392043328059f, - -0.1072618997399185f, - -0.10713175431387433f, - -0.1070016070521556f, - -0.10687145795699413f, - -0.1067413070306191f, - -0.1066111542752606f, - -0.10648099969314792f, - -0.10635084328651294f, - -0.10622068505758499f, - -0.1060905250085943f, - -0.10596036314177025f, - -0.10583019945934488f, - -0.10570003396354676f, - -0.10556986665660886f, - -0.10543969754075806f, - -0.10530952661822741f, - -0.10517935389124561f, - -0.10504917936204573f, - -0.1049190030328548f, - -0.10478882490590598f, - -0.10465864498342806f, - -0.1045284632676543f, - -0.1043982797608118f, - -0.10426809446513387f, - -0.1041379073828494f, - -0.10400771851619094f, - -0.1038775278673883f, - -0.10374733543867229f, - -0.10361714123227284f, - -0.10348694525042254f, - -0.1033567474953514f, - -0.1032265479692903f, - -0.10309634667446932f, - -0.10296614361312117f, - -0.10283593878747596f, - -0.10270573219976474f, - -0.10257552385221765f, - -0.10244531374706756f, - -0.10231510188654468f, - -0.10218488827288018f, - -0.10205467290830435f, - -0.10192445579505015f, - -0.10179423693534793f, - -0.10166401633142896f, - -0.10153379398552455f, - -0.10140356989986511f, - -0.1012733440766838f, - -0.1011431165182102f, - -0.1010128872266784f, - -0.10088265620431629f, - -0.100752423453358f, - -0.10062218897603328f, - -0.1004919527745763f, - -0.10036171485121509f, - -0.1002314752081839f, - -0.10010123384771258f, - -0.09997099077203542f, - -0.09984074598338057f, - -0.0997104994839824f, - -0.09958025127607087f, - -0.09945000136187954f, - -0.09931974974363929f, - -0.09918949642358195f, - -0.09905924140393851f, - -0.09892898468694263f, - -0.0987987262748253f, - -0.0986684661698185f, - -0.09853820437415331f, - -0.0984079408900635f, - -0.09827767571978019f, - -0.09814740886553545f, - -0.0980171403295605f, - -0.09788687011408923f, - -0.09775659822135199f, - -0.09762632465358362f, - -0.09749604941301278f, - -0.09736577250187436f, - -0.09723549392239973f, - -0.09710521367682118f, - -0.09697493176737015f, - -0.09684464819628075f, - -0.09671436296578445f, - -0.09658407607811369f, - -0.09645378753549998f, - -0.09632349734017756f, - -0.09619320549437806f, - -0.09606291200033307f, - -0.09593261686027692f, - -0.0958023200764413f, - -0.0956720216510588f, - -0.09554172158636118f, - -0.09541141988458374f, - -0.09528111654795562f, - -0.0951508115787122f, - -0.09502050497908444f, - -0.09489019675130778f, - -0.09475988689761146f, - -0.09462957542023095f, - -0.09449926232139737f, - -0.09436894760334533f, - -0.09423863126830687f, - -0.09410831331851491f, - -0.09397799375620156f, - -0.09384767258360155f, - -0.09371734980294703f, - -0.09358702541647103f, - -0.09345669942640576f, - -0.09332637183498607f, - -0.09319604264444334f, - -0.09306571185701336f, - -0.09293537947492578f, - -0.09280504550041646f, - -0.09267470993571687f, - -0.09254437278306295f, - -0.09241403404468441f, - -0.09228369372281728f, - -0.09215335181969309f, - -0.09202300833754787f, - -0.0918926632786115f, - -0.09176231664512007f, - -0.09163196843930523f, - -0.09150161866340226f, - -0.09137126731964378f, - -0.0912409144102633f, - -0.09111055993749442f, - -0.09098020390356981f, - -0.09084984631072489f, - -0.09071948716119238f, - -0.09058912645720597f, - -0.09045876420099848f, - -0.09032840039480539f, - -0.09019803504085955f, - -0.09006766814139475f, - -0.08993729969864389f, - -0.08980692971484261f, - -0.08967655819222384f, - -0.08954618513302147f, - -0.08941581053946852f, - -0.0892854344138007f, - -0.08915505675825108f, - -0.08902467757505367f, - -0.08889429686644156f, - -0.08876391463465057f, - -0.08863353088191389f, - -0.0885031456104656f, - -0.08837275882253894f, - -0.0882423705203698f, - -0.08811198070619063f, - -0.08798158938223821f, - -0.08785119655074328f, - -0.0877208022139427f, - -0.087590406374069f, - -0.08746000903335911f, - -0.08732961019404382f, - -0.08719920985836016f, - -0.0870688080285407f, - -0.08693840470682161f, - -0.08680799989543646f, - -0.08667759359661967f, - -0.08654718581260486f, - -0.08641677654562827f, - -0.08628636579792358f, - -0.0861559535717253f, - -0.08602553986926717f, - -0.08589512469278553f, - -0.08576470804451414f, - -0.08563428992668763f, - -0.08550387034153983f, - -0.08537344929130719f, - -0.08524302677822355f, - -0.0851126028045237f, - -0.08498217737244237f, - -0.08485175048421353f, - -0.08472132214207374f, - -0.08459089234825698f, - -0.08446046110499814f, - -0.08433002841453123f, - -0.08419959427909295f, - -0.08406915870091737f, - -0.08393872168223947f, - -0.08380828322529336f, - -0.08367784333231584f, - -0.08354740200554021f, - -0.08341695924720419f, - -0.08328651505953932f, - -0.08315606944478342f, - -0.08302562240516984f, - -0.08289517394293643f, - -0.08276472406031482f, - -0.08263427275954292f, - -0.0825038200428542f, - -0.08237336591248658f, - -0.08224291037067182f, - -0.08211245341964789f, - -0.08198199506164837f, - -0.0818515352989104f, - -0.08172107413366848f, - -0.08159061156815804f, - -0.08146014760461363f, - -0.08132968224527248f, - -0.08119921549236919f, - -0.08106874734813929f, - -0.08093827781481741f, - -0.0808078068946409f, - -0.08067733458984445f, - -0.08054686090266366f, - -0.0804163858353333f, - -0.08028590939009077f, - -0.08015543156917086f, - -0.0800249523748093f, - -0.07989447180924092f, - -0.07976398987470322f, - -0.07963350657343111f, - -0.07950302190766038f, - -0.07937253587962596f, - -0.07924204849156548f, - -0.07911155974571389f, - -0.07898106964430622f, - -0.07885057818958102f, - -0.0787200853837707f, - -0.07858959122911387f, - -0.07845909572784475f, - -0.07832859888220198f, - -0.07819810069441806f, - -0.0780676011667317f, - -0.0779371003013772f, - -0.0778065981005933f, - -0.0776760945666126f, - -0.0775455897016739f, - -0.07741508350801157f, - -0.07728457598786359f, - -0.07715406714346529f, - -0.07702355697705288f, - -0.07689304549086175f, - -0.07676253268712994f, - -0.07663201856809287f, - -0.07650150313598687f, - -0.0763709863930474f, - -0.07624046834151259f, - -0.07610994898361795f, - -0.0759794283215999f, - -0.07584890635769398f, - -0.07571838309413843f, - -0.07558785853316796f, - -0.07545733267702173f, - -0.07532680552793272f, - -0.07519627708814013f, - -0.07506574735987875f, - -0.07493521634538786f, - -0.0748046840469005f, - -0.07467415046665596f, - -0.07454361560689005f, - -0.07441307946983941f, - -0.07428254205773988f, - -0.07415200337282994f, - -0.07402146341734546f, - -0.07389092219352231f, - -0.07376037970359905f, - -0.07362983594981164f, - -0.07349929093439686f, - -0.0733687446595907f, - -0.07323819712763181f, - -0.0731076483407562f, - -0.07297709830120079f, - -0.07284654701120163f, - -0.07271599447299745f, - -0.07258544068882435f, - -0.07245488566091933f, - -0.07232432939151855f, - -0.07219377188286079f, - -0.07206321313718225f, - -0.07193265315672004f, - -0.07180209194371036f, - -0.07167152950039211f, - -0.07154096582900157f, - -0.07141040093177592f, - -0.07127983481095145f, - -0.07114926746876714f, - -0.07101869890745847f, - -0.07088812912926537f, - -0.07075755813642155f, - -0.07062698593116697f, - -0.07049641251573718f, - -0.07036583789237218f, - -0.07023526206330578f, - -0.07010468503077803f, - -0.06997410679702457f, - -0.06984352736428544f, - -0.06971294673479458f, - -0.0695823649107921f, - -0.0694517818945137f, - -0.06932119768819868f, - -0.06919061229408366f, - -0.06906002571440618f, - -0.06892943795140294f, - -0.06879884900731328f, - -0.06866825888437394f, - -0.06853766758482253f, - -0.06840707511089583f, - -0.06827648146483326f, - -0.06814588664887161f, - -0.06801529066524861f, - -0.067884693516202f, - -0.06775409520396859f, - -0.06762349573078796f, - -0.067492895098897f, - -0.06736229331053352f, - -0.06723169036793446f, - -0.06710108627333942f, - -0.06697048102898541f, - -0.06683987463711029f, - -0.06670926709995109f, - -0.06657865841974751f, - -0.06644804859873572f, - -0.06631743763915635f, - -0.06618682554324382f, - -0.0660562123132388f, - -0.06592559795137755f, - -0.06579498245990076f, - -0.06566436584104295f, - -0.06553374809704485f, - -0.0654031292301428f, - -0.06527250924257756f, - -0.06514188813658375f, - -0.06501126591440216f, - -0.06488064257826921f, - -0.06475001813042487f, - -0.06461939257310646f, - -0.06448876590855222f, - -0.06435813813899952f, - -0.06422750926668837f, - -0.06409687929385621f, - -0.06396624822274136f, - -0.06383561605558122f, - -0.06370498279461594f, - -0.06357434844208298f, - -0.06344371300022074f, - -0.06331307647126674f, - -0.06318243885746117f, - -0.06305180016104156f, - -0.0629211603842464f, - -0.06279051952931326f, - -0.06265987759848243f, - -0.06252923459399153f, - -0.06239859051807907f, - -0.06226794537298274f, - -0.06213729916094288f, - -0.06200665188419718f, - -0.06187600354498425f, - -0.06174535414554272f, - -0.061614703688110346f, - -0.06148405217492755f, - -0.061353399608231246f, - -0.06122274599026279f, - -0.061092091323257346f, - -0.060961435609456306f, - -0.060830778851096654f, - -0.06070012105041981f, - -0.06056946220966102f, - -0.06043880233106175f, - -0.060308141416859036f, - -0.06017747946929439f, - -0.06004681649060312f, - -0.059916152483026744f, - -0.05978548744880241f, - -0.05965482139017078f, - -0.05952415430936991f, - -0.05939348620863873f, - -0.059262817090215324f, - -0.05913214695634044f, - -0.0590014758092522f, - -0.05887080365118961f, - -0.058740130484390814f, - -0.058609456311096646f, - -0.058478781133544384f, - -0.058348104953975785f, - -0.05821742777462639f, - -0.05808674959773799f, - -0.05795607042554794f, - -0.05782539026029806f, - -0.05769470910422396f, - -0.0575640269595675f, - -0.057433343828566984f, - -0.057302659713461636f, - -0.05717197461648981f, - -0.057041288539892536f, - -0.05691060148590819f, - -0.056779913456775175f, - -0.05664922445473457f, - -0.056518534482024804f, - -0.056387843540885225f, - -0.05625715163355429f, - -0.05612645876227315f, - -0.0559957649292803f, - -0.055865070136815145f, - -0.055734374387116224f, - -0.05560367768242563f, - -0.05547298002497926f, - -0.05534228141701925f, - -0.055211581860783315f, - -0.05508088135851273f, - -0.05495017991244612f, - -0.05481947752482303f, - -0.05468877419788211f, - -0.05455806993386471f, - -0.05442736473500951f, - -0.05429665860355613f, - -0.054165951541743286f, - -0.05403524355181238f, - -0.05390453463600218f, - -0.05377382479655233f, - -0.05364311403570164f, - -0.053512402355691574f, - -0.05338168975876006f, - -0.05325097624714949f, - -0.053120261823096045f, - -0.05298954648884216f, - -0.05285883024662582f, - -0.05272811309868948f, - -0.052597395047269395f, - -0.05246667609460805f, - -0.05233595624294348f, - -0.05220523549451734f, - -0.05207451385156859f, - -0.05194379131633711f, - -0.051813067891061916f, - -0.05168234357798469f, - -0.051551618379344466f, - -0.051420892297381185f, - -0.051290165334334815f, - -0.05115943749244443f, - -0.051028708773951784f, - -0.050897979181096f, - -0.050767248716117104f, - -0.05063651738125422f, - -0.05050578517874918f, - -0.05037505211084116f, - -0.05024431817977022f, - -0.050113583387775586f, - -0.04998284773709913f, - -0.049852111229980074f, - -0.04972137386865856f, - -0.049590635655373846f, - -0.04945989659236789f, - -0.049329156681879954f, - -0.04919841592615025f, - -0.04906767432741809f, - -0.04893693188792548f, - -0.04880618860991087f, - -0.04867544449561718f, - -0.04854469954728113f, - -0.04841395376714565f, - -0.048283207157449264f, - -0.048152459720434936f, - -0.04802171145833946f, - -0.04789096237340581f, - -0.04776021246787257f, - -0.04762946174398277f, - -0.047498710203973234f, - -0.04736795785008702f, - -0.04723720468456275f, - -0.04710645070964264f, - -0.046975695927566216f, - -0.04684494034057393f, - -0.04671418395090537f, - -0.046583426760802765f, - -0.046452668772505736f, - -0.04632190998825477f, - -0.04619115041028951f, - -0.04606039004085225f, - -0.04592962888218265f, - -0.04579886693652127f, - -0.04566810420610779f, - -0.04553734069318457f, - -0.04540657639999132f, - -0.04527581132876865f, - -0.045145045481757184f, - -0.045014278861196674f, - -0.04488351146932954f, - -0.04475274330839557f, - -0.04462197438063543f, - -0.044491204688288925f, - -0.044360434233598534f, - -0.044229663018803204f, - -0.04409889104614632f, - -0.043968118317865075f, - -0.04383734483620289f, - -0.04370657060339876f, - -0.04357579562169612f, - -0.04344501989333222f, - -0.043314243420550534f, - -0.0431834662055901f, - -0.043052688250694415f, - -0.04292190955810077f, - -0.04279113013005269f, - -0.042660349968789264f, - -0.042529569076553156f, - -0.042398787455584376f, - -0.04226800510812382f, - -0.042137222036411535f, - -0.042006438242690215f, - -0.04187565372919993f, - -0.04174486849818163f, - -0.0416140825518754f, - -0.041483295892523996f, - -0.04135250852236752f, - -0.041221720443646984f, - -0.04109093165860252f, - -0.040960142169476924f, - -0.04082935197851036f, - -0.04069856108794389f, - -0.04056776950001767f, - -0.040436977216974576f, - -0.040306184241054796f, - -0.040175390574499446f, - -0.040044596219548735f, - -0.03991380117844558f, - -0.03978300545343023f, - -0.03965220904674382f, - -0.03952141196062663f, - -0.03939061419732162f, - -0.039259815759069075f, - -0.039129016648109305f, - -0.038998216866685295f, - -0.03886741641703737f, - -0.03873661530140677f, - -0.03860581352203384f, - -0.038475011081162504f, - -0.03834420798103047f, - -0.03821340422388168f, - -0.03808259981195565f, - -0.037951794747495445f, - -0.03782098903274149f, - -0.0376901826699351f, - -0.03755937566131673f, - -0.03742856800912949f, - -0.03729775971561385f, - -0.03716695078301118f, - -0.037036141213561954f, - -0.036905331009509344f, - -0.03677452017309386f, - -0.03664370870655691f, - -0.036512896612139016f, - -0.03638208389208339f, - -0.0362512705486297f, - -0.03612045658402206f, - -0.03598964200049838f, - -0.03585882680030279f, - -0.03572801098567501f, - -0.03559719455885919f, - -0.03546637752209328f, - -0.03533555987762146f, - -0.03520474162768347f, - -0.035073922774523536f, - -0.03494310332037963f, - -0.03481228326749597f, - -0.034681462618113244f, - -0.03455064137447214f, - -0.03441981953881602f, - -0.03428899711338559f, - -0.034158174100422455f, - -0.03402735050216735f, - -0.03389652632086367f, - -0.03376570155875217f, - -0.033634876218074504f, - -0.033504050301071425f, - -0.033373223809986384f, - -0.03324239674706017f, - -0.03311156911453447f, - -0.03298074091465009f, - -0.032849912149650516f, - -0.032719082821776574f, - -0.03258825293326998f, - -0.03245742248637159f, - -0.032326591483324923f, - -0.032195759926370845f, - -0.03206492781775112f, - -0.031934095159706626f, - -0.03180326195448093f, - -0.031672428204314935f, - -0.031541593911450436f, - -0.03141075907812836f, - -0.0312799237065923f, - -0.031149087799082313f, - -0.031018251357842894f, - -0.030887414385112343f, - -0.03075657688313518f, - -0.030625738854151496f, - -0.030494900300405824f, - -0.030364061224136495f, - -0.030233221627588073f, - -0.030102381513000674f, - -0.02997154088261799f, - -0.029840699738681052f, - -0.029709858083431784f, - -0.029579015919111235f, - -0.02944817324796313f, - -0.02931733007222853f, - -0.0291864863941494f, - -0.029055642215966824f, - -0.028924797539924555f, - -0.028793952368263695f, - -0.028663106703226242f, - -0.02853226054705331f, - -0.02840141390198869f, - -0.028270566770273516f, - -0.028139719154149815f, - -0.02800887105585963f, - -0.02787802247764412f, - -0.027747173421747113f, - -0.027616323890409786f, - -0.02748547388587421f, - -0.027354623410381577f, - -0.02722377246617575f, - -0.02709292105549794f, - -0.026962069180590242f, - -0.026831216843693887f, - -0.026700364047052765f, - -0.026569510792907234f, - -0.026438657083502088f, - -0.02630780292107592f, - -0.026176948307873545f, - -0.026046093246135344f, - -0.025915237738106146f, - -0.025784381786024577f, - -0.02565352539213548f, - -0.025522668558679268f, - -0.0253918112879008f, - -0.025260953582038732f, - -0.025130095443337937f, - -0.024999236874038856f, - -0.024868377876385492f, - -0.024737518452619192f, - -0.0246066586049822f, - -0.02447579833571587f, - -0.024344937647064233f, - -0.02421407654126867f, - -0.024083215020571445f, - -0.023952353087213954f, - -0.023821490743440248f, - -0.02369062799149173f, - -0.02355976483361071f, - -0.02342890127203859f, - -0.023298037309019467f, - -0.023167172946794767f, - -0.02303630818760682f, - -0.022905443033697067f, - -0.022774577487309624f, - -0.02264371155068595f, - -0.022512845226068393f, - -0.02238197851569843f, - -0.022251111421820194f, - -0.02212024394667518f, - -0.021989376092504873f, - -0.021858507861554324f, - -0.021727639256062373f, - -0.02159677027827408f, - -0.021465900930430073f, - -0.02133503121477543f, - -0.021204161133549018f, - -0.021073290688995917f, - -0.02094241988335679f, - -0.020811548718876728f, - -0.020680677197794626f, - -0.020549805322355598f, - -0.020418933094800317f, - -0.020288060517373023f, - -0.020157187592315294f, - -0.0200263143218696f, - -0.01989544070827753f, - -0.01976456675378335f, - -0.019633692460628658f, - -0.01950281783105595f, - -0.019371942867306837f, - -0.019241067571625605f, - -0.01911019194625388f, - -0.01897931599343418f, - -0.018848439715408137f, - -0.01871756311442006f, - -0.01858668619271071f, - -0.01845580895252529f, - -0.01832493139610279f, - -0.01819405352568843f, - -0.01806317534352299f, - -0.017932296851851697f, - -0.01780141805291357f, - -0.017670538948953835f, - -0.017539659542214193f, - -0.017408779834936335f, - -0.017277899829364625f, - -0.01714701952774077f, - -0.017016138932307367f, - -0.016885258045306134f, - -0.016754376868981454f, - -0.01662349540557505f, - -0.016492613657329548f, - -0.016361731626486676f, - -0.01623084931529084f, - -0.016099966725983787f, - -0.015969083860808152f, - -0.01583820072200569f, - -0.01570731731182083f, - -0.015576433632495331f, - -0.015445549686271848f, - -0.015314665475392156f, - -0.015183781002100697f, - -0.015052896268639253f, - -0.014922011277250498f, - -0.014791126030176223f, - -0.014660240529660886f, - -0.01452935477794629f, - -0.014398468777275124f, - -0.014267582529889198f, - -0.014136696038032989f, - -0.014005809303947422f, - -0.013874922329877875f, - -0.013744035118063505f, - -0.013613147670749694f, - -0.013482259990177388f, - -0.013351372078591975f, - -0.013220483938232634f, - -0.013089595571344759f, - -0.012958706980169312f, - -0.012827818166951699f, - -0.01269692913393111f, - -0.01256603988335296f, - -0.012435150417458221f, - -0.012304260738491429f, - -0.012173370848694453f, - -0.012042480750310057f, - -0.011911590445580118f, - -0.011780699936749182f, - -0.011649809226059136f, - -0.011518918315752757f, - -0.011388027208072823f, - -0.011257135905261232f, - -0.011126244409562547f, - -0.01099535272321867f, - -0.010864460848472394f, - -0.01073356878756563f, - -0.010602676542742951f, - -0.010471784116246274f, - -0.010340891510318407f, - -0.010209998727201268f, - -0.010079105769139448f, - -0.009948212638374872f, - -0.009817319337150361f, - -0.009686425867707849f, - -0.009555532232291932f, - -0.009424638433143666f, - -0.00929374447250854f, - -0.00916285035262584f, - -0.009031956075741062f, - -0.008901061644095268f, - -0.008770167059933963f, - -0.00863927232549644f, - -0.008508377443028207f, - -0.008377482414770338f, - -0.008246587242968346f, - -0.008115691929861535f, - -0.007984796477695422f, - -0.00785390088871109f, - -0.007723005165153177f, - -0.007592109309263657f, - -0.0074612133232853945f, - -0.00733031720946037f, - -0.007199420970033229f, - -0.007068524607245954f, - -0.006937628123341419f, - -0.006806731520561613f, - -0.006675834801151189f, - -0.00654493796735214f, - -0.006414041021407347f, - -0.006283143965558805f, - -0.006152246802051177f, - -0.006021349533126463f, - -0.005890452161027551f, - -0.005759554687996444f, - -0.005628657116277812f, - -0.00549775944811366f, - -0.005366861685746886f, - -0.005235963831420387f, - -0.005105065887376174f, - -0.004974167855858924f, - -0.004843269739110653f, - -0.004712371539374262f, - -0.004581473258891771f, - -0.004450574899907861f, - -0.004319676464663663f, - -0.004188777955404753f, - -0.004057879374370489f, - -0.003926980723806445f, - -0.0037960820059537597f, - -0.003665183223058011f, - -0.003534284377358562f, - -0.0034033854711009925f, - -0.0032724865065264447f, - -0.003141587485879613f, - -0.003010688411402528f, - -0.0028797892853381106f, - -0.002748890109928394f, - -0.002617990887418076f, - -0.002487091620049191f, - -0.002356192310064663f, - -0.002225292959706529f, - -0.0020943935712194888f, - -0.001963494146845581f, - -0.001832594688827731f, - -0.0017016951994079782f, - -0.001570795680831026f, - -0.001439896135338026f, - -0.001308996565174571f, - -0.0011780969725800373f, - -0.0010471973598000183f, - -0.0009162977290765556f, - -0.0007853980826525788f, - -0.0006544984227701298f, - -0.0005235987516739153f, - -0.00039269907160597775f, - -0.0002617993848092476f, - -0.00013089969352576765f, - }; -} // namespace WaveTable diff --git a/Gems/AudioSystem/Code/audiosystem_tests_files.cmake b/Gems/AudioSystem/Code/audiosystem_tests_files.cmake index 5cc8fd6809..c163473703 100644 --- a/Gems/AudioSystem/Code/audiosystem_tests_files.cmake +++ b/Gems/AudioSystem/Code/audiosystem_tests_files.cmake @@ -10,5 +10,4 @@ set(FILES Tests/AudioSystemTest.cpp Tests/Mocks/ATLEntitiesMock.h Tests/Mocks/FileCacheManagerMock.h - Tests/Mocks/IAudioSystemImplementationMock.h ) From bce3320fb50bb6d9cf95468da66a550d7701aec6 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 22 Dec 2021 15:18:54 -0800 Subject: [PATCH 146/284] Remove unused files from Gems/AWSCore Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Disabled/HttpClientComponent_white.png | 3 - .../Icons/Components/HttpClientComponent.png | 3 - .../Viewport/HttpClientComponent.png | 3 - .../Editor/Translation/scriptcanvas_en_us.ts | 171 ------------------ .../Include/Framework/HttpClientComponent.h | 69 ------- .../Code/Include/Framework/JobExecuter.h | 66 ------- .../Include/Framework/MultipartFormData.h | 76 -------- .../Source/Framework/MultipartFormData.cpp | 123 ------------- Gems/AWSCore/Code/awscore_files.cmake | 4 - 9 files changed, 518 deletions(-) delete mode 100644 Assets/Editor/Icons/Components/Disabled/HttpClientComponent_white.png delete mode 100644 Assets/Editor/Icons/Components/HttpClientComponent.png delete mode 100644 Assets/Editor/Icons/Components/Viewport/HttpClientComponent.png delete mode 100644 Gems/AWSCore/Code/Include/Framework/HttpClientComponent.h delete mode 100644 Gems/AWSCore/Code/Include/Framework/JobExecuter.h delete mode 100644 Gems/AWSCore/Code/Include/Framework/MultipartFormData.h delete mode 100644 Gems/AWSCore/Code/Source/Framework/MultipartFormData.cpp diff --git a/Assets/Editor/Icons/Components/Disabled/HttpClientComponent_white.png b/Assets/Editor/Icons/Components/Disabled/HttpClientComponent_white.png deleted file mode 100644 index 12b5be2ccc..0000000000 --- a/Assets/Editor/Icons/Components/Disabled/HttpClientComponent_white.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bfc2ef8c6dbf2fba078e27e4e94384099e090468e679327dd826a5cbf22b04ed -size 1019 diff --git a/Assets/Editor/Icons/Components/HttpClientComponent.png b/Assets/Editor/Icons/Components/HttpClientComponent.png deleted file mode 100644 index 7a619a5a59..0000000000 --- a/Assets/Editor/Icons/Components/HttpClientComponent.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:708b12d41229afab78e0f7d59097ae3de855fea8525a920c5c214fc0ce79f1bd -size 1209 diff --git a/Assets/Editor/Icons/Components/Viewport/HttpClientComponent.png b/Assets/Editor/Icons/Components/Viewport/HttpClientComponent.png deleted file mode 100644 index 16e4917180..0000000000 --- a/Assets/Editor/Icons/Components/Viewport/HttpClientComponent.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fab63af9b50790dca25330058e70517987ea8bf11c00f9353dd951ebdbd1dbe5 -size 5008 diff --git a/Assets/Editor/Translation/scriptcanvas_en_us.ts b/Assets/Editor/Translation/scriptcanvas_en_us.ts index 6d436b7caf..bfbd8cf316 100644 --- a/Assets/Editor/Translation/scriptcanvas_en_us.ts +++ b/Assets/Editor/Translation/scriptcanvas_en_us.ts @@ -49513,106 +49513,6 @@ An Entity can be selected by using the pick button, or by dragging an Entity fro - - Handler: HttpClientComponentNotificationBus - - HANDLER_HTTPCLIENTCOMPONENTNOTIFICATIONBUS_NAME - HttpClientComponentNotificationBus - - - HANDLER_HTTPCLIENTCOMPONENTNOTIFICATIONBUS_TOOLTIP - - - - HANDLER_HTTPCLIENTCOMPONENTNOTIFICATIONBUS_CATEGORY - Networking - - - HANDLER_HTTPCLIENTCOMPONENTNOTIFICATIONBUS_ONHTTPREQUESTSUCCESS_NAME - Class/Bus: HttpClientComponentNotificationBus Event/Method: OnHttpRequestSuccess - OnHttpRequestSuccess - - - HANDLER_HTTPCLIENTCOMPONENTNOTIFICATIONBUS_ONHTTPREQUESTSUCCESS_TOOLTIP - - - - HANDLER_HTTPCLIENTCOMPONENTNOTIFICATIONBUS_ONHTTPREQUESTSUCCESS_CATEGORY - - - - HANDLER_HTTPCLIENTCOMPONENTNOTIFICATIONBUS_ONHTTPREQUESTSUCCESS_OUT_NAME - - - - HANDLER_HTTPCLIENTCOMPONENTNOTIFICATIONBUS_ONHTTPREQUESTSUCCESS_OUT_TOOLTIP - - - - HANDLER_HTTPCLIENTCOMPONENTNOTIFICATIONBUS_ONHTTPREQUESTSUCCESS_IN_NAME - - - - HANDLER_HTTPCLIENTCOMPONENTNOTIFICATIONBUS_ONHTTPREQUESTSUCCESS_IN_TOOLTIP - - - - HANDLER_HTTPCLIENTCOMPONENTNOTIFICATIONBUS_ONHTTPREQUESTSUCCESS_OUTPUT0_NAME - Simple Type: Number C++ Type: int - - - - HANDLER_HTTPCLIENTCOMPONENTNOTIFICATIONBUS_ONHTTPREQUESTSUCCESS_OUTPUT0_TOOLTIP - - - - HANDLER_HTTPCLIENTCOMPONENTNOTIFICATIONBUS_ONHTTPREQUESTSUCCESS_OUTPUT1_NAME - Simple Type: String C++ Type: AZStd::basic_string<char, AZStd::char_traits<char>, allocator> - - - - HANDLER_HTTPCLIENTCOMPONENTNOTIFICATIONBUS_ONHTTPREQUESTSUCCESS_OUTPUT1_TOOLTIP - - - - HANDLER_HTTPCLIENTCOMPONENTNOTIFICATIONBUS_ONHTTPREQUESTFAILURE_NAME - Class/Bus: HttpClientComponentNotificationBus Event/Method: OnHttpRequestFailure - OnHttpRequestFailure - - - HANDLER_HTTPCLIENTCOMPONENTNOTIFICATIONBUS_ONHTTPREQUESTFAILURE_TOOLTIP - - - - HANDLER_HTTPCLIENTCOMPONENTNOTIFICATIONBUS_ONHTTPREQUESTFAILURE_CATEGORY - - - - HANDLER_HTTPCLIENTCOMPONENTNOTIFICATIONBUS_ONHTTPREQUESTFAILURE_OUT_NAME - - - - HANDLER_HTTPCLIENTCOMPONENTNOTIFICATIONBUS_ONHTTPREQUESTFAILURE_OUT_TOOLTIP - - - - HANDLER_HTTPCLIENTCOMPONENTNOTIFICATIONBUS_ONHTTPREQUESTFAILURE_IN_NAME - - - - HANDLER_HTTPCLIENTCOMPONENTNOTIFICATIONBUS_ONHTTPREQUESTFAILURE_IN_TOOLTIP - - - - HANDLER_HTTPCLIENTCOMPONENTNOTIFICATIONBUS_ONHTTPREQUESTFAILURE_OUTPUT0_NAME - Simple Type: Number C++ Type: int - - - - HANDLER_HTTPCLIENTCOMPONENTNOTIFICATIONBUS_ONHTTPREQUESTFAILURE_OUTPUT0_TOOLTIP - - - Handler: InputEventNotificationBus @@ -79046,77 +78946,6 @@ The element is removed from its current parent and added as a child of the new p - - EBus: HttpClientComponentRequestBus - - HTTPCLIENTCOMPONENTREQUESTBUS_NAME - HttpClientComponentRequestBus - - - HTTPCLIENTCOMPONENTREQUESTBUS_TOOLTIP - - - - HTTPCLIENTCOMPONENTREQUESTBUS_CATEGORY - Networking - - - HTTPCLIENTCOMPONENTREQUESTBUS_MAKEHTTPREQUEST_NAME - Class/Bus: HttpClientComponentRequestBus Event/Method: MakeHttpRequest - MakeHttpRequest - - - HTTPCLIENTCOMPONENTREQUESTBUS_MAKEHTTPREQUEST_TOOLTIP - - - - HTTPCLIENTCOMPONENTREQUESTBUS_MAKEHTTPREQUEST_CATEGORY - - - - HTTPCLIENTCOMPONENTREQUESTBUS_MAKEHTTPREQUEST_OUT_NAME - - - - HTTPCLIENTCOMPONENTREQUESTBUS_MAKEHTTPREQUEST_OUT_TOOLTIP - - - - HTTPCLIENTCOMPONENTREQUESTBUS_MAKEHTTPREQUEST_IN_NAME - - - - HTTPCLIENTCOMPONENTREQUESTBUS_MAKEHTTPREQUEST_IN_TOOLTIP - - - - HTTPCLIENTCOMPONENTREQUESTBUS_MAKEHTTPREQUEST_PARAM0_NAME - Simple Type: String C++ Type: AZStd::basic_string<char, AZStd::char_traits<char>, allocator> - - - - HTTPCLIENTCOMPONENTREQUESTBUS_MAKEHTTPREQUEST_PARAM0_TOOLTIP - - - - HTTPCLIENTCOMPONENTREQUESTBUS_MAKEHTTPREQUEST_PARAM1_NAME - Simple Type: String C++ Type: AZStd::basic_string<char, AZStd::char_traits<char>, allocator> - - - - HTTPCLIENTCOMPONENTREQUESTBUS_MAKEHTTPREQUEST_PARAM1_TOOLTIP - - - - HTTPCLIENTCOMPONENTREQUESTBUS_MAKEHTTPREQUEST_PARAM2_NAME - Simple Type: String C++ Type: AZStd::basic_string<char, AZStd::char_traits<char>, allocator> - - - - HTTPCLIENTCOMPONENTREQUESTBUS_MAKEHTTPREQUEST_PARAM2_TOOLTIP - - - Handler: AWSBehaviorURLNotificationsBus diff --git a/Gems/AWSCore/Code/Include/Framework/HttpClientComponent.h b/Gems/AWSCore/Code/Include/Framework/HttpClientComponent.h deleted file mode 100644 index 48b59cc56a..0000000000 --- a/Gems/AWSCore/Code/Include/Framework/HttpClientComponent.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * 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 - -#include -#include -#include -#include -#include -#include - - - -#include - - -namespace AWSCore -{ - ///////////////////////////////////////////// - // EBus Definitions - ///////////////////////////////////////////// - class HttpClientComponentRequests - : public AZ::ComponentBus - { - public: - virtual ~HttpClientComponentRequests() {} - virtual void MakeHttpRequest(AZStd::string url, AZStd::string method, AZStd::string jsonBody) {} - }; - - using HttpClientComponentRequestBus = AZ::EBus; - - class HttpClientComponentNotifications - : public AZ::ComponentBus - { - public: - ~HttpClientComponentNotifications() override = default; - virtual void OnHttpRequestSuccess(int responseCode, AZStd::string responseBody) {} - virtual void OnHttpRequestFailure(int responseCode) {} - }; - - using HttpClientComponentNotificationBus = AZ::EBus; - - ///////////////////////////////////////////// - // Entity Component - ///////////////////////////////////////////// - class HttpClientComponent - : public AZ::Component - , public HttpClientComponentRequestBus::Handler - { - public: - AZ_COMPONENT(HttpClientComponent, "{23ECDBDF-129A-4670-B9B4-1E0B541ACD61}"); - ~HttpClientComponent() override = default; - - void Init() override; - void Activate() override; - void Deactivate() override; - - void MakeHttpRequest(AZStd::string, AZStd::string, AZStd::string) override; - - static void Reflect(AZ::ReflectContext*); - }; - -} // namespace AWSCore diff --git a/Gems/AWSCore/Code/Include/Framework/JobExecuter.h b/Gems/AWSCore/Code/Include/Framework/JobExecuter.h deleted file mode 100644 index 899644ed61..0000000000 --- a/Gems/AWSCore/Code/Include/Framework/JobExecuter.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * 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 - -#include -#include - -#include - -namespace AWSCore -{ - - /// AZ:Job type used by the JobExecuter. It is used call the callback - /// function provided by the AWS SDK. - using ExecuterJob = AZ::JobFunction>; - - /// This class provides a simple alternative to using the the AwsRequestJob, - /// AwsApiClientJob, or AwsApiJob classes. Those classes provide configuration - /// management and more abstracted usage patterns. With JobExecutor you need - /// to do all the configuration management and work directly with the AWS API. - /// - /// An AWS API async executer that uses the AZ::Job system to make AWS service calls. - /// To use, set the Aws::Client::ClientConfiguration executor field so it points to - /// an instance of this class, then use that client configuration object when creating - /// AWS service client objects. This will cause the Async APIs on the AWS service - /// client object to use the AZ::Job system to execute the request. - class JobExecuter - : public Aws::Utils::Threading::Executor - { - - public: - /// Initialize a JobExecuter object. - /// - /// \param context - The JobContext that will be used to execute the jobs created - /// by the JobExecuter. - /// - /// By default the global JobContext is used. However, the AWS SDK currently - /// only supports blocking calls, so, to avoid impacting other jobs, it is - /// recommended that you create a JobContext with a JobManager dedicated to - /// dedicated to processing these jobs. This context can also be used with - /// AwsApiCore::HttpJob. - JobExecuter(AZ::JobContext* context) - : m_context{ context } - { - } - - protected: - AZ::JobContext* m_context; - - /// Called by the AWS SDK to queue a callback for execution. - bool SubmitToThread(std::function&& callback) override - { - ExecuterJob* job = aznew ExecuterJob(callback, true, m_context); - job->Start(); - } - - }; - -} // namespace AWCore - diff --git a/Gems/AWSCore/Code/Include/Framework/MultipartFormData.h b/Gems/AWSCore/Code/Include/Framework/MultipartFormData.h deleted file mode 100644 index 153cbac644..0000000000 --- a/Gems/AWSCore/Code/Include/Framework/MultipartFormData.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - * 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 - -#include -#include -#include - -namespace AWSCore -{ - /// Class for generating multi-part form data capable of sending files via HTTP POST. - /// The current implementation writes the entire contents of the file to an output buffer in a single operation, - /// i.e. there is no streaming for large files. - /// A stream-based solution would require better bridging of types between CGF and AWS. - class MultipartFormData - { - public: - struct ComposeResult - { - AZStd::string m_content; // Use for the request body - AZStd::string m_contentLength; // Use for the 'Content-Length' HTTP header field - AZStd::string m_contentType; // Use for the 'Content-Type' HTTP header field - }; - - public: - AZ_CLASS_ALLOCATOR(MultipartFormData, AZ::SystemAllocator, 0); - - /// Add a field/value pair to the form - void AddField(AZStd::string name, AZStd::string value); - - /// Add a file's contents to the form - void AddFile(AZStd::string fieldName, AZStd::string fileName, const char* path); - void AddFileBytes(AZStd::string fieldName, AZStd::string fileName, const void* bytes, size_t length); - - /// Set a custom boundary delimiter to use in the form. This is optional; a random one will be generated normally. - void SetCustomBoundary(AZStd::string boundary); - - /// Compose the form's contents and returns those contents along with metadata. - ComposeResult ComposeForm(); - - private: - struct Field - { - AZStd::string m_fieldName; - AZStd::string m_value; - }; - - struct FileField - { - AZStd::string m_fieldName; - AZStd::string m_fileName; - AZStd::vector m_fileData; - }; - - using Fields = AZStd::vector; - using FileFields = AZStd::vector; - - private: - void Prepare(); - size_t EstimateBodySize() const; - - private: - AZStd::string m_boundary; - AZStd::string m_separator; - AZStd::string m_composedBody; - Fields m_fields; - FileFields m_fileFields; - }; - -} // namespace AWSCore diff --git a/Gems/AWSCore/Code/Source/Framework/MultipartFormData.cpp b/Gems/AWSCore/Code/Source/Framework/MultipartFormData.cpp deleted file mode 100644 index 47059ac156..0000000000 --- a/Gems/AWSCore/Code/Source/Framework/MultipartFormData.cpp +++ /dev/null @@ -1,123 +0,0 @@ -/* - * 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 -#include - -namespace AWSCore -{ - namespace Detail - { - namespace - { - const char FIELD_HEADER_FMT[] = "--%s\r\nContent-Disposition: form-data; name=\"%s\"\r\n\r\n"; - const char FILE_HEADER_FMT[] = "--%s\r\nContent-Disposition: form-data; name=\"%s\"; filename=\"%s\"\r\n\r\n"; - const char FOOTER_FMT[] = "--%s--\r\n"; - const char ENTRY_SEPARATOR[] = "\r\n"; - } - } - - void MultipartFormData::AddField(AZStd::string name, AZStd::string value) - { - m_fields.emplace_back(Field{ std::move(name), std::move(value) }); - } - - void MultipartFormData::AddFile(AZStd::string fieldName, AZStd::string fileName, const char* path) - { - AZ::IO::FileIOBase* fileIO = AZ::IO::FileIOBase::GetDirectInstance(); - - AZ::IO::HandleType fileHandle; - - if (fileIO->Open(path, AZ::IO::OpenMode::ModeRead | AZ::IO::OpenMode::ModeBinary, fileHandle)) { - m_fileFields.emplace_back(FileField{ std::move(fieldName), std::move(fileName) , AZStd::vector{} }); - auto destFileBuffer = &m_fileFields.back().m_fileData; - AZ::u64 size; - if (fileIO->Size(path, size) && size > 0) { - destFileBuffer->resize(size); - fileIO->Read(fileHandle, &destFileBuffer->at(0), destFileBuffer->size()); - } - } - fileIO->Close(fileHandle); - } - - void MultipartFormData::AddFileBytes(AZStd::string fieldName, AZStd::string fileName, const void* bytes, size_t length) - { - m_fileFields.emplace_back(FileField{ std::move(fieldName), std::move(fileName) , AZStd::vector{} }); - m_fileFields.back().m_fileData.reserve(length); - m_fileFields.back().m_fileData.assign(static_cast(bytes), static_cast(bytes) + length); - } - - void MultipartFormData::SetCustomBoundary(AZStd::string boundary) - { - m_boundary = boundary; - } - - void MultipartFormData::Prepare() - { - if (m_boundary.empty()) - { - char buffer[33]; - AZ::Uuid::CreateRandom().ToString(buffer, sizeof(buffer), false, false); - m_boundary = buffer; - } - } - - size_t MultipartFormData::EstimateBodySize() const - { - // Estimate the size of the final string as best we can to avoid unnecessary copies - const size_t boundarySize = m_boundary.length(); - const size_t individualFieldBaseSize = boundarySize + sizeof(Detail::FIELD_HEADER_FMT) + sizeof(Detail::ENTRY_SEPARATOR); - const size_t individualFileBaseSize = boundarySize + sizeof(Detail::FILE_HEADER_FMT) + sizeof(Detail::ENTRY_SEPARATOR); - size_t estimatedSize = sizeof(Detail::FOOTER_FMT) + boundarySize; - - for (const auto& field : m_fields) - { - estimatedSize += individualFieldBaseSize + field.m_fieldName.length() + field.m_value.length(); - } - - for (const auto& fileField : m_fileFields) - { - estimatedSize += individualFileBaseSize + fileField.m_fieldName.length() + fileField.m_fileName.length() + fileField.m_fileData.size(); - } - - return estimatedSize; - } - - MultipartFormData::ComposeResult MultipartFormData::ComposeForm() - { - ComposeResult result; - Prepare(); - - // Build the form body - result.m_content.reserve(EstimateBodySize()); - - for (const auto& field : m_fields) - { - result.m_content.append(AZStd::string::format(Detail::FIELD_HEADER_FMT, m_boundary.c_str(), field.m_fieldName.c_str())); - result.m_content.append(field.m_value); - result.m_content.append(Detail::ENTRY_SEPARATOR); - } - - for (const auto& fileField : m_fileFields) - { - result.m_content.append(AZStd::string::format(Detail::FILE_HEADER_FMT, m_boundary.c_str(), fileField.m_fieldName.c_str(), fileField.m_fileName.c_str())); - result.m_content.append(fileField.m_fileData.begin(), fileField.m_fileData.end()); - result.m_content.append(Detail::ENTRY_SEPARATOR); - } - - result.m_content.append(AZStd::string::format(Detail::FOOTER_FMT, m_boundary.c_str())); - - // Populate the metadata - result.m_contentLength = AZStd::string::format("%zu", result.m_content.length()); - result.m_contentType = AZStd::string::format("multipart/form-data; boundary=%s", m_boundary.c_str()); - - return result; - } - - -} // namespace AWSCore diff --git a/Gems/AWSCore/Code/awscore_files.cmake b/Gems/AWSCore/Code/awscore_files.cmake index 9abc162f8a..c59802119c 100644 --- a/Gems/AWSCore/Code/awscore_files.cmake +++ b/Gems/AWSCore/Code/awscore_files.cmake @@ -16,13 +16,10 @@ set(FILES Include/Framework/AWSApiRequestJob.h Include/Framework/AWSApiRequestJobConfig.h Include/Framework/Error.h - Include/Framework/HttpClientComponent.h Include/Framework/HttpRequestJob.h Include/Framework/HttpRequestJobConfig.h - Include/Framework/JobExecuter.h Include/Framework/JsonObjectHandler.h Include/Framework/JsonWriter.h - Include/Framework/MultipartFormData.h Include/Framework/RequestBuilder.h Include/Framework/ServiceClientJob.h Include/Framework/ServiceClientJobConfig.h @@ -61,7 +58,6 @@ set(FILES Source/Framework/HttpRequestJob.cpp Source/Framework/HttpRequestJobConfig.cpp Source/Framework/JsonObjectHandler.cpp - Source/Framework/MultipartFormData.cpp Source/Framework/RequestBuilder.cpp Source/Framework/ServiceJob.cpp Source/Framework/ServiceJobConfig.cpp From 4fe43c81cf3e5d4b4afd329f470b351d27e04bc4 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 22 Dec 2021 15:27:14 -0800 Subject: [PATCH 147/284] Removes ExporterFileProcessor from Gems/EMotionFX Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../CommandSystem/Source/ActorCommands.cpp | 1 - .../Source/AnimGraphCommands.cpp | 1 - .../CommandSystem/Source/MotionCommands.cpp | 1 - .../Source/MotionSetCommands.cpp | 1 - .../Exporter/ExporterFileProcessor.cpp | 127 ------------------ .../Exporter/ExporterFileProcessor.h | 46 ------- .../ExporterLib/exporterlib_files.cmake | 2 - .../Behaviors/ActorGroupBehavior.cpp | 1 + .../SceneAPIExt/Groups/MotionGroup.cpp | 1 - .../Code/EMotionFX/Source/MotionManager.h | 1 + 10 files changed, 2 insertions(+), 180 deletions(-) delete mode 100644 Gems/EMotionFX/Code/EMotionFX/Exporters/ExporterLib/Exporter/ExporterFileProcessor.cpp delete mode 100644 Gems/EMotionFX/Code/EMotionFX/Exporters/ExporterLib/Exporter/ExporterFileProcessor.h diff --git a/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/ActorCommands.cpp b/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/ActorCommands.cpp index ef573ab40c..fc22a81726 100644 --- a/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/ActorCommands.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/ActorCommands.cpp @@ -9,7 +9,6 @@ #include #include #include -#include #include #include #include diff --git a/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/AnimGraphCommands.cpp b/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/AnimGraphCommands.cpp index b1a830c838..69a7068f58 100644 --- a/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/AnimGraphCommands.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/AnimGraphCommands.cpp @@ -24,7 +24,6 @@ #include #include #include -#include #include diff --git a/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/MotionCommands.cpp b/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/MotionCommands.cpp index 2bec066549..5da75006dd 100644 --- a/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/MotionCommands.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/MotionCommands.cpp @@ -20,7 +20,6 @@ #include #include #include -#include #include #include diff --git a/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/MotionSetCommands.cpp b/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/MotionSetCommands.cpp index 34fee273c2..08d1e62528 100644 --- a/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/MotionSetCommands.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/MotionSetCommands.cpp @@ -22,7 +22,6 @@ #include #include #include -#include #include namespace CommandSystem diff --git a/Gems/EMotionFX/Code/EMotionFX/Exporters/ExporterLib/Exporter/ExporterFileProcessor.cpp b/Gems/EMotionFX/Code/EMotionFX/Exporters/ExporterLib/Exporter/ExporterFileProcessor.cpp deleted file mode 100644 index 1d6687f135..0000000000 --- a/Gems/EMotionFX/Code/EMotionFX/Exporters/ExporterLib/Exporter/ExporterFileProcessor.cpp +++ /dev/null @@ -1,127 +0,0 @@ -/* - * 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 the required headers -#include "ExporterFileProcessor.h" -#include "Exporter.h" -#include -#include -#include - - -namespace ExporterLib -{ -#define PREPARE_DISKFILE_SAVE(EXTENSION) \ - AZ::Debug::Timer saveTimer; \ - saveTimer.Stamp(); \ - if (filenameWithoutExtension.empty()) \ - { \ - MCore::LogError("Cannot save file. Empty FileName."); \ - return false; \ - } \ - AZStd::string extension; \ - AzFramework::StringFunc::Path::GetExtension(filenameWithoutExtension.c_str(), extension); \ - if (!extension.empty()) \ - { \ - AzFramework::StringFunc::Replace(filenameWithoutExtension, extension.c_str(), EXTENSION(), true, false, true); \ - } \ - else \ - { \ - filenameWithoutExtension += EXTENSION(); \ - } \ - \ - MCore::MemoryFile memoryFile; \ - memoryFile.Open(); \ - - -#define FINISH_DISKFILE_SAVE \ - bool result = memoryFile.SaveToDiskFile(filenameWithoutExtension.c_str()); \ - const float saveTime = saveTimer.GetDeltaTimeInSeconds() * 1000.0f; \ - MCore::LogInfo("Saved file '%s' in %.2f ms.", filenameWithoutExtension.c_str(), saveTime); \ - return result; - - - // constructor - Exporter::Exporter() - : EMotionFX::BaseObject() - { - } - - - // destructor - Exporter::~Exporter() - { - } - - - // create the exporter - Exporter* Exporter::Create() - { - return new Exporter(); - } - - - void Exporter::Delete() - { - delete this; - } - - - // make the memory file ready for saving - void Exporter::ResetMemoryFile(MCore::MemoryFile* file) - { - // make sure the file is valid - MCORE_ASSERT(file); - - // reset the incoming memory file - file->Close(); - file->Open(); - file->SetPreAllocSize(262144); // 256kB - file->Seek(0); - } - - - // actor - bool Exporter::SaveActor(MCore::MemoryFile* file, const EMotionFX::Actor* actor, MCore::Endian::EEndianType targetEndianType) - { - ResetMemoryFile(file); - ExporterLib::SaveActor(file, actor, targetEndianType); - return true; - } - - - bool Exporter::SaveActor(AZStd::string filenameWithoutExtension, const EMotionFX::Actor* actor, MCore::Endian::EEndianType targetEndianType) - { - PREPARE_DISKFILE_SAVE(GetActorExtension); - if (SaveActor(&memoryFile, actor, targetEndianType) == false) - { - return false; - } - FINISH_DISKFILE_SAVE - } - - - // skeletal motion - bool Exporter::SaveMotion(MCore::MemoryFile* file, EMotionFX::Motion* motion, MCore::Endian::EEndianType targetEndianType) - { - ResetMemoryFile(file); - ExporterLib::SaveMotion(file, motion, targetEndianType); - return true; - } - - - bool Exporter::SaveMotion(AZStd::string filenameWithoutExtension, EMotionFX::Motion* motion, MCore::Endian::EEndianType targetEndianType) - { - PREPARE_DISKFILE_SAVE(GetMotionExtension); - if (SaveMotion(&memoryFile, motion, targetEndianType) == false) - { - return false; - } - FINISH_DISKFILE_SAVE - } -} // namespace ExporterLib diff --git a/Gems/EMotionFX/Code/EMotionFX/Exporters/ExporterLib/Exporter/ExporterFileProcessor.h b/Gems/EMotionFX/Code/EMotionFX/Exporters/ExporterLib/Exporter/ExporterFileProcessor.h deleted file mode 100644 index db1c6d4f3c..0000000000 --- a/Gems/EMotionFX/Code/EMotionFX/Exporters/ExporterLib/Exporter/ExporterFileProcessor.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * 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 - -#include -#include -#include -#include -#include -#include -#include - - -namespace ExporterLib -{ - class Exporter - : public EMotionFX::BaseObject - { - MCORE_MEMORYOBJECTCATEGORY(Exporter, EMFX_DEFAULT_ALIGNMENT, EMotionFX::EMFX_MEMCATEGORY_FILEPROCESSORS); - - public: - static Exporter* Create(); - - // actor - bool SaveActor(MCore::MemoryFile* file, const EMotionFX::Actor* actor, MCore::Endian::EEndianType targetEndianType); - bool SaveActor(AZStd::string filenameWithoutExtension, const EMotionFX::Actor* actor, MCore::Endian::EEndianType targetEndianType); - - // motion - bool SaveMotion(MCore::MemoryFile* file, EMotionFX::Motion* motion, MCore::Endian::EEndianType targetEndianType); - bool SaveMotion(AZStd::string filenameWithoutExtension, EMotionFX::Motion* motion, MCore::Endian::EEndianType targetEndianType); - - private: - void ResetMemoryFile(MCore::MemoryFile* file); - - Exporter(); - virtual ~Exporter(); - - void Delete() override; - }; -} // namespace ExporterLib diff --git a/Gems/EMotionFX/Code/EMotionFX/Exporters/ExporterLib/exporterlib_files.cmake b/Gems/EMotionFX/Code/EMotionFX/Exporters/ExporterLib/exporterlib_files.cmake index 8837238e3c..63e65fa1e2 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Exporters/ExporterLib/exporterlib_files.cmake +++ b/Gems/EMotionFX/Code/EMotionFX/Exporters/ExporterLib/exporterlib_files.cmake @@ -10,8 +10,6 @@ set(FILES Exporter/EndianConversion.cpp Exporter/Exporter.h Exporter/ExporterActor.cpp - Exporter/ExporterFileProcessor.cpp - Exporter/ExporterFileProcessor.h Exporter/FileHeaderExport.cpp Exporter/MorphTargetExport.cpp Exporter/MotionEventExport.cpp diff --git a/Gems/EMotionFX/Code/EMotionFX/Pipeline/SceneAPIExt/Behaviors/ActorGroupBehavior.cpp b/Gems/EMotionFX/Code/EMotionFX/Pipeline/SceneAPIExt/Behaviors/ActorGroupBehavior.cpp index d89e41f1a6..36173a2d2c 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Pipeline/SceneAPIExt/Behaviors/ActorGroupBehavior.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Pipeline/SceneAPIExt/Behaviors/ActorGroupBehavior.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include #include diff --git a/Gems/EMotionFX/Code/EMotionFX/Pipeline/SceneAPIExt/Groups/MotionGroup.cpp b/Gems/EMotionFX/Code/EMotionFX/Pipeline/SceneAPIExt/Groups/MotionGroup.cpp index e033d7ebb0..226a760292 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Pipeline/SceneAPIExt/Groups/MotionGroup.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Pipeline/SceneAPIExt/Groups/MotionGroup.cpp @@ -9,7 +9,6 @@ #include #include #include -#include #include #include #include diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/MotionManager.h b/Gems/EMotionFX/Code/EMotionFX/Source/MotionManager.h index 24c8c784f3..aa2c83aebe 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/MotionManager.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/MotionManager.h @@ -15,6 +15,7 @@ #include #include #include +#include namespace EMotionFX { From 83879a0c53eb7e7049e45a320be0870b9736b5eb Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 22 Dec 2021 15:33:12 -0800 Subject: [PATCH 148/284] Removes Light.h from Gems/EMotionFX Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Rendering/OpenGL2/Source/Light.h | 31 ------------------- .../EMotionFX/Rendering/rendering_files.cmake | 1 - 2 files changed, 32 deletions(-) delete mode 100644 Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/Light.h diff --git a/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/Light.h b/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/Light.h deleted file mode 100644 index 7fa9fa25ba..0000000000 --- a/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/Light.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * 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 - -#include "RenderGLConfig.h" -#include -#include - -namespace RenderGL -{ - struct RENDERGL_API Light - { - Light() - : m_dir(-1.0f, 0.0f, -1.0f) - , m_diffuse(1.0f, 1.0f, 1.0f, 1.0f) - , m_specular(1.0f, 1.0f, 1.0f, 1.0f) - , m_ambient(0.0f, 0.0f, 0.0f, 0.0f) - {} - - AZ::Vector3 m_dir; - AZ::Color m_diffuse; - AZ::Color m_specular; - AZ::Color m_ambient; - }; -} diff --git a/Gems/EMotionFX/Code/EMotionFX/Rendering/rendering_files.cmake b/Gems/EMotionFX/Code/EMotionFX/Rendering/rendering_files.cmake index b0a5376290..a53f329d66 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Rendering/rendering_files.cmake +++ b/Gems/EMotionFX/Code/EMotionFX/Rendering/rendering_files.cmake @@ -42,7 +42,6 @@ set(FILES OpenGL2/Source/GraphicsManager.h OpenGL2/Source/IndexBuffer.cpp OpenGL2/Source/IndexBuffer.h - OpenGL2/Source/Light.h OpenGL2/Source/Material.cpp OpenGL2/Source/Material.h OpenGL2/Source/PostProcessShader.cpp From f768bb23c2d5524a884144221a1d52342a421bcb Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 22 Dec 2021 15:45:22 -0800 Subject: [PATCH 149/284] Removes EMotionFX.h from Gems/EMotionFX Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Code/EMotionFX/Source/EMotionFX.h | 141 ------------------ .../Code/EMotionFX/emotionfx_files.cmake | 1 - 2 files changed, 142 deletions(-) delete mode 100644 Gems/EMotionFX/Code/EMotionFX/Source/EMotionFX.h diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/EMotionFX.h b/Gems/EMotionFX/Code/EMotionFX/Source/EMotionFX.h deleted file mode 100644 index b02c33b5df..0000000000 --- a/Gems/EMotionFX/Code/EMotionFX/Source/EMotionFX.h +++ /dev/null @@ -1,141 +0,0 @@ -/* - * 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 - * - */ - -/* - NOTE: To minimize your compile times, please consider manually including only the required header files instead of using this main include. -*/ - -#pragma once - -#include "Actor.h" -#include "ActorInstance.h" -#include "ActorManager.h" -#include "ActorUpdateScheduler.h" -#include "Algorithms.h" -#include "Attachment.h" -#include "AttachmentSkin.h" -#include "AttachmentNode.h" -#include "BaseObject.h" -#include "AnimGraph.h" -#include "AnimGraphAttributeTypes.h" -#include "AnimGraphBindPoseNode.h" -#include "AnimGraphEntryNode.h" -#include "AnimGraphEventBuffer.h" -#include "AnimGraphExitNode.h" -#include "AnimGraphGameControllerSettings.h" -#include "AnimGraphInstance.h" -#include "AnimGraphManager.h" -#include "AnimGraphMotionCondition.h" -#include "AnimGraphMotionNode.h" -#include "AnimGraphNode.h" -#include "AnimGraphNodeData.h" -#include "AnimGraphNodeGroup.h" -#include "AnimGraphObject.h" -#include "AnimGraphObjectData.h" -#include "AnimGraphObjectFactory.h" -#include "AnimGraphParameterCondition.h" -#include "AnimGraphPlayTimeCondition.h" -#include "AnimGraphPose.h" -#include "AnimGraphPosePool.h" -#include "AnimGraphRefCountedData.h" -#include "AnimGraphRefCountedDataPool.h" -#include "AnimGraphStateCondition.h" -#include "AnimGraphStateMachine.h" -#include "AnimGraphStateTransition.h" -#include "AnimGraphSyncTrack.h" -#include "AnimGraphTimeCondition.h" -#include "AnimGraphTransitionCondition.h" -#include "AnimGraphVector2Condition.h" -#include "BlendSpace2DNode.h" -#include "BlendSpace1DNode.h" -#include "BlendTree.h" -#include "BlendTreeAccumTransformNode.h" -#include "BlendTreeBlend2Node.h" -#include "BlendTreeBlendNNode.h" -#include "BlendTreeBoolLogicNode.h" -#include "BlendTreeConnection.h" -#include "BlendTreeDirectionToWeightNode.h" -#include "BlendTreeFinalNode.h" -#include "BlendTreeFloatConditionNode.h" -#include "BlendTreeFloatMath1Node.h" -#include "BlendTreeFloatMath2Node.h" -#include "BlendTreeFloatSwitchNode.h" -#include "BlendTreeLookAtNode.h" -#include "BlendTreeMaskNode.h" -#include "BlendTreeMirrorPoseNode.h" -#include "BlendTreeMotionFrameNode.h" -#include "BlendTreeParameterNode.h" -#include "BlendTreePoseSwitchNode.h" -#include "BlendTreeRangeRemapperNode.h" -#include "BlendTreeSmoothingNode.h" -#include "BlendTreeTransformNode.h" -#include "BlendTreeTwoLinkIKNode.h" -#include "BlendTreeVector2ComposeNode.h" -#include "BlendTreeVector2DecomposeNode.h" -#include "BlendTreeVector3ComposeNode.h" -#include "BlendTreeVector3DecomposeNode.h" -#include "BlendTreeVector3Math1Node.h" -#include "BlendTreeVector3Math2Node.h" -#include "BlendTreeVector4ComposeNode.h" -#include "BlendTreeVector4DecomposeNode.h" -#include "CompressedKeyFrames.h" -#include "DualQuatSkinDeformer.h" -#include "EMotionFX.h" -#include "EMotionFXConfig.h" -#include "EMotionFXManager.h" -#include "EventHandler.h" -#include "EventInfo.h" -#include "EventManager.h" -#include "KeyFrame.h" -#include "KeyFrameFinder.h" -#include "KeyTrackLinearDynamic.h" -#include "LayerPass.h" -#include "Material.h" -#include "MemoryCategories.h" -#include "Mesh.h" -#include "MeshDeformer.h" -#include "MeshDeformerStack.h" -#include "MorphMeshDeformer.h" -#include "MorphSetup.h" -#include "MorphSetupInstance.h" -#include "MorphTarget.h" -#include "MorphTargetStandard.h" -#include "Motion.h" -#include "MotionEvent.h" -#include "MotionEventTable.h" -#include "MotionEventTrack.h" -#include "MotionInstance.h" -#include "MotionInstancePool.h" -#include "MotionLayerSystem.h" -#include "MotionManager.h" -#include "MotionQueue.h" -#include "MotionSet.h" -#include "MotionSystem.h" -#include "MultiThreadScheduler.h" -#include "Node.h" -#include "NodeAttribute.h" -#include "NodeGroup.h" -#include "NodeMap.h" -#include "PlayBackInfo.h" -#include "Pose.h" -#include "Recorder.h" -#include "RepositioningLayerPass.h" -#include "SingleThreadScheduler.h" -#include "Skeleton.h" -#include "SkinningInfoVertexAttributeLayer.h" -#include "SoftSkinDeformer.h" -#include "SoftSkinManager.h" -#include "StandardMaterial.h" -#include "SubMesh.h" -#include "ThreadData.h" -#include "Transform.h" -#include "TransformData.h" -#include "VertexAttributeLayer.h" -#include "VertexAttributeLayerAbstractData.h" -#include "Importer/ChunkProcessors.h" -#include "Importer/Importer.h" diff --git a/Gems/EMotionFX/Code/EMotionFX/emotionfx_files.cmake b/Gems/EMotionFX/Code/EMotionFX/emotionfx_files.cmake index 52c9d6aa15..6e8082e631 100644 --- a/Gems/EMotionFX/Code/EMotionFX/emotionfx_files.cmake +++ b/Gems/EMotionFX/Code/EMotionFX/emotionfx_files.cmake @@ -36,7 +36,6 @@ set(FILES Source/DebugDraw.cpp Source/DualQuatSkinDeformer.cpp Source/DualQuatSkinDeformer.h - Source/EMotionFX.h Source/EMotionFXConfig.h Source/EMotionFXManager.cpp Source/EMotionFXManager.h From d934967caf7ac9e8d0d9726555b9bb4feaa4badd Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 22 Dec 2021 15:48:20 -0800 Subject: [PATCH 150/284] Removes MeshBuilderInvalidIndex.h from Gems/EMotionFX Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Source/MeshBuilderInvalidIndex.h | 19 ------------------- 1 file changed, 19 deletions(-) delete mode 100644 Gems/EMotionFX/Code/EMotionFX/Source/MeshBuilderInvalidIndex.h diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/MeshBuilderInvalidIndex.h b/Gems/EMotionFX/Code/EMotionFX/Source/MeshBuilderInvalidIndex.h deleted file mode 100644 index b94f46a3e7..0000000000 --- a/Gems/EMotionFX/Code/EMotionFX/Source/MeshBuilderInvalidIndex.h +++ /dev/null @@ -1,19 +0,0 @@ -/* - * 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 - -#include - -namespace AZ::MeshBuilder -{ - template - inline static constexpr IndexType InvalidIndexT = static_cast(-1); - - inline static constexpr size_t InvalidIndex = InvalidIndexT; -} // namespace AZ::MeshBuilder From 4ec93b2e2396060ad8b027b340d2419ff4d31b4e Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 22 Dec 2021 15:54:10 -0800 Subject: [PATCH 151/284] Removes EMStudioCore.h from Gems/EMotionFX Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../EMStudioSDK/Source/Commands.cpp | 1 + .../EMStudioSDK/Source/EMStudioCore.h | 17 ----------------- .../Source/RenderPlugin/CommandCallbacks.cpp | 1 - .../RenderPlugin/RenderUpdateCallback.cpp | 1 - .../Source/RenderPlugin/RenderViewWidget.cpp | 1 - .../EMStudioSDK/emstudiosdk_files.cmake | 1 - .../Source/OpenGLRender/GLWidget.cpp | 1 - .../Source/OpenGLRender/OpenGLRenderPlugin.cpp | 1 - .../MorphTargetsWindowPlugin.cpp | 1 - .../MotionSetManagementWindow.cpp | 1 - .../Source/MotionSetsWindow/MotionSetWindow.cpp | 1 - .../MotionSetsWindow/MotionSetsWindowPlugin.cpp | 1 - .../Source/NodeGroups/NodeGroupsPlugin.cpp | 1 - 13 files changed, 1 insertion(+), 28 deletions(-) delete mode 100644 Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/EMStudioCore.h diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/Commands.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/Commands.cpp index e2e2224c67..0d177ad82c 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/Commands.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/Commands.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/EMStudioCore.h b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/EMStudioCore.h deleted file mode 100644 index 2899ebc33a..0000000000 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/EMStudioCore.h +++ /dev/null @@ -1,17 +0,0 @@ -/* - * 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 - -// include all headers -#include "EMStudioConfig.h" -#include "EMStudioManager.h" -//#include "MainWindow.h" -#include "PluginManager.h" -#include "EMStudioPlugin.h" -#include "LayoutManager.h" diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/CommandCallbacks.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/CommandCallbacks.cpp index 90d748a9d3..a04e2a87c8 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/CommandCallbacks.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/CommandCallbacks.cpp @@ -8,7 +8,6 @@ // include the required headers #include "RenderPlugin.h" -#include "../EMStudioCore.h" #include #include diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/RenderUpdateCallback.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/RenderUpdateCallback.cpp index 5cc88db0b0..49bb5509b6 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/RenderUpdateCallback.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/RenderUpdateCallback.cpp @@ -9,7 +9,6 @@ // include the required headers #include "RenderUpdateCallback.h" #include "RenderPlugin.h" -#include "../EMStudioCore.h" #include #include #include "RenderWidget.h" diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/RenderViewWidget.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/RenderViewWidget.cpp index fe8fb61f02..f729e2e323 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/RenderViewWidget.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/RenderViewWidget.cpp @@ -8,7 +8,6 @@ #include "RenderViewWidget.h" #include "RenderPlugin.h" -#include "../EMStudioCore.h" #include "../PreferencesWindow.h" #include #include diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/emstudiosdk_files.cmake b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/emstudiosdk_files.cmake index 073d7c1bdb..22c7223d57 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/emstudiosdk_files.cmake +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/emstudiosdk_files.cmake @@ -14,7 +14,6 @@ set(FILES Source/DockWidgetPlugin.cpp Source/DockWidgetPlugin.h Source/EMStudioConfig.h - Source/EMStudioCore.h Source/EMStudioManager.cpp Source/EMStudioManager.h Source/EMStudioPlugin.cpp diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/OpenGLRender/GLWidget.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/OpenGLRender/GLWidget.cpp index be9d704727..c6cab07a44 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/OpenGLRender/GLWidget.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/OpenGLRender/GLWidget.cpp @@ -12,7 +12,6 @@ #include #include #include -#include "../../../../EMStudioSDK/Source/EMStudioCore.h" #include #include #include diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/OpenGLRender/OpenGLRenderPlugin.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/OpenGLRender/OpenGLRenderPlugin.cpp index 5626e482eb..7943420a09 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/OpenGLRender/OpenGLRenderPlugin.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/OpenGLRender/OpenGLRenderPlugin.cpp @@ -8,7 +8,6 @@ #include "OpenGLRenderPlugin.h" #include "GLWidget.h" -#include "../../../../EMStudioSDK/Source/EMStudioCore.h" #include "../../../../EMStudioSDK/Source/MainWindow.h" #include "../../../../EMStudioSDK/Source/RenderPlugin/RenderViewWidget.h" diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/MorphTargetsWindow/MorphTargetsWindowPlugin.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/MorphTargetsWindow/MorphTargetsWindowPlugin.cpp index 1ceeb155fa..67e1bd9ad0 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/MorphTargetsWindow/MorphTargetsWindowPlugin.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/MorphTargetsWindow/MorphTargetsWindowPlugin.cpp @@ -10,7 +10,6 @@ #include #include #include -#include "../../../../EMStudioSDK/Source/EMStudioCore.h" #include #include #include diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/MotionSetsWindow/MotionSetManagementWindow.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/MotionSetsWindow/MotionSetManagementWindow.cpp index ca62d6d927..80c35f2a01 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/MotionSetsWindow/MotionSetManagementWindow.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/MotionSetsWindow/MotionSetManagementWindow.cpp @@ -10,7 +10,6 @@ #include "AzCore/std/iterator.h" #include #include -#include #include #include #include diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/MotionSetsWindow/MotionSetWindow.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/MotionSetsWindow/MotionSetWindow.cpp index 3a4c2628b3..20e3dd402b 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/MotionSetsWindow/MotionSetWindow.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/MotionSetsWindow/MotionSetWindow.cpp @@ -28,7 +28,6 @@ #include #include #include -#include "../../../../EMStudioSDK/Source/EMStudioCore.h" #include #include #include "../../../../EMStudioSDK/Source/EMStudioManager.h" diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/MotionSetsWindow/MotionSetsWindowPlugin.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/MotionSetsWindow/MotionSetsWindowPlugin.cpp index cf23c2e79e..6429af8970 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/MotionSetsWindow/MotionSetsWindowPlugin.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/MotionSetsWindow/MotionSetsWindowPlugin.cpp @@ -18,7 +18,6 @@ #include #include #include -#include "../../../../EMStudioSDK/Source/EMStudioCore.h" #include "../../../../EMStudioSDK/Source/MainWindow.h" #include "../../../../EMStudioSDK/Source/SaveChangedFilesManager.h" #include "../../../../EMStudioSDK/Source/FileManager.h" diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/NodeGroups/NodeGroupsPlugin.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/NodeGroups/NodeGroupsPlugin.cpp index 3fe5c589a7..17fb621725 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/NodeGroups/NodeGroupsPlugin.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/NodeGroups/NodeGroupsPlugin.cpp @@ -8,7 +8,6 @@ // include required headers #include "NodeGroupsPlugin.h" -#include "../../../../EMStudioSDK/Source/EMStudioCore.h" #include #include #include From c5986d50745fe596ea860613129bfe6eefd2295f Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 22 Dec 2021 16:21:07 -0800 Subject: [PATCH 152/284] Removes unused plugin files from Gems/EMotionFX Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../EMStudioSDK/Source/EMStudioPlugin.cpp | 16 ------- .../EMStudioSDK/Source/EMStudioPlugin.h | 1 - .../EMStudioSDK/Source/InvisiblePlugin.cpp | 27 ------------ .../EMStudioSDK/Source/InvisiblePlugin.h | 42 ------------------- .../EMStudioSDK/Source/PluginOptions.cpp | 14 ------- .../Source/RenderPlugin/RenderViewWidget.cpp | 3 +- .../EMStudioSDK/emstudiosdk_files.cmake | 4 -- .../Source/OpenGLRender/OpenGLRenderPlugin.h | 1 + .../RenderPlugins/Source/RegisterPlugins.cpp | 30 ------------- 9 files changed, 3 insertions(+), 135 deletions(-) delete mode 100644 Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/InvisiblePlugin.cpp delete mode 100644 Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/InvisiblePlugin.h delete mode 100644 Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/PluginOptions.cpp delete mode 100644 Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/RegisterPlugins.cpp diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/EMStudioPlugin.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/EMStudioPlugin.cpp index 05ed5f24d7..e69de29bb2 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/EMStudioPlugin.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/EMStudioPlugin.cpp @@ -1,16 +0,0 @@ -/* - * 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 the required headers -#include "EMStudioPlugin.h" - -namespace EMStudio -{ -} // namespace EMStudio - -#include diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/EMStudioPlugin.h b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/EMStudioPlugin.h index f1cabccc31..2dc86ba01b 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/EMStudioPlugin.h +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/EMStudioPlugin.h @@ -42,7 +42,6 @@ namespace EMStudio class EMSTUDIO_API EMStudioPlugin : public QObject { - Q_OBJECT MCORE_MEMORYOBJECTCATEGORY(EMStudioPlugin, MCore::MCORE_DEFAULT_ALIGNMENT, MEMCATEGORY_EMSTUDIOSDK) public: diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/InvisiblePlugin.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/InvisiblePlugin.cpp deleted file mode 100644 index 202eadb826..0000000000 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/InvisiblePlugin.cpp +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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 required headers -#include "InvisiblePlugin.h" - -namespace EMStudio -{ - // constructor - InvisiblePlugin::InvisiblePlugin() - : EMStudioPlugin() - { - } - - - // destructor - InvisiblePlugin::~InvisiblePlugin() - { - } -} // namespace EMStudio - -#include diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/InvisiblePlugin.h b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/InvisiblePlugin.h deleted file mode 100644 index 127705867a..0000000000 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/InvisiblePlugin.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * 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 - -// include MCore -#if !defined(Q_MOC_RUN) -#include -#include "EMStudioConfig.h" -#include "EMStudioPlugin.h" -#endif - - -namespace EMStudio -{ - /** - * - * - */ - class EMSTUDIO_API InvisiblePlugin - : public EMStudioPlugin - { - Q_OBJECT - MCORE_MEMORYOBJECTCATEGORY(InvisiblePlugin, MCore::MCORE_DEFAULT_ALIGNMENT, MEMCATEGORY_EMSTUDIOSDK) - public: - InvisiblePlugin(); - virtual ~InvisiblePlugin(); - - EMStudioPlugin::EPluginType GetPluginType() const override { return EMStudioPlugin::PLUGINTYPE_INVISIBLE; } - - bool Init() override { return true; } // for this type of plugin, perform the init inside the constructor - bool GetHasWindowWithObjectName(const AZStd::string& objectName) override { MCORE_UNUSED(objectName); return false; } - QString GetObjectName() const override { return objectName(); } - void SetObjectName(const QString& objectName) override { setObjectName(objectName); } - void CreateBaseInterface(const char* objectName) override { MCORE_UNUSED(objectName); } - }; -} // namespace EMStudio diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/PluginOptions.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/PluginOptions.cpp deleted file mode 100644 index 02af548668..0000000000 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/PluginOptions.cpp +++ /dev/null @@ -1,14 +0,0 @@ -/* - * 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 "PluginOptions.h" - -namespace EMotionFX -{ - -} diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/RenderViewWidget.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/RenderViewWidget.cpp index f729e2e323..fba20c5bfd 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/RenderViewWidget.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/RenderViewWidget.cpp @@ -14,9 +14,10 @@ #include #include #include +#include #include - +#include namespace EMStudio { diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/emstudiosdk_files.cmake b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/emstudiosdk_files.cmake index 22c7223d57..962f2b8b83 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/emstudiosdk_files.cmake +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/emstudiosdk_files.cmake @@ -16,14 +16,11 @@ set(FILES Source/EMStudioConfig.h Source/EMStudioManager.cpp Source/EMStudioManager.h - Source/EMStudioPlugin.cpp Source/EMStudioPlugin.h Source/FileManager.cpp Source/FileManager.h Source/GUIOptions.cpp Source/GUIOptions.h - Source/InvisiblePlugin.cpp - Source/InvisiblePlugin.h Source/KeyboardShortcutsWindow.cpp Source/KeyboardShortcutsWindow.h Source/LayoutManager.cpp @@ -35,7 +32,6 @@ set(FILES Source/MotionEventPresetManager.h Source/PluginManager.cpp Source/PluginManager.h - Source/PluginOptions.cpp Source/PluginOptions.h Source/PluginOptionsBus.h Source/PreferencesWindow.cpp diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/OpenGLRender/OpenGLRenderPlugin.h b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/OpenGLRender/OpenGLRenderPlugin.h index ba2bb0f462..a0e7d1e3b4 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/OpenGLRender/OpenGLRenderPlugin.h +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/OpenGLRender/OpenGLRenderPlugin.h @@ -17,6 +17,7 @@ #include "../../../../EMStudioSDK/Source/RenderPlugin/RenderWidget.h" #include "../../../../EMStudioSDK/Source/RenderPlugin/RenderLayouts.h" #include "../../../../EMStudioSDK/Source/RenderPlugin/RenderUpdateCallback.h" +#include #include "GLWidget.h" #endif diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/RegisterPlugins.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/RegisterPlugins.cpp deleted file mode 100644 index f6bde013fb..0000000000 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/RegisterPlugins.cpp +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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 the EMotion Studio SDK -#include "RenderPluginsConfig.h" -#include "../../../EMStudioSDK/Source/EMStudioConfig.h" -#include "../../../EMStudioSDK/Source/EMStudioManager.h" -#include "../../../EMStudioSDK/Source/PluginManager.h" - -// include the plugin interfaces -#include "OpenGLRender/OpenGLRenderPlugin.h" - -extern "C" -{ -// the main register function which is executed when loading the plugin library -// we register our plugins to the plugin manager here -RENDERPLUGINS_API void MCORE_CDECL RegisterPlugins() -{ - // get the plugin manager - EMStudio::PluginManager* pluginManager = EMStudio::GetPluginManager(); - - // register the plugins - pluginManager->RegisterPlugin(new EMStudio::OpenGLRenderPlugin()); -} -} From a857ad53b6da2170174be2f38ff71772eda78acf Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 22 Dec 2021 16:26:58 -0800 Subject: [PATCH 153/284] Removes AnimGraphNodeWidget.cpp from Gems/EMotionFX Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Source/AnimGraph/AnimGraphNodeWidget.cpp | 11 ----------- .../Source/AnimGraph/AnimGraphNodeWidget.h | 2 -- .../StandardPlugins/standardplugins_files.cmake | 1 - 3 files changed, 14 deletions(-) delete mode 100644 Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/AnimGraphNodeWidget.cpp diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/AnimGraphNodeWidget.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/AnimGraphNodeWidget.cpp deleted file mode 100644 index 3200325adc..0000000000 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/AnimGraphNodeWidget.cpp +++ /dev/null @@ -1,11 +0,0 @@ -/* - * 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 - -#include diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/AnimGraphNodeWidget.h b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/AnimGraphNodeWidget.h index d96dd35636..90ac968942 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/AnimGraphNodeWidget.h +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/AnimGraphNodeWidget.h @@ -23,8 +23,6 @@ namespace EMStudio class AnimGraphNodeWidget : public QWidget { - Q_OBJECT - public: AnimGraphNodeWidget(QWidget* parent = nullptr) : QWidget(parent) diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/standardplugins_files.cmake b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/standardplugins_files.cmake index 65af4d50ee..05a636be0a 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/standardplugins_files.cmake +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/standardplugins_files.cmake @@ -52,7 +52,6 @@ set(FILES Source/AnimGraph/AnimGraphHierarchyWidget.cpp Source/AnimGraph/AnimGraphHierarchyWidget.h Source/AnimGraph/AnimGraphNodeWidget.h - Source/AnimGraph/AnimGraphNodeWidget.cpp Source/AnimGraph/AnimGraphOptions.cpp Source/AnimGraph/AnimGraphOptions.h Source/AnimGraph/AnimGraphPlugin.cpp From 87f32e0659895174d40d9ef7638748dd8f88c525 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 22 Dec 2021 16:33:45 -0800 Subject: [PATCH 154/284] Removes DebugEventHandler from Gems/EMotionFX Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Source/AnimGraph/AnimGraphPlugin.cpp | 1 - .../Source/AnimGraph/DebugEventHandler.cpp | 92 ------------------- .../Source/AnimGraph/DebugEventHandler.h | 46 ---------- .../standardplugins_files.cmake | 2 - 4 files changed, 141 deletions(-) delete mode 100644 Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/DebugEventHandler.cpp delete mode 100644 Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/DebugEventHandler.h diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/AnimGraphPlugin.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/AnimGraphPlugin.cpp index 4baec366f0..46ad92a910 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/AnimGraphPlugin.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/AnimGraphPlugin.cpp @@ -16,7 +16,6 @@ #include "AttributesWindow.h" #include "NodeGroupWindow.h" #include "BlendTreeVisualNode.h" -#include "DebugEventHandler.h" #include "StateGraphNode.h" #include "ParameterWindow.h" #include "GraphNodeFactory.h" diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/DebugEventHandler.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/DebugEventHandler.cpp deleted file mode 100644 index e03392f6bc..0000000000 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/DebugEventHandler.cpp +++ /dev/null @@ -1,92 +0,0 @@ -/* - * 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 the required headers -#include "DebugEventHandler.h" -#include - - -namespace EMStudio -{ - // constructor - AnimGraphInstanceDebugEventHandler::AnimGraphInstanceDebugEventHandler() - { - } - - - // destructor - AnimGraphInstanceDebugEventHandler::~AnimGraphInstanceDebugEventHandler() - { - } - - - void AnimGraphInstanceDebugEventHandler::OnStateEnter(EMotionFX::AnimGraphInstance* animGraphInstance, EMotionFX::AnimGraphNode* state) - { - MCORE_UNUSED(animGraphInstance); - MCore::LogError("Entered '%s'", state->GetName()); - } - - - void AnimGraphInstanceDebugEventHandler::OnStateEntering(EMotionFX::AnimGraphInstance* animGraphInstance, EMotionFX::AnimGraphNode* state) - { - MCORE_UNUSED(animGraphInstance); - if (state == nullptr) - { - return; - } - - MCore::LogError("Entering '%s'", state->GetName()); - } - - - void AnimGraphInstanceDebugEventHandler::OnStateExit(EMotionFX::AnimGraphInstance* animGraphInstance, EMotionFX::AnimGraphNode* state) - { - MCORE_UNUSED(animGraphInstance); - if (state == nullptr) - { - return; - } - - MCore::LogError("Exit '%s'", state->GetName()); - } - - - void AnimGraphInstanceDebugEventHandler::OnStateEnd(EMotionFX::AnimGraphInstance* animGraphInstance, EMotionFX::AnimGraphNode* state) - { - MCORE_UNUSED(animGraphInstance); - if (state == nullptr) - { - return; - } - - MCore::LogError("End '%s'", state->GetName()); - } - - - void AnimGraphInstanceDebugEventHandler::OnStartTransition(EMotionFX::AnimGraphInstance* animGraphInstance, EMotionFX::AnimGraphStateTransition* transition) - { - if (transition == nullptr) - { - return; - } - - MCore::LogError("Start transition from '%s' to '%s'", transition->GetSourceNode(animGraphInstance)->GetName(), transition->GetTargetNode()->GetName()); - } - - - void AnimGraphInstanceDebugEventHandler::OnEndTransition(EMotionFX::AnimGraphInstance* animGraphInstance, EMotionFX::AnimGraphStateTransition* transition) - { - if (transition == nullptr) - { - return; - } - - MCore::LogError("End transition from '%s' to '%s'", transition->GetSourceNode(animGraphInstance)->GetName(), transition->GetTargetNode()->GetName()); - } -} // namespace EMStudio - diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/DebugEventHandler.h b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/DebugEventHandler.h deleted file mode 100644 index 4786527f62..0000000000 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/DebugEventHandler.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * 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 - -// include MCore -#if !defined(Q_MOC_RUN) -#include "../StandardPluginsConfig.h" -#include -#include -#include -#include -#include -#include -#include "../StandardPluginsConfig.h" -#endif - - - - -namespace EMStudio -{ - class AnimGraphInstanceDebugEventHandler - : public EMotionFX::AnimGraphInstanceEventHandler - { - MCORE_MEMORYOBJECTCATEGORY(AnimGraphInstanceDebugEventHandler, MCore::MCORE_DEFAULT_ALIGNMENT, MEMCATEGORY_STANDARDPLUGINS_ANIMGRAPH) - - public: - AnimGraphInstanceDebugEventHandler(); - virtual ~AnimGraphInstanceDebugEventHandler(); - - void OnStateEnter(EMotionFX::AnimGraphInstance* animGraphInstance, EMotionFX::AnimGraphNode* state); - void OnStateEntering(EMotionFX::AnimGraphInstance* animGraphInstance, EMotionFX::AnimGraphNode* state); - void OnStateExit(EMotionFX::AnimGraphInstance* animGraphInstance, EMotionFX::AnimGraphNode* state); - void OnStateEnd(EMotionFX::AnimGraphInstance* animGraphInstance, EMotionFX::AnimGraphNode* state); - void OnStartTransition(EMotionFX::AnimGraphInstance* animGraphInstance, EMotionFX::AnimGraphStateTransition* transition); - void OnEndTransition(EMotionFX::AnimGraphInstance* animGraphInstance, EMotionFX::AnimGraphStateTransition* transition); - - private: - }; -} // namespace EMStudio diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/standardplugins_files.cmake b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/standardplugins_files.cmake index 05a636be0a..f74e20a6f2 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/standardplugins_files.cmake +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/standardplugins_files.cmake @@ -58,8 +58,6 @@ set(FILES Source/AnimGraph/AnimGraphPlugin.h Source/AnimGraph/AnimGraphPluginCallbacks.cpp Source/AnimGraph/ContextMenu.cpp - Source/AnimGraph/DebugEventHandler.cpp - Source/AnimGraph/DebugEventHandler.h Source/AnimGraph/GameController.cpp Source/AnimGraph/GameController.h Source/AnimGraph/GameControllerWindow.cpp From 6cefe610b82196976fd7b4dc38a028ceba461900 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 22 Dec 2021 16:46:33 -0800 Subject: [PATCH 155/284] Removes GraphWidgetCallback from Gems/EMotionFX Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Source/AnimGraph/GraphWidgetCallback.h | 37 ------------------- .../Source/AnimGraph/NodeGraphWidget.h | 4 -- 2 files changed, 41 deletions(-) delete mode 100644 Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/GraphWidgetCallback.h diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/GraphWidgetCallback.h b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/GraphWidgetCallback.h deleted file mode 100644 index 2ce33f9011..0000000000 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/GraphWidgetCallback.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * 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 - -// include required headers -#include -#include "../StandardPluginsConfig.h" -#include - - -namespace EMStudio -{ - // forward declarations - class NodeGraphWidget; - - // the graph widget callback base class - class GraphWidgetCallback - { - MCORE_MEMORYOBJECTCATEGORY(GraphWidgetCallback, EMFX_DEFAULT_ALIGNMENT, MEMCATEGORY_STANDARDPLUGINS_ANIMGRAPH); - - public: - // constructor and destructor - GraphWidgetCallback(NodeGraphWidget* graphWidget) { m_graphWidget = graphWidget; } - virtual ~GraphWidgetCallback() {} - - virtual void DrawOverlay(QPainter& painter) = 0; - - protected: - NodeGraphWidget* m_graphWidget; - }; -} // namespace EMStudio diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/NodeGraphWidget.h b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/NodeGraphWidget.h index f3bea6d5f9..b3282bfe7b 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/NodeGraphWidget.h +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/NodeGraphWidget.h @@ -27,7 +27,6 @@ namespace EMStudio // forward declarations class NodeGraph; class GraphNode; - class GraphWidgetCallback; class NodePort; class NodeConnection; class AnimGraphPlugin; @@ -53,8 +52,6 @@ namespace EMStudio void SetActiveGraph(NodeGraph* graph); NodeGraph* GetActiveGraph() const; - void SetCallback(GraphWidgetCallback* callback); - MCORE_INLINE GraphWidgetCallback* GetCallback() { return m_callback; } MCORE_INLINE const QPoint& GetMousePos() const { return m_mousePos; } MCORE_INLINE void SetMousePos(const QPoint& pos) { m_mousePos = pos; } MCORE_INLINE void SetShowFPS(bool showFPS) { m_showFps = showFPS; } @@ -138,7 +135,6 @@ namespace EMStudio int m_curHeight; GraphNode* m_moveNode; // the node we're moving NodeGraph* m_activeGraph = nullptr; - GraphWidgetCallback* m_callback; QFont m_font; QFontMetrics* m_fontMetrics; AZ::Debug::Timer m_renderTimer; From a5005deba7a4b299ef953c458532397abeba01a4 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 22 Dec 2021 16:57:36 -0800 Subject: [PATCH 156/284] Removes BoundingSphere from Gems/EMotionFX Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Code/MCore/Source/BoundingSphere.cpp | 106 ------------------ .../Code/MCore/Source/BoundingSphere.h | 26 ----- Gems/EMotionFX/Code/MCore/mcore_files.cmake | 1 - 3 files changed, 133 deletions(-) delete mode 100644 Gems/EMotionFX/Code/MCore/Source/BoundingSphere.cpp diff --git a/Gems/EMotionFX/Code/MCore/Source/BoundingSphere.cpp b/Gems/EMotionFX/Code/MCore/Source/BoundingSphere.cpp deleted file mode 100644 index 376052563f..0000000000 --- a/Gems/EMotionFX/Code/MCore/Source/BoundingSphere.cpp +++ /dev/null @@ -1,106 +0,0 @@ -/* - * 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 required headers -#include "BoundingSphere.h" -#include "AABB.h" - - -namespace MCore -{ - // encapsulate a point in the sphere - void BoundingSphere::Encapsulate(const AZ::Vector3& v) - { - // calculate the squared distance from the center to the point - const AZ::Vector3 diff = v - m_center; - const float dist = diff.Dot(diff); - - // if the current sphere doesn't contain the point, grow the sphere so that it contains the point - if (dist > m_radiusSq) - { - const AZ::Vector3 diff2 = diff.GetNormalized() * m_radius; - const AZ::Vector3 delta = 0.5f * (diff - diff2); - m_center += delta; - // TODO: KB- Was a 'safe' function, is there an AZ equivalent? - float length = delta.GetLengthSq(); - if (length >= FLT_EPSILON) - { - m_radius += sqrtf(length); - } - else - { - m_radius = 0.0f; - } - m_radiusSq = m_radius * m_radius; - } - } - - - // check if the sphere intersects with a given AABB - bool BoundingSphere::Intersects(const AABB& b) const - { - float distance = 0.0f; - - for (int32_t t = 0; t < 3; ++t) - { - const AZ::Vector3& minVec = b.GetMin(); - if (m_center.GetElement(t) < minVec.GetElement(t)) - { - distance += (m_center.GetElement(t) - minVec.GetElement(t)) * (m_center.GetElement(t) - minVec.GetElement(t)); - if (distance > m_radiusSq) - { - return false; - } - } - else - { - const AZ::Vector3& maxVec = b.GetMax(); - if (m_center.GetElement(t) > maxVec.GetElement(t)) - { - distance += (m_center.GetElement(t) - maxVec.GetElement(t)) * (m_center.GetElement(t) - maxVec.GetElement(t)); - if (distance > m_radiusSq) - { - return false; - } - } - } - } - - return true; - } - - - // check if the sphere completely contains a given AABB - bool BoundingSphere::Contains(const AABB& b) const - { - float distance = 0.0f; - for (int32_t t = 0; t < 3; ++t) - { - const AZ::Vector3& maxVec = b.GetMax(); - if (m_center.GetElement(t) < maxVec.GetElement(t)) - { - distance += (m_center.GetElement(t) - maxVec.GetElement(t)) * (m_center.GetElement(t) - maxVec.GetElement(t)); - } - else - { - const AZ::Vector3& minVec = b.GetMin(); - if (m_center.GetElement(t) > minVec.GetElement(t)) - { - distance += (m_center.GetElement(t) - minVec.GetElement(t)) * (m_center.GetElement(t) - minVec.GetElement(t)); - } - } - - if (distance > m_radiusSq) - { - return false; - } - } - - return true; - } -} // namespace MCore diff --git a/Gems/EMotionFX/Code/MCore/Source/BoundingSphere.h b/Gems/EMotionFX/Code/MCore/Source/BoundingSphere.h index 1687f72799..ec63bb4b5d 100644 --- a/Gems/EMotionFX/Code/MCore/Source/BoundingSphere.h +++ b/Gems/EMotionFX/Code/MCore/Source/BoundingSphere.h @@ -108,32 +108,6 @@ namespace MCore */ MCORE_INLINE bool Intersects(const BoundingSphere& s) const { return ((m_center - s.m_center).GetLengthSq() <= (m_radiusSq + s.m_radiusSq)); } - /** - * Encapsulate a given 3D point with this sphere. - * Automatically adjust the center and radius of the sphere after 'adding' the given point to the sphere. - * Note that you should only use this method when the center of the bounding sphere isnt exactly known yet. - * This encapsulation method will adjust the center of the sphere as well. If the center of the sphere is known upfront and it is - * known upfront as well that this center point won't change, you should use the Encapsulate() method instead. - * @param v The vector representing the 3D point to use in the encapsulation. - */ - void Encapsulate(const AZ::Vector3& v); - - /** - * Checks if this sphere completely contains a given Axis Aligned Bounding Box (AABB). - * Note that the border of the sphere is counted as 'inside'. - * @param 'b' The box to perform the test with. - * @result Returns true when 'b' is COMPLETELY inside the spheres volume, otherwise false is returned. - */ - bool Contains(const AABB& b) const; - - /** - * Checks if a given Axis Aligned Bounding Box (AABB) intersects this sphere. - * Note that the border of the sphere is counted as inside. - * @param 'b' The box to perform the test with. - * @result Returns true when 'b' is completely or partially inside the volume of this sphere. - */ - bool Intersects(const AABB& b) const; - /** * Get the radius of the sphere. * @result Returns the radius of the sphere. diff --git a/Gems/EMotionFX/Code/MCore/mcore_files.cmake b/Gems/EMotionFX/Code/MCore/mcore_files.cmake index fd4eeb23c4..d33041eaf8 100644 --- a/Gems/EMotionFX/Code/MCore/mcore_files.cmake +++ b/Gems/EMotionFX/Code/MCore/mcore_files.cmake @@ -34,7 +34,6 @@ set(FILES Source/AttributeVector3.h Source/AttributeVector4.h Source/AzCoreConversions.h - Source/BoundingSphere.cpp Source/BoundingSphere.h Source/Color.cpp Source/Color.h From d28fc46a5397ed54b26fa62daee093f1f06b3ee5 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 22 Dec 2021 17:14:46 -0800 Subject: [PATCH 157/284] Removes Matrix4 from Gems/EMotionFX Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Gems/EMotionFX/Code/MCore/Source/Matrix4.cpp | 2730 ----------------- Gems/EMotionFX/Code/MCore/Source/Matrix4.h | 917 ------ Gems/EMotionFX/Code/MCore/Source/Matrix4.inl | 330 -- Gems/EMotionFX/Code/MCore/mcore_files.cmake | 3 - Gems/EMotionFX/Code/Tests/Matchers.h | 25 - .../Code/Tests/TransformUnitTests.cpp | 1 - 6 files changed, 4006 deletions(-) delete mode 100644 Gems/EMotionFX/Code/MCore/Source/Matrix4.cpp delete mode 100644 Gems/EMotionFX/Code/MCore/Source/Matrix4.h delete mode 100644 Gems/EMotionFX/Code/MCore/Source/Matrix4.inl diff --git a/Gems/EMotionFX/Code/MCore/Source/Matrix4.cpp b/Gems/EMotionFX/Code/MCore/Source/Matrix4.cpp deleted file mode 100644 index f454df04ab..0000000000 --- a/Gems/EMotionFX/Code/MCore/Source/Matrix4.cpp +++ /dev/null @@ -1,2730 +0,0 @@ -/* - * 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 required headers -#include "Matrix4.h" -#include -#include -#include - - -namespace MCore -{ - // set the matrix to identity - void Matrix::Identity() - { - TMAT(0, 0) = 1.0f; - TMAT(0, 1) = 0.0f; - TMAT(0, 2) = 0.0f; - TMAT(0, 3) = 0.0f; - TMAT(1, 0) = 0.0f; - TMAT(1, 1) = 1.0f; - TMAT(1, 2) = 0.0f; - TMAT(1, 3) = 0.0f; - TMAT(2, 0) = 0.0f; - TMAT(2, 1) = 0.0f; - TMAT(2, 2) = 1.0f; - TMAT(2, 3) = 0.0f; - TMAT(3, 0) = 0.0f; - TMAT(3, 1) = 0.0f; - TMAT(3, 2) = 0.0f; - TMAT(3, 3) = 1.0f; - } - - - // calculate the matrix determinant - float Matrix::CalcDeterminant() const - { - return - TMAT(0, 0) * TMAT(1, 1) * TMAT(2, 2) + - TMAT(0, 1) * TMAT(1, 2) * TMAT(2, 0) + - TMAT(0, 2) * TMAT(1, 0) * TMAT(2, 1) - - TMAT(0, 2) * TMAT(1, 1) * TMAT(2, 0) - - TMAT(0, 1) * TMAT(1, 0) * TMAT(2, 2) - - TMAT(0, 0) * TMAT(1, 2) * TMAT(2, 1); - } - - - // add operator - Matrix Matrix::operator + (const Matrix& right) const - { - Matrix r; - for (uint32 i = 0; i < 4; ++i) - { - MMAT(r, i, 0) = TMAT(i, 0) + MMAT(right, i, 0); - MMAT(r, i, 1) = TMAT(i, 1) + MMAT(right, i, 1); - MMAT(r, i, 2) = TMAT(i, 2) + MMAT(right, i, 2); - MMAT(r, i, 3) = TMAT(i, 3) + MMAT(right, i, 3); - } - return r; - } - - - // subtract operator - Matrix Matrix::operator - (const Matrix& right) const - { - Matrix r; - for (uint32 i = 0; i < 4; ++i) - { - MMAT(r, i, 0) = TMAT(i, 0) - MMAT(right, i, 0); - MMAT(r, i, 1) = TMAT(i, 1) - MMAT(right, i, 1); - MMAT(r, i, 2) = TMAT(i, 2) - MMAT(right, i, 2); - MMAT(r, i, 3) = TMAT(i, 3) - MMAT(right, i, 3); - } - return r; - } - - - - Matrix Matrix::operator * (const Matrix& right) const - { - Matrix r; - - #if (AZ_TRAIT_USE_PLATFORM_SIMD_SSE && defined(MCORE_MATRIX_ROWMAJOR)) - const float* m = right.m_m16; - const float* n = m_m16; - float* t = r.m_m16; - - __m128 x0; - __m128 x1; - __m128 x2; - __m128 x3; - __m128 x4; - __m128 x5; - __m128 x6; - __m128 x7; - x0 = _mm_loadu_ps(&m[0]); - x1 = _mm_loadu_ps(&m[4]); - x2 = _mm_loadu_ps(&m[8]); - x3 = _mm_loadu_ps(&m[12]); - x4 = _mm_load_ps1(&n[0]); - x5 = _mm_load_ps1(&n[1]); - x6 = _mm_load_ps1(&n[2]); - x7 = _mm_load_ps1(&n[3]); - x4 = _mm_mul_ps(x4, x0); - x5 = _mm_mul_ps(x5, x1); - x6 = _mm_mul_ps(x6, x2); - x7 = _mm_mul_ps(x7, x3); - x4 = _mm_add_ps(x4, x5); - x6 = _mm_add_ps(x6, x7); - x4 = _mm_add_ps(x4, x6); - x5 = _mm_load_ps1(&n[4]); - x6 = _mm_load_ps1(&n[5]); - x7 = _mm_load_ps1(&n[6]); - x5 = _mm_mul_ps(x5, x0); - x6 = _mm_mul_ps(x6, x1); - x7 = _mm_mul_ps(x7, x2); - x5 = _mm_add_ps(x5, x6); - x5 = _mm_add_ps(x5, x7); - x6 = _mm_load_ps1(&n[7]); - x6 = _mm_mul_ps(x6, x3); - x5 = _mm_add_ps(x5, x6); - x6 = _mm_load_ps1(&n[8]); - x7 = _mm_load_ps1(&n[9]); - x6 = _mm_mul_ps(x6, x0); - x7 = _mm_mul_ps(x7, x1); - x6 = _mm_add_ps(x6, x7); - x7 = _mm_load_ps1(&n[10]); - x7 = _mm_mul_ps(x7, x2); - x6 = _mm_add_ps(x6, x7); - x7 = _mm_load_ps1(&n[11]); - x7 = _mm_mul_ps(x7, x3); - x6 = _mm_add_ps(x6, x7); - x7 = _mm_load_ps1(&n[12]); - x0 = _mm_mul_ps(x0, x7); - x7 = _mm_load_ps1(&n[13]); - x1 = _mm_mul_ps(x1, x7); - x7 = _mm_load_ps1(&n[14]); - x2 = _mm_mul_ps(x2, x7); - x7 = _mm_load_ps1(&n[15]); - x3 = _mm_mul_ps(x3, x7); - x0 = _mm_add_ps(x0, x1); - x2 = _mm_add_ps(x2, x3); - x0 = _mm_add_ps(x0, x2); - - //store result - _mm_storeu_ps(&t[0], x4); - _mm_storeu_ps(&t[4], x5); - _mm_storeu_ps(&t[8], x6); - _mm_storeu_ps(&t[12], x0); - #else - for (uint32 i = 0; i < 4; ++i) - { - MMAT(r, i, 0) = TMAT(i, 0) * MMAT(right, 0, 0) + TMAT(i, 1) * MMAT(right, 1, 0) + TMAT(i, 2) * MMAT(right, 2, 0) + TMAT(i, 3) * MMAT(right, 3, 0); - MMAT(r, i, 1) = TMAT(i, 0) * MMAT(right, 0, 1) + TMAT(i, 1) * MMAT(right, 1, 1) + TMAT(i, 2) * MMAT(right, 2, 1) + TMAT(i, 3) * MMAT(right, 3, 1); - MMAT(r, i, 2) = TMAT(i, 0) * MMAT(right, 0, 2) + TMAT(i, 1) * MMAT(right, 1, 2) + TMAT(i, 2) * MMAT(right, 2, 2) + TMAT(i, 3) * MMAT(right, 3, 2); - MMAT(r, i, 3) = TMAT(i, 0) * MMAT(right, 0, 3) + TMAT(i, 1) * MMAT(right, 1, 3) + TMAT(i, 2) * MMAT(right, 2, 3) + TMAT(i, 3) * MMAT(right, 3, 3); - } - #endif - - return r; - } - - - - Matrix& Matrix::operator += (const Matrix& right) - { - for (uint32 i = 0; i < 4; ++i) - { - TMAT(i, 0) += MMAT(right, i, 0); - TMAT(i, 1) += MMAT(right, i, 1); - TMAT(i, 2) += MMAT(right, i, 2); - TMAT(i, 3) += MMAT(right, i, 3); - } - return *this; - } - - - Matrix Matrix::operator * (float value) const - { - Matrix result(*this); - for (uint32 i = 0; i < 4; ++i) - { - MMAT(result, i, 0) *= value; - MMAT(result, i, 1) *= value; - MMAT(result, i, 2) *= value; - MMAT(result, i, 3) *= value; - } - return result; - } - - - Matrix& Matrix::operator -= (const Matrix& right) - { - for (uint32 i = 0; i < 4; ++i) - { - TMAT(i, 0) -= MMAT(right, i, 0); - TMAT(i, 1) -= MMAT(right, i, 1); - TMAT(i, 2) -= MMAT(right, i, 2); - TMAT(i, 3) -= MMAT(right, i, 3); - } - return *this; - } - - - - Matrix& Matrix::operator *= (const Matrix& right) - { - #if (AZ_TRAIT_USE_PLATFORM_SIMD_SSE && defined(MCORE_MATRIX_ROWMAJOR)) - const float* m = right.m_m16; - const float* n = m_m16; - float* t = this->m_m16; - - __m128 x0; - __m128 x1; - __m128 x2; - __m128 x3; - __m128 x4; - __m128 x5; - __m128 x6; - __m128 x7; - x0 = _mm_loadu_ps(&m[0]); - x1 = _mm_loadu_ps(&m[4]); - x2 = _mm_loadu_ps(&m[8]); - x3 = _mm_loadu_ps(&m[12]); - x4 = _mm_load_ps1(&n[0]); - x5 = _mm_load_ps1(&n[1]); - x6 = _mm_load_ps1(&n[2]); - x7 = _mm_load_ps1(&n[3]); - x4 = _mm_mul_ps(x4, x0); - x5 = _mm_mul_ps(x5, x1); - x6 = _mm_mul_ps(x6, x2); - x7 = _mm_mul_ps(x7, x3); - x4 = _mm_add_ps(x4, x5); - x6 = _mm_add_ps(x6, x7); - x4 = _mm_add_ps(x4, x6); - x5 = _mm_load_ps1(&n[4]); - x6 = _mm_load_ps1(&n[5]); - x7 = _mm_load_ps1(&n[6]); - x5 = _mm_mul_ps(x5, x0); - x6 = _mm_mul_ps(x6, x1); - x7 = _mm_mul_ps(x7, x2); - x5 = _mm_add_ps(x5, x6); - x5 = _mm_add_ps(x5, x7); - x6 = _mm_load_ps1(&n[7]); - x6 = _mm_mul_ps(x6, x3); - x5 = _mm_add_ps(x5, x6); - x6 = _mm_load_ps1(&n[8]); - x7 = _mm_load_ps1(&n[9]); - x6 = _mm_mul_ps(x6, x0); - x7 = _mm_mul_ps(x7, x1); - x6 = _mm_add_ps(x6, x7); - x7 = _mm_load_ps1(&n[10]); - x7 = _mm_mul_ps(x7, x2); - x6 = _mm_add_ps(x6, x7); - x7 = _mm_load_ps1(&n[11]); - x7 = _mm_mul_ps(x7, x3); - x6 = _mm_add_ps(x6, x7); - x7 = _mm_load_ps1(&n[12]); - x0 = _mm_mul_ps(x0, x7); - x7 = _mm_load_ps1(&n[13]); - x1 = _mm_mul_ps(x1, x7); - x7 = _mm_load_ps1(&n[14]); - x2 = _mm_mul_ps(x2, x7); - x7 = _mm_load_ps1(&n[15]); - x3 = _mm_mul_ps(x3, x7); - x0 = _mm_add_ps(x0, x1); - x2 = _mm_add_ps(x2, x3); - x0 = _mm_add_ps(x0, x2); - - //store result - _mm_storeu_ps(&t[0], x4); - _mm_storeu_ps(&t[4], x5); - _mm_storeu_ps(&t[8], x6); - _mm_storeu_ps(&t[12], x0); - #else - float v[4]; - for (uint32 i = 0; i < 4; ++i) - { - v[0] = TMAT(i, 0); - v[1] = TMAT(i, 1); - v[2] = TMAT(i, 2); - v[3] = TMAT(i, 3); - TMAT(i, 0) = v[0] * MMAT(right, 0, 0) + v[1] * MMAT(right, 1, 0) + v[2] * MMAT(right, 2, 0) + v[3] * MMAT(right, 3, 0); - TMAT(i, 1) = v[0] * MMAT(right, 0, 1) + v[1] * MMAT(right, 1, 1) + v[2] * MMAT(right, 2, 1) + v[3] * MMAT(right, 3, 1); - TMAT(i, 2) = v[0] * MMAT(right, 0, 2) + v[1] * MMAT(right, 1, 2) + v[2] * MMAT(right, 2, 2) + v[3] * MMAT(right, 3, 2); - TMAT(i, 3) = v[0] * MMAT(right, 0, 3) + v[1] * MMAT(right, 1, 3) + v[2] * MMAT(right, 2, 3) + v[3] * MMAT(right, 3, 3); - } - #endif - - return *this; - } - - - - // calculate euler angles - AZ::Vector3 Matrix::CalcEulerAngles() const - { - AZ::Vector3 v; - /* - // Version with smooth transitions to poles, but slow - float SignCosY = 1; - float NearPole = Math::Pow(Math::Abs(m44[2][0]), 12); - v.y = Math::ASin( -m44[2][0] ); - v.z = Math::ATan( m44[1][0] / m44[0][0] ); - if( Math::Abs(v.y) < Math::Abs(v.z) ) - { - SignCosY = Math::SignOfCos(v.y); - v.z = Math::ATan2( SignCosY * m44[1][0], SignCosY * m44[0][0] ); - } - else - { - v.y = Math::ATan2( -m44[2][0], Math::Sqrt( m44[0][0]*m44[0][0] + m44[1][0]*m44[1][0] ) - * Math::SignOfFloat(Math::SignOfCos(v.z) * m44[0][0])); - SignCosY = Math::SignOfCos(v.y); - } - v.x = (1 - NearPole) * Math::ATan2( SignCosY * m44[2][1], SignCosY * m44[2][2] ) - + NearPole * 0.5 * Math::ATan2(-m44[1][2], m44[1][1]); - v.y = (1 - NearPole) * v.y + NearPole * Math::ATan2(-m44[2][0], m44[0][0]); - v.z = (1 - NearPole) * v.z - NearPole * Math::SignOfSin(v.y) * 0.5 * Math::ATan2(-m44[1][2], m44[1][1]); - */ - - if (Math::Abs(TMAT(2, 0)) < 0.9f) - { - float SignCosY = 1.0f; - v.SetY(Math::ASin(-TMAT(2, 0))); - v.SetZ(Math::ATan(TMAT(1, 0) / TMAT(0, 0))); - if (Math::Abs(v.GetY()) < Math::Abs(v.GetZ())) - { - SignCosY = Math::SignOfCos(v.GetY()); - v.SetZ(Math::ATan2(SignCosY * TMAT(1, 0), SignCosY * TMAT(0, 0))); - } - else - { - v.SetY(Math::ATan2(-TMAT(2, 0), Math::Sqrt(TMAT(0, 0) * TMAT(0, 0) + TMAT(1, 0) * TMAT(1, 0)) * Math::SignOfFloat(Math::SignOfCos(v.GetZ()) * TMAT(0, 0)))); - SignCosY = Math::SignOfCos(v.GetY()); - } - v.SetX(Math::ATan2(SignCosY * m44[2][1], SignCosY * TMAT(2, 2))); - } - else - { - v.SetZ(0.5f * Math::ATan2(-TMAT(1, 2), TMAT(1, 1))); - v.SetY(Math::ATan2(-TMAT(2, 0), TMAT(0, 0))); - v.SetX(-Math::SignOfSin(v.GetY()) * v.GetZ()); - } - - v.SetY(-v.GetY()); - v.SetZ(-v.GetZ()); - - // get the angles in the range [-pi, pi] - v.SetX(v.GetX() + Math::twoPi * Math::Floor((-v.GetX()) / Math::twoPi + 0.5f)); - v.SetY(v.GetY() + Math::twoPi * Math::Floor((-v.GetY()) / Math::twoPi + 0.5f)); - v.SetZ(v.GetZ() + Math::twoPi * Math::Floor((-v.GetZ()) / Math::twoPi + 0.5f)); - - return v; - } - - - - - /* - void Matrix::SetRotationMatrixEulerXYZ(const Vector3& v) - { - const float sy = Math::Sin(v.x); - const float cy = Math::Cos(v.x); - const float sp = Math::Sin(v.y); - const float cp = Math::Cos(v.y); - const float sr = Math::Sin(v.z); - const float cr = Math::Cos(v.z); - const float spsy = sp * sy; - const float spcy = sp * cy; - - m44[0][0] = cr * cp; - m44[0][1] = sr * cp; - m44[0][2] = -sp; - m44[0][3] = 0; - m44[1][0] = cr * spsy - sr * cy; - m44[1][1] = sr * spsy + cr * cy; - m44[1][2] = cp * sy; - m44[1][3] = 0; - m44[2][0] = cr * spcy + sr * sy; - m44[2][1] = sr * spcy - cr * sy; - m44[2][2] = cp * cy; - m44[2][3] = 0; - m44[3][0] = 0; - m44[3][1] = 0; - m44[3][2] = 0; - m44[3][3] = 1; - } - */ - - - // setup as scale matrix - void Matrix::SetScaleMatrix(const AZ::Vector3& s) - { - TMAT(0, 0) = s.GetX(); - TMAT(0, 1) = 0.0f; - TMAT(0, 2) = 0.0f; - TMAT(0, 3) = 0.0f; - TMAT(1, 0) = 0.0f; - TMAT(1, 1) = s.GetY(); - TMAT(1, 2) = 0.0f; - TMAT(1, 3) = 0.0f; - TMAT(2, 0) = 0.0f; - TMAT(2, 1) = 0.0f; - TMAT(2, 2) = s.GetZ(); - TMAT(2, 3) = 0.0f; - TMAT(3, 0) = 0.0f; - TMAT(3, 1) = 0.0f; - TMAT(3, 2) = 0.0f; - TMAT(3, 3) = 1.0f; - } - - - // setup as translation matrix - void Matrix::SetTranslationMatrix(const AZ::Vector3& t) - { - TMAT(0, 0) = 1.0f; - TMAT(0, 1) = 0.0f; - TMAT(0, 2) = 0.0f; - TMAT(0, 3) = 0.0f; - TMAT(1, 0) = 0.0f; - TMAT(1, 1) = 1.0f; - TMAT(1, 2) = 0.0f; - TMAT(1, 3) = 0.0f; - TMAT(2, 0) = 0.0f; - TMAT(2, 1) = 0.0f; - TMAT(2, 2) = 1.0f; - TMAT(2, 3) = 0.0f; - TMAT(3, 0) = t.GetX(); - TMAT(3, 1) = t.GetY(); - TMAT(3, 2) = t.GetZ(); - TMAT(3, 3) = 1.0f; - } - - - // setup as rotation matrix - void Matrix::SetRotationMatrixX(float angle) - { - const float s = Math::Sin(angle); - const float c = Math::Cos(angle); - - TMAT(0, 0) = 1.0f; - TMAT(0, 1) = 0.0f; - TMAT(0, 2) = 0.0f; - TMAT(0, 3) = 0.0f; - TMAT(1, 0) = 0.0f; - TMAT(1, 1) = c; - TMAT(1, 2) = s; - TMAT(1, 3) = 0.0f; - TMAT(2, 0) = 0.0f; - TMAT(2, 1) = -s; - TMAT(2, 2) = c; - TMAT(2, 3) = 0.0f; - TMAT(3, 0) = 0.0f; - TMAT(3, 1) = 0.0f; - TMAT(3, 2) = 0.0f; - TMAT(3, 3) = 1.0f; - } - - - // setup as rotation matrix - void Matrix::SetRotationMatrixY(float angle) - { - const float s = Math::Sin(angle); - const float c = Math::Cos(angle); - - TMAT(0, 0) = c; - TMAT(0, 1) = 0.0f; - TMAT(0, 2) = -s; - TMAT(0, 3) = 0.0f; - TMAT(1, 0) = 0.0f; - TMAT(1, 1) = 1.0f; - TMAT(1, 2) = 0.0f; - TMAT(1, 3) = 0.0f; - TMAT(2, 0) = s; - TMAT(2, 1) = 0.0f; - TMAT(2, 2) = c; - TMAT(2, 3) = 0.0f; - TMAT(3, 0) = 0.0f; - TMAT(3, 1) = 0.0f; - TMAT(3, 2) = 0.0f; - TMAT(3, 3) = 1.0f; - } - - - // setup as rotation matrix - void Matrix::SetRotationMatrixZ(float angle) - { - const float s = Math::Sin(angle); - const float c = Math::Cos(angle); - - TMAT(0, 0) = c; - TMAT(0, 1) = s; - TMAT(0, 2) = 0.0f; - TMAT(0, 3) = 0.0f; - TMAT(1, 0) = -s; - TMAT(1, 1) = c; - TMAT(1, 2) = 0.0f; - TMAT(1, 3) = 0.0f; - TMAT(2, 0) = 0.0f; - TMAT(2, 1) = 0.0f; - TMAT(2, 2) = 1.0f; - TMAT(2, 3) = 0.0f; - TMAT(3, 0) = 0.0f; - TMAT(3, 1) = 0.0f; - TMAT(3, 2) = 0.0f; - TMAT(3, 3) = 1.0f; - } - - - void Matrix::SetRotationMatrixEulerZYX(const AZ::Vector3& v) - { - *this = Matrix::RotationMatrixX(v.GetZ()); - this->MultMatrix4x3(Matrix::RotationMatrixY(v.GetY())); - this->MultMatrix4x3(Matrix::RotationMatrixZ(v.GetX())); - } - - - - void Matrix::SetRotationMatrixEulerXYZ(const AZ::Vector3& v) - { - *this = Matrix::RotationMatrixX(v.GetX()); - this->MultMatrix4x3(Matrix::RotationMatrixY(v.GetY())); - this->MultMatrix4x3(Matrix::RotationMatrixZ(v.GetZ())); - } - - - - void Matrix::SetRotationMatrixAxisAngle(const AZ::Vector3& axis, float angle) - { - const float length2 = axis.GetLengthSq(); - if (Math::Abs(length2) < 0.00001f) - { - Identity(); - return; - } - - const AZ::Vector3 n = axis / Math::Sqrt(length2); - const float s = Math::Sin(angle); - const float c = Math::Cos(angle); - const float k = 1.0f - c; - const float xx = n.GetX() * n.GetX() * k + c; - const float yy = n.GetY() * n.GetY() * k + c; - const float zz = n.GetZ() * n.GetZ() * k + c; - const float xy = n.GetX() * n.GetY() * k; - const float yz = n.GetY() * n.GetZ() * k; - const float zx = n.GetZ() * n.GetX() * k; - const float xs = n.GetX() * s; - const float ys = n.GetY() * s; - const float zs = n.GetZ() * s; - - TMAT(0, 0) = xx; - TMAT(0, 1) = xy + zs; - TMAT(0, 2) = zx - ys; - TMAT(0, 3) = 0.0f; - TMAT(1, 0) = xy - zs; - TMAT(1, 1) = yy; - TMAT(1, 2) = yz + xs; - TMAT(1, 3) = 0.0f; - TMAT(2, 0) = zx + ys; - TMAT(2, 1) = yz - xs; - TMAT(2, 2) = zz; - TMAT(2, 3) = 0.0f; - TMAT(3, 0) = 0.0f; - TMAT(3, 1) = 0.0f; - TMAT(3, 2) = 0.0f; - TMAT(3, 3) = 1.0f; - } - - - void Matrix::Scale3x3(const AZ::Vector3& scale) - { - TMAT(0, 0) *= scale.GetX(); - TMAT(0, 1) *= scale.GetY(); - TMAT(0, 2) *= scale.GetZ(); - - TMAT(1, 0) *= scale.GetX(); - TMAT(1, 1) *= scale.GetY(); - TMAT(1, 2) *= scale.GetZ(); - - TMAT(2, 0) *= scale.GetX(); - TMAT(2, 1) *= scale.GetY(); - TMAT(2, 2) *= scale.GetZ(); - } - - - AZ::Vector3 Matrix::ExtractScale() - { - const AZ::Vector4 x = GetRow4D(0); - const AZ::Vector4 y = GetRow4D(1); - const AZ::Vector4 z = GetRow4D(2); - const float lengthX = x.GetLength(); - const float lengthY = y.GetLength(); - const float lengthZ = z.GetLength(); - SetRow(0, x / lengthX); - SetRow(1, y / lengthY); - SetRow(2, z / lengthZ); - - return AZ::Vector3(lengthX, lengthY, lengthZ); - } - - void Matrix::RotateX(float angle) - { - const float s = Math::Sin(angle); - const float c = Math::Cos(angle); - - for (uint32 i = 0; i < 3; ++i) - { - const float x = TMAT(2, i); - const float z = TMAT(1, i); - TMAT(2, i) = x * c - z * s; - TMAT(1, i) = x * s + z * c; - } - } - - - - void Matrix::RotateY(float angle) - { - const float s = Math::Sin(angle); - const float c = Math::Cos(angle); - - for (uint32 i = 0; i < 3; ++i) - { - const float x = TMAT(0, i); - const float z = TMAT(2, i); - TMAT(0, i) = x * c - z * s; - TMAT(2, i) = x * s + z * c; - } - } - - - - void Matrix::RotateZ(float angle) - { - const float s = Math::Sin(angle); - const float c = Math::Cos(angle); - - for (uint32 i = 0; i < 3; ++i) - { - const float x = TMAT(1, i); - const float z = TMAT(0, i); - TMAT(1, i) = x * c - z * s; - TMAT(0, i) = x * s + z * c; - } - } - - /* - void Matrix::RotateXYZ(const float yaw, const float pitch, const float roll) - { - const float sy = Math::Sin(yaw); - const float cy = Math::Cos(yaw); - const float sp = Math::Sin(pitch); - const float cp = Math::Cos(pitch); - const float sr = Math::Sin(roll); - const float cr = Math::Cos(roll); - const float spsy = sp * sy; - const float spcy = sp * cy; - const float m00 = cr * cp; - const float m01 = sr * cp; - const float m02 = -sp; - const float m10 = cr * spsy - sr * cy; - const float m11 = sr * spsy + cr * cy; - const float m12 = cp * sy; - const float m20 = cr * spcy + sr * sy; - const float m21 = sr * spcy - cr * sy; - const float m22 = cp * cy; - - for ( int32 i=0; i<4; i++ ) - { - const float x = m44[i][0]; - const float y = m44[i][1]; - const float z = m44[i][2]; - m44[i][0] = x * m00 + y * m10 + z * m20; - m44[i][1] = x * m01 + y * m11 + z * m21; - m44[i][2] = x * m02 + y * m12 + z * m22; - } - } - */ - - - void Matrix::MultMatrix(const Matrix& right) - { - #if (AZ_TRAIT_USE_PLATFORM_SIMD_SSE && defined(MCORE_MATRIX_ROWMAJOR)) - const float* m = right.m_m16; - const float* n = m_m16; - float* t = this->m_m16; - - __m128 x0; - __m128 x1; - __m128 x2; - __m128 x3; - __m128 x4; - __m128 x5; - __m128 x6; - __m128 x7; - x0 = _mm_loadu_ps(&m[0]); - x1 = _mm_loadu_ps(&m[4]); - x2 = _mm_loadu_ps(&m[8]); - x3 = _mm_loadu_ps(&m[12]); - x4 = _mm_load_ps1(&n[0]); - x5 = _mm_load_ps1(&n[1]); - x6 = _mm_load_ps1(&n[2]); - x7 = _mm_load_ps1(&n[3]); - x4 = _mm_mul_ps(x4, x0); - x5 = _mm_mul_ps(x5, x1); - x6 = _mm_mul_ps(x6, x2); - x7 = _mm_mul_ps(x7, x3); - x4 = _mm_add_ps(x4, x5); - x6 = _mm_add_ps(x6, x7); - x4 = _mm_add_ps(x4, x6); - x5 = _mm_load_ps1(&n[4]); - x6 = _mm_load_ps1(&n[5]); - x7 = _mm_load_ps1(&n[6]); - x5 = _mm_mul_ps(x5, x0); - x6 = _mm_mul_ps(x6, x1); - x7 = _mm_mul_ps(x7, x2); - x5 = _mm_add_ps(x5, x6); - x5 = _mm_add_ps(x5, x7); - x6 = _mm_load_ps1(&n[7]); - x6 = _mm_mul_ps(x6, x3); - x5 = _mm_add_ps(x5, x6); - x6 = _mm_load_ps1(&n[8]); - x7 = _mm_load_ps1(&n[9]); - x6 = _mm_mul_ps(x6, x0); - x7 = _mm_mul_ps(x7, x1); - x6 = _mm_add_ps(x6, x7); - x7 = _mm_load_ps1(&n[10]); - x7 = _mm_mul_ps(x7, x2); - x6 = _mm_add_ps(x6, x7); - x7 = _mm_load_ps1(&n[11]); - x7 = _mm_mul_ps(x7, x3); - x6 = _mm_add_ps(x6, x7); - x7 = _mm_load_ps1(&n[12]); - x0 = _mm_mul_ps(x0, x7); - x7 = _mm_load_ps1(&n[13]); - x1 = _mm_mul_ps(x1, x7); - x7 = _mm_load_ps1(&n[14]); - x2 = _mm_mul_ps(x2, x7); - x7 = _mm_load_ps1(&n[15]); - x3 = _mm_mul_ps(x3, x7); - x0 = _mm_add_ps(x0, x1); - x2 = _mm_add_ps(x2, x3); - x0 = _mm_add_ps(x0, x2); - - //store result - _mm_storeu_ps(&t[0], x4); - _mm_storeu_ps(&t[4], x5); - _mm_storeu_ps(&t[8], x6); - _mm_storeu_ps(&t[12], x0); - #else - float v[4]; - for (uint32 i = 0; i < 4; ++i) - { - v[0] = TMAT(i, 0); - v[1] = TMAT(i, 1); - v[2] = TMAT(i, 2); - v[3] = TMAT(i, 3); - TMAT(i, 0) = v[0] * MMAT(right, 0, 0) + v[1] * MMAT(right, 1, 0) + v[2] * MMAT(right, 2, 0) + v[3] * MMAT(right, 3, 0); - TMAT(i, 1) = v[0] * MMAT(right, 0, 1) + v[1] * MMAT(right, 1, 1) + v[2] * MMAT(right, 2, 1) + v[3] * MMAT(right, 3, 1); - TMAT(i, 2) = v[0] * MMAT(right, 0, 2) + v[1] * MMAT(right, 1, 2) + v[2] * MMAT(right, 2, 2) + v[3] * MMAT(right, 3, 2); - TMAT(i, 3) = v[0] * MMAT(right, 0, 3) + v[1] * MMAT(right, 1, 3) + v[2] * MMAT(right, 2, 3) + v[3] * MMAT(right, 3, 3); - } - #endif - } - - - // init from position, rotation, scale and shear - // use this to reconstruct a matrix that has been decomposed using the DecomposeQRGramSchmidt method - void Matrix::InitFromPosRotScaleShear(const AZ::Vector3& pos, const AZ::Quaternion& rot, const AZ::Vector3& scale, const AZ::Vector3& shear) - { - // convert quat to matrix - const float xx = rot.GetX() * rot.GetX(); - const float xy = rot.GetX() * rot.GetY(), yy = rot.GetY() * rot.GetY(); - const float xz = rot.GetX() * rot.GetZ(), yz = rot.GetY() * rot.GetZ(), zz = rot.GetZ() * rot.GetZ(); - const float xw = rot.GetX() * rot.GetW(), yw = rot.GetY() * rot.GetW(), zw = rot.GetZ() * rot.GetW(), ww = rot.GetW() * rot.GetW(); - TMAT(0, 0) = +xx - yy - zz + ww; - TMAT(0, 1) = +xy + zw + xy + zw; - TMAT(0, 2) = +xz - yw + xz - yw; - TMAT(0, 3) = 0.0f; - TMAT(1, 0) = +xy - zw + xy - zw; - TMAT(1, 1) = -xx + yy - zz + ww; - TMAT(1, 2) = +yz + xw + yz + xw; - TMAT(1, 3) = 0.0f; - TMAT(2, 0) = +xz + yw + xz + yw; - TMAT(2, 1) = +yz - xw + yz - xw; - TMAT(2, 2) = -xx - yy + zz + ww; - TMAT(2, 3) = 0.0f; - - // scale - TMAT(0, 0) *= scale.GetX(); - TMAT(0, 1) *= scale.GetY(); - TMAT(0, 2) *= scale.GetZ(); - TMAT(1, 0) *= scale.GetX(); - TMAT(1, 1) *= scale.GetY(); - TMAT(1, 2) *= scale.GetZ(); - TMAT(2, 0) *= scale.GetX(); - TMAT(2, 1) *= scale.GetY(); - TMAT(2, 2) *= scale.GetZ(); - - // multiply with the shear matrix - float v[3]; - v[0] = TMAT(0, 0); - v[1] = TMAT(0, 1); - v[2] = TMAT(0, 2); - TMAT(0, 1) = v[0] * shear.GetX() + v[1]; - TMAT(0, 2) = v[0] * shear.GetY() + v[1] * shear.GetZ() + v[2]; - - v[0] = TMAT(1, 0); - v[1] = TMAT(1, 1); - v[2] = TMAT(1, 2); - TMAT(1, 1) = v[0] * shear.GetX() + v[1]; - TMAT(1, 2) = v[0] * shear.GetY() + v[1] * shear.GetZ() + v[2]; - - v[0] = TMAT(2, 0); - v[1] = TMAT(2, 1); - v[2] = TMAT(2, 2); - TMAT(2, 1) = v[0] * shear.GetX() + v[1]; - TMAT(2, 2) = v[0] * shear.GetY() + v[1] * shear.GetZ() + v[2]; - - // translation - TMAT(3, 0) = pos.GetX(); - TMAT(3, 1) = pos.GetY(); - TMAT(3, 2) = pos.GetZ(); - TMAT(3, 3) = 1.0f; - } - - - // init from position, rotation, scale, scale rotation - // use this to reconstruct a matrix decomposed using the MatrixDecomposer class using polar decomposition - void Matrix::InitFromPosRotScaleScaleRot(const AZ::Vector3& pos, const AZ::Quaternion& rot, const AZ::Vector3& scale, const AZ::Quaternion& scaleRot) - { - float xx = scaleRot.GetX() * scaleRot.GetX(); - float xy = scaleRot.GetX() * scaleRot.GetY(), yy = scaleRot.GetY() * scaleRot.GetY(); - float xz = scaleRot.GetX() * scaleRot.GetZ(), yz = scaleRot.GetY() * scaleRot.GetZ(), zz = scaleRot.GetZ() * scaleRot.GetZ(); - float xw = scaleRot.GetX() * scaleRot.GetW(), yw = scaleRot.GetY() * scaleRot.GetW(), zw = scaleRot.GetZ() * scaleRot.GetW(), ww = scaleRot.GetW() * scaleRot.GetW(); - - // init on the inversed scale rotation - TMAT(0, 0) = +xx - yy - zz + ww; - TMAT(1, 0) = +xy + zw + xy + zw; - TMAT(2, 0) = +xz - yw + xz - yw; // translation part not initialized - TMAT(0, 1) = +xy - zw + xy - zw; - TMAT(1, 1) = -xx + yy - zz + ww; - TMAT(2, 1) = +yz + xw + yz + xw; - TMAT(0, 2) = +xz + yw + xz + yw; - TMAT(1, 2) = +yz - xw + yz - xw; - TMAT(2, 2) = -xx - yy + zz + ww; - TMAT(0, 3) = 0.0f; - TMAT(1, 3) = 0.0f; - TMAT(2, 3) = 0.0f; - TMAT(3, 3) = 1.0f; - - // copy the 3x3 part into a temp buffer, so that we have the inverse scale rotation, before scaling applied to it - float r33[3][3]; - uint32 i; - for (i = 0; i < 3; ++i) - { -#ifdef MCORE_MATRIX_ROWMAJOR - r33[i][0] = TMAT(i, 0); - r33[i][1] = TMAT(i, 1); - r33[i][2] = TMAT(i, 2); -#else - r33[0][i] = TMAT(i, 0); - r33[1][i] = TMAT(i, 1); - r33[2][i] = TMAT(i, 2); -#endif - } - - // apply scaling - TMAT(0, 0) *= scale.GetX(); - TMAT(0, 1) *= scale.GetY(); - TMAT(0, 2) *= scale.GetZ(); - TMAT(1, 0) *= scale.GetX(); - TMAT(1, 1) *= scale.GetY(); - TMAT(1, 2) *= scale.GetZ(); - TMAT(2, 0) *= scale.GetX(); - TMAT(2, 1) *= scale.GetY(); - TMAT(2, 2) *= scale.GetZ(); - - // undo the scale rotation - float v[3]; - for (i = 0; i < 3; ++i) - { - v[0] = TMAT(i, 0); - v[1] = TMAT(i, 1); - v[2] = TMAT(i, 2); - -#ifdef MCORE_MATRIX_ROWMAJOR - TMAT(i, 0) = v[0] * r33[0][0] + v[1] * r33[0][1] + v[2] * r33[0][2]; // transposed multiply - TMAT(i, 1) = v[0] * r33[1][0] + v[1] * r33[1][1] + v[2] * r33[1][2]; - TMAT(i, 2) = v[0] * r33[2][0] + v[1] * r33[2][1] + v[2] * r33[2][2]; -#else - TMAT(i, 0) = v[0] * r33[0][0] + v[1] * r33[1][0] + v[2] * r33[2][0]; // transposed multiply - TMAT(i, 1) = v[0] * r33[0][1] + v[1] * r33[1][1] + v[2] * r33[2][1]; - TMAT(i, 2) = v[0] * r33[0][2] + v[1] * r33[1][2] + v[2] * r33[2][2]; -#endif - } - - // apply regular rotation - xx = rot.GetX() * rot.GetX(); - xy = rot.GetX() * rot.GetY(); - yy = rot.GetY() * rot.GetY(); - xz = rot.GetX() * rot.GetZ(); - yz = rot.GetY() * rot.GetZ(); - zz = rot.GetZ() * rot.GetZ(); - xw = rot.GetX() * rot.GetW(); - yw = rot.GetY() * rot.GetW(); - zw = rot.GetZ() * rot.GetW(); - ww = rot.GetW() * rot.GetW(); - -#ifdef MCORE_MATRIX_ROWMAJOR - r33[0][0] = +xx - yy - zz + ww; - r33[0][1] = +xy + zw + xy + zw; - r33[0][2] = +xz - yw + xz - yw; - r33[1][0] = +xy - zw + xy - zw; - r33[1][1] = -xx + yy - zz + ww; - r33[1][2] = +yz + xw + yz + xw; - r33[2][0] = +xz + yw + xz + yw; - r33[2][1] = +yz - xw + yz - xw; - r33[2][2] = -xx - yy + zz + ww; -#else - r33[0][0] = +xx - yy - zz + ww; - r33[1][0] = +xy + zw + xy + zw; - r33[2][0] = +xz - yw + xz - yw; - r33[0][1] = +xy - zw + xy - zw; - r33[1][1] = -xx + yy - zz + ww; - r33[2][1] = +yz + xw + yz + xw; - r33[0][2] = +xz + yw + xz + yw; - r33[1][2] = +yz - xw + yz - xw; - r33[2][2] = -xx - yy + zz + ww; -#endif - - // mult 3x3 matrix - for (i = 0; i < 3; ++i) - { - v[0] = TMAT(i, 0); - v[1] = TMAT(i, 1); - v[2] = TMAT(i, 2); - -#ifdef MCORE_MATRIX_ROWMAJOR - TMAT(i, 0) = v[0] * r33[0][0] + v[1] * r33[1][0] + v[2] * r33[2][0]; - TMAT(i, 1) = v[0] * r33[0][1] + v[1] * r33[1][1] + v[2] * r33[2][1]; - TMAT(i, 2) = v[0] * r33[0][2] + v[1] * r33[1][2] + v[2] * r33[2][2]; -#else - TMAT(i, 0) = v[0] * r33[0][0] + v[1] * r33[0][1] + v[2] * r33[0][2]; - TMAT(i, 1) = v[0] * r33[1][0] + v[1] * r33[1][1] + v[2] * r33[1][2]; - TMAT(i, 2) = v[0] * r33[2][0] + v[1] * r33[2][1] + v[2] * r33[2][2]; -#endif - } - - // apply translation - TMAT(3, 0) = pos.GetX(); - TMAT(3, 1) = pos.GetY(); - TMAT(3, 2) = pos.GetZ(); - } - - - // init from pos/rot/scale - void Matrix::InitFromPosRotScale(const AZ::Vector3& pos, const AZ::Quaternion& rot, const AZ::Vector3& scale) - { - // init on a scale + translation matrix - TMAT(0, 0) = scale.GetX(); - TMAT(0, 1) = 0.0f; - TMAT(0, 2) = 0.0f; - TMAT(0, 3) = 0.0f; - TMAT(1, 0) = 0.0f; - TMAT(1, 1) = scale.GetY(); - TMAT(1, 2) = 0.0f; - TMAT(1, 3) = 0.0f; - TMAT(2, 0) = 0.0f; - TMAT(2, 1) = 0.0f; - TMAT(2, 2) = scale.GetZ(); - TMAT(2, 3) = 0.0f; - TMAT(3, 0) = pos.GetX(); - TMAT(3, 1) = pos.GetY(); - TMAT(3, 2) = pos.GetZ(); - TMAT(3, 3) = 1.0f; - - // multiply it with a rotation matrix built from the AZ::Quaternion - // don't rotate the translation part - const float xx = rot.GetX() * rot.GetX(); - const float xy = rot.GetX() * rot.GetY(), yy = rot.GetY() * rot.GetY(); - const float xz = rot.GetX() * rot.GetZ(), yz = rot.GetY() * rot.GetZ(), zz = rot.GetZ() * rot.GetZ(); - const float xw = rot.GetX() * rot.GetW(), yw = rot.GetY() * rot.GetW(), zw = rot.GetZ() * rot.GetW(), ww = rot.GetW() * rot.GetW(); - - float r33[3][3]; - #ifdef MCORE_MATRIX_ROWMAJOR - r33[0][0] = +xx - yy - zz + ww; - r33[0][1] = +xy + zw + xy + zw; - r33[0][2] = +xz - yw + xz - yw; - r33[1][0] = +xy - zw + xy - zw; - r33[1][1] = -xx + yy - zz + ww; - r33[1][2] = +yz + xw + yz + xw; - r33[2][0] = +xz + yw + xz + yw; - r33[2][1] = +yz - xw + yz - xw; - r33[2][2] = -xx - yy + zz + ww; - #else - r33[0][0] = +xx - yy - zz + ww; - r33[1][0] = +xy + zw + xy + zw; - r33[2][0] = +xz - yw + xz - yw; - r33[0][1] = +xy - zw + xy - zw; - r33[1][1] = -xx + yy - zz + ww; - r33[2][1] = +yz + xw + yz + xw; - r33[0][2] = +xz + yw + xz + yw; - r33[1][2] = +yz - xw + yz - xw; - r33[2][2] = -xx - yy + zz + ww; - #endif - - // perform the matrix mul - float v[3]; - for (uint32 i = 0; i < 3; ++i) - { - v[0] = TMAT(i, 0); - v[1] = TMAT(i, 1); - v[2] = TMAT(i, 2); - - #ifdef MCORE_MATRIX_ROWMAJOR - TMAT(i, 0) = v[0] * r33[0][0] + v[1] * r33[1][0] + v[2] * r33[2][0]; - TMAT(i, 1) = v[0] * r33[0][1] + v[1] * r33[1][1] + v[2] * r33[2][1]; - TMAT(i, 2) = v[0] * r33[0][2] + v[1] * r33[1][2] + v[2] * r33[2][2]; - #else - TMAT(i, 0) = v[0] * r33[0][0] + v[1] * r33[0][1] + v[2] * r33[0][2]; - TMAT(i, 1) = v[0] * r33[1][0] + v[1] * r33[1][1] + v[2] * r33[1][2]; - TMAT(i, 2) = v[0] * r33[2][0] + v[1] * r33[2][1] + v[2] * r33[2][2]; - #endif - } - } - - - // init from pos/rot/scale with parent scale compensation - void Matrix::InitFromNoScaleInherit(const AZ::Vector3& pos, const AZ::Quaternion& rot, const AZ::Vector3& scale, const AZ::Vector3& invParentScale) - { - // init on a scale + translation matrix - TMAT(0, 0) = scale.GetX(); - TMAT(0, 1) = 0.0f; - TMAT(0, 2) = 0.0f; - TMAT(0, 3) = 0.0f; - TMAT(1, 0) = 0.0f; - TMAT(1, 1) = scale.GetY(); - TMAT(1, 2) = 0.0f; - TMAT(1, 3) = 0.0f; - TMAT(2, 0) = 0.0f; - TMAT(2, 1) = 0.0f; - TMAT(2, 2) = scale.GetZ(); - TMAT(2, 3) = 0.0f; - TMAT(3, 0) = pos.GetX(); - TMAT(3, 1) = pos.GetY(); - TMAT(3, 2) = pos.GetZ(); - TMAT(3, 3) = 1.0f; - - // multiply it with a rotation matrix built from the AZ::Quaternion - // don't rotate the translation part - const float xx = rot.GetX() * rot.GetX(); - const float xy = rot.GetX() * rot.GetY(), yy = rot.GetY() * rot.GetY(); - const float xz = rot.GetX() * rot.GetZ(), yz = rot.GetY() * rot.GetZ(), zz = rot.GetZ() * rot.GetZ(); - const float xw = rot.GetX() * rot.GetW(), yw = rot.GetY() * rot.GetW(), zw = rot.GetZ() * rot.GetW(), ww = rot.GetW() * rot.GetW(); - - float r33[3][3]; - #ifdef MCORE_MATRIX_ROWMAJOR - r33[0][0] = +xx - yy - zz + ww; - r33[0][1] = +xy + zw + xy + zw; - r33[0][2] = +xz - yw + xz - yw; - r33[1][0] = +xy - zw + xy - zw; - r33[1][1] = -xx + yy - zz + ww; - r33[1][2] = +yz + xw + yz + xw; - r33[2][0] = +xz + yw + xz + yw; - r33[2][1] = +yz - xw + yz - xw; - r33[2][2] = -xx - yy + zz + ww; - #else - r33[0][0] = +xx - yy - zz + ww; - r33[1][0] = +xy + zw + xy + zw; - r33[2][0] = +xz - yw + xz - yw; - r33[0][1] = +xy - zw + xy - zw; - r33[1][1] = -xx + yy - zz + ww; - r33[2][1] = +yz + xw + yz + xw; - r33[0][2] = +xz + yw + xz + yw; - r33[1][2] = +yz - xw + yz - xw; - r33[2][2] = -xx - yy + zz + ww; - #endif - - // perform the matrix mul - float v[3]; - for (uint32 i = 0; i < 3; ++i) - { - v[0] = TMAT(i, 0); - v[1] = TMAT(i, 1); - v[2] = TMAT(i, 2); - - #ifdef MCORE_MATRIX_ROWMAJOR - TMAT(i, 0) = v[0] * r33[0][0] + v[1] * r33[1][0] + v[2] * r33[2][0]; - TMAT(i, 1) = v[0] * r33[0][1] + v[1] * r33[1][1] + v[2] * r33[2][1]; - TMAT(i, 2) = v[0] * r33[0][2] + v[1] * r33[1][2] + v[2] * r33[2][2]; - #else - TMAT(i, 0) = v[0] * r33[0][0] + v[1] * r33[0][1] + v[2] * r33[0][2]; - TMAT(i, 1) = v[0] * r33[1][0] + v[1] * r33[1][1] + v[2] * r33[1][2]; - TMAT(i, 2) = v[0] * r33[2][0] + v[1] * r33[2][1] + v[2] * r33[2][2]; - #endif - } - - // multiply this with the 3x3 scale inverse parent scale matrix - TMAT(0, 0) *= invParentScale.GetX(); - TMAT(0, 1) *= invParentScale.GetY(); - TMAT(0, 2) *= invParentScale.GetZ(); - TMAT(1, 0) *= invParentScale.GetX(); - TMAT(1, 1) *= invParentScale.GetY(); - TMAT(1, 2) *= invParentScale.GetZ(); - TMAT(2, 0) *= invParentScale.GetX(); - TMAT(2, 1) *= invParentScale.GetY(); - TMAT(2, 2) *= invParentScale.GetZ(); - } - - - void Matrix::InitFromPosRot(const AZ::Vector3& pos, const AZ::Quaternion& rot) - { - const float xx = rot.GetX() * rot.GetX(); - const float xy = rot.GetX() * rot.GetY(), yy = rot.GetY() * rot.GetY(); - const float xz = rot.GetX() * rot.GetZ(), yz = rot.GetY() * rot.GetZ(), zz = rot.GetZ() * rot.GetZ(); - const float xw = rot.GetX() * rot.GetW(), yw = rot.GetY() * rot.GetW(), zw = rot.GetZ() * rot.GetW(), ww = rot.GetW() * rot.GetW(); - - TMAT(0, 0) = +xx - yy - zz + ww; - TMAT(0, 1) = +xy + zw + xy + zw; - TMAT(0, 2) = +xz - yw + xz - yw; - TMAT(0, 3) = 0.0f; - TMAT(1, 0) = +xy - zw + xy - zw; - TMAT(1, 1) = -xx + yy - zz + ww; - TMAT(1, 2) = +yz + xw + yz + xw; - TMAT(1, 3) = 0.0f; - TMAT(2, 0) = +xz + yw + xz + yw; - TMAT(2, 1) = +yz - xw + yz - xw; - TMAT(2, 2) = -xx - yy + zz + ww; - TMAT(2, 3) = 0.0f; - TMAT(3, 0) = pos.GetX(); - TMAT(3, 1) = pos.GetY(); - TMAT(3, 2) = pos.GetZ(); - TMAT(3, 3) = 1.0f; - } - - /* - // optimized routine for handling scale rotation, rotation, scale and translation - void Matrix::Set(const AZ::Quaternion& scaleRot, const AZ::Quaternion& rotation, const Vector3& scale, const Vector3& translation) - { - float xx=scaleRot.x*scaleRot.x; - float xy=scaleRot.x*scaleRot.y, yy=scaleRot.y*scaleRot.y; - float xz=scaleRot.x*scaleRot.z, yz=scaleRot.y*scaleRot.z, zz=scaleRot.z*scaleRot.z; - float xw=scaleRot.x*scaleRot.w, yw=scaleRot.y*scaleRot.w, zw=scaleRot.z*scaleRot.w, ww=scaleRot.w*scaleRot.w; - - // init on the inversed scale rotation - TMAT(0,0) = +xx-yy-zz+ww; TMAT(1,0) = +xy+zw+xy+zw; TMAT(2,0) = +xz-yw+xz-yw; // translation part not initialized - TMAT(0,1) = +xy-zw+xy-zw; TMAT(1,1) = -xx+yy-zz+ww; TMAT(2,1) = +yz+xw+yz+xw; - TMAT(0,2) = +xz+yw+xz+yw; TMAT(1,2) = +yz-xw+yz-xw; TMAT(2,2) = -xx-yy+zz+ww; - TMAT(0,3) = 0.0f; TMAT(1,3) = 0.0f; TMAT(2,3) = 0.0f; TMAT(3,3) = 1.0f; - - // copy the 3x3 part into a temp buffer, so that we have the inverse scale rotation, before scaling applied to it - float r33[3][3]; - uint32 i; - for (i=0; i<3; ++i) - { - #ifdef MCORE_MATRIX_ROWMAJOR - r33[i][0] = TMAT(i,0); - r33[i][1] = TMAT(i,1); - r33[i][2] = TMAT(i,2); - #else - r33[0][i] = TMAT(i,0); - r33[1][i] = TMAT(i,1); - r33[2][i] = TMAT(i,2); - #endif - } - - // apply scaling - TMAT(0,0) *= scale.x; - TMAT(0,1) *= scale.y; - TMAT(0,2) *= scale.z; - TMAT(1,0) *= scale.x; - TMAT(1,1) *= scale.y; - TMAT(1,2) *= scale.z; - TMAT(2,0) *= scale.x; - TMAT(2,1) *= scale.y; - TMAT(2,2) *= scale.z; - - // undo the scale rotation - float v[3]; - for (i=0; i<3; ++i) - { - v[0] = TMAT(i,0); - v[1] = TMAT(i,1); - v[2] = TMAT(i,2); - - #ifdef MCORE_MATRIX_ROWMAJOR - TMAT(i,0) = v[0]*r33[0][0] + v[1]*r33[0][1] + v[2]*r33[0][2]; // transposed multiply - TMAT(i,1) = v[0]*r33[1][0] + v[1]*r33[1][1] + v[2]*r33[1][2]; - TMAT(i,2) = v[0]*r33[2][0] + v[1]*r33[2][1] + v[2]*r33[2][2]; - #else - TMAT(i,0) = v[0]*r33[0][0] + v[1]*r33[1][0] + v[2]*r33[2][0]; // transposed multiply - TMAT(i,1) = v[0]*r33[0][1] + v[1]*r33[1][1] + v[2]*r33[2][1]; - TMAT(i,2) = v[0]*r33[0][2] + v[1]*r33[1][2] + v[2]*r33[2][2]; - #endif - } - - // apply regular rotation - xx=rotation.x*rotation.x; - xy=rotation.x*rotation.y; yy=rotation.y*rotation.y; - xz=rotation.x*rotation.z; yz=rotation.y*rotation.z; zz=rotation.z*rotation.z; - xw=rotation.x*rotation.w; yw=rotation.y*rotation.w; zw=rotation.z*rotation.w; ww=rotation.w*rotation.w; - - #ifdef MCORE_MATRIX_ROWMAJOR - r33[0][0] = +xx-yy-zz+ww; r33[0][1] = +xy+zw+xy+zw; r33[0][2] = +xz-yw+xz-yw; - r33[1][0] = +xy-zw+xy-zw; r33[1][1] = -xx+yy-zz+ww; r33[1][2] = +yz+xw+yz+xw; - r33[2][0] = +xz+yw+xz+yw; r33[2][1] = +yz-xw+yz-xw; r33[2][2] = -xx-yy+zz+ww; - #else - r33[0][0] = +xx-yy-zz+ww; r33[1][0] = +xy+zw+xy+zw; r33[2][0] = +xz-yw+xz-yw; - r33[0][1] = +xy-zw+xy-zw; r33[1][1] = -xx+yy-zz+ww; r33[2][1] = +yz+xw+yz+xw; - r33[0][2] = +xz+yw+xz+yw; r33[1][2] = +yz-xw+yz-xw; r33[2][2] = -xx-yy+zz+ww; - #endif - - // mult 3x3 matrix - for (i=0; i<3; ++i) - { - v[0] = TMAT(i,0); - v[1] = TMAT(i,1); - v[2] = TMAT(i,2); - - #ifdef MCORE_MATRIX_ROWMAJOR - TMAT(i,0) = v[0]*r33[0][0] + v[1]*r33[1][0] + v[2]*r33[2][0]; - TMAT(i,1) = v[0]*r33[0][1] + v[1]*r33[1][1] + v[2]*r33[2][1]; - TMAT(i,2) = v[0]*r33[0][2] + v[1]*r33[1][2] + v[2]*r33[2][2]; - #else - TMAT(i,0) = v[0]*r33[0][0] + v[1]*r33[0][1] + v[2]*r33[0][2]; - TMAT(i,1) = v[0]*r33[1][0] + v[1]*r33[1][1] + v[2]*r33[1][2]; - TMAT(i,2) = v[0]*r33[2][0] + v[1]*r33[2][1] + v[2]*r33[2][2]; - #endif - } - - // apply translation - TMAT(3,0) = translation.x; - TMAT(3,1) = translation.y; - TMAT(3,2) = translation.z; - } - */ - - - void Matrix::MultMatrix4x3(const Matrix& right) - { - #if (AZ_TRAIT_USE_PLATFORM_SIMD_SSE && defined(MCORE_MATRIX_ROWMAJOR)) - const float* m = right.m_m16; - const float* n = m_m16; - float* t = this->m_m16; - - __m128 x0; - __m128 x1; - __m128 x2; - __m128 x3; - __m128 x4; - __m128 x5; - __m128 x6; - __m128 x7; - x0 = _mm_loadu_ps(&m[0]); - x1 = _mm_loadu_ps(&m[4]); - x2 = _mm_loadu_ps(&m[8]); - x3 = _mm_loadu_ps(&m[12]); - x4 = _mm_load_ps1(&n[0]); - x5 = _mm_load_ps1(&n[1]); - x6 = _mm_load_ps1(&n[2]); - x7 = _mm_load_ps1(&n[3]); - x4 = _mm_mul_ps(x4, x0); - x5 = _mm_mul_ps(x5, x1); - x6 = _mm_mul_ps(x6, x2); - x7 = _mm_mul_ps(x7, x3); - x4 = _mm_add_ps(x4, x5); - x6 = _mm_add_ps(x6, x7); - x4 = _mm_add_ps(x4, x6); - x5 = _mm_load_ps1(&n[4]); - x6 = _mm_load_ps1(&n[5]); - x7 = _mm_load_ps1(&n[6]); - x5 = _mm_mul_ps(x5, x0); - x6 = _mm_mul_ps(x6, x1); - x7 = _mm_mul_ps(x7, x2); - x5 = _mm_add_ps(x5, x6); - x5 = _mm_add_ps(x5, x7); - x6 = _mm_load_ps1(&n[7]); - x6 = _mm_mul_ps(x6, x3); - x5 = _mm_add_ps(x5, x6); - x6 = _mm_load_ps1(&n[8]); - x7 = _mm_load_ps1(&n[9]); - x6 = _mm_mul_ps(x6, x0); - x7 = _mm_mul_ps(x7, x1); - x6 = _mm_add_ps(x6, x7); - x7 = _mm_load_ps1(&n[10]); - x7 = _mm_mul_ps(x7, x2); - x6 = _mm_add_ps(x6, x7); - x7 = _mm_load_ps1(&n[11]); - x7 = _mm_mul_ps(x7, x3); - x6 = _mm_add_ps(x6, x7); - x7 = _mm_load_ps1(&n[12]); - x0 = _mm_mul_ps(x0, x7); - x7 = _mm_load_ps1(&n[13]); - x1 = _mm_mul_ps(x1, x7); - x7 = _mm_load_ps1(&n[14]); - x2 = _mm_mul_ps(x2, x7); - x7 = _mm_load_ps1(&n[15]); - x3 = _mm_mul_ps(x3, x7); - x0 = _mm_add_ps(x0, x1); - x2 = _mm_add_ps(x2, x3); - x0 = _mm_add_ps(x0, x2); - - //store result - _mm_storeu_ps(&t[0], x4); - _mm_storeu_ps(&t[4], x5); - _mm_storeu_ps(&t[8], x6); - _mm_storeu_ps(&t[12], x0); - #else - float v[3]; - - for (uint32 i = 0; i < 4; ++i) - { - v[0] = TMAT(i, 0); - v[1] = TMAT(i, 1); - v[2] = TMAT(i, 2); - TMAT(i, 0) = v[0] * MMAT(right, 0, 0) + v[1] * MMAT(right, 1, 0) + v[2] * MMAT(right, 2, 0); - TMAT(i, 1) = v[0] * MMAT(right, 0, 1) + v[1] * MMAT(right, 1, 1) + v[2] * MMAT(right, 2, 1); - TMAT(i, 2) = v[0] * MMAT(right, 0, 2) + v[1] * MMAT(right, 1, 2) + v[2] * MMAT(right, 2, 2); - } - - TMAT(3, 0) += MMAT(right, 3, 0); - TMAT(3, 1) += MMAT(right, 3, 1); - TMAT(3, 2) += MMAT(right, 3, 2); - #endif - } - - - // *this = left * right - void Matrix::MultMatrix(const Matrix& left, const Matrix& right) - { - #if (AZ_TRAIT_USE_PLATFORM_SIMD_SSE && defined(MCORE_MATRIX_ROWMAJOR)) - const float* m = right.m_m16; - const float* n = left.m_m16; - float* t = this->m_m16; - - __m128 x0; - __m128 x1; - __m128 x2; - __m128 x3; - __m128 x4; - __m128 x5; - __m128 x6; - __m128 x7; - x0 = _mm_loadu_ps(&m[0]); - x1 = _mm_loadu_ps(&m[4]); - x2 = _mm_loadu_ps(&m[8]); - x3 = _mm_loadu_ps(&m[12]); - x4 = _mm_load_ps1(&n[0]); - x5 = _mm_load_ps1(&n[1]); - x6 = _mm_load_ps1(&n[2]); - x7 = _mm_load_ps1(&n[3]); - x4 = _mm_mul_ps(x4, x0); - x5 = _mm_mul_ps(x5, x1); - x6 = _mm_mul_ps(x6, x2); - x7 = _mm_mul_ps(x7, x3); - x4 = _mm_add_ps(x4, x5); - x6 = _mm_add_ps(x6, x7); - x4 = _mm_add_ps(x4, x6); - x5 = _mm_load_ps1(&n[4]); - x6 = _mm_load_ps1(&n[5]); - x7 = _mm_load_ps1(&n[6]); - x5 = _mm_mul_ps(x5, x0); - x6 = _mm_mul_ps(x6, x1); - x7 = _mm_mul_ps(x7, x2); - x5 = _mm_add_ps(x5, x6); - x5 = _mm_add_ps(x5, x7); - x6 = _mm_load_ps1(&n[7]); - x6 = _mm_mul_ps(x6, x3); - x5 = _mm_add_ps(x5, x6); - x6 = _mm_load_ps1(&n[8]); - x7 = _mm_load_ps1(&n[9]); - x6 = _mm_mul_ps(x6, x0); - x7 = _mm_mul_ps(x7, x1); - x6 = _mm_add_ps(x6, x7); - x7 = _mm_load_ps1(&n[10]); - x7 = _mm_mul_ps(x7, x2); - x6 = _mm_add_ps(x6, x7); - x7 = _mm_load_ps1(&n[11]); - x7 = _mm_mul_ps(x7, x3); - x6 = _mm_add_ps(x6, x7); - x7 = _mm_load_ps1(&n[12]); - x0 = _mm_mul_ps(x0, x7); - x7 = _mm_load_ps1(&n[13]); - x1 = _mm_mul_ps(x1, x7); - x7 = _mm_load_ps1(&n[14]); - x2 = _mm_mul_ps(x2, x7); - x7 = _mm_load_ps1(&n[15]); - x3 = _mm_mul_ps(x3, x7); - x0 = _mm_add_ps(x0, x1); - x2 = _mm_add_ps(x2, x3); - x0 = _mm_add_ps(x0, x2); - - //store result - _mm_storeu_ps(&t[0], x4); - _mm_storeu_ps(&t[4], x5); - _mm_storeu_ps(&t[8], x6); - _mm_storeu_ps(&t[12], x0); - #else - float v[4]; - for (uint32 i = 0; i < 4; ++i) - { - v[0] = MMAT(left, i, 0); - v[1] = MMAT(left, i, 1); - v[2] = MMAT(left, i, 2); - v[3] = MMAT(left, i, 3); - TMAT(i, 0) = v[0] * MMAT(right, 0, 0) + v[1] * MMAT(right, 1, 0) + v[2] * MMAT(right, 2, 0) + v[3] * MMAT(right, 3, 0); - TMAT(i, 1) = v[0] * MMAT(right, 0, 1) + v[1] * MMAT(right, 1, 1) + v[2] * MMAT(right, 2, 1) + v[3] * MMAT(right, 3, 1); - TMAT(i, 2) = v[0] * MMAT(right, 0, 2) + v[1] * MMAT(right, 1, 2) + v[2] * MMAT(right, 2, 2) + v[3] * MMAT(right, 3, 2); - TMAT(i, 3) = v[0] * MMAT(right, 0, 3) + v[1] * MMAT(right, 1, 3) + v[2] * MMAT(right, 2, 3) + v[3] * MMAT(right, 3, 3); - } - #endif - } - - - - void Matrix::MultMatrix4x3(const Matrix& left, const Matrix& right) - { - #if (AZ_TRAIT_USE_PLATFORM_SIMD_SSE && defined(MCORE_MATRIX_ROWMAJOR)) - const float* m = right.m_m16; - const float* n = left.m_m16; - float* t = this->m_m16; - - __m128 x0; - __m128 x1; - __m128 x2; - __m128 x3; - __m128 x4; - __m128 x5; - __m128 x6; - __m128 x7; - x0 = _mm_loadu_ps(&m[0]); - x1 = _mm_loadu_ps(&m[4]); - x2 = _mm_loadu_ps(&m[8]); - x3 = _mm_loadu_ps(&m[12]); - x4 = _mm_load_ps1(&n[0]); - x5 = _mm_load_ps1(&n[1]); - x6 = _mm_load_ps1(&n[2]); - x7 = _mm_load_ps1(&n[3]); - x4 = _mm_mul_ps(x4, x0); - x5 = _mm_mul_ps(x5, x1); - x6 = _mm_mul_ps(x6, x2); - x7 = _mm_mul_ps(x7, x3); - x4 = _mm_add_ps(x4, x5); - x6 = _mm_add_ps(x6, x7); - x4 = _mm_add_ps(x4, x6); - x5 = _mm_load_ps1(&n[4]); - x6 = _mm_load_ps1(&n[5]); - x7 = _mm_load_ps1(&n[6]); - x5 = _mm_mul_ps(x5, x0); - x6 = _mm_mul_ps(x6, x1); - x7 = _mm_mul_ps(x7, x2); - x5 = _mm_add_ps(x5, x6); - x5 = _mm_add_ps(x5, x7); - x6 = _mm_load_ps1(&n[7]); - x6 = _mm_mul_ps(x6, x3); - x5 = _mm_add_ps(x5, x6); - x6 = _mm_load_ps1(&n[8]); - x7 = _mm_load_ps1(&n[9]); - x6 = _mm_mul_ps(x6, x0); - x7 = _mm_mul_ps(x7, x1); - x6 = _mm_add_ps(x6, x7); - x7 = _mm_load_ps1(&n[10]); - x7 = _mm_mul_ps(x7, x2); - x6 = _mm_add_ps(x6, x7); - x7 = _mm_load_ps1(&n[11]); - x7 = _mm_mul_ps(x7, x3); - x6 = _mm_add_ps(x6, x7); - x7 = _mm_load_ps1(&n[12]); - x0 = _mm_mul_ps(x0, x7); - x7 = _mm_load_ps1(&n[13]); - x1 = _mm_mul_ps(x1, x7); - x7 = _mm_load_ps1(&n[14]); - x2 = _mm_mul_ps(x2, x7); - x7 = _mm_load_ps1(&n[15]); - x3 = _mm_mul_ps(x3, x7); - x0 = _mm_add_ps(x0, x1); - x2 = _mm_add_ps(x2, x3); - x0 = _mm_add_ps(x0, x2); - - //store result - _mm_storeu_ps(&t[0], x4); - _mm_storeu_ps(&t[4], x5); - _mm_storeu_ps(&t[8], x6); - _mm_storeu_ps(&t[12], x0); - #else - float v[3]; - for (uint32 i = 0; i < 4; ++i) - { - v[0] = MMAT(left, i, 0); - v[1] = MMAT(left, i, 1); - v[2] = MMAT(left, i, 2); - TMAT(i, 0) = v[0] * MMAT(right, 0, 0) + v[1] * MMAT(right, 1, 0) + v[2] * MMAT(right, 2, 0); - TMAT(i, 1) = v[0] * MMAT(right, 0, 1) + v[1] * MMAT(right, 1, 1) + v[2] * MMAT(right, 2, 1); - TMAT(i, 2) = v[0] * MMAT(right, 0, 2) + v[1] * MMAT(right, 1, 2) + v[2] * MMAT(right, 2, 2); - } - - TMAT(0, 3) = 0.0f; - TMAT(1, 3) = 0.0f; - TMAT(2, 3) = 0.0f; - TMAT(3, 3) = 1.0f; - TMAT(3, 0) += MMAT(right, 3, 0); - TMAT(3, 1) += MMAT(right, 3, 1); - TMAT(3, 2) += MMAT(right, 3, 2); - #endif - } - - - void Matrix::MultMatrix3x3(const Matrix& right) - { - float v[3]; - for (uint32 i = 0; i < 4; ++i) - { - v[0] = TMAT(i, 0); - v[1] = TMAT(i, 1); - v[2] = TMAT(i, 2); - TMAT(i, 0) = v[0] * MMAT(right, 0, 0) + v[1] * MMAT(right, 1, 0) + v[2] * MMAT(right, 2, 0); - TMAT(i, 1) = v[0] * MMAT(right, 0, 1) + v[1] * MMAT(right, 1, 1) + v[2] * MMAT(right, 2, 1); - TMAT(i, 2) = v[0] * MMAT(right, 0, 2) + v[1] * MMAT(right, 1, 2) + v[2] * MMAT(right, 2, 2); - } - } - - - void Matrix::Transpose() - { - Matrix v; - - MMAT(v, 0, 0) = TMAT(0, 0); - MMAT(v, 0, 1) = TMAT(1, 0); - MMAT(v, 0, 2) = TMAT(2, 0); - MMAT(v, 0, 3) = TMAT(3, 0); - MMAT(v, 1, 0) = TMAT(0, 1); - MMAT(v, 1, 1) = TMAT(1, 1); - MMAT(v, 1, 2) = TMAT(2, 1); - MMAT(v, 1, 3) = TMAT(3, 1); - MMAT(v, 2, 0) = TMAT(0, 2); - MMAT(v, 2, 1) = TMAT(1, 2); - MMAT(v, 2, 2) = TMAT(2, 2); - MMAT(v, 2, 3) = TMAT(3, 2); - MMAT(v, 3, 0) = TMAT(0, 3); - MMAT(v, 3, 1) = TMAT(1, 3); - MMAT(v, 3, 2) = TMAT(2, 3); - MMAT(v, 3, 3) = TMAT(3, 3); - - *this = v; - } - - - void Matrix::TransposeTranslation() - { - AZ::Vector3 temp; - - temp.SetX(TMAT(3, 0)); - temp.SetY(TMAT(3, 1)); - temp.SetZ(TMAT(3, 2)); - - TMAT(3, 0) = TMAT(0, 3); - TMAT(3, 1) = TMAT(1, 3); - TMAT(3, 2) = TMAT(2, 3); - - TMAT(0, 3) = temp.GetX(); - TMAT(1, 3) = temp.GetY(); - TMAT(2, 3) = temp.GetZ(); - } - - - - void Matrix::Adjoint() - { - Matrix v; - - MMAT(v, 0, 0) = TMAT(1, 1) * TMAT(2, 2) - TMAT(1, 2) * TMAT(2, 1); - MMAT(v, 0, 1) = TMAT(2, 1) * TMAT(0, 2) - TMAT(2, 2) * TMAT(0, 1); - MMAT(v, 0, 2) = TMAT(0, 1) * TMAT(1, 2) - TMAT(0, 2) * TMAT(1, 1); - MMAT(v, 0, 3) = TMAT(0, 3); - MMAT(v, 1, 0) = TMAT(1, 2) * TMAT(2, 0) - TMAT(1, 0) * TMAT(2, 2); - MMAT(v, 1, 1) = TMAT(2, 2) * TMAT(0, 0) - TMAT(2, 0) * TMAT(0, 2); - MMAT(v, 1, 2) = TMAT(0, 2) * TMAT(1, 0) - TMAT(0, 0) * TMAT(1, 2); - MMAT(v, 1, 3) = TMAT(1, 3); - MMAT(v, 2, 0) = TMAT(1, 0) * TMAT(2, 1) - TMAT(1, 1) * TMAT(2, 0); - MMAT(v, 2, 1) = TMAT(2, 0) * TMAT(0, 1) - TMAT(2, 1) * TMAT(0, 0); - MMAT(v, 2, 2) = TMAT(0, 0) * TMAT(1, 1) - TMAT(0, 1) * TMAT(1, 0); - MMAT(v, 2, 3) = TMAT(2, 3); - MMAT(v, 3, 0) = -(TMAT(0, 0) * TMAT(3, 0) + TMAT(1, 0) * TMAT(3, 1) + TMAT(2, 0) * TMAT(3, 2)); - MMAT(v, 3, 1) = -(TMAT(0, 1) * TMAT(3, 0) + TMAT(1, 1) * TMAT(3, 1) + TMAT(2, 1) * TMAT(3, 2)); - MMAT(v, 3, 2) = -(TMAT(0, 2) * TMAT(3, 0) + TMAT(1, 2) * TMAT(3, 1) + TMAT(2, 2) * TMAT(3, 2)); - MMAT(v, 3, 3) = TMAT(3, 3); - - *this = v; - } - - - - AZ::Vector3 Matrix::InverseRot(const AZ::Vector3& v) - { - Matrix m(*this); - m.Inverse(); - m.SetTranslation(0.0f, 0.0f, 0.0f); - return v * m; - } - - - - void Matrix::Inverse() - { - Matrix v; - - const float s = 1.0f / CalcDeterminant(); - MMAT(v, 0, 0) = (TMAT(1, 1) * TMAT(2, 2) - TMAT(1, 2) * TMAT(2, 1)) * s; - MMAT(v, 0, 1) = (TMAT(2, 1) * TMAT(0, 2) - TMAT(2, 2) * TMAT(0, 1)) * s; - MMAT(v, 0, 2) = (TMAT(0, 1) * TMAT(1, 2) - TMAT(0, 2) * TMAT(1, 1)) * s; - MMAT(v, 0, 3) = TMAT(0, 3); - MMAT(v, 1, 0) = (TMAT(1, 2) * TMAT(2, 0) - TMAT(1, 0) * TMAT(2, 2)) * s; - MMAT(v, 1, 1) = (TMAT(2, 2) * TMAT(0, 0) - TMAT(2, 0) * TMAT(0, 2)) * s; - MMAT(v, 1, 2) = (TMAT(0, 2) * TMAT(1, 0) - TMAT(0, 0) * TMAT(1, 2)) * s; - MMAT(v, 1, 3) = TMAT(1, 3); - MMAT(v, 2, 0) = (TMAT(1, 0) * TMAT(2, 1) - TMAT(1, 1) * TMAT(2, 0)) * s; - MMAT(v, 2, 1) = (TMAT(2, 0) * TMAT(0, 1) - TMAT(2, 1) * TMAT(0, 0)) * s; - MMAT(v, 2, 2) = (TMAT(0, 0) * TMAT(1, 1) - TMAT(0, 1) * TMAT(1, 0)) * s; - MMAT(v, 2, 3) = TMAT(2, 3); - MMAT(v, 3, 0) = -(MMAT(v, 0, 0) * TMAT(3, 0) + MMAT(v, 1, 0) * TMAT(3, 1) + MMAT(v, 2, 0) * TMAT(3, 2)); - MMAT(v, 3, 1) = -(MMAT(v, 0, 1) * TMAT(3, 0) + MMAT(v, 1, 1) * TMAT(3, 1) + MMAT(v, 2, 1) * TMAT(3, 2)); - MMAT(v, 3, 2) = -(MMAT(v, 0, 2) * TMAT(3, 0) + MMAT(v, 1, 2) * TMAT(3, 1) + MMAT(v, 2, 2) * TMAT(3, 2)); - MMAT(v, 3, 3) = TMAT(3, 3); - - *this = v; - } - - - - void Matrix::OrthoNormalize() - { - AZ::Vector3 x = GetRight(); - AZ::Vector3 y = GetUp(); - //Vector3 z = GetForward(); - - x.Normalize(); - y -= x * x.Dot(y); - y.Normalize(); - AZ::Vector3 z = x.Cross(y); - - SetRight(x); - SetUp(y); - SetForward(z); - } - - - - void Matrix::Mirror(const Matrix& transform, const PlaneEq& plane) - { - // components - AZ::Vector3 x = transform.GetRight(); - AZ::Vector3 y = transform.GetForward(); - AZ::Vector3 z = transform.GetUp(); - AZ::Vector3 t = transform.GetTranslation(); - AZ::Vector3 n = plane.GetNormal(); - AZ::Vector3 n2 = n * -2.0f; - float d = plane.GetDist(); - - // mirror translation - AZ::Vector3 mt = t + n2 * (t.Dot(n) - d); - - // mirror x rotation - x += t; - x += n2 * (x.Dot(n) - d); - x -= mt; - - // mirror y rotation - y += t; - y += n2 * (y.Dot(n) - d); - y -= mt; - - // mirror z rotation - z += t; - z += n2 * (z.Dot(n) - d); - z -= mt; - - // write result - SetRight(x); - SetForward(y); - SetUp(z); - SetTranslation(mt); - - TMAT(0, 3) = 0; - TMAT(1, 3) = 0; - TMAT(2, 3) = 0; - TMAT(3, 3) = 1; - } - - - void Matrix::LookAt(const AZ::Vector3& view, const AZ::Vector3& target, const AZ::Vector3& up) - { - const AZ::Vector3 z = (target - view).GetNormalized(); - const AZ::Vector3 x = (up.Cross(z)).GetNormalized(); - const AZ::Vector3 y = z.Cross(x); - - TMAT(0, 0) = x.GetX(); - TMAT(0, 1) = y.GetX(); - TMAT(0, 2) = z.GetX(); - TMAT(0, 3) = 0.0f; - TMAT(1, 0) = x.GetY(); - TMAT(1, 1) = y.GetY(); - TMAT(1, 2) = z.GetY(); - TMAT(1, 3) = 0.0f; - TMAT(2, 0) = x.GetZ(); - TMAT(2, 1) = y.GetZ(); - TMAT(2, 2) = z.GetZ(); - TMAT(2, 3) = 0.0f; - TMAT(3, 0) = -x.Dot(view); - TMAT(3, 1) = -y.Dot(view); - TMAT(3, 2) = -z.Dot(view); - TMAT(3, 3) = 1.0f; - - // DirectX: - // zaxis = normal(cameraTarget - cameraPosition) - // xaxis = normal(cross(cameraUpVector, zaxis)) - // yaxis = cross(zaxis, xaxis) - // xaxis.x yaxis.x zaxis.x 0 - // xaxis.y yaxis.y zaxis.y 0 - // xaxis.z yaxis.z zaxis.z 0 - // -dot(xaxis, cameraPosition) -dot(yaxis, cameraPosition) -dot(zaxis, cameraPosition) 1 - } - - - void Matrix::LookAtRH(const AZ::Vector3& view, const AZ::Vector3& target, const AZ::Vector3& up) - { - const AZ::Vector3 z = (view - target).GetNormalized(); - const AZ::Vector3 x = (up.Cross(z)).GetNormalized(); - const AZ::Vector3 y = z.Cross(x); - - TMAT(0, 0) = x.GetX(); - TMAT(0, 1) = y.GetX(); - TMAT(0, 2) = z.GetX(); - TMAT(0, 3) = 0.0f; - TMAT(1, 0) = x.GetY(); - TMAT(1, 1) = y.GetY(); - TMAT(1, 2) = z.GetY(); - TMAT(1, 3) = 0.0f; - TMAT(2, 0) = x.GetZ(); - TMAT(2, 1) = y.GetZ(); - TMAT(2, 2) = z.GetZ(); - TMAT(2, 3) = 0.0f; - TMAT(3, 0) = -x.Dot(view); - TMAT(3, 1) = -y.Dot(view); - TMAT(3, 2) = -z.Dot(view); - TMAT(3, 3) = 1.0f; - - // DirectX: - // zaxis = normal(cameraPosition - cameraTarget) - // xaxis = normal(cross(cameraUpVector, zaxis)) - // yaxis = cross(zaxis, xaxis) - // xaxis.x yaxis.x zaxis.x 0 - // xaxis.y yaxis.y zaxis.y 0 - // xaxis.z yaxis.z zaxis.z 0 - // -dot(xaxis, cameraPosition) -dot(yaxis, cameraPosition) -dot(zaxis, cameraPosition) 1 - } - - // ortho projection matrix - void Matrix::OrthoOffCenter(float left, float right, float top, float bottom, float znear, float zfar) - { - TMAT(0, 0) = 2.0f / (right - left); - TMAT(0, 1) = 0.0f; - TMAT(0, 2) = 0.0f; - TMAT(0, 3) = 0.0f; - TMAT(1, 0) = 0.0f; - TMAT(1, 1) = 2.0f / (top - bottom); - TMAT(1, 2) = 0.0f; - TMAT(1, 3) = 0.0f; - TMAT(2, 0) = 0.0f; - TMAT(2, 1) = 0.0f; - TMAT(2, 2) = 1.0f / (zfar - znear); - TMAT(2, 3) = 0.0f; - TMAT(3, 0) = (left + right) / (left - right); - TMAT(3, 1) = (top + bottom) / (bottom - top); - TMAT(3, 2) = znear / (znear - zfar); - TMAT(3, 3) = 1.0f; - - // DirectX: - // 2/(right-l) 0 0 0 - // 0 2/(top-bottom) 0 0 - // 0 0 1/(zfarPlane-znearPlane) 0 - // (l+right)/(l-right) (top+bottom)/(bottom-top) znearPlane/(znearPlane-zfarPlane) 1 - } - - - // ortho projection matrix - void Matrix::OrthoOffCenterRH(float left, float right, float top, float bottom, float znear, float zfar) - { - TMAT(0, 0) = 2.0f / (right - left); - TMAT(0, 1) = 0.0f; - TMAT(0, 2) = 0.0f; - TMAT(0, 3) = 0.0f; - TMAT(1, 0) = 0.0f; - TMAT(1, 1) = 2.0f / (top - bottom); - TMAT(1, 2) = 0.0f; - TMAT(1, 3) = 0.0f; - TMAT(2, 0) = 0.0f; - TMAT(2, 1) = 0.0f; - TMAT(2, 2) = 1.0f / (znear - zfar); - TMAT(2, 3) = 0.0f; - TMAT(3, 0) = (left + right) / (left - right); - TMAT(3, 1) = (top + bottom) / (bottom - top); - TMAT(3, 2) = znear / (znear - zfar); - TMAT(3, 3) = 1.0f; - - // DirectX: - // 2/(right-left) 0 0 0 - // 0 2/(top-bottom) 0 0 - // 0 0 1/(znearPlane-zfarPlane) 0 - // (l+right)/(l-rright) (top+bottom)/(bottom-top) znearPlane/(znearPlane-zfarPlane) 1 - } - - - // ortho projection matrix - void Matrix::Ortho(float left, float right, float top, float bottom, float znear, float zfar) - { - TMAT(0, 0) = 2.0f / (right - left); - TMAT(0, 1) = 0.0f; - TMAT(0, 2) = 0.0f; - TMAT(0, 3) = 0.0f; - TMAT(1, 0) = 0.0f; - TMAT(1, 1) = 2.0f / (top - bottom); - TMAT(1, 2) = 0.0f; - TMAT(1, 3) = 0.0f; - TMAT(2, 0) = 0.0f; - TMAT(2, 1) = 0.0f; - TMAT(2, 2) = 1.0f / (zfar - znear); - TMAT(2, 3) = 0.0f; - TMAT(3, 0) = 0.0f; - TMAT(3, 1) = 0.0f; - TMAT(3, 2) = znear / (znear - zfar); - TMAT(3, 3) = 1.0f; - - // DirectX: - // 2/width 0 0 0 - // 0 2/height 0 0 - // 0 0 1/(zfarPlane-znearPlane) 0 - // 0 0 znearPlane/(znearPlane-zfarPlane) 1 - } - - - // ortho projection matrix, right handed - void Matrix::OrthoRH(float left, float right, float top, float bottom, float znear, float zfar) - { - TMAT(0, 0) = 2.0f / (right - left); - TMAT(0, 1) = 0.0f; - TMAT(0, 2) = 0.0f; - TMAT(0, 3) = 0.0f; - TMAT(1, 0) = 0.0f; - TMAT(1, 1) = 2.0f / (top - bottom); - TMAT(1, 2) = 0.0f; - TMAT(1, 3) = 0.0f; - TMAT(2, 0) = 0.0f; - TMAT(2, 1) = 0.0f; - TMAT(2, 2) = 1.0f / (znear - zfar); - TMAT(2, 3) = 0.0f; - TMAT(3, 0) = 0.0f; - TMAT(3, 1) = 0.0f; - TMAT(3, 2) = znear / (znear - zfar); - TMAT(3, 3) = 1.0f; - - // DirectX: - // 2/width 0 0 0 - // 0 2/height 0 0 - // 0 0 1/(znearPlane-zfarPlane) 0 - // 0 0 znearPlane/(znearPlane-zfarPlane) 1 - } - - - // frustum matrix - void Matrix::Frustum(float left, float right, float top, float bottom, float znear, float zfar) - { - TMAT(0, 0) = 2.0f * znear / (right - left); - TMAT(1, 0) = 0.0f; - TMAT(2, 0) = (right + left) / (right - left); - TMAT(3, 0) = 0.0f; - TMAT(0, 1) = 0.0f; - TMAT(1, 1) = 2.0f * znear / (top - bottom); - TMAT(2, 1) = (top + bottom) / (top - bottom); - TMAT(3, 1) = 0.0f; - TMAT(0, 2) = 0.0f; - TMAT(1, 2) = 0.0f; - TMAT(2, 2) = (zfar + znear) / (zfar - znear); - TMAT(3, 2) = 2.0f * zfar * znear / (zfar - znear); - TMAT(0, 3) = 0.0f; - TMAT(1, 3) = 0.0f; - TMAT(2, 3) = -1.0f; - TMAT(3, 3) = 0.0f; - } - - - // setup perspective projection matrix - void Matrix::Perspective(float fov, float aspect, float zNear, float zFar) - { - const float yScale = 1.0f / Math::Tan(fov * 0.5f); - const float xScale = yScale / aspect; - const float d = zFar / (zFar - zNear); - - MCore::MemSet(m44, 0, 16 * sizeof(float)); - TMAT(0, 0) = xScale; - TMAT(1, 1) = yScale; - TMAT(2, 2) = d; - TMAT(2, 3) = 1.0f; - TMAT(3, 2) = -zNear * d; - } - - - // setup perspective projection matrix, right handed - void Matrix::PerspectiveRH(float fov, float aspect, float zNear, float zFar) - { - const float yScale = 1.0f / Math::Tan(fov * 0.5f); - const float xScale = yScale / aspect; - const float d = zFar / (zNear - zFar); - - MCore::MemSet(m44, 0, 16 * sizeof(float)); - TMAT(0, 0) = xScale; - TMAT(1, 1) = yScale; - TMAT(2, 2) = d; - TMAT(2, 3) = -1.0f; - TMAT(3, 2) = zNear * d; - } - - - // check if the matrix is symmetric or not - bool Matrix::CheckIfIsSymmetric(float tolerance) const - { - // if no tolerance check is needed - if (MCore::Math::IsFloatZero(tolerance)) - { - if (TMAT(1, 0) != TMAT(0, 1)) - { - return false; - } - if (TMAT(2, 0) != TMAT(0, 2)) - { - return false; - } - if (TMAT(2, 1) != TMAT(1, 2)) - { - return false; - } - if (TMAT(3, 0) != TMAT(0, 3)) - { - return false; - } - if (TMAT(3, 1) != TMAT(1, 3)) - { - return false; - } - if (TMAT(3, 2) != TMAT(2, 3)) - { - return false; - } - } - else // tolerance check needed - { - if (Math::Abs(TMAT(1, 0) - TMAT(0, 1)) > tolerance) - { - return false; - } - if (Math::Abs(TMAT(2, 0) - TMAT(0, 2)) > tolerance) - { - return false; - } - if (Math::Abs(TMAT(2, 1) - TMAT(1, 2)) > tolerance) - { - return false; - } - if (Math::Abs(TMAT(3, 0) - TMAT(0, 3)) > tolerance) - { - return false; - } - if (Math::Abs(TMAT(3, 1) - TMAT(1, 3)) > tolerance) - { - return false; - } - if (Math::Abs(TMAT(3, 2) - TMAT(2, 3)) > tolerance) - { - return false; - } - } - - // yeah, we have a symmetric matrix here - return true; - } - - - // check if this matrix is a diagonal matrix or not. - bool Matrix::CheckIfIsDiagonal(float tolerance) const - { - if (tolerance <= Math::epsilon) - { - // for all entries - for (uint32 y = 0; y < 4; ++y) - { - for (uint32 x = 0; x < 4; ++x) - { - // if we are on the diagonal - if (x == y) - { - if (TMAT(y, x) == 0) - { - return false; // if this entry on the diagonal is 0, we have no diagonal matrix - } - } - else // we are not on the diagonal - if (TMAT(y, x) != 0) - { - return false; // if the entry isn't equal to 0, it isn't a diagonal matrix - } - } - } - } - else - { - // for all entries - for (uint32 y = 0; y < 4; ++y) - { - for (uint32 x = 0; x < 4; ++x) - { - // if we are on the diagonal - if (x == y) - { - if (Math::Abs(TMAT(y, x)) < tolerance) - { - return false; // if this entry on the diagonal is 0, we have no diagonal matrix - } - } - else // we are not on the diagonal - { - if (Math::Abs(TMAT(y, x)) > tolerance) - { - return false; // if the entry isn't equal to 0, it isn't a diagonal matrix - } - } - } - } - } - - // yeaaah, we have a diagonal matrix here - return true; - } - - - // prints the matrix into the logfile or debug output, using MCore::LOG() - void Matrix::Log() const - { - MCore::LogDetailedInfo(""); - MCore::LogDetailedInfo("(%.8f, %.8f, %.8f, %.8f)", m_m16[0], m_m16[1], m_m16[2], m_m16[3]); - MCore::LogDetailedInfo("(%.8f, %.8f, %.8f, %.8f)", m_m16[4], m_m16[5], m_m16[6], m_m16[7]); - MCore::LogDetailedInfo("(%.8f, %.8f, %.8f, %.8f)", m_m16[8], m_m16[9], m_m16[10], m_m16[11]); - MCore::LogDetailedInfo("(%.8f, %.8f, %.8f, %.8f)", m_m16[12], m_m16[13], m_m16[14], m_m16[15]); - MCore::LogDetailedInfo(""); - } - - - // check if the matrix is orthogonal or not - bool Matrix::CheckIfIsOrthogonal(float tolerance) const - { - // get the matrix vectors - AZ::Vector3 right = GetRight(); - AZ::Vector3 up = GetUp(); - AZ::Vector3 forward = GetForward(); - - // check if the vectors form an orthonormal set - if (Math::Abs(right.Dot(up)) > tolerance) - { - return false; - } - if (Math::Abs(right.Dot(forward)) > tolerance) - { - return false; - } - if (Math::Abs(forward.Dot(up)) > tolerance) - { - return false; - } - - // the vector set is not orthonormal, so the matrix is not an orthogonal one - return true; - } - - - // check if the matrix is an identity matrix or not - bool Matrix::CheckIfIsIdentity(float tolerance) const - { - // for all entries - for (uint32 y = 0; y < 4; ++y) - { - for (uint32 x = 0; x < 4; ++x) - { - // if we are on the diagonal - if (x == y) - { - if (Math::Abs(1.0f - TMAT(y, x)) > tolerance) - { - return false; // if this entry on the diagonal not 1, we have no identity matrix - } - } - else // we are not on the diagonal - { - if (Math::Abs(TMAT(y, x)) > tolerance) - { - return false; // if the entry isn't equal to 0, it isn't an identity matrix - } - } - } - } - - // yup, we have an identity matrix here :) - return true; - } - - - // calculate the handedness of the matrix - float Matrix::CalcHandedness() const - { - // get the matrix vectors - AZ::Vector3 right = GetRight(); - AZ::Vector3 up = GetUp(); - AZ::Vector3 forward = GetForward(); - - // calculate the handedness (negative result means left handed, positive means right handed) - return (right.Cross(up)).Dot(forward); - } - - - // check if the matrix is right handed or not - bool Matrix::CheckIfIsRightHanded() const - { - return (CalcHandedness() <= 0.0f); - } - - - // check if the matrix is right handed or not - - bool Matrix::CheckIfIsLeftHanded() const - { - return (CalcHandedness() > 0.0f); - } - - - // check if this matrix is a pure rotation matrix or not - bool Matrix::CheckIfIsPureRotationMatrix(float tolerance) const - { - return (Math::Abs(1.0f - CalcDeterminant()) < tolerance); - } - - - // check if the matrix is reflected (mirrored) or not - bool Matrix::CheckIfIsReflective() const - { - float determinant = CalcDeterminant(); - return (determinant < 0.0f); - //return ((determinant > (-1.0 - tolerance)) && (determinant < (-1.0 + tolerance))); // if the determinant is near -1, it will reflect - } - - - // calculate the inverse transpose - void Matrix::InverseTranspose() - { - Inverse(); - Transpose(); - } - - - // return the inverse transposed version of this matrix - Matrix Matrix::InverseTransposed() const - { - Matrix result(*this); - result.InverseTranspose(); - return result; - } - - - // normalize a matrix - void Matrix::Normalize() - { - // get the current vectors - AZ::Vector3 right = GetRight(); - AZ::Vector3 up = GetUp(); - AZ::Vector3 forward = GetForward(); - - // normalize them - right.Normalize(); - up.Normalize(); - forward.Normalize(); - - // update them again with the normalized versions - SetRight(right); - SetUp(up); - SetForward(forward); - } - - - // creates a shear matrix - void Matrix::SetShearMatrix(const AZ::Vector3& s) - { - TMAT(0, 0) = 1; - TMAT(0, 1) = s.GetX(); - TMAT(0, 2) = s.GetY(); - TMAT(0, 3) = 0; - TMAT(1, 0) = 0; - TMAT(1, 1) = 1; - TMAT(1, 2) = s.GetZ(); - TMAT(1, 3) = 0; - TMAT(2, 0) = 0; - TMAT(2, 1) = 0; - TMAT(2, 2) = 1; - TMAT(2, 3) = 0; - TMAT(3, 0) = 0; - TMAT(3, 1) = 0; - TMAT(3, 2) = 0; - TMAT(3, 3) = 1; - } - - - - void Matrix::SetRotationMatrix(const AZ::Quaternion& rotation) - { - const float xx = rotation.GetX() * rotation.GetX(); - const float xy = rotation.GetX() * rotation.GetY(), yy = rotation.GetY() * rotation.GetY(); - const float xz = rotation.GetX() * rotation.GetZ(), yz = rotation.GetY() * rotation.GetZ(), zz = rotation.GetZ() * rotation.GetZ(); - const float xw = rotation.GetX() * rotation.GetW(), yw = rotation.GetY() * rotation.GetW(), zw = rotation.GetZ() * rotation.GetW(), ww = rotation.GetW() * rotation.GetW(); - - TMAT(0, 0) = +xx - yy - zz + ww; - TMAT(0, 1) = +xy + zw + xy + zw; - TMAT(0, 2) = +xz - yw + xz - yw; - TMAT(0, 3) = 0.0f; - TMAT(1, 0) = +xy - zw + xy - zw; - TMAT(1, 1) = -xx + yy - zz + ww; - TMAT(1, 2) = +yz + xw + yz + xw; - TMAT(1, 3) = 0.0f; - TMAT(2, 0) = +xz + yw + xz + yw; - TMAT(2, 1) = +yz - xw + yz - xw; - TMAT(2, 2) = -xx - yy + zz + ww; - TMAT(2, 3) = 0.0f; - TMAT(3, 0) = 0.0f; - TMAT(3, 1) = 0.0f; - TMAT(3, 2) = 0.0f; - TMAT(3, 3) = 1.0f; - } - - - // calculate a rotation matrix from two vectors - void Matrix::SetRotationMatrixTwoVectors(const AZ::Vector3& from, const AZ::Vector3& to) - { - // calculate intermediate values - const float lengths = SafeLength(to) * SafeLength(from); - const float D = (lengths > Math::epsilon) ? 1.0f / lengths : 0.0f; - const float C = (to.GetX() * from.GetX() + to.GetY() * from.GetY() + to.GetZ() * from.GetZ()) * D; - const float vzwy = (to.GetY() * from.GetZ()) - (to.GetZ() * from.GetY()); - const float wxuz = (to.GetZ() * from.GetX()) - (to.GetX() * from.GetZ()); - const float uyvx = (to.GetX() * from.GetY()) - (to.GetY() * from.GetX()); - const float A = vzwy * vzwy + wxuz * wxuz + uyvx * uyvx; - - // return identity if the cross product of the two vectors is small - if (A < Math::epsilon) - { - Identity(); - return; - } - - // set the components of the rotation matrix - const float t = (1.0f - C) / A; - TMAT(0, 0) = t * vzwy * vzwy + C; - TMAT(1, 1) = t * wxuz * wxuz + C; - TMAT(2, 2) = t * uyvx * uyvx + C; - TMAT(3, 3) = 1.0f; - TMAT(0, 1) = t * vzwy * wxuz + D * uyvx; - TMAT(0, 2) = t * vzwy * uyvx - D * wxuz; - TMAT(1, 2) = t * wxuz * uyvx + D * vzwy; - TMAT(1, 0) = t * vzwy * wxuz - D * uyvx; - TMAT(2, 0) = t * vzwy * uyvx + D * wxuz; - TMAT(2, 1) = t * wxuz * uyvx - D * vzwy; - TMAT(0, 3) = 0.0f; - TMAT(1, 3) = 0.0f; - TMAT(2, 3) = 0.0f; - TMAT(3, 0) = 0.0f; - TMAT(3, 1) = 0.0f; - TMAT(3, 2) = 0.0f; - } - - - - // output: x=pitch, y=yaw, z=roll - // reconstruction: roll*pitch*yaw (zxy) - AZ::Vector3 Matrix::CalcPitchYawRoll() const - { - const float pitch = Math::ASin(-TMAT(2, 1)); - const float cosPitch = Math::Cos(pitch); - const float threshold = 0.0001f; - float roll; - float yaw; - - if (cosPitch > threshold) - { - roll = Math::ATan2(TMAT(0, 1), TMAT(1, 1)); - yaw = Math::ATan2(TMAT(2, 0), TMAT(2, 2)); - } - else - { - roll = Math::ATan2(-TMAT(1, 0), TMAT(0, 0)); - yaw = 0.0f; - } - - return AZ::Vector3(pitch, yaw, roll); - } - - - - // init the matrix from a yaw/pitch/roll angle set - void Matrix::SetRotationMatrixPitchYawRoll(float pitch, float yaw, float roll) - { - const float cosX = Math::Cos(pitch); - const float cosY = Math::Cos(yaw); - const float cosZ = Math::Cos(roll); - const float sinX = Math::Sin(pitch); - const float sinY = Math::Sin(yaw); - const float sinZ = Math::Sin(roll); - - TMAT(0, 0) = cosZ * cosY + sinZ * sinX * sinY; - TMAT(0, 1) = sinZ * cosX; - TMAT(0, 2) = cosZ * -sinY + sinZ * sinX * cosY; - TMAT(0, 3) = 0.0f; - TMAT(1, 0) = -sinZ * cosY + cosZ * sinX * sinY; - TMAT(1, 1) = cosZ * cosX; - TMAT(1, 2) = sinZ * sinY + cosZ * sinX * cosY; - TMAT(1, 3) = 0.0f; - TMAT(2, 0) = cosX * sinY; - TMAT(2, 1) = -sinX; - TMAT(2, 2) = cosX * cosY; - TMAT(2, 3) = 0.0f; - TMAT(3, 0) = 0.0f; - TMAT(3, 1) = 0.0f; - TMAT(3, 2) = 0.0f; - TMAT(3, 3) = 1.0f; - } - - - - - // - void Matrix::DecomposeQRGramSchmidt(AZ::Vector3& translation, Matrix& rot, AZ::Vector3& scale, AZ::Vector3& shear) const - { - // build orthogonal matrix Q - float invLength = Math::InvSqrt(TMAT(0, 0) * TMAT(0, 0) + TMAT(1, 0) * TMAT(1, 0) + TMAT(2, 0) * TMAT(2, 0)); - MMAT(rot, 0, 0) = TMAT(0, 0) * invLength; - MMAT(rot, 1, 0) = TMAT(1, 0) * invLength; - MMAT(rot, 2, 0) = TMAT(2, 0) * invLength; - - float fDot = MMAT(rot, 0, 0) * TMAT(0, 1) + MMAT(rot, 1, 0) * TMAT(1, 1) + MMAT(rot, 2, 0) * TMAT(2, 1); - MMAT(rot, 0, 1) = TMAT(0, 1) - fDot * MMAT(rot, 0, 0); - MMAT(rot, 1, 1) = TMAT(1, 1) - fDot * MMAT(rot, 1, 0); - MMAT(rot, 2, 1) = TMAT(2, 1) - fDot * MMAT(rot, 2, 0); - invLength = Math::InvSqrt(MMAT(rot, 0, 1) * MMAT(rot, 0, 1) + MMAT(rot, 1, 1) * MMAT(rot, 1, 1) + MMAT(rot, 2, 1) * MMAT(rot, 2, 1)); - MMAT(rot, 0, 1) *= invLength; - MMAT(rot, 1, 1) *= invLength; - MMAT(rot, 2, 1) *= invLength; - - fDot = MMAT(rot, 0, 0) * TMAT(0, 2) + MMAT(rot, 1, 0) * TMAT(1, 2) + MMAT(rot, 2, 0) * TMAT(2, 2); - MMAT(rot, 0, 2) = TMAT(0, 2) - fDot * MMAT(rot, 0, 0); - MMAT(rot, 1, 2) = TMAT(1, 2) - fDot * MMAT(rot, 1, 0); - MMAT(rot, 2, 2) = TMAT(2, 2) - fDot * MMAT(rot, 2, 0); - fDot = MMAT(rot, 0, 1) * TMAT(0, 2) + MMAT(rot, 1, 1) * TMAT(1, 2) + MMAT(rot, 2, 1) * TMAT(2, 2); - MMAT(rot, 0, 2) -= fDot * MMAT(rot, 0, 1); - MMAT(rot, 1, 2) -= fDot * MMAT(rot, 1, 1); - MMAT(rot, 2, 2) -= fDot * MMAT(rot, 2, 1); - invLength = Math::InvSqrt(MMAT(rot, 0, 2) * MMAT(rot, 0, 2) + MMAT(rot, 1, 2) * MMAT(rot, 1, 2) + MMAT(rot, 2, 2) * MMAT(rot, 2, 2)); - MMAT(rot, 0, 2) *= invLength; - MMAT(rot, 1, 2) *= invLength; - MMAT(rot, 2, 2) *= invLength; - - // guarantee that orthogonal matrix has determinant 1 (no reflections) - float fDet = MMAT(rot, 0, 0) * MMAT(rot, 1, 1) * MMAT(rot, 2, 2) + MMAT(rot, 0, 1) * MMAT(rot, 1, 2) * MMAT(rot, 2, 0) + - MMAT(rot, 0, 2) * MMAT(rot, 1, 0) * MMAT(rot, 2, 1) - MMAT(rot, 0, 2) * MMAT(rot, 1, 1) * MMAT(rot, 2, 0) - - MMAT(rot, 0, 1) * MMAT(rot, 1, 0) * MMAT(rot, 2, 2) - MMAT(rot, 0, 0) * MMAT(rot, 1, 2) * MMAT(rot, 2, 1); - - if (fDet < 0.0f) - { - for (uint32 r = 0; r < 3; ++r) - { - for (uint32 c = 0; c < 3; ++c) - { - MMAT(rot, r, c) = -MMAT(rot, r, c); - } - } - } - - // build "right" matrix R - Matrix R; - MMAT(R, 0, 0) = MMAT(rot, 0, 0) * TMAT(0, 0) + MMAT(rot, 1, 0) * TMAT(1, 0) + MMAT(rot, 2, 0) * TMAT(2, 0); - MMAT(R, 0, 1) = MMAT(rot, 0, 0) * TMAT(0, 1) + MMAT(rot, 1, 0) * TMAT(1, 1) + MMAT(rot, 2, 0) * TMAT(2, 1); - MMAT(R, 1, 1) = MMAT(rot, 0, 1) * TMAT(0, 1) + MMAT(rot, 1, 1) * TMAT(1, 1) + MMAT(rot, 2, 1) * TMAT(2, 1); - MMAT(R, 0, 2) = MMAT(rot, 0, 0) * TMAT(0, 2) + MMAT(rot, 1, 0) * TMAT(1, 2) + MMAT(rot, 2, 0) * TMAT(2, 2); - MMAT(R, 1, 2) = MMAT(rot, 0, 1) * TMAT(0, 2) + MMAT(rot, 1, 1) * TMAT(1, 2) + MMAT(rot, 2, 1) * TMAT(2, 2); - MMAT(R, 2, 2) = MMAT(rot, 0, 2) * TMAT(0, 2) + MMAT(rot, 1, 2) * TMAT(1, 2) + MMAT(rot, 2, 2) * TMAT(2, 2); - - // the scaling component - scale.SetX(MMAT(R, 0, 0)); - scale.SetY(MMAT(R, 1, 1)); - scale.SetZ(MMAT(R, 2, 2)); - - // the shear component - const float invScaleX = 1.0f / scale.GetX(); - shear.SetX(MMAT(R, 0, 1) * invScaleX); - shear.SetY(MMAT(R, 0, 2) * invScaleX); - shear.SetZ(MMAT(R, 1, 2) / scale.GetY()); - - translation = GetTranslation(); - } - - - // - void Matrix::DecomposeQRGramSchmidt(AZ::Vector3& translation, Matrix& rot, AZ::Vector3& scale) const - { - // build orthogonal matrix Q - float invLength = Math::InvSqrt(TMAT(0, 0) * TMAT(0, 0) + TMAT(1, 0) * TMAT(1, 0) + TMAT(2, 0) * TMAT(2, 0)); - MMAT(rot, 0, 0) = TMAT(0, 0) * invLength; - MMAT(rot, 1, 0) = TMAT(1, 0) * invLength; - MMAT(rot, 2, 0) = TMAT(2, 0) * invLength; - - float fDot = MMAT(rot, 0, 0) * TMAT(0, 1) + MMAT(rot, 1, 0) * TMAT(1, 1) + MMAT(rot, 2, 0) * TMAT(2, 1); - MMAT(rot, 0, 1) = TMAT(0, 1) - fDot * MMAT(rot, 0, 0); - MMAT(rot, 1, 1) = TMAT(1, 1) - fDot * MMAT(rot, 1, 0); - MMAT(rot, 2, 1) = TMAT(2, 1) - fDot * MMAT(rot, 2, 0); - invLength = Math::InvSqrt(MMAT(rot, 0, 1) * MMAT(rot, 0, 1) + MMAT(rot, 1, 1) * MMAT(rot, 1, 1) + MMAT(rot, 2, 1) * MMAT(rot, 2, 1)); - MMAT(rot, 0, 1) *= invLength; - MMAT(rot, 1, 1) *= invLength; - MMAT(rot, 2, 1) *= invLength; - - fDot = MMAT(rot, 0, 0) * TMAT(0, 2) + MMAT(rot, 1, 0) * TMAT(1, 2) + MMAT(rot, 2, 0) * TMAT(2, 2); - MMAT(rot, 0, 2) = TMAT(0, 2) - fDot * MMAT(rot, 0, 0); - MMAT(rot, 1, 2) = TMAT(1, 2) - fDot * MMAT(rot, 1, 0); - MMAT(rot, 2, 2) = TMAT(2, 2) - fDot * MMAT(rot, 2, 0); - fDot = MMAT(rot, 0, 1) * TMAT(0, 2) + MMAT(rot, 1, 1) * TMAT(1, 2) + MMAT(rot, 2, 1) * TMAT(2, 2); - MMAT(rot, 0, 2) -= fDot * MMAT(rot, 0, 1); - MMAT(rot, 1, 2) -= fDot * MMAT(rot, 1, 1); - MMAT(rot, 2, 2) -= fDot * MMAT(rot, 2, 1); - invLength = Math::InvSqrt(MMAT(rot, 0, 2) * MMAT(rot, 0, 2) + MMAT(rot, 1, 2) * MMAT(rot, 1, 2) + MMAT(rot, 2, 2) * MMAT(rot, 2, 2)); - MMAT(rot, 0, 2) *= invLength; - MMAT(rot, 1, 2) *= invLength; - MMAT(rot, 2, 2) *= invLength; - - // guarantee that orthogonal matrix has determinant 1 (no reflections) - float fDet = MMAT(rot, 0, 0) * MMAT(rot, 1, 1) * MMAT(rot, 2, 2) + MMAT(rot, 0, 1) * MMAT(rot, 1, 2) * MMAT(rot, 2, 0) + - MMAT(rot, 0, 2) * MMAT(rot, 1, 0) * MMAT(rot, 2, 1) - MMAT(rot, 0, 2) * MMAT(rot, 1, 1) * MMAT(rot, 2, 0) - - MMAT(rot, 0, 1) * MMAT(rot, 1, 0) * MMAT(rot, 2, 2) - MMAT(rot, 0, 0) * MMAT(rot, 1, 2) * MMAT(rot, 2, 1); - - if (fDet < 0.0f) - { - for (uint32 r = 0; r < 3; ++r) - { - for (uint32 c = 0; c < 3; ++c) - { - MMAT(rot, r, c) = -MMAT(rot, r, c); - } - } - } - - // build "right" matrix R - Matrix R; - MMAT(R, 0, 0) = MMAT(rot, 0, 0) * TMAT(0, 0) + MMAT(rot, 1, 0) * TMAT(1, 0) + MMAT(rot, 2, 0) * TMAT(2, 0); - MMAT(R, 0, 1) = MMAT(rot, 0, 0) * TMAT(0, 1) + MMAT(rot, 1, 0) * TMAT(1, 1) + MMAT(rot, 2, 0) * TMAT(2, 1); - MMAT(R, 1, 1) = MMAT(rot, 0, 1) * TMAT(0, 1) + MMAT(rot, 1, 1) * TMAT(1, 1) + MMAT(rot, 2, 1) * TMAT(2, 1); - MMAT(R, 0, 2) = MMAT(rot, 0, 0) * TMAT(0, 2) + MMAT(rot, 1, 0) * TMAT(1, 2) + MMAT(rot, 2, 0) * TMAT(2, 2); - MMAT(R, 1, 2) = MMAT(rot, 0, 1) * TMAT(0, 2) + MMAT(rot, 1, 1) * TMAT(1, 2) + MMAT(rot, 2, 1) * TMAT(2, 2); - MMAT(R, 2, 2) = MMAT(rot, 0, 2) * TMAT(0, 2) + MMAT(rot, 1, 2) * TMAT(1, 2) + MMAT(rot, 2, 2) * TMAT(2, 2); - - // the scaling component - scale.SetX(MMAT(R, 0, 0)); - scale.SetY(MMAT(R, 1, 1)); - scale.SetZ(MMAT(R, 2, 2)); - - translation = GetTranslation(); - } - - - // decompose into translation and rotation - void Matrix::DecomposeQRGramSchmidt(AZ::Vector3& translation, Matrix& rot) const - { - // build orthogonal matrix Q - float invLength = Math::InvSqrt(TMAT(0, 0) * TMAT(0, 0) + TMAT(1, 0) * TMAT(1, 0) + TMAT(2, 0) * TMAT(2, 0)); - MMAT(rot, 0, 0) = TMAT(0, 0) * invLength; - MMAT(rot, 1, 0) = TMAT(1, 0) * invLength; - MMAT(rot, 2, 0) = TMAT(2, 0) * invLength; - - float fDot = MMAT(rot, 0, 0) * TMAT(0, 1) + MMAT(rot, 1, 0) * TMAT(1, 1) + MMAT(rot, 2, 0) * TMAT(2, 1); - MMAT(rot, 0, 1) = TMAT(0, 1) - fDot * MMAT(rot, 0, 0); - MMAT(rot, 1, 1) = TMAT(1, 1) - fDot * MMAT(rot, 1, 0); - MMAT(rot, 2, 1) = TMAT(2, 1) - fDot * MMAT(rot, 2, 0); - invLength = Math::InvSqrt(MMAT(rot, 0, 1) * MMAT(rot, 0, 1) + MMAT(rot, 1, 1) * MMAT(rot, 1, 1) + MMAT(rot, 2, 1) * MMAT(rot, 2, 1)); - MMAT(rot, 0, 1) *= invLength; - MMAT(rot, 1, 1) *= invLength; - MMAT(rot, 2, 1) *= invLength; - - fDot = MMAT(rot, 0, 0) * TMAT(0, 2) + MMAT(rot, 1, 0) * TMAT(1, 2) + MMAT(rot, 2, 0) * TMAT(2, 2); - MMAT(rot, 0, 2) = TMAT(0, 2) - fDot * MMAT(rot, 0, 0); - MMAT(rot, 1, 2) = TMAT(1, 2) - fDot * MMAT(rot, 1, 0); - MMAT(rot, 2, 2) = TMAT(2, 2) - fDot * MMAT(rot, 2, 0); - fDot = MMAT(rot, 0, 1) * TMAT(0, 2) + MMAT(rot, 1, 1) * TMAT(1, 2) + MMAT(rot, 2, 1) * TMAT(2, 2); - MMAT(rot, 0, 2) -= fDot * MMAT(rot, 0, 1); - MMAT(rot, 1, 2) -= fDot * MMAT(rot, 1, 1); - MMAT(rot, 2, 2) -= fDot * MMAT(rot, 2, 1); - invLength = Math::InvSqrt(MMAT(rot, 0, 2) * MMAT(rot, 0, 2) + MMAT(rot, 1, 2) * MMAT(rot, 1, 2) + MMAT(rot, 2, 2) * MMAT(rot, 2, 2)); - MMAT(rot, 0, 2) *= invLength; - MMAT(rot, 1, 2) *= invLength; - MMAT(rot, 2, 2) *= invLength; - - // guarantee that orthogonal matrix has determinant 1 (no reflections) - float fDet = MMAT(rot, 0, 0) * MMAT(rot, 1, 1) * MMAT(rot, 2, 2) + MMAT(rot, 0, 1) * MMAT(rot, 1, 2) * MMAT(rot, 2, 0) + - MMAT(rot, 0, 2) * MMAT(rot, 1, 0) * MMAT(rot, 2, 1) - MMAT(rot, 0, 2) * MMAT(rot, 1, 1) * MMAT(rot, 2, 0) - - MMAT(rot, 0, 1) * MMAT(rot, 1, 0) * MMAT(rot, 2, 2) - MMAT(rot, 0, 0) * MMAT(rot, 1, 2) * MMAT(rot, 2, 1); - - if (fDet < 0.0f) - { - for (uint32 r = 0; r < 3; ++r) - { - for (uint32 c = 0; c < 3; ++c) - { - MMAT(rot, r, c) = -MMAT(rot, r, c); - } - } - } - - translation = GetTranslation(); - } - - /* - // init from pos/rot/scale/shear - void Matrix::Set(const Vector3& translation, const AZ::Quaternion& rotation, const Vector3& scale, const Vector3& shear) - { - // convert quat to matrix - const float xx=rotation.x*rotation.x; - const float xy=rotation.x*rotation.y, yy=rotation.y*rotation.y; - const float xz=rotation.x*rotation.z, yz=rotation.y*rotation.z, zz=rotation.z*rotation.z; - const float xw=rotation.x*rotation.w, yw=rotation.y*rotation.w, zw=rotation.z*rotation.w, ww=rotation.w*rotation.w; - TMAT(0,0) = +xx-yy-zz+ww; TMAT(0,1) = +xy+zw+xy+zw; TMAT(0,2) = +xz-yw+xz-yw; TMAT(0,3) = 0.0f; - TMAT(1,0) = +xy-zw+xy-zw; TMAT(1,1) = -xx+yy-zz+ww; TMAT(1,2) = +yz+xw+yz+xw; TMAT(1,3) = 0.0f; - TMAT(2,0) = +xz+yw+xz+yw; TMAT(2,1) = +yz-xw+yz-xw; TMAT(2,2) = -xx-yy+zz+ww; TMAT(2,3) = 0.0f; - TMAT(3,0) = translation.x; TMAT(3,1) = translation.y; TMAT(3,2) = translation.z; TMAT(3,3) = 1.0f; - - // scale - TMAT(0,0) *= scale.x; - TMAT(0,1) *= scale.y; - TMAT(0,2) *= scale.z; - TMAT(1,0) *= scale.x; - TMAT(1,1) *= scale.y; - TMAT(1,2) *= scale.z; - TMAT(2,0) *= scale.x; - TMAT(2,1) *= scale.y; - TMAT(2,2) *= scale.z; - - // multiply with the shear matrix - float v[3]; - v[0] = TMAT(0,0); - v[1] = TMAT(0,1); - v[2] = TMAT(0,2); - TMAT(0,1) = v[0]*shear.x + v[1]; - TMAT(0,2) = v[0]*shear.y + v[1]*shear.z + v[2]; - - v[0] = TMAT(1,0); - v[1] = TMAT(1,1); - v[2] = TMAT(1,2); - TMAT(1,1) = v[0]*shear.x + v[1]; - TMAT(1,2) = v[0]*shear.y + v[1]*shear.z + v[2]; - - v[0] = TMAT(2,0); - v[1] = TMAT(2,1); - v[2] = TMAT(2,2); - TMAT(2,1) = v[0]*shear.x + v[1]; - TMAT(2,2) = v[0]*shear.y + v[1]*shear.z + v[2]; - - // translation - TMAT(3,0) = translation.x; - TMAT(3,1) = translation.y; - TMAT(3,2) = translation.z; - TMAT(3,3) = 1.0f; - } - */ - - //------------------------------------------------------- - /* - // decompose using QR decomposition (householder) - void Matrix::DecomposeQRHouseHolder(Vector3& outTranslation, AZ::Quaternion& outRotation, Vector3& outScale, Vector3& outShear) - { - // extract translation - outTranslation = GetTranslation(); - SetTranslation( Vector3(0.0f, 0.0f, 0.0f) ); - - // decompose into the two matrices first - Matrix Q; - Matrix R; - DecomposeQRHouseHolder(Q, R); - SetTranslation( outTranslation ); - - // extract scale - outScale.Set( MMAT(R,0,0), MMAT(R,1,1), MMAT(R,2,2) ); - - // extract shear - const float invScaleX = 1.0f / outScale.x; // TODO: handle 0 scale? - outShear.x = MMAT(R, 0, 1) * invScaleX; - outShear.y = MMAT(R, 0, 2) * invScaleX; - outShear.z = MMAT(R, 1, 2) / outScale.y; - - // convert the rotation into a AZ::Quaternion - outRotation.FromMatrix( Q ); - } - - - - // decompose using QR decomposition - void Matrix::DecomposeQRHouseHolder(Vector3& outTranslation, AZ::Quaternion& outRotation, Vector3& outScale) - { - // extract translation - outTranslation = GetTranslation(); - SetTranslation( Vector3(0.0f, 0.0f, 0.0f) ); - - // decompose into the two matrices first - Matrix Q; - Matrix R; - DecomposeQRHouseHolder(Q, R); - SetTranslation( outTranslation ); - - // extract scale - outScale.Set( MMAT(R,0,0), MMAT(R,1,1), MMAT(R,2,2) ); - - // convert the rotation into a AZ::Quaternion - outRotation.FromMatrix( Q ); - } - - - // decompose using QR decomposition - void Matrix::DecomposeQRHouseHolder(Vector3& outTranslation, AZ::Quaternion& outRotation) - { - // extract translation - outTranslation = GetTranslation(); - SetTranslation( Vector3(0.0f, 0.0f, 0.0f) ); - - // decompose into the two matrices first - Matrix Q; - Matrix R; - DecomposeQRHouseHolder(Q, R); - SetTranslation( outTranslation ); - - // convert the rotation into a AZ::Quaternion - outRotation.FromMatrix( Q ); - } - - - // decompose into Q (rotation) and R (scale/shear/translation) matrices - void Matrix::DecomposeQRHouseHolder(Matrix& Q, Matrix& R) - { - float mag; - float alpha; - Vector4 u; - Vector4 v; - Matrix P; - Matrix I; - - I.Identity(); - P.Identity(); - - Q.Identity(); - R = *this; - - for (uint32 i=0; i<4; i++) - { - u.Zero(); - v.Zero(); - - mag = 0.0f; - for (uint32 j=i; j<4; ++j) - { - u[j] = MMAT(R, j, i); - mag += u[j] * u[j]; - } - - mag = Math::SafeSqrt(mag); - alpha = u[i] < 0 ? mag : -mag; - - mag = 0.0f; - for (uint32 j=i; j<4; ++j) - { - v[j] = (j == i) ? u[j] + alpha : u[j]; - mag += v[j] * v[j]; - } - - mag = Math::SafeSqrt(mag); - if (mag < Math::epsilon) - continue; - - const float invMag = 1.0f / mag; - for (uint32 j=i; j<4; j++) - v[j] *= invMag; - - //P = I - (v * v.Transpose()) * 2.0; - P = I - OuterProduct(v, v) * 2.0f; - - //R = P * R; - //Q = Q * P; - R.MultMatrix(P, R); - Q.MultMatrix(P); - } - } - //------------------------------------------------------- - */ - - // basically does (vecA * vecB.Transposed()) and results in a 4x4 matrix - Matrix Matrix::OuterProduct(const AZ::Vector4& column, const AZ::Vector4& row) - { - Matrix result; - - for (uint32 r = 0; r < 4; ++r) - { - for (uint32 c = 0; c < 4; ++c) - { - MMAT(result, r, c) = column.GetElement(r) * row.GetElement(c); - } - } - - return result; - } -} // namespace MCore diff --git a/Gems/EMotionFX/Code/MCore/Source/Matrix4.h b/Gems/EMotionFX/Code/MCore/Source/Matrix4.h deleted file mode 100644 index 5d6da79bf5..0000000000 --- a/Gems/EMotionFX/Code/MCore/Source/Matrix4.h +++ /dev/null @@ -1,917 +0,0 @@ -/* - * 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 - -// includes -#include -#include "StandardHeaders.h" -#include "Vector.h" -#include "PlaneEq.h" -#include "LogManager.h" -#include -#include -#include - -// matrix order -#define MCORE_MATRIX_ROWMAJOR - -// matrix element access -#ifdef MCORE_MATRIX_ROWMAJOR - #define MMAT(matrix, row, col) matrix.m44[row][col] - #define TMAT(row, col) m44[row][col] -#else - #define MMAT(matrix, row, col) matrix.m44[col][row] - #define TMAT(row, col) m44[col][row] -#endif - - -namespace AZ { class Quaternion; } - -namespace MCore -{ - /** - * Depracated. Please use AZ::Transform instead. - * A 4x4 matrix class. - * Matrices can for example be used to transform points or vectors. - * Transforming means moving to another coordinate system. With matrices you can do things like: translate (move), rotate and scale. - * One single matrix can store a translation, rotation and scale. If we have only a rotation inside the matrix, this means that if we - * multiply the matrix with a vector, the vector will rotate by the rotation inside the matrix! The cool thing is that you can also - * concatenate matrices. In other words, you can multiply matrices with eachother. If you have a rotation matrix, like described above, and - * also have a translation matrix, then multiplying these two matrices with eachother will result in a new matrix, which contains both the - * rotation and the translation! So when you multiply this resulting matrix with a vector, it will both translate and rotate. - * But, does it first rotate and then translate in the rotated space? Or does it first translate and then rotate? - * For example if you want to rotate a planet, while it's moving, you want to rotate it in it's local coordinate system. Like when you spin - * a globe you can have on your desk. So where it spins around it's own center. However, if the planet is at location (10,10,10) in 3D space for example - * it is also possible that rotates around the origin in world space (0,0,0). The order of multiplication between matrices matters. - * This means that (matrixA * matrixB) does not have to not result in the same as (matrixB * matrixA). - * - * Here is some information about how the matrices are stored internally: - * - * [00 01 02 03] // m16 offsets
- * [04 05 06 07]
- * [08 09 10 11]
- * [12 13 14 15]
- * - * [00 01 02 03] // m44 offsets --> [row][column]
- * [10 11 12 13]
- * [20 21 22 23]
- * [30 31 32 33]
- * - * [Xx Xy Xz 0] // right
- * [Yx Yy Yz 0] // up
- * [Zx Zy Zz 0] // forward
- * [Tx Ty Tz 1] // translation
- * - */ - class MCORE_API alignas(16) Matrix - { - public: - /** - * Default constructor. - * This leaves the matrix uninitialized. - */ - MCORE_INLINE Matrix() {} - - /** - * Init the matrix using given float data. - * The number of elements stored at the float pointer location that is used as parameter must be at least 16 floats in size. - * @param elementData A pointer to the matrix float data, which must be 16 floats in size, or more, although only the first 16 floats are used. - */ - MCORE_INLINE explicit Matrix(const float* elementData) { MCore::MemCopy(m_m16, elementData, sizeof(float) * 16); } - - /** - * Copy constructor. - * @param m The matrix to copy the data from. - */ - MCORE_INLINE Matrix(const Matrix& m); - - MCORE_INLINE Matrix(const AZ::Matrix4x4& m) - { - TMAT(0, 0) = m.GetElement(0, 0); - TMAT(0, 1) = m.GetElement(0, 1); - TMAT(0, 2) = m.GetElement(0, 2); - TMAT(0, 3) = m.GetElement(0, 3); - TMAT(1, 0) = m.GetElement(1, 0); - TMAT(1, 1) = m.GetElement(1, 1); - TMAT(1, 2) = m.GetElement(1, 2); - TMAT(1, 3) = m.GetElement(1, 3); - TMAT(2, 0) = m.GetElement(2, 0); - TMAT(2, 1) = m.GetElement(2, 1); - TMAT(2, 2) = m.GetElement(2, 2); - TMAT(2, 3) = m.GetElement(2, 3); - TMAT(3, 0) = m.GetElement(3, 0); - TMAT(3, 1) = m.GetElement(3, 1); - TMAT(3, 2) = m.GetElement(3, 2); - TMAT(3, 3) = m.GetElement(3, 3); - } - - void InitFromPosRot(const AZ::Vector3& pos, const AZ::Quaternion& rot); - void InitFromPosRotScale(const AZ::Vector3& pos, const AZ::Quaternion& rot, const AZ::Vector3& scale); - void InitFromNoScaleInherit(const AZ::Vector3& translation, const AZ::Quaternion& rotation, const AZ::Vector3& scale, const AZ::Vector3& invParentScale); - void InitFromPosRotScaleScaleRot(const AZ::Vector3& pos, const AZ::Quaternion& rot, const AZ::Vector3& scale, const AZ::Quaternion& scaleRot); - void InitFromPosRotScaleShear(const AZ::Vector3& pos, const AZ::Quaternion& rot, const AZ::Vector3& scale, const AZ::Vector3& shear); - - /** - * Sets the matrix to identity. - * When a matrix is an identity matrix it will have no influence. - */ - void Identity(); - - /** - * Makes the matrix a scaling matrix. - * Values of 1.0 would have no influence on the scale. Values of for example 2.0 would scale up by a factor of two. - * @param s The vector containing the scale values for each axis. - */ - void SetScaleMatrix(const AZ::Vector3& s); - - /** - * Makes this matrix a shear matrix from three different shear matrices: XY, XZ and YZ. - * The multiplication order is YZ * XZ * XY. - * @param s The shear values (x=XY, y=XZ, z=YZ) - */ - void SetShearMatrix(const AZ::Vector3& s); - - /** - * Makes this matrix a translation matrix. - * @param t The translation value. - */ - void SetTranslationMatrix(const AZ::Vector3& t); - - /** - * Initialize this matrix into a rotation matrix from a AZ::Quaternion. - * @param rotation The AZ::Quaternion representing the rotatation. - */ - void SetRotationMatrix(const AZ::Quaternion& rotation); - - /** - * Makes the matrix an rotation matrix along the x-axis. - * @param angle The angle to rotate around this axis, in radians. - */ - void SetRotationMatrixX(float angle); - - /** - * Makes the matrix a rotation matrix along the y-axis. - * @param angle The angle to rotate around this axis, in radians. - */ - void SetRotationMatrixY(float angle); - - /** - * Makes the matrix a rotation matrix along the z-axis. - * @param angle The angle to rotate around this axis, in radians. - */ - void SetRotationMatrixZ(float angle); - - /** - * Makes the matrix a rotation matrix around a given axis with a given angle. - * @param axis The axis to rotate around. - * @param angle The angle to rotate around this axis, in radians. - */ - void SetRotationMatrixAxisAngle(const AZ::Vector3& axis, float angle); - - /** - * Makes the matrix a rotation matrix given the euler angles. - * The multiplication order is RotMatrix(v.z) * RotMatrix(v.y) * RotMatrix(v.x). - * @param anglevec The vector containing the angles for each axis, in radians, so (pitch, yaw, roll) as (x,y,z). - */ - void SetRotationMatrixEulerZYX(const AZ::Vector3& anglevec); - - /** - * Initialize the matrix from a yaw, pitch and roll. - * Pitch is the rotation around the x-axis. - * Yaw is the rotation aroudn the y-axis. - * Roll is the rotation around the z-axis. - * All angles are in radians. - * @param pitch The pitch angle (rotation around x-axis), in radians. - * @param yaw The yaw angle (rotation around y-axis), in radians. - * @param roll The roll angle (rotation around z-axis), in radians. - */ - void SetRotationMatrixPitchYawRoll(float pitch, float yaw, float roll); - - /** - * Initialize the matrix from a yaw, pitch and roll. - * Pitch is the rotation around the x-axis. - * Yaw is the rotation aroudn the y-axis. - * Roll is the rotation around the z-axis. - * All angles are in radians. - * @param angles The angle for each axis, in radians. - */ - MCORE_INLINE void SetRotationMatrixPitchYawRoll(const AZ::Vector3& angles) { SetRotationMatrixPitchYawRoll(angles.GetX(), angles.GetY(), angles.GetZ()); } - - /** - * Makes the matrix a rotation matrix given the euler angles. - * The multiplication order is RotMatrix(v.x) * RotMatrix(v.y) * RotMatrix(v.z). - * @param anglevec The vector containing the angles for each axis, in radians, so (pitch, yaw, roll) as (x,y,z). - */ - void SetRotationMatrixEulerXYZ(const AZ::Vector3& anglevec); - - /** - * Inverse rotate a vector with this matrix. - * This means that the vector will be multiplied with the inverse rotation of this matrix. - * @param v The vector to rotate. - * @result The rotated vector. - */ - AZ::Vector3 InverseRot(const AZ::Vector3& v); - - /** - * Multiply this matrix with another matrix and stores the result in itself. - * @param right The matrix to multiply with. - */ - void MultMatrix(const Matrix& right); - - /** - * Multiply this matrix with another matrix, but only multiply the 4x3 part. - * So treat the other matrix as 4x3 matrix instead of 4x4 matrix. Stores the result in itself. - * @param right The matrix to multiply with. - */ - void MultMatrix4x3(const Matrix& right); - - /** - * Multiply two matrices together, but only the 4x3 part, and store the result in itself. - * @param left The left matrix. - * @param right The right matrix. - */ - void MultMatrix4x3(const Matrix& left, const Matrix& right); - - /** - * Multiply the left matrix with the right matrix and store the result in this matrix object. - * So basically this is a fast version of:
- *
-         * Matrix result = left * right;    // where left and right are also Matrix objects
-         * 
- * - * @param left The left matrix of the matrix multiply. - * @param right The right matrix of the matrix multiply. - */ - void MultMatrix(const Matrix& left, const Matrix& right); - - /** - * Multiply this matrix with the 3x3 rotation part of the other given matrix, and modify itself. - * @param right The matrix to multiply with. - */ - void MultMatrix3x3(const Matrix& right); - - MCORE_INLINE void Skin(const AZ::Vector3* inPos, const AZ::Vector3* inNormal, AZ::Vector3* outPos, AZ::Vector3* outNormal, float weight); - MCORE_INLINE void Skin(const AZ::Vector3* inPos, const AZ::Vector3* inNormal, const AZ::Vector4* inTangent, AZ::Vector3* outPos, AZ::Vector3* outNormal, AZ::Vector4* outTangent, float weight); - MCORE_INLINE void Skin(const AZ::Vector3* inPos, const AZ::Vector3* inNormal, const AZ::Vector4* inTangent, const AZ::Vector3* inBitangent, AZ::Vector3* outPos, AZ::Vector3* outNormal, AZ::Vector4* outTangent, AZ::Vector3* outBitangent, float weight); - - /** - * Perform skinning on an input vertex, and add the result to the output, weighted by a weight value. - * The calculation performed is: - * - *
-         * out += (in * thisMatrix) * weight;
-         * 
- * - * Only the 4x3 part of the matrix is used during the matrix multiply. - * So this should be used when skinning for example positions. - * @param in The input vector to skin. - * @param out The output vector. Keep in mind that the result will be added to the output vector. - * @param weight The weight value. - */ - MCORE_INLINE void Skin4x3(const AZ::Vector3& in, AZ::Vector3& out, float weight); - - /** - * Perform skinning on an input vertex, and add the result to the output, weighted by a weight value. - * The calculation performed is: - * - *
-         * out += (in * thisMatrix) * weight;
-         * 
- * - * Only the 3x3 part of the matrix is used during the matrix multiply. - * So this should be used to skin normals and tangents. - * @param in The input vector to skin. - * @param out The output vector. Keep in mind that the result will be added to the output vector. - * @param weight The weight value. - */ - MCORE_INLINE void Skin3x3(const AZ::Vector3& in, AZ::Vector3& out, float weight); - - /** - * Transpose the matrix (swap rows with columns). - */ - void Transpose(); - - /** - * Transpose the translation 1x3 translation part. - * Leaves the rotation in tact. - */ - void TransposeTranslation(); - - /** - * Adjoint this matrix. - */ - void Adjoint(); - - /** - * Inverse this matrix. - */ - void Inverse(); - - /** - * Makes this the inverse tranpose version of this matrix. - * The inverse transpose is the transposed version of the inverse. - */ - MCORE_INLINE void InverseTranspose(); - - /** - * Returns the inverse transposed version of this matrix. - * The inverse transpose is the transposed version of the inverse. - * @result The inverse transposed version of this matrix. - */ - MCORE_INLINE Matrix InverseTransposed() const; - - /** - * Orthonormalize this matrix (to prevent skewing or other errors). - * This normalizes the x, y and z vectors of the matrix. - * It makes sure that the axis vectors are perpendicular to eachother. - */ - void OrthoNormalize(); - - /** - * Normalizes the matrix, which means that all axis vectors (right, up, forward) - * will be made of unit length. - */ - void Normalize(); - - /** - * Returns a normalized version of this matrix. - * @result The normalized version of this matrix, where the right, up and forward vectors are of unit length. - */ - MCORE_INLINE Matrix Normalized() const; - - /** - * Scale this matrix. - * @param scale The scale factors for each axis. - */ - MCORE_INLINE void Scale(const AZ::Vector3& scale); - - /** - * Scale only the upper left 3x3 part of this matrix. - * So this doesn't scale the translation part. - * @param scale The scale factors for each axis. - */ - void Scale3x3(const AZ::Vector3& scale); - - AZ::Vector3 ExtractScale(); - - /** - * Rotate this matrix around the x-axis. - * @param angle The rotation in radians. - */ - void RotateX(float angle); - - /** - * Rotate this matrix around the y-axis. - * @param angle The rotation in radians. - */ - void RotateY(float angle); - - /** - * Rotate this matrix around the z-axis. - * @param angle The rotation in radians. - */ - void RotateZ(float angle); - - /** - * Initialize the matrix as a rotation matrix given two vectors. The resulting matrix rotates the vector 'from' such that it points - * in the same direction as the vector 'to'. - * @param from The vector that the resulting matrix rotates from. - * @param to The vector that the resulting matrix rotates to. - */ - void SetRotationMatrixTwoVectors(const AZ::Vector3& from, const AZ::Vector3& to); - - /** - * Multiply a vector with the 3x3 rotation part of this matrix. - * @param v The vector to transform. - * @result The transformed (rotated) vector. - */ - MCORE_INLINE AZ::Vector3 Mul3x3(const AZ::Vector3& v) const; - - /** - * Returns the inversed version of this matrix. - * @result The inversed version of this matrix. - */ - MCORE_INLINE Matrix Inversed() const { Matrix m(*this); m.Inverse(); return m; } - - /** - * Returns the transposed version of this matrix. - * @result The transposed version of this matrix. - */ - MCORE_INLINE Matrix Transposed() const { Matrix m(*this); m.Transpose(); return m; } - - /** - * Returns the adjointed version of this matrix. - * @result The adjointed version of this matrix. - */ - MCORE_INLINE Matrix Adjointed() const { Matrix m(*this); m.Adjoint(); return m; } - - /** - * Translate the matrix. - * @param x The number of units to add to the current translation along the x-axis. - * @param y The number of units to add to the current translation along the y-axis. - * @param z The number of units to add to the current translation along the z-axis. - */ - MCORE_INLINE void Translate(float x, float y, float z) { TMAT(3, 0) += x; TMAT(3, 1) += y; TMAT(3, 2) += z; } - - /** - * Translate the matrix. - * @param t The vector containing the translation to add to the current translation of the matrix. - */ - MCORE_INLINE void Translate(const AZ::Vector3& t) { TMAT(3, 0) += t.GetX(); TMAT(3, 1) += t.GetY(); TMAT(3, 2) += t.GetZ(); } - - /** - * Set the values for a given row, using a 3D vector. - * Only the first 3 values on the row will be touched, so the 4th value will remain untouched inside the specified row of the matrix. - * @param row A zero-based index of the row. - * @param value The values to set in the row. - */ - MCORE_INLINE void SetRow(uint32 row, const AZ::Vector3& value) { TMAT(row, 0) = value.GetX(); TMAT(row, 1) = value.GetY(); TMAT(row, 2) = value.GetZ(); } - - /** - * Set the values in the given row, using a 4D vector. - * @param row A zero-based index of the row. - * @param value The values to set in the row. - */ - MCORE_INLINE void SetRow(uint32 row, const AZ::Vector4& value) { TMAT(row, 0) = value.GetX(); TMAT(row, 1) = value.GetY(); TMAT(row, 2) = value.GetZ(); TMAT(row, 3) = value.GetW(); } - - /** - * Set the values for a given column, using a 3D vector. - * Only the first 3 values on the column will be touched, so the 4th value will remain untouched inside the specified column of the matrix. - * @param column A zero-based index of the column. - * @param value The values to set in the column. - */ - MCORE_INLINE void SetColumn(uint32 column, const AZ::Vector3& value) { TMAT(0, column) = value.GetX(); TMAT(1, column) = value.GetY(); TMAT(2, column) = value.GetZ(); } - - /** - * Set the values for a given column, using a 4D vector. - * @param column A zero-based index of the column. - * @param value The values to set in the column. - */ - MCORE_INLINE void SetColumn(uint32 column, const AZ::Vector4& value) { TMAT(0, column) = value.GetX(); TMAT(1, column) = value.GetY(); TMAT(2, column) = value.GetZ(); TMAT(3, column) = value.GetW(); } - - /** - * Get the values of a given row as 3D vector. - * @param row A zero-based index of the row number ot get. - * @result The vector containing the values of the specified row. - */ - MCORE_INLINE AZ::Vector3 GetRow(uint32 row) const { return AZ::Vector3(TMAT(row, 0), TMAT(row, 1), TMAT(row, 2)); } - - /** - * Get the values of a given row as 4D vector. - * @param column A zero-based index of the row number ot get. - * @result The vector containing the values of the specified row. - */ - MCORE_INLINE AZ::Vector3 GetColumn(uint32 column) const { return AZ::Vector3(TMAT(0, column), TMAT(1, column), TMAT(2, column)); } - - /** - * Get the values of a given column as 3D vector. - * @param row A zero-based index of the column number ot get. - * @result The vector containing the values of the specified column. - */ - MCORE_INLINE AZ::Vector4 GetRow4D(uint32 row) const { return AZ::Vector4(TMAT(row, 0), TMAT(row, 1), TMAT(row, 2), TMAT(row, 3)); } - - /** - * Get the values of a given column as 4D vector. - * @param column A zero-based index of the column number ot get. - * @result The vector containing the values of the specified column. - */ - MCORE_INLINE AZ::Vector4 GetColumn4D(uint32 column) const { return AZ::Vector4(TMAT(0, column), TMAT(1, column), TMAT(2, column), TMAT(3, column)); } - - /** - * Set the right vector (must be normalized). - * @param xx The x component of the right vector. - * @param xy The y component of the right vector. - * @param xz The z component of the right vector. - */ - MCORE_INLINE void SetRight(float xx, float xy, float xz); - - /** - * Set the right vector. - * @param x The right vector, must be normalized. - */ - MCORE_INLINE void SetRight(const AZ::Vector3& x); - - /** - * Set the up vector (must be normalized). - * @param yx The x component of the up vector. - * @param yy The y component of the up vector. - * @param yz The z component of the up vector. - */ - MCORE_INLINE void SetUp(float yx, float yy, float yz); - - /** - * Set the up vector (must be normalized). - * @param y The up vector. - */ - MCORE_INLINE void SetUp(const AZ::Vector3& y); - - /** - * Set the forward vector (must be normalized). - * @param zx The x component of the forward vector. - * @param zy The y component of the forward vector. - * @param zz The z component of the forward vector. - */ - MCORE_INLINE void SetForward(float zx, float zy, float zz); - - /** - * Set the forward vector (must be normalized). - * @param z The forward vector. - */ - MCORE_INLINE void SetForward(const AZ::Vector3& z); - - /** - * Set the translation part of the matrix. - * @param tx The translation along the x-axis. - * @param ty The translation along the y-axis. - * @param tz The translation along the z-axis. - */ - MCORE_INLINE void SetTranslation(float tx, float ty, float tz); - - /** - * Set the translation part of the matrix. - * @param t The translation vector. - */ - MCORE_INLINE void SetTranslation(const AZ::Vector3& t); - - /** - * Get the right vector. - * @result The right vector (x-axis). - */ - MCORE_INLINE AZ::Vector3 GetRight() const; - - /** - * Get the up vector. - * @result The up vector (z-axis). - */ - MCORE_INLINE AZ::Vector3 GetUp() const; - - /** - * Get the forward vector. - * @result The forward vector (y-axis). - */ - MCORE_INLINE AZ::Vector3 GetForward() const; - - /** - * Get the translation part of the matrix. - * @result The vector containing the translation. - */ - MCORE_INLINE AZ::Vector3 GetTranslation() const; - - /** - * Calculates the determinant of the matrix. - * @result The determinant. - */ - float CalcDeterminant() const; - - /** - * Calculates the euler angles. - * @result The euler angles, describing the rotation along each axis, in radians. - */ - AZ::Vector3 CalcEulerAngles() const; - - /** - * Calculate the pitch, yaw and roll. - * Pitch is the rotation around the x axis. - * Yaw is the rotation around the y axis. - * Roll is the rotation around the z axis. - * All angles returned are in radians. - * @result The vector containing the rotation around each axis (x=pitch, y=yaw, z=roll). - */ - AZ::Vector3 CalcPitchYawRoll() const; - - /** - * Makes this matrix a mirrored version of a specified matrix. - * After executing this operation this matrix is the mirrored version of the specified matrix. - * @param transform The transformation matrix to mirror (so the original matrix). - * @param plane The plane to use as mirror. - */ - void Mirror(const Matrix& transform, const PlaneEq& plane); - - /** - * Makes this matrix a lookat matrix (also known as camera or view matrix). - * @param view The view position, so the position of the camera. - * @param target The target position, so where the camera is looking at. - * @param up The up vector, describing the roll of the camera, where (0,1,0) would mean the camera is straight up and has no roll and - * where (0,-1,0) would mean the camera is upside down, etc. - */ - void LookAt(const AZ::Vector3& view, const AZ::Vector3& target, const AZ::Vector3& up); - - /** - * Makes this matrix a lookat matrix (also known as camera or view matrix), in right handed mode. - * @param view The view position, so the position of the camera. - * @param target The target position, so where the camera is looking at. - * @param up The up vector, describing the roll of the camera, where (0,1,0) would mean the camera is straight up and has no roll and - * where (0,-1,0) would mean the camera is upside down, etc. - */ - void LookAtRH(const AZ::Vector3& view, const AZ::Vector3& target, const AZ::Vector3& up); - - /** - * Makes this matrix a perspective projection matrix. - * @param fov The field of view, in radians. - * @param aspect The aspect ratio which is the width divided by height. - * @param zNear The distance to the near plane. - * @param zFar The distance to the far plane. - */ - void Perspective(float fov, float aspect, float zNear, float zFar); - - /** - * Makes this matrix a perspective projection matrix, in right handed mode. - * @param fov The field of view, in radians. - * @param aspect The aspect ratio which is the width divided by height. - * @param zNear The distance to the near plane. - * @param zFar The distance to the far plane. - */ - void PerspectiveRH(float fov, float aspect, float zNear, float zFar); - - /** - * Makes this matrix an ortho projection matrix, so without perspective. - * @param left The left of the image plane. - * @param right The right of the image plane. - * @param top The top of the image plane. - * @param bottom The bottom of the image plane. - * @param znear The distance to the near plane. - * @param zfar The distance to the far plane. - */ - void Ortho(float left, float right, float top, float bottom, float znear, float zfar); - - /** - * Makes this matrix an ortho projection matrix, so without perspective. - * @param left The left of the image plane. - * @param right The right of the image plane. - * @param top The top of the image plane. - * @param bottom The bottom of the image plane. - * @param znear The distance to the near plane. - * @param zfar The distance to the far plane. - */ - void OrthoRH(float left, float right, float top, float bottom, float znear, float zfar); - - /** - * Makes this matrix an ortho projection matrix, so without perspective. - * @param left The left of the image plane. - * @param right The right of the image plane. - * @param top The top of the image plane. - * @param bottom The bottom of the image plane. - * @param znear The distance to the near plane. - * @param zfar The distance to the far plane. - */ - void OrthoOffCenter(float left, float right, float top, float bottom, float znear, float zfar); - - /** - * Makes this matrix an ortho projection matrix, so without perspective. - * @param left The left of the image plane. - * @param right The right of the image plane. - * @param top The top of the image plane. - * @param bottom The bottom of the image plane. - * @param znear The distance to the near plane. - * @param zfar The distance to the far plane. - */ - void OrthoOffCenterRH(float left, float right, float top, float bottom, float znear, float zfar); - - /** - * Makes this matrix a frustum matrix. - * @param left The left of the image plane. - * @param right The right of the image plane. - * @param top The top of the image plane. - * @param bottom The bottom of the image plane. - * @param znear The distance to the near plane. - * @param zfar The distance to the far plane. - */ - void Frustum(float left, float right, float top, float bottom, float znear, float zfar); - - - // QR Gram-Schmidt decomposition - void DecomposeQRGramSchmidt(AZ::Vector3& translation, Matrix& rot) const; - void DecomposeQRGramSchmidt(AZ::Vector3& translation, Matrix& rot, AZ::Vector3& scale) const; - void DecomposeQRGramSchmidt(AZ::Vector3& translation, Matrix& rot, AZ::Vector3& scale, AZ::Vector3& shear) const; - - static Matrix OuterProduct(const AZ::Vector4& column, const AZ::Vector4& row); - - /** - * Get the handedness of the matrix, which described if the matrix is left- or right-handed. - * The value returned by this method is the dot product between the forward vector and the result of the - * cross product between the right and up vector. So: DotProduct( Cross(right, up), forward ); - * If the value returned by this method is positive we are dealing with a matrix which is in a right-handed - * coordinate system, otherwise we are dealing with a left-handed coordinate system. - * Performing an odd number of reflections reverses the handedness. An even number of reflections is always - * equivalent to a rotation, so any series of reflections can always be regarded as a single rotation followed - * by at most one reflection. - * If a reflection is present (think of a mirror) the handedness will be reversed. A reflection can be detected - * by looking at the determinant of the matrix. If the determinant is negative, then a reflection is present. - * @result The handedness of the matrix. If this value is positive we are dealing with a matrix in a right handed - * coordinate system. Otherwise we are dealing with one in a left-handed coordinate system. - * @see IsRightHanded() - * @see IsLeftHanded() - */ - float CalcHandedness() const; - - /** - * Check if this matrix is symmetric or not. - * A materix is said to be symmetric if and only if M(i, j) = M(j, i). - * That is, a matrix whose entries are symmetric about the main diagonal. - * @param tolerance The maximum difference tolerance between the M(i, j) and M(j, i) entries. - * The reason for having this tolerance is of course floating point inaccuracy which might have - * caused some entries to be a bit different. - * @result Returns true when the matrix is symmetric, or false when not. - */ - bool CheckIfIsSymmetric(float tolerance = 0.00001f) const; - - /** - * Check if this matrix is a diagonal matrix or not. - * A matrix is said to be a diagonal matrix when only the entries on the diagonal contain non-zero values. - * The tolerance value is needed because of possible floating point inaccuracies. - * @param tolerance The maximum difference between 0 and the entry on the diagonal. - * @result Returns true when the matrix is a diagonal matrix, otherwise false is returned. - */ - bool CheckIfIsDiagonal(float tolerance = 0.00001f) const; - - /** - * Check if the matrix is orthogonal or not. - * A matrix is orthogonal if the vectors in the matrix form an orthonormal set. - * This is when the vectors (right, up and forward) are perpendicular to eachother. - * If a matrix is orthogonal, the inverse of the matrix is equal to the transpose of the matrix. - * This assumption can be used to optimize specific calculations, since the inverse is slower to calculate than - * the transpose of the matrix. Also it can speed up by transforming normals with the matrix. - * In that example instead of having to use the inverse transpose matrix, you could just use the transpose of the matrix. - * @param tolerance The maximum tolerance in the orthonormal test. - * @result Returns true when the matrix is orthogonal, otherwise false is returned. - */ - bool CheckIfIsOrthogonal(float tolerance = 0.00001f) const; - - /** - * Check if the matrix is an identity matrix or not. - * @param tolerance The maximum error value per entry in the matrix. - * @result Returns true if this matrix is an identity matrix, otherwise false is returned. - */ - bool CheckIfIsIdentity(float tolerance = 0.00001f) const; - - /** - * Check if the matrix is left handed or not. - * @result Returns true when the matrix is left handed, otherwise false is returned (so then it is right handed). - */ - bool CheckIfIsLeftHanded() const; - - /** - * Check if the matrix is right handed or not. - * @result Returns true when the matrix is right handed, otherwise false is returned (so then it is left handed). - */ - bool CheckIfIsRightHanded() const; - - /** - * Check if this matrix is a pure rotation matrix or not. - * @param tolerance The maximum error in the measurement. - * @result Returns true when the matrix represents only a rotation, otherwise false is returned. - */ - bool CheckIfIsPureRotationMatrix(float tolerance = 0.00001f) const; - - /** - * Check if this matrix contains a reflection or not. - * @result Returns true when the matrix represents a reflection, otherwise false is returned. - */ - bool CheckIfIsReflective() const; - - AZ::Matrix4x4 ToAzMatrix() const - { -#ifdef MCORE_MATRIX_ROWMAJOR - return AZ::Matrix4x4::CreateFromRowMajorFloat16(m_m16); -#else - return AZ::Matrix4x4::CreateFromColumnMajorFloat16(m16); -#endif - } - - /** - * Prints the matrix into the logfile or debug output, using MCore::LogDetailedInfo(). - * Please note that the values are printed using floats or doubles. So it is not possible - * to use this method for printing matrices of vectors or something other than real numbers. - */ - void Log() const; - - /** - * Returns a translation matrix. - * @param v The translation of the matrix. - * @result The translation matrix having the specified translation. - */ - static MCORE_INLINE Matrix TranslationMatrix(const AZ::Vector3& v) { Matrix m; m.SetTranslationMatrix(v); return m; } - - /** - * Returns a rotation matrix from a AZ::Quaternion. - * @param rot The AZ::Quaternion that represents the rotation. - * @result A rotation matrix. - */ - static MCORE_INLINE Matrix RotationMatrix(const AZ::Quaternion& rot) { Matrix m; m.SetRotationMatrix(rot); return m; } - - /** - * Returns a rotation matrix, including a translation, where the rotation is represented by a AZ::Quaternion. - * @param rot The AZ::Quaternion that represents the rotation. - * @param trans The translation of the matrix. - * @result The rotation matrix, that includes a translation as well. - */ - static MCORE_INLINE Matrix RotationTranslationMatrix(const AZ::Quaternion& rot, const AZ::Vector3& trans) { Matrix m; m.InitFromPosRot(trans, rot); return m; } - - /** - * Returns a rotation matrix along the x-axis. - * @param rad The angle of rotation, in radians. - * @result A rotation matrix. - */ - static MCORE_INLINE Matrix RotationMatrixX(float rad) { Matrix m; m.SetRotationMatrixX(rad); return m; } - - /** - * Returns a rotation matrix along the y-axis. - * @param rad The angle of rotation, in radians. - * @result A rotation matrix. - */ - static MCORE_INLINE Matrix RotationMatrixY(float rad) { Matrix m; m.SetRotationMatrixY(rad); return m; } - - /** - * Returns a rotation matrix along the z-axis. - * @param rad The angle of rotation, in radians. - * @result A rotation matrix. - */ - static MCORE_INLINE Matrix RotationMatrixZ(float rad) { Matrix m; m.SetRotationMatrixZ(rad); return m; } - - /** - * Returns a rotation matrix along the x, y and z-axis. - * The multiplication order is RotMatrix(v.x) * RotMatrix(v.y) * RotMatrix(v.z). - * @param eulerAngles The euler angles in radians. - * @result A rotation matrix. - */ - static MCORE_INLINE Matrix RotationMatrixEulerXYZ(const AZ::Vector3& eulerAngles) { Matrix m; m.SetRotationMatrixEulerXYZ(eulerAngles); return m; } - - /** - * Returns a rotation matrix along the x, y and z-axis. - * The multiplication order is RotMatrix(v.z) * RotMatrix(v.y) * RotMatrix(v.x). - * @param eulerAngles The euler angles in radians. - * @result A rotation matrix. - */ - static MCORE_INLINE Matrix RotationMatrixEulerZYX(const AZ::Vector3& eulerAngles) { Matrix m; m.SetRotationMatrixEulerZYX(eulerAngles); return m; } - - /** - * Returns a rotation matrix given a pitch, yaw and roll. - * Pitch is the rotation around the x-axis. - * Yaw is the rotation aroudn the y-axis. - * Roll is the rotation around the z-axis. - * @param angles The rotation angles for each axis, in radians. - * @result A rotation matrix. - */ - static MCORE_INLINE Matrix RotationMatrixPitchYawRoll(const AZ::Vector3& angles) { Matrix m; m.SetRotationMatrixPitchYawRoll(angles); return m; } - - /** - * Constructs a rotation matrix given two vectors. The resulting matrix rotates the vector 'from' such that it points - * in the same direction as the vector 'to'. - * @param from The vector that the resulting matrix rotates to. - * @param to The vector that the resulting matrix rotates from. - * @result The rotation matrix that rotates the vector 'from' into the vector 'to'. - */ - static MCORE_INLINE Matrix RotationMatrixTwoVectors(const AZ::Vector3& from, const AZ::Vector3& to) { Matrix m; m.SetRotationMatrixTwoVectors(from, to); return m; } - - /** - * Returns a rotation matrix from a given axis and angle. - * @param axis The axis to rotate around. - * @param angle The angle of rotation, in radians. - * @result A rotation matrix. - */ - static MCORE_INLINE Matrix RotationMatrixAxisAngle(const AZ::Vector3& axis, float angle) { Matrix m; m.SetRotationMatrixAxisAngle(axis, angle); return m; } - - /** - * Returns a scale matrix from a given scaling factor. - * @param s The vector containing the scaling factors for each axis. - * @result A scaling matrix. - */ - static MCORE_INLINE Matrix ScaleMatrix(const AZ::Vector3& s) { Matrix m; m.SetScaleMatrix(s); return m; } - - /** - * Returns a shear matrix created from three different shear matrices: XY, XZ and YZ. - * The multiplication order is YZ * XZ * XY. - * @param s The shear values (x=XY, y=XZ, z=YZ) - * @result The shear matrix. - */ - static MCORE_INLINE Matrix ShearMatrix(const AZ::Vector3& s) { Matrix m; m.SetShearMatrix(s); return m; } - - // operators - Matrix operator + (const Matrix& right) const; - Matrix operator - (const Matrix& right) const; - Matrix operator * (const Matrix& right) const; - Matrix operator * (float value) const; - Matrix& operator += (const Matrix& right); - Matrix& operator -= (const Matrix& right); - Matrix& operator *= (const Matrix& right); - Matrix& operator *= (float value); - MCORE_INLINE void operator = (const Matrix& right); - - // attributes - union - { - float m_m16[16]; // 16 floats as 1D array - float m44[4][4]; // as 2D array - }; - }; - - - // include inline code -#include "Matrix4.inl" -} // namespace MCore diff --git a/Gems/EMotionFX/Code/MCore/Source/Matrix4.inl b/Gems/EMotionFX/Code/MCore/Source/Matrix4.inl deleted file mode 100644 index 99900abcee..0000000000 --- a/Gems/EMotionFX/Code/MCore/Source/Matrix4.inl +++ /dev/null @@ -1,330 +0,0 @@ -/* - * 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 - * - */ - -MCORE_INLINE Matrix::Matrix(const Matrix& m) -{ - MCore::MemCopy(m_m16, m.m_m16, sizeof(Matrix)); -} - - -MCORE_INLINE void Matrix::operator = (const Matrix& right) -{ - MCore::MemCopy(m_m16, right.m_m16, sizeof(Matrix)); -} - - - -MCORE_INLINE void Matrix::SetRight(float xx, float xy, float xz) -{ - TMAT(0, 0) = xx; - TMAT(0, 1) = xy; - TMAT(0, 2) = xz; -} - - - -MCORE_INLINE void Matrix::SetUp(float yx, float yy, float yz) -{ - TMAT(1, 0) = yx; - TMAT(1, 1) = yy; - TMAT(1, 2) = yz; -} - - - -MCORE_INLINE void Matrix::SetForward(float zx, float zy, float zz) -{ - TMAT(2, 0) = zx; - TMAT(2, 1) = zy; - TMAT(2, 2) = zz; -} - - - -MCORE_INLINE void Matrix::SetTranslation(float tx, float ty, float tz) -{ - TMAT(3, 0) = tx; - TMAT(3, 1) = ty; - TMAT(3, 2) = tz; -} - - - -MCORE_INLINE void Matrix::SetRight(const AZ::Vector3& x) -{ - TMAT(0, 0) = x.GetX(); - TMAT(0, 1) = x.GetY(); - TMAT(0, 2) = x.GetZ(); -} - - - -MCORE_INLINE void Matrix::SetUp(const AZ::Vector3& y) -{ - TMAT(1, 0) = y.GetX(); - TMAT(1, 1) = y.GetY(); - TMAT(1, 2) = y.GetZ(); -} - - - -MCORE_INLINE void Matrix::SetForward(const AZ::Vector3& z) -{ - TMAT(2, 0) = z.GetX(); - TMAT(2, 1) = z.GetY(); - TMAT(2, 2) = z.GetZ(); -} - - - -MCORE_INLINE void Matrix::SetTranslation(const AZ::Vector3& t) -{ - TMAT(3, 0) = t.GetX(); - TMAT(3, 1) = t.GetY(); - TMAT(3, 2) = t.GetZ(); -} - - - -MCORE_INLINE AZ::Vector3 Matrix::GetRight() const -{ - //return *reinterpret_cast( m16/* + 0*/); - return AZ::Vector3(TMAT(0, 0), TMAT(0, 1), TMAT(0, 2)); -} - - - -MCORE_INLINE AZ::Vector3 Matrix::GetForward() const -{ - // return *reinterpret_cast(m16+4); - return AZ::Vector3(TMAT(1, 0), TMAT(1, 1), TMAT(1, 2)); -} - - - -MCORE_INLINE AZ::Vector3 Matrix::GetUp() const -{ - // return *reinterpret_cast(m16+8); - return AZ::Vector3(TMAT(2, 0), TMAT(2, 1), TMAT(2, 2)); -} - - - -MCORE_INLINE AZ::Vector3 Matrix::GetTranslation() const -{ - //return *reinterpret_cast(m16+12); - return AZ::Vector3(TMAT(3, 0), TMAT(3, 1), TMAT(3, 2)); -} - - - -MCORE_INLINE AZ::Vector3 Matrix::Mul3x3(const AZ::Vector3& v) const -{ - return AZ::Vector3( - v.GetX() * TMAT(0, 0) + v.GetY() * TMAT(1, 0) + v.GetZ() * TMAT(2, 0), - v.GetX() * TMAT(0, 1) + v.GetY() * TMAT(1, 1) + v.GetZ() * TMAT(2, 1), - v.GetX() * TMAT(0, 2) + v.GetY() * TMAT(1, 2) + v.GetZ() * TMAT(2, 2)); -} - - - -MCORE_INLINE void operator *= (AZ::Vector3& v, const Matrix& m) -{ - v = AZ::Vector3( - v.GetX() * MMAT(m, 0, 0) + v.GetY() * MMAT(m, 1, 0) + v.GetZ() * MMAT(m, 2, 0) + MMAT(m, 3, 0), - v.GetX() * MMAT(m, 0, 1) + v.GetY() * MMAT(m, 1, 1) + v.GetZ() * MMAT(m, 2, 1) + MMAT(m, 3, 1), - v.GetX() * MMAT(m, 0, 2) + v.GetY() * MMAT(m, 1, 2) + v.GetZ() * MMAT(m, 2, 2) + MMAT(m, 3, 2)); -} - - - -MCORE_INLINE void operator *= (AZ::Vector4& v, const Matrix& m) -{ - v = AZ::Vector4( - v.GetX() * MMAT(m, 0, 0) + v.GetY() * MMAT(m, 1, 0) + v.GetZ() * MMAT(m, 2, 0) + v.GetW() * MMAT(m, 3, 0), - v.GetX() * MMAT(m, 0, 1) + v.GetY() * MMAT(m, 1, 1) + v.GetZ() * MMAT(m, 2, 1) + v.GetW() * MMAT(m, 3, 1), - v.GetX() * MMAT(m, 0, 2) + v.GetY() * MMAT(m, 1, 2) + v.GetZ() * MMAT(m, 2, 2) + v.GetW() * MMAT(m, 3, 2), - v.GetX() * MMAT(m, 0, 3) + v.GetY() * MMAT(m, 1, 3) + v.GetZ() * MMAT(m, 2, 3) + v.GetW() * MMAT(m, 3, 3)); -} - - - -MCORE_INLINE AZ::Vector3 operator * (const AZ::Vector3& v, const Matrix& m) -{ - return AZ::Vector3( - v.GetX() * MMAT(m, 0, 0) + v.GetY() * MMAT(m, 1, 0) + v.GetZ() * MMAT(m, 2, 0) + MMAT(m, 3, 0), - v.GetX() * MMAT(m, 0, 1) + v.GetY() * MMAT(m, 1, 1) + v.GetZ() * MMAT(m, 2, 1) + MMAT(m, 3, 1), - v.GetX() * MMAT(m, 0, 2) + v.GetY() * MMAT(m, 1, 2) + v.GetZ() * MMAT(m, 2, 2) + MMAT(m, 3, 2)); -} - - - - -// skin a vertex position -MCORE_INLINE void Matrix::Skin4x3(const AZ::Vector3& in, AZ::Vector3& out, float weight) -{ - out.Set( - out.GetX() + (in.GetX() * TMAT(0, 0) + in.GetY() * TMAT(1, 0) + in.GetZ() * TMAT(2, 0) + TMAT(3, 0)) * weight, - out.GetY() + (in.GetX() * TMAT(0, 1) + in.GetY() * TMAT(1, 1) + in.GetZ() * TMAT(2, 1) + TMAT(3, 1)) * weight, - out.GetZ() + (in.GetX() * TMAT(0, 2) + in.GetY() * TMAT(1, 2) + in.GetZ() * TMAT(2, 2) + TMAT(3, 2)) * weight - ); -} - - -// skin a position and normal -MCORE_INLINE void Matrix::Skin(const AZ::Vector3* inPos, const AZ::Vector3* inNormal, AZ::Vector3* outPos, AZ::Vector3* outNormal, float weight) -{ - const float mat00 = TMAT(0, 0); - const float mat10 = TMAT(1, 0); - const float mat20 = TMAT(2, 0); - const float mat30 = TMAT(3, 0); - const float mat01 = TMAT(0, 1); - const float mat11 = TMAT(1, 1); - const float mat21 = TMAT(2, 1); - const float mat31 = TMAT(3, 1); - const float mat02 = TMAT(0, 2); - const float mat12 = TMAT(1, 2); - const float mat22 = TMAT(2, 2); - const float mat32 = TMAT(3, 2); - - outPos->Set( - outPos->GetX() + (inPos->GetX() * mat00 + inPos->GetY() * mat10 + inPos->GetZ() * mat20 + mat30) * weight, - outPos->GetY() + (inPos->GetX() * mat01 + inPos->GetY() * mat11 + inPos->GetZ() * mat21 + mat31) * weight, - outPos->GetZ() + (inPos->GetX() * mat02 + inPos->GetY() * mat12 + inPos->GetZ() * mat22 + mat32) * weight - ); - - outNormal->Set( - outNormal->GetX() + (inNormal->GetX() * mat00 + inNormal->GetY() * mat10 + inNormal->GetZ() * mat20) * weight, - outNormal->GetY() + (inNormal->GetX() * mat01 + inNormal->GetY() * mat11 + inNormal->GetZ() * mat21) * weight, - outNormal->GetZ() + (inNormal->GetX() * mat02 + inNormal->GetY() * mat12 + inNormal->GetZ() * mat22) * weight - ); -} - - -// skin a position, normal, and tangent -MCORE_INLINE void Matrix::Skin(const AZ::Vector3* inPos, const AZ::Vector3* inNormal, const AZ::Vector4* inTangent, AZ::Vector3* outPos, AZ::Vector3* outNormal, AZ::Vector4* outTangent, float weight) -{ - const float mat00 = TMAT(0, 0); - const float mat10 = TMAT(1, 0); - const float mat20 = TMAT(2, 0); - const float mat30 = TMAT(3, 0); - const float mat01 = TMAT(0, 1); - const float mat11 = TMAT(1, 1); - const float mat21 = TMAT(2, 1); - const float mat31 = TMAT(3, 1); - const float mat02 = TMAT(0, 2); - const float mat12 = TMAT(1, 2); - const float mat22 = TMAT(2, 2); - const float mat32 = TMAT(3, 2); - - outPos->Set( - outPos->GetX() + (inPos->GetX() * mat00 + inPos->GetY() * mat10 + inPos->GetZ() * mat20 + mat30) * weight, - outPos->GetY() + (inPos->GetX() * mat01 + inPos->GetY() * mat11 + inPos->GetZ() * mat21 + mat31) * weight, - outPos->GetZ() + (inPos->GetX() * mat02 + inPos->GetY() * mat12 + inPos->GetZ() * mat22 + mat32) * weight - ); - - outNormal->Set( - outNormal->GetX() + (inNormal->GetX() * mat00 + inNormal->GetY() * mat10 + inNormal->GetZ() * mat20) * weight, - outNormal->GetY() + (inNormal->GetX() * mat01 + inNormal->GetY() * mat11 + inNormal->GetZ() * mat21) * weight, - outNormal->GetZ() + (inNormal->GetX() * mat02 + inNormal->GetY() * mat12 + inNormal->GetZ() * mat22) * weight - ); - - outTangent->Set( - outTangent->GetX() + (inTangent->GetX() * mat00 + inTangent->GetY() * mat10 + inTangent->GetZ() * mat20) * weight, - outTangent->GetY() + (inTangent->GetX() * mat01 + inTangent->GetY() * mat11 + inTangent->GetZ() * mat21) * weight, - outTangent->GetZ() + (inTangent->GetX() * mat02 + inTangent->GetY() * mat12 + inTangent->GetZ() * mat22) * weight, - inTangent->GetW() - ); -} - -// skin a position, normal, and tangent and bitangent -MCORE_INLINE void Matrix::Skin(const AZ::Vector3* inPos, const AZ::Vector3* inNormal, const AZ::Vector4* inTangent, const AZ::Vector3* inBitangent, AZ::Vector3* outPos, AZ::Vector3* outNormal, AZ::Vector4* outTangent, AZ::Vector3* outBitangent, float weight) -{ - const float mat00 = TMAT(0, 0); - const float mat10 = TMAT(1, 0); - const float mat20 = TMAT(2, 0); - const float mat30 = TMAT(3, 0); - const float mat01 = TMAT(0, 1); - const float mat11 = TMAT(1, 1); - const float mat21 = TMAT(2, 1); - const float mat31 = TMAT(3, 1); - const float mat02 = TMAT(0, 2); - const float mat12 = TMAT(1, 2); - const float mat22 = TMAT(2, 2); - const float mat32 = TMAT(3, 2); - - outPos->Set( - outPos->GetX() + (inPos->GetX() * mat00 + inPos->GetY() * mat10 + inPos->GetZ() * mat20 + mat30) * weight, - outPos->GetY() + (inPos->GetX() * mat01 + inPos->GetY() * mat11 + inPos->GetZ() * mat21 + mat31) * weight, - outPos->GetZ() + (inPos->GetX() * mat02 + inPos->GetY() * mat12 + inPos->GetZ() * mat22 + mat32) * weight - ); - - outNormal->Set( - outNormal->GetX() + (inNormal->GetX() * mat00 + inNormal->GetY() * mat10 + inNormal->GetZ() * mat20) * weight, - outNormal->GetY() + (inNormal->GetX() * mat01 + inNormal->GetY() * mat11 + inNormal->GetZ() * mat21) * weight, - outNormal->GetZ() + (inNormal->GetX() * mat02 + inNormal->GetY() * mat12 + inNormal->GetZ() * mat22) * weight - ); - - outTangent->Set( - outTangent->GetX() + (inTangent->GetX() * mat00 + inTangent->GetY() * mat10 + inTangent->GetZ() * mat20) * weight, - outTangent->GetY() + (inTangent->GetX() * mat01 + inTangent->GetY() * mat11 + inTangent->GetZ() * mat21) * weight, - outTangent->GetZ() + (inTangent->GetX() * mat02 + inTangent->GetY() * mat12 + inTangent->GetZ() * mat22) * weight, - inTangent->GetW() - ); - - outBitangent->Set( - outBitangent->GetX() + (inBitangent->GetX() * mat00 + inBitangent->GetY() * mat10 + inBitangent->GetZ() * mat20) * weight, - outBitangent->GetY() + (inBitangent->GetX() * mat01 + inBitangent->GetY() * mat11 + inBitangent->GetZ() * mat21) * weight, - outBitangent->GetZ() + (inBitangent->GetX() * mat02 + inBitangent->GetY() * mat12 + inBitangent->GetZ() * mat22) * weight - ); -} - - -// skin a normal -MCORE_INLINE void Matrix::Skin3x3(const AZ::Vector3& in, AZ::Vector3& out, float weight) -{ - out.Set( - out.GetX() + (in.GetX() * TMAT(0, 0) + in.GetY() * TMAT(1, 0) + in.GetZ() * TMAT(2, 0)) * weight, - out.GetY() + (in.GetX() * TMAT(0, 1) + in.GetY() * TMAT(1, 1) + in.GetZ() * TMAT(2, 1)) * weight, - out.GetZ() + (in.GetX() * TMAT(0, 2) + in.GetY() * TMAT(1, 2) + in.GetZ() * TMAT(2, 2)) * weight - ); -} - - -// multiply by a float -MCORE_INLINE Matrix& Matrix::operator *= (float value) -{ - for (uint32 i = 0; i < 16; ++i) - { - m_m16[i] *= value; - } - - return *this; -} - - -// scale (uniform) -MCORE_INLINE void Matrix::Scale(const AZ::Vector3& scale) -{ - for (uint32 i = 0; i < 4; ++i) - { - TMAT(i, 0) *= scale.GetX(); - TMAT(i, 1) *= scale.GetY(); - TMAT(i, 2) *= scale.GetZ(); - } -} - - -// returns a normalized version of this matrix -Matrix Matrix::Normalized() const -{ - Matrix result(*this); - result.Normalize(); - return result; -} - diff --git a/Gems/EMotionFX/Code/MCore/mcore_files.cmake b/Gems/EMotionFX/Code/MCore/mcore_files.cmake index d33041eaf8..c1203cb72e 100644 --- a/Gems/EMotionFX/Code/MCore/mcore_files.cmake +++ b/Gems/EMotionFX/Code/MCore/mcore_files.cmake @@ -79,9 +79,6 @@ set(FILES Source/LogManager.cpp Source/LogManager.h Source/Macros.h - Source/Matrix4.cpp - Source/Matrix4.h - Source/Matrix4.inl Source/MCoreSystem.cpp Source/MCoreSystem.h Source/MemoryCategoriesCore.h diff --git a/Gems/EMotionFX/Code/Tests/Matchers.h b/Gems/EMotionFX/Code/Tests/Matchers.h index 9f7b9017ba..61370aafa0 100644 --- a/Gems/EMotionFX/Code/Tests/Matchers.h +++ b/Gems/EMotionFX/Code/Tests/Matchers.h @@ -14,7 +14,6 @@ #include #include #include -#include #include #include @@ -89,27 +88,3 @@ inline bool IsCloseMatcherP::gmock_Impl -template<> -inline bool IsCloseMatcherP::gmock_Impl::MatchAndExplain(const MCore::Matrix& arg, ::testing::MatchResultListener* result_listener) const -{ - using ::testing::FloatEq; - using ::testing::ExplainMatchResult; - return ExplainMatchResult(FloatEq(expected.m_m16[0]), arg.m_m16[0], result_listener) - && ExplainMatchResult(FloatEq(expected.m_m16[1]), arg.m_m16[1], result_listener) - && ExplainMatchResult(FloatEq(expected.m_m16[2]), arg.m_m16[2], result_listener) - && ExplainMatchResult(FloatEq(expected.m_m16[3]), arg.m_m16[3], result_listener) - && ExplainMatchResult(FloatEq(expected.m_m16[4]), arg.m_m16[4], result_listener) - && ExplainMatchResult(FloatEq(expected.m_m16[5]), arg.m_m16[5], result_listener) - && ExplainMatchResult(FloatEq(expected.m_m16[6]), arg.m_m16[6], result_listener) - && ExplainMatchResult(FloatEq(expected.m_m16[7]), arg.m_m16[7], result_listener) - && ExplainMatchResult(FloatEq(expected.m_m16[8]), arg.m_m16[8], result_listener) - && ExplainMatchResult(FloatEq(expected.m_m16[9]), arg.m_m16[9], result_listener) - && ExplainMatchResult(FloatEq(expected.m_m16[10]), arg.m_m16[10], result_listener) - && ExplainMatchResult(FloatEq(expected.m_m16[11]), arg.m_m16[11], result_listener) - && ExplainMatchResult(FloatEq(expected.m_m16[12]), arg.m_m16[12], result_listener) - && ExplainMatchResult(FloatEq(expected.m_m16[13]), arg.m_m16[13], result_listener) - && ExplainMatchResult(FloatEq(expected.m_m16[14]), arg.m_m16[14], result_listener) - && ExplainMatchResult(FloatEq(expected.m_m16[15]), arg.m_m16[15], result_listener); -} diff --git a/Gems/EMotionFX/Code/Tests/TransformUnitTests.cpp b/Gems/EMotionFX/Code/Tests/TransformUnitTests.cpp index b5f98bc5e8..bc63f6f9bd 100644 --- a/Gems/EMotionFX/Code/Tests/TransformUnitTests.cpp +++ b/Gems/EMotionFX/Code/Tests/TransformUnitTests.cpp @@ -17,7 +17,6 @@ #include #include #include -#include #include #include From 0abbdcd4ac235d9b31b4b5e5fc527d453c070c45 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 22 Dec 2021 17:20:31 -0800 Subject: [PATCH 158/284] Removes PlaneEq.cpp/inl and TriangleListOptimizer.h from Gems/EMotionFX Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Gems/EMotionFX/Code/MCore/Source/PlaneEq.cpp | 81 ------- Gems/EMotionFX/Code/MCore/Source/PlaneEq.h | 39 --- Gems/EMotionFX/Code/MCore/Source/PlaneEq.inl | 33 --- .../Code/MCore/Source/TriangleListOptimizer.h | 223 ------------------ Gems/EMotionFX/Code/MCore/mcore_files.cmake | 3 - 5 files changed, 379 deletions(-) delete mode 100644 Gems/EMotionFX/Code/MCore/Source/PlaneEq.cpp delete mode 100644 Gems/EMotionFX/Code/MCore/Source/PlaneEq.inl delete mode 100644 Gems/EMotionFX/Code/MCore/Source/TriangleListOptimizer.h diff --git a/Gems/EMotionFX/Code/MCore/Source/PlaneEq.cpp b/Gems/EMotionFX/Code/MCore/Source/PlaneEq.cpp deleted file mode 100644 index fd64974fb1..0000000000 --- a/Gems/EMotionFX/Code/MCore/Source/PlaneEq.cpp +++ /dev/null @@ -1,81 +0,0 @@ -/* - * 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 required headers -#include "PlaneEq.h" - -namespace MCore -{ - // clip points against the plane - bool PlaneEq::Clip(const AZStd::vector& pointsIn, AZStd::vector& pointsOut) const - { - size_t numPoints = pointsIn.size(); - - MCORE_ASSERT(&pointsIn != &pointsOut); - MCORE_ASSERT(numPoints >= 2); - - size_t vert1 = numPoints - 1; - float firstDist = CalcDistanceTo(pointsIn[vert1]); - float nextDist = firstDist; - bool firstIn = (firstDist >= 0.0f); - bool nextIn = firstIn; - - pointsOut.clear(); - - if (numPoints == 2) - { - numPoints = 1; - } - - for (int32 vert2 = 0; vert2 < numPoints; vert2++) - { - float dist = nextDist; - bool in = nextIn; - - nextDist = CalcDistanceTo(pointsIn[vert2]); - nextIn = (nextDist >= 0.0f); - - if (in) - { - pointsOut.emplace_back(pointsIn[vert1]); - } - - if ((in != nextIn) && (dist != 0.0f) && (nextDist != 0.0f)) - { - AZ::Vector3 dir = (pointsIn[vert2] - pointsIn[vert1]); - - float frac = dist / (dist - nextDist); - if ((frac > 0.0f) && (frac < 1.0f)) - { - pointsOut.emplace_back(pointsIn[vert1] + frac * dir); - } - } - - vert1 = vert2; - } - - //if (numPoints == 1) - // return (pointsOut.GetLength() > 1); - - return (pointsOut.size() > 1); - } - - - // clip a set of vectors to this plane - bool PlaneEq::Clip(AZStd::vector& points) const - { - AZStd::vector pointsOut; - if (Clip(points, pointsOut)) - { - points = pointsOut; - return true; - } - - return false; - } -} // namespace MCore diff --git a/Gems/EMotionFX/Code/MCore/Source/PlaneEq.h b/Gems/EMotionFX/Code/MCore/Source/PlaneEq.h index df8738a1ee..3c8954a29a 100644 --- a/Gems/EMotionFX/Code/MCore/Source/PlaneEq.h +++ b/Gems/EMotionFX/Code/MCore/Source/PlaneEq.h @@ -147,43 +147,6 @@ namespace MCore */ MCORE_INLINE float GetDist() const { return m_dist; } - /** - * Checks if a given axis aligned bounding box (AABB) is partially above (aka in front) this plane or not. - * The Frustum class uses this method to check if a box is partially inside a the frustum or not. - * @param box The axis aligned bounding box to perform the test with. - * @result Returns true when 'box' is partially (or completely) above the plane or not. - */ - MCORE_INLINE bool PartiallyAbove(const AABB& box) const; - - /** - * Check if a given axis aligned bounding box (AABB) is completely above (aka in front) this plane or not. - * The Frustum class uses this method to check if a box is completely inside a the frustum or not. - * @param box The axis aligned bounding box to perform the test with. - * @result Returns true when 'box' is completely above the plane or not. - */ - MCORE_INLINE bool CompletelyAbove(const AABB& box) const; - - /** - * Clips a set of 3D points to this plane. - * Actually these are not just points, but edges. The edges go from point 0 to 1, from 1 to 2, etc. - * Beware that the clipped number of points can be higher as the ones you input to this method. - * This method can be used to pretty easily clip polygon data against the plane. - * @param pointsIn The array of points (and edges) to be clipped to the planes. - * @param pointsOut The array of clipped points (and edges). Note that (pointsOut.GetLength() > pointsIn.GetLength()) can be true. - * @result Returns true when the points have been clipped. False is returned when the clipping resulted in 0 output points. - */ - bool Clip(const AZStd::vector& pointsIn, AZStd::vector& pointsOut) const; - - /** - * Clip a set of 3D points to this plane. - * Actually these are not just points, but edges. The edges go from point 0 to 1, from 1 to 2, etc. - * Beware that the clipped number of points can be higher as the ones you input to this method. - * This method can be used to pretty easily clip polygon data against the plane. - * @param points The set of points (or edges) to clip. When done, points contains the clipped points. - * @result Returns true when the points have been clipped. False is returned when the clipping resulted in 0 points. In that last case 'points' won't be effected and contains just the original input points. - */ - bool Clip(AZStd::vector& points) const; - /** * Project a vector onto the plane. * @param vectorToProject The vector you wish to project onto the plane. @@ -197,6 +160,4 @@ namespace MCore float m_dist; /**< The D in the plane equation (Ax + By + Cz + D = 0). */ }; - // include the inline code -#include "PlaneEq.inl" } // namespace MCore diff --git a/Gems/EMotionFX/Code/MCore/Source/PlaneEq.inl b/Gems/EMotionFX/Code/MCore/Source/PlaneEq.inl deleted file mode 100644 index 62ccb19551..0000000000 --- a/Gems/EMotionFX/Code/MCore/Source/PlaneEq.inl +++ /dev/null @@ -1,33 +0,0 @@ -/* - * 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 - * - */ - - -// check if the box is partially above the plane -MCORE_INLINE bool PlaneEq::PartiallyAbove(const AABB& box) const -{ - const AZ::Vector3 minVec = box.GetMin(); - const AZ::Vector3 maxVec = box.GetMax(); - const AZ::Vector3 testPoint(IsNegative(float(m_normal.GetX())) ? minVec.GetX() : maxVec.GetX(), - IsNegative(static_cast(m_normal.GetY())) ? minVec.GetY() : maxVec.GetY(), - IsNegative(static_cast(m_normal.GetZ())) ? minVec.GetZ() : maxVec.GetZ()); - - return IsPositive(m_normal.Dot(testPoint) + m_dist); -} - - -// check if the box is completely above the plane -MCORE_INLINE bool PlaneEq::CompletelyAbove(const AABB& box) const -{ - const AZ::Vector3 minVec = box.GetMin(); - const AZ::Vector3 maxVec = box.GetMax(); - const AZ::Vector3 testPoint(IsPositive(m_normal.GetX()) ? minVec.GetX() : maxVec.GetX(), - IsPositive(m_normal.GetY()) ? minVec.GetY() : maxVec.GetY(), - IsPositive(m_normal.GetZ()) ? minVec.GetZ() : maxVec.GetZ()); - - return IsPositive(m_normal.Dot(testPoint) + m_dist); -} diff --git a/Gems/EMotionFX/Code/MCore/Source/TriangleListOptimizer.h b/Gems/EMotionFX/Code/MCore/Source/TriangleListOptimizer.h deleted file mode 100644 index 38e5df8de4..0000000000 --- a/Gems/EMotionFX/Code/MCore/Source/TriangleListOptimizer.h +++ /dev/null @@ -1,223 +0,0 @@ -/* - * 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 - -#include -#include - -namespace MCore -{ - /** - * The triangle list optimizer. - * This can be used to improve cache efficiency. It reorders the index buffers to maximize the number of cache hits. - */ - template - class TriangleListOptimizer - { - public: - /** - * The constructor. - * @param numCacheEntries The cache size in number of elements. Smaller values often result in better optimizations. - */ - TriangleListOptimizer(size_t numCacheEntries = 8); - - /** - * Optimizes an index buffer. - * This will modify the input triangle list index buffer. - * Each triangle needs three indices. - * @param triangleList The index buffer. - * @param numIndices The number of indices inside the specified index buffer. - */ - void OptimizeIndexBuffer(IndexType* triangleList, size_t numIndices); - - /** - * Calculate the number of cache hits that the a given triange list would get. - * Higher values will be better than lower values. - * @param triangleList The index buffer, with three indices per triangle. - * @param numIndices The number of indices. - * @result The number of cache hits. - */ - size_t CalcNumCacheHits(IndexType* triangleList, size_t numIndices); - - private: - AZStd::vector m_entries{}; - size_t m_numUsedEntries = 0; /**< The number of used cache entries. */ - size_t m_oldestEntry = 0; /**< The index to the oldest entry, which will be overwritten first when the cache is full. */ - - void Flush(); - - /** - * Calculate the number of cache hits for a given triangle. - * @param indexA The first vertex index. - * @param indexB The second vertex index. - * @param indexC The third vertex index. - * @result The number of cache hits that this triangle would give. - */ - size_t CalcNumCacheHits(IndexType indexA, IndexType indexB, IndexType indexC) const; - - /** - * Add an index value to the cache. - * @param vertexIndex The vertex index value. - */ - void AddToCache(IndexType vertexIndex); - }; - - template - TriangleListOptimizer::TriangleListOptimizer(size_t numCacheEntries) - { - // We never push more items than this capacity. The vector stores the - // max number of entries for us in its capacity() method. - m_entries.set_capacity(numCacheEntries); - } - - template - void TriangleListOptimizer::OptimizeIndexBuffer(IndexType* triangleList, size_t numIndices) - { - Flush(); - - // create a temporary buffer - AZStd::vector newBuffer(numIndices); - size_t maxIndices = numIndices; - - // for all triangles in the triangle list - for (size_t f = 0; f < numIndices; f += 3) - { - size_t mostEfficient = 0; - size_t mostHits = 0; - - for (size_t i = 0; i < maxIndices; i += 3) - { - // get the triangle indices - const IndexType indexA = triangleList[i]; - const IndexType indexB = triangleList[i + 1]; - const IndexType indexC = triangleList[i + 2]; - - // calculate how many hits this triangle would give - size_t numHits = CalcNumCacheHits(indexA, indexB, indexC); - - // if the number of hits is the maximum hits we can score, use this triangle - if (numHits == 3) - { - mostHits = numHits; - mostEfficient = i; - break; - } - - // check if this gives more hits than any other triangle we tested before - if (numHits > mostHits) - { - mostHits = numHits; - mostEfficient = i; - } - } - - // insert the triangle that gave most cache hits to the new triangle list - AddToCache(triangleList[mostEfficient]); - AddToCache(triangleList[mostEfficient + 1]); - AddToCache(triangleList[mostEfficient + 2]); - newBuffer[f] = triangleList[mostEfficient]; - newBuffer[f + 1] = triangleList[mostEfficient + 1]; - newBuffer[f + 2] = triangleList[mostEfficient + 2]; - - // remove the triangle from the old list, so that we don't test it anymore next time, since we already inserted it inside the new optimized list - AZStd::move( - /*input first*/ triangleList + mostEfficient + 3, - /*input last*/ triangleList + maxIndices, - /*output first*/ triangleList + mostEfficient); - - // we need to test one less triangle next time, since we just added one of the triangles to the new list - // so there is one less left - maxIndices -= 3; - } - - // copy the results - AZStd::copy(begin(newBuffer), end(newBuffer), triangleList); - } - - // calculate the number of cache hits - template - size_t TriangleListOptimizer::CalcNumCacheHits(IndexType* triangleList, size_t numIndices) - { - // clear the cache - Flush(); - - size_t totalHits = 0; - - // for all triangles in the triangle list - for (size_t f = 0; f < numIndices; f += 3) - { - const IndexType indexA = triangleList[f]; - const IndexType indexB = triangleList[f + 1]; - const IndexType indexC = triangleList[f + 2]; - - totalHits += CalcNumCacheHits(indexA, indexB, indexC); - - AddToCache(indexA); - AddToCache(indexB); - AddToCache(indexC); - } - - return totalHits; - } - - template - void TriangleListOptimizer::Flush() - { - m_numUsedEntries = 0; - m_oldestEntry = 0; - m_entries.clear(); - } - - // calculate the number of cache hits for a triangle - template - size_t TriangleListOptimizer::CalcNumCacheHits(IndexType indexA, IndexType indexB, IndexType indexC) const - { - size_t total = 0; - - // check all cache entries - for (IndexType entryValue : m_entries) - { - if (entryValue == indexA || entryValue == indexB || entryValue == indexC) - { - total++; - } - if (total == 3) - { - break; - } - } - - return total; - } - - // get a value from the cache - template - void TriangleListOptimizer::AddToCache(IndexType vertexIndex) - { - // check if this entry is already in the cache, if so we have a cache hit and can quit - const auto entryIt = AZStd::find(m_entries.begin(), m_entries.end(), vertexIndex); - if (entryIt != m_entries.end()) - { - return; - } - - // the entry is not inside the cache and the cache is not full yet, we can simply insert the cache entry and return - if (m_numUsedEntries < m_entries.capacity()) - { - m_entries.emplace_back(vertexIndex); - ++m_numUsedEntries; - return; - } - - // the cache is full, remove one of the entries - // since we simulate a FIFO cache, we have to remove the oldest entry - m_entries[m_oldestEntry] = vertexIndex; - ++m_oldestEntry %= m_entries.capacity(); - } -} // namespace MCore diff --git a/Gems/EMotionFX/Code/MCore/mcore_files.cmake b/Gems/EMotionFX/Code/MCore/mcore_files.cmake index c1203cb72e..7468b4f60d 100644 --- a/Gems/EMotionFX/Code/MCore/mcore_files.cmake +++ b/Gems/EMotionFX/Code/MCore/mcore_files.cmake @@ -91,9 +91,7 @@ set(FILES Source/MemoryTracker.cpp Source/MemoryTracker.h Source/MultiThreadManager.h - Source/PlaneEq.cpp Source/PlaneEq.h - Source/PlaneEq.inl Source/Random.cpp Source/Random.h Source/Ray.cpp @@ -109,6 +107,5 @@ set(FILES Source/StringIdPool.h Source/ReflectionSerializer.cpp Source/ReflectionSerializer.h - Source/TriangleListOptimizer.h Source/Vector.h ) From 94fa49da4997e84d26d2d1d663b8222c6331d3bb Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 22 Dec 2021 17:28:41 -0800 Subject: [PATCH 159/284] Removes Tests/Mocks/AnimGraphObjectData.h from Gems/EMotionFX Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Code/Tests/AnimGraphParameterCommandsTests.cpp | 1 - .../Code/Tests/Mocks/AnimGraphObjectData.h | 14 -------------- Gems/EMotionFX/Code/emotionfx_tests_files.cmake | 1 - 3 files changed, 16 deletions(-) delete mode 100644 Gems/EMotionFX/Code/Tests/Mocks/AnimGraphObjectData.h diff --git a/Gems/EMotionFX/Code/Tests/AnimGraphParameterCommandsTests.cpp b/Gems/EMotionFX/Code/Tests/AnimGraphParameterCommandsTests.cpp index 2f5a661850..1eae86587c 100644 --- a/Gems/EMotionFX/Code/Tests/AnimGraphParameterCommandsTests.cpp +++ b/Gems/EMotionFX/Code/Tests/AnimGraphParameterCommandsTests.cpp @@ -102,7 +102,6 @@ namespace AnimGraphParameterCommandsTests #include #include #include -#include #include #include #include diff --git a/Gems/EMotionFX/Code/Tests/Mocks/AnimGraphObjectData.h b/Gems/EMotionFX/Code/Tests/Mocks/AnimGraphObjectData.h deleted file mode 100644 index 83831708d1..0000000000 --- a/Gems/EMotionFX/Code/Tests/Mocks/AnimGraphObjectData.h +++ /dev/null @@ -1,14 +0,0 @@ -/* - * 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 - * - */ - -namespace EMotionFX -{ - class AnimGraphObjectData - { - }; -} diff --git a/Gems/EMotionFX/Code/emotionfx_tests_files.cmake b/Gems/EMotionFX/Code/emotionfx_tests_files.cmake index c418998a8f..98d7809fe9 100644 --- a/Gems/EMotionFX/Code/emotionfx_tests_files.cmake +++ b/Gems/EMotionFX/Code/emotionfx_tests_files.cmake @@ -132,7 +132,6 @@ set(FILES Tests/Mocks/AnimGraphManager.h Tests/Mocks/AnimGraphNode.h Tests/Mocks/AnimGraphObject.h - Tests/Mocks/AnimGraphObjectData.h Tests/Mocks/AnimGraphStateTransition.h Tests/Mocks/BlendTreeParameterNode.h Tests/Mocks/Command.h From b982d5627b6cf9949aee43c67a42637fc7869c24 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 23 Dec 2021 12:45:55 -0800 Subject: [PATCH 160/284] Removes unused IRecognizerMock.h from Gems/Gestures Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Gems/Gestures/Code/Mocks/IRecognizerMock.h | 25 ---------------------- 1 file changed, 25 deletions(-) delete mode 100644 Gems/Gestures/Code/Mocks/IRecognizerMock.h diff --git a/Gems/Gestures/Code/Mocks/IRecognizerMock.h b/Gems/Gestures/Code/Mocks/IRecognizerMock.h deleted file mode 100644 index c698c8285a..0000000000 --- a/Gems/Gestures/Code/Mocks/IRecognizerMock.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * 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 - -namespace Gestures -{ - class RecognizerMock - : public IRecognizer - { - public: - MOCK_CONST_METHOD0(GetPriority, - int32_t()); - MOCK_METHOD2(OnPressedEvent, - bool(const Vec2&screenPositionPixels, uint32_t pointerIndex)); - MOCK_METHOD2(OnDownEvent, - bool(const Vec2&screenPositionPixels, uint32_t pointerIndex)); - MOCK_METHOD2(OnReleasedEvent, - bool(const Vec2&screenPositionPixels, uint32_t pointerIndex)); - }; -} From 8c6cc2ea046140219934819aafa7799861686b39 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 23 Dec 2021 12:49:10 -0800 Subject: [PATCH 161/284] Removes EditorGradientComponentBase.cpp from Gems/GradientSignal Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Gems/Gestures/Code/gestures_test_files.cmake | 1 - .../Editor/EditorGradientComponentBase.cpp | 16 ---------------- .../Code/gradientsignal_editor_files.cmake | 1 - 3 files changed, 18 deletions(-) delete mode 100644 Gems/GradientSignal/Code/Source/Editor/EditorGradientComponentBase.cpp diff --git a/Gems/Gestures/Code/gestures_test_files.cmake b/Gems/Gestures/Code/gestures_test_files.cmake index 26667e96e2..c3b648b55d 100644 --- a/Gems/Gestures/Code/gestures_test_files.cmake +++ b/Gems/Gestures/Code/gestures_test_files.cmake @@ -11,5 +11,4 @@ set(FILES Tests/GestureRecognizerClickOrTapTests.cpp Tests/GestureRecognizerPinchTests.cpp Tests/GesturesTest.cpp - Mocks/IRecognizerMock.h ) diff --git a/Gems/GradientSignal/Code/Source/Editor/EditorGradientComponentBase.cpp b/Gems/GradientSignal/Code/Source/Editor/EditorGradientComponentBase.cpp deleted file mode 100644 index 9edfd92c3a..0000000000 --- a/Gems/GradientSignal/Code/Source/Editor/EditorGradientComponentBase.cpp +++ /dev/null @@ -1,16 +0,0 @@ -/* - * 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 - -#include -#include - -namespace GradientSignal -{ -} //namespace GradientSignal diff --git a/Gems/GradientSignal/Code/gradientsignal_editor_files.cmake b/Gems/GradientSignal/Code/gradientsignal_editor_files.cmake index 787b767002..3470fa6b87 100644 --- a/Gems/GradientSignal/Code/gradientsignal_editor_files.cmake +++ b/Gems/GradientSignal/Code/gradientsignal_editor_files.cmake @@ -21,7 +21,6 @@ set(FILES Source/Editor/EditorConstantGradientComponent.h Source/Editor/EditorDitherGradientComponent.cpp Source/Editor/EditorDitherGradientComponent.h - Source/Editor/EditorGradientComponentBase.cpp Source/Editor/EditorGradientSurfaceDataComponent.cpp Source/Editor/EditorGradientSurfaceDataComponent.h Source/Editor/EditorGradientTransformComponent.cpp From 78ae3fdb805733266ae0a644b8ab1305d9f93a2c Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 23 Dec 2021 14:19:05 -0800 Subject: [PATCH 162/284] Removes tools.cpp from Gems/GraphCanvas Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Gems/GraphCanvas/Code/Source/tools.cpp | 85 ------------------- Gems/GraphCanvas/Code/graphcanvas_files.cmake | 1 - 2 files changed, 86 deletions(-) delete mode 100644 Gems/GraphCanvas/Code/Source/tools.cpp diff --git a/Gems/GraphCanvas/Code/Source/tools.cpp b/Gems/GraphCanvas/Code/Source/tools.cpp deleted file mode 100644 index 79d32dbf5e..0000000000 --- a/Gems/GraphCanvas/Code/Source/tools.cpp +++ /dev/null @@ -1,85 +0,0 @@ -/* - * 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 - -#include -#include -#include - -#include - -////////// -// Tools -////////// - -QDebug operator<<(QDebug debug, const AZ::Entity* entity) -{ - QDebugStateSaver saver(debug); - if (!entity) - { - debug.nospace() << "Entity(nullptr)"; - return debug; - } - - const AZStd::string id = entity->GetId().ToString(); - const AZStd::string& name = entity->GetName(); - - QString state; - switch (entity->GetState()) - { - case AZ::Entity::State::Init: - state = "ES_INIT"; - break; - case AZ::Entity::State::Constructed: - state = "ES_CONSTRUCTED"; - break; - case AZ::Entity::State::Active: - state = "ES_ACTIVE"; - break; - default: - state = "ES_BAD_STATE"; - break; - } - - debug.nospace() << "Entity(" << QString(id.c_str()) << ", " << state << ", \"" << QString(name.c_str()) << "\")"; - - return debug; -} - -QDebug operator<<(QDebug debug, const AZ::EntityId& entity) -{ - const AZ::Entity* actual = nullptr; - AZ::ComponentApplicationBus::BroadcastResult(actual, &AZ::ComponentApplicationRequests::FindEntity, entity); - - return operator<<(debug, actual); -} - -QDebug operator<<(QDebug debug, const AZ::Component* component) -{ - QDebugStateSaver saver(debug); - if (!component) - { - debug.nospace() << "Component(nullptr)"; - return debug; - } - - std::ostringstream converter; - converter << std::hex << component->GetId(); - - debug.nospace() << "Component(" << QString::fromStdString(converter.str()) << " {" << component->GetEntity() << "})"; - - return debug; -} - -QDebug operator<<(QDebug debug, const AZ::Vector2& position) -{ - QDebugStateSaver saver(debug); - debug.nospace() << "Vector2(" << position.GetX() << ", " << position.GetY() << ")"; - return debug; -} diff --git a/Gems/GraphCanvas/Code/graphcanvas_files.cmake b/Gems/GraphCanvas/Code/graphcanvas_files.cmake index cf586e16ac..8ba9fd3073 100644 --- a/Gems/GraphCanvas/Code/graphcanvas_files.cmake +++ b/Gems/GraphCanvas/Code/graphcanvas_files.cmake @@ -16,7 +16,6 @@ set(FILES Source/GraphCanvas.h Source/GraphCanvasModule.h Source/GraphCanvasEditorModule.cpp - Source/tools.cpp Source/Components/BookmarkManagerComponent.cpp Source/Components/BookmarkManagerComponent.h Source/Components/GeometryComponent.cpp From 640f4980cd2c664233bcfe3def857e169ca2ac5d Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 23 Dec 2021 14:21:00 -0800 Subject: [PATCH 163/284] Removes VariableReferenceNodePropertyDisplay.h/cpp from Gems/GraphCanvas Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../VariableReferenceNodePropertyDisplay.cpp | 420 ------------------ .../VariableReferenceNodePropertyDisplay.h | 159 ------- 2 files changed, 579 deletions(-) delete mode 100644 Gems/GraphCanvas/Code/Source/Components/NodePropertyDisplays/VariableReferenceNodePropertyDisplay.cpp delete mode 100644 Gems/GraphCanvas/Code/Source/Components/NodePropertyDisplays/VariableReferenceNodePropertyDisplay.h diff --git a/Gems/GraphCanvas/Code/Source/Components/NodePropertyDisplays/VariableReferenceNodePropertyDisplay.cpp b/Gems/GraphCanvas/Code/Source/Components/NodePropertyDisplays/VariableReferenceNodePropertyDisplay.cpp deleted file mode 100644 index 2d8ff18c3a..0000000000 --- a/Gems/GraphCanvas/Code/Source/Components/NodePropertyDisplays/VariableReferenceNodePropertyDisplay.cpp +++ /dev/null @@ -1,420 +0,0 @@ -/* - * 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 - -#include - -#include -#include -#include - -namespace GraphCanvas -{ - ////////////////////// - // VariableItemModel - ////////////////////// - - VariableItemModel::VariableItemModel() - { - } - - VariableItemModel::~VariableItemModel() - { - } - - int VariableItemModel::rowCount(const QModelIndex& parent) const - { - return static_cast(m_variableIds.size()); - } - - QVariant VariableItemModel::data(const QModelIndex& index, int role) const - { - int row = index.row(); - AZ::EntityId variableId = FindVariableIdForRow(row); - - if (variableId.IsValid()) - { - switch (role) - { - case Qt::DisplayRole: - { - AZStd::string variableName; - VariableRequestBus::EventResult(variableName, variableId, &VariableRequests::GetVariableName); - return QString(variableName.c_str()); - } - case Qt::EditRole: - { - AZStd::string variableName; - VariableRequestBus::EventResult(variableName, variableId, &VariableRequests::GetVariableName); - return QString(variableName.c_str()); - } - default: - break; - } - } - else - { - switch (role) - { - case Qt::DisplayRole: - { - return QString("Unreferenced"); - } - case Qt::EditRole: - { - return QString("Unreferenced"); - } - default: - break; - } - } - - return QVariant(); - } - - QVariant VariableItemModel::headerData(int section, Qt::Orientation orientation, int role) const - { - return QVariant(); - } - - Qt::ItemFlags VariableItemModel::flags(const QModelIndex& index) const - { - return Qt::ItemFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable); - } - - void VariableItemModel::SetSceneId(const AZ::EntityId& sceneId) - { - m_sceneId = sceneId; - } - - void VariableItemModel::SetDataType(const AZ::Uuid& variableType) - { - if (m_dataType != variableType) - { - m_dataType = variableType; - } - } - - void VariableItemModel::RefreshData() - { - layoutAboutToBeChanged(); - ClearData(); - - m_variableIds.emplace_back(AZ::EntityId()); - - if (m_dataType == AZStd::any::TYPEINFO_Uuid()) - { - SceneVariableRequestBus::EnumerateHandlersId(m_sceneId, [this](SceneVariableRequests* variableRequests) - { - m_variableIds.emplace_back(variableRequests->GetVariableId()); - return true; - }); - } - else - { - SceneVariableRequestBus::EnumerateHandlersId(m_sceneId, [this](SceneVariableRequests* variableRequests) - { - AZ::EntityId variableId = variableRequests->GetVariableId(); - AZ::Uuid dataType; - VariableRequestBus::EventResult(dataType, variableId, &VariableRequests::GetDataType); - - if (dataType == m_dataType) - { - m_variableIds.emplace_back(variableRequests->GetVariableId()); - } - return true; - }); - } - - layoutChanged(); - } - - void VariableItemModel::ClearData() - { - layoutAboutToBeChanged(); - m_variableIds.clear(); - layoutChanged(); - } - - int VariableItemModel::FindRowForVariable(const AZ::EntityId& variableId) const - { - int row = -1; - - for (int i = 0; i < static_cast(m_variableIds.size()); ++i) - { - if (m_variableIds[i] == variableId) - { - row = i; - break; - } - } - - return row; - } - - AZ::EntityId VariableItemModel::FindVariableIdForRow(int row) const - { - if (row >= 0 && row < m_variableIds.size()) - { - return m_variableIds[row]; - } - - return AZ::EntityId(); - } - - AZ::EntityId VariableItemModel::FindVariableIdForName(const AZStd::string& variableName) const - { - AZ::EntityId variableId; - - QString lowerName = QString(variableName.c_str()).toLower(); - - GraphCanvas::SceneVariableRequestBus::EnumerateHandlersId(m_sceneId, [&lowerName, &variableId](GraphCanvas::SceneVariableRequests* sceneVariable) - { - AZ::EntityId testId = sceneVariable->GetVariableId(); - - AZStd::string testName; - GraphCanvas::VariableRequestBus::EventResult(testName, testId, &GraphCanvas::VariableRequests::GetVariableName); - - QString lowerTextName = QString(testName.c_str()).toLower(); - - if (lowerTextName.compare(lowerName) == 0) - { - variableId = testId; - } - - return !variableId.IsValid(); - }); - - return variableId; - } - - //////////////////////////// - // VariableSelectionWidget - //////////////////////////// - - VariableSelectionWidget::VariableSelectionWidget() - : QWidget(nullptr) - , m_lineEdit(aznew Internal::FocusableLineEdit()) - , m_itemModel(aznew VariableItemModel()) - { - m_completer = new QCompleter(m_itemModel, this); - m_completer->setCaseSensitivity(Qt::CaseInsensitive); - m_completer->setCompletionMode(QCompleter::InlineCompletion); - - m_lineEdit->setCompleter(m_completer); - m_lineEdit->setPlaceholderText("Select Variable..."); - - m_layout = new QVBoxLayout(this); - m_layout->addWidget(m_lineEdit); - - setContentsMargins(0, 0, 0, 0); - m_layout->setContentsMargins(0, 0, 0, 0); - - setLayout(m_layout); - - QObject::connect(m_lineEdit, &Internal::FocusableLineEdit::OnFocusIn, this, &VariableSelectionWidget::HandleFocusIn); - QObject::connect(m_lineEdit, &Internal::FocusableLineEdit::OnFocusOut, this, &VariableSelectionWidget::HandleFocusOut); - QObject::connect(m_lineEdit, &Internal::FocusableLineEdit::returnPressed, this, &VariableSelectionWidget::SubmitName); - } - - VariableSelectionWidget::~VariableSelectionWidget() - { - } - - void VariableSelectionWidget::SetSceneId(const AZ::EntityId& sceneId) - { - m_itemModel->SetSceneId(sceneId); - } - - void VariableSelectionWidget::SetDataType(const AZ::Uuid& dataType) - { - m_itemModel->SetDataType(dataType); - } - - void VariableSelectionWidget::OnEscape() - { - SetSelectedVariable(m_initialVariable); - m_lineEdit->selectAll(); - } - - void VariableSelectionWidget::HandleFocusIn() - { - m_itemModel->RefreshData(); - emit OnFocusIn(); - - AzToolsFramework::EditorEvents::Bus::Handler::BusConnect(); - } - - void VariableSelectionWidget::HandleFocusOut() - { - m_itemModel->ClearData(); - emit OnFocusOut(); - - SetSelectedVariable(m_initialVariable); - - AzToolsFramework::EditorEvents::Bus::Handler::BusDisconnect(); - } - - void VariableSelectionWidget::SubmitName() - { - AZStd::string variableName = m_lineEdit->text().toUtf8().data(); - AZ::EntityId variableId = m_itemModel->FindVariableIdForName(variableName); - - if (variableId.IsValid()) - { - SetSelectedVariable(variableId); - m_lineEdit->selectAll(); - } - else - { - QSignalBlocker block(m_lineEdit); - m_lineEdit->setText(""); - } - - emit OnVariableSelected(variableId); - } - - void VariableSelectionWidget::SetSelectedVariable(const AZ::EntityId& variableId) - { - QSignalBlocker blocker(m_lineEdit); - - AZStd::string variableName; - VariableRequestBus::EventResult(variableName, variableId, &VariableRequests::GetVariableName); - - m_lineEdit->setText(variableName.c_str()); - - m_initialVariable = variableId; - } - - ///////////////////////////////////////// - // VariableReferenceNodePropertyDisplay - ///////////////////////////////////////// - - VariableReferenceNodePropertyDisplay::VariableReferenceNodePropertyDisplay(VariableReferenceDataInterface* dataInterface) - : m_variableReferenceDataInterface(dataInterface) - { - m_variableReferenceDataInterface->RegisterDisplay(this); - - m_disabledLabel = aznew GraphCanvasLabel(); - m_displayLabel = aznew GraphCanvasLabel(); - - m_proxyWidget = new QGraphicsProxyWidget(); - - m_variableSelectionWidget = aznew VariableSelectionWidget(); - m_variableSelectionWidget->setProperty("HasNoWindowDecorations", true); - - m_proxyWidget->setWidget(m_variableSelectionWidget); - - m_variableSelectionWidget->SetDataType(dataInterface->GetVariableDataType()); - - QObject::connect(m_variableSelectionWidget, &VariableSelectionWidget::OnFocusIn, [this]() { EditStart(); }); - QObject::connect(m_variableSelectionWidget, &VariableSelectionWidget::OnFocusOut, [this]() { EditFinished(); }); - QObject::connect(m_variableSelectionWidget, &VariableSelectionWidget::OnVariableSelected, [this](const AZ::EntityId& variableId) { AssignVariable(variableId); }); - - RegisterShortcutDispatcher(m_variableSelectionWidget); - } - - VariableReferenceNodePropertyDisplay::~VariableReferenceNodePropertyDisplay() - { - delete m_variableReferenceDataInterface; - - delete m_disabledLabel; - delete m_displayLabel; - } - - void VariableReferenceNodePropertyDisplay::RefreshStyle() - { - m_disabledLabel->SetSceneStyle(GetSceneId(), NodePropertyDisplay::CreateDisabledLabelStyle("variable").c_str()); - m_displayLabel->SetSceneStyle(GetSceneId(), NodePropertyDisplay::CreateDisplayLabelStyle("variable").c_str()); - - m_variableSelectionWidget->setMinimumSize(m_displayLabel->GetStyleHelper().GetMinimumSize().toSize()); - } - - void VariableReferenceNodePropertyDisplay::UpdateDisplay() - { - VariableNotificationBus::Handler::BusDisconnect(); - - AZ::EntityId variableId = m_variableReferenceDataInterface->GetVariableReference(); - - DisplayVariableString(variableId); - - m_variableSelectionWidget->SetSelectedVariable(variableId); - - if (variableId.IsValid()) - { - VariableNotificationBus::Handler::BusConnect(variableId); - } - } - - QGraphicsLayoutItem* VariableReferenceNodePropertyDisplay::GetDisabledGraphicsLayoutItem() const - { - return m_disabledLabel; - } - - QGraphicsLayoutItem* VariableReferenceNodePropertyDisplay::GetDisplayGraphicsLayoutItem() const - { - return m_displayLabel; - } - - QGraphicsLayoutItem* VariableReferenceNodePropertyDisplay::GetEditableGraphicsLayoutItem() const - { - return m_proxyWidget; - } - - void VariableReferenceNodePropertyDisplay::OnNameChanged() - { - AZ::EntityId variableId = m_variableReferenceDataInterface->GetVariableReference(); - - DisplayVariableString(variableId); - } - - void VariableReferenceNodePropertyDisplay::OnVariableActivated() - { - AZ::EntityId variableId = m_variableReferenceDataInterface->GetVariableReference(); - - DisplayVariableString(variableId); - } - - void VariableReferenceNodePropertyDisplay::OnIdSet() - { - m_variableSelectionWidget->SetSceneId(GetSceneId()); - } - - void VariableReferenceNodePropertyDisplay::DisplayVariableString(const AZ::EntityId& variableId) - { - AZStd::string variableName = "Select Variable"; - - if (variableId.IsValid()) - { - VariableRequestBus::EventResult(variableName, variableId, &VariableRequests::GetVariableName); - } - - m_displayLabel->SetLabel(variableName.c_str()); - } - - void VariableReferenceNodePropertyDisplay::EditStart() - { - NodePropertiesRequestBus::Event(GetNodeId(), &NodePropertiesRequests::LockEditState, this); - TryAndSelectNode(); - } - - void VariableReferenceNodePropertyDisplay::AssignVariable(const AZ::EntityId& variableId) - { - m_variableReferenceDataInterface->AssignVariableReference(variableId); - DisplayVariableString(m_variableReferenceDataInterface->GetVariableReference()); - } - - void VariableReferenceNodePropertyDisplay::EditFinished() - { - UpdateDisplay(); - NodePropertiesRequestBus::Event(GetNodeId(), &NodePropertiesRequests::UnlockEditState, this); - } - -#include -} diff --git a/Gems/GraphCanvas/Code/Source/Components/NodePropertyDisplays/VariableReferenceNodePropertyDisplay.h b/Gems/GraphCanvas/Code/Source/Components/NodePropertyDisplays/VariableReferenceNodePropertyDisplay.h deleted file mode 100644 index 0dba76b674..0000000000 --- a/Gems/GraphCanvas/Code/Source/Components/NodePropertyDisplays/VariableReferenceNodePropertyDisplay.h +++ /dev/null @@ -1,159 +0,0 @@ -/* - * 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 - -#if !defined(Q_MOC_RUN) -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include - -#include -#include -#include -#endif - -namespace GraphCanvas -{ - class GraphCanvasLabel; - - // TODO: Make this into a single static instance that gets updated for each scene - // rather then a 1:1 relationship with the number of variable elements we have. - class VariableItemModel - : public QAbstractListModel - { - public: - AZ_CLASS_ALLOCATOR(VariableItemModel, AZ::SystemAllocator, 0); - - VariableItemModel(); - ~VariableItemModel() override; - - // QAstractListModel - int rowCount(const QModelIndex& parent) const override; - QVariant data(const QModelIndex& index, int role) const override; - - QVariant headerData(int section, Qt::Orientation orientation, int role) const override; - - Qt::ItemFlags flags(const QModelIndex& index) const override; - //// - - void SetSceneId(const AZ::EntityId& sceneId); - void SetDataType(const AZ::Uuid& variableType); - void RefreshData(); - void ClearData(); - - int FindRowForVariable(const AZ::EntityId& variableId) const; - AZ::EntityId FindVariableIdForRow(int row) const; - AZ::EntityId FindVariableIdForName(const AZStd::string& variableName) const; - - private: - - AZ::EntityId m_sceneId; - - AZ::Uuid m_dataType; - AZStd::vector< AZ::EntityId > m_variableIds; - }; - - class VariableSelectionWidget - : public QWidget - , public AzToolsFramework::EditorEvents::Bus::Handler - { - Q_OBJECT - - public: - AZ_CLASS_ALLOCATOR(VariableSelectionWidget, AZ::SystemAllocator, 0); - - VariableSelectionWidget(); - ~VariableSelectionWidget(); - - void SetSceneId(const AZ::EntityId& sceneId); - void SetDataType(const AZ::Uuid& dataType); - void SetSelectedVariable(const AZ::EntityId& variableId); - - // AzToolsFramework::EditorEvents::Bus - void OnEscape() override; - //// - - public slots: - - // Line Edit - void HandleFocusIn(); - void HandleFocusOut(); - void SubmitName(); - - signals: - - void OnFocusIn(); - void OnFocusOut(); - - void OnVariableSelected(const AZ::EntityId& variableId); - - private: - - Internal::FocusableLineEdit* m_lineEdit; - VariableItemModel* m_itemModel; - - QCompleter* m_completer; - - QVBoxLayout* m_layout; - - AZ::EntityId m_initialVariable; - }; - - class VariableReferenceNodePropertyDisplay - : public NodePropertyDisplay - , public VariableNotificationBus::Handler - { - public: - AZ_CLASS_ALLOCATOR(VariableReferenceNodePropertyDisplay, AZ::SystemAllocator, 0); - VariableReferenceNodePropertyDisplay(VariableReferenceDataInterface* dataInterface); - ~VariableReferenceNodePropertyDisplay() override; - - // NodePropertyDisplay - void RefreshStyle() override; - void UpdateDisplay() override; - - QGraphicsLayoutItem* GetDisabledGraphicsLayoutItem() const override; - QGraphicsLayoutItem* GetDisplayGraphicsLayoutItem() const override; - QGraphicsLayoutItem* GetEditableGraphicsLayoutItem() const override; - //// - - // VariableNotificationBus - void OnNameChanged() override; - void OnVariableActivated() override; - //// - - private: - - // NodePropertyDisplay - void OnIdSet() override; - //// - - void DisplayVariableString(const AZ::EntityId& variableId); - - void EditStart(); - void AssignVariable(const AZ::EntityId& variableId); - void EditFinished(); - - VariableReferenceDataInterface* m_variableReferenceDataInterface; - - GraphCanvasLabel* m_disabledLabel; - GraphCanvasLabel* m_displayLabel; - - QGraphicsProxyWidget* m_proxyWidget; - VariableSelectionWidget* m_variableSelectionWidget; - }; -} From 886a9631c7d29141d13787ed466e94d32d200495 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 23 Dec 2021 15:08:51 -0800 Subject: [PATCH 164/284] Removes CommentLayerControllerComponent from Gems/GraphCanvas Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Nodes/Comment/CommentLayerControllerComponent.cpp | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 Gems/GraphCanvas/Code/Source/Components/Nodes/Comment/CommentLayerControllerComponent.cpp diff --git a/Gems/GraphCanvas/Code/Source/Components/Nodes/Comment/CommentLayerControllerComponent.cpp b/Gems/GraphCanvas/Code/Source/Components/Nodes/Comment/CommentLayerControllerComponent.cpp deleted file mode 100644 index 708520fe9d..0000000000 --- a/Gems/GraphCanvas/Code/Source/Components/Nodes/Comment/CommentLayerControllerComponent.cpp +++ /dev/null @@ -1,9 +0,0 @@ -/* - * 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 From 592a7dd9b3aba46fe4a191185bbaff775433c95e Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 23 Dec 2021 15:10:14 -0800 Subject: [PATCH 165/284] Removes DoubleDataInterface from Gems/GraphCanvas Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../NodePropertyDisplay/DoubleDataInterface.h | 37 ------------------- .../StaticLib/GraphCanvas/GraphCanvasBus.h | 2 +- .../Code/graphcanvas_staticlib_files.cmake | 1 - .../Integration/FloatDataInterface.h | 3 -- 4 files changed, 1 insertion(+), 42 deletions(-) delete mode 100644 Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Components/NodePropertyDisplay/DoubleDataInterface.h diff --git a/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Components/NodePropertyDisplay/DoubleDataInterface.h b/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Components/NodePropertyDisplay/DoubleDataInterface.h deleted file mode 100644 index 8c552a331f..0000000000 --- a/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Components/NodePropertyDisplay/DoubleDataInterface.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * 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 - -#include "DataInterface.h" -#include "NumericDataInterface.h" - -namespace GraphCanvas -{ - // Deprecated name for the NumericDataInterface - class DoubleDataInterface - : public NumericDataInterface - { - public: - AZ_DEPRECATED(DoubleDataInterface(), "DoubleDataInterface renamed to NumericDataInterface") - { - } - - virtual double GetDouble() const = 0; - virtual void SetDouble(double value) = 0; - - double GetNumber() const override final - { - return GetDouble(); - } - - void SetNumber(double value) override final - { - SetDouble(value); - } - }; -} diff --git a/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/GraphCanvasBus.h b/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/GraphCanvasBus.h index 0b09cb5cee..8791ec7c1f 100644 --- a/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/GraphCanvasBus.h +++ b/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/GraphCanvasBus.h @@ -135,7 +135,7 @@ namespace GraphCanvas //! The PropertyDisplay will take ownership of the DataInterface virtual NodePropertyDisplay* CreateBooleanNodePropertyDisplay(BooleanDataInterface* dataInterface) const = 0; - //! Creates a DoubleNodeProperty display using the specified DoubleDataInterface + //! Creates a DoubleNodeProperty display using the specified NumericDataInterface //! param: dataInterface is the interface to local data to be used in the operation of the NodePropertyDisplay. //! The PropertyDisplay will take ownership of the DataInterface virtual NodePropertyDisplay* CreateNumericNodePropertyDisplay(NumericDataInterface* dataInterface) const = 0; diff --git a/Gems/GraphCanvas/Code/graphcanvas_staticlib_files.cmake b/Gems/GraphCanvas/Code/graphcanvas_staticlib_files.cmake index 455b5673d3..ad26ac09d8 100644 --- a/Gems/GraphCanvas/Code/graphcanvas_staticlib_files.cmake +++ b/Gems/GraphCanvas/Code/graphcanvas_staticlib_files.cmake @@ -50,7 +50,6 @@ set(FILES StaticLib/GraphCanvas/Components/NodePropertyDisplay/BooleanDataInterface.h StaticLib/GraphCanvas/Components/NodePropertyDisplay/ComboBoxDataInterface.h StaticLib/GraphCanvas/Components/NodePropertyDisplay/DataInterface.h - StaticLib/GraphCanvas/Components/NodePropertyDisplay/DoubleDataInterface.h StaticLib/GraphCanvas/Components/NodePropertyDisplay/EntityIdDataInterface.h StaticLib/GraphCanvas/Components/NodePropertyDisplay/NodePropertyDisplay.cpp StaticLib/GraphCanvas/Components/NodePropertyDisplay/NodePropertyDisplay.h diff --git a/Gems/GraphModel/Code/Include/GraphModel/Integration/FloatDataInterface.h b/Gems/GraphModel/Code/Include/GraphModel/Integration/FloatDataInterface.h index cfd40cecdf..66c0f57fe4 100644 --- a/Gems/GraphModel/Code/Include/GraphModel/Integration/FloatDataInterface.h +++ b/Gems/GraphModel/Code/Include/GraphModel/Integration/FloatDataInterface.h @@ -8,9 +8,6 @@ #pragma once -// Graph Canvas -#include - // Graph Model #include From f2869463773d3894b67fd61abdbac77b0f14d938 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 23 Dec 2021 15:21:19 -0800 Subject: [PATCH 166/284] Removes VariableDataInterface.h from Gems/GraphCanvas Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../VariableDataInterface.h | 27 ------------------- .../GraphCanvas/NodeDescriptorBus.h | 1 - 2 files changed, 28 deletions(-) delete mode 100644 Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Components/NodePropertyDisplay/VariableDataInterface.h diff --git a/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Components/NodePropertyDisplay/VariableDataInterface.h b/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Components/NodePropertyDisplay/VariableDataInterface.h deleted file mode 100644 index 967f332fa6..0000000000 --- a/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Components/NodePropertyDisplay/VariableDataInterface.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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 - -#include "DataInterface.h" - -namespace GraphCanvas -{ - class VariableReferenceDataInterface - : public DataInterface - { - public: - // Returns the Uuid that represents the varaible assigned to this value. - virtual AZ::Uuid GetVariableReference() const = 0; - - // Sets the entity reference that - virtual void AssignVariableReference(const AZ::Uuid& variableId) = 0; - - // Returns the type of variable that should be assigned to this value. - virtual AZ::Uuid GetVariableDataType() const = 0; - }; -} diff --git a/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/GraphCanvas/NodeDescriptorBus.h b/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/GraphCanvas/NodeDescriptorBus.h index f5fc8f4292..8fa81b7f5a 100644 --- a/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/GraphCanvas/NodeDescriptorBus.h +++ b/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/GraphCanvas/NodeDescriptorBus.h @@ -27,7 +27,6 @@ namespace GraphCanvas { class StringDataInterface; - class VariableReferenceDataInterface; } namespace ScriptCanvasEditor From 7292fea50fc536f064d58add78ce2f18edf6e328 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 23 Dec 2021 15:23:42 -0800 Subject: [PATCH 167/284] Removes VariableNodeBus.h from Gems/GraphCanvas Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Nodes/Variable/VariableNodeBus.h | 55 ------------------- 1 file changed, 55 deletions(-) delete mode 100644 Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Components/Nodes/Variable/VariableNodeBus.h diff --git a/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Components/Nodes/Variable/VariableNodeBus.h b/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Components/Nodes/Variable/VariableNodeBus.h deleted file mode 100644 index 59a531a117..0000000000 --- a/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Components/Nodes/Variable/VariableNodeBus.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * 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 - -#include -#include - -#include - -class QGraphicsLayoutItem; -class QMimeData; - -namespace GraphCanvas -{ - namespace Deprecated - { - //! SceneVariableRequestBus - //! Requests to be made about variables in a particular scene. - class SceneVariableRequests : public AZ::EBusTraits - { - public: - // The BusId here is the SceneId of the scene that contains the variable. - // - // Should mainly be used with enumeration for collecting information and not as a way of directly interacting - // with variables inside of a particular scene. - static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::ById; - using BusIdType = AZ::EntityId; - - virtual AZ::EntityId GetVariableId() const = 0; - }; - - using SceneVariableRequestBus = AZ::EBus; - - //! VariableRequestBus - //! Requests to be made about a particular variable. - class VariableRequests : public AZ::EBusTraits - { - public: - // The BusId here is the VariableId of the variable that information is required about. - static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::ById; - using BusIdType = AZ::EntityId; - - virtual AZStd::string GetVariableName() const = 0; - virtual AZ::Uuid GetDataType() const = 0; - virtual AZStd::string GetDataTypeDisplayName() const = 0; - }; - - using VariableRequestBus = AZ::EBus; - } -} From 504009a63ba79745263ec694ef4230442b15abf0 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 23 Dec 2021 15:44:25 -0800 Subject: [PATCH 168/284] Removes definitions.cpp from Gems/GraphCanvas Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Code/StaticLib/GraphCanvas/Styling/Parser.cpp | 4 ++-- .../StaticLib/GraphCanvas/Styling/definitions.cpp | 15 --------------- .../Code/graphcanvas_staticlib_files.cmake | 1 - 3 files changed, 2 insertions(+), 18 deletions(-) delete mode 100644 Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Styling/definitions.cpp diff --git a/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Styling/Parser.cpp b/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Styling/Parser.cpp index 5d15c9fcd0..8cfb81715a 100644 --- a/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Styling/Parser.cpp +++ b/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Styling/Parser.cpp @@ -47,7 +47,7 @@ namespace const QRegularExpression invalidStart(R"_(^\s*>\s*)_"); const QRegularExpression invalidEnd(R"_(\s*>\s*$)_"); const QRegularExpression splitNesting(R"_(\s*>\s*)_"); - const QRegularExpression selector(R"_(^(?:(?:(\w+)?(\.\w+)?)|(#\w+)?)(:\w+)?$)_"); + const QRegularExpression s_selectorRegex(R"_(^(?:(?:(\w+)?(\.\w+)?)|(#\w+)?)(:\w+)?$)_"); AZStd::string QtToAz(const QString& source) { @@ -1013,7 +1013,7 @@ namespace GraphCanvas nestedSelectors.reserve(parts.size()); for (const QString& part : parts) { - auto matches = selector.match(part); + auto matches = s_selectorRegex.match(part); if (!matches.hasMatch()) { qWarning() << "Invalid selector:" << part << "in" << candidate; diff --git a/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Styling/definitions.cpp b/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Styling/definitions.cpp deleted file mode 100644 index f8ba5ffab3..0000000000 --- a/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Styling/definitions.cpp +++ /dev/null @@ -1,15 +0,0 @@ -/* - * 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 -#include - -int LinkerWarningWorkaround() -{ - return 0; -} diff --git a/Gems/GraphCanvas/Code/graphcanvas_staticlib_files.cmake b/Gems/GraphCanvas/Code/graphcanvas_staticlib_files.cmake index ad26ac09d8..9572219a13 100644 --- a/Gems/GraphCanvas/Code/graphcanvas_staticlib_files.cmake +++ b/Gems/GraphCanvas/Code/graphcanvas_staticlib_files.cmake @@ -76,7 +76,6 @@ set(FILES StaticLib/GraphCanvas/Editor/EditorTypes.h StaticLib/GraphCanvas/Editor/GraphCanvasProfiler.h StaticLib/GraphCanvas/Editor/GraphModelBus.h - StaticLib/GraphCanvas/Styling/definitions.cpp StaticLib/GraphCanvas/Styling/definitions.h StaticLib/GraphCanvas/Styling/PseudoElement.cpp StaticLib/GraphCanvas/Styling/PseudoElement.h From 0f59718ff07f548b2a53e962766eb778589cec9b Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 3 Jan 2022 14:59:09 -0800 Subject: [PATCH 169/284] Removes CommentConstructMenuActions.cpp/h from Gems/GraphCanvas Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../CommentConstructMenuActions.cpp | 55 ------------------- .../CommentConstructMenuActions.h | 26 --------- .../GraphCanvasConstructActionsMenuGroup.cpp | 1 - .../Code/graphcanvas_staticlib_files.cmake | 2 - 4 files changed, 84 deletions(-) delete mode 100644 Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Widgets/EditorContextMenu/ContextMenuActions/ConstructMenuActions/CommentConstructMenuActions.cpp delete mode 100644 Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Widgets/EditorContextMenu/ContextMenuActions/ConstructMenuActions/CommentConstructMenuActions.h diff --git a/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Widgets/EditorContextMenu/ContextMenuActions/ConstructMenuActions/CommentConstructMenuActions.cpp b/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Widgets/EditorContextMenu/ContextMenuActions/ConstructMenuActions/CommentConstructMenuActions.cpp deleted file mode 100644 index d07ec91a3f..0000000000 --- a/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Widgets/EditorContextMenu/ContextMenuActions/ConstructMenuActions/CommentConstructMenuActions.cpp +++ /dev/null @@ -1,55 +0,0 @@ -/* - * 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 - -#include -#include -#include -#include - -#include - - -namespace GraphCanvas -{ - ///////////////////////// - // AddCommentMenuAction - ///////////////////////// - - AddCommentMenuAction::AddCommentMenuAction(QObject* parent) - : ConstructContextMenuAction("Add comment", parent) - { - } - - ContextMenuAction::SceneReaction AddCommentMenuAction::TriggerAction(const AZ::Vector2& scenePos) - { - const GraphId& graphId = GetGraphId(); - - SceneRequestBus::Event(graphId, &SceneRequests::ClearSelection); - - AZ::Entity* graphCanvasEntity = nullptr; - GraphCanvasRequestBus::BroadcastResult(graphCanvasEntity, &GraphCanvasRequests::CreateCommentNodeAndActivate); - - AZ_Assert(graphCanvasEntity, "Unable to create GraphCanvas Bus Node"); - - if (graphCanvasEntity) - { - SceneRequestBus::Event(graphId, &SceneRequests::AddNode, graphCanvasEntity->GetId(), scenePos, false); - CommentUIRequestBus::Event(graphCanvasEntity->GetId(), &CommentUIRequests::SetEditable, true); - } - - if (graphCanvasEntity != nullptr) - { - return SceneReaction::PostUndo; - } - else - { - return SceneReaction::Nothing; - } - } -} diff --git a/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Widgets/EditorContextMenu/ContextMenuActions/ConstructMenuActions/CommentConstructMenuActions.h b/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Widgets/EditorContextMenu/ContextMenuActions/ConstructMenuActions/CommentConstructMenuActions.h deleted file mode 100644 index 3c9c767619..0000000000 --- a/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Widgets/EditorContextMenu/ContextMenuActions/ConstructMenuActions/CommentConstructMenuActions.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * 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 - -#include - -namespace GraphCanvas -{ - class AddCommentMenuAction - : public ConstructContextMenuAction - { - public: - AZ_CLASS_ALLOCATOR(AddCommentMenuAction, AZ::SystemAllocator, 0); - - AddCommentMenuAction(QObject* parent); - virtual ~AddCommentMenuAction() = default; - - using ConstructContextMenuAction::TriggerAction; - SceneReaction TriggerAction(const AZ::Vector2& scenePos) override; - }; -} diff --git a/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Widgets/EditorContextMenu/ContextMenuActions/ConstructMenuActions/GraphCanvasConstructActionsMenuGroup.cpp b/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Widgets/EditorContextMenu/ContextMenuActions/ConstructMenuActions/GraphCanvasConstructActionsMenuGroup.cpp index d075594ab0..e5a7cf8073 100644 --- a/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Widgets/EditorContextMenu/ContextMenuActions/ConstructMenuActions/GraphCanvasConstructActionsMenuGroup.cpp +++ b/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Widgets/EditorContextMenu/ContextMenuActions/ConstructMenuActions/GraphCanvasConstructActionsMenuGroup.cpp @@ -10,7 +10,6 @@ #include #include -#include #include #include diff --git a/Gems/GraphCanvas/Code/graphcanvas_staticlib_files.cmake b/Gems/GraphCanvas/Code/graphcanvas_staticlib_files.cmake index 9572219a13..eeba6ff4fb 100644 --- a/Gems/GraphCanvas/Code/graphcanvas_staticlib_files.cmake +++ b/Gems/GraphCanvas/Code/graphcanvas_staticlib_files.cmake @@ -144,8 +144,6 @@ set(FILES StaticLib/GraphCanvas/Widgets/EditorContextMenu/ContextMenuActions/AlignmentMenuActions/AlignmentContextMenuActions.h StaticLib/GraphCanvas/Widgets/EditorContextMenu/ContextMenuActions/ConstructMenuActions/BookmarkConstructMenuActions.cpp StaticLib/GraphCanvas/Widgets/EditorContextMenu/ContextMenuActions/ConstructMenuActions/BookmarkConstructMenuActions.h - StaticLib/GraphCanvas/Widgets/EditorContextMenu/ContextMenuActions/ConstructMenuActions/CommentConstructMenuActions.cpp - StaticLib/GraphCanvas/Widgets/EditorContextMenu/ContextMenuActions/ConstructMenuActions/CommentConstructMenuActions.h StaticLib/GraphCanvas/Widgets/EditorContextMenu/ContextMenuActions/ConstructMenuActions/ConstructContextMenuAction.h StaticLib/GraphCanvas/Widgets/EditorContextMenu/ContextMenuActions/ConstructMenuActions/ConstructPresetMenuActions.cpp StaticLib/GraphCanvas/Widgets/EditorContextMenu/ContextMenuActions/ConstructMenuActions/ConstructPresetMenuActions.h From 9ad837c952cf8dbdb235a5509502e827f013447c Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 3 Jan 2022 15:25:20 -0800 Subject: [PATCH 170/284] Removes SceneActionsMenuGroup.h/cpp from Gems/GraphCanvas Removes Resource.h from Gems/GraphCanvas Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Widgets/Bookmarks/BookmarkDockWidget.cpp | 1 - .../SceneActionsMenuGroup.cpp | 36 ------------------- .../SceneMenuActions/SceneActionsMenuGroup.h | 30 ---------------- .../GraphCanvas/Widgets/Resources/Resources.h | 10 ------ .../Code/graphcanvas_staticlib_files.cmake | 3 -- 5 files changed, 80 deletions(-) delete mode 100644 Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Widgets/EditorContextMenu/ContextMenuActions/SceneMenuActions/SceneActionsMenuGroup.cpp delete mode 100644 Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Widgets/EditorContextMenu/ContextMenuActions/SceneMenuActions/SceneActionsMenuGroup.h delete mode 100644 Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Widgets/Resources/Resources.h diff --git a/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Widgets/Bookmarks/BookmarkDockWidget.cpp b/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Widgets/Bookmarks/BookmarkDockWidget.cpp index 50e6be25e0..a68ed78ead 100644 --- a/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Widgets/Bookmarks/BookmarkDockWidget.cpp +++ b/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Widgets/Bookmarks/BookmarkDockWidget.cpp @@ -19,7 +19,6 @@ #include #include #include -#include namespace { diff --git a/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Widgets/EditorContextMenu/ContextMenuActions/SceneMenuActions/SceneActionsMenuGroup.cpp b/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Widgets/EditorContextMenu/ContextMenuActions/SceneMenuActions/SceneActionsMenuGroup.cpp deleted file mode 100644 index 2160160f77..0000000000 --- a/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Widgets/EditorContextMenu/ContextMenuActions/SceneMenuActions/SceneActionsMenuGroup.cpp +++ /dev/null @@ -1,36 +0,0 @@ -/* - * 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 - -#include -#include - -namespace GraphCanvas -{ - ////////////////////////// - // SceneActionsMenuGroup - ////////////////////////// - - SceneActionsMenuGroup::SceneActionsMenuGroup(EditorContextMenu* contextMenu) - : m_removeUnusedNodesAction(nullptr) - { - contextMenu->AddActionGroup(SceneContextMenuAction::GetSceneContextMenuActionGroupId()); - - m_removeUnusedNodesAction = aznew RemoveUnusedNodesMenuAction(contextMenu); - contextMenu->AddMenuAction(m_removeUnusedNodesAction); - } - - SceneActionsMenuGroup::~SceneActionsMenuGroup() - { - } - - void SceneActionsMenuGroup::SetCleanUpGraphEnabled(bool enabled) - { - m_removeUnusedNodesAction->setEnabled(enabled); - } -} diff --git a/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Widgets/EditorContextMenu/ContextMenuActions/SceneMenuActions/SceneActionsMenuGroup.h b/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Widgets/EditorContextMenu/ContextMenuActions/SceneMenuActions/SceneActionsMenuGroup.h deleted file mode 100644 index f0c1d03419..0000000000 --- a/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Widgets/EditorContextMenu/ContextMenuActions/SceneMenuActions/SceneActionsMenuGroup.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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 - -#include - -#include - -namespace GraphCanvas -{ - class SceneActionsMenuGroup - { - public: - AZ_CLASS_ALLOCATOR(SceneActionsMenuGroup, AZ::SystemAllocator, 0); - - SceneActionsMenuGroup(EditorContextMenu* contextMenu); - ~SceneActionsMenuGroup(); - - void SetCleanUpGraphEnabled(bool enabled); - - private: - - ContextMenuAction* m_removeUnusedNodesAction; - }; -} diff --git a/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Widgets/Resources/Resources.h b/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Widgets/Resources/Resources.h deleted file mode 100644 index 6a89627825..0000000000 --- a/Gems/GraphCanvas/Code/StaticLib/GraphCanvas/Widgets/Resources/Resources.h +++ /dev/null @@ -1,10 +0,0 @@ -/* - * 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 - - diff --git a/Gems/GraphCanvas/Code/graphcanvas_staticlib_files.cmake b/Gems/GraphCanvas/Code/graphcanvas_staticlib_files.cmake index eeba6ff4fb..286391cf71 100644 --- a/Gems/GraphCanvas/Code/graphcanvas_staticlib_files.cmake +++ b/Gems/GraphCanvas/Code/graphcanvas_staticlib_files.cmake @@ -8,7 +8,6 @@ set(FILES StaticLib/GraphCanvas/Widgets/Resources/GraphCanvasEditorResources.qrc - StaticLib/GraphCanvas/Widgets/Resources/Resources.h StaticLib/GraphCanvas/Widgets/GraphCanvasMimeContainer.cpp StaticLib/GraphCanvas/Widgets/GraphCanvasMimeContainer.h StaticLib/GraphCanvas/Widgets/GraphCanvasMimeEvent.cpp @@ -174,8 +173,6 @@ set(FILES StaticLib/GraphCanvas/Widgets/EditorContextMenu/ContextMenuActions/NodeMenuActions/NodeContextMenuAction.h StaticLib/GraphCanvas/Widgets/EditorContextMenu/ContextMenuActions/NodeMenuActions/NodeContextMenuActions.cpp StaticLib/GraphCanvas/Widgets/EditorContextMenu/ContextMenuActions/NodeMenuActions/NodeContextMenuActions.h - StaticLib/GraphCanvas/Widgets/EditorContextMenu/ContextMenuActions/SceneMenuActions/SceneActionsMenuGroup.cpp - StaticLib/GraphCanvas/Widgets/EditorContextMenu/ContextMenuActions/SceneMenuActions/SceneActionsMenuGroup.h StaticLib/GraphCanvas/Widgets/EditorContextMenu/ContextMenuActions/SceneMenuActions/SceneContextMenuAction.h StaticLib/GraphCanvas/Widgets/EditorContextMenu/ContextMenuActions/SceneMenuActions/SceneContextMenuActions.cpp StaticLib/GraphCanvas/Widgets/EditorContextMenu/ContextMenuActions/SceneMenuActions/SceneContextMenuActions.h From 9a99d9b5ea5291fc214fbd1b19c8ec260062253d Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 3 Jan 2022 15:27:03 -0800 Subject: [PATCH 171/284] Removes ImGuiLYCurveEditor from Gems/ImGui Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Code/Include/ImGuiLYCurveEditorBus.h | 27 ----------------- .../LYCommonMenu/ImGuiLYCurveEditor.cpp | 24 --------------- .../Source/LYCommonMenu/ImGuiLYCurveEditor.h | 29 ------------------- Gems/ImGui/Code/imgui_game_files.cmake | 3 -- 4 files changed, 83 deletions(-) delete mode 100644 Gems/ImGui/Code/Include/ImGuiLYCurveEditorBus.h delete mode 100644 Gems/ImGui/Code/Source/LYCommonMenu/ImGuiLYCurveEditor.cpp delete mode 100644 Gems/ImGui/Code/Source/LYCommonMenu/ImGuiLYCurveEditor.h diff --git a/Gems/ImGui/Code/Include/ImGuiLYCurveEditorBus.h b/Gems/ImGui/Code/Include/ImGuiLYCurveEditorBus.h deleted file mode 100644 index f764e56b58..0000000000 --- a/Gems/ImGui/Code/Include/ImGuiLYCurveEditorBus.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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 - -#include - -namespace ImGui -{ - /// Bus for sending events and getting state from the ImGui manager. - class IImGuiCurveEditorRequests : public AZ::EBusTraits - { - public: - static const char* GetUniqueName() { return "IImGuiCurveEditorRequests"; } - static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Multiple; - static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single; - using Bus = AZ::EBus; - }; - - using ImGuiCurveEditorRequestBus = AZ::EBus; - -} // namespace ImGui diff --git a/Gems/ImGui/Code/Source/LYCommonMenu/ImGuiLYCurveEditor.cpp b/Gems/ImGui/Code/Source/LYCommonMenu/ImGuiLYCurveEditor.cpp deleted file mode 100644 index e61ba25e9c..0000000000 --- a/Gems/ImGui/Code/Source/LYCommonMenu/ImGuiLYCurveEditor.cpp +++ /dev/null @@ -1,24 +0,0 @@ -/* - * 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 "ImGuiLYCurveEditor.h" - -#ifdef IMGUI_ENABLED - -namespace ImGui -{ - ImGuiCurveEditor::~ImGuiCurveEditor() - { - } - - void ImGuiCurveEditor::CreateCurveEditor(const char * label, float * points, int num_points, int max_points) - { - } -} // namespace ImGui - -#endif diff --git a/Gems/ImGui/Code/Source/LYCommonMenu/ImGuiLYCurveEditor.h b/Gems/ImGui/Code/Source/LYCommonMenu/ImGuiLYCurveEditor.h deleted file mode 100644 index 6c7c0f5c90..0000000000 --- a/Gems/ImGui/Code/Source/LYCommonMenu/ImGuiLYCurveEditor.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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 -#include "ImGuiManager.h" - -#ifdef IMGUI_ENABLED -#include "ImGuiLYCurveEditorBus.h" -#include -#include - -namespace ImGui -{ - class ImGuiCurveEditor - : public ImGuiCurveEditorRequestBus::Handler - { - ImGuiCurveEditor(); - ~ImGuiCurveEditor(); - - void CreateCurveEditor(const char* label, float* points, int num_points, int max_points); - - }; -} -#endif // IMGUI_ENABLED diff --git a/Gems/ImGui/Code/imgui_game_files.cmake b/Gems/ImGui/Code/imgui_game_files.cmake index 8b677c3041..8ebd25fb1a 100644 --- a/Gems/ImGui/Code/imgui_game_files.cmake +++ b/Gems/ImGui/Code/imgui_game_files.cmake @@ -8,7 +8,6 @@ set(FILES Include/ImGuiBus.h - Include/ImGuiLYCurveEditorBus.h Source/ImGuiGem.cpp Source/ImGuiColorDefines.h Source/ImGuiManager.h @@ -17,6 +16,4 @@ set(FILES Source/LYCommonMenu/ImGuiLYCommonMenu.cpp Source/LYCommonMenu/ImGuiLYEntityOutliner.h Source/LYCommonMenu/ImGuiLYEntityOutliner.cpp - Source/LYCommonMenu/ImGuiLYCurveEditor.h - Source/LYCommonMenu/ImGuiLYCurveEditor.cpp ) From 2dfdde0bb5f87dfd5c09553983da34f96d8fb0b6 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 3 Jan 2022 15:35:40 -0800 Subject: [PATCH 172/284] Removes LmbrCentral/Physics from Gems/LmbrCentral Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Editor/Translation/scriptcanvas_en_us.ts | 1018 ----------------- .../Physics/ForceVolumeRequestBus.h | 250 ---- .../Physics/WaterNotificationBus.h | 46 - .../Physics/WindVolumeRequestBus.h | 76 -- .../Code/lmbrcentral_headers_files.cmake | 3 - 5 files changed, 1393 deletions(-) delete mode 100644 Gems/LmbrCentral/Code/include/LmbrCentral/Physics/ForceVolumeRequestBus.h delete mode 100644 Gems/LmbrCentral/Code/include/LmbrCentral/Physics/WaterNotificationBus.h delete mode 100644 Gems/LmbrCentral/Code/include/LmbrCentral/Physics/WindVolumeRequestBus.h diff --git a/Assets/Editor/Translation/scriptcanvas_en_us.ts b/Assets/Editor/Translation/scriptcanvas_en_us.ts index bfbd8cf316..5af338426c 100644 --- a/Assets/Editor/Translation/scriptcanvas_en_us.ts +++ b/Assets/Editor/Translation/scriptcanvas_en_us.ts @@ -69750,477 +69750,6 @@ The element is removed from its current parent and added as a child of the new p The name of the action triggered when the interactive element is released
- - EBus: ForceVolumeRequestBus - - FORCEVOLUMEREQUESTBUS_NAME - ForceVolumeRequestBus - - - FORCEVOLUMEREQUESTBUS_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_CATEGORY - Physics - - - FORCEVOLUMEREQUESTBUS_SETAIRDENSITY_NAME - Class/Bus: ForceVolumeRequestBus Event/Method: SetAirDensity - SetAirDensity - - - FORCEVOLUMEREQUESTBUS_SETAIRDENSITY_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_SETAIRDENSITY_CATEGORY - - - - FORCEVOLUMEREQUESTBUS_SETAIRDENSITY_OUT_NAME - - - - FORCEVOLUMEREQUESTBUS_SETAIRDENSITY_OUT_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_SETAIRDENSITY_IN_NAME - - - - FORCEVOLUMEREQUESTBUS_SETAIRDENSITY_IN_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_SETAIRDENSITY_PARAM0_NAME - Simple Type: Number C++ Type: float - - - - FORCEVOLUMEREQUESTBUS_SETAIRDENSITY_PARAM0_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_GETAIRRESISTANCE_NAME - Class/Bus: ForceVolumeRequestBus Event/Method: GetAirResistance - GetAirResistance - - - FORCEVOLUMEREQUESTBUS_GETAIRRESISTANCE_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_GETAIRRESISTANCE_CATEGORY - - - - FORCEVOLUMEREQUESTBUS_GETAIRRESISTANCE_OUT_NAME - - - - FORCEVOLUMEREQUESTBUS_GETAIRRESISTANCE_OUT_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_GETAIRRESISTANCE_IN_NAME - - - - FORCEVOLUMEREQUESTBUS_GETAIRRESISTANCE_IN_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_GETAIRRESISTANCE_OUTPUT0_NAME - C++ Type: float - Number - - - FORCEVOLUMEREQUESTBUS_GETAIRRESISTANCE_OUTPUT0_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_GETFORCEMASSDEPENDENT_NAME - Class/Bus: ForceVolumeRequestBus Event/Method: GetForceMassDependent - GetForceMassDependent - - - FORCEVOLUMEREQUESTBUS_GETFORCEMASSDEPENDENT_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_GETFORCEMASSDEPENDENT_CATEGORY - - - - FORCEVOLUMEREQUESTBUS_GETFORCEMASSDEPENDENT_OUT_NAME - - - - FORCEVOLUMEREQUESTBUS_GETFORCEMASSDEPENDENT_OUT_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_GETFORCEMASSDEPENDENT_IN_NAME - - - - FORCEVOLUMEREQUESTBUS_GETFORCEMASSDEPENDENT_IN_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_GETFORCEMASSDEPENDENT_OUTPUT0_NAME - C++ Type: bool - Boolean - - - FORCEVOLUMEREQUESTBUS_GETFORCEMASSDEPENDENT_OUTPUT0_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_SETAIRRESISTANCE_NAME - Class/Bus: ForceVolumeRequestBus Event/Method: SetAirResistance - SetAirResistance - - - FORCEVOLUMEREQUESTBUS_SETAIRRESISTANCE_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_SETAIRRESISTANCE_CATEGORY - - - - FORCEVOLUMEREQUESTBUS_SETAIRRESISTANCE_OUT_NAME - - - - FORCEVOLUMEREQUESTBUS_SETAIRRESISTANCE_OUT_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_SETAIRRESISTANCE_IN_NAME - - - - FORCEVOLUMEREQUESTBUS_SETAIRRESISTANCE_IN_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_SETAIRRESISTANCE_PARAM0_NAME - Simple Type: Number C++ Type: float - - - - FORCEVOLUMEREQUESTBUS_SETAIRRESISTANCE_PARAM0_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_GETAIRDENSITY_NAME - Class/Bus: ForceVolumeRequestBus Event/Method: GetAirDensity - GetAirDensity - - - FORCEVOLUMEREQUESTBUS_GETAIRDENSITY_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_GETAIRDENSITY_CATEGORY - - - - FORCEVOLUMEREQUESTBUS_GETAIRDENSITY_OUT_NAME - - - - FORCEVOLUMEREQUESTBUS_GETAIRDENSITY_OUT_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_GETAIRDENSITY_IN_NAME - - - - FORCEVOLUMEREQUESTBUS_GETAIRDENSITY_IN_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_GETAIRDENSITY_OUTPUT0_NAME - C++ Type: float - Number - - - FORCEVOLUMEREQUESTBUS_GETAIRDENSITY_OUTPUT0_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_GETFORCEMODE_NAME - Class/Bus: ForceVolumeRequestBus Event/Method: GetForceMode - GetForceMode - - - FORCEVOLUMEREQUESTBUS_GETFORCEMODE_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_GETFORCEMODE_CATEGORY - - - - FORCEVOLUMEREQUESTBUS_GETFORCEMODE_OUT_NAME - - - - FORCEVOLUMEREQUESTBUS_GETFORCEMODE_OUT_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_GETFORCEMODE_IN_NAME - - - - FORCEVOLUMEREQUESTBUS_GETFORCEMODE_IN_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_GETFORCEMODE_OUTPUT0_NAME - C++ Type: int - Number - - - FORCEVOLUMEREQUESTBUS_GETFORCEMODE_OUTPUT0_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_GETFORCEMAGNITUDE_NAME - Class/Bus: ForceVolumeRequestBus Event/Method: GetForceMagnitude - GetForceMagnitude - - - FORCEVOLUMEREQUESTBUS_GETFORCEMAGNITUDE_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_GETFORCEMAGNITUDE_CATEGORY - - - - FORCEVOLUMEREQUESTBUS_GETFORCEMAGNITUDE_OUT_NAME - - - - FORCEVOLUMEREQUESTBUS_GETFORCEMAGNITUDE_OUT_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_GETFORCEMAGNITUDE_IN_NAME - - - - FORCEVOLUMEREQUESTBUS_GETFORCEMAGNITUDE_IN_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_GETFORCEMAGNITUDE_OUTPUT0_NAME - C++ Type: float - Number - - - FORCEVOLUMEREQUESTBUS_GETFORCEMAGNITUDE_OUTPUT0_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_SETFORCEMODE_NAME - Class/Bus: ForceVolumeRequestBus Event/Method: SetForceMode - SetForceMode - - - FORCEVOLUMEREQUESTBUS_SETFORCEMODE_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_SETFORCEMODE_CATEGORY - - - - FORCEVOLUMEREQUESTBUS_SETFORCEMODE_OUT_NAME - - - - FORCEVOLUMEREQUESTBUS_SETFORCEMODE_OUT_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_SETFORCEMODE_IN_NAME - - - - FORCEVOLUMEREQUESTBUS_SETFORCEMODE_IN_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_SETFORCEMODE_PARAM0_NAME - Simple Type: Number C++ Type: int - - - - FORCEVOLUMEREQUESTBUS_SETFORCEMODE_PARAM0_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_SETFORCEMAGNITUDE_NAME - Class/Bus: ForceVolumeRequestBus Event/Method: SetForceMagnitude - SetForceMagnitude - - - FORCEVOLUMEREQUESTBUS_SETFORCEMAGNITUDE_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_SETFORCEMAGNITUDE_CATEGORY - - - - FORCEVOLUMEREQUESTBUS_SETFORCEMAGNITUDE_OUT_NAME - - - - FORCEVOLUMEREQUESTBUS_SETFORCEMAGNITUDE_OUT_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_SETFORCEMAGNITUDE_IN_NAME - - - - FORCEVOLUMEREQUESTBUS_SETFORCEMAGNITUDE_IN_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_SETFORCEMAGNITUDE_PARAM0_NAME - Simple Type: Number C++ Type: float - - - - FORCEVOLUMEREQUESTBUS_SETFORCEMAGNITUDE_PARAM0_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_SETFORCEMASSDEPENDENT_NAME - Class/Bus: ForceVolumeRequestBus Event/Method: SetForceMassDependent - SetForceMassDependent - - - FORCEVOLUMEREQUESTBUS_SETFORCEMASSDEPENDENT_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_SETFORCEMASSDEPENDENT_CATEGORY - - - - FORCEVOLUMEREQUESTBUS_SETFORCEMASSDEPENDENT_OUT_NAME - - - - FORCEVOLUMEREQUESTBUS_SETFORCEMASSDEPENDENT_OUT_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_SETFORCEMASSDEPENDENT_IN_NAME - - - - FORCEVOLUMEREQUESTBUS_SETFORCEMASSDEPENDENT_IN_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_SETFORCEMASSDEPENDENT_PARAM0_NAME - Simple Type: Boolean C++ Type: bool - - - - FORCEVOLUMEREQUESTBUS_SETFORCEMASSDEPENDENT_PARAM0_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_SETFORCEDIRECTION_NAME - Class/Bus: ForceVolumeRequestBus Event/Method: SetForceDirection - SetForceDirection - - - FORCEVOLUMEREQUESTBUS_SETFORCEDIRECTION_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_SETFORCEDIRECTION_CATEGORY - - - - FORCEVOLUMEREQUESTBUS_SETFORCEDIRECTION_OUT_NAME - - - - FORCEVOLUMEREQUESTBUS_SETFORCEDIRECTION_OUT_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_SETFORCEDIRECTION_IN_NAME - - - - FORCEVOLUMEREQUESTBUS_SETFORCEDIRECTION_IN_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_SETFORCEDIRECTION_PARAM0_NAME - Simple Type: Vector3 C++ Type: const Vector3& - - - - FORCEVOLUMEREQUESTBUS_SETFORCEDIRECTION_PARAM0_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_GETFORCEDIRECTION_NAME - Class/Bus: ForceVolumeRequestBus Event/Method: GetForceDirection - GetForceDirection - - - FORCEVOLUMEREQUESTBUS_GETFORCEDIRECTION_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_GETFORCEDIRECTION_CATEGORY - - - - FORCEVOLUMEREQUESTBUS_GETFORCEDIRECTION_OUT_NAME - - - - FORCEVOLUMEREQUESTBUS_GETFORCEDIRECTION_OUT_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_GETFORCEDIRECTION_IN_NAME - - - - FORCEVOLUMEREQUESTBUS_GETFORCEDIRECTION_IN_TOOLTIP - - - - FORCEVOLUMEREQUESTBUS_GETFORCEDIRECTION_OUTPUT0_NAME - C++ Type: const Vector3& - Vector3 - - - FORCEVOLUMEREQUESTBUS_GETFORCEDIRECTION_OUTPUT0_TOOLTIP - - - Handler: UiDraggableNotificationBus @@ -73260,553 +72789,6 @@ The element is removed from its current parent and added as a child of the new p The absolute position where the entity should spawn - - EBus: WindVolumeRequestBus - - WINDVOLUMEREQUESTBUS_NAME - Wind Volume - - - WINDVOLUMEREQUESTBUS_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_CATEGORY - Physics (Legacy) - - - WINDVOLUMEREQUESTBUS_GETVOLUMESIZE_NAME - Class/Bus: WindVolumeRequestBus Event/Method: GetVolumeSize - Get Volume Size - - - WINDVOLUMEREQUESTBUS_GETVOLUMESIZE_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_GETVOLUMESIZE_CATEGORY - - - - WINDVOLUMEREQUESTBUS_GETVOLUMESIZE_OUT_NAME - - - - WINDVOLUMEREQUESTBUS_GETVOLUMESIZE_OUT_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_GETVOLUMESIZE_IN_NAME - - - - WINDVOLUMEREQUESTBUS_GETVOLUMESIZE_IN_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_GETVOLUMESIZE_OUTPUT0_NAME - C++ Type: const Vector3& - Vector3 - - - WINDVOLUMEREQUESTBUS_GETVOLUMESIZE_OUTPUT0_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_GETAIRRESISTANCE_NAME - Class/Bus: WindVolumeRequestBus Event/Method: GetAirResistance - Get Air Resistance - - - WINDVOLUMEREQUESTBUS_GETAIRRESISTANCE_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_GETAIRRESISTANCE_CATEGORY - - - - WINDVOLUMEREQUESTBUS_GETAIRRESISTANCE_OUT_NAME - - - - WINDVOLUMEREQUESTBUS_GETAIRRESISTANCE_OUT_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_GETAIRRESISTANCE_IN_NAME - - - - WINDVOLUMEREQUESTBUS_GETAIRRESISTANCE_IN_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_GETAIRRESISTANCE_OUTPUT0_NAME - C++ Type: float - Number - - - WINDVOLUMEREQUESTBUS_GETAIRRESISTANCE_OUTPUT0_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_SETAIRRESISTANCE_NAME - Class/Bus: WindVolumeRequestBus Event/Method: SetAirResistance - Set Air Resistance - - - WINDVOLUMEREQUESTBUS_SETAIRRESISTANCE_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_SETAIRRESISTANCE_CATEGORY - - - - WINDVOLUMEREQUESTBUS_SETAIRRESISTANCE_OUT_NAME - - - - WINDVOLUMEREQUESTBUS_SETAIRRESISTANCE_OUT_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_SETAIRRESISTANCE_IN_NAME - - - - WINDVOLUMEREQUESTBUS_SETAIRRESISTANCE_IN_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_SETAIRRESISTANCE_PARAM0_NAME - Simple Type: Number C++ Type: float - - - - WINDVOLUMEREQUESTBUS_SETAIRRESISTANCE_PARAM0_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_GETAIRDENSITY_NAME - Class/Bus: WindVolumeRequestBus Event/Method: GetAirDensity - Get Air Density - - - WINDVOLUMEREQUESTBUS_GETAIRDENSITY_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_GETAIRDENSITY_CATEGORY - - - - WINDVOLUMEREQUESTBUS_GETAIRDENSITY_OUT_NAME - - - - WINDVOLUMEREQUESTBUS_GETAIRDENSITY_OUT_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_GETAIRDENSITY_IN_NAME - - - - WINDVOLUMEREQUESTBUS_GETAIRDENSITY_IN_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_GETAIRDENSITY_OUTPUT0_NAME - C++ Type: float - Number - - - WINDVOLUMEREQUESTBUS_GETAIRDENSITY_OUTPUT0_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_GETSPEED_NAME - Class/Bus: WindVolumeRequestBus Event/Method: GetSpeed - Get Speed - - - WINDVOLUMEREQUESTBUS_GETSPEED_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_GETSPEED_CATEGORY - - - - WINDVOLUMEREQUESTBUS_GETSPEED_OUT_NAME - - - - WINDVOLUMEREQUESTBUS_GETSPEED_OUT_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_GETSPEED_IN_NAME - - - - WINDVOLUMEREQUESTBUS_GETSPEED_IN_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_GETSPEED_OUTPUT0_NAME - C++ Type: float - Number - - - WINDVOLUMEREQUESTBUS_GETSPEED_OUTPUT0_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_SETWINDDIRECTION_NAME - Class/Bus: WindVolumeRequestBus Event/Method: SetWindDirection - Set Wind Direction - - - WINDVOLUMEREQUESTBUS_SETWINDDIRECTION_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_SETWINDDIRECTION_CATEGORY - - - - WINDVOLUMEREQUESTBUS_SETWINDDIRECTION_OUT_NAME - - - - WINDVOLUMEREQUESTBUS_SETWINDDIRECTION_OUT_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_SETWINDDIRECTION_IN_NAME - - - - WINDVOLUMEREQUESTBUS_SETWINDDIRECTION_IN_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_SETWINDDIRECTION_PARAM0_NAME - Simple Type: Vector3 C++ Type: const Vector3& - - - - WINDVOLUMEREQUESTBUS_SETWINDDIRECTION_PARAM0_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_GETWINDDIRECTION_NAME - Class/Bus: WindVolumeRequestBus Event/Method: GetWindDirection - Get Wind Direction - - - WINDVOLUMEREQUESTBUS_GETWINDDIRECTION_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_GETWINDDIRECTION_CATEGORY - - - - WINDVOLUMEREQUESTBUS_GETWINDDIRECTION_OUT_NAME - - - - WINDVOLUMEREQUESTBUS_GETWINDDIRECTION_OUT_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_GETWINDDIRECTION_IN_NAME - - - - WINDVOLUMEREQUESTBUS_GETWINDDIRECTION_IN_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_GETWINDDIRECTION_OUTPUT0_NAME - C++ Type: const Vector3& - Vector3 - - - WINDVOLUMEREQUESTBUS_GETWINDDIRECTION_OUTPUT0_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_SETSPEED_NAME - Class/Bus: WindVolumeRequestBus Event/Method: SetSpeed - Set Speed - - - WINDVOLUMEREQUESTBUS_SETSPEED_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_SETSPEED_CATEGORY - - - - WINDVOLUMEREQUESTBUS_SETSPEED_OUT_NAME - - - - WINDVOLUMEREQUESTBUS_SETSPEED_OUT_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_SETSPEED_IN_NAME - - - - WINDVOLUMEREQUESTBUS_SETSPEED_IN_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_SETSPEED_PARAM0_NAME - Simple Type: Number C++ Type: float - - - - WINDVOLUMEREQUESTBUS_SETSPEED_PARAM0_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_SETVOLUMESIZE_NAME - Class/Bus: WindVolumeRequestBus Event/Method: SetVolumeSize - Set Volume Size - - - WINDVOLUMEREQUESTBUS_SETVOLUMESIZE_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_SETVOLUMESIZE_CATEGORY - - - - WINDVOLUMEREQUESTBUS_SETVOLUMESIZE_OUT_NAME - - - - WINDVOLUMEREQUESTBUS_SETVOLUMESIZE_OUT_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_SETVOLUMESIZE_IN_NAME - - - - WINDVOLUMEREQUESTBUS_SETVOLUMESIZE_IN_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_SETVOLUMESIZE_PARAM0_NAME - Simple Type: Vector3 C++ Type: const Vector3& - - - - WINDVOLUMEREQUESTBUS_SETVOLUMESIZE_PARAM0_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_GETELLIPSOIDAL_NAME - Class/Bus: WindVolumeRequestBus Event/Method: GetEllipsoidal - Get Ellipsoidal - - - WINDVOLUMEREQUESTBUS_GETELLIPSOIDAL_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_GETELLIPSOIDAL_CATEGORY - - - - WINDVOLUMEREQUESTBUS_GETELLIPSOIDAL_OUT_NAME - - - - WINDVOLUMEREQUESTBUS_GETELLIPSOIDAL_OUT_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_GETELLIPSOIDAL_IN_NAME - - - - WINDVOLUMEREQUESTBUS_GETELLIPSOIDAL_IN_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_GETELLIPSOIDAL_OUTPUT0_NAME - C++ Type: bool - Boolean - - - WINDVOLUMEREQUESTBUS_GETELLIPSOIDAL_OUTPUT0_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_GETFALLOFFINNER_NAME - Class/Bus: WindVolumeRequestBus Event/Method: GetFalloffInner - Get Falloff Inner - - - WINDVOLUMEREQUESTBUS_GETFALLOFFINNER_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_GETFALLOFFINNER_CATEGORY - - - - WINDVOLUMEREQUESTBUS_GETFALLOFFINNER_OUT_NAME - - - - WINDVOLUMEREQUESTBUS_GETFALLOFFINNER_OUT_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_GETFALLOFFINNER_IN_NAME - - - - WINDVOLUMEREQUESTBUS_GETFALLOFFINNER_IN_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_GETFALLOFFINNER_OUTPUT0_NAME - C++ Type: float - Number - - - WINDVOLUMEREQUESTBUS_GETFALLOFFINNER_OUTPUT0_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_SETELLIPSOIDAL_NAME - Class/Bus: WindVolumeRequestBus Event/Method: SetEllipsoidal - Set Ellipsoidal - - - WINDVOLUMEREQUESTBUS_SETELLIPSOIDAL_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_SETELLIPSOIDAL_CATEGORY - - - - WINDVOLUMEREQUESTBUS_SETELLIPSOIDAL_OUT_NAME - - - - WINDVOLUMEREQUESTBUS_SETELLIPSOIDAL_OUT_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_SETELLIPSOIDAL_IN_NAME - - - - WINDVOLUMEREQUESTBUS_SETELLIPSOIDAL_IN_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_SETELLIPSOIDAL_PARAM0_NAME - Simple Type: Boolean C++ Type: bool - - - - WINDVOLUMEREQUESTBUS_SETELLIPSOIDAL_PARAM0_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_SETFALLOFFINNER_NAME - Class/Bus: WindVolumeRequestBus Event/Method: SetFalloffInner - Set Falloff Inner - - - WINDVOLUMEREQUESTBUS_SETFALLOFFINNER_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_SETFALLOFFINNER_CATEGORY - - - - WINDVOLUMEREQUESTBUS_SETFALLOFFINNER_OUT_NAME - - - - WINDVOLUMEREQUESTBUS_SETFALLOFFINNER_OUT_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_SETFALLOFFINNER_IN_NAME - - - - WINDVOLUMEREQUESTBUS_SETFALLOFFINNER_IN_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_SETFALLOFFINNER_PARAM0_NAME - Simple Type: Number C++ Type: float - - - - WINDVOLUMEREQUESTBUS_SETFALLOFFINNER_PARAM0_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_SETAIRDENSITY_NAME - Class/Bus: WindVolumeRequestBus Event/Method: SetAirDensity - Set Air Density - - - WINDVOLUMEREQUESTBUS_SETAIRDENSITY_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_SETAIRDENSITY_CATEGORY - - - - WINDVOLUMEREQUESTBUS_SETAIRDENSITY_OUT_NAME - - - - WINDVOLUMEREQUESTBUS_SETAIRDENSITY_OUT_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_SETAIRDENSITY_IN_NAME - - - - WINDVOLUMEREQUESTBUS_SETAIRDENSITY_IN_TOOLTIP - - - - WINDVOLUMEREQUESTBUS_SETAIRDENSITY_PARAM0_NAME - Simple Type: Number C++ Type: float - - - - WINDVOLUMEREQUESTBUS_SETAIRDENSITY_PARAM0_TOOLTIP - - - EBus: ActorComponentNotificationBus diff --git a/Gems/LmbrCentral/Code/include/LmbrCentral/Physics/ForceVolumeRequestBus.h b/Gems/LmbrCentral/Code/include/LmbrCentral/Physics/ForceVolumeRequestBus.h deleted file mode 100644 index 35a630c4ca..0000000000 --- a/Gems/LmbrCentral/Code/include/LmbrCentral/Physics/ForceVolumeRequestBus.h +++ /dev/null @@ -1,250 +0,0 @@ -/* - * 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 - -#include -#include -#include -#include -#include - -namespace LmbrCentral -{ - /** - * Parameters of an entity in the force volume. - * Used to calculate final force. - */ - struct EntityParams - { - AZ::EntityId m_id; - AZ::Vector3 m_position; - AZ::Vector3 m_velocity; - AZ::Aabb m_aabb; - float m_mass; - }; - - /** - * Parameters of the force volume. - * Used to calculate final force. - */ - struct VolumeParams - { - AZ::EntityId m_id; - AZ::Vector3 m_position; - AZ::Quaternion m_rotation; - AZ::SplinePtr m_spline; - AZ::Aabb m_aabb; - }; - - /** - * Represents a single force in the force volume. - * - * Developers should implement this interface and register - * their class with the EditContext to have their custom - * force appear in the ForceVolume dropdown box in the editor. - */ - class Force - { - public: - AZ_CLASS_ALLOCATOR(Force, AZ::SystemAllocator, 0); - AZ_RTTI(Force, "{9BD236BD-4580-4D6F-B02F-F8F431EBA593}"); - static void Reflect(AZ::SerializeContext& context) - { - context.Class(); - } - virtual ~Force() = default; - - /** - * Connect to any busses. - */ - virtual void Activate(AZ::EntityId /*entityId*/) {} - - /** - * Disconnect from any busses. - */ - virtual void Deactivate() {} - - /** - * Calculate the size and direction the force. - */ - virtual AZ::Vector3 CalculateForce(const EntityParams& /*entityParams*/, const VolumeParams& /*volumeParams*/) - { - return AZ::Vector3::CreateZero(); - } - }; - - /** - * Requests serviced by the WorldSpaceForce. - */ - class WorldSpaceForceRequests - : public AZ::ComponentBus - { - public: - /** - * @brief Sets the direction of the force in worldspace. - */ - virtual void SetDirection(const AZ::Vector3& direction) = 0; - - /** - * @brief Gets the direction of the force in world space. - */ - virtual const AZ::Vector3& GetDirection() = 0; - - /** - * @brief Sets the magnitude of the force. - */ - virtual void SetMagnitude(float magnitude) = 0; - - /** - * @brief Gets the magnitude of the force. - */ - virtual float GetMagnitude() = 0; - }; - - using WorldSpaceForceRequestBus = AZ::EBus; - - /** - * Requests serviced by the LocalSpaceForce. - */ - class LocalSpaceForceRequests - : public AZ::ComponentBus - { - public: - /** - * @brief Sets the direction of the force in localspace. - */ - virtual void SetDirection(const AZ::Vector3& direction) = 0; - - /** - * @brief Gets the direction of the force in local space. - */ - virtual const AZ::Vector3& GetDirection() = 0; - - /** - * @brief Sets the magnitude of the force. - */ - virtual void SetMagnitude(float magnitude) = 0; - - /** - * @brief Gets the magnitude of the force. - */ - virtual float GetMagnitude() = 0; - }; - - using LocalSpaceForceRequestBus = AZ::EBus; - - /** - * Requests serviced by the PointSpaceForce. - */ - class PointForceRequests - : public AZ::ComponentBus - { - public: - /** - * @brief Sets the magnitude of the force. - */ - virtual void SetMagnitude(float magnitude) = 0; - - /** - * @brief Gets the magnitude of the force. - */ - virtual float GetMagnitude() = 0; - }; - - using PointForceRequestBus = AZ::EBus; - - /** - * Requests serviced by the PointSpaceForce. - */ - class SplineFollowForceRequests - : public AZ::ComponentBus - { - public: - /** - * @brief Sets the damping ratio of the force. - */ - virtual void SetDampingRatio(float ratio) = 0; - - /** - * @brief Gets the damping ratio of the force. - */ - virtual float GetDampingRatio() = 0; - - /** - * @brief Sets the frequency of the force. - */ - virtual void SetFrequency(float frequency) = 0; - - /** - * @brief Gets the frequency of the force. - */ - virtual float GetFrequency() = 0; - - /** - * @brief Sets the traget speed of the force. - */ - virtual void SetTargetSpeed(float targetSpeed) = 0; - - /** - * @brief Gets the target speed of the force. - */ - virtual float GetTargetSpeed() = 0; - - /** - * @brief Sets the lookahead of the force. - */ - virtual void SetLookAhead(float lookAhead) = 0; - - /** - * @brief Gets the lookahead of the force. - */ - virtual float GetLookAhead() = 0; - }; - - using SplineFollowForceRequestBus = AZ::EBus; - - /** - * Requests serviced by the LocalSpaceForce. - */ - class SimpleDragForceRequests - : public AZ::ComponentBus - { - public: - /** - * @brief Sets the density of the volume. - */ - virtual void SetDensity(float density) = 0; - - /** - * @brief Gets the density of the volume. - */ - virtual float GetDensity() = 0; - }; - - using SimpleDragForceRequestBus = AZ::EBus; - - /** - * Requests serviced by the LocalSpaceForce. - */ - class LinearDampingForceRequests - : public AZ::ComponentBus - { - public: - /** - * @brief Sets the damping amount of the force. - */ - virtual void SetDamping(float damping) = 0; - - /** - * @brief Gets the damping amount of the force. - */ - virtual float GetDamping() = 0; - }; - - using LinearDampingForceRequestBus = AZ::EBus; -} diff --git a/Gems/LmbrCentral/Code/include/LmbrCentral/Physics/WaterNotificationBus.h b/Gems/LmbrCentral/Code/include/LmbrCentral/Physics/WaterNotificationBus.h deleted file mode 100644 index 8ad7b1aa8f..0000000000 --- a/Gems/LmbrCentral/Code/include/LmbrCentral/Physics/WaterNotificationBus.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * 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 - -#include - -namespace AZ -{ - class Transform; -} - -namespace LmbrCentral -{ - /** - * Broadcasts change notifications from the water ocean and water volume components - */ - class WaterNotifications - : public AZ::EBusTraits - { - public: - //////////////////////////////////////////////////////////////////////// - // EBusTraits - static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Multiple; - static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single; - //////////////////////////////////////////////////////////////////////// - - //! allows multiple threads to call - using MutexType = AZStd::recursive_mutex; - - //! Notifies when the height of the ocean changes - virtual void OceanHeightChanged([[maybe_unused]] float height) {} - - //! Notifies when a water volume is moved - virtual void WaterVolumeTransformChanged([[maybe_unused]] AZ::EntityId entityId, [[maybe_unused]] const AZ::Transform& worldTransform) {} - - //! Notifies when a water volume shape is changed - virtual void WaterVolumeShapeChanged([[maybe_unused]] AZ::EntityId entityId) {} - }; - - using WaterNotificationBus = AZ::EBus; -} diff --git a/Gems/LmbrCentral/Code/include/LmbrCentral/Physics/WindVolumeRequestBus.h b/Gems/LmbrCentral/Code/include/LmbrCentral/Physics/WindVolumeRequestBus.h deleted file mode 100644 index 4b814685d3..0000000000 --- a/Gems/LmbrCentral/Code/include/LmbrCentral/Physics/WindVolumeRequestBus.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - * 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 - -#include -#include - -namespace LmbrCentral -{ - /** - * Messages serviced by the WindVolumeComponent - */ - class WindVolumeRequests - : public AZ::ComponentBus - { - public: - /** - * Sets the falloff. Only affects the wind speed in the volume. A value of 0 will reduce the speed from the center towards the edge of the volume. - * A value of 1 or greater will have no effect. - */ - virtual void SetFalloff(float falloff) = 0; - - /** - * Gets the falloff. - */ - virtual float GetFalloff() = 0; - - /** - * Sets the speed of the wind. The air resistance must be non zero to affect physical objects. - */ - virtual void SetSpeed(float speed) = 0; - - /** - * Gets the speed of the wind. - */ - virtual float GetSpeed() = 0; - - /** - * Sets the air resistance causing objects moving through the volume to slow down. - */ - virtual void SetAirResistance(float airResistance) = 0; - - /** - * Gets the air resistance. - */ - virtual float GetAirResistance() = 0; - - /** - * Sets the density of the volume. - * Objects with lower density will experience a buoyancy force. Objects with higher density will sink. - */ - virtual void SetAirDensity(float airDensity) = 0; - - /** - * Gets the air density. - */ - virtual float GetAirDensity() = 0; - - /** - * Sets the direction the wind is blowing. If zero, then the direction is considered omnidirectional. - */ - virtual void SetWindDirection(const AZ::Vector3& direction) = 0; - - /** - * Gets the direction the wind is blowing. - */ - virtual const AZ::Vector3& GetWindDirection() = 0; - }; - - using WindVolumeRequestBus = AZ::EBus; -} diff --git a/Gems/LmbrCentral/Code/lmbrcentral_headers_files.cmake b/Gems/LmbrCentral/Code/lmbrcentral_headers_files.cmake index 270a46cf32..cd8f3eff21 100644 --- a/Gems/LmbrCentral/Code/lmbrcentral_headers_files.cmake +++ b/Gems/LmbrCentral/Code/lmbrcentral_headers_files.cmake @@ -27,9 +27,6 @@ set(FILES include/LmbrCentral/Dependency/DependencyMonitor.h include/LmbrCentral/Dependency/DependencyMonitor.inl include/LmbrCentral/Dependency/DependencyNotificationBus.h - include/LmbrCentral/Physics/WindVolumeRequestBus.h - include/LmbrCentral/Physics/ForceVolumeRequestBus.h - include/LmbrCentral/Physics/WaterNotificationBus.h include/LmbrCentral/Rendering/DecalComponentBus.h include/LmbrCentral/Rendering/LightComponentBus.h include/LmbrCentral/Rendering/MaterialAsset.h From 2a7fe4efcf4742522ca418e18250462822ae50eb Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 3 Jan 2022 16:12:38 -0800 Subject: [PATCH 173/284] Removes multiple Rendering files from LmbrCentral that are no longer used Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Editor/CryEditDoc.cpp | 44 +--- Code/Editor/CryEditDoc.h | 1 - .../SandboxIntegration.cpp | 1 - .../UI/AssetCatalogModel.cpp | 1 - Gems/LmbrCentral/Code/Source/LmbrCentral.cpp | 1 - .../LmbrCentral/Rendering/DecalComponentBus.h | 74 ------- .../Rendering/EditorLightComponentBus.h | 195 ------------------ .../LmbrCentral/Rendering/GiRegistrationBus.h | 39 ---- .../LmbrCentral/Rendering/LensFlareAsset.h | 32 --- .../LmbrCentral/Rendering/LightComponentBus.h | 164 --------------- .../LmbrCentral/Rendering/MaterialHandle.h | 54 ----- .../Rendering/MeshModificationBus.h | 132 ------------ .../Code/lmbrcentral_editor_files.cmake | 1 - .../Code/lmbrcentral_headers_files.cmake | 5 - 14 files changed, 2 insertions(+), 742 deletions(-) delete mode 100644 Gems/LmbrCentral/Code/include/LmbrCentral/Rendering/DecalComponentBus.h delete mode 100644 Gems/LmbrCentral/Code/include/LmbrCentral/Rendering/EditorLightComponentBus.h delete mode 100644 Gems/LmbrCentral/Code/include/LmbrCentral/Rendering/GiRegistrationBus.h delete mode 100644 Gems/LmbrCentral/Code/include/LmbrCentral/Rendering/LensFlareAsset.h delete mode 100644 Gems/LmbrCentral/Code/include/LmbrCentral/Rendering/LightComponentBus.h delete mode 100644 Gems/LmbrCentral/Code/include/LmbrCentral/Rendering/MaterialHandle.h delete mode 100644 Gems/LmbrCentral/Code/include/LmbrCentral/Rendering/MeshModificationBus.h diff --git a/Code/Editor/CryEditDoc.cpp b/Code/Editor/CryEditDoc.cpp index 9d93fd5f5b..bcd3efd770 100644 --- a/Code/Editor/CryEditDoc.cpp +++ b/Code/Editor/CryEditDoc.cpp @@ -57,7 +57,6 @@ // LmbrCentral #include -#include // for LmbrCentral::EditorLightComponentRequestBus static const char* kAutoBackupFolder = "_autobackup"; static const char* kHoldFolder = "$tmp_hold"; // conform to the ignored file types $tmp[0-9]*_ regex @@ -2130,52 +2129,13 @@ void CCryEditDoc::ReleaseXmlArchiveArray(TDocMultiArchive& arrXmlAr) ////////////////////////////////////////////////////////////////////////// // AzToolsFramework::EditorEntityContextNotificationBus interface implementation -void CCryEditDoc::OnSliceInstantiated(const AZ::Data::AssetId& sliceAssetId, AZ::SliceComponent::SliceInstanceAddress& sliceAddress, const AzFramework::SliceInstantiationTicket& /*ticket*/) +void CCryEditDoc::OnSliceInstantiated([[maybe_unused]] const AZ::Data::AssetId& sliceAssetId, [[maybe_unused]] AZ::SliceComponent::SliceInstanceAddress& sliceAddress, [[maybe_unused]] const AzFramework::SliceInstantiationTicket& /*ticket*/) { - if (m_envProbeSliceAssetId == sliceAssetId) - { - const AZ::SliceComponent::EntityList& entities = sliceAddress.GetInstance()->GetInstantiated()->m_entities; - const AZ::Uuid editorEnvProbeComponentId("{8DBD6035-583E-409F-AFD9-F36829A0655D}"); - AzToolsFramework::EntityIdList entityIds; - entityIds.reserve(entities.size()); - for (const AZ::Entity* entity : entities) - { - if (entity->FindComponent(editorEnvProbeComponentId)) - { - // Update Probe Area size to cover the whole terrain - LmbrCentral::EditorLightComponentRequestBus::Event(entity->GetId(), &LmbrCentral::EditorLightComponentRequests::SetProbeAreaDimensions, AZ::Vector3(m_terrainSize, m_terrainSize, m_envProbeHeight)); - - // Force update the light to apply cubemap - LmbrCentral::EditorLightComponentRequestBus::Event(entity->GetId(), &LmbrCentral::EditorLightComponentRequests::RefreshLight); - } - entityIds.push_back(entity->GetId()); - } - - //Detach instantiated env probe entities from engine slice - AzToolsFramework::SliceEditorEntityOwnershipServiceRequestBus::Broadcast( - &AzToolsFramework::SliceEditorEntityOwnershipServiceRequests::DetachSliceEntities, entityIds); - - sliceAddress.SetInstance(nullptr); - sliceAddress.SetReference(nullptr); - SetModifiedFlag(true); - SetModifiedModules(eModifiedEntities); - - AzToolsFramework::SliceEditorEntityOwnershipServiceNotificationBus::Handler::BusDisconnect(); - - //save after level default slice fully instantiated - Save(); - } GetIEditor()->ResumeUndo(); } - -void CCryEditDoc::OnSliceInstantiationFailed(const AZ::Data::AssetId& sliceAssetId, const AzFramework::SliceInstantiationTicket& /*ticket*/) +void CCryEditDoc::OnSliceInstantiationFailed([[maybe_unused]] const AZ::Data::AssetId& sliceAssetId, [[maybe_unused]] const AzFramework::SliceInstantiationTicket& /*ticket*/) { - if (m_envProbeSliceAssetId == sliceAssetId) - { - AzToolsFramework::SliceEditorEntityOwnershipServiceNotificationBus::Handler::BusDisconnect(); - AZ_Warning("Editor", false, "Failed to instantiate default environment probe slice."); - } GetIEditor()->ResumeUndo(); } ////////////////////////////////////////////////////////////////////////// diff --git a/Code/Editor/CryEditDoc.h b/Code/Editor/CryEditDoc.h index 5d20bddf45..3874914396 100644 --- a/Code/Editor/CryEditDoc.h +++ b/Code/Editor/CryEditDoc.h @@ -200,7 +200,6 @@ protected: QString m_pathName; QString m_slicePathName; QString m_title; - AZ::Data::AssetId m_envProbeSliceAssetId; float m_terrainSize; const char* m_envProbeSliceRelativePath = "EngineAssets/Slices/DefaultLevelSetup.slice"; const float m_envProbeHeight = 200.0f; diff --git a/Code/Editor/Plugins/ComponentEntityEditorPlugin/SandboxIntegration.cpp b/Code/Editor/Plugins/ComponentEntityEditorPlugin/SandboxIntegration.cpp index 69b195d243..b88c7f8d60 100644 --- a/Code/Editor/Plugins/ComponentEntityEditorPlugin/SandboxIntegration.cpp +++ b/Code/Editor/Plugins/ComponentEntityEditorPlugin/SandboxIntegration.cpp @@ -69,7 +69,6 @@ #include "ISourceControl.h" #include "UI/QComponentEntityEditorMainWindow.h" -#include #include #include diff --git a/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/AssetCatalogModel.cpp b/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/AssetCatalogModel.cpp index 60fda239dc..b1233b8387 100644 --- a/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/AssetCatalogModel.cpp +++ b/Code/Editor/Plugins/ComponentEntityEditorPlugin/UI/AssetCatalogModel.cpp @@ -16,7 +16,6 @@ #include #include -#include #include #include diff --git a/Gems/LmbrCentral/Code/Source/LmbrCentral.cpp b/Gems/LmbrCentral/Code/Source/LmbrCentral.cpp index 84ef11b35d..76f50b5ea6 100644 --- a/Gems/LmbrCentral/Code/Source/LmbrCentral.cpp +++ b/Gems/LmbrCentral/Code/Source/LmbrCentral.cpp @@ -60,7 +60,6 @@ #include #include #include -#include // Scriptable Ebus Registration #include "Events/ReflectScriptableEvents.h" diff --git a/Gems/LmbrCentral/Code/include/LmbrCentral/Rendering/DecalComponentBus.h b/Gems/LmbrCentral/Code/include/LmbrCentral/Rendering/DecalComponentBus.h deleted file mode 100644 index a184f37b4e..0000000000 --- a/Gems/LmbrCentral/Code/include/LmbrCentral/Rendering/DecalComponentBus.h +++ /dev/null @@ -1,74 +0,0 @@ -/* - * 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 - -#include -#include - -namespace LmbrCentral -{ - /*! - * DecalComponentRequests::Bus - * Messages serviced by the Decal component. - */ - class DecalComponentRequests - : public AZ::ComponentBus - { - public: - - virtual ~DecalComponentRequests() {} - - /** - * Makes the decal visible. - */ - virtual void Show() = 0; - - /** - * Hides the decal. - */ - virtual void Hide() = 0; - - /** - * Specify the decal's visibility. - * \param visible true to make the decal visible, false to hide it. - */ - virtual void SetVisibility(bool visible) = 0; - }; - - using DecalComponentRequestBus = AZ::EBus; - - /*! - * DecalComponentEditorRequests::Bus - * Editor/UI messages serviced by the Decal component. - */ - class DecalComponentEditorRequests - : public AZ::ComponentBus - { - public: - - using Bus = AZ::EBus; - - virtual ~DecalComponentEditorRequests() {} - - virtual void RefreshDecal() {} - }; - - /*! - * DecalComponentEvents::Bus - * Events dispatched by the Decal component. - */ - class DecalComponentEvents - : public AZ::ComponentBus - { - public: - - using Bus = AZ::EBus; - - virtual ~DecalComponentEvents() {} - }; -} // namespace LmbrCentral diff --git a/Gems/LmbrCentral/Code/include/LmbrCentral/Rendering/EditorLightComponentBus.h b/Gems/LmbrCentral/Code/include/LmbrCentral/Rendering/EditorLightComponentBus.h deleted file mode 100644 index d7747c5094..0000000000 --- a/Gems/LmbrCentral/Code/include/LmbrCentral/Rendering/EditorLightComponentBus.h +++ /dev/null @@ -1,195 +0,0 @@ -/* - * 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 - -#include -#include -#include - -namespace LmbrCentral -{ - class LightConfiguration; - - /*! - * EditorLightComponentRequestBus - * Editor/UI messages serviced by the light component. - */ - class EditorLightComponentRequests - : public AZ::ComponentBus - { - public: - virtual ~EditorLightComponentRequests() {} - - //! Recreates the render light. - virtual void RefreshLight() {} - - //! Sets the active cubemap resource. - virtual void SetCubemap(const AZStd::string& /*cubemap*/) {} - virtual void SetProjectorTexture(const AZStd::string& /*projectorTexture*/) {} - - //! Retrieves configured cubemap resolution for generation. - virtual AZ::u32 GetCubemapResolution() { return 0; } - //! Sets cubemap resolution for generation. See LightConfiguration::ResolutionSetting for options. - virtual void SetCubemapResolution(AZ::u32 /*resolution*/) = 0; - - //! Retrieves Configuration - virtual const LightConfiguration& GetConfiguration() const = 0; - - //! get if it's customized cubemap - virtual bool UseCustomizedCubemap() const { return false; } - //////////////////////////////////////////////////////////////////// - // Modifiers - these must match the same virtual methods in LightComponentRequests - - // General Light Settings - virtual void SetVisible(bool /*isVisible*/) {} - virtual bool GetVisible() { return true; } - - // Turned on by default? - virtual void SetOnInitially(bool /*onInitially*/) {} - virtual bool GetOnInitially() { return true; } - - virtual void SetColor(const AZ::Color& /*newColor*/) {} - virtual const AZ::Color GetColor() { return AZ::Color::CreateOne(); } - - virtual void SetDiffuseMultiplier(float /*newMultiplier*/) {} - virtual float GetDiffuseMultiplier() { return FLT_MAX; } - - virtual void SetSpecularMultiplier(float /*newMultiplier*/) {} - virtual float GetSpecularMultiplier() { return FLT_MAX; } - - virtual void SetAmbient(bool /*isAmbient*/) {} - virtual bool GetAmbient() { return true; } - - virtual void SetIndoorOnly(bool /*indoorOnly*/) {} - virtual bool GetIndoorOnly() { return false; } - - virtual void SetCastShadowSpec(AZ::u32 /*castShadowSpec*/) {} - virtual AZ::u32 GetCastShadowSpec() { return 0; } - - virtual void SetViewDistanceMultiplier(float /*viewDistanceMultiplier*/) {} - virtual float GetViewDistanceMultiplier() { return 0.0f; } - - virtual void SetVolumetricFog(bool /*volumetricFog*/) {} - virtual bool GetVolumetricFog() { return false; } - - virtual void SetVolumetricFogOnly(bool /*volumetricFogOnly*/) {} - virtual bool GetVolumetricFogOnly() { return false; } - - virtual void SetUseVisAreas(bool /*useVisAreas*/) {} - virtual bool GetUseVisAreas() { return false; } - - virtual void SetAffectsThisAreaOnly(bool /*affectsThisAreaOnly*/) {} - virtual bool GetAffectsThisAreaOnly() { return false; } - - // Point Light Specific Modifiers - virtual void SetPointMaxDistance(float /*newMaxDistance*/) {} - virtual float GetPointMaxDistance() { return FLT_MAX; } - - virtual void SetPointAttenuationBulbSize(float /*newAttenuationBulbSize*/) {} - virtual float GetPointAttenuationBulbSize() { return FLT_MAX; } - - // Area Light Specific Modifiers - virtual void SetAreaMaxDistance(float /*newMaxDistance*/) {} - virtual float GetAreaMaxDistance() { return FLT_MAX; } - - virtual void SetAreaWidth(float /*newWidth*/) {} - virtual float GetAreaWidth() { return FLT_MAX; } - - virtual void SetAreaHeight(float /*newHeight*/) {} - virtual float GetAreaHeight() { return FLT_MAX; } - - virtual void SetAreaFOV(float /*newFOV*/) {} - virtual float GetAreaFOV() { return FLT_MAX; } - - // Project Light Specific Modifiers - virtual void SetProjectorMaxDistance(float /*newMaxDistance*/) {} - virtual float GetProjectorMaxDistance() { return FLT_MAX; } - - virtual void SetProjectorAttenuationBulbSize(float /*newAttenuationBulbSize*/) {} - virtual float GetProjectorAttenuationBulbSize() { return FLT_MAX; } - - virtual void SetProjectorFOV(float /*newFOV*/) {} - virtual float GetProjectorFOV() { return FLT_MAX; } - - virtual void SetProjectorNearPlane(float /*newNearPlane*/) {} - virtual float GetProjectorNearPlane() { return FLT_MAX; } - - // Environment Probe Settings - virtual void SetProbeAreaDimensions(const AZ::Vector3& newDimensions) { (void)newDimensions; } - virtual const AZ::Vector3 GetProbeAreaDimensions() { return AZ::Vector3::CreateOne(); } - - virtual void SetProbeSortPriority(AZ::u32 newPriority) { (void)newPriority; } - virtual AZ::u32 GetProbeSortPriority() { return 0; } - - virtual void SetProbeBoxProjected(bool isProbeBoxProjected) { (void)isProbeBoxProjected; } - virtual bool GetProbeBoxProjected() { return false; } - - virtual void SetProbeBoxHeight(float newHeight) { (void)newHeight; } - virtual float GetProbeBoxHeight() { return FLT_MAX; } - - virtual void SetProbeBoxLength(float newLength) { (void)newLength; } - virtual float GetProbeBoxLength() { return FLT_MAX; } - - virtual void SetProbeBoxWidth(float newWidth) { (void)newWidth; } - virtual float GetProbeBoxWidth() { return FLT_MAX; } - - virtual void SetProbeAttenuationFalloff(float newAttenuationFalloff) { (void)newAttenuationFalloff; } - virtual float GetProbeAttenuationFalloff() { return FLT_MAX; } - - virtual void SetProbeFade(float fade) { (void)fade; } - virtual float GetProbeFade() { return 1.0f; } - - // Environment Light Specific Modifiers (probes) - virtual void SetProbeArea(const AZ::Vector3& /*probeArea*/) {} - virtual AZ::Vector3 GetProbeArea() { return AZ::Vector3::CreateZero(); } - - virtual void SetAttenuationFalloffMax(float /*attenFalloffMax*/) {} - virtual float GetAttenuationFalloffMax() { return 0; } - - virtual void SetBoxHeight(float /*boxHeight*/) {} - virtual float GetBoxHeight() { return 0.0f; } - - virtual void SetBoxWidth(float /*boxWidth*/) {} - virtual float GetBoxWidth() { return 0.0f; } - - virtual void SetBoxLength(float /*boxLength*/) {} - virtual float GetBoxLength() { return 0.0f; } - - virtual void SetBoxProjected(bool /*boxProjected*/) {} - virtual bool GetBoxProjected() { return false; } - //////////////////////////////////////////////////////////////////// - - // Shadow parameters - virtual void SetShadowBias(float /*shadowBias*/) {} - virtual float GetShadowBias() { return 0.0f; } - - virtual void SetShadowSlopeBias(float /*shadowSlopeBias*/) {} - virtual float GetShadowSlopeBias() { return 0.0f; } - - virtual void SetShadowResScale(float /*shadowResScale*/) {} - virtual float GetShadowResScale() { return 0.0f; } - - virtual void SetShadowUpdateMinRadius(float /*shadowUpdateMinRadius*/) {} - virtual float GetShadowUpdateMinRadius() { return 0.0f; } - - virtual void SetShadowUpdateRatio(float /*shadowUpdateRatio*/) {} - virtual float GetShadowUpdateRatio() { return 0.0f; } - - // Animation parameters - virtual void SetAnimIndex(AZ::u32 /*animIndex*/) {} - virtual AZ::u32 GetAnimIndex() { return 0; } - - virtual void SetAnimSpeed(float /*animSpeed*/) {} - virtual float GetAnimSpeed() { return 0.0f; } - - virtual void SetAnimPhase(float /*animPhase*/) {} - virtual float GetAnimPhase() { return 0.0f; } - }; - - using EditorLightComponentRequestBus = AZ::EBus; -} // namespace LmbrCentral diff --git a/Gems/LmbrCentral/Code/include/LmbrCentral/Rendering/GiRegistrationBus.h b/Gems/LmbrCentral/Code/include/LmbrCentral/Rendering/GiRegistrationBus.h deleted file mode 100644 index 0bb4363add..0000000000 --- a/Gems/LmbrCentral/Code/include/LmbrCentral/Rendering/GiRegistrationBus.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * 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 - -#include -#include - -namespace LmbrCentral -{ - /*! - * Messages for handling SVOGI registration. - */ - class GiRegistration - : public AZ::EBusTraits - { - public: - ////////////////////////////////////////////////////////////////////////// - // EBusTraits overrides - static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Single; - static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single; - using MutexType = AZStd::recursive_mutex; - // static const bool LocklessDispatch = true - - //Upsert will unpack the mesh, transform, world aabb and material and upsert to the gi system. - //If something is already registered on this entityId it will be removed then reinserted. - virtual void UpsertToGi(AZ::EntityId entityId, AZ::Transform transform, AZ::Aabb worldAabb, - AZ::Data::Asset meshAsset, _smart_ptr material) = 0; - //Remove will remove any data associated with the entityId. - virtual void RemoveFromGi(AZ::EntityId entityId) = 0; - }; - - using GiRegistrationBus = AZ::EBus; - -} // namespace LmbrCentral diff --git a/Gems/LmbrCentral/Code/include/LmbrCentral/Rendering/LensFlareAsset.h b/Gems/LmbrCentral/Code/include/LmbrCentral/Rendering/LensFlareAsset.h deleted file mode 100644 index 3267397e72..0000000000 --- a/Gems/LmbrCentral/Code/include/LmbrCentral/Rendering/LensFlareAsset.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * 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 - -#include -#include -#include - -namespace LmbrCentral -{ - class LensFlareAsset - : public AZ::Data::AssetData - { - friend class LensFlareAssetHandler; - - public: - AZ_RTTI(LensFlareAsset, "{CF44D1F0-F178-4A3D-A9E6-D44721F50C20}", AZ::Data::AssetData); - AZ_CLASS_ALLOCATOR(LensFlareAsset, AZ::SystemAllocator, 0); - - const AZStd::vector& GetPaths() { return m_flarePaths; } - - private: - void AddPath(AZStd::string&& newPath) { m_flarePaths.emplace_back(std::move(newPath)); } - - AZStd::vector m_flarePaths; - }; -} // namespace LmbrCentral diff --git a/Gems/LmbrCentral/Code/include/LmbrCentral/Rendering/LightComponentBus.h b/Gems/LmbrCentral/Code/include/LmbrCentral/Rendering/LightComponentBus.h deleted file mode 100644 index c360bec6cb..0000000000 --- a/Gems/LmbrCentral/Code/include/LmbrCentral/Rendering/LightComponentBus.h +++ /dev/null @@ -1,164 +0,0 @@ -/* - * 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 - -#include -#include -#include - -namespace LmbrCentral -{ - class LightConfiguration; - - /*! - * LightComponentRequestBus - * Messages serviced by the light component. - */ - class LightComponentRequests - : public AZ::ComponentBus - { - public: - - enum class State - { - Off = 0, - On, - }; - - virtual ~LightComponentRequests() {} - - //! Control light state. - virtual void SetLightState([[maybe_unused]] State state) {} - - //! Turns light on. Returns true if the light was successfully turned on - virtual bool TurnOnLight() { return false; } - - //! Turns light off. Returns true if the light was successfully turned off - virtual bool TurnOffLight() { return false; } - - //! Toggles light state. - virtual void ToggleLight() {} - - //////////////////////////////////////////////////////////////////// - // Modifiers - these must match the same virutal methods in LightComponentEditorRequests - - // General Settings Modifiers - virtual void SetVisible(bool isVisible) { (void)isVisible; } - virtual bool GetVisible() { return true; } - - virtual void SetColor(const AZ::Color& newColor) { (void)newColor; }; - virtual const AZ::Color GetColor() { return AZ::Color::CreateOne(); } - - virtual void SetDiffuseMultiplier(float newMultiplier) { (void)newMultiplier; }; - virtual float GetDiffuseMultiplier() { return FLT_MAX; } - - virtual void SetSpecularMultiplier(float newMultiplier) { (void)newMultiplier; }; - virtual float GetSpecularMultiplier() { return FLT_MAX; } - - virtual void SetAmbient(bool isAmbient) { (void)isAmbient; } - virtual bool GetAmbient() { return true; } - - // Point Light Specific Modifiers - virtual void SetPointMaxDistance(float newMaxDistance) { (void)newMaxDistance; }; - virtual float GetPointMaxDistance() { return FLT_MAX; } - - virtual void SetPointAttenuationBulbSize(float newAttenuationBulbSize) { (void)newAttenuationBulbSize; }; - virtual float GetPointAttenuationBulbSize() { return FLT_MAX; } - - // Area Light Specific Modifiers - virtual void SetAreaMaxDistance(float newMaxDistance) { (void)newMaxDistance; }; - virtual float GetAreaMaxDistance() { return FLT_MAX; } - - virtual void SetAreaWidth(float newWidth) { (void)newWidth; }; - virtual float GetAreaWidth() { return FLT_MAX; } - - virtual void SetAreaHeight(float newHeight) { (void)newHeight; }; - virtual float GetAreaHeight() { return FLT_MAX; } - - virtual void SetAreaFOV(float newFOV) { (void)newFOV; }; - virtual float GetAreaFOV() { return FLT_MAX; } - - // Project Light Specific Modifiers - virtual void SetProjectorMaxDistance(float newMaxDistance) { (void)newMaxDistance; }; - virtual float GetProjectorMaxDistance() { return FLT_MAX; } - - virtual void SetProjectorAttenuationBulbSize(float newAttenuationBulbSize) { (void)newAttenuationBulbSize; }; - virtual float GetProjectorAttenuationBulbSize() { return FLT_MAX; } - - virtual void SetProjectorFOV(float newFOV) { (void)newFOV; }; - virtual float GetProjectorFOV() { return FLT_MAX; } - - virtual void SetProjectorNearPlane(float newNearPlane) { (void)newNearPlane; }; - virtual float GetProjectorNearPlane() { return FLT_MAX; } - - // Environment Probe Settings - virtual void SetProbeAreaDimensions(const AZ::Vector3& newDimensions) { (void)newDimensions; } - virtual const AZ::Vector3 GetProbeAreaDimensions() { return AZ::Vector3::CreateOne(); } - - virtual void SetProbeSortPriority(AZ::u32 newPriority) { (void)newPriority; } - virtual AZ::u32 GetProbeSortPriority() { return 0; } - - virtual void SetProbeBoxProjected(bool isProbeBoxProjected) { (void)isProbeBoxProjected; } - virtual bool GetProbeBoxProjected() { return false; } - - virtual void SetProbeBoxHeight(float newHeight) { (void)newHeight; } - virtual float GetProbeBoxHeight() { return FLT_MAX; } - - virtual void SetProbeBoxLength(float newLength) { (void)newLength; } - virtual float GetProbeBoxLength() { return FLT_MAX; } - - virtual void SetProbeBoxWidth(float newWidth) { (void)newWidth; } - virtual float GetProbeBoxWidth() { return FLT_MAX; } - - virtual void SetProbeAttenuationFalloff(float newAttenuationFalloff) { (void)newAttenuationFalloff; } - virtual float GetProbeAttenuationFalloff() { return FLT_MAX; } - - virtual void SetProbeFade(float fade) { (void)fade; } - virtual float GetProbeFade() { return 1.0f; } - //////////////////////////////////////////////////////////////////// - }; - - using LightComponentRequestBus = AZ::EBus; - - /*! - * LightComponentNotificationBus - * Events dispatched by the light component. - */ - class LightComponentNotifications - : public AZ::ComponentBus - { - public: - - virtual ~LightComponentNotifications() {} - - // Sent when the light is turned on. - virtual void LightTurnedOn() {} - - // Sent when the light is turned off. - virtual void LightTurnedOff() {} - }; - - using LightComponentNotificationBus = AZ::EBus < LightComponentNotifications >; - - /*! - * LightSettingsNotifications - * Events dispatched by the light component or light component editor when settings have changed. - */ - class LightSettingsNotifications - : public AZ::ComponentBus - { - public: - - virtual ~LightSettingsNotifications() {} - - virtual void AnimationSettingsChanged() = 0; - }; - - using LightSettingsNotificationsBus = AZ::EBus < LightSettingsNotifications >; - -} // namespace LmbrCentral diff --git a/Gems/LmbrCentral/Code/include/LmbrCentral/Rendering/MaterialHandle.h b/Gems/LmbrCentral/Code/include/LmbrCentral/Rendering/MaterialHandle.h deleted file mode 100644 index b8b9e316ff..0000000000 --- a/Gems/LmbrCentral/Code/include/LmbrCentral/Rendering/MaterialHandle.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * 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 - -#include -#include - -struct IMaterial; - -namespace AZ -{ - class BehaviorContext; -} -namespace LmbrCentral -{ - //! Wraps a IMaterial pointer in a way that BehaviorContext can use it - class MaterialHandle - { - public: - AZ_CLASS_ALLOCATOR(MaterialHandle, AZ::SystemAllocator, 0); - AZ_TYPE_INFO(MaterialHandle, "{BF659DC6-ACDD-4062-A52E-4EC053286F4F}"); - - MaterialHandle() - { - } - - MaterialHandle(const MaterialHandle& handle) - : m_material(handle.m_material) - { - } - - ~MaterialHandle() - { - } - - MaterialHandle& operator=(const MaterialHandle& rhs) - { - m_material = rhs.m_material; - return *this; - } - - IMaterial* m_material; - - static void Reflect(AZ::BehaviorContext* behaviorContext); - static void Reflect(AZ::SerializeContext* serializeContext); - }; - -} diff --git a/Gems/LmbrCentral/Code/include/LmbrCentral/Rendering/MeshModificationBus.h b/Gems/LmbrCentral/Code/include/LmbrCentral/Rendering/MeshModificationBus.h deleted file mode 100644 index eb1e53edcd..0000000000 --- a/Gems/LmbrCentral/Code/include/LmbrCentral/Rendering/MeshModificationBus.h +++ /dev/null @@ -1,132 +0,0 @@ -/* - * 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 - -#include -#include -#include - -struct IRenderMesh; - -namespace LmbrCentral -{ - /* - * MeshModificationRequestBus - * Requests for a render mesh to be sent for editing. - */ - class MeshModificationRequests - : public AZ::ComponentBus - { - public: - - virtual void RequireSendingRenderMeshForModification(size_t lodIndex, size_t primitiveIndex) = 0; - - virtual void StopSendingRenderMeshForModification(size_t lodIndex, size_t primitiveIndex) = 0; - - protected: - ~MeshModificationRequests() = default; - }; - - using MeshModificationRequestBus = AZ::EBus; - - /* - * MeshModificationRequestHelper - * Helper class to manage storing indices for the render meshes to edit. - */ - class MeshModificationRequestHelper - : public MeshModificationRequestBus::Handler - , public AZ::TickBus::Handler - { - public: - struct MeshLODPrimIndex - { - size_t lodIndex; - size_t primitiveIndex; - - bool operator<(const MeshLODPrimIndex& right) const - { - return (lodIndex < right.lodIndex) - || (lodIndex == right.lodIndex && primitiveIndex < right.primitiveIndex); - } - }; - - void Connect(MeshModificationRequestBus::BusIdType busId) - { - MeshModificationRequestBus::Handler::BusConnect(busId); - AZ::TickBus::Handler::BusConnect(); - } - - bool IsConnected() - { - return MeshModificationRequestBus::Handler::BusIsConnected(); - } - - void Disconnect() - { - AZ::TickBus::Handler::BusDisconnect(); - MeshModificationRequestBus::Handler::BusDisconnect(); - } - - void RequireSendingRenderMeshForModification(size_t lodIndex, size_t primitiveIndex) override - { - m_meshesToSendForEditing.insert({ lodIndex, primitiveIndex }); - } - - void StopSendingRenderMeshForModification(size_t lodIndex, size_t primitiveIndex) override - { - m_meshesToSendForEditing.erase({ lodIndex, primitiveIndex }); - } - - const AZStd::set& MeshesToEdit() const - { - return m_meshesToSendForEditing; - } - - bool GetMeshModified() const - { - return m_meshModified; - } - - void SetMeshModified(bool value) - { - m_meshModified = value; - } - - private: - void OnTick([[maybe_unused]] float deltaTime, [[maybe_unused]] AZ::ScriptTimePoint time) override - { - m_meshModified = false; - } - - int GetTickOrder() override - { - return AZ::TICK_PRE_RENDER; - } - - AZStd::set m_meshesToSendForEditing; - bool m_meshModified = false; - }; - - /* - * MeshModificationNotificationBus - * Sends an event when the render mesh data should be edited. - */ - class MeshModificationNotifications - : public AZ::ComponentBus - { - public: - using MutexType = AZStd::mutex; - - virtual void ModifyMesh([[maybe_unused]] size_t lodIndex, [[maybe_unused]] size_t primitiveIndex, [[maybe_unused]] IRenderMesh* renderMesh) {} - - protected: - ~MeshModificationNotifications() = default; - }; - - using MeshModificationNotificationBus = AZ::EBus; -}// namespace LmbrCentral diff --git a/Gems/LmbrCentral/Code/lmbrcentral_editor_files.cmake b/Gems/LmbrCentral/Code/lmbrcentral_editor_files.cmake index 24f9ff6dcd..665dbef5b7 100644 --- a/Gems/LmbrCentral/Code/lmbrcentral_editor_files.cmake +++ b/Gems/LmbrCentral/Code/lmbrcentral_editor_files.cmake @@ -8,7 +8,6 @@ set(FILES include/LmbrCentral/Rendering/EditorCameraCorrectionBus.h - include/LmbrCentral/Rendering/EditorLightComponentBus.h include/LmbrCentral/Shape/EditorPolygonPrismShapeComponentBus.h include/LmbrCentral/Shape/EditorSplineComponentBus.h include/LmbrCentral/Shape/EditorTubeShapeComponentBus.h diff --git a/Gems/LmbrCentral/Code/lmbrcentral_headers_files.cmake b/Gems/LmbrCentral/Code/lmbrcentral_headers_files.cmake index cd8f3eff21..9c2d4c1746 100644 --- a/Gems/LmbrCentral/Code/lmbrcentral_headers_files.cmake +++ b/Gems/LmbrCentral/Code/lmbrcentral_headers_files.cmake @@ -27,13 +27,8 @@ set(FILES include/LmbrCentral/Dependency/DependencyMonitor.h include/LmbrCentral/Dependency/DependencyMonitor.inl include/LmbrCentral/Dependency/DependencyNotificationBus.h - include/LmbrCentral/Rendering/DecalComponentBus.h - include/LmbrCentral/Rendering/LightComponentBus.h include/LmbrCentral/Rendering/MaterialAsset.h - include/LmbrCentral/Rendering/MaterialHandle.h include/LmbrCentral/Rendering/MeshAsset.h - include/LmbrCentral/Rendering/MeshModificationBus.h - include/LmbrCentral/Rendering/GiRegistrationBus.h include/LmbrCentral/Rendering/RenderBoundsBus.h include/LmbrCentral/Scripting/EditorTagComponentBus.h include/LmbrCentral/Scripting/GameplayNotificationBus.h From 55e557b5539534bf27836dfe9b3d082d09405259 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 3 Jan 2022 16:15:00 -0800 Subject: [PATCH 174/284] Removes TerrainSystemRequestBus.h from Gems/LmbrCentral Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Terrain/TerrainSystemRequestBus.h | 34 ------------------- .../Code/lmbrcentral_headers_files.cmake | 1 - 2 files changed, 35 deletions(-) delete mode 100644 Gems/LmbrCentral/Code/include/LmbrCentral/Terrain/TerrainSystemRequestBus.h diff --git a/Gems/LmbrCentral/Code/include/LmbrCentral/Terrain/TerrainSystemRequestBus.h b/Gems/LmbrCentral/Code/include/LmbrCentral/Terrain/TerrainSystemRequestBus.h deleted file mode 100644 index 1c5c319731..0000000000 --- a/Gems/LmbrCentral/Code/include/LmbrCentral/Terrain/TerrainSystemRequestBus.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * 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 - -#include -#include - -namespace LmbrCentral -{ - // Shared interface for terrain system implementations - class TerrainSystemRequests - : public AZ::EBusTraits - { - public: - ////////////////////////////////////////////////////////////////////////// - // EBusTraits overrides - static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Single; - static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single; - ////////////////////////////////////////////////////////////////////////// - - // Get the terrain height at a specific location - virtual float GetElevation(const AZ::Vector3& position) const = 0; - - // Get the terrain surface normal at a specific location - virtual AZ::Vector3 GetNormal(const AZ::Vector3& position) const = 0; - }; - - using TerrainSystemRequestBus = AZ::EBus; -} // namespace LmbrCentral diff --git a/Gems/LmbrCentral/Code/lmbrcentral_headers_files.cmake b/Gems/LmbrCentral/Code/lmbrcentral_headers_files.cmake index 9c2d4c1746..f7c51c67b6 100644 --- a/Gems/LmbrCentral/Code/lmbrcentral_headers_files.cmake +++ b/Gems/LmbrCentral/Code/lmbrcentral_headers_files.cmake @@ -51,5 +51,4 @@ set(FILES include/LmbrCentral/Shape/ReferenceShapeComponentBus.h include/LmbrCentral/Shape/SplineAttribute.h include/LmbrCentral/Shape/SplineAttribute.inl - include/LmbrCentral/Terrain/TerrainSystemRequestBus.h ) From 837a139464b7864ae142eba9e64d4d7393c88680 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 3 Jan 2022 16:18:39 -0800 Subject: [PATCH 175/284] =?UTF-8?q?=EF=BB=BFRemoves=20LmbrCentralReflectio?= =?UTF-8?q?nTest.cpp=20from=20Gems/LmbrCentral?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Gems/LmbrCentral/Code/Tests/LmbrCentralReflectionTest.cpp | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 Gems/LmbrCentral/Code/Tests/LmbrCentralReflectionTest.cpp diff --git a/Gems/LmbrCentral/Code/Tests/LmbrCentralReflectionTest.cpp b/Gems/LmbrCentral/Code/Tests/LmbrCentralReflectionTest.cpp deleted file mode 100644 index 196f0931e0..0000000000 --- a/Gems/LmbrCentral/Code/Tests/LmbrCentralReflectionTest.cpp +++ /dev/null @@ -1,7 +0,0 @@ -/* - * 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 - * - */ From d89b682e9c791954b86ee0aa59e4fcd73e9fd24f Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 3 Jan 2022 16:24:04 -0800 Subject: [PATCH 176/284] Removes CommandHierarchyItemToggleIsSelected.h/cpp from Gems/LyShine Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../CommandHierarchyItemToggleIsSelected.cpp | 67 ------------------- .../CommandHierarchyItemToggleIsSelected.h | 52 -------------- Gems/LyShine/Code/Editor/EditorCommon.h | 2 - .../Code/lyshine_uicanvaseditor_files.cmake | 2 - 4 files changed, 123 deletions(-) delete mode 100644 Gems/LyShine/Code/Editor/CommandHierarchyItemToggleIsSelected.cpp delete mode 100644 Gems/LyShine/Code/Editor/CommandHierarchyItemToggleIsSelected.h diff --git a/Gems/LyShine/Code/Editor/CommandHierarchyItemToggleIsSelected.cpp b/Gems/LyShine/Code/Editor/CommandHierarchyItemToggleIsSelected.cpp deleted file mode 100644 index 563fbe1935..0000000000 --- a/Gems/LyShine/Code/Editor/CommandHierarchyItemToggleIsSelected.cpp +++ /dev/null @@ -1,67 +0,0 @@ -/* - * 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 "EditorCommon.h" - -CommandHierarchyItemToggleIsSelected::CommandHierarchyItemToggleIsSelected(UndoStack* stack, - HierarchyWidget* hierarchy, - HierarchyItem* item) - : QUndoCommand() - , m_stack(stack) - , m_hierarchy(hierarchy) - , m_id(item->GetEntityId()) - , m_toIsSelected(false) -{ - setText(QString("toggle selection of \"%1\"").arg(item->GetElement()->GetName().c_str())); - - EBUS_EVENT_ID_RESULT(m_toIsSelected, m_id, UiEditorBus, GetIsSelected); - m_toIsSelected = !m_toIsSelected; -} - -void CommandHierarchyItemToggleIsSelected::undo() -{ - UndoStackExecutionScope s(m_stack); - - SetIsSelected(!m_toIsSelected); -} - -void CommandHierarchyItemToggleIsSelected::redo() -{ - UndoStackExecutionScope s(m_stack); - - SetIsSelected(m_toIsSelected); -} - -void CommandHierarchyItemToggleIsSelected::SetIsSelected(bool isSelected) -{ - AZ::Entity* element = EntityHelpers::GetEntity(m_id); - if (!element) - { - // The element DOESN'T exist. - // Nothing to do. - return; - } - - // This will do both the Runtime-side and Editor-side. - HierarchyItem::RttiCast(HierarchyHelpers::ElementToItem(m_hierarchy, element, false))->SetIsSelected(isSelected); -} - -void CommandHierarchyItemToggleIsSelected::Push(UndoStack* stack, - HierarchyWidget* hierarchy, - HierarchyItem* item) -{ - if (stack->GetIsExecuting()) - { - // This is a redundant Qt notification. - // Nothing else to do. - return; - } - - stack->push(new CommandHierarchyItemToggleIsSelected(stack, - hierarchy, - item)); -} diff --git a/Gems/LyShine/Code/Editor/CommandHierarchyItemToggleIsSelected.h b/Gems/LyShine/Code/Editor/CommandHierarchyItemToggleIsSelected.h deleted file mode 100644 index 97a988e04b..0000000000 --- a/Gems/LyShine/Code/Editor/CommandHierarchyItemToggleIsSelected.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * 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 - -#include - -class CommandHierarchyItemToggleIsSelected - : public QUndoCommand -{ -public: - - void undo() override; - void redo() override; - - // IMPORTANT: We DON'T want this command to support mergeWith(). - // Otherwise we leave commands on the undo stack that have no - // effect (NOOP). - // - // To avoid the NOOPs, we can either: - // - // (1) Delete the NOPs from the undo stack. - // or - // (2) NOT support mergeWith(). - // - // The problem with (1) is that it only allows odd number of - // state changes to be undoable. (2) is more consistent - // by making all state changes undoable. - - static void Push(UndoStack* stack, - HierarchyWidget* hierarchy, - HierarchyItem* item); - -private: - - CommandHierarchyItemToggleIsSelected(UndoStack* stack, - HierarchyWidget* hierarchy, - HierarchyItem* item); - - void SetIsSelected(bool isSelected); - - UndoStack* m_stack; - - HierarchyWidget* m_hierarchy; - - AZ::EntityId m_id; - bool m_toIsSelected; -}; diff --git a/Gems/LyShine/Code/Editor/EditorCommon.h b/Gems/LyShine/Code/Editor/EditorCommon.h index 5a435e7dba..95b0bf753f 100644 --- a/Gems/LyShine/Code/Editor/EditorCommon.h +++ b/Gems/LyShine/Code/Editor/EditorCommon.h @@ -42,7 +42,6 @@ class CommandHierarchyItemRename; class CommandHierarchyItemReparent; class CommandHierarchyItemToggleIsExpanded; class CommandHierarchyItemToggleIsSelectable; -class CommandHierarchyItemToggleIsSelected; class CommandHierarchyItemToggleIsVisible; class CommandPropertiesChange; class CommandViewportInteractionMode; @@ -123,7 +122,6 @@ enum class FusibleCommand #include "CommandHierarchyItemReparent.h" #include "CommandHierarchyItemToggleIsExpanded.h" #include "CommandHierarchyItemToggleIsSelectable.h" -#include "CommandHierarchyItemToggleIsSelected.h" #include "CommandHierarchyItemToggleIsVisible.h" #include "CommandPropertiesChange.h" #include "CommandViewportInteractionMode.h" diff --git a/Gems/LyShine/Code/lyshine_uicanvaseditor_files.cmake b/Gems/LyShine/Code/lyshine_uicanvaseditor_files.cmake index 49fee653be..9750116ad1 100644 --- a/Gems/LyShine/Code/lyshine_uicanvaseditor_files.cmake +++ b/Gems/LyShine/Code/lyshine_uicanvaseditor_files.cmake @@ -50,8 +50,6 @@ set(FILES Editor/CommandHierarchyItemToggleIsExpanded.h Editor/CommandHierarchyItemToggleIsSelectable.cpp Editor/CommandHierarchyItemToggleIsSelectable.h - Editor/CommandHierarchyItemToggleIsSelected.cpp - Editor/CommandHierarchyItemToggleIsSelected.h Editor/CommandHierarchyItemToggleIsVisible.cpp Editor/CommandHierarchyItemToggleIsVisible.h Editor/CommandPropertiesChange.cpp From 4cfdbe3731f32678ff97558ec99a0b66952029d5 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 3 Jan 2022 16:28:37 -0800 Subject: [PATCH 177/284] Removes CommandViewportInteractionMode from Gems/LyShine Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Editor/CommandViewportInteractionMode.cpp | 94 ------------------- .../Editor/CommandViewportInteractionMode.h | 43 --------- Gems/LyShine/Code/Editor/EditorCommon.h | 2 - .../Code/lyshine_uicanvaseditor_files.cmake | 2 - 4 files changed, 141 deletions(-) delete mode 100644 Gems/LyShine/Code/Editor/CommandViewportInteractionMode.cpp delete mode 100644 Gems/LyShine/Code/Editor/CommandViewportInteractionMode.h diff --git a/Gems/LyShine/Code/Editor/CommandViewportInteractionMode.cpp b/Gems/LyShine/Code/Editor/CommandViewportInteractionMode.cpp deleted file mode 100644 index 260ff4c4e4..0000000000 --- a/Gems/LyShine/Code/Editor/CommandViewportInteractionMode.cpp +++ /dev/null @@ -1,94 +0,0 @@ -/* - * 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 "EditorCommon.h" - -CommandViewportInteractionMode::CommandViewportInteractionMode(UndoStack* stack, - ViewportInteraction* viewportInteraction, - QAction* from, - QAction* to) - : QUndoCommand() - , m_stack(stack) - , m_viewportInteraction(viewportInteraction) - , m_from(from) - , m_to(to) -{ - UpdateText(); -} - -void CommandViewportInteractionMode::undo() -{ - UndoStackExecutionScope s(m_stack); - - SetMode(m_from); -} - -void CommandViewportInteractionMode::redo() -{ - UndoStackExecutionScope s(m_stack); - - SetMode(m_to); -} - -int CommandViewportInteractionMode::id() const -{ - return (int)FusibleCommand::kViewportInteractionMode; -} - -bool CommandViewportInteractionMode::mergeWith(const QUndoCommand* other) -{ - if (other->id() != id()) - { - // NOT the same command type. - return false; - } - - const CommandViewportInteractionMode* subsequent = static_cast(other); - AZ_Assert(subsequent, "No command to merge with"); - - if (!((subsequent->m_stack == m_stack) && - (subsequent->m_viewportInteraction == m_viewportInteraction))) - { - // NOT the same context. - return false; - } - - m_to = subsequent->m_to; - - UpdateText(); - - return true; -} - -void CommandViewportInteractionMode::UpdateText() -{ - setText(QString("mode change to %1").arg(ViewportHelpers::InteractionModeToString(m_to->data().toInt()))); -} - -void CommandViewportInteractionMode::SetMode(QAction* action) const -{ - action->trigger(); - - // IMPORTANT: It's NOT necessary to prevent this from executing on the - // first run. We WON'T get a redundant Qt notification by this point. - m_viewportInteraction->SetMode((ViewportInteraction::InteractionMode)action->data().toInt()); -} - -void CommandViewportInteractionMode::Push(UndoStack* stack, - ViewportInteraction* viewportInteraction, - QAction* from, - QAction* to) -{ - if (stack->GetIsExecuting()) - { - // This is a redundant Qt notification. - // Nothing else to do. - return; - } - - stack->push(new CommandViewportInteractionMode(stack, viewportInteraction, from, to)); -} diff --git a/Gems/LyShine/Code/Editor/CommandViewportInteractionMode.h b/Gems/LyShine/Code/Editor/CommandViewportInteractionMode.h deleted file mode 100644 index be6f1bc6ab..0000000000 --- a/Gems/LyShine/Code/Editor/CommandViewportInteractionMode.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * 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 - -#include - -class CommandViewportInteractionMode - : public QUndoCommand -{ -public: - - void undo() override; - void redo() override; - - int id() const override; - bool mergeWith(const QUndoCommand* other) override; - - static void Push(UndoStack* stack, - ViewportInteraction* viewportInteraction, - QAction* from, - QAction* to); - -private: - - CommandViewportInteractionMode(UndoStack* stack, - ViewportInteraction* viewportInteraction, - QAction* from, - QAction* to); - - void UpdateText(); - void SetMode(QAction* action) const; - - UndoStack* m_stack; - - ViewportInteraction* m_viewportInteraction; - QAction* m_from; - QAction* m_to; -}; diff --git a/Gems/LyShine/Code/Editor/EditorCommon.h b/Gems/LyShine/Code/Editor/EditorCommon.h index 95b0bf753f..76f883b6ec 100644 --- a/Gems/LyShine/Code/Editor/EditorCommon.h +++ b/Gems/LyShine/Code/Editor/EditorCommon.h @@ -44,7 +44,6 @@ class CommandHierarchyItemToggleIsExpanded; class CommandHierarchyItemToggleIsSelectable; class CommandHierarchyItemToggleIsVisible; class CommandPropertiesChange; -class CommandViewportInteractionMode; class ComponentButton; class CoordinateSystemToolbarSection; class EditorMenu; @@ -124,7 +123,6 @@ enum class FusibleCommand #include "CommandHierarchyItemToggleIsSelectable.h" #include "CommandHierarchyItemToggleIsVisible.h" #include "CommandPropertiesChange.h" -#include "CommandViewportInteractionMode.h" #include "ComponentButton.h" #include "CoordinateSystemToolbarSection.h" #include "EditorWindow.h" diff --git a/Gems/LyShine/Code/lyshine_uicanvaseditor_files.cmake b/Gems/LyShine/Code/lyshine_uicanvaseditor_files.cmake index 9750116ad1..c53891dcfc 100644 --- a/Gems/LyShine/Code/lyshine_uicanvaseditor_files.cmake +++ b/Gems/LyShine/Code/lyshine_uicanvaseditor_files.cmake @@ -54,8 +54,6 @@ set(FILES Editor/CommandHierarchyItemToggleIsVisible.h Editor/CommandPropertiesChange.cpp Editor/CommandPropertiesChange.h - Editor/CommandViewportInteractionMode.cpp - Editor/CommandViewportInteractionMode.h Editor/ComponentAssetHelpers.h Editor/ComponentButton.cpp Editor/ComponentButton.h From 70ffece2a969f157c80ac45d3b5289474b5a8f31 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 3 Jan 2022 16:33:41 -0800 Subject: [PATCH 178/284] Removes UiAnimViewSplitter from Gems/LyShine Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Editor/Animation/UiAnimViewSplitter.cpp | 67 ------------------- .../Editor/Animation/UiAnimViewSplitter.h | 36 ---------- 2 files changed, 103 deletions(-) delete mode 100644 Gems/LyShine/Code/Editor/Animation/UiAnimViewSplitter.cpp delete mode 100644 Gems/LyShine/Code/Editor/Animation/UiAnimViewSplitter.h diff --git a/Gems/LyShine/Code/Editor/Animation/UiAnimViewSplitter.cpp b/Gems/LyShine/Code/Editor/Animation/UiAnimViewSplitter.cpp deleted file mode 100644 index 5a1ffd73f7..0000000000 --- a/Gems/LyShine/Code/Editor/Animation/UiAnimViewSplitter.cpp +++ /dev/null @@ -1,67 +0,0 @@ -/* - * 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 "UiAnimViewSplitter.h" - - -// CUiAnimViewSplitter - -IMPLEMENT_DYNAMIC(CUiAnimViewSplitter, CSplitterWnd) -CUiAnimViewSplitter::CUiAnimViewSplitter() -{ - m_cxSplitter = m_cySplitter = 3 + 1 + 1 - 1; - m_cxBorderShare = m_cyBorderShare = 0; - m_cxSplitterGap = m_cySplitterGap = 3 + 1 + 1 - 1; - m_cxBorder = m_cyBorder = 0; -} - -CUiAnimViewSplitter::~CUiAnimViewSplitter() -{ -} - - -BEGIN_MESSAGE_MAP(CUiAnimViewSplitter, CSplitterWnd) -END_MESSAGE_MAP() - - - -// CUiAnimViewSplitter message handlers - -void CUiAnimViewSplitter::SetPane(int row, int col, CWnd* pWnd, SIZE sizeInit) -{ - assert(pWnd != NULL); - - // set the initial size for that pane - m_pColInfo[col].nIdealSize = sizeInit.cx; - m_pRowInfo[row].nIdealSize = sizeInit.cy; - - pWnd->ModifyStyle(0, WS_BORDER, WS_CHILD | WS_VISIBLE); - pWnd->SetParent(this); - - CRect rect(CPoint(0, 0), sizeInit); - pWnd->MoveWindow(0, 0, sizeInit.cx, sizeInit.cy, FALSE); - pWnd->SetDlgCtrlID(IdFromRowCol(row, col)); - - ASSERT((int)::GetDlgCtrlID(pWnd->m_hWnd) == IdFromRowCol(row, col)); -} - -void CUiAnimViewSplitter::OnDrawSplitter(CDC* pDC, ESplitType nType, const CRect& rectArg) -{ - // Let CSplitterWnd handle everything but the border-drawing - //if((nType != splitBorder) || (pDC == NULL)) - { - CSplitterWnd::OnDrawSplitter(pDC, nType, rectArg); - return; - } - - ASSERT_VALID(pDC); - - // Draw border - pDC->Draw3dRect(rectArg, GetSysColor(COLOR_BTNSHADOW), GetSysColor(COLOR_BTNHIGHLIGHT)); -} diff --git a/Gems/LyShine/Code/Editor/Animation/UiAnimViewSplitter.h b/Gems/LyShine/Code/Editor/Animation/UiAnimViewSplitter.h deleted file mode 100644 index 028861289b..0000000000 --- a/Gems/LyShine/Code/Editor/Animation/UiAnimViewSplitter.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * 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 - - - -// CUiAnimViewSplitter - -class CUiAnimViewSplitter - : public CSplitterWnd -{ - DECLARE_DYNAMIC(CUiAnimViewSplitter) - - virtual CWnd * GetActivePane(int* pRow = NULL, int* pCol = NULL) - { - return GetFocus(); - } - - void SetPane(int row, int col, CWnd* pWnd, SIZE sizeInit); - // Ovveride this for flat look. - void OnDrawSplitter(CDC* pDC, ESplitType nType, const CRect& rectArg); - -public: - CUiAnimViewSplitter(); - virtual ~CUiAnimViewSplitter(); - -protected: - DECLARE_MESSAGE_MAP() -}; From 5b0cb9cdff34288d1e6aae2e2f4e8cfba12c1b77 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 3 Jan 2022 16:44:48 -0800 Subject: [PATCH 179/284] refactors some code to better pickup AZ_LOADSCREENCOMPONENT_ENABLED's value Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Legacy/CrySystem/LevelSystem/LevelSystem.cpp | 2 +- Code/Legacy/CrySystem/LevelSystem/SpawnableLevelSystem.cpp | 2 +- Code/Legacy/CrySystem/System.h | 2 +- Code/Legacy/CrySystem/SystemInit.cpp | 2 +- Gems/LmbrCentral/Code/Source/LmbrCentral.cpp | 6 ------ Gems/LyShine/Code/Source/LyShineModule.cpp | 2 ++ 6 files changed, 6 insertions(+), 10 deletions(-) diff --git a/Code/Legacy/CrySystem/LevelSystem/LevelSystem.cpp b/Code/Legacy/CrySystem/LevelSystem/LevelSystem.cpp index dbe92ee6aa..0b90e73bc0 100644 --- a/Code/Legacy/CrySystem/LevelSystem/LevelSystem.cpp +++ b/Code/Legacy/CrySystem/LevelSystem/LevelSystem.cpp @@ -15,7 +15,7 @@ #include #include "CryPath.h" -#include +#include #include #include diff --git a/Code/Legacy/CrySystem/LevelSystem/SpawnableLevelSystem.cpp b/Code/Legacy/CrySystem/LevelSystem/SpawnableLevelSystem.cpp index 095d296373..a890b76662 100644 --- a/Code/Legacy/CrySystem/LevelSystem/SpawnableLevelSystem.cpp +++ b/Code/Legacy/CrySystem/LevelSystem/SpawnableLevelSystem.cpp @@ -10,7 +10,7 @@ #include "SpawnableLevelSystem.h" #include "IMovieSystem.h" -#include +#include #include #include diff --git a/Code/Legacy/CrySystem/System.h b/Code/Legacy/CrySystem/System.h index 9b76e94eb4..63a24c9f9c 100644 --- a/Code/Legacy/CrySystem/System.h +++ b/Code/Legacy/CrySystem/System.h @@ -17,7 +17,7 @@ #include "CmdLine.h" #include -#include +#include #include #include diff --git a/Code/Legacy/CrySystem/SystemInit.cpp b/Code/Legacy/CrySystem/SystemInit.cpp index 19d94ba6ec..600a799bc1 100644 --- a/Code/Legacy/CrySystem/SystemInit.cpp +++ b/Code/Legacy/CrySystem/SystemInit.cpp @@ -51,7 +51,7 @@ #include #include -#include +#include #include #include #include diff --git a/Gems/LmbrCentral/Code/Source/LmbrCentral.cpp b/Gems/LmbrCentral/Code/Source/LmbrCentral.cpp index 76f50b5ea6..9062e7552c 100644 --- a/Gems/LmbrCentral/Code/Source/LmbrCentral.cpp +++ b/Gems/LmbrCentral/Code/Source/LmbrCentral.cpp @@ -219,9 +219,6 @@ namespace LmbrCentral PolygonPrismShapeDebugDisplayComponent::CreateDescriptor(), TubeShapeDebugDisplayComponent::CreateDescriptor(), AssetSystemDebugComponent::CreateDescriptor(), -#if AZ_LOADSCREENCOMPONENT_ENABLED - LoadScreenComponent::CreateDescriptor(), -#endif // if AZ_LOADSCREENCOMPONENT_ENABLED }); // This is an internal Amazon gem, so register it's components for metrics tracking, otherwise the name of the component won't get sent back. @@ -248,9 +245,6 @@ namespace LmbrCentral azrtti_typeid(), azrtti_typeid(), azrtti_typeid(), -#if AZ_LOADSCREENCOMPONENT_ENABLED - azrtti_typeid(), -#endif // if AZ_LOADSCREENCOMPONENT_ENABLED }; } diff --git a/Gems/LyShine/Code/Source/LyShineModule.cpp b/Gems/LyShine/Code/Source/LyShineModule.cpp index 1a6b2cdbda..604cd09e22 100644 --- a/Gems/LyShine/Code/Source/LyShineModule.cpp +++ b/Gems/LyShine/Code/Source/LyShineModule.cpp @@ -55,6 +55,8 @@ #include "Pipeline/LyShineBuilder/LyShineBuilderComponent.h" #endif // LYSHINE_BUILDER +#include + namespace LyShine { LyShineModule::LyShineModule() From aed48d0f25d6759105cb76fc8b1319f3da69fea4 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 3 Jan 2022 16:46:38 -0800 Subject: [PATCH 180/284] Removes resource.h from Gems/LyShine Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Gems/LyShine/Code/Source/resource.h | 23 ----------------------- 1 file changed, 23 deletions(-) delete mode 100644 Gems/LyShine/Code/Source/resource.h diff --git a/Gems/LyShine/Code/Source/resource.h b/Gems/LyShine/Code/Source/resource.h deleted file mode 100644 index 0d25f9094b..0000000000 --- a/Gems/LyShine/Code/Source/resource.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * 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 - * - */ -//{{NO_DEPENDENCIES}} -// Microsoft Visual C++ generated include file. -// Used by CryFont.rc -// -#define VS_VERSION_INFO 1 - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 101 -#define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 1001 -#define _APS_NEXT_SYMED_VALUE 101 -#endif -#endif From 16afbf6bc0f7258fbb08bef1aa8d73e4a0d97fb3 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 3 Jan 2022 16:51:02 -0800 Subject: [PATCH 181/284] Removes UiEntityContext.cpp from Gems/LyShine Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Gems/LyShine/Code/Source/UiEntityContext.cpp | 219 ------------------- 1 file changed, 219 deletions(-) delete mode 100644 Gems/LyShine/Code/Source/UiEntityContext.cpp diff --git a/Gems/LyShine/Code/Source/UiEntityContext.cpp b/Gems/LyShine/Code/Source/UiEntityContext.cpp deleted file mode 100644 index 2741c4c521..0000000000 --- a/Gems/LyShine/Code/Source/UiEntityContext.cpp +++ /dev/null @@ -1,219 +0,0 @@ -/* - * 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 -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include - - -//////////////////////////////////////////////////////////////////////////////////////////////////// -UiEntityContext::UiEntityContext() - : AzFramework::EntityContext(AzFramework::EntityContextId::CreateRandom()) -{ -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// -UiEntityContext::~UiEntityContext() -{ -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// -void UiEntityContext::Activate() -{ - InitContext(); - - GetRootSlice()->Instantiate(); - - UiEntityContextRequestBus::Handler::BusConnect(GetContextId()); -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// -void UiEntityContext::Deactivate() -{ - UiEntityContextRequestBus::Handler::BusDisconnect(); - - DestroyContext(); -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// -AZ::Entity* UiEntityContext::GetRootAssetEntity() -{ - return m_rootAsset.Get()->GetEntity(); -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// -AZ::Entity* UiEntityContext::CloneRootAssetEntity() -{ - AZ::SerializeContext* context = nullptr; - EBUS_EVENT_RESULT(context, AZ::ComponentApplicationBus, GetSerializeContext); - - AZ::Entity* rootAssetEntity = GetRootAssetEntity(); - - AZ::Entity* clonedRootAssetEntity = context->CloneObject(rootAssetEntity); - return clonedRootAssetEntity; -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// -AZ::Entity* UiEntityContext::CreateUiEntity(const char* name) -{ - AZ::Entity* entity = CreateEntity(name); - - if (entity) - { - // we don't currently do anything extra here, UI entities are not automatically - // Init'ed and Activate'd when they are created. We wait until the required components - // are added before Init and Activate - } - - return entity; -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// -void UiEntityContext::AddUiEntity(AZ::Entity* entity) -{ - AZ_Assert(entity, "Supplied entity is invalid."); - - AddEntity(entity); -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// -void UiEntityContext::AddUiEntities(const AzFramework::EntityContext::EntityList& entities) -{ - AZ::PrefabAsset* rootSlice = m_rootAsset.Get(); - - for (AZ::Entity* entity : entities) - { - AZ_Assert(!AzFramework::EntityIdContextQueryBus::MultiHandler::BusIsConnectedId(entity->GetId()), "Entity already in context."); - rootSlice->GetComponent()->AddEntity(entity); - } - - HandleEntitiesAdded(entities); -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// -bool UiEntityContext::CloneUiEntities(const AZStd::vector& sourceEntities, AzFramework::EntityContext::EntityList& resultEntities) -{ - resultEntities.clear(); - - AZ::PrefabComponent::InstantiatedContainer sourceObjects; - for (const AZ::EntityId& id : sourceEntities) - { - AZ::Entity* entity = nullptr; - EBUS_EVENT_RESULT(entity, AZ::ComponentApplicationBus, FindEntity, id); - if (entity) - { - sourceObjects.m_entities.push_back(entity); - } - } - - AZ::PrefabComponent::EntityIdToEntityIdMap idMap; - AZ::PrefabComponent::InstantiatedContainer* clonedObjects = - AZ::Utils::CloneObjectAndFixEntities(&sourceObjects, idMap); - if (!clonedObjects) - { - AZ_Error("UiEntityContext", false, "Failed to clone source entities."); - return false; - } - - resultEntities = clonedObjects->m_entities; - - AddUiEntities(resultEntities); - - sourceObjects.m_entities.clear(); - clonedObjects->m_entities.clear(); - delete clonedObjects; - - return true; -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// -bool UiEntityContext::DestroyUiEntity(AZ::EntityId entityId) -{ - if (DestroyEntity(entityId)) - { - return true; - } - - return false; -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// -bool UiEntityContext::HandleLoadedRootSliceEntity(AZ::Entity* rootEntity, bool remapIds, AZ::PrefabComponent::EntityIdToEntityIdMap* idRemapTable) -{ - AZ_Assert(m_rootAsset, "The context has not been initialized."); - - if (!AzFramework::EntityContext::HandleLoadedRootSliceEntity(rootEntity, remapIds, idRemapTable)) - { - return false; - } - - AZ::PrefabComponent::EntityList entities; - GetRootSlice()->GetEntities(entities); - - GetRootSlice()->SetIsDynamic(true); - - InitializeEntities(entities); - - return true; -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// -void UiEntityContext::OnContextEntitiesAdded(const AzFramework::EntityContext::EntityList& entities) -{ - EntityContext::OnContextEntitiesAdded(entities); - - InitializeEntities(entities); -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// -void UiEntityContext::OnContextEntityRemoved(const AZ::EntityId& entityId) -{ -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// -void UiEntityContext::SetupUiEntity(AZ::Entity* entity) -{ - InitializeEntities({ entity }); -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// -void UiEntityContext::InitializeEntities(const AzFramework::EntityContext::EntityList& entities) -{ - // UI entities are now automatically activated on creation - - for (AZ::Entity* entity : entities) - { - if (entity->GetState() == AZ::Entity::ES_CONSTRUCTED) - { - entity->Init(); - } - } - - for (AZ::Entity* entity : entities) - { - if (entity->GetState() == AZ::Entity::ES_INIT) - { - entity->Activate(); - } - } -} From 845d72c54295aba6e35bc648abf85b344f228835 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 3 Jan 2022 16:58:08 -0800 Subject: [PATCH 182/284] Removes AnimTrack.cpp and AnimSplineTrack.cpp from Gems/LyShine Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../LyShine/Code/Source/Animation/AnimSplineTrack.cpp | 11 ----------- Gems/LyShine/Code/Source/Animation/AnimTrack.cpp | 10 ---------- Gems/LyShine/Code/lyshine_static_files.cmake | 3 --- 3 files changed, 24 deletions(-) delete mode 100644 Gems/LyShine/Code/Source/Animation/AnimSplineTrack.cpp delete mode 100644 Gems/LyShine/Code/Source/Animation/AnimTrack.cpp diff --git a/Gems/LyShine/Code/Source/Animation/AnimSplineTrack.cpp b/Gems/LyShine/Code/Source/Animation/AnimSplineTrack.cpp deleted file mode 100644 index 5e44bfdc2b..0000000000 --- a/Gems/LyShine/Code/Source/Animation/AnimSplineTrack.cpp +++ /dev/null @@ -1,11 +0,0 @@ -/* - * 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 "AnimSplineTrack.h" - diff --git a/Gems/LyShine/Code/Source/Animation/AnimTrack.cpp b/Gems/LyShine/Code/Source/Animation/AnimTrack.cpp deleted file mode 100644 index 080e0b05a6..0000000000 --- a/Gems/LyShine/Code/Source/Animation/AnimTrack.cpp +++ /dev/null @@ -1,10 +0,0 @@ -/* - * 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 "AnimTrack.h" diff --git a/Gems/LyShine/Code/lyshine_static_files.cmake b/Gems/LyShine/Code/lyshine_static_files.cmake index 925658e756..376a53f724 100644 --- a/Gems/LyShine/Code/lyshine_static_files.cmake +++ b/Gems/LyShine/Code/lyshine_static_files.cmake @@ -102,7 +102,6 @@ set(FILES Source/UiImageSequenceComponent.h Source/UiRenderer.cpp Source/UiRenderer.h - Source/resource.h Include/LyShine/LyShineBus.h Source/EditorPropertyTypes.cpp Source/EditorPropertyTypes.h @@ -207,10 +206,8 @@ set(FILES Source/Animation/AnimNode.h Source/Animation/AnimSequence.cpp Source/Animation/AnimSequence.h - Source/Animation/AnimSplineTrack.cpp Source/Animation/AnimSplineTrack.h Source/Animation/AnimSplineTrack_Vec2Specialization.h - Source/Animation/AnimTrack.cpp Source/Animation/AnimTrack.h Source/Animation/AzEntityNode.cpp Source/Animation/AzEntityNode.h From ba6cad1ac1183aea08830909f8f987d7072cdfac Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 3 Jan 2022 17:06:54 -0800 Subject: [PATCH 183/284] Removes AnimTrack.cpp and AnimSplineTrack.cpp from Gems/Maestro Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Code/Source/Cinematics/AnimSplineTrack.cpp | 11 ----------- Gems/Maestro/Code/Source/Cinematics/AnimTrack.cpp | 10 ---------- Gems/Maestro/Code/maestro_static_files.cmake | 2 -- 3 files changed, 23 deletions(-) delete mode 100644 Gems/Maestro/Code/Source/Cinematics/AnimSplineTrack.cpp delete mode 100644 Gems/Maestro/Code/Source/Cinematics/AnimTrack.cpp diff --git a/Gems/Maestro/Code/Source/Cinematics/AnimSplineTrack.cpp b/Gems/Maestro/Code/Source/Cinematics/AnimSplineTrack.cpp deleted file mode 100644 index 5e44bfdc2b..0000000000 --- a/Gems/Maestro/Code/Source/Cinematics/AnimSplineTrack.cpp +++ /dev/null @@ -1,11 +0,0 @@ -/* - * 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 "AnimSplineTrack.h" - diff --git a/Gems/Maestro/Code/Source/Cinematics/AnimTrack.cpp b/Gems/Maestro/Code/Source/Cinematics/AnimTrack.cpp deleted file mode 100644 index 080e0b05a6..0000000000 --- a/Gems/Maestro/Code/Source/Cinematics/AnimTrack.cpp +++ /dev/null @@ -1,10 +0,0 @@ -/* - * 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 "AnimTrack.h" diff --git a/Gems/Maestro/Code/maestro_static_files.cmake b/Gems/Maestro/Code/maestro_static_files.cmake index 4e576dfbe5..da92f90347 100644 --- a/Gems/Maestro/Code/maestro_static_files.cmake +++ b/Gems/Maestro/Code/maestro_static_files.cmake @@ -23,8 +23,6 @@ set(FILES Source/Cinematics/Movie.h Source/Cinematics/TCBSpline.h Source/Cinematics/resource.h - Source/Cinematics/AnimSplineTrack.cpp - Source/Cinematics/AnimTrack.cpp Source/Cinematics/AssetBlendTrack.cpp Source/Cinematics/BoolTrack.cpp Source/Cinematics/CaptureTrack.cpp From c8dd05b154728b10f1a4b4689a58c7fd3f3dbe4d Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 3 Jan 2022 17:10:20 -0800 Subject: [PATCH 184/284] Removes Cinematic/resource.h from Gems/Maestro Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Maestro/Code/Source/Cinematics/resource.h | 21 ------------------- Gems/Maestro/Code/maestro_static_files.cmake | 1 - 2 files changed, 22 deletions(-) delete mode 100644 Gems/Maestro/Code/Source/Cinematics/resource.h diff --git a/Gems/Maestro/Code/Source/Cinematics/resource.h b/Gems/Maestro/Code/Source/Cinematics/resource.h deleted file mode 100644 index eb3d76bc60..0000000000 --- a/Gems/Maestro/Code/Source/Cinematics/resource.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - * 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 - * - */ - - -#define VS_VERSION_INFO 1 - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 101 -#define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 1001 -#define _APS_NEXT_SYMED_VALUE 101 -#endif -#endif diff --git a/Gems/Maestro/Code/maestro_static_files.cmake b/Gems/Maestro/Code/maestro_static_files.cmake index da92f90347..688ae1d074 100644 --- a/Gems/Maestro/Code/maestro_static_files.cmake +++ b/Gems/Maestro/Code/maestro_static_files.cmake @@ -22,7 +22,6 @@ set(FILES Source/Cinematics/CharacterTrackAnimator.h Source/Cinematics/Movie.h Source/Cinematics/TCBSpline.h - Source/Cinematics/resource.h Source/Cinematics/AssetBlendTrack.cpp Source/Cinematics/BoolTrack.cpp Source/Cinematics/CaptureTrack.cpp From bc27465a3c1456465562f1b793658ffa8717be74 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 3 Jan 2022 17:16:46 -0800 Subject: [PATCH 185/284] Removes TCBSpline.h from Gems/Maestro Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Code/Source/Animation/AnimSplineTrack.h | 1 - .../Code/Source/Cinematics/AnimSplineTrack.h | 1 - .../Code/Source/Cinematics/TCBSpline.h | 856 ------------------ Gems/Maestro/Code/maestro_static_files.cmake | 1 - 4 files changed, 859 deletions(-) delete mode 100644 Gems/Maestro/Code/Source/Cinematics/TCBSpline.h diff --git a/Gems/LyShine/Code/Source/Animation/AnimSplineTrack.h b/Gems/LyShine/Code/Source/Animation/AnimSplineTrack.h index 8859118e00..882934d8ee 100644 --- a/Gems/LyShine/Code/Source/Animation/AnimSplineTrack.h +++ b/Gems/LyShine/Code/Source/Animation/AnimSplineTrack.h @@ -10,7 +10,6 @@ #pragma once #include -//#include "TCBSpline.h" #include "2DSpline.h" #define MIN_TIME_PRECISION 0.01f diff --git a/Gems/Maestro/Code/Source/Cinematics/AnimSplineTrack.h b/Gems/Maestro/Code/Source/Cinematics/AnimSplineTrack.h index 93f71d64ac..e621d0ef87 100644 --- a/Gems/Maestro/Code/Source/Cinematics/AnimSplineTrack.h +++ b/Gems/Maestro/Code/Source/Cinematics/AnimSplineTrack.h @@ -13,7 +13,6 @@ #pragma once #include "IMovieSystem.h" -#include "TCBSpline.h" #include "2DSpline.h" #define MIN_TIME_PRECISION 0.01f diff --git a/Gems/Maestro/Code/Source/Cinematics/TCBSpline.h b/Gems/Maestro/Code/Source/Cinematics/TCBSpline.h deleted file mode 100644 index 35eca3ed00..0000000000 --- a/Gems/Maestro/Code/Source/Cinematics/TCBSpline.h +++ /dev/null @@ -1,856 +0,0 @@ -/* - * 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 - * - */ - - -// Description : Classes for TCB Spline curves -// Notice : Deprecated by 2DSpline h - - -#ifndef CRYINCLUDE_CRYMOVIE_TCBSPLINE_H -#define CRYINCLUDE_CRYMOVIE_TCBSPLINE_H -#pragma once - - -#include - - - - -namespace spline -{ - //! Quaternion interpolation for angles > 2PI. - ILINE static Quat CreateSquadRev(f32 angle, // angle of rotation - const Vec3& axis, // the axis of rotation - const Quat& p, // start quaternion - const Quat& a, // start tangent quaternion - const Quat& b, // end tangent quaternion - const Quat& q, // end quaternion - f32 t) // Time parameter, in range [0,1] - { - f32 s, v; - f32 omega = 0.5f * angle; - f32 nrevs = 0; - Quat r, pp, qq; - - if (omega < (gf_PI - 0.00001f)) - { - return Quat::CreateSquad(p, a, b, q, t); - } - - while (omega > (gf_PI - 0.00001f)) - { - omega -= gf_PI; - nrevs += 1.0f; - } - if (omega < 0) - { - omega = 0; - } - s = t * angle / gf_PI; // 2t(omega+Npi)/pi - - if (s < 1.0f) - { - pp = p * Quat(0.0f, axis);//pp = p.Orthog( axis ); - r = Quat::CreateSquad(p, a, pp, pp, s); // in first 90 degrees. - } - else - { - v = s + 1.0f - 2.0f * (nrevs + (omega / gf_PI)); - if (v <= 0.0f) - { - // middle part, on great circle(p,q). - while (s >= 2.0f) - { - s -= 2.0f; - } - pp = p * Quat(0.0f, axis);//pp = p.Orthog(axis); - r = Quat::CreateSlerp(p, pp, s); - } - else - { - // in last 90 degrees. - qq = -q* Quat(0.0f, axis); - r = Quat::CreateSquad(qq, qq, b, q, v); - } - } - return r; - } - - - - - /** TCB spline key extended for tangent unify/break. - */ - template - struct TCBSplineKeyEx - : public TCBSplineKey - { - float theta_from_dd_to_ds; - float scale_from_dd_to_ds; - - void ComputeThetaAndScale() { assert(0); } - void SetOutTangentFromIn() { assert(0); } - void SetInTangentFromOut() { assert(0); } - - TCBSplineKeyEx() - : theta_from_dd_to_ds(gf_PI) - , scale_from_dd_to_ds(1.0f) {} - }; - - template <> - inline void TCBSplineKeyEx::ComputeThetaAndScale() - { - scale_from_dd_to_ds = (easeto + 1.0f) / (easefrom + 1.0f); - float out = atan_tpl(dd); - float in = atan_tpl(ds); - theta_from_dd_to_ds = in + gf_PI - out; - } - - template<> - inline void TCBSplineKeyEx::SetOutTangentFromIn() - { - assert((flags & SPLINE_KEY_TANGENT_ALL_MASK) == SPLINE_KEY_TANGENT_UNIFIED); - easefrom = (easeto + 1.0f) / scale_from_dd_to_ds - 1.0f; - if (easefrom > 1) - { - easefrom = 1.0f; - } - else if (easefrom < 0) - { - easefrom = 0; - } - float in = atan_tpl(ds); - dd = tan_tpl(in + gf_PI - theta_from_dd_to_ds); - } - - template<> - inline void TCBSplineKeyEx::SetInTangentFromOut() - { - assert((flags & SPLINE_KEY_TANGENT_ALL_MASK) == SPLINE_KEY_TANGENT_UNIFIED); - easeto = scale_from_dd_to_ds * (easefrom + 1.0f) - 1.0f; - if (easeto > 1) - { - easeto = 1.0f; - } - else if (easeto < 0) - { - easeto = 0; - } - float out = atan_tpl(dd); - ds = tan_tpl(out + theta_from_dd_to_ds - gf_PI); - } - - /**************************************************************************** - ** TCBSpline class implementation ** - ****************************************************************************/ - template > - class TCBSpline - : public TSpline< Key, HermitBasis > - { - public: - virtual void comp_deriv(); - - protected: - virtual void interp_keys(int key1, int key2, float u, T& val); - float calc_ease(float t, float a, float b); - - private: - void compMiddleDeriv(int curr); - void compFirstDeriv(); - void compLastDeriv(); - void comp2KeyDeriv(); - }; - - ////////////////////////////////////////////////////////////////////////// - template - inline void TCBSpline::compMiddleDeriv(int curr) - { - float dsA, dsB, ddA, ddB; - float A, B, cont1, cont2; - int last = this->num_keys() - 1; - - dsA = 0; - ddA = 0; - - // dsAdjust,ddAdjust apply speed correction when continuity is 0. - // Middle key. - if (curr == 0) - { - // First key. - float dts = (this->GetRangeEnd() - this->time(last)) + (this->time(0) - this->GetRangeStart()); - float fDiv = (dts + this->time(1) - this->time(0)); - if (fDiv != 0.0f) - { - float dt = 2.0f / fDiv; - dsA = dt * dts; - ddA = dt * (this->time(1) - this->time(0)); - } - } - else - { - if (curr == last) - { - // Last key. - float dts = (this->GetRangeEnd() - this->time(last)) + (this->time(0) - this->GetRangeStart()); - float fDiv = (dts + this->time(last) - this->time(last - 1)); - if (fDiv != 0.0f) - { - float dt = 2.0f / fDiv; - dsA = dt * dts; - ddA = dt * (this->time(last) - this->time(last - 1)); - } - } - else - { - // Middle key. - float fDiv = this->time(curr + 1) - this->time(curr - 1); - if (fDiv != 0.f) - { - float dt = 2.0f / fDiv; - dsA = dt * (this->time(curr) - this->time(curr - 1)); - ddA = dt * (this->time(curr + 1) - this->time(curr)); - } - } - } - typename TSpline::key_type& k = this->key(curr); - T ds0 = k.ds; - T dd0 = k.dd; - - float c = (float)fabs(k.cont); - float sa = dsA + c * (1.0f - dsA); - float da = ddA + c * (1.0f - ddA); - - A = 0.5f * (1.0f - k.tens) * (1.0f + k.bias); - B = 0.5f * (1.0f - k.tens) * (1.0f - k.bias); - cont1 = (1.0f - k.cont); - cont2 = (1.0f + k.cont); - //dsA = dsA * A * cont1; - //dsB = dsA * B * cont2; - //ddA = ddA * A * cont2; - //ddB = ddA * B * cont1; - dsA = sa * A * cont1; - dsB = sa * B * cont2; - ddA = da * A * cont2; - ddB = da * B * cont1; - - T qp, qn; - if (curr > 0) - { - qp = this->value(curr - 1); - } - else - { - qp = this->value(last); - } - if (curr < last) - { - qn = this->value(curr + 1); - } - else - { - qn = this->value(0); - } - k.ds = Concatenate(dsA * Subtract(k.value, qp), dsB * Subtract(qn, k.value)); - k.dd = Concatenate(ddA * Subtract(k.value, qp), ddB * Subtract(qn, k.value)); - - switch (this->GetInTangentType(curr)) - { - case SPLINE_KEY_TANGENT_STEP: - case SPLINE_KEY_TANGENT_ZERO: - Zero(k.ds); - break; - case SPLINE_KEY_TANGENT_LINEAR: - k.ds = Subtract(k.value, qp); - break; - case SPLINE_KEY_TANGENT_CUSTOM: - k.ds = ds0; - break; - } - switch (this->GetOutTangentType(curr)) - { - case SPLINE_KEY_TANGENT_STEP: - case SPLINE_KEY_TANGENT_ZERO: - Zero(k.dd); - break; - case SPLINE_KEY_TANGENT_LINEAR: - k.dd = Subtract(qn, k.value); - break; - case SPLINE_KEY_TANGENT_CUSTOM: - k.dd = dd0; - break; - } - } - - template - inline void TCBSpline::compFirstDeriv() - { - typename TSpline::key_type& k = this->key(0); - - if (this->GetInTangentType(0) != SPLINE_KEY_TANGENT_CUSTOM) - { - Zero(k.ds); - } - - if (this->GetOutTangentType(0) != SPLINE_KEY_TANGENT_CUSTOM) - { - k.dd = 0.5f * - (1.0f - k.tens) * (3.0f * - Subtract(Subtract(this->value(1), k.value), this->ds(1))); - } - } - - template - inline void TCBSpline::compLastDeriv() - { - int last = this->num_keys() - 1; - typename TSpline::key_type& k = this->key(last); - - if (this->GetInTangentType(last) != SPLINE_KEY_TANGENT_CUSTOM) - { - k.ds = -0.5f * (1.0f - - k.tens) * (3.0f * - Concatenate(Subtract(this->value(last - 1), k.value), this->dd(last - 1))); - } - - if (this->GetOutTangentType(last) != SPLINE_KEY_TANGENT_CUSTOM) - { - Zero(k.dd); - } - } - - template - inline void TCBSpline::comp2KeyDeriv() - { - typename TSpline::key_type& k1 = this->key(0); - typename TSpline::key_type& k2 = this->key(1); - - typename TSpline::value_type val = Subtract(this->value(1), this->value(0)); - - if (this->GetInTangentType(0) != SPLINE_KEY_TANGENT_CUSTOM) - { - Zero(k1.ds); - } - if (this->GetOutTangentType(0) != SPLINE_KEY_TANGENT_CUSTOM) - { - k1.dd = (1.0f - k1.tens) * val; - } - if (this->GetInTangentType(1) != SPLINE_KEY_TANGENT_CUSTOM) - { - k2.ds = (1.0f - k2.tens) * val; - } - if (this->GetOutTangentType(1) != SPLINE_KEY_TANGENT_CUSTOM) - { - Zero(k2.dd); - } - } - - template - inline void TCBSpline::comp_deriv() - { - if (this->num_keys() > 1) - { - if ((this->num_keys() == 2) && !this->closed()) - { - comp2KeyDeriv(); - return; - } - if (this->closed()) - { - for (int i = 0; i < this->num_keys(); ++i) - { - compMiddleDeriv(i); - } - } - else - { - for (int i = 1; i < (this->num_keys() - 1); ++i) - { - compMiddleDeriv(i); - } - compFirstDeriv(); - compLastDeriv(); - } - } - this->SetModified(false); - } - - template - inline float TCBSpline::calc_ease(float t, float a, float b) - { - float k; - float s = a + b; - - if (t == 0.0f || t == 1.0f) - { - return t; - } - if (s == 0.0f) - { - return t; - } - if (s > 1.0f) - { - k = 1.0f / s; - a *= k; - b *= k; - } - k = 1.0f / (2.0f - a - b); - if (t < a) - { - return ((k / a) * t * t); - } - else - { - if (t < 1.0f - b) - { - return (k * (2.0f * t - a)); - } - else - { - t = 1.0f - t; - return (1.0f - (k / b) * t * t); - } - } - } - - template - inline void TCBSpline::interp_keys(int from, int to, float u, T& val) - { - if (this->GetOutTangentType(from) == SPLINE_KEY_TANGENT_STEP) - { - val = this->value(to); - } - else if (this->GetInTangentType(to) == SPLINE_KEY_TANGENT_STEP) - { - val = this->value(from); - } - else - { - u = calc_ease(u, this->key(from).easefrom, this->key(to).easeto); - typename TSpline::basis_type basis(u); - val = Concatenate( - Concatenate( - Concatenate( - (basis[0] * this->value(from)), (basis[1] * this->value(to)) - ), - (basis[2] * this->dd(from)) - ), - (basis[3] * this->ds(to)) - ); - } - } - - - - /**************************************************************************** - ** TCBQuatSpline class implementation ** - ****************************************************************************/ - ////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - class TCBQuatSpline - : public TCBSpline - { - public: - //void interpolate( float time,value_type& val ); - void comp_deriv(); - - protected: - void interp_keys(int key1, int key2, float u, value_type& val); - - private: - void compKeyDeriv(int curr); - - // Loacal function to add quaternions. - Quat AddQuat(const Quat& q1, const Quat& q2) - { - return Quat(q1.w + q2.w, q1.v.x + q2.v.x, q1.v.y + q2.v.y, q1.v.z + q2.v.z); - } - }; - - inline void TCBQuatSpline::interp_keys(int from, int to, float u, value_type& val) - { - u = calc_ease(u, key(from).easefrom, key(to).easeto); - basis_type basis(u); - //val = SquadRev( angle(to),axis(to), value(from), dd(from), ds(to), value(to), u ); - val = Quat::CreateSquad(value(from), dd(from), ds(to), value(to), u); - val = (val).GetNormalized(); // Normalize quaternion. - } - - - inline void TCBQuatSpline::comp_deriv() - { - if (num_keys() > 1) - { - for (int i = 0; i < num_keys(); ++i) - { - compKeyDeriv(i); - } - } - this->SetModified(false); - } - - - - inline void TCBQuatSpline::compKeyDeriv(int curr) - { - Quat qp, qm; - float fp, fn; - int last = num_keys() - 1; - - if (curr > 0 || closed()) - { - int prev = (curr != 0) ? curr - 1 : last; - qm = value(prev); - if ((qm | (value(curr))) < 0.0f) - { - qm = -qm; - } - qm = Quat::LnDif(qm.GetNormalizedSafe(), value(curr).GetNormalizedSafe()); - } - - if (curr < last || closed()) - { - int next = (curr != last) ? curr + 1 : 0; - Quat qnext = value(next); - if ((qnext | (value(curr))) < 0.0f) - { - qnext = -qnext; - } - qp = value(curr); - qp = Quat::LnDif(qp.GetNormalizedSafe(), qnext.GetNormalizedSafe()); - } - - if (curr == 0 && !closed()) - { - qm = qp; - } - if (curr == last && !closed()) - { - qp = qm; - } - - key_type& k = key(curr); - float c = (float)fabs(k.cont); - - fp = fn = 1.0f; - if ((curr > 0 && curr < last) || closed()) - { - if (curr == 0) - { - // First key. - float dts = (this->GetRangeEnd() - this->time(last)) + (this->time(0) - this->GetRangeStart()); - float fDiv = (dts + this->time(1) - this->time(0)); - if (fDiv != 0.0f) - { - float dt = 2.0f / fDiv; - fp = dt * dts; - fn = dt * (this->time(1) - this->time(0)); - } - } - else - { - if (curr == last) - { - // Last key. - float dts = (this->GetRangeEnd() - this->time(last)) + (this->time(0) - this->GetRangeStart()); - float fDiv = (dts + this->time(last) - this->time(last - 1)); - if (fDiv != 0.0f) - { - float dt = 2.0f / fDiv; - fp = dt * dts; - fn = dt * (this->time(last) - this->time(last - 1)); - } - } - else - { - // Middle key. - float fDiv = (this->time(curr + 1) - this->time(curr - 1)); - if (fDiv != 0.0f) - { - float dt = 2.0f / fDiv; - fp = dt * (this->time(curr) - this->time(curr - 1)); - fn = dt * (this->time(curr + 1) - this->time(curr)); - } - } - } - fp += c - c * fp; - fn += c - c * fn; - } - - float tm, cm, cp, bm, bp, tmcm, tmcp, ksm, ksp, kdm, kdp; - - cm = 1.0f - k.cont; - tm = 0.5f * (1.0f - k.tens); - cp = 2.0f - cm; - bm = 1.0f - k.bias; - bp = 2.0f - bm; - tmcm = tm * cm; - tmcp = tm * cp; - ksm = 1.0f - tmcm * bp * fp; - ksp = -tmcp * bm * fp; - kdm = tmcp * bp * fn; - kdp = tmcm * bm * fn - 1.0f; - - Quat qa = 0.5f * AddQuat(kdm * qm, kdp * qp); - Quat qb = 0.5f * AddQuat(ksm * qm, ksp * qp); - qa = Quat::exp(qa.v); - qb = Quat::exp(qb.v); - - // ds = qb, dd = qa. - k.ds = value(curr) * qb; - k.dd = value(curr) * qa; - } - - /**************************************************************************** - ** TCBAngleAxisSpline class implementation ** - ****************************************************************************/ - /////////////////////////////////////////////////////////////////////////////// - // - // TCBAngleAxisSpline takes as input relative Angle-Axis values. - // Interpolated result is returned as Normalized quaternion. - // - ////////////////////////////////////////////////////////////////////////// - struct SAngleAxis - { - float angle; - Vec3 axis; - }; - - - class TCBAngleAxisSpline - : public TCBSpline - { - public: - //void interpolate( float time,value_type& val ); - void comp_deriv(); - - // Angle axis used for quaternion. - float& angle(int i) { return key(i).angle; }; - Vec3& axis(int i) { return key(i).axis; }; - - protected: - void interp_keys(int key1, int key2, float u, value_type& val); - - private: - virtual void compKeyDeriv(int curr); - - // Loacal function to add quaternions. - Quat AddQuat(const Quat& q1, const Quat& q2) - { - return Quat(q1.w + q2.w, q1.v.x + q2.v.x, q1.v.y + q2.v.y, q1.v.z + q2.v.z); - } - }; - - ////////////////////////////////////////////////////////////////////////// - inline void TCBAngleAxisSpline::interp_keys(int from, int to, float u, value_type& val) - { - u = calc_ease(u, key(from).easefrom, key(to).easeto); - basis_type basis(u); - val = CreateSquadRev(angle(to), axis(to), value(from), dd(from), ds(to), value(to), u); - val = (val).GetNormalized(); // Normalize quaternion. - } - - ////////////////////////////////////////////////////////////////////////// - inline void TCBAngleAxisSpline::comp_deriv() - { - // Convert from relative angle-axis to absolute quaternion. - Quat q, lastq; - lastq.SetIdentity(); - for (int i = 0; i < num_keys(); ++i) - { - q.SetRotationAA(angle(i), axis(i)); - q.Normalize(); // Normalize quaternion - q = lastq * q; - lastq = q; - value(i) = q; - } - - if (num_keys() > 1) - { - for (int i = 0; i < num_keys(); ++i) - { - compKeyDeriv(i); - } - } - this->SetModified(false); - } - - ////////////////////////////////////////////////////////////////////////// - inline void TCBAngleAxisSpline::compKeyDeriv(int curr) - { - Quat qp, qm; - float fp, fn; - int last = num_keys() - 1; - - if (curr > 0 || closed()) - { - int prev = (curr != 0) ? curr - 1 : last; - if (angle(curr) > gf_PI2) - { - Vec3 a = axis(curr); - qm = Quat(0, Quat::log(Quat(0, a.x, a.y, a.z))); - } - else - { - qm = value(prev); - if ((qm | (value(curr))) < 0.0f) - { - qm = -qm; - } - qm = Quat::LnDif(qm, value(curr)); - } - } - - if (curr < last || closed()) - { - int next = (curr != last) ? curr + 1 : 0; - if (angle(next) > gf_PI2) - { - Vec3 a = axis(next); - qp = Quat(0, Quat::log(Quat(0, a.x, a.y, a.z))); - } - else - { - Quat qnext = value(next); - if ((qnext | (value(curr))) < 0.0f) - { - qnext = -qnext; - } - qp = value(curr); - qp = Quat::LnDif(qp, qnext); - } - } - - if (curr == 0 && !closed()) - { - qm = qp; - } - if (curr == last && !closed()) - { - qp = qm; - } - - key_type& k = key(curr); - float c = (float)fabs(k.cont); - - fp = fn = 1.0f; - if ((curr > 0 && curr < last) || closed()) - { - if (curr == 0) - { - // First key. - float dts = (this->GetRangeEnd() - this->time(last)) + (this->time(0) - this->GetRangeStart()); - float dt = 2.0f / (dts + this->time(1) - this->time(0)); - fp = dt * dts; - fn = dt * (this->time(1) - this->time(0)); - } - else - { - if (curr == last) - { - // Last key. - float dts = (this->GetRangeEnd() - this->time(last)) + (this->time(0) - this->GetRangeStart()); - float dt = 2.0f / (dts + this->time(last) - this->time(last - 1)); - fp = dt * dts; - fn = dt * (this->time(last) - this->time(last - 1)); - } - else - { - // Middle key. - float dt = 2.0f / (this->time(curr + 1) - this->time(curr - 1)); - fp = dt * (this->time(curr) - this->time(curr - 1)); - fn = dt * (this->time(curr + 1) - this->time(curr)); - } - } - fp += c - c * fp; - fn += c - c * fn; - } - - float tm, cm, cp, bm, bp, tmcm, tmcp, ksm, ksp, kdm, kdp; - - cm = 1.0f - k.cont; - tm = 0.5f * (1.0f - k.tens); - cp = 2.0f - cm; - bm = 1.0f - k.bias; - bp = 2.0f - bm; - tmcm = tm * cm; - tmcp = tm * cp; - ksm = 1.0f - tmcm * bp * fp; - ksp = -tmcp * bm * fp; - kdm = tmcp * bp * fn; - kdp = tmcm * bm * fn - 1.0f; - - const Vec3 va = 0.5f * (kdm * qm.v + kdp * qp.v); - const Vec3 vb = 0.5f * (ksm * qm.v + ksp * qp.v); - - const Quat qa = Quat::exp(va); - const Quat qb = Quat::exp(vb); - - // ds = qb, dd = qa. - k.ds = value(curr) * qb; - k.dd = value(curr) * qa; - } - - - ////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - template - class TrackSplineInterpolator - : public spline::CBaseSplineInterpolator< T, spline::TCBSpline > > - { - typedef typename spline::CBaseSplineInterpolator< T, spline::TCBSpline > > I; - public: - virtual void SerializeSpline(XmlNodeRef& node, bool bLoading) {}; - virtual void SetKeyFlags(int k, int flags) - { - if (k >= 0 && k < this->num_keys()) - { - if ((this->key(k).flags & SPLINE_KEY_TANGENT_ALL_MASK) != SPLINE_KEY_TANGENT_UNIFIED - && (flags & SPLINE_KEY_TANGENT_ALL_MASK) == SPLINE_KEY_TANGENT_UNIFIED) - { - this->key(k).ComputeThetaAndScale(); - } - } - spline::CBaseSplineInterpolator< T, spline::TCBSpline > >::SetKeyFlags(k, flags); - } - virtual void SetKeyInTangent(int k, ISplineInterpolator::ValueType tin) - { - if (k >= 0 && k < this->num_keys()) - { - I::FromValueType(tin, this->key(k).ds); - if ((this->key(k).flags & SPLINE_KEY_TANGENT_ALL_MASK) == SPLINE_KEY_TANGENT_UNIFIED) - { - this->key(k).SetOutTangentFromIn(); - } - this->SetModified(true); - } - } - virtual void SetKeyOutTangent(int k, ISplineInterpolator::ValueType tout) - { - if (k >= 0 && k < this->num_keys()) - { - I::FromValueType(tout, this->key(k).dd); - if ((this->key(k).flags & SPLINE_KEY_TANGENT_ALL_MASK) == SPLINE_KEY_TANGENT_UNIFIED) - { - this->key(k).SetInTangentFromOut(); - } - this->SetModified(true); - } - } - }; - - template <> - class TrackSplineInterpolator - : public spline::CBaseSplineInterpolator< Quat, spline::TCBQuatSpline > - { - public: - virtual void SerializeSpline([[maybe_unused]] XmlNodeRef& node, [[maybe_unused]] bool bLoading) {}; - }; -}; // namespace spline - -#endif // CRYINCLUDE_CRYMOVIE_TCBSPLINE_H diff --git a/Gems/Maestro/Code/maestro_static_files.cmake b/Gems/Maestro/Code/maestro_static_files.cmake index 688ae1d074..809f4b3b22 100644 --- a/Gems/Maestro/Code/maestro_static_files.cmake +++ b/Gems/Maestro/Code/maestro_static_files.cmake @@ -21,7 +21,6 @@ set(FILES Source/Cinematics/AnimSequence.h Source/Cinematics/CharacterTrackAnimator.h Source/Cinematics/Movie.h - Source/Cinematics/TCBSpline.h Source/Cinematics/AssetBlendTrack.cpp Source/Cinematics/BoolTrack.cpp Source/Cinematics/CaptureTrack.cpp From 2a924dd7ceeeb8abd0d6ee5085c247861c6257a6 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 3 Jan 2022 17:25:10 -0800 Subject: [PATCH 186/284] Removes WAVUtil.h from Gems/Micropohone Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Gems/Microphone/Code/CMakeLists.txt | 2 - .../Code/Include/Microphone/WAVUtil.h | 108 ------------------ Gems/Microphone/Code/microphone_files.cmake | 1 - 3 files changed, 111 deletions(-) delete mode 100644 Gems/Microphone/Code/Include/Microphone/WAVUtil.h diff --git a/Gems/Microphone/Code/CMakeLists.txt b/Gems/Microphone/Code/CMakeLists.txt index 873d05e98d..bde4f59e4e 100644 --- a/Gems/Microphone/Code/CMakeLists.txt +++ b/Gems/Microphone/Code/CMakeLists.txt @@ -17,8 +17,6 @@ ly_add_target( PLATFORM_INCLUDE_FILES ${pal_source_dir}/platform_${PAL_PLATFORM_NAME_LOWERCASE}.cmake INCLUDE_DIRECTORIES - PRIVATE - Include PUBLIC Source BUILD_DEPENDENCIES diff --git a/Gems/Microphone/Code/Include/Microphone/WAVUtil.h b/Gems/Microphone/Code/Include/Microphone/WAVUtil.h deleted file mode 100644 index 9fdcc95a97..0000000000 --- a/Gems/Microphone/Code/Include/Microphone/WAVUtil.h +++ /dev/null @@ -1,108 +0,0 @@ -/* - * 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 - -namespace Audio -{ - struct WAVHeader - { - AZ::u8 riffTag[4]; - AZ::u32 fileSize; - AZ::u8 waveTag[4]; - AZ::u8 fmtTag[4]; - AZ::u32 fmtSize; - AZ::u16 audioFormat; - AZ::u16 channels; - AZ::u32 sampleRate; - AZ::u32 byteRate; - AZ::u16 blockAlign; - AZ::u16 bitsPerSample; - AZ::u8 dataTag[4]; - AZ::u32 dataSize; - - // defaults to 16 KHz 16 bit mono PCM format - inline WAVHeader() - : fileSize { 0 } - , fmtSize { 16 } - , audioFormat { 1 } - , channels { 1 } - , sampleRate { 16000 } - , bitsPerSample { 16 } - , byteRate { 16000 * 2 } // 16 bit is 2 bytes per sample - , blockAlign { 2 } - , dataSize { 0 } - { - memcpy(riffTag, "RIFF", 4); - memcpy(waveTag, "WAVE", 4); - memcpy(fmtTag, "fmt ", 4); - memcpy(dataTag, "data", 4); - } - }; - - - class WAVUtil - { - public: - WAVHeader m_wavHeader; - - inline WAVUtil(AZ::u32 sampleRate, AZ::u16 bitsPerSample, AZ::u16 channels, bool isFloat) - { - m_wavHeader.sampleRate = sampleRate; - m_wavHeader.bitsPerSample = bitsPerSample; - m_wavHeader.channels = channels; - m_wavHeader.byteRate = static_cast(sampleRate * channels * (bitsPerSample / 8)); - m_wavHeader.audioFormat = isFloat ? 3 : 1; // 1 = PCM 3 = IEEE Float - } - - // Set the wav buffer to use for class operations. This buffer should have reserved - // space at the beginning of the buffer in the amount of sizeof(WAVHeader) which - // this function will write over. The remaining data should be sound data that - // matches your format - inline bool SetBuffer(AZ::u8* buffer, AZStd::size_t bufferSize) - { - if(buffer == nullptr || bufferSize <= sizeof(WAVHeader)) - { - return false; - } - m_buffer = buffer; - m_bufferSize = bufferSize; - m_wavHeader.fileSize = bufferSize - 8; // the 'RIFF' tag and filesize aren't counted in this. - m_wavHeader.dataSize = bufferSize - sizeof(WAVHeader); - AZ::u8* headerBuff = reinterpret_cast(&m_wavHeader); - ::memcpy(m_buffer, headerBuff, sizeof(WAVHeader)); - return true; - } - - inline bool WriteWAVToFile(const AZStd::string& filePath) - { - if(m_buffer == nullptr || m_bufferSize == 0) - { - AZ_TracePrintf("WAVUtil", "WAV buffer invalid, unable to write file. Buffer Ptr: %d, Buffer Size: %d\n", m_buffer, m_bufferSize); - return false; - } - AZ::IO::FileIOStream fileStream(filePath.c_str(), AZ::IO::OpenMode::ModeWrite | AZ::IO::OpenMode::ModeBinary); - if (fileStream.IsOpen()) - { - [[maybe_unused]] auto bytesWritten = fileStream.Write(m_bufferSize, m_buffer); - AZ_TracePrintf("WAVUtil", "Wrote WAV file: %s, %d bytes\n", filePath.c_str(), bytesWritten); - return true; - } - else - { - AZ_TracePrintf("WAVUtil", "Unable to write WAV file, can't open stream for file %s\n", filePath.c_str()); - return false; - } - } - - private: - AZ::u8* m_buffer = nullptr; - AZStd::size_t m_bufferSize = 0; - - }; -} diff --git a/Gems/Microphone/Code/microphone_files.cmake b/Gems/Microphone/Code/microphone_files.cmake index 7ae423e995..4a8acf232d 100644 --- a/Gems/Microphone/Code/microphone_files.cmake +++ b/Gems/Microphone/Code/microphone_files.cmake @@ -11,5 +11,4 @@ set(FILES Source/MicrophoneSystemComponent.h Source/SimpleDownsample.cpp Source/SimpleDownsample.h - Include/Microphone/WAVUtil.h ) From 919c671bfd33734f57021a5ae5a85196f24bdfae Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 3 Jan 2022 17:27:04 -0800 Subject: [PATCH 187/284] Removes WAVUtil.h from another file Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Platform/Android/MicrophoneSystemComponent_Android.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/Gems/Microphone/Code/Source/Platform/Android/MicrophoneSystemComponent_Android.cpp b/Gems/Microphone/Code/Source/Platform/Android/MicrophoneSystemComponent_Android.cpp index 1e696f7978..eb9656e2a0 100644 --- a/Gems/Microphone/Code/Source/Platform/Android/MicrophoneSystemComponent_Android.cpp +++ b/Gems/Microphone/Code/Source/Platform/Android/MicrophoneSystemComponent_Android.cpp @@ -25,8 +25,6 @@ #include #include -#include - namespace Audio { class MicrophoneSystemEventsAndroid : public AZ::EBusTraits From be2e2ed4d121303993ae09cd776e0c88deda7cfb Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Mon, 3 Jan 2022 17:46:40 -0800 Subject: [PATCH 188/284] Removes PhysicsUtils.h and PhysicsUtils.cpp from Gems/Multiplayer Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Multiplayer/Physics/PhysicsUtils.h | 33 ------ .../Code/Source/Physics/PhysicsUtils.cpp | 100 ------------------ Gems/Multiplayer/Code/multiplayer_files.cmake | 1 - 3 files changed, 134 deletions(-) delete mode 100644 Gems/Multiplayer/Code/Include/Multiplayer/Physics/PhysicsUtils.h delete mode 100644 Gems/Multiplayer/Code/Source/Physics/PhysicsUtils.cpp diff --git a/Gems/Multiplayer/Code/Include/Multiplayer/Physics/PhysicsUtils.h b/Gems/Multiplayer/Code/Include/Multiplayer/Physics/PhysicsUtils.h deleted file mode 100644 index a93dcc7a65..0000000000 --- a/Gems/Multiplayer/Code/Include/Multiplayer/Physics/PhysicsUtils.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * 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 - -#include - -namespace Multiplayer -{ - namespace Physics - { - //! Performs rewind-aware ray cast in the default physics world. - //! @param request The ray cast request to make. - //! @return Returns a structure that contains a list of Hits. - AzPhysics::SceneQueryHits RayCast(const AzPhysics::RayCastRequest& request); - - //! Performs rewind-aware shape cast in the default physics world. - //! @param request The shape cast request to make. - //! @return Returns a structure that contains a list of Hits. - AzPhysics::SceneQueryHits ShapeCast(const AzPhysics::ShapeCastRequest& request); - - //! Performs rewind-aware overlap in the default physics world. - //! @param request The overlap request to make. - //! @return Returns a structure that contains a list of Hits. - AzPhysics::SceneQueryHits Overlap(const AzPhysics::OverlapRequest& request); - - } // namespace Physics -} // namespace Multiplayer diff --git a/Gems/Multiplayer/Code/Source/Physics/PhysicsUtils.cpp b/Gems/Multiplayer/Code/Source/Physics/PhysicsUtils.cpp deleted file mode 100644 index c6f5a56422..0000000000 --- a/Gems/Multiplayer/Code/Source/Physics/PhysicsUtils.cpp +++ /dev/null @@ -1,100 +0,0 @@ -/* - * 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 - -#include -#include -#include -#include - -namespace -{ - template - AzPhysics::SceneQueryHits SceneQueryInternal(const RequestT& request) - { - auto* sceneInterface = AZ::Interface::Get(); - if (!sceneInterface) - { - return {}; - } - - AzPhysics::SceneHandle sceneHandle = sceneInterface->GetSceneHandle(AzPhysics::DefaultPhysicsSceneName); - if (sceneHandle == AzPhysics::InvalidSceneHandle) - { - return {}; - } - - Multiplayer::INetworkTime* currentNetTime = Multiplayer::GetNetworkTime(); - - if(!currentNetTime->IsTimeRewound()) - { - // If the time is not rewound, we simply execute the scene query as is. - AzPhysics::SceneQueryHits result = sceneInterface->QueryScene(sceneHandle, &request); - return result; - } - - // If the time is rewound, we want to query against rigid bodies present at the same frame ID: the same as the current rewound time is. - RequestT netSceneQueryRequest = request; - netSceneQueryRequest.m_filterCallback = [&request, currentFrameId = (uint32_t)currentNetTime->GetHostFrameId()]( - const AzPhysics::SimulatedBody* body, const ::Physics::Shape* shape) - { - if (body->GetFrameId() == AzPhysics::SimulatedBody::UndefinedFrameId || body->GetFrameId() == currentFrameId) - { - if (request.m_filterCallback) - { - return request.m_filterCallback(body, shape); - } - - // Overlap filter callbacks return true/false rather than Touch/Block/None - if constexpr (AZStd::is_same_v) - { - return true; - } - else - { - return AzPhysics::SceneQuery::QueryHitType::Touch; - } - } - - if constexpr (AZStd::is_same_v) - { - return false; - } - else - { - return AzPhysics::SceneQuery::QueryHitType::None; - } - }; - - // Execute the scene query modified for the time rewind. - AzPhysics::SceneQueryHits result = sceneInterface->QueryScene(sceneHandle, &netSceneQueryRequest); - return result; - } -} - -namespace Multiplayer -{ - namespace Physics - { - AzPhysics::SceneQueryHits RayCast(const AzPhysics::RayCastRequest& request) - { - return SceneQueryInternal(request); - } - - AzPhysics::SceneQueryHits ShapeCast(const AzPhysics::ShapeCastRequest& request) - { - return SceneQueryInternal(request); - } - - AzPhysics::SceneQueryHits Overlap(const AzPhysics::OverlapRequest& request) - { - return SceneQueryInternal(request); - } - } // namespace Physics -} // namespace Multiplayer diff --git a/Gems/Multiplayer/Code/multiplayer_files.cmake b/Gems/Multiplayer/Code/multiplayer_files.cmake index 7c5f3a946b..9c83af49a3 100644 --- a/Gems/Multiplayer/Code/multiplayer_files.cmake +++ b/Gems/Multiplayer/Code/multiplayer_files.cmake @@ -57,7 +57,6 @@ set(FILES Include/Multiplayer/NetworkTime/RewindableFixedVector.inl Include/Multiplayer/NetworkTime/RewindableObject.h Include/Multiplayer/NetworkTime/RewindableObject.inl - Include/Multiplayer/Physics/PhysicsUtils.h Include/Multiplayer/ReplicationWindows/IReplicationWindow.h Include/Multiplayer/AutoGen/AutoComponentTypes_Header.jinja Include/Multiplayer/AutoGen/AutoComponentTypes_Source.jinja From 617b9d1136386d6ef5728ddfd85ff29e302b1fe8 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Tue, 4 Jan 2022 16:49:08 -0800 Subject: [PATCH 189/284] Removes BuilderSystemComponent.h from Gems/ScriptCanvas Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Code/Builder/BuilderSystemComponent.h | 51 ------------------- ...scriptcanvasgem_editor_builder_files.cmake | 1 - 2 files changed, 52 deletions(-) delete mode 100644 Gems/ScriptCanvas/Code/Builder/BuilderSystemComponent.h diff --git a/Gems/ScriptCanvas/Code/Builder/BuilderSystemComponent.h b/Gems/ScriptCanvas/Code/Builder/BuilderSystemComponent.h deleted file mode 100644 index 3ad5ee4fb0..0000000000 --- a/Gems/ScriptCanvas/Code/Builder/BuilderSystemComponent.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * 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 - - - -#include -#include - -namespace AZ -{ - namespace Data - { - class AssetHandler; - } -} - -namespace ScriptCanvasBuilder -{ - class BuilderSystemComponent - : public AZ::Component - { - public: - AZ_COMPONENT(BuilderSystemComponent, "{2FB1C848-B863-4562-9C4B-01E18BD61583}"); - - BuilderSystemComponent(); - ~BuilderSystemComponent() override; - - static void Reflect(AZ::ReflectContext* context); - - static void GetDependentServices(AZ::ComponentDescriptor::DependencyArrayType& dependent); - - //////////////////////////////////////////////////////////////////////// - // AZ::Component... - void Init() override; - void Activate() override; - void Deactivate() override; - //////////////////////////////////////////////////////////////////////// - - private: - BuilderSystemComponent(const BuilderSystemComponent&) = delete; - - AZStd::unique_ptr m_scriptCanvasAssetHandler; - }; -} diff --git a/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_builder_files.cmake b/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_builder_files.cmake index 6a3af2afc3..c1c0108b75 100644 --- a/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_builder_files.cmake +++ b/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_builder_files.cmake @@ -7,7 +7,6 @@ # set(FILES - Builder/BuilderSystemComponent.h Builder/ScriptCanvasBuilder.cpp Builder/ScriptCanvasBuilder.h Builder/ScriptCanvasBuilderComponent.cpp From 44f0646906bde3efd28b36651115bb274766fd67 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Tue, 4 Jan 2022 16:57:54 -0800 Subject: [PATCH 190/284] Removes empty Debugger files from Gems/ScriptCanvas/Code/Editor Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../ScriptCanvas/Code/Editor/Debugger/Debugger.cpp | 9 --------- Gems/ScriptCanvas/Code/Editor/Debugger/Debugger.h | 14 -------------- .../Code/Editor/ScriptCanvasEditorGem.cpp | 2 -- 3 files changed, 25 deletions(-) delete mode 100644 Gems/ScriptCanvas/Code/Editor/Debugger/Debugger.cpp delete mode 100644 Gems/ScriptCanvas/Code/Editor/Debugger/Debugger.h diff --git a/Gems/ScriptCanvas/Code/Editor/Debugger/Debugger.cpp b/Gems/ScriptCanvas/Code/Editor/Debugger/Debugger.cpp deleted file mode 100644 index 8ed679c751..0000000000 --- a/Gems/ScriptCanvas/Code/Editor/Debugger/Debugger.cpp +++ /dev/null @@ -1,9 +0,0 @@ -/* - * 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 - * - */ - - diff --git a/Gems/ScriptCanvas/Code/Editor/Debugger/Debugger.h b/Gems/ScriptCanvas/Code/Editor/Debugger/Debugger.h deleted file mode 100644 index 5820d1b01e..0000000000 --- a/Gems/ScriptCanvas/Code/Editor/Debugger/Debugger.h +++ /dev/null @@ -1,14 +0,0 @@ -/* - * 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 DragonUI -{ - -} diff --git a/Gems/ScriptCanvas/Code/Editor/ScriptCanvasEditorGem.cpp b/Gems/ScriptCanvas/Code/Editor/ScriptCanvasEditorGem.cpp index 1a3bb0e4f9..68b9d21939 100644 --- a/Gems/ScriptCanvas/Code/Editor/ScriptCanvasEditorGem.cpp +++ b/Gems/ScriptCanvas/Code/Editor/ScriptCanvasEditorGem.cpp @@ -26,8 +26,6 @@ #include #include -#include - #include #include From 364eb039bbd7aa5dc2bbba036f978ac61c022cbc Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 5 Jan 2022 14:54:15 -0800 Subject: [PATCH 191/284] Removes ScriptCanvasEnumDataInterface.h and ScriptCanvasReadOnlyDataInterface.h from Gems/ScriptCanvas Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Code/Editor/Components/EditorGraph.cpp | 2 - .../ScriptCanvasEnumDataInterface.h | 98 ------------------- .../ScriptCanvasReadOnlyDataInterface.h | 44 --------- .../Code/scriptcanvasgem_editor_files.cmake | 2 - 4 files changed, 146 deletions(-) delete mode 100644 Gems/ScriptCanvas/Code/Editor/GraphCanvas/DataInterfaces/ScriptCanvasEnumDataInterface.h delete mode 100644 Gems/ScriptCanvas/Code/Editor/GraphCanvas/DataInterfaces/ScriptCanvasReadOnlyDataInterface.h diff --git a/Gems/ScriptCanvas/Code/Editor/Components/EditorGraph.cpp b/Gems/ScriptCanvas/Code/Editor/Components/EditorGraph.cpp index 469482e604..f59f05b462 100644 --- a/Gems/ScriptCanvas/Code/Editor/Components/EditorGraph.cpp +++ b/Gems/ScriptCanvas/Code/Editor/Components/EditorGraph.cpp @@ -49,11 +49,9 @@ AZ_POP_DISABLE_WARNING #include #include #include -#include #include #include #include -#include #include #include #include diff --git a/Gems/ScriptCanvas/Code/Editor/GraphCanvas/DataInterfaces/ScriptCanvasEnumDataInterface.h b/Gems/ScriptCanvas/Code/Editor/GraphCanvas/DataInterfaces/ScriptCanvasEnumDataInterface.h deleted file mode 100644 index be548556d2..0000000000 --- a/Gems/ScriptCanvas/Code/Editor/GraphCanvas/DataInterfaces/ScriptCanvasEnumDataInterface.h +++ /dev/null @@ -1,98 +0,0 @@ -/* - * 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 - -#include -#include - -#include - -#include "ScriptCanvasDataInterface.h" - -namespace ScriptCanvasEditor -{ - // Used for fixed values value input. - class ScriptCanvasEnumDataInterface - : public ScriptCanvasDataInterface - { - public: - AZ_CLASS_ALLOCATOR(ScriptCanvasEnumDataInterface, AZ::SystemAllocator, 0); - - ScriptCanvasEnumDataInterface(const AZ::EntityId& nodeId, const ScriptCanvas::SlotId& slotId) - : ScriptCanvasDataInterface(nodeId, slotId) - { - } - - ~ScriptCanvasEnumDataInterface() = default; - - void AddElement(int32_t element, const AZStd::string& displayName) - { - QString qtName = displayName.c_str(); - m_comboBoxModel.AddElement(element, qtName); - } - - // GraphCanvas::ComboBoxDataInterface - GraphCanvas::ComboBoxItemModelInterface* GetItemInterface() override - { - return &m_comboBoxModel; - } - - void AssignIndex(const QModelIndex& index) override - { - ScriptCanvas::ModifiableDatumView datumView; - ModifySlotObject(datumView); - - if (datumView.IsValid()) - { - int32_t value = m_comboBoxModel.GetValueForIndex(index); - - datumView.SetAs(value); - - PostUndoPoint(); - PropertyGridRequestBus::Broadcast(&PropertyGridRequests::RefreshPropertyGrid); - } - } - - QModelIndex GetAssignedIndex() const override - { - const ScriptCanvas::Datum* object = GetSlotObject(); - - if (object) - { - const int* element = object->GetAs(); - - if (element) - { - return m_comboBoxModel.GetIndexForValue(*element); - } - } - - return m_comboBoxModel.GetDefaultIndex(); - } - - QString GetDisplayString() const override - { - const ScriptCanvas::Datum* object = GetSlotObject(); - - if (object) - { - const int* element = object->GetAs(); - - if (element) - { - return m_comboBoxModel.GetNameForValue((*element)); - } - } - return GraphCanvas::ComboBoxDataInterface::GetDisplayString(); - } - //// - - private: - GraphCanvas::GraphCanvasListComboBoxModel m_comboBoxModel; - }; -} diff --git a/Gems/ScriptCanvas/Code/Editor/GraphCanvas/DataInterfaces/ScriptCanvasReadOnlyDataInterface.h b/Gems/ScriptCanvas/Code/Editor/GraphCanvas/DataInterfaces/ScriptCanvasReadOnlyDataInterface.h deleted file mode 100644 index 41ac73d0aa..0000000000 --- a/Gems/ScriptCanvas/Code/Editor/GraphCanvas/DataInterfaces/ScriptCanvasReadOnlyDataInterface.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * 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 - -#include - -#include "ScriptCanvasDataInterface.h" - -namespace ScriptCanvasEditor -{ - class ScriptCanvasReadOnlyDataInterface - : public ScriptCanvasDataInterface - { - public: - AZ_CLASS_ALLOCATOR(ScriptCanvasReadOnlyDataInterface, AZ::SystemAllocator, 0); - ScriptCanvasReadOnlyDataInterface(const AZ::EntityId& nodeId, const ScriptCanvas::SlotId& slotId) - : ScriptCanvasDataInterface(nodeId, slotId) - { - } - - ~ScriptCanvasReadOnlyDataInterface() = default; - - // ReadOnlyDataInterface - AZStd::string GetString() const override - { - AZStd::string retVal; - - const ScriptCanvas::Datum* object = GetSlotObject(); - - if (object) - { - object->ToString(retVal); - } - - return retVal; - } - //// - }; -} diff --git a/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake b/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake index b2f98226b4..d920c69f45 100644 --- a/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake +++ b/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake @@ -94,12 +94,10 @@ set(FILES Editor/GraphCanvas/DataInterfaces/ScriptCanvasAssetIdDataInterface.h Editor/GraphCanvas/DataInterfaces/ScriptCanvasBoolDataInterface.h Editor/GraphCanvas/DataInterfaces/ScriptCanvasEntityIdDataInterface.h - Editor/GraphCanvas/DataInterfaces/ScriptCanvasEnumDataInterface.h Editor/GraphCanvas/DataInterfaces/ScriptCanvasDataInterface.h Editor/GraphCanvas/DataInterfaces/ScriptCanvasColorDataInterface.h Editor/GraphCanvas/DataInterfaces/ScriptCanvasCRCDataInterface.h Editor/GraphCanvas/DataInterfaces/ScriptCanvasNumericDataInterface.h - Editor/GraphCanvas/DataInterfaces/ScriptCanvasReadOnlyDataInterface.h Editor/GraphCanvas/DataInterfaces/ScriptCanvasStringDataInterface.h Editor/GraphCanvas/DataInterfaces/ScriptCanvasVectorDataInterface.h Editor/GraphCanvas/DataInterfaces/ScriptCanvasVariableDataInterface.h From 7e4f708da444e53c8205ceb01f560f5f2c747fd7 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 5 Jan 2022 14:59:30 -0800 Subject: [PATCH 192/284] Removes unused buses from from Gems/ScriptCanvas Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../ScriptCanvas/Bus/DocumentContextBus.h | 108 ------------------ .../Bus/ScriptCanvasAssetNodeBus.h | 44 ------- 2 files changed, 152 deletions(-) delete mode 100644 Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Bus/DocumentContextBus.h delete mode 100644 Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Bus/ScriptCanvasAssetNodeBus.h diff --git a/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Bus/DocumentContextBus.h b/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Bus/DocumentContextBus.h deleted file mode 100644 index 7c5acbe209..0000000000 --- a/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Bus/DocumentContextBus.h +++ /dev/null @@ -1,108 +0,0 @@ -/* - * 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 -#include -#include -#include -#include - -#include - -namespace AZ -{ - namespace Data - { - class AssetInfo; - } -} - -namespace ScriptCanvasEditor -{ - enum class ScriptCanvasFileState : AZ::s32 - { - NEW, - MODIFIED, - UNMODIFIED, - INVALID = -1 - }; - - struct ScriptCanvasAssetFileInfo - { - AZ_TYPE_INFO(ScriptCanvasAssetFileInfo, "{81F6B390-7CF3-4A97-B5A6-EC09330F184E}"); - AZ_CLASS_ALLOCATOR(ScriptCanvasAssetFileInfo, AZ::SystemAllocator, 0); - ScriptCanvasFileState m_fileModificationState = ScriptCanvasFileState::INVALID; - bool m_reloadable = false; - AZStd::string m_absolutePath; - }; - - //! Bus for handling transactions involving ScriptCanvas Assets, such as graph Saving, graph modification state, etc - class DocumentContextRequests - : public AZ::EBusTraits - { - public: - static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single; - - //! Creates a new ScriptCanvas asset and registers it with the document context - virtual AZ::Data::Asset CreateScriptCanvasAsset(AZStd::string_view relativeAssetPath) = 0; - - using SaveCB = AZStd::function; - // !Callback will fire when a new in-memory Script Canvas asset is saved to disk for the first time and a new AssetId is generated for it - using SourceFileChangedCB = AZStd::function; - //! Saves a ScriptCanvas asset using the supplied AssetPath structure - //! \param assetAbsolutePath path where ScriptCanvas asset will be saved on disk - virtual void SaveScriptCanvasAsset(AZStd::string_view/*assetAbsolutePath*/, AZ::Data::Asset, const SaveCB&, const SourceFileChangedCB&) = 0; - - //! Loads a ScriptCanvas asset by looking up the assetPath in the AssetCatalog - //! \param assetPath filepath to asset that will be looked up in the AssetCatalog for the AssetId - //! \param loadBlocking should the loading of the ScriptCanvas asset be blocking - virtual AZ::Data::Asset LoadScriptCanvasAsset(const char* assetPath, bool loadBlocking) = 0; - virtual AZ::Data::Asset LoadScriptCanvasAssetById(const AZ::Data::AssetId& assetId, bool loadBlocking) = 0; - - //! Registers a ScriptCanvas assetId with the DocumentContext for lookup. ScriptCanvasAssetFileInfo will be associated with the ScriptCanvasAsset - //! \return true if the assetId is newly registered, false if the assetId is already registered - virtual bool RegisterScriptCanvasAsset(const AZ::Data::AssetId& assetId, const ScriptCanvasAssetFileInfo& assetFileInfo) = 0; - - //! Unregisters a ScriptCanvas assetId with the DocumentContext for lookup - //! \return true if assetId was registered with the DocumentContext, false otherwise - virtual bool UnregisterScriptCanvasAsset(const AZ::Data::AssetId& assetId) = 0; - - virtual ScriptCanvasFileState GetScriptCanvasAssetModificationState(const AZ::Data::AssetId& assetId) = 0; - virtual void SetScriptCanvasAssetModificationState(const AZ::Data::AssetId& assetId, ScriptCanvasFileState) = 0; - - //! Retrieves the file information for the registered ScriptCanvas asset - virtual AZ::Outcome GetFileInfo(const AZ::Data::AssetId& assetId) const = 0; - virtual AZ::Outcome SetFileInfo(const AZ::Data::AssetId& assetId, const ScriptCanvasAssetFileInfo& fileInfo) = 0; - }; - - using DocumentContextRequestBus = AZ::EBus; - - class DocumentContextNotifications - : public AZ::EBusTraits - { - public: - static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::ById; - using BusIdType = AZ::Data::AssetId; - - virtual void OnAssetModificationStateChanged(ScriptCanvasFileState) {} - - //! Notification which fires after an ScriptCanvasDocumentContext has received it's on AssetReady callback - //! \param scriptCanvasAsset Script Canvas asset which is now ready for use in the Editor - virtual void OnScriptCanvasAssetReady(const AZ::Data::Asset& /*scriptCanvasAsset*/) {} - - //! Notification which fires after an ScriptCanvasDocumentContext has received it's on AssetReloaded callback - //! \param scriptCanvasAsset Script Canvas asset which is now ready for use in the Editor - virtual void OnScriptCanvasAssetReloaded(const AZ::Data::Asset& /*scriptCanvaAsset */) {} - - //! Notification which fires after an ScriptCanvasDocumentContext has received it's on AssetReady callback - //! \param AssetId AssetId of unloaded ScriptCanvas - virtual void OnScriptCanvasAssetUnloaded(const AZ::Data::AssetId& /*assetId*/) {} - }; - - using DocumentContextNotificationBus = AZ::EBus; -} diff --git a/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Bus/ScriptCanvasAssetNodeBus.h b/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Bus/ScriptCanvasAssetNodeBus.h deleted file mode 100644 index 1b0d5e5a04..0000000000 --- a/Gems/ScriptCanvas/Code/Editor/Include/ScriptCanvas/Bus/ScriptCanvasAssetNodeBus.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * 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 - -#include -#include -#include - -namespace AZ -{ - class Vector2; -} - -namespace GraphCanvas -{ - class SceneSliceInstance; - class SceneSliceReference; - struct ExposedEndpointInfo; - - //! SubSceneRequests - //! EBus for forwarding scene request for a node to the a contained sub scene - class SubSceneRequests - : public AZ::EBusTraits - { - public: - static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::ById; - using BusIdType = AZ::EntityId; - - //! Retrieves the SceneSlice reference of the sub scene - virtual SceneSliceReference* GetReference() = 0; - virtual const SceneSliceReference* GetReferenceConst() const = 0; - - //! Retrieves the SceneSlice instance from the sub scene scene slice reference - virtual SceneSliceInstance* GetInstance() = 0; - }; - - using SubSceneRequestBus = AZ::EBus; -} From 5209c28021c0ac922ae214eca1760abd72ad0032 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 5 Jan 2022 15:06:52 -0800 Subject: [PATCH 193/284] Removes LibraryDataModel.cpp/h from Gems/ScriptCanvas Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Code/Editor/Model/LibraryDataModel.cpp | 125 ------------------ .../Code/Editor/Model/LibraryDataModel.h | 56 -------- .../Code/scriptcanvasgem_editor_files.cmake | 2 - 3 files changed, 183 deletions(-) delete mode 100644 Gems/ScriptCanvas/Code/Editor/Model/LibraryDataModel.cpp delete mode 100644 Gems/ScriptCanvas/Code/Editor/Model/LibraryDataModel.h diff --git a/Gems/ScriptCanvas/Code/Editor/Model/LibraryDataModel.cpp b/Gems/ScriptCanvas/Code/Editor/Model/LibraryDataModel.cpp deleted file mode 100644 index 40e43ca7e8..0000000000 --- a/Gems/ScriptCanvas/Code/Editor/Model/LibraryDataModel.cpp +++ /dev/null @@ -1,125 +0,0 @@ -/* - * 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 "LibraryDataModel.h" - -#include - -#include -#include -#include - -#include -#include - -namespace ScriptCanvasEditor -{ - namespace Model - { - LibraryData::LibraryData(QObject* parent /*= nullptr*/) : QAbstractTableModel(parent) - { - Add("All", AZ::Uuid::CreateNull()); - - AZ::SerializeContext* serializeContext = nullptr; - AZ::ComponentApplicationBus::BroadcastResult(serializeContext, &AZ::ComponentApplicationRequests::GetSerializeContext); - serializeContext->EnumerateDerived( - [this] - (const AZ::SerializeContext::ClassData* classData, [[maybe_unused]] const AZ::Uuid& classUuid) -> bool - { - Add(classData->m_name, classData->m_typeId); - return true; - }); - } - - int LibraryData::rowCount([[maybe_unused]] const QModelIndex &parent /*= QModelIndex()*/) const - { - return m_data.size(); - } - - int LibraryData::columnCount([[maybe_unused]] const QModelIndex &parent /*= QModelIndex()*/) const - { - return ColumnIndex::Count; - } - - QVariant LibraryData::data(const QModelIndex &index, int role /*= Qt::DisplayRole*/) const - { - switch (role) - { - case DataSetRole: - { - if (index.column() == ColumnIndex::Name) - { - const Data* data = &m_data[index.row()]; - return QVariant::fromValue(reinterpret_cast(const_cast(data))); - } - } - break; - - case Qt::DisplayRole: - { - if (index.column() == ColumnIndex::Name) - { - return m_data[index.row()].m_name; - } - } - break; - - case Qt::DecorationRole: - { - AZ::SerializeContext* serializeContext = nullptr; - EBUS_EVENT_RESULT(serializeContext, AZ::ComponentApplicationBus, GetSerializeContext); - const AZ::SerializeContext::ClassData* classData = serializeContext->FindClassData(m_data[index.row()].m_uuid); - - if (classData && classData->m_editData) - { - const auto& editorElementData = classData->m_editData->FindElementData(AZ::Edit::ClassElements::EditorData); - if (editorElementData) - { - if (auto iconAttribute = editorElementData->FindAttribute(AZ::Edit::Attributes::Icon)) - { - if (auto iconAttributeData = azdynamic_cast*>(iconAttribute)) - { - AZStd::string iconAttributeValue = iconAttributeData->Get(nullptr); - if (!iconAttributeValue.empty()) - { - return QVariant(QIcon(QString(iconAttributeValue.c_str()))); - } - } - } - } - } - else - { - QString defaultIcon = QStringLiteral("Icons/ScriptCanvas/Libraries/All.png"); - return QVariant(QIcon(defaultIcon)); - } - - return QVariant(); - } - break; - - default: - break; - } - - return QVariant(); - } - - Qt::ItemFlags LibraryData::flags([[maybe_unused]] const QModelIndex &index) const - { - return Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsDragEnabled; - } - - void LibraryData::Add(const char* name, const AZ::Uuid& uuid) - { - m_data.push_back({ QString(name), uuid }); - } - - } -} - diff --git a/Gems/ScriptCanvas/Code/Editor/Model/LibraryDataModel.h b/Gems/ScriptCanvas/Code/Editor/Model/LibraryDataModel.h deleted file mode 100644 index 66f6a823bb..0000000000 --- a/Gems/ScriptCanvas/Code/Editor/Model/LibraryDataModel.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * 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 - -#include -#include - -namespace ScriptCanvasEditor -{ - namespace Model - { - //! Stores the data for the list of ScriptCanvas libraries - class LibraryData - : public QAbstractTableModel - { - public: - - enum Role - { - DataSetRole = Qt::UserRole - }; - - enum ColumnIndex - { - Name, - Count - }; - - LibraryData(QObject* parent = nullptr); - - int rowCount(const QModelIndex &parent = QModelIndex()) const override; - int columnCount(const QModelIndex &parent = QModelIndex()) const override; - - QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; - - Qt::ItemFlags flags(const QModelIndex &index) const override; - - void Add(const char* name, const AZ::Uuid& uuid); - - struct Data - { - QString m_name; - AZ::Uuid m_uuid; - }; - typedef QVector DataSet; - - DataSet m_data; - }; - } -} diff --git a/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake b/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake index d920c69f45..cead461ffe 100644 --- a/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake +++ b/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake @@ -106,8 +106,6 @@ set(FILES Editor/GraphCanvas/PropertyInterfaces/ScriptCanvasStringPropertyDataInterface.h Editor/Model/EntityMimeDataHandler.h Editor/Model/EntityMimeDataHandler.cpp - Editor/Model/LibraryDataModel.h - Editor/Model/LibraryDataModel.cpp Editor/Model/UnitTestBrowserFilterModel.h Editor/Model/UnitTestBrowserFilterModel.cpp Editor/Nodes/NodeCreateUtils.h From 7b1e06fac6c91f2dfc5426983dd5f0342d06537d Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 5 Jan 2022 19:02:41 -0800 Subject: [PATCH 194/284] Removes GenericLineEditCtrl.h/inl/cpp from Gems/ScriptCanvas (which lead to removing a target) Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Gems/ScriptCanvas/Code/CMakeLists.txt | 35 +---- .../View/EditCtrls/GenericLineEditCtrl.h | 133 ------------------ .../View/EditCtrls/GenericLineEditCtrl.inl | 123 ---------------- .../View/EditCtrls/GenericLineEditCtrl.cpp | 91 ------------ .../Code/Editor/SystemComponent.cpp | 1 - .../scriptcanvasgem_editor_static_files.cmake | 12 -- Gems/ScriptCanvasTesting/Code/CMakeLists.txt | 3 +- 7 files changed, 5 insertions(+), 393 deletions(-) delete mode 100644 Gems/ScriptCanvas/Code/Editor/Static/Include/ScriptCanvas/View/EditCtrls/GenericLineEditCtrl.h delete mode 100644 Gems/ScriptCanvas/Code/Editor/Static/Include/ScriptCanvas/View/EditCtrls/GenericLineEditCtrl.inl delete mode 100644 Gems/ScriptCanvas/Code/Editor/Static/Source/View/EditCtrls/GenericLineEditCtrl.cpp delete mode 100644 Gems/ScriptCanvas/Code/scriptcanvasgem_editor_static_files.cmake diff --git a/Gems/ScriptCanvas/Code/CMakeLists.txt b/Gems/ScriptCanvas/Code/CMakeLists.txt index 7be5ec962e..cdaf7df338 100644 --- a/Gems/ScriptCanvas/Code/CMakeLists.txt +++ b/Gems/ScriptCanvas/Code/CMakeLists.txt @@ -137,32 +137,6 @@ ly_create_alias(NAME ScriptCanvas.Clients NAMESPACE Gem TARGETS Gem::ScriptCanv ly_create_alias(NAME ScriptCanvas.Servers NAMESPACE Gem TARGETS Gem::ScriptCanvas) if(PAL_TRAIT_BUILD_HOST_TOOLS) - ly_add_target( - NAME ScriptCanvasEditor STATIC - NAMESPACE Gem - AUTOMOC - FILES_CMAKE - scriptcanvasgem_editor_static_files.cmake - COMPILE_DEFINITIONS - PUBLIC - SCRIPTCANVAS_ERRORS_ENABLED - PRIVATE - SCRIPTCANVAS_EDITOR - ${SCRIPT_CANVAS_COMMON_DEFINES} - INCLUDE_DIRECTORIES - PUBLIC - . - Editor/Include - Editor/Static/Include - Editor/Assets - BUILD_DEPENDENCIES - PRIVATE - AZ::AzCore - AZ::AzToolsFramework - 3rdParty::Qt::Widgets - Gem::ScriptCanvas - ) - ly_add_target( NAME ScriptCanvas.Editor.Static STATIC NAMESPACE Gem @@ -181,11 +155,12 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS) SCRIPTCANVAS_EDITOR ${SCRIPT_CANVAS_COMMON_DEFINES} INCLUDE_DIRECTORIES + PUBLIC + Editor/Include PRIVATE . Editor Tools - Editor/Include ${SCRIPT_CANVAS_AUTOGEN_BUILD_DIR} BUILD_DEPENDENCIES PUBLIC @@ -194,7 +169,6 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS) AZ::AssetBuilderSDK ${additional_dependencies} Gem::ScriptCanvas - Gem::ScriptCanvasEditor Gem::ScriptEvents.Static Gem::GraphCanvasWidgets Gem::ExpressionEvaluation.Static @@ -206,7 +180,6 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS) ly_add_target( NAME ScriptCanvas.Editor GEM_MODULE - NAMESPACE Gem FILES_CMAKE scriptcanvasgem_editor_shared_files.cmake @@ -217,10 +190,11 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS) SCRIPTCANVAS_EDITOR ${SCRIPT_CANVAS_COMMON_DEFINES} INCLUDE_DIRECTORIES + PUBLIC + Editor/Include PRIVATE . Editor - Editor/Include BUILD_DEPENDENCIES PRIVATE AZ::AzToolsFramework @@ -294,7 +268,6 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED) BUILD_DEPENDENCIES PRIVATE AZ::AzTest - Gem::ScriptCanvasEditor Gem::ScriptCanvas.Editor.Static ) ly_add_googletest( diff --git a/Gems/ScriptCanvas/Code/Editor/Static/Include/ScriptCanvas/View/EditCtrls/GenericLineEditCtrl.h b/Gems/ScriptCanvas/Code/Editor/Static/Include/ScriptCanvas/View/EditCtrls/GenericLineEditCtrl.h deleted file mode 100644 index 950fa8ef2e..0000000000 --- a/Gems/ScriptCanvas/Code/Editor/Static/Include/ScriptCanvas/View/EditCtrls/GenericLineEditCtrl.h +++ /dev/null @@ -1,133 +0,0 @@ -/* - * 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 - -#if !defined(Q_MOC_RUN) -#include -#include -#include -#include - -#include -#endif - -class QLineEdit; - -namespace ScriptCanvasEditor -{ - namespace EditCtrl - { - template using PropertyToStringCB = AZStd::function; - template using StringToPropertyCB = AZStd::function; - using StringValidatorCB = AZStd::function; - } - - template - class GenericLineEditHandler; - - class GenericLineEditCtrlBase - : public QWidget - { - Q_OBJECT - public: - template - friend class GenericLineEditHandler; - AZ_RTTI(GenericLineEditCtrlBase, "{0EC84840-666F-424E-9443-D20D8FEF743B}"); - AZ_CLASS_ALLOCATOR(GenericLineEditCtrlBase, AZ::SystemAllocator, 0); - - GenericLineEditCtrlBase(QWidget* pParent = nullptr); - ~GenericLineEditCtrlBase() override = default; - - AZStd::string value() const; - - QWidget* GetFirstInTabOrder(); - QWidget* GetLastInTabOrder(); - void UpdateTabOrder(); - - signals: - void valueChanged(AZStd::string& newValue); - - public: - void setValue(AZStd::string_view val); - void setMaxLen(int maxLen); - void onChildLineEditValueChange(const QString& value); - - protected: - void focusInEvent(QFocusEvent* e) override; - - private: - QLineEdit* m_pLineEdit; - }; - - template - class GenericLineEditCtrl - : public GenericLineEditCtrlBase - { - public: - friend class GenericLineEditHandler; - AZ_RTTI(((GenericLineEditCtrl), "{4A094311-8956-40C9-95B5-7D50C2574B45}", T), GenericLineEditCtrlBase); - AZ_CLASS_ALLOCATOR(GenericLineEditCtrl, AZ::SystemAllocator, 0); - - GenericLineEditCtrl(QWidget* pParent = nullptr) - : GenericLineEditCtrlBase(pParent) - {} - ~GenericLineEditCtrl() override = default; - - private: - // Stores per ctrl instance string <-> T conversion functions - EditCtrl::PropertyToStringCB m_propertyToStringCB; - EditCtrl::StringToPropertyCB m_stringToPropertyCB; - }; - - template - class GenericLineEditHandler - : QObject - , public AzToolsFramework::PropertyHandler - { - public: - AZ_CLASS_ALLOCATOR(GenericLineEditHandler, AZ::SystemAllocator, 0); - - GenericLineEditHandler(const EditCtrl::PropertyToStringCB& propertyToStringCB, const EditCtrl::StringToPropertyCB& stringToPropertyCB, - const EditCtrl::StringValidatorCB& stringValidatorCB = {}); - - AZ::u32 GetHandlerName(void) const override { return ScriptCanvas::Attributes::UIHandlers::GenericLineEdit; } - QWidget* GetFirstInTabOrder(GenericLineEditCtrlBase* widget) override { return widget->GetFirstInTabOrder(); } - QWidget* GetLastInTabOrder(GenericLineEditCtrlBase* widget) override { return widget->GetLastInTabOrder(); } - void UpdateWidgetInternalTabbing(GenericLineEditCtrlBase* widget) override { widget->UpdateTabOrder(); } - - QWidget* CreateGUI(QWidget* pParent) override; - void ConsumeAttribute(GenericLineEditCtrlBase* GUI, AZ::u32 attrib, AzToolsFramework::PropertyAttributeReader* attrValue, const char* debugName) override; - void WriteGUIValuesIntoProperty(size_t index, GenericLineEditCtrlBase* GUI, typename GenericLineEditHandler::property_t& instance, AzToolsFramework::InstanceDataNode* node) override; - bool ReadValuesIntoGUI(size_t index, GenericLineEditCtrlBase* GUI, const typename GenericLineEditHandler::property_t& instance, AzToolsFramework::InstanceDataNode* node) override; - - bool AutoDelete() const override { return false; } - - private: - // Stores per handler string <-> T conversion functions - // There is only 1 handler per instantiated T - EditCtrl::PropertyToStringCB m_propertyToStringCB; - EditCtrl::StringToPropertyCB m_stringToPropertyCB; - EditCtrl::StringValidatorCB m_stringValidatorCB; - }; - - template - AzToolsFramework::PropertyHandlerBase* RegisterGenericLineEditHandler(const EditCtrl::PropertyToStringCB& propertyToStringCB, const EditCtrl::StringToPropertyCB& stringToPropertyCB) - { - if (!AzToolsFramework::PropertyTypeRegistrationMessages::Bus::FindFirstHandler()) - { - return nullptr; - } - - auto propertyHandler(aznew GenericLineEditHandler(propertyToStringCB, stringToPropertyCB)); - AzToolsFramework::PropertyTypeRegistrationMessages::Bus::Broadcast(&AzToolsFramework::PropertyTypeRegistrationMessages::RegisterPropertyType, propertyHandler); - return propertyHandler; - } -} - -#include diff --git a/Gems/ScriptCanvas/Code/Editor/Static/Include/ScriptCanvas/View/EditCtrls/GenericLineEditCtrl.inl b/Gems/ScriptCanvas/Code/Editor/Static/Include/ScriptCanvas/View/EditCtrls/GenericLineEditCtrl.inl deleted file mode 100644 index e889a937ab..0000000000 --- a/Gems/ScriptCanvas/Code/Editor/Static/Include/ScriptCanvas/View/EditCtrls/GenericLineEditCtrl.inl +++ /dev/null @@ -1,123 +0,0 @@ -/* - * 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 - -namespace ScriptCanvasEditor -{ - class GenericStringValidator - : public QValidator - { - public: - AZ_CLASS_ALLOCATOR(GenericStringValidator, AZ::SystemAllocator, 0); - GenericStringValidator(const EditCtrl::StringValidatorCB& stringValidatorCB) - : m_stringValidatorCB(stringValidatorCB) - {} - - QValidator::State validate(QString& input, int& pos) const override - { - return m_stringValidatorCB ? m_stringValidatorCB(input, pos) : QValidator::State::Acceptable; - } - - private: - EditCtrl::StringValidatorCB m_stringValidatorCB; - }; - - template - GenericLineEditHandler::GenericLineEditHandler(const EditCtrl::PropertyToStringCB& propertyToStringCB, const EditCtrl::StringToPropertyCB& stringToPropertyCB, - const EditCtrl::StringValidatorCB& stringValidatorCB) - : m_propertyToStringCB(propertyToStringCB) - , m_stringToPropertyCB(stringToPropertyCB) - , m_stringValidatorCB(stringValidatorCB) - { - } - - template - QWidget* GenericLineEditHandler::CreateGUI(QWidget* pParent) - { - auto newCtrl = aznew GenericLineEditCtrl(pParent); - if (m_stringValidatorCB) - { - newCtrl->m_pLineEdit->setValidator(aznew GenericStringValidator(m_stringValidatorCB)); - } - connect(newCtrl, &GenericLineEditCtrl::valueChanged, this, [newCtrl]() - { - AzToolsFramework::PropertyEditorGUIMessages::Bus::Broadcast(&AzToolsFramework::PropertyEditorGUIMessages::RequestWrite, newCtrl); - }); - return newCtrl; - } - - template - void GenericLineEditHandler::ConsumeAttribute(GenericLineEditCtrlBase* GUI, AZ::u32 attrib, AzToolsFramework::PropertyAttributeReader* attrReader, const char* debugName) - { - (void)debugName; - if (attrib == ScriptCanvas::Attributes::StringToProperty) - { - EditCtrl::StringToPropertyCB value; - if (attrReader->Read>(value)) - { - auto genericGUI = azrtti_cast*>(GUI); - genericGUI->m_stringToPropertyCB = value; - } - else - { - AZ_WarningOnce("Script Canvas", false, "Failed to read 'StringToProperty' attribute from property '%s'. Expected a function.", debugName, AZ::AzTypeInfo::Name()); - } - } - else if (attrib == ScriptCanvas::Attributes::PropertyToString) - { - EditCtrl::PropertyToStringCB value; - if (attrReader->Read>(value)) - { - auto genericGUI = azrtti_cast*>(GUI); - genericGUI->m_propertyToStringCB = value; - } - else - { - AZ_WarningOnce("Script Canvas", false, "Failed to read 'PropertyToString' attribute from property '%s'. Expected a function.", debugName, AZ::AzTypeInfo::Name()); - } - } - } - - template - void GenericLineEditHandler::WriteGUIValuesIntoProperty(size_t, GenericLineEditCtrlBase* GUI, typename GenericLineEditHandler::property_t& instance, AzToolsFramework::InstanceDataNode*) - { - // Invoke the ctrl string -> T override if it exist otherwise attempt to invoke the handler string -> T override - auto genericGUI = azrtti_cast*>(GUI); - if (genericGUI->m_stringToPropertyCB) - { - genericGUI->m_stringToPropertyCB(instance, genericGUI->value()); - } - else if (m_stringToPropertyCB) - { - m_stringToPropertyCB(instance, GUI->value()); - } - } - - template - bool GenericLineEditHandler::ReadValuesIntoGUI(size_t, GenericLineEditCtrlBase* GUI, const typename GenericLineEditHandler::property_t& instance, AzToolsFramework::InstanceDataNode*) - { - // Invoke the ctrl T -> string override if it exist otherwise attempt to invoke the handler T -> string override - auto genericGUI = azrtti_cast*>(GUI); - if (genericGUI->m_propertyToStringCB) - { - AZStd::string val; - genericGUI->m_propertyToStringCB(val, instance); - genericGUI->setValue(val); - return true; - } - else if (m_propertyToStringCB) - { - AZStd::string val; - m_propertyToStringCB(val, instance); - GUI->setValue(val); - return true; - } - return false; - } -} diff --git a/Gems/ScriptCanvas/Code/Editor/Static/Source/View/EditCtrls/GenericLineEditCtrl.cpp b/Gems/ScriptCanvas/Code/Editor/Static/Source/View/EditCtrls/GenericLineEditCtrl.cpp deleted file mode 100644 index 6eb2b63129..0000000000 --- a/Gems/ScriptCanvas/Code/Editor/Static/Source/View/EditCtrls/GenericLineEditCtrl.cpp +++ /dev/null @@ -1,91 +0,0 @@ -/* - * 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 - -#include -#include - -#include - -namespace ScriptCanvasEditor -{ - GenericLineEditCtrlBase::GenericLineEditCtrlBase(QWidget* pParent) - : QWidget(pParent) - { - // create the gui, it consists of a layout, and in that layout, a text field for the value - // and then a slider for the value. - QHBoxLayout* pLayout = new QHBoxLayout(this); - m_pLineEdit = new QLineEdit(this); - - pLayout->setSpacing(4); - pLayout->setContentsMargins(1, 0, 1, 0); - - pLayout->addWidget(m_pLineEdit); - - m_pLineEdit->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed); - m_pLineEdit->setMinimumWidth(AzToolsFramework::PropertyQTConstant_MinimumWidth); - m_pLineEdit->setFixedHeight(AzToolsFramework::PropertyQTConstant_DefaultHeight); - - m_pLineEdit->setFocusPolicy(Qt::StrongFocus); - - setLayout(pLayout); - setFocusProxy(m_pLineEdit); - setFocusPolicy(m_pLineEdit->focusPolicy()); - - connect(m_pLineEdit, &QLineEdit::textChanged, this, &GenericLineEditCtrlBase::onChildLineEditValueChange); - connect(m_pLineEdit, &QLineEdit::editingFinished, this, [this]() - { - AzToolsFramework::PropertyEditorGUIMessages::Bus::Broadcast(&AzToolsFramework::PropertyEditorGUIMessages::OnEditingFinished, this); - }); - } - - void GenericLineEditCtrlBase::setValue(AZStd::string_view value) - { - QSignalBlocker signalBlocker(m_pLineEdit); - m_pLineEdit->setText(value.data()); - } - - void GenericLineEditCtrlBase::focusInEvent(QFocusEvent* e) - { - m_pLineEdit->event(e); - m_pLineEdit->selectAll(); - } - - AZStd::string GenericLineEditCtrlBase::value() const - { - return AZStd::string(m_pLineEdit->text().toUtf8().data()); - } - - void GenericLineEditCtrlBase::setMaxLen(int maxLen) - { - QSignalBlocker signalBlocker(m_pLineEdit); - m_pLineEdit->setMaxLength(maxLen); - } - - void GenericLineEditCtrlBase::onChildLineEditValueChange(const QString& newValue) - { - AZStd::string changedVal(newValue.toUtf8().data()); - emit valueChanged(changedVal); - } - - QWidget* GenericLineEditCtrlBase::GetFirstInTabOrder() - { - return m_pLineEdit; - } - QWidget* GenericLineEditCtrlBase::GetLastInTabOrder() - { - return m_pLineEdit; - } - - void GenericLineEditCtrlBase::UpdateTabOrder() - { - // There's only one QT widget on this property. - } -} - -#include diff --git a/Gems/ScriptCanvas/Code/Editor/SystemComponent.cpp b/Gems/ScriptCanvas/Code/Editor/SystemComponent.cpp index 6087dfb98f..23c127b83b 100644 --- a/Gems/ScriptCanvas/Code/Editor/SystemComponent.cpp +++ b/Gems/ScriptCanvas/Code/Editor/SystemComponent.cpp @@ -36,7 +36,6 @@ #include #include #include -#include #include diff --git a/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_static_files.cmake b/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_static_files.cmake deleted file mode 100644 index 3ef141f0f7..0000000000 --- a/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_static_files.cmake +++ /dev/null @@ -1,12 +0,0 @@ -# -# 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 - Editor/Static/Include/ScriptCanvas/View/EditCtrls/GenericLineEditCtrl.h - Editor/Static/Source/View/EditCtrls/GenericLineEditCtrl.cpp -) diff --git a/Gems/ScriptCanvasTesting/Code/CMakeLists.txt b/Gems/ScriptCanvasTesting/Code/CMakeLists.txt index 499bb84c2d..c90eff9389 100644 --- a/Gems/ScriptCanvasTesting/Code/CMakeLists.txt +++ b/Gems/ScriptCanvasTesting/Code/CMakeLists.txt @@ -29,7 +29,7 @@ ly_add_target( BUILD_DEPENDENCIES PUBLIC Gem::ScriptCanvas - Gem::ScriptCanvasEditor + Gem::ScriptCanvas.Editor Gem::GraphCanvasWidgets Gem::ScriptEvents.Editor PRIVATE @@ -44,7 +44,6 @@ ly_add_target( *.ScriptCanvasNodeable.xml,ScriptCanvasNodeable_Source.jinja,$path/$fileprefix.generated.cpp RUNTIME_DEPENDENCIES Gem::ScriptCanvas.Editor - Gem::ScriptCanvasEditor Gem::GraphCanvasWidgets Gem::ScriptEvents ) From 1342d54c7d9bb6840905bdc7cef3ba5f57da3a40 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 5 Jan 2022 19:23:26 -0800 Subject: [PATCH 195/284] Removes Utilities/Command.cpp/h from Gems/ScriptCanvas Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Code/Editor/Utilities/Command.cpp | 14 --------- .../Code/Editor/Utilities/Command.h | 29 ------------------- .../Code/scriptcanvasgem_editor_files.cmake | 2 -- 3 files changed, 45 deletions(-) delete mode 100644 Gems/ScriptCanvas/Code/Editor/Utilities/Command.cpp delete mode 100644 Gems/ScriptCanvas/Code/Editor/Utilities/Command.h diff --git a/Gems/ScriptCanvas/Code/Editor/Utilities/Command.cpp b/Gems/ScriptCanvas/Code/Editor/Utilities/Command.cpp deleted file mode 100644 index 482347f37e..0000000000 --- a/Gems/ScriptCanvas/Code/Editor/Utilities/Command.cpp +++ /dev/null @@ -1,14 +0,0 @@ -/* - * 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 "Command.h" - -namespace ScriptCanvasEditor -{ - -} diff --git a/Gems/ScriptCanvas/Code/Editor/Utilities/Command.h b/Gems/ScriptCanvas/Code/Editor/Utilities/Command.h deleted file mode 100644 index a391a4d833..0000000000 --- a/Gems/ScriptCanvas/Code/Editor/Utilities/Command.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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 -#include - -namespace ScriptCanvasEditor -{ - // Commands are named wrappers around ebus events - class Command - { - public: - - //template - //void Execute(const char* commandName, args&&... parameters); - - private: - - AZStd::string m_commandName; - AZStd::string m_description; - AZStd::string m_category; - AZStd::string m_iconPath; - }; -} diff --git a/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake b/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake index cead461ffe..a830ba08ff 100644 --- a/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake +++ b/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake @@ -119,8 +119,6 @@ set(FILES Editor/Undo/ScriptCanvasGraphCommand.h Editor/Undo/ScriptCanvasUndoManager.cpp Editor/Undo/ScriptCanvasUndoManager.h - Editor/Utilities/Command.h - Editor/Utilities/Command.cpp Editor/Utilities/CommonSettingsConfigurations.h Editor/Utilities/CommonSettingsConfigurations.cpp Editor/Utilities/RecentFiles.h From 3db71950e864367b423b1018497d2ffb1bf96cb3 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 5 Jan 2022 19:31:10 -0800 Subject: [PATCH 196/284] Removes NewGraphDialog from Gems/ScriptCanvas Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Code/Editor/SystemComponent.cpp | 1 - .../Editor/View/Dialogs/NewGraphDialog.cpp | 51 --------------- .../Code/Editor/View/Dialogs/NewGraphDialog.h | 42 ------------- .../Editor/View/Dialogs/NewGraphDialog.ui | 63 ------------------- .../Code/scriptcanvasgem_editor_files.cmake | 3 - 5 files changed, 160 deletions(-) delete mode 100644 Gems/ScriptCanvas/Code/Editor/View/Dialogs/NewGraphDialog.cpp delete mode 100644 Gems/ScriptCanvas/Code/Editor/View/Dialogs/NewGraphDialog.h delete mode 100644 Gems/ScriptCanvas/Code/Editor/View/Dialogs/NewGraphDialog.ui diff --git a/Gems/ScriptCanvas/Code/Editor/SystemComponent.cpp b/Gems/ScriptCanvas/Code/Editor/SystemComponent.cpp index 23c127b83b..59c52de05c 100644 --- a/Gems/ScriptCanvas/Code/Editor/SystemComponent.cpp +++ b/Gems/ScriptCanvas/Code/Editor/SystemComponent.cpp @@ -20,7 +20,6 @@ #include #include #include -#include #include #include #include diff --git a/Gems/ScriptCanvas/Code/Editor/View/Dialogs/NewGraphDialog.cpp b/Gems/ScriptCanvas/Code/Editor/View/Dialogs/NewGraphDialog.cpp deleted file mode 100644 index 402d80fb32..0000000000 --- a/Gems/ScriptCanvas/Code/Editor/View/Dialogs/NewGraphDialog.cpp +++ /dev/null @@ -1,51 +0,0 @@ -/* - * 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 "NewGraphDialog.h" - -#include -#include - -#include "Editor/View/Dialogs/ui_NewGraphDialog.h" - - - -namespace ScriptCanvasEditor -{ - NewGraphDialog::NewGraphDialog(const QString& title, const QString& text, QWidget* pParent /*=nullptr*/) - : QDialog(pParent) - , ui(new Ui::NewGraphDialog) - , m_text(text) - { - ui->setupUi(this); - - setWindowTitle(title); - - QObject::connect(ui->GraphName, &QLineEdit::returnPressed, this, &NewGraphDialog::OnOK); - QObject::connect(ui->GraphName, &QLineEdit::textChanged, this, &NewGraphDialog::OnTextChanged); - QObject::connect(ui->ok, &QPushButton::clicked, this, &NewGraphDialog::OnOK); - QObject::connect(ui->cancel, &QPushButton::clicked, this, &QDialog::reject); - - ui->ok->setEnabled(false); - } - - void NewGraphDialog::OnTextChanged(const QString& text) - { - ui->ok->setEnabled(!text.isEmpty()); - } - - void NewGraphDialog::OnOK() - { - QString itemName = ui->GraphName->text(); - m_text = itemName.toLocal8Bit().constData(); - - accept(); - } - - #include -} diff --git a/Gems/ScriptCanvas/Code/Editor/View/Dialogs/NewGraphDialog.h b/Gems/ScriptCanvas/Code/Editor/View/Dialogs/NewGraphDialog.h deleted file mode 100644 index de6c2a102f..0000000000 --- a/Gems/ScriptCanvas/Code/Editor/View/Dialogs/NewGraphDialog.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * 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 - -#if !defined(Q_MOC_RUN) -#include -#include -#endif - -namespace Ui -{ - class NewGraphDialog; -} - -namespace ScriptCanvasEditor -{ - class NewGraphDialog - : public QDialog - { - Q_OBJECT - - public: - NewGraphDialog(const QString& title, const QString& text, QWidget* pParent = nullptr); - - const QString& GetText() const { return m_text; } - - protected: - - void OnOK(); - void OnTextChanged(const QString& text); - - QString m_text; - - Ui::NewGraphDialog* ui; - }; -} diff --git a/Gems/ScriptCanvas/Code/Editor/View/Dialogs/NewGraphDialog.ui b/Gems/ScriptCanvas/Code/Editor/View/Dialogs/NewGraphDialog.ui deleted file mode 100644 index 89861c0a49..0000000000 --- a/Gems/ScriptCanvas/Code/Editor/View/Dialogs/NewGraphDialog.ui +++ /dev/null @@ -1,63 +0,0 @@ - - - NewGraphDialog - - - - 0 - 0 - 300 - 72 - - - - - - - Name: - - - - - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - - - - - Qt::Horizontal - - - - 40 - 10 - - - - - - - - OK - - - - - - - Cancel - - - - - - - - - - diff --git a/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake b/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake index a830ba08ff..51843a8837 100644 --- a/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake +++ b/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake @@ -125,9 +125,6 @@ set(FILES Editor/Utilities/RecentFiles.cpp Editor/Utilities/RecentAssetPath.h Editor/Utilities/RecentAssetPath.cpp - Editor/View/Dialogs/NewGraphDialog.h - Editor/View/Dialogs/NewGraphDialog.cpp - Editor/View/Dialogs/NewGraphDialog.ui Editor/View/Dialogs/SettingsDialog.h Editor/View/Dialogs/SettingsDialog.cpp Editor/View/Dialogs/SettingsDialog.ui From 4015ffd0736ff4f5a75f66b81c9add1bacd3afe7 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 5 Jan 2022 19:34:17 -0800 Subject: [PATCH 197/284] Removes WidgetBus.h from Gems/ScriptCanvas Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Code/Editor/View/Widgets/WidgetBus.h | 25 ------------------- .../Code/scriptcanvasgem_editor_files.cmake | 1 - 2 files changed, 26 deletions(-) delete mode 100644 Gems/ScriptCanvas/Code/Editor/View/Widgets/WidgetBus.h diff --git a/Gems/ScriptCanvas/Code/Editor/View/Widgets/WidgetBus.h b/Gems/ScriptCanvas/Code/Editor/View/Widgets/WidgetBus.h deleted file mode 100644 index 8b78b07524..0000000000 --- a/Gems/ScriptCanvas/Code/Editor/View/Widgets/WidgetBus.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * 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 - - -#include -#include - -namespace ScriptCanvasEditor -{ - class WidgetNotification : public AZ::EBusTraits - { - public: - virtual void OnLibrarySelected(const AZ::Uuid& library) = 0; - }; - - using WidgetNotificationBus = AZ::EBus; - -} diff --git a/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake b/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake index 51843a8837..a9624185ea 100644 --- a/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake +++ b/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake @@ -161,7 +161,6 @@ set(FILES Editor/View/Widgets/ScriptCanvasNodePaletteToolbar.ui Editor/View/Widgets/SourceHandlePropertyAssetCtrl.h Editor/View/Widgets/SourceHandlePropertyAssetCtrl.cpp - Editor/View/Widgets/WidgetBus.h Editor/View/Widgets/DataTypePalette/DataTypePaletteModel.cpp Editor/View/Widgets/DataTypePalette/DataTypePaletteModel.h Editor/View/Widgets/NodePalette/CreateNodeMimeEvent.cpp From d858c168317a58e86ab92198deaaef5cebac042a Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 5 Jan 2022 19:39:06 -0800 Subject: [PATCH 198/284] Removes LoggingTypes.cpp from Gems/ScriptCanvas Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../View/Widgets/LoggingPanel/LoggingTypes.cpp | 13 ------------- .../Code/scriptcanvasgem_editor_files.cmake | 1 - 2 files changed, 14 deletions(-) delete mode 100644 Gems/ScriptCanvas/Code/Editor/View/Widgets/LoggingPanel/LoggingTypes.cpp diff --git a/Gems/ScriptCanvas/Code/Editor/View/Widgets/LoggingPanel/LoggingTypes.cpp b/Gems/ScriptCanvas/Code/Editor/View/Widgets/LoggingPanel/LoggingTypes.cpp deleted file mode 100644 index 8a99701802..0000000000 --- a/Gems/ScriptCanvas/Code/Editor/View/Widgets/LoggingPanel/LoggingTypes.cpp +++ /dev/null @@ -1,13 +0,0 @@ -/* - * 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 - -namespace ScriptCanvasEditor -{ -} diff --git a/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake b/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake index a9624185ea..90bf36ac8f 100644 --- a/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake +++ b/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake @@ -182,7 +182,6 @@ set(FILES Editor/View/Widgets/NodePalette/VariableNodePaletteTreeItemTypes.h Editor/View/Widgets/LoggingPanel/LoggingDataAggregator.cpp Editor/View/Widgets/LoggingPanel/LoggingDataAggregator.h - Editor/View/Widgets/LoggingPanel/LoggingTypes.cpp Editor/View/Widgets/LoggingPanel/LoggingTypes.h Editor/View/Widgets/LoggingPanel/LoggingWindow.cpp Editor/View/Widgets/LoggingPanel/LoggingWindow.h From 5c557f56a3555aec73bac449f38203c9755e5672 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 5 Jan 2022 19:43:21 -0800 Subject: [PATCH 199/284] Removes LoggingAssetDataAggregator/LoggingAssetWindowSession from Gems/ScriptCanvas Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../LoggingAssetDataAggregator.cpp | 70 ------------------- .../LoggingAssetDataAggregator.h | 44 ------------ .../LoggingAssetWindowSession.cpp | 48 ------------- .../LoggingAssetWindowSession.h | 40 ----------- .../Code/scriptcanvasgem_editor_files.cmake | 4 -- 5 files changed, 206 deletions(-) delete mode 100644 Gems/ScriptCanvas/Code/Editor/View/Widgets/LoggingPanel/AssetWindowSession/LoggingAssetDataAggregator.cpp delete mode 100644 Gems/ScriptCanvas/Code/Editor/View/Widgets/LoggingPanel/AssetWindowSession/LoggingAssetDataAggregator.h delete mode 100644 Gems/ScriptCanvas/Code/Editor/View/Widgets/LoggingPanel/AssetWindowSession/LoggingAssetWindowSession.cpp delete mode 100644 Gems/ScriptCanvas/Code/Editor/View/Widgets/LoggingPanel/AssetWindowSession/LoggingAssetWindowSession.h diff --git a/Gems/ScriptCanvas/Code/Editor/View/Widgets/LoggingPanel/AssetWindowSession/LoggingAssetDataAggregator.cpp b/Gems/ScriptCanvas/Code/Editor/View/Widgets/LoggingPanel/AssetWindowSession/LoggingAssetDataAggregator.cpp deleted file mode 100644 index 08e80c30d7..0000000000 --- a/Gems/ScriptCanvas/Code/Editor/View/Widgets/LoggingPanel/AssetWindowSession/LoggingAssetDataAggregator.cpp +++ /dev/null @@ -1,70 +0,0 @@ -/* - * 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 - -namespace ScriptCanvasEditor -{ - /////////////////////////////// - // LoggingAssetDataAggregator - /////////////////////////////// - - LoggingAssetDataAggregator::LoggingAssetDataAggregator(const AZ::Data::AssetId& assetId) - : m_assetId(assetId) - { - } - - LoggingAssetDataAggregator::~LoggingAssetDataAggregator() - { - } - - void LoggingAssetDataAggregator::Visit(ScriptCanvas::AnnotateNodeSignal& /**/) - { - // call parent process function in the aggregator class - } - - void LoggingAssetDataAggregator::Visit(ScriptCanvas::ExecutionThreadEnd& /*loggableEvent*/) - { - // call parent process function in the aggregator class - } - - void LoggingAssetDataAggregator::Visit(ScriptCanvas::ExecutionThreadBeginning& /*loggableEvent*/) - { - // call parent process function in the aggregator class - } - - void LoggingAssetDataAggregator::Visit(ScriptCanvas::GraphActivation& /*loggableEvent*/) - { - // call parent process function in the aggregator class - } - - void LoggingAssetDataAggregator::Visit(ScriptCanvas::GraphDeactivation& /*loggableEvent*/) - { - // call parent process function in the aggregator class - } - - void LoggingAssetDataAggregator::Visit(ScriptCanvas::NodeStateChange& loggableEvent) - { - ProcessNodeStateChanged(loggableEvent); - } - - void LoggingAssetDataAggregator::Visit(ScriptCanvas::InputSignal& loggableEvent) - { - ProcessInputSignal(loggableEvent); - } - - void LoggingAssetDataAggregator::Visit(ScriptCanvas::OutputSignal& loggableEvent) - { - ProcessOutputSignal(loggableEvent); - } - - void LoggingAssetDataAggregator::Visit(ScriptCanvas::VariableChange& loggableEvent) - { - ProcessVariableChangedSignal(loggableEvent); - } -} diff --git a/Gems/ScriptCanvas/Code/Editor/View/Widgets/LoggingPanel/AssetWindowSession/LoggingAssetDataAggregator.h b/Gems/ScriptCanvas/Code/Editor/View/Widgets/LoggingPanel/AssetWindowSession/LoggingAssetDataAggregator.h deleted file mode 100644 index 71efcbb017..0000000000 --- a/Gems/ScriptCanvas/Code/Editor/View/Widgets/LoggingPanel/AssetWindowSession/LoggingAssetDataAggregator.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * 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 - -#include -#include -#include - -namespace ScriptCanvasEditor -{ - class LoggingAssetDataAggregator - : public LoggingDataAggregator - , public ScriptCanvas::LoggableEventVisitor - { - public: - AZ_CLASS_ALLOCATOR(LoggingAssetDataAggregator, AZ::SystemAllocator, 0); - - LoggingAssetDataAggregator(const AZ::Data::AssetId& assetId); - ~LoggingAssetDataAggregator() override; - - bool CanCaptureData() const override { return false; } - bool IsCapturingData() const override { return false; } - - protected: - void Visit(ScriptCanvas::AnnotateNodeSignal&) override; - void Visit(ScriptCanvas::ExecutionThreadEnd&) override; - void Visit(ScriptCanvas::ExecutionThreadBeginning&) override; - void Visit(ScriptCanvas::GraphActivation&) override; - void Visit(ScriptCanvas::GraphDeactivation&) override; - void Visit(ScriptCanvas::NodeStateChange&) override; - void Visit(ScriptCanvas::InputSignal&) override; - void Visit(ScriptCanvas::OutputSignal&) override; - void Visit(ScriptCanvas::VariableChange&) override; - - private: - - AZ::Data::AssetId m_assetId; - }; -} diff --git a/Gems/ScriptCanvas/Code/Editor/View/Widgets/LoggingPanel/AssetWindowSession/LoggingAssetWindowSession.cpp b/Gems/ScriptCanvas/Code/Editor/View/Widgets/LoggingPanel/AssetWindowSession/LoggingAssetWindowSession.cpp deleted file mode 100644 index b761ead488..0000000000 --- a/Gems/ScriptCanvas/Code/Editor/View/Widgets/LoggingPanel/AssetWindowSession/LoggingAssetWindowSession.cpp +++ /dev/null @@ -1,48 +0,0 @@ -/* - * 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 - -namespace ScriptCanvasEditor -{ - ////////////////////////////// - // LoggingAssetWindowSession - ////////////////////////////// - - LoggingAssetWindowSession::LoggingAssetWindowSession(const AZ::Data::AssetId& assetId, QWidget* parent) - : LoggingWindowSession(parent) - , m_dataAggregator(assetId) - , m_assetId(assetId) - { - SetDataId(m_dataAggregator.GetDataId()); - - m_ui->captureButton->setEnabled(false); - - RegisterTreeRoot(m_dataAggregator.GetTreeRoot()); - } - - LoggingAssetWindowSession::~LoggingAssetWindowSession() - { - } - - void LoggingAssetWindowSession::OnCaptureButtonPressed() - { - } - - void LoggingAssetWindowSession::OnPlaybackButtonPressed() - { - // TODO - } - - void LoggingAssetWindowSession::OnOptionsButtonPressed() - { - // TODO - } - -#include -} diff --git a/Gems/ScriptCanvas/Code/Editor/View/Widgets/LoggingPanel/AssetWindowSession/LoggingAssetWindowSession.h b/Gems/ScriptCanvas/Code/Editor/View/Widgets/LoggingPanel/AssetWindowSession/LoggingAssetWindowSession.h deleted file mode 100644 index c603f8e860..0000000000 --- a/Gems/ScriptCanvas/Code/Editor/View/Widgets/LoggingPanel/AssetWindowSession/LoggingAssetWindowSession.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * 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 - -#if !defined(Q_MOC_RUN) -#include -#include -#endif - -namespace ScriptCanvasEditor -{ - class LoggingAssetWindowSession - : public LoggingWindowSession - { - Q_OBJECT - - public: - AZ_CLASS_ALLOCATOR(LoggingAssetWindowSession, AZ::SystemAllocator, 0); - - LoggingAssetWindowSession(const AZ::Data::AssetId& assetId, QWidget* parent = nullptr); - ~LoggingAssetWindowSession() override; - - protected: - - void OnCaptureButtonPressed() override; - void OnPlaybackButtonPressed() override; - void OnOptionsButtonPressed() override; - - private: - - AZ::Data::AssetId m_assetId; - - LoggingAssetDataAggregator m_dataAggregator; - }; -} diff --git a/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake b/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake index 90bf36ac8f..206a73a9e6 100644 --- a/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake +++ b/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake @@ -195,10 +195,6 @@ set(FILES Editor/View/Widgets/LoggingPanel/LiveWindowSession/LiveLoggingDataAggregator.h Editor/View/Widgets/LoggingPanel/LiveWindowSession/LiveLoggingWindowSession.cpp Editor/View/Widgets/LoggingPanel/LiveWindowSession/LiveLoggingWindowSession.h - Editor/View/Widgets/LoggingPanel/AssetWindowSession/LoggingAssetDataAggregator.cpp - Editor/View/Widgets/LoggingPanel/AssetWindowSession/LoggingAssetDataAggregator.h - Editor/View/Widgets/LoggingPanel/AssetWindowSession/LoggingAssetWindowSession.cpp - Editor/View/Widgets/LoggingPanel/AssetWindowSession/LoggingAssetWindowSession.h Editor/View/Widgets/LoggingPanel/PivotTree/PivotTreeWidget.cpp Editor/View/Widgets/LoggingPanel/PivotTree/PivotTreeWidget.h Editor/View/Widgets/LoggingPanel/PivotTree/PivotTreeWidget.ui From 9d95ad4a2ade1942c650e693121994d77ac532a4 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 5 Jan 2022 19:48:36 -0800 Subject: [PATCH 200/284] Removes CreateNodeContextMenu.cpp/h from Gems/ScriptCanvas Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../View/Windows/CreateNodeContextMenu.cpp | 266 ------------------ .../View/Windows/CreateNodeContextMenu.h | 140 --------- 2 files changed, 406 deletions(-) delete mode 100644 Gems/ScriptCanvas/Code/Editor/View/Windows/CreateNodeContextMenu.cpp delete mode 100644 Gems/ScriptCanvas/Code/Editor/View/Windows/CreateNodeContextMenu.h diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/CreateNodeContextMenu.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/CreateNodeContextMenu.cpp deleted file mode 100644 index e54469c80c..0000000000 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/CreateNodeContextMenu.cpp +++ /dev/null @@ -1,266 +0,0 @@ -/* - * 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 -#include -#include -#include - -#include - -#include -#include -#include - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "ScriptCanvasContextMenus.h" - -namespace ScriptCanvasEditor -{ - ////////////////////////////// - // AddSelectedEntitiesAction - ////////////////////////////// - - AddSelectedEntitiesAction::AddSelectedEntitiesAction(QObject* parent) - : GraphCanvas::ContextMenuAction("", parent) - { - } - - GraphCanvas::ActionGroupId AddSelectedEntitiesAction::GetActionGroupId() const - { - return AZ_CRC("EntityActionGroup", 0x17e16dfe); - } - - void AddSelectedEntitiesAction::RefreshAction(const GraphCanvas::GraphId&, const AZ::EntityId&) - { - AzToolsFramework::EntityIdList selectedEntities; - AzToolsFramework::ToolsApplicationRequests::Bus::BroadcastResult(selectedEntities, &AzToolsFramework::ToolsApplicationRequests::GetSelectedEntities); - - setEnabled(!selectedEntities.empty()); - - if (selectedEntities.size() <= 1) - { - setText("Reference selected entity"); - } - else - { - setText("Reference selected entities"); - } - } - - GraphCanvas::ContextMenuAction::SceneReaction AddSelectedEntitiesAction::TriggerAction(const AZ::EntityId& graphCanvasGraphId, const AZ::Vector2& scenePos) - { - AzToolsFramework::EntityIdList selectedEntities; - AzToolsFramework::ToolsApplicationRequests::Bus::BroadcastResult(selectedEntities, &AzToolsFramework::ToolsApplicationRequests::GetSelectedEntities); - - AZ::EntityId scriptCanvasGraphId; - GeneralRequestBus::BroadcastResult(scriptCanvasGraphId, &GeneralRequests::GetScriptCanvasGraphId, graphCanvasGraphId); - - GraphCanvas::SceneRequestBus::Event(graphCanvasGraphId, &GraphCanvas::SceneRequests::ClearSelection); - - AZ::Vector2 addPosition = scenePos; - - for (const AZ::EntityId& id : selectedEntities) - { - NodeIdPair nodePair = Nodes::CreateEntityNode(id, scriptCanvasGraphId); - GraphCanvas::SceneRequestBus::Event(graphCanvasGraphId, &GraphCanvas::SceneRequests::AddNode, nodePair.m_graphCanvasId, addPosition); - addPosition += AZ::Vector2(20, 20); - } - - return GraphCanvas::ContextMenuAction::SceneReaction::PostUndo; - } - - //////////////////////////// - // EndpointSelectionAction - //////////////////////////// - - EndpointSelectionAction::EndpointSelectionAction(const GraphCanvas::Endpoint& proposedEndpoint) - : QAction(nullptr) - , m_endpoint(proposedEndpoint) - { - AZStd::string name; - GraphCanvas::SlotRequestBus::EventResult(name, proposedEndpoint.GetSlotId(), &GraphCanvas::SlotRequests::GetName); - - AZStd::string tooltip; - GraphCanvas::SlotRequestBus::EventResult(tooltip, proposedEndpoint.GetSlotId(), &GraphCanvas::SlotRequests::GetTooltip); - - setText(name.c_str()); - setToolTip(tooltip.c_str()); - } - - const GraphCanvas::Endpoint& EndpointSelectionAction::GetEndpoint() const - { - return m_endpoint; - } - - //////////////////////////////////// - // RemoveUnusedVariablesMenuAction - //////////////////////////////////// - - RemoveUnusedVariablesMenuAction::RemoveUnusedVariablesMenuAction(QObject* parent) - : SceneContextMenuAction("Variables", parent) - { - setToolTip("Removes all of the unused variables from the active graph"); - } - - void RemoveUnusedVariablesMenuAction::RefreshAction(const GraphCanvas::GraphId& graphId, const AZ::EntityId& targetId) - { - setEnabled(true); - } - - bool RemoveUnusedVariablesMenuAction::IsInSubMenu() const - { - return true; - } - - AZStd::string RemoveUnusedVariablesMenuAction::GetSubMenuPath() const - { - return "Remove Unused"; - } - - GraphCanvas::ContextMenuAction::SceneReaction RemoveUnusedVariablesMenuAction::TriggerAction(const GraphCanvas::GraphId& graphId, const AZ::Vector2& scenePos) - { - GraphCanvas::SceneRequestBus::Event(graphId, &GraphCanvas::SceneRequests::RemoveUnusedNodes); - return SceneReaction::PostUndo; - } - - ///////////////////// - // SceneContextMenu - ///////////////////// - - SceneContextMenu::SceneContextMenu(const NodePaletteModel& paletteModel, AzToolsFramework::AssetBrowser::AssetBrowserFilterModel* assetModel) - { - QWidgetAction* actionWidget = new QWidgetAction(this); - - const bool inContextMenu = true; - m_palette = aznew Widget::NodePaletteDockWidget(paletteModel, tr("Node Palette"), this, assetModel, inContextMenu); - - actionWidget->setDefaultWidget(m_palette); - - GraphCanvas::ContextMenuAction* menuAction = aznew AddSelectedEntitiesAction(this); - - AddActionGroup(menuAction->GetActionGroupId()); - AddMenuAction(menuAction); - - AddMenuAction(actionWidget); - - connect(this, &QMenu::aboutToShow, this, &SceneContextMenu::SetupDisplay); - connect(m_palette, &Widget::NodePaletteDockWidget::OnContextMenuSelection, this, &SceneContextMenu::HandleContextMenuSelection); - } - - void SceneContextMenu::ResetSourceSlotFilter() - { - m_palette->ResetSourceSlotFilter(); - } - - void SceneContextMenu::FilterForSourceSlot(const AZ::EntityId& scriptCanvasGraphId, const AZ::EntityId& sourceSlotId) - { - m_palette->FilterForSourceSlot(scriptCanvasGraphId, sourceSlotId); - } - - const Widget::NodePaletteDockWidget* SceneContextMenu::GetNodePalette() const - { - return m_palette; - } - - void SceneContextMenu::OnRefreshActions(const GraphCanvas::GraphId& graphId, const AZ::EntityId& targetMemberId) - { - // Don't want to overly manipulate the state. So we only modify this when we know we want to turn it on. - if (GraphVariablesTableView::HasCopyVariableData()) - { - m_editorActionsGroup.SetPasteEnabled(true); - } - } - - void SceneContextMenu::HandleContextMenuSelection() - { - close(); - } - - void SceneContextMenu::SetupDisplay() - { - m_palette->ResetDisplay(); - m_palette->FocusOnSearchFilter(); - } - - void SceneContextMenu::keyPressEvent(QKeyEvent* keyEvent) - { - if (!m_palette->hasFocus()) - { - QMenu::keyPressEvent(keyEvent); - } - } - - ////////////////////////// - // ConnectionContextMenu - ////////////////////////// - - ConnectionContextMenu::ConnectionContextMenu(const NodePaletteModel& nodePaletteModel, AzToolsFramework::AssetBrowser::AssetBrowserFilterModel* assetModel) - { - QWidgetAction* actionWidget = new QWidgetAction(this); - - const bool inContextMenu = true; - m_palette = aznew Widget::NodePaletteDockWidget(nodePaletteModel, tr("Node Palette"), this, assetModel, inContextMenu); - - actionWidget->setDefaultWidget(m_palette); - - AddMenuAction(actionWidget); - - connect(this, &QMenu::aboutToShow, this, &ConnectionContextMenu::SetupDisplay); - connect(m_palette, &Widget::NodePaletteDockWidget::OnContextMenuSelection, this, &ConnectionContextMenu::HandleContextMenuSelection); - } - - const Widget::NodePaletteDockWidget* ConnectionContextMenu::GetNodePalette() const - { - return m_palette; - } - - void ConnectionContextMenu::OnRefreshActions(const GraphCanvas::GraphId& graphId, const AZ::EntityId& targetMemberId) - { - GraphCanvas::ConnectionContextMenu::OnRefreshActions(graphId, targetMemberId); - - m_palette->ResetSourceSlotFilter(); - - m_connectionId = targetMemberId; - - // TODO: Filter nodes. - } - - void ConnectionContextMenu::HandleContextMenuSelection() - { - close(); - } - - void ConnectionContextMenu::SetupDisplay() - { - m_palette->ResetDisplay(); - m_palette->FocusOnSearchFilter(); - } - - void ConnectionContextMenu::keyPressEvent(QKeyEvent* keyEvent) - { - if (!m_palette->hasFocus()) - { - QMenu::keyPressEvent(keyEvent); - } - } - - #include "Editor/View/Windows/moc_ScriptCanvasContextMenus.cpp" -} - diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/CreateNodeContextMenu.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/CreateNodeContextMenu.h deleted file mode 100644 index 54f52df171..0000000000 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/CreateNodeContextMenu.h +++ /dev/null @@ -1,140 +0,0 @@ -/* - * 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 - -#if !defined(Q_MOC_RUN) -#include -#include - -#include -#include - -#include -#include -#include -#include -#endif - -namespace ScriptCanvasEditor -{ - class NodePaletteModel; - - namespace Widget - { - class NodePaletteDockWidget; - } - - class AddSelectedEntitiesAction - : public GraphCanvas::ContextMenuAction - { - Q_OBJECT - public: - AZ_CLASS_ALLOCATOR(AddSelectedEntitiesAction, AZ::SystemAllocator, 0); - - AddSelectedEntitiesAction(QObject* parent); - virtual ~AddSelectedEntitiesAction() = default; - - GraphCanvas::ActionGroupId GetActionGroupId() const override; - - void RefreshAction(const GraphCanvas::GraphId& graphCanvasGraphId, const AZ::EntityId& targetId) override; - SceneReaction TriggerAction(const GraphCanvas::GraphId& graphCanvasGraphId, const AZ::Vector2& scenePos) override; - }; - - class EndpointSelectionAction - : public QAction - { - Q_OBJECT - public: - AZ_CLASS_ALLOCATOR(EndpointSelectionAction, AZ::SystemAllocator, 0); - - EndpointSelectionAction(const GraphCanvas::Endpoint& endpoint); - ~EndpointSelectionAction() = default; - - const GraphCanvas::Endpoint& GetEndpoint() const; - - private: - GraphCanvas::Endpoint m_endpoint; - }; - - class RemoveUnusedVariablesMenuAction - : public GraphCanvas::SceneContextMenuAction - { - public: - AZ_CLASS_ALLOCATOR(RemoveUnusedVariablesMenuAction, AZ::SystemAllocator, 0); - - RemoveUnusedVariablesMenuAction(QObject* parent); - virtual ~RemoveUnusedVariablesMenuAction() = default; - - bool IsInSubMenu() const override; - AZStd::string GetSubMenuPath() const override; - - void RefreshAction(const GraphCanvas::GraphId& graphId, const AZ::EntityId& targetId) override; - GraphCanvas::ContextMenuAction::SceneReaction TriggerAction(const GraphCanvas::GraphId& graphId, const AZ::Vector2& scenePos) override; - }; - - class SceneContextMenu - : public GraphCanvas::SceneContextMenu - { - Q_OBJECT - public: - AZ_CLASS_ALLOCATOR(SceneContextMenu, AZ::SystemAllocator, 0); - - SceneContextMenu(const NodePaletteModel& nodePaletteModel, AzToolsFramework::AssetBrowser::AssetBrowserFilterModel* assetModel); - ~SceneContextMenu() = default; - - void ResetSourceSlotFilter(); - void FilterForSourceSlot(const AZ::EntityId& scriptCanvasGraphId, const AZ::EntityId& sourceSlotId); - const Widget::NodePaletteDockWidget* GetNodePalette() const; - - // EditConstructContextMenu - void OnRefreshActions(const GraphCanvas::GraphId& graphId, const AZ::EntityId& targetMemberId) override; - //// - - public slots: - - void HandleContextMenuSelection(); - void SetupDisplay(); - - protected: - void keyPressEvent(QKeyEvent* keyEvent) override; - - AZ::EntityId m_sourceSlotId; - Widget::NodePaletteDockWidget* m_palette; - }; - - class ConnectionContextMenu - : public GraphCanvas::ConnectionContextMenu - { - Q_OBJECT - public: - AZ_CLASS_ALLOCATOR(ConnectionContextMenu, AZ::SystemAllocator, 0); - - ConnectionContextMenu(const NodePaletteModel& nodePaletteModel, AzToolsFramework::AssetBrowser::AssetBrowserFilterModel* assetModel); - ~ConnectionContextMenu() = default; - - const Widget::NodePaletteDockWidget* GetNodePalette() const; - - protected: - - void OnRefreshActions(const GraphCanvas::GraphId& graphId, const AZ::EntityId& targetMemberId); - - public slots: - - void HandleContextMenuSelection(); - void SetupDisplay(); - - protected: - void keyPressEvent(QKeyEvent* keyEvent) override; - - private: - - AZ::EntityId m_connectionId; - Widget::NodePaletteDockWidget* m_palette; - }; -} From 2174f522cb3583382380211eedf9e7b4ac84e6a8 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 5 Jan 2022 19:52:15 -0800 Subject: [PATCH 201/284] Removes MainWindowBus.h from Gems/ScriptCanvas Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Code/Editor/View/Windows/MainWindowBus.h | 30 ------------------- .../Code/scriptcanvasgem_editor_files.cmake | 1 - 2 files changed, 31 deletions(-) delete mode 100644 Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindowBus.h diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindowBus.h b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindowBus.h deleted file mode 100644 index 86c805eff1..0000000000 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindowBus.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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 - -#include - -namespace ScriptCanvasEditor -{ - class MainWindowNotifications : public AZ::EBusTraits - { - public: - static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single; - - virtual void PreOnActiveSceneChanged() {} - virtual void OnActiveSceneChanged(const AZ::EntityId& /*sceneId*/) {} - virtual void PostOnActiveSceneChanged() {} - - virtual void OnSceneLoaded(const AZ::EntityId& /*sceneId*/) {} - virtual void OnSceneRefreshed(const AZ::EntityId& /*oldSceneId*/, const AZ::EntityId& /*newSceneId*/) {} - virtual void OnSceneUnloaded(const AZ::EntityId& /*sceneId*/) {} - }; - - using MainWindowNotificationBus = AZ::EBus; -} diff --git a/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake b/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake index 206a73a9e6..71ca1bc826 100644 --- a/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake +++ b/Gems/ScriptCanvas/Code/scriptcanvasgem_editor_files.cmake @@ -232,7 +232,6 @@ set(FILES Editor/View/Windows/MainWindow.cpp Editor/View/Windows/MainWindow.h Editor/View/Windows/mainwindow.ui - Editor/View/Windows/MainWindowBus.h Editor/View/Windows/ScriptCanvasContextMenus.cpp Editor/View/Windows/ScriptCanvasContextMenus.h Editor/View/Windows/ScriptCanvasEditorResources.qrc From 74b7ce8bd90ab91b3e83cf644b4c54ae84ae11a6 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 5 Jan 2022 19:53:20 -0800 Subject: [PATCH 202/284] Removes ScriptCanvasAssetData.h from Gems/ScriptCanvas Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../ScriptCanvas/Asset/ScriptCanvasAssetData.h | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 Gems/ScriptCanvas/Code/Include/ScriptCanvas/Asset/ScriptCanvasAssetData.h diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Asset/ScriptCanvasAssetData.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Asset/ScriptCanvasAssetData.h deleted file mode 100644 index 333ea12445..0000000000 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Asset/ScriptCanvasAssetData.h +++ /dev/null @@ -1,14 +0,0 @@ -/* - * 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 ScriptCanvas -{ - -} From 2b75b127fe11b686d69cde9081d99f1cd6f233ff Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 5 Jan 2022 19:57:49 -0800 Subject: [PATCH 203/284] Removes ContractBus.h from Gems/ScriptCanvas Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Include/ScriptCanvas/Core/Contract.cpp | 1 - .../Include/ScriptCanvas/Core/ContractBus.h | 38 ------------------- .../Contracts/ConnectionLimitContract.cpp | 1 - .../Core/Contracts/ContractRTTI.cpp | 1 - .../DisallowReentrantExecutionContract.cpp | 1 - ...DisplayGroupConnectedSlotLimitContract.cpp | 1 - .../Core/Contracts/DynamicTypeContract.cpp | 1 - .../Contracts/IsReferenceTypeContract.cpp | 1 - .../Core/Contracts/MethodOverloadContract.cpp | 1 - .../Core/Contracts/RestrictedNodeContract.cpp | 1 - .../Core/Contracts/SlotTypeContract.cpp | 1 - .../Core/Contracts/SupportsMethodContract.cpp | 1 - .../Core/Contracts/TypeContract.cpp | 1 - .../Code/scriptcanvasgem_headers.cmake | 1 - 14 files changed, 51 deletions(-) delete mode 100644 Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/ContractBus.h diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contract.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contract.cpp index cfa14b49f1..5053fa1375 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contract.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contract.cpp @@ -7,7 +7,6 @@ */ #include "Contract.h" -#include "ContractBus.h" #include "Slot.h" #include diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/ContractBus.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/ContractBus.h deleted file mode 100644 index b357fc5ca6..0000000000 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/ContractBus.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * 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 - -#include "Core.h" - -#include - -namespace ScriptCanvas -{ - class Contract; - class Slot; - - namespace Data - { - class Type; - } - - class ContractEvents : public AZ::EBusTraits - { - public: - ////////////////////////////////////////////////////////////////////////// - // EBusTraits overrides - static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single; - ////////////////////////////////////////////////////////////////////////// - - virtual void OnValidContract(const Contract*, const Slot&, const Slot&) = 0; - virtual void OnInvalidContract(const Contract*, const Slot&, const Slot&) = 0; - }; - - using ContractEventBus = AZ::EBus; - -} diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/ConnectionLimitContract.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/ConnectionLimitContract.cpp index 362ee24735..daa2d5e80d 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/ConnectionLimitContract.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/ConnectionLimitContract.cpp @@ -7,7 +7,6 @@ */ #include "ConnectionLimitContract.h" -#include #include #include #include diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/ContractRTTI.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/ContractRTTI.cpp index 3125bfd022..e3f86e1af0 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/ContractRTTI.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/ContractRTTI.cpp @@ -8,7 +8,6 @@ #include "ContractRTTI.h" -#include #include #include diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/DisallowReentrantExecutionContract.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/DisallowReentrantExecutionContract.cpp index 74a12b0f8a..b0f1f61382 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/DisallowReentrantExecutionContract.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/DisallowReentrantExecutionContract.cpp @@ -7,7 +7,6 @@ */ #include "DisallowReentrantExecutionContract.h" -#include #include namespace ScriptCanvas diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/DisplayGroupConnectedSlotLimitContract.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/DisplayGroupConnectedSlotLimitContract.cpp index 16259f9ddb..30790c4946 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/DisplayGroupConnectedSlotLimitContract.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/DisplayGroupConnectedSlotLimitContract.cpp @@ -8,7 +8,6 @@ #include "DisplayGroupConnectedSlotLimitContract.h" -#include #include #include #include diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/DynamicTypeContract.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/DynamicTypeContract.cpp index ad512d4e95..64a165be6e 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/DynamicTypeContract.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/DynamicTypeContract.cpp @@ -8,7 +8,6 @@ #include "DynamicTypeContract.h" -#include #include #include diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/IsReferenceTypeContract.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/IsReferenceTypeContract.cpp index 7762f45271..e5722428f6 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/IsReferenceTypeContract.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/IsReferenceTypeContract.cpp @@ -8,7 +8,6 @@ #include "IsReferenceTypeContract.h" -#include #include #include diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/MethodOverloadContract.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/MethodOverloadContract.cpp index cdf3b6353a..6fdfe34f71 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/MethodOverloadContract.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/MethodOverloadContract.cpp @@ -8,7 +8,6 @@ #include "MethodOverloadContract.h" -#include #include #include diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/RestrictedNodeContract.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/RestrictedNodeContract.cpp index ad28cc316c..200b8dbfe8 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/RestrictedNodeContract.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/RestrictedNodeContract.cpp @@ -7,7 +7,6 @@ */ #include "RestrictedNodeContract.h" -#include #include #include #include diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/SlotTypeContract.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/SlotTypeContract.cpp index 6ba3610f18..41d0903682 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/SlotTypeContract.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/SlotTypeContract.cpp @@ -7,7 +7,6 @@ */ #include "SlotTypeContract.h" -#include #include namespace ScriptCanvas diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/SupportsMethodContract.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/SupportsMethodContract.cpp index fb10501e64..648f7a77bb 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/SupportsMethodContract.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/SupportsMethodContract.cpp @@ -7,7 +7,6 @@ */ #include "SupportsMethodContract.h" -#include #include #include #include diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/TypeContract.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/TypeContract.cpp index cc57570c2f..0ab98707d7 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/TypeContract.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/TypeContract.cpp @@ -7,7 +7,6 @@ */ #include "TypeContract.h" -#include #include #include diff --git a/Gems/ScriptCanvas/Code/scriptcanvasgem_headers.cmake b/Gems/ScriptCanvas/Code/scriptcanvasgem_headers.cmake index 9830535ad8..530d98e112 100644 --- a/Gems/ScriptCanvas/Code/scriptcanvasgem_headers.cmake +++ b/Gems/ScriptCanvas/Code/scriptcanvasgem_headers.cmake @@ -23,7 +23,6 @@ set(FILES Include/ScriptCanvas/Core/NodeBus.h Include/ScriptCanvas/Core/EBusNodeBus.h Include/ScriptCanvas/Core/NodelingBus.h - Include/ScriptCanvas/Core/ContractBus.h Include/ScriptCanvas/Core/Attributes.h Include/ScriptCanvas/Core/Connection.h Include/ScriptCanvas/Core/ConnectionBus.h From e97db10ac31ab9166e8328a6de4c57a2667f64e2 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 6 Jan 2022 11:30:26 -0800 Subject: [PATCH 204/284] Removes StorageRequiredContract from Gems/ScriptCanvas Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Contracts/StorageRequiredContract.cpp | 47 ------------------- .../Core/Contracts/StorageRequiredContract.h | 30 ------------ 2 files changed, 77 deletions(-) delete mode 100644 Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/StorageRequiredContract.cpp delete mode 100644 Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/StorageRequiredContract.h diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/StorageRequiredContract.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/StorageRequiredContract.cpp deleted file mode 100644 index f730379ec2..0000000000 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/StorageRequiredContract.cpp +++ /dev/null @@ -1,47 +0,0 @@ -/* - * 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 "StorageRequiredContract.h" - -#include -#include -#include - -namespace ScriptCanvas -{ - AZ::Outcome StorageRequiredContract::OnEvaluate(const Slot& sourceSlot, const Slot& targetSlot) const - { - if (sourceSlot.GetType() == SlotType::DataOut && targetSlot.GetType() == SlotType::DataIn) - { - bool isSlotValidStorage{}; - NodeRequestBus::EventResult(isSlotValidStorage, targetSlot.GetNodeId(), &NodeRequests::IsSlotValidStorage, targetSlot.GetId()); - if (isSlotValidStorage) - { - return AZ::Success(); - } - } - - AZStd::string errorMessage = AZStd::string::format("Connection cannot be created between source slot \"%s\" and target slot \"%s\", Storage requirement is not met. (%s)" - , sourceSlot.GetName().data() - , targetSlot.GetName().data() - , RTTI_GetTypeName() - ); - - return AZ::Failure(errorMessage); - } - - void StorageRequiredContract::Reflect(AZ::ReflectContext* reflection) - { - AZ::SerializeContext* serializeContext = azrtti_cast(reflection); - if (serializeContext) - { - serializeContext->Class() - ->Version(0) - ; - } - } -} diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/StorageRequiredContract.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/StorageRequiredContract.h deleted file mode 100644 index c8718ec47f..0000000000 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Contracts/StorageRequiredContract.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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 - -#include - -namespace ScriptCanvas -{ - class StorageRequiredContract - : public Contract - { - public: - AZ_CLASS_ALLOCATOR(StorageRequiredContract, AZ::SystemAllocator, 0); - AZ_RTTI(StorageRequiredContract, "{AECE109D-121F-477C-995F-D044CA05F88D}", Contract); - - StorageRequiredContract() = default; - - ~StorageRequiredContract() override = default; - - static void Reflect(AZ::ReflectContext* reflection); - - protected: - AZ::Outcome OnEvaluate(const Slot& sourceSlot, const Slot& targetSlot) const override; - }; -} From b56512fd18a43dae6ca4aef6a081f0ed6cf79d57 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 6 Jan 2022 11:36:50 -0800 Subject: [PATCH 205/284] Removes LogReader.h/cpp from Gems/ScriptCanvas Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../ScriptCanvas/Debugger/ClientTransceiver.h | 1 - .../ScriptCanvas/Debugger/LogReader.cpp | 65 ------------------- .../Include/ScriptCanvas/Debugger/LogReader.h | 53 --------------- .../Code/scriptcanvasgem_debugger_files.cmake | 2 - 4 files changed, 121 deletions(-) delete mode 100644 Gems/ScriptCanvas/Code/Include/ScriptCanvas/Debugger/LogReader.cpp delete mode 100644 Gems/ScriptCanvas/Code/Include/ScriptCanvas/Debugger/LogReader.h diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Debugger/ClientTransceiver.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Debugger/ClientTransceiver.h index 78e293c4b0..9335bdd1eb 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Debugger/ClientTransceiver.h +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Debugger/ClientTransceiver.h @@ -17,7 +17,6 @@ #include "APIArguments.h" #include "Logger.h" -#include "LogReader.h" namespace ScriptCanvas { diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Debugger/LogReader.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Debugger/LogReader.cpp deleted file mode 100644 index 1a47ba4553..0000000000 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Debugger/LogReader.cpp +++ /dev/null @@ -1,65 +0,0 @@ -/* - * 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 "LogReader.h" - -namespace ScriptCanvas -{ - namespace Debugger - { - LogReader::LogReader() - { - - } - - LogReader::~LogReader() - { - - } - - void LogReader::Visit([[maybe_unused]] ExecutionThreadEnd& loggableEvent) - { - - } - - void LogReader::Visit([[maybe_unused]] ExecutionThreadBeginning& loggableEvent) - { - - } - - void LogReader::Visit([[maybe_unused]] GraphActivation& loggableEvent) - { - - } - - void LogReader::Visit([[maybe_unused]] GraphDeactivation& loggableEvent) - { - - } - - void LogReader::Visit([[maybe_unused]] NodeStateChange& loggableEvent) - { - - } - - void LogReader::Visit([[maybe_unused]] InputSignal& loggableEvent) - { - - } - - void LogReader::Visit([[maybe_unused]] OutputSignal& loggableEvent) - { - - } - - void LogReader::Visit([[maybe_unused]] VariableChange& loggableEvent) - { - - } - } -} diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Debugger/LogReader.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Debugger/LogReader.h deleted file mode 100644 index bb0fb0d0dc..0000000000 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Debugger/LogReader.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * 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 - -#include -#include -#include -#include -#include - -#include "APIArguments.h" - -namespace ScriptCanvas -{ - namespace Debugger - { - class LogReader - : public LoggableEventVisitor - { - public: - AZ_CLASS_ALLOCATOR(LogReader, AZ::SystemAllocator, 0); - - LogReader(); - ~LogReader(); - - // start at the beginning, if possible - bool Start() { return false; } - // step back one event, if possible - bool StepBack() { return false; } - // step forward one event, if possible - bool StepForward() { return false; } - - protected: - void Visit(ExecutionThreadEnd&); - void Visit(ExecutionThreadBeginning&); - void Visit(GraphActivation&); - void Visit(GraphDeactivation&); - void Visit(NodeStateChange&); - void Visit(InputSignal&); - void Visit(OutputSignal&); - void Visit(VariableChange&); - - private: - size_t m_index = 0; - }; - } -} diff --git a/Gems/ScriptCanvas/Code/scriptcanvasgem_debugger_files.cmake b/Gems/ScriptCanvas/Code/scriptcanvasgem_debugger_files.cmake index 0a68a9b175..aaeeffae45 100644 --- a/Gems/ScriptCanvas/Code/scriptcanvasgem_debugger_files.cmake +++ b/Gems/ScriptCanvas/Code/scriptcanvasgem_debugger_files.cmake @@ -18,8 +18,6 @@ set(FILES Include/ScriptCanvas/Debugger/Debugger.cpp Include/ScriptCanvas/Debugger/Logger.h Include/ScriptCanvas/Debugger/Logger.cpp - Include/ScriptCanvas/Debugger/LogReader.h - Include/ScriptCanvas/Debugger/LogReader.cpp Include/ScriptCanvas/Debugger/StatusBus.h Include/ScriptCanvas/Debugger/Messages/Notify.cpp Include/ScriptCanvas/Debugger/Messages/Notify.h From 5cca35370967b30883875165e2e4eb8dcbe2ce16 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 6 Jan 2022 11:45:03 -0800 Subject: [PATCH 206/284] Removes NativeHostDeclarations and NativeHostDefinitions from Gems/ScriptCanvas Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Execution/NativeHostDeclarations.cpp | 16 ----- .../Execution/NativeHostDeclarations.h | 25 ------- .../Execution/NativeHostDefinitions.cpp | 65 ------------------- .../Execution/NativeHostDefinitions.h | 24 ------- .../Code/scriptcanvasgem_common_files.cmake | 4 -- .../Code/scriptcanvasgem_headers.cmake | 4 -- 6 files changed, 138 deletions(-) delete mode 100644 Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/NativeHostDeclarations.cpp delete mode 100644 Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/NativeHostDeclarations.h delete mode 100644 Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/NativeHostDefinitions.cpp delete mode 100644 Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/NativeHostDefinitions.h diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/NativeHostDeclarations.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/NativeHostDeclarations.cpp deleted file mode 100644 index b3383a1044..0000000000 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/NativeHostDeclarations.cpp +++ /dev/null @@ -1,16 +0,0 @@ -/* - * 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 "NativeHostDeclarations.h" - -namespace ScriptCanvas -{ - RuntimeContext::RuntimeContext(AZ::EntityId graphId) - : m_graphId(graphId) - {} -} diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/NativeHostDeclarations.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/NativeHostDeclarations.h deleted file mode 100644 index ea6c884a6f..0000000000 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/NativeHostDeclarations.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * 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 - -#include - -namespace ScriptCanvas -{ - class RuntimeContext - { - public: - RuntimeContext(AZ::EntityId graphId); - - AZ_INLINE AZ::EntityId GetGraphId() const { return m_graphId; } - - protected: - AZ::EntityId m_graphId; - }; -} diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/NativeHostDefinitions.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/NativeHostDefinitions.cpp deleted file mode 100644 index 036310fca4..0000000000 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/NativeHostDefinitions.cpp +++ /dev/null @@ -1,65 +0,0 @@ -/* - * 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 "NativeHostDefinitions.h" -#include - -namespace NativeHostDefinitionsCPP -{ - using namespace ScriptCanvas; - - using FunctionMap = AZStd::unordered_map; - FunctionMap s_functionMap; -} - -namespace ScriptCanvas -{ - bool CallNativeGraphStart(AZStd::string_view name, const RuntimeContext& context) - { - using namespace NativeHostDefinitionsCPP; - - auto iter = s_functionMap.find(name); - if (iter != s_functionMap.end()) - { - iter->second(context); - return true; - } - - return false; - } - - bool RegisterNativeGraphStart(AZStd::string_view name, GraphStartFunction function) - { - using namespace NativeHostDefinitionsCPP; - - auto iter = s_functionMap.find(name); - if (iter == s_functionMap.end()) - { - s_functionMap.insert({ name, function }); - return true; - } - - return false; - } - - // this may never have to be necessary - bool UnregisterNativeGraphStart(AZStd::string_view name) - { - using namespace NativeHostDefinitionsCPP; - - auto iter = s_functionMap.find(name); - if (iter != s_functionMap.end()) - { - s_functionMap.erase(iter); - return true; - } - - return false; - } - -} diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/NativeHostDefinitions.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/NativeHostDefinitions.h deleted file mode 100644 index 457e8d4621..0000000000 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/NativeHostDefinitions.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * 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 "NativeHostDeclarations.h" - -namespace ScriptCanvas -{ - typedef void (*GraphStartFunction)(const RuntimeContext&); - - using GraphStartFunction = void(*)(const RuntimeContext&); - - bool CallNativeGraphStart(AZStd::string_view name, const RuntimeContext& context); - - bool RegisterNativeGraphStart(AZStd::string_view name, GraphStartFunction function); - - // this may never have to be necessary - bool UnregisterNativeGraphStart(AZStd::string_view name); - -} diff --git a/Gems/ScriptCanvas/Code/scriptcanvasgem_common_files.cmake b/Gems/ScriptCanvas/Code/scriptcanvasgem_common_files.cmake index c0dcc04838..65aaeb1b33 100644 --- a/Gems/ScriptCanvas/Code/scriptcanvasgem_common_files.cmake +++ b/Gems/ScriptCanvas/Code/scriptcanvasgem_common_files.cmake @@ -68,8 +68,6 @@ set(FILES Include/ScriptCanvas/Execution/ExecutionObjectCloning.cpp Include/ScriptCanvas/Execution/ExecutionPerformanceTimer.cpp Include/ScriptCanvas/Execution/ExecutionState.cpp - Include/ScriptCanvas/Execution/NativeHostDeclarations.cpp - Include/ScriptCanvas/Execution/NativeHostDefinitions.cpp Include/ScriptCanvas/Execution/RuntimeComponent.cpp Include/ScriptCanvas/Execution/Interpreted/ExecutionInterpretedAPI.cpp Include/ScriptCanvas/Execution/Interpreted/ExecutionInterpretedCloningAPI.cpp @@ -90,8 +88,6 @@ set(FILES Include/ScriptCanvas/Grammar/PrimitivesDeclarations.cpp Include/ScriptCanvas/Grammar/PrimitivesExecution.cpp Include/ScriptCanvas/Execution/ExecutionContext.cpp - Include/ScriptCanvas/Execution/NativeHostDeclarations.cpp - Include/ScriptCanvas/Execution/NativeHostDefinitions.cpp Include/ScriptCanvas/Execution/RuntimeComponent.cpp Include/ScriptCanvas/Internal/Nodeables/BaseTimer.cpp Include/ScriptCanvas/Internal/Nodes/BaseTimerNode.cpp diff --git a/Gems/ScriptCanvas/Code/scriptcanvasgem_headers.cmake b/Gems/ScriptCanvas/Code/scriptcanvasgem_headers.cmake index 530d98e112..c5e0d75b39 100644 --- a/Gems/ScriptCanvas/Code/scriptcanvasgem_headers.cmake +++ b/Gems/ScriptCanvas/Code/scriptcanvasgem_headers.cmake @@ -100,8 +100,6 @@ set(FILES Include/ScriptCanvas/Execution/ExecutionPerformanceTimer.h Include/ScriptCanvas/Execution/ExecutionState.h Include/ScriptCanvas/Execution/ExecutionStateDeclarations.h - Include/ScriptCanvas/Execution/NativeHostDeclarations.h - Include/ScriptCanvas/Execution/NativeHostDefinitions.h Include/ScriptCanvas/Execution/RuntimeComponent.h Include/ScriptCanvas/Execution/Interpreted/ExecutionInterpretedAPI.h Include/ScriptCanvas/Execution/Interpreted/ExecutionInterpretedCloningAPI.h @@ -126,8 +124,6 @@ set(FILES Include/ScriptCanvas/Execution/ErrorBus.h Include/ScriptCanvas/Execution/ExecutionContext.h Include/ScriptCanvas/Execution/ExecutionBus.h - Include/ScriptCanvas/Execution/NativeHostDeclarations.h - Include/ScriptCanvas/Execution/NativeHostDefinitions.h Include/ScriptCanvas/Execution/RuntimeComponent.h Include/ScriptCanvas/Internal/Nodeables/BaseTimer.h Include/ScriptCanvas/Internal/Nodeables/BaseTimer.ScriptCanvasNodeable.xml From 0e2af596b4015c8d79fed425660f5543baae2a68 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 6 Jan 2022 11:45:49 -0800 Subject: [PATCH 207/284] Removes duplicated lines in cmake files in Gems/ScriptCanvas Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Gems/ScriptCanvas/Code/scriptcanvasgem_common_files.cmake | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/Gems/ScriptCanvas/Code/scriptcanvasgem_common_files.cmake b/Gems/ScriptCanvas/Code/scriptcanvasgem_common_files.cmake index 65aaeb1b33..1301883453 100644 --- a/Gems/ScriptCanvas/Code/scriptcanvasgem_common_files.cmake +++ b/Gems/ScriptCanvas/Code/scriptcanvasgem_common_files.cmake @@ -87,13 +87,10 @@ set(FILES Include/ScriptCanvas/Grammar/Primitives.cpp Include/ScriptCanvas/Grammar/PrimitivesDeclarations.cpp Include/ScriptCanvas/Grammar/PrimitivesExecution.cpp - Include/ScriptCanvas/Execution/ExecutionContext.cpp - Include/ScriptCanvas/Execution/RuntimeComponent.cpp Include/ScriptCanvas/Internal/Nodeables/BaseTimer.cpp Include/ScriptCanvas/Internal/Nodes/BaseTimerNode.cpp Include/ScriptCanvas/Internal/Nodes/ExpressionNodeBase.cpp Include/ScriptCanvas/Internal/Nodes/StringFormatted.cpp - Include/ScriptCanvas/Grammar/AbstractCodeModel.cpp Include/ScriptCanvas/Libraries/Libraries.cpp Include/ScriptCanvas/Libraries/Core/AzEventHandler.cpp Include/ScriptCanvas/Libraries/Core/BinaryOperator.cpp @@ -200,6 +197,5 @@ set(FILES Include/ScriptCanvas/Utils/NodeUtils.cpp Include/ScriptCanvas/Utils/VersionConverters.cpp Include/ScriptCanvas/Utils/VersioningUtils.cpp - Include/ScriptCanvas/Utils/VersioningUtils.cpp Include/ScriptCanvas/Utils/BehaviorContextUtils.cpp -) \ No newline at end of file +) From 48a5280b6d646d096a01a783f385fefd59a475aa Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 6 Jan 2022 11:56:29 -0800 Subject: [PATCH 208/284] Removes NodeableOutNative.h from Gems/ScriptCanvas Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Core/SubgraphInterfaceUtility.h | 20 ----- .../Interpreted/ExecutionInterpretedAPI.cpp | 1 - .../ExecutionInterpretedCloningAPI.cpp | 1 - .../ExecutionInterpretedEBusAPI.cpp | 1 - .../Interpreted/ExecutionInterpretedOut.cpp | 1 - .../Execution/NodeableOut/NodeableOutNative.h | 66 -------------- .../Code/scriptcanvasgem_headers.cmake | 1 - .../Tests/ScriptCanvas_RuntimeInterpreted.cpp | 1 - .../Code/Tests/ScriptCanvas_VM.cpp | 87 ------------------- 9 files changed, 179 deletions(-) delete mode 100644 Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/NodeableOut/NodeableOutNative.h diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/SubgraphInterfaceUtility.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/SubgraphInterfaceUtility.h index a43f4be6b6..91e229978a 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/SubgraphInterfaceUtility.h +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/SubgraphInterfaceUtility.h @@ -78,26 +78,6 @@ namespace ScriptCanvas return output; } - template - Out CreateOutHelper(const AZStd::string& name, const AZStd::vector& outputNames, AZStd::index_sequence) - { - Out out; - SetDisplayAndParsedName(out, name); - out.outputs.reserve(sizeof...(Is)); - - int dummy[]{ 0, (out.outputs.emplace_back(CreateOutput(outputNames[Is])), 0)... }; - static_cast(dummy); /* avoid warning for unused variable */ - - return out; - } - - template - Out CreateOut(const AZStd::string& name, const AZStd::vector& outputNames = {}) - { - return CreateOutHelper(name, outputNames, AZStd::make_index_sequence()); - } - - template Out CreateOutReturnHelper(const AZStd::string& name, const AZStd::string& returnName, const AZStd::vector& outputNames, AZStd::index_sequence) { diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionInterpretedAPI.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionInterpretedAPI.cpp index eb856963f7..b98b962be9 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionInterpretedAPI.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionInterpretedAPI.cpp @@ -17,7 +17,6 @@ #include #include #include -#include #include #include #include diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionInterpretedCloningAPI.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionInterpretedCloningAPI.cpp index 387b537148..90cb632961 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionInterpretedCloningAPI.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionInterpretedCloningAPI.cpp @@ -16,7 +16,6 @@ #include #include #include -#include #include #include #include diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionInterpretedEBusAPI.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionInterpretedEBusAPI.cpp index d33f78c8b4..fd91221088 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionInterpretedEBusAPI.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionInterpretedEBusAPI.cpp @@ -18,7 +18,6 @@ #include #include #include -#include #include #include "ExecutionInterpretedOut.h" diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionInterpretedOut.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionInterpretedOut.cpp index 4820cf4741..99cb414597 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionInterpretedOut.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionInterpretedOut.cpp @@ -17,7 +17,6 @@ #include #include #include -#include #include #include "ExecutionInterpretedAPI.h" diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/NodeableOut/NodeableOutNative.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/NodeableOut/NodeableOutNative.h deleted file mode 100644 index ab6859db1e..0000000000 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/NodeableOut/NodeableOutNative.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * 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 - -#include -#include -#include - -#include - -namespace ScriptCanvas -{ - namespace Execution - { - template - FunctorOut CreateOutWithArgs(Callable&& callable, Allocator& allocator, AZStd::Internal::pack_traits_arg_sequence, std::index_sequence, ReturnTypeIsNotVoid) - { - auto nodeCallWrapper = [callable = AZStd::forward(callable)](AZ::BehaviorValueParameter* result, AZ::BehaviorValueParameter* arguments, int numArguments) mutable - { - [[maybe_unused]] constexpr size_t numFunctorArguments = sizeof...(Args); - (void)numArguments; - AZ_Assert(numArguments == numFunctorArguments, "number of arguments doesn't match number of parameters"); - AZ_Assert(result, "no null result allowed"); - result->StoreResult(AZStd::invoke(callable, *arguments[IndexSequence].GetAsUnsafe()...)); - }; - - static_assert(!AZStd::is_same_v || sizeof(nodeCallWrapper) <= MaxNodeableOutStackSize, "Lambda is too large to fit within NodebleOut functor"); - return FunctorOut(AZStd::move(nodeCallWrapper), allocator); - } - - template - FunctorOut CreateOutWithArgs(Callable&& callable, Allocator& allocator, AZStd::Internal::pack_traits_arg_sequence, std::index_sequence, ReturnTypeIsVoid) - { - auto nodeCallWrapper = [callable = AZStd::forward(callable)](AZ::BehaviorValueParameter*, AZ::BehaviorValueParameter* arguments, int numArguments) mutable - { - [[maybe_unused]] constexpr size_t numFunctorArguments = sizeof...(Args); - (void)numArguments; - AZ_Assert(numArguments == numFunctorArguments, "number of arguments doesn't match number of parameters"); - AZStd::invoke(callable, *arguments[IndexSequence].GetAsUnsafe()...); - }; - - static_assert(!AZStd::is_same_v || sizeof(nodeCallWrapper) <= MaxNodeableOutStackSize, "Lambda is too large to fit within NodebleOut functor"); - return FunctorOut(AZStd::move(nodeCallWrapper), allocator); - } - - template - FunctorOut CreateOut(Callable&& callable, Allocator& allocator) - { - using CallableTraits = AZStd::function_traits>; - return CreateOutWithArgs - ( AZStd::forward(callable) - , allocator - , typename CallableTraits::arg_types{} - , typename CallableTraits::template expand_args{} - , typename AZStd::is_void::type{}); - } - - } - -} diff --git a/Gems/ScriptCanvas/Code/scriptcanvasgem_headers.cmake b/Gems/ScriptCanvas/Code/scriptcanvasgem_headers.cmake index c5e0d75b39..cf6bbbd31c 100644 --- a/Gems/ScriptCanvas/Code/scriptcanvasgem_headers.cmake +++ b/Gems/ScriptCanvas/Code/scriptcanvasgem_headers.cmake @@ -111,7 +111,6 @@ set(FILES Include/ScriptCanvas/Execution/Interpreted/ExecutionStateInterpretedPure.h Include/ScriptCanvas/Execution/Interpreted/ExecutionStateInterpretedSingleton.h Include/ScriptCanvas/Execution/Interpreted/ExecutionStateInterpretedUtility.h - Include/ScriptCanvas/Execution/NodeableOut/NodeableOutNative.h Include/ScriptCanvas/Grammar/AbstractCodeModel.h Include/ScriptCanvas/Grammar/DebugMap.h Include/ScriptCanvas/Grammar/ExecutionTraversalListeners.h diff --git a/Gems/ScriptCanvasTesting/Code/Tests/ScriptCanvas_RuntimeInterpreted.cpp b/Gems/ScriptCanvasTesting/Code/Tests/ScriptCanvas_RuntimeInterpreted.cpp index 3d88f014ff..a4a5a78b7e 100644 --- a/Gems/ScriptCanvasTesting/Code/Tests/ScriptCanvas_RuntimeInterpreted.cpp +++ b/Gems/ScriptCanvasTesting/Code/Tests/ScriptCanvas_RuntimeInterpreted.cpp @@ -14,7 +14,6 @@ #include #include #include -#include #include #include #include diff --git a/Gems/ScriptCanvasTesting/Code/Tests/ScriptCanvas_VM.cpp b/Gems/ScriptCanvasTesting/Code/Tests/ScriptCanvas_VM.cpp index 2c455d80f5..29e72cbd2b 100644 --- a/Gems/ScriptCanvasTesting/Code/Tests/ScriptCanvas_VM.cpp +++ b/Gems/ScriptCanvasTesting/Code/Tests/ScriptCanvas_VM.cpp @@ -14,7 +14,6 @@ #include #include #include -#include #include #include #include @@ -25,92 +24,6 @@ using namespace ScriptCanvasTests; using namespace TestNodes; using namespace ScriptCanvas::Execution; -// TEST_F(ScriptCanvasTestFixture, NativeNodeableStack) -// { -// TestNodeableObject nodeable; -// nodeable.Initialize(); -// -// bool wasTrueCalled = false; -// bool wasFalseCalled = false; -// -// nodeable.SetExecutionOut -// ( AZ_CRC("BranchTrue", 0xd49f121c) -// , CreateOut -// ([&wasTrueCalled](ExecutionState&, Data::BooleanType condition, const Data::StringType& message) -// { -// EXPECT_TRUE(condition); -// EXPECT_EQ(message, AZStd::string("called the true version!")); -// wasTrueCalled = true; -// } -// , StackAllocatorType{})); -// -// nodeable.SetExecutionOut -// ( AZ_CRC("BranchFalse", 0xaceca8bc) -// , CreateOut -// ([&wasFalseCalled](ExecutionState&, Data::BooleanType condition, const Data::StringType& message, const Data::Vector3Type& vector) -// { -// EXPECT_FALSE(condition); -// EXPECT_EQ(message, AZStd::string("called the false version!")); -// EXPECT_EQ(vector, AZ::Vector3(1, 2, 3)); -// wasFalseCalled = true; -// } -// , StackAllocatorType{})); -// -// nodeable.Branch(true); -// nodeable.Branch(false); -// -// EXPECT_TRUE(wasTrueCalled); -// EXPECT_TRUE(wasFalseCalled); -// } - -// -// TEST_F(ScriptCanvasTestFixture, NativeNodeableHeap) -// { -// TestNodeableObject nodeable; -// nodeable.Initialize(); -// -// AZStd::string routedArg("XYZ"); -// AZStd::array bigArray; -// std::fill(bigArray.begin(), bigArray.end(), 0); -// -// bigArray[0] = 7; -// bigArray[2047] = 7; -// -// EXPECT_EQ(bigArray[0], 7); -// EXPECT_EQ(bigArray[2047], 7); -// -// bool isHeapCalled = false; -// -// nodeable.SetExecutionOut -// ( AZ_CRC("BranchTrue", 0xd49f121c) -// , CreateOut -// ([routedArg, &isHeapCalled, bigArray](ExecutionState&, Data::BooleanType condition, const Data::StringType& message) mutable -// { -// EXPECT_EQ(message, AZStd::string("called the true version!")); -// routedArg = message; -// isHeapCalled = true; -// EXPECT_EQ(bigArray[0], 7); -// EXPECT_EQ(bigArray[2047], 7); -// bigArray[0] = 9; -// bigArray[2047] = 9; -// EXPECT_EQ(bigArray[0], 9); -// EXPECT_EQ(bigArray[2047], 9); -// } -// , HeapAllocatorType{})); -// -// -// bigArray[0] = 8; -// bigArray[2047] = 8; -// EXPECT_EQ(bigArray[0], 8); -// EXPECT_EQ(bigArray[2047], 8); -// -// nodeable.Branch(true); -// EXPECT_TRUE(isHeapCalled); -// -// // just making sure no crash occurs on unconnected outs -// nodeable.Branch(false); -// } - class Grandparent { public: From 8f4e547b9e2b9e055a65970d777446951661b330 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 6 Jan 2022 11:59:32 -0800 Subject: [PATCH 209/284] Removes ExecutionIterator.h and Parser.h from Gems/ScriptCanvas Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../ScriptCanvas/Grammar/ExecutionIterator.h | 86 --------------- .../Include/ScriptCanvas/Grammar/Parser.h | 104 ------------------ 2 files changed, 190 deletions(-) delete mode 100644 Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/ExecutionIterator.h delete mode 100644 Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/Parser.h diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/ExecutionIterator.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/ExecutionIterator.h deleted file mode 100644 index 03c6842b7c..0000000000 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/ExecutionIterator.h +++ /dev/null @@ -1,86 +0,0 @@ -/* - * 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 - -#include -#include -#include -#include - -#include "ExecutionVisitor.h" - -namespace ScriptCanvas -{ - class Graph; - class Node; - - namespace Grammar - { - /** - This is the effective lexer of the system. It properly identifies which canvas node is the next 'token' - */ - class ExecutionIterator - { - friend class ExecutionVisitor; - - public: - ExecutionIterator(); - ExecutionIterator(const Graph& graph); - ExecutionIterator(const Node& block); - - bool Begin(); - bool Begin(const Graph& graph); - bool Begin(const Node& block); - AZ_INLINE const Node* GetCurrentToken() const { return *m_current; } - const Node* operator->() const; - explicit operator bool() const; - bool operator!() const; - ExecutionIterator& operator++(); - void PrettyPrint() const; - - protected: - static const Node* FindNextStatement(const Node& current); - - void PushFunctionCall(); - void PushExpression(); - void PushStatement(); - void BuildNextStatement(); - - bool BuildQueue(const Graph& graph); - bool BuildQueue(const Node& node); - bool BuildQueue(); - - private: - // track whether we're in a expression stack - bool m_pushingExpressions = false; - // current canvas node of any type - const Node* m_currentSourceNode = nullptr; - // current executable statement that isn't just an expression - const Node* m_currentSourceStatementNode = nullptr; - // first statement in the block entry - const Node* m_currentSourceStatementRoot = nullptr; - // canvas source - const Graph* m_source = nullptr; - - NodeIdList m_sourceNodes; - // "parent-less" executable statements, or parented only to a start node - NodePtrConstList m_currentSourceInitialStatements; - // detect infinite loops - AZStd::set m_iteratedStatements; - - ExecutionVisitor m_visitor; - // final queue of iterated nodes - AZStd::vector m_queue; - // current position in the final queue - NodePtrConstList::iterator m_current = nullptr; - }; - - } // namespace Parser - -} // namepsace ScriptCanvas diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/Parser.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/Parser.h deleted file mode 100644 index f6a02e24c8..0000000000 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/Parser.h +++ /dev/null @@ -1,104 +0,0 @@ -/* - * 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 - -#include -#include -#include -#include -#include - -#include "ExecutionIterator.h" -#include "ParseError.h" -#include "ParserVisitor.h" - -namespace ScriptCanvas -{ - class Graph; - class Node; - - namespace AST - { - class Block; - } - - namespace Grammar - { - NodePtrConstList FindInitialStatements(const NodeIdList& nodes); - NodePtrConstList FindInitialStatements(const Node& node); - const Node* FindNextStatement(const Node& node); - - class Parser - { - friend class ParserVisitor; - - public: - Parser(const Graph& graph); - - AZ_CLASS_ALLOCATOR(Parser, AZ::SystemAllocator, 0); - - AST::SmartPtrConst Parse(); - void ConsumeToken(); - const Node* GetToken() const; - const Graph& GetSource() const; - const NodeIdList& GetSourceNodeIDs() const; - AST::NodePtr GetTree() const; - bool IsValid() const; - void SetRoot(AST::SmartPtr&& root); - void AddChild(AST::NodePtr&& child); - - Grammar::eRule GetExpectedRule() const; - - protected: - void AddError(ParseError&& error); - void AddStatement(AST::SmartPtrConst&& statement); - void FindInitialStatements(); - void FindNextSourceNode(); - void InitializeGraphBlock(); - - AST::SmartPtrConst CreateBinaryOperator(const Node& node, Grammar::eRule operatorType, AST::SmartPtrConst&& lhs, AST::SmartPtrConst&& rhs); - AST::SmartPtrConst ParseBinaryOperation(const Node& node, Grammar::eRule operatorType); - AST::SmartPtrConst ParseExpression(const Node& node); - AST::SmartPtrConst ParseExpressionList(const Node& node); - AST::NodePtrConst ParseFunctionCall(const Node& node, const char* functionName); - AST::SmartPtrConst ParseFunctionCallAsStatement(const Node& node, const char* functionName); - AST::SmartPtrConst ParseNumeral(const Node& node); - - private: - class ExpressionScoper - { - public: - AZ_INLINE ExpressionScoper(Parser& parser) - : m_parser(parser) - { - ++m_parser.m_expressionDepth; - } - - AZ_INLINE ~ExpressionScoper() - { - --m_parser.m_expressionDepth; - } - - private: - Parser& m_parser; - }; - - friend class ExpressionScoper; - - int m_expressionDepth = 0; - Grammar::ExecutionIterator m_executionIterator; - AST::SmartPtr m_currentBlock; - AST::SmartPtr m_root; - AZStd::set m_consumedSourceNodes; - AZStd::vector m_errors; - ParserVisitor m_visitor; - }; - } // namespace Grammar - -} // namespace ScriptCanvas} From ff0a5b6c0dae3cd912881805fc5bd1bdab975ebb Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 6 Jan 2022 13:27:54 -0800 Subject: [PATCH 210/284] Removes ComparisonFunctions.h from Gems/ScriptCanvas Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Comparison/ComparisonFunctions.h | 387 ------------------ .../Libraries/Comparison/EqualTo.h | 2 - .../Libraries/Comparison/Greater.h | 1 - .../Libraries/Comparison/GreaterEqual.h | 2 - .../ScriptCanvas/Libraries/Comparison/Less.h | 1 - .../Libraries/Comparison/LessEqual.h | 1 - .../Libraries/Comparison/NotEqualTo.h | 1 - .../Code/scriptcanvasgem_headers.cmake | 1 - 8 files changed, 396 deletions(-) delete mode 100644 Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Comparison/ComparisonFunctions.h diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Comparison/ComparisonFunctions.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Comparison/ComparisonFunctions.h deleted file mode 100644 index bd50d6c481..0000000000 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Comparison/ComparisonFunctions.h +++ /dev/null @@ -1,387 +0,0 @@ -/* - * 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 - -#if defined(EXPRESSION_TEMPLATES_ENABLED) - -#include -#include - -#include -#include -#include -#include - -namespace ScriptCanvas -{ - namespace Nodes - { - namespace Comparison - { - enum class OperatorType : AZ::u32 - { - Equal, - NotEqual, - Less, - Greater, - LessEqual, - GreaterEqual - }; - - template - struct CompareAction - { - // Compares two primitive types each other - //! \return true if a comparison occurred between both types and stores the result of the comparison in the @result parameter - inline static bool CompareNumber(bool& result, OperatorType operatorType, NumberType1 leftNumber, NumberType2 rightNumber) - { - switch (operatorType) - { - case OperatorType::Equal: - result = leftNumber == rightNumber; - return true; - case OperatorType::NotEqual: - result = leftNumber != rightNumber; - return true; - case OperatorType::Less: - result = leftNumber < rightNumber; - return true; - case OperatorType::Greater: - result = leftNumber > rightNumber; - return true; - case OperatorType::LessEqual: - result = leftNumber <= rightNumber; - return true; - case OperatorType::GreaterEqual: - result = leftNumber >= rightNumber; - return true; - default: - return false; - } - } - }; - - //! Attempts to cast the second object parameter to a primitive type and compare it against the supplied primitive parameter - //! \return true if a comparison occurred between both types and stores the result of the comparison in the @result parameter - template::value>> - inline bool CompareNumberToBehaviorParameter(bool& result, OperatorType operatorType, NumberType leftNumber, AZ::BehaviorValueParameter& rhs) - { - if(CanCastToValue(rhs)) - { - NumberType convertedParam{}; - return CastToValue(convertedParam, rhs) && CompareAction::CompareNumber(result, operatorType, leftNumber, convertedParam); - } - return false; - } - - //! Attempts to cast the supplied object parameters to a primitive type and compare them - //! \return true if a comparison occurred between both types and stores the result of the comparison in the @result parameter - inline bool ComparePrimitive(bool& result, OperatorType operatorType, const Datum& lhs, const Datum& rhs) - { - auto leftParam = lhs.Get(); - auto rightParam = rhs.Get(); - if (CanCastToValue(leftParam)) - { - bool convertedParam{}; - return CastToValue(convertedParam, leftParam) && CompareNumberToBehaviorParameter(result, operatorType, convertedParam, rightParam); - } - else if (CanCastToValue(leftParam)) - { - double convertedParam{}; - return CastToValue(convertedParam, leftParam) && CompareNumberToBehaviorParameter(result,operatorType, convertedParam, rightParam); - } - else if (CanCastToValue(leftParam)) - { - float convertedParam{}; - return CastToValue(convertedParam, leftParam) && CompareNumberToBehaviorParameter(result, operatorType, convertedParam, rightParam); - } - else if (CanCastToValue(leftParam)) - { - AZ::u64 convertedParam{}; - return CastToValue(convertedParam, leftParam) && CompareNumberToBehaviorParameter(result, operatorType, convertedParam, rightParam); - } - else if (CanCastToValue(leftParam)) - { - AZ::s64 convertedParam{}; - return CastToValue(convertedParam, leftParam) && CompareNumberToBehaviorParameter(result, operatorType, convertedParam, rightParam); - } - else if (CanCastToValue(leftParam)) - { - unsigned long convertedParam{}; - return CastToValue(convertedParam, leftParam) && CompareNumberToBehaviorParameter(result, operatorType, convertedParam, rightParam); - } - else if (CanCastToValue(leftParam)) - { - long convertedParam{}; - return CastToValue(convertedParam, leftParam) && CompareNumberToBehaviorParameter(result, operatorType, convertedParam, rightParam); - } - else if (CanCastToValue(leftParam)) - { - AZ::u32 convertedParam{}; - return CastToValue(convertedParam, leftParam) && CompareNumberToBehaviorParameter(result, operatorType, convertedParam, rightParam); - } - else if (CanCastToValue(leftParam)) - { - AZ::s32 convertedParam{}; - return CastToValue(convertedParam, leftParam) && CompareNumberToBehaviorParameter(result, operatorType, convertedParam, rightParam); - } - else if (CanCastToValue(leftParam)) - { - AZ::u16 convertedParam{}; - return CastToValue(convertedParam, leftParam) && CompareNumberToBehaviorParameter(result, operatorType, convertedParam, rightParam); - } - else if (CanCastToValue(leftParam)) - { - AZ::s16 convertedParam{}; - return CastToValue(convertedParam, leftParam) && CompareNumberToBehaviorParameter(result, operatorType, convertedParam, rightParam); - } - else if (CanCastToValue(leftParam)) - { - AZ::u8 convertedParam{}; - return CastToValue(convertedParam, leftParam) && CompareNumberToBehaviorParameter(result, operatorType, convertedParam, rightParam); - } - else if (CanCastToValue(leftParam)) - { - AZ::s8 convertedParam{}; - return CastToValue(convertedParam, leftParam) && CompareNumberToBehaviorParameter(result, operatorType, convertedParam, rightParam); - } - else if (CanCastToValue(leftParam)) - { - char convertedParam{}; - return CastToValue(convertedParam, leftParam) && CompareNumberToBehaviorParameter(result, operatorType, convertedParam, rightParam); - } - - return false; - } - - /** - For the record, this is amazing. But, we can't go dumpster diving through behavior context for the right method to call. If there is a proper evaluation to make, we make the ability for people to - expose to behavior context the correct operations they want used in ScriptCanvas. No matter which route we chose, we should do it at edit time, rather than compile time. - */ - - //! Returns a multimap of methods which match the operatorType prioritized by the by least number of type conversions needed for both parameters to invoke the method - inline AZStd::multimap FindOperatorMethod(AZ::Script::Attributes::OperatorType operatorLookupType, AZ::BehaviorValueParameter& leftParameter, AZ::BehaviorValueParameter& rightParameter) - { - AZStd::multimap methodMap; - AZ::BehaviorContext* behaviorContext{}; - AZ::ComponentApplicationBus::BroadcastResult(behaviorContext, &AZ::ComponentApplicationRequests::GetBehaviorContext); - if (!behaviorContext) - { - return methodMap; - } - - auto behaviorClassIt = behaviorContext->m_typeToClassMap.find(leftParameter.m_typeId); - if (behaviorClassIt != behaviorContext->m_typeToClassMap.end()) - { - AZ::BehaviorClass* behaviorClass = behaviorClassIt->second; - for (auto& methodPair : behaviorClass->m_methods) - { - AZ::BehaviorMethod* method = methodPair.second; - if (auto* operatorAttr = FindAttribute(AZ::Script::Attributes::Operator, method->m_attributes)) - { - // read the operator type - AZ::AttributeReader operatorAttrReader(nullptr, operatorAttr); - AZ::Script::Attributes::OperatorType operatorType; - operatorAttrReader.Read(operatorType); - - if (operatorType == operatorLookupType - && method->HasResult() && method->GetResult()->m_typeId == azrtti_typeid() && method->GetNumArguments() == 2) - { - if (behaviorClass->m_typeId == method->GetArgument(0)->m_typeId && rightParameter.m_typeId == method->GetArgument(1)->m_typeId) - { - methodMap.emplace(0, method); - } - else if (behaviorClass->m_typeId == method->GetArgument(0)->m_typeId && rightParameter.m_azRtti && rightParameter.m_azRtti->IsTypeOf(method->GetArgument(1)->m_typeId)) - { - methodMap.emplace(1, method); - } - else if (behaviorClass->m_azRtti && behaviorClass->m_azRtti->IsTypeOf(method->GetArgument(0)->m_typeId) && rightParameter.m_typeId == method->GetArgument(1)->m_typeId) - { - methodMap.emplace(1, method); - } - else if (behaviorClass->m_azRtti && behaviorClass->m_azRtti->IsTypeOf(method->GetArgument(0)->m_typeId) && rightParameter.m_azRtti && rightParameter.m_azRtti->IsTypeOf(method->GetArgument(1)->m_typeId)) - { - methodMap.emplace(2, method); - } - } - } - } - } - - return methodMap; - } - - inline bool InvokeMethod(AZ::BehaviorMethod* method, AZ::BehaviorValueParameter& resultParam, AZStd::array, 2> parameters) - { - AZStd::array argAddresses; - AZStd::array methodArgs; - for (size_t i = 0; i < methodArgs.size(); ++i) - { - methodArgs[i].Set(*method->GetArgument(i)); - argAddresses[i] = parameters[i].get().GetValueAddress(); - if (methodArgs[i].m_traits & AZ::BehaviorParameter::TR_POINTER) - { - methodArgs[i].m_value = &argAddresses[i]; - } - else - { - methodArgs[i].m_value = argAddresses[i]; - } - } - - return method->Call(methodArgs.data(), static_cast(methodArgs.size()), &resultParam); - } - - //! Compares two object types to each other - //! \return true if a comparison occurred between both types and stores the result of the comparison in the @result parameter - inline bool CompareObjects(bool& result, OperatorType operatorType, const Datum& lhs, const Datum& rhs) - { - auto leftParameter = lhs.Get(); - auto rightParameter = rhs.Get(); - AZ::BehaviorValueParameter resultParameter(&result); - AZStd::multimap methodMap{}; - switch (operatorType) - { - case OperatorType::Equal: - methodMap = FindOperatorMethod(AZ::Script::Attributes::OperatorType::Equal, leftParameter, rightParameter); - if (!methodMap.empty()) - { - if (InvokeMethod(methodMap.begin()->second, resultParameter, { { AZStd::reference_wrapper(leftParameter), AZStd::reference_wrapper(rightParameter)} })) - { - return true; - } - } - else - { - methodMap = FindOperatorMethod(AZ::Script::Attributes::OperatorType::Equal, rightParameter, leftParameter); - if (!methodMap.empty()) - { - if (InvokeMethod(methodMap.begin()->second, resultParameter, { { AZStd::reference_wrapper(rightParameter), AZStd::reference_wrapper(leftParameter) } })) - { - return true; - } - } - } - break; - case OperatorType::NotEqual: - methodMap = FindOperatorMethod(AZ::Script::Attributes::OperatorType::Equal, leftParameter, rightParameter); - if (!methodMap.empty()) - { - if (InvokeMethod(methodMap.begin()->second, resultParameter, { { AZStd::reference_wrapper(leftParameter), AZStd::reference_wrapper(rightParameter) } })) - { - result = !result; - return true; - } - } - else - { - methodMap = FindOperatorMethod(AZ::Script::Attributes::OperatorType::Equal, rightParameter, leftParameter); - if (!methodMap.empty()) - { - if (InvokeMethod(methodMap.begin()->second, resultParameter, { { AZStd::reference_wrapper(rightParameter), AZStd::reference_wrapper(leftParameter) } })) - { - result = !result; - return true; - } - } - } - break; - - case OperatorType::Less: - methodMap = FindOperatorMethod(AZ::Script::Attributes::OperatorType::LessThan, leftParameter, rightParameter); - if (!methodMap.empty()) - { - if (InvokeMethod(methodMap.begin()->second, resultParameter, { { AZStd::reference_wrapper(leftParameter), AZStd::reference_wrapper(rightParameter) } })) - { - return true; - } - } - break; - case OperatorType::Greater: - methodMap = FindOperatorMethod(AZ::Script::Attributes::OperatorType::LessThan, leftParameter, rightParameter); - if (!methodMap.empty()) - { - if (InvokeMethod(methodMap.begin()->second, resultParameter, { { AZStd::reference_wrapper(rightParameter), AZStd::reference_wrapper(leftParameter) } })) - { - return true; - } - } - break; - case OperatorType::LessEqual: - methodMap = FindOperatorMethod(AZ::Script::Attributes::OperatorType::LessEqualThan, leftParameter, rightParameter); - if (!methodMap.empty()) - { - if (InvokeMethod(methodMap.begin()->second, resultParameter, { { AZStd::reference_wrapper(leftParameter), AZStd::reference_wrapper(rightParameter) } })) - { - return true; - } - } - else - { - methodMap = FindOperatorMethod(AZ::Script::Attributes::OperatorType::LessThan, leftParameter, rightParameter); - if (!methodMap.empty()) - { - if (InvokeMethod(methodMap.begin()->second, resultParameter, { { AZStd::reference_wrapper(rightParameter), AZStd::reference_wrapper(leftParameter) } })) - { - result = !result; - return true; - } - } - } - break; - case OperatorType::GreaterEqual: - methodMap = FindOperatorMethod(AZ::Script::Attributes::OperatorType::LessEqualThan, leftParameter, rightParameter); - if (!methodMap.empty()) - { - if (InvokeMethod(methodMap.begin()->second, resultParameter, { { AZStd::reference_wrapper(rightParameter), AZStd::reference_wrapper(leftParameter) } })) - { - return true; - } - } - else - { - methodMap = FindOperatorMethod(AZ::Script::Attributes::OperatorType::LessThan, leftParameter, rightParameter); - if (!methodMap.empty()) - { - if (InvokeMethod(methodMap.begin()->second, resultParameter, { { AZStd::reference_wrapper(leftParameter), AZStd::reference_wrapper(rightParameter) } })) - { - result = !result; - return true; - } - } - } - break; - default: - break; - } - return false; - } - - template - struct ComparisonOperator - { - bool operator()(const Datum& lhs, const Datum& rhs) const - { - - // If both types sides are primitive types then perform a special case primitive value compare - bool result{}; - if (ComparePrimitive(result, operatorType, lhs, rhs) || CompareObjects(result, operatorType, lhs, rhs)) - { - return result; - } - - return false; - } - - }; - } - } -} - -#endif // EXPRESSION_TEMPLATES_ENABLED diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Comparison/EqualTo.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Comparison/EqualTo.h index b2ef525880..9223248c77 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Comparison/EqualTo.h +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Comparison/EqualTo.h @@ -8,10 +8,8 @@ #pragma once -#include "ComparisonFunctions.h" #include - namespace ScriptCanvas { namespace Nodes diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Comparison/Greater.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Comparison/Greater.h index da3765c7fc..8465d79be1 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Comparison/Greater.h +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Comparison/Greater.h @@ -8,7 +8,6 @@ #pragma once -#include "ComparisonFunctions.h" #include namespace ScriptCanvas diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Comparison/GreaterEqual.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Comparison/GreaterEqual.h index 70d9b073d7..2ee7afe3b4 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Comparison/GreaterEqual.h +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Comparison/GreaterEqual.h @@ -8,8 +8,6 @@ #pragma once - -#include "ComparisonFunctions.h" #include namespace ScriptCanvas diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Comparison/Less.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Comparison/Less.h index f96dd12d0d..b4fd2810d8 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Comparison/Less.h +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Comparison/Less.h @@ -8,7 +8,6 @@ #pragma once -#include "ComparisonFunctions.h" #include namespace ScriptCanvas diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Comparison/LessEqual.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Comparison/LessEqual.h index a0459e6fe0..7f0fe9b9ce 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Comparison/LessEqual.h +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Comparison/LessEqual.h @@ -8,7 +8,6 @@ #pragma once -#include "ComparisonFunctions.h" #include namespace ScriptCanvas diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Comparison/NotEqualTo.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Comparison/NotEqualTo.h index be47c49e6d..fa2525b94f 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Comparison/NotEqualTo.h +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Comparison/NotEqualTo.h @@ -8,7 +8,6 @@ #pragma once -#include "ComparisonFunctions.h" #include namespace ScriptCanvas diff --git a/Gems/ScriptCanvas/Code/scriptcanvasgem_headers.cmake b/Gems/ScriptCanvas/Code/scriptcanvasgem_headers.cmake index cf6bbbd31c..2bfa9c74e3 100644 --- a/Gems/ScriptCanvas/Code/scriptcanvasgem_headers.cmake +++ b/Gems/ScriptCanvas/Code/scriptcanvasgem_headers.cmake @@ -230,7 +230,6 @@ set(FILES Include/ScriptCanvas/Libraries/Math/Vector3Nodes.h Include/ScriptCanvas/Libraries/Math/Vector4Nodes.h Include/ScriptCanvas/Libraries/Comparison/Comparison.h - Include/ScriptCanvas/Libraries/Comparison/ComparisonFunctions.h Include/ScriptCanvas/Libraries/Comparison/EqualTo.h Include/ScriptCanvas/Libraries/Comparison/NotEqualTo.h Include/ScriptCanvas/Libraries/Comparison/Less.h From 7cefe2b6c272dcd880077f353c9dd4bd4d6af7c6 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 6 Jan 2022 13:31:26 -0800 Subject: [PATCH 211/284] Removes FunctionBus.h from Gems/ScriptCanvas Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../ScriptCanvas/Libraries/Core/FunctionBus.h | 51 ------------------- .../Libraries/Core/FunctionDefinitionNode.cpp | 1 - .../ScriptCanvas/Libraries/Core/Nodeling.cpp | 1 - .../Code/scriptcanvasgem_headers.cmake | 1 - 4 files changed, 54 deletions(-) delete mode 100644 Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/FunctionBus.h diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/FunctionBus.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/FunctionBus.h deleted file mode 100644 index 5e89cf4d15..0000000000 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/FunctionBus.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * 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 - -#include -#include - -#include - -namespace ScriptCanvas -{ - class FunctionRequests : public AZ::EBusTraits - { - public: - using BusIdType = AZ::EntityId; - static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::ById; - static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Single; - - virtual void OnSignalOut(ID, SlotId) = 0; - }; - - using FunctionRequestBus = AZ::EBus; - - class FunctionNodeNotifications : public AZ::EBusTraits - { - public: - using BusIdType = GraphScopedNodeId; - static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::ById; - - virtual void OnNameChanged() = 0; - }; - - using FunctionNodeNotificationBus = AZ::EBus; - - class FunctionNodeRequests : public AZ::EBusTraits - { - public: - using BusIdType = GraphScopedNodeId; - static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::ById; - - virtual AZStd::string GetName() const = 0; - }; - - using FunctionNodeRequestBus = AZ::EBus; -} diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/FunctionDefinitionNode.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/FunctionDefinitionNode.cpp index 542fc2f0c1..35e17f15ed 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/FunctionDefinitionNode.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/FunctionDefinitionNode.cpp @@ -11,7 +11,6 @@ #include #include -#include #include #include diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/Nodeling.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/Nodeling.cpp index 56d346b67e..64eef40a0f 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/Nodeling.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/Nodeling.cpp @@ -14,7 +14,6 @@ #include #include -#include #include diff --git a/Gems/ScriptCanvas/Code/scriptcanvasgem_headers.cmake b/Gems/ScriptCanvas/Code/scriptcanvasgem_headers.cmake index 2bfa9c74e3..68fb0e2e67 100644 --- a/Gems/ScriptCanvas/Code/scriptcanvasgem_headers.cmake +++ b/Gems/ScriptCanvas/Code/scriptcanvasgem_headers.cmake @@ -146,7 +146,6 @@ set(FILES Include/ScriptCanvas/Libraries/Core/EventHandlerTranslationUtility.h Include/ScriptCanvas/Libraries/Core/ForEach.h Include/ScriptCanvas/Libraries/Core/ForEach.ScriptCanvasGrammar.xml - Include/ScriptCanvas/Libraries/Core/FunctionBus.h Include/ScriptCanvas/Libraries/Core/FunctionCallNode.h Include/ScriptCanvas/Libraries/Core/FunctionCallNode.ScriptCanvasGrammar.xml Include/ScriptCanvas/Libraries/Core/FunctionCallNodeIsOutOfDate.h From b292f62a446defe5993693c764c83089aa76b719 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 6 Jan 2022 13:42:12 -0800 Subject: [PATCH 212/284] Removes MethodUtility.cpp/h from Gems/ScriptCanvas Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../ScriptCanvas/Core/NodeableNode.cpp | 1 - .../Core/NodeableNodeOverloaded.cpp | 1 - .../Core/SubgraphInterfaceUtility.cpp | 1 - .../Internal/Nodes/BaseTimerNode.cpp | 2 - .../Libraries/Core/ExtractProperty.cpp | 1 - .../ScriptCanvas/Libraries/Core/ForEach.cpp | 2 - .../Libraries/Core/FunctionCallNode.cpp | 1 - .../Libraries/Core/GetVariable.cpp | 1 - .../ScriptCanvas/Libraries/Core/Method.cpp | 1 - .../Libraries/Core/MethodOverloaded.cpp | 1 - .../Libraries/Core/MethodUtility.cpp | 87 ------------------- .../Libraries/Core/MethodUtility.h | 28 ------ .../ScriptCanvas/Libraries/Core/Repeater.cpp | 1 - .../Libraries/Core/SendScriptEvent.cpp | 1 - .../Libraries/Core/SetVariable.cpp | 3 +- .../Operators/Containers/OperatorAt.cpp | 1 - .../Operators/Containers/OperatorBack.cpp | 1 - .../Operators/Containers/OperatorClear.cpp | 1 - .../Operators/Containers/OperatorEmpty.cpp | 1 - .../Operators/Containers/OperatorErase.cpp | 1 - .../Operators/Containers/OperatorFront.cpp | 1 - .../Operators/Containers/OperatorInsert.cpp | 1 - .../Operators/Containers/OperatorPushBack.cpp | 1 - .../Operators/Containers/OperatorSize.cpp | 1 - .../Libraries/Operators/Math/OperatorAdd.cpp | 1 - .../Operators/Math/OperatorArithmetic.cpp | 1 - .../Libraries/Operators/Math/OperatorDiv.cpp | 1 - .../Operators/Math/OperatorDivideByNumber.cpp | 1 - .../Operators/Math/OperatorLength.cpp | 1 - .../Libraries/Operators/Math/OperatorMul.cpp | 1 - .../Libraries/Operators/Math/OperatorSub.cpp | 1 - .../Libraries/Operators/Operator.cpp | 2 - .../Code/scriptcanvasgem_common_files.cmake | 1 - .../Code/scriptcanvasgem_headers.cmake | 1 - 34 files changed, 2 insertions(+), 150 deletions(-) delete mode 100644 Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/MethodUtility.cpp delete mode 100644 Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/MethodUtility.h diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/NodeableNode.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/NodeableNode.cpp index 28b7b05cda..323448f57c 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/NodeableNode.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/NodeableNode.cpp @@ -14,7 +14,6 @@ #include #include #include -#include namespace NodeableNodeCpp { diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/NodeableNodeOverloaded.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/NodeableNodeOverloaded.cpp index 58af3a75de..1c77836fff 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/NodeableNodeOverloaded.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/NodeableNodeOverloaded.cpp @@ -14,7 +14,6 @@ #include #include #include -#include namespace NodeableNodeOverloadedCpp { diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/SubgraphInterfaceUtility.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/SubgraphInterfaceUtility.cpp index 74a41eb2c6..a9f80b784b 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/SubgraphInterfaceUtility.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/SubgraphInterfaceUtility.cpp @@ -9,7 +9,6 @@ #include "SubgraphInterfaceUtility.h" #include -#include namespace SubgraphInterfaceUtilityCpp { diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Internal/Nodes/BaseTimerNode.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Internal/Nodes/BaseTimerNode.cpp index 912251ce45..4d72bac561 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Internal/Nodes/BaseTimerNode.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Internal/Nodes/BaseTimerNode.cpp @@ -7,8 +7,6 @@ */ #include -#include - namespace ScriptCanvas { namespace Nodes diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/ExtractProperty.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/ExtractProperty.cpp index 71e2d338d6..47519773ab 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/ExtractProperty.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/ExtractProperty.cpp @@ -7,7 +7,6 @@ */ #include -#include namespace ScriptCanvas { diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/ForEach.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/ForEach.cpp index 97e41d6a53..43af6fa508 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/ForEach.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/ForEach.cpp @@ -9,8 +9,6 @@ #include #include -#include - namespace ScriptCanvas { namespace Nodes diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/FunctionCallNode.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/FunctionCallNode.cpp index 551b9b4002..94a04f4f59 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/FunctionCallNode.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/FunctionCallNode.cpp @@ -16,7 +16,6 @@ #include #include #include -#include #include #include #include diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/GetVariable.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/GetVariable.cpp index c907c47c78..f88fb03726 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/GetVariable.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/GetVariable.cpp @@ -8,7 +8,6 @@ #include "GetVariable.h" -#include #include #include #include diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/Method.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/Method.cpp index ccdf15a111..e00c99b93e 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/Method.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/Method.cpp @@ -12,7 +12,6 @@ #include #include #include -#include #include #include diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/MethodOverloaded.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/MethodOverloaded.cpp index f49fcb3318..96c2fbf3e7 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/MethodOverloaded.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/MethodOverloaded.cpp @@ -10,7 +10,6 @@ #include #include -#include #include #include #include diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/MethodUtility.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/MethodUtility.cpp deleted file mode 100644 index 0ddd161847..0000000000 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/MethodUtility.cpp +++ /dev/null @@ -1,87 +0,0 @@ -/* - * 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 -#include -#include - -namespace ScriptCanvas -{ - AZStd::unordered_map GetTupleGetMethodsFromResult(const AZ::BehaviorMethod& method) - { - if (method.HasResult()) - { - if (const AZ::BehaviorParameter* result = method.GetResult()) - { - return GetTupleGetMethods(result->m_typeId); - } - } - - return {}; - } - - AZStd::unordered_map GetTupleGetMethods(const AZ::TypeId& typeId) - { - AZStd::unordered_map tupleGetMethodMap; - - AZ::BehaviorContext* behaviorContext{}; - AZ::ComponentApplicationBus::BroadcastResult(behaviorContext, &AZ::ComponentApplicationRequests::GetBehaviorContext); - auto bcClassIterator = behaviorContext->m_typeToClassMap.find(typeId); - const AZ::BehaviorClass* behaviorClass = bcClassIterator != behaviorContext->m_typeToClassMap.end() ? bcClassIterator->second : nullptr; - - if (behaviorClass) - { - for (auto& methodPair : behaviorClass->m_methods) - { - const AZ::BehaviorMethod* behaviorMethod = methodPair.second; - if (AZ::Attribute* attribute = FindAttribute(AZ::ScriptCanvasAttributes::TupleGetFunctionIndex, behaviorMethod->m_attributes)) - { - AZ::AttributeReader tupleGetFuncAttrReader(nullptr, attribute); - int tupleGetFuncIndex = -1; - if (tupleGetFuncAttrReader.Read(tupleGetFuncIndex)) - { - [[maybe_unused]] auto insertIter = tupleGetMethodMap.emplace(tupleGetFuncIndex, behaviorMethod); - AZ_Error("Script Canvas", insertIter.second, "Multiple methods with the same TupleGetFunctionIndex attribute" - "has been registered for the class name: %s with typeid: %s", - behaviorClass->m_name.data(), behaviorClass->m_typeId.ToString().data()) - } - } - } - } - - return tupleGetMethodMap; - } - - AZ::Outcome GetTupleGetMethod(const AZ::TypeId& typeId, size_t index) - { - const AZ::BehaviorContext* behaviorContext{}; - AZ::ComponentApplicationBus::BroadcastResult(behaviorContext, &AZ::ComponentApplicationRequests::GetBehaviorContext); - auto bcClassIterator = behaviorContext->m_typeToClassMap.find(typeId); - const AZ::BehaviorClass* behaviorClass = bcClassIterator != behaviorContext->m_typeToClassMap.end() ? bcClassIterator->second : nullptr; - - if (behaviorClass) - { - for (auto methodPair : behaviorClass->m_methods) - { - const AZ::BehaviorMethod* behaviorMethod = methodPair.second; - if (AZ::Attribute* attribute = FindAttribute(AZ::ScriptCanvasAttributes::TupleGetFunctionIndex, behaviorMethod->m_attributes)) - { - AZ::AttributeReader tupleGetFuncAttrReader(nullptr, attribute); - int tupleGetFuncIndex = -1; - if (tupleGetFuncAttrReader.Read(tupleGetFuncIndex) && index == tupleGetFuncIndex) - { - return AZ::Success(behaviorMethod); - } - } - } - } - - return AZ::Failure(); - } - -} diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/MethodUtility.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/MethodUtility.h deleted file mode 100644 index 33175b4363..0000000000 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/MethodUtility.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * 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 - -#include -#include -#include -#include - -namespace ScriptCanvas::Grammar -{ - struct FunctionPrototype; -} - -namespace ScriptCanvas -{ - AZStd::unordered_map GetTupleGetMethodsFromResult(const AZ::BehaviorMethod& method); - - AZStd::unordered_map GetTupleGetMethods(const AZ::TypeId& typeId); - - AZ::Outcome GetTupleGetMethod(const AZ::TypeId& typeID, size_t index); -} diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/Repeater.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/Repeater.cpp index 5fa71e96c6..6a253dbe0b 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/Repeater.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/Repeater.cpp @@ -9,7 +9,6 @@ #include #include -#include #include #include diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/SendScriptEvent.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/SendScriptEvent.cpp index 26a9b4fc96..e99bb721d9 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/SendScriptEvent.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/SendScriptEvent.cpp @@ -11,7 +11,6 @@ #include #include -#include #include diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/SetVariable.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/SetVariable.cpp index 8c53b0d1b4..1e16de7762 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/SetVariable.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/SetVariable.cpp @@ -8,8 +8,9 @@ #include "SetVariable.h" +#include + #include -#include #include #include #include diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Containers/OperatorAt.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Containers/OperatorAt.cpp index e44fd0b1f1..614c2eb116 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Containers/OperatorAt.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Containers/OperatorAt.cpp @@ -9,7 +9,6 @@ #include "OperatorAt.h" #include -#include #include namespace ScriptCanvas diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Containers/OperatorBack.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Containers/OperatorBack.cpp index 66d33d4c8f..82fe82a960 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Containers/OperatorBack.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Containers/OperatorBack.cpp @@ -9,7 +9,6 @@ #include "OperatorBack.h" #include -#include #include namespace ScriptCanvas diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Containers/OperatorClear.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Containers/OperatorClear.cpp index c75b046aa3..5140845ec6 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Containers/OperatorClear.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Containers/OperatorClear.cpp @@ -9,7 +9,6 @@ #include "OperatorClear.h" #include -#include #include #include diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Containers/OperatorEmpty.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Containers/OperatorEmpty.cpp index 679fbec076..1be67c7773 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Containers/OperatorEmpty.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Containers/OperatorEmpty.cpp @@ -7,7 +7,6 @@ */ #include "OperatorEmpty.h" -#include #include #include diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Containers/OperatorErase.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Containers/OperatorErase.cpp index ebb7a8233a..941dcea024 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Containers/OperatorErase.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Containers/OperatorErase.cpp @@ -9,7 +9,6 @@ #include "OperatorErase.h" #include -#include #include namespace ScriptCanvas diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Containers/OperatorFront.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Containers/OperatorFront.cpp index d83711adbe..6f010721d3 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Containers/OperatorFront.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Containers/OperatorFront.cpp @@ -9,7 +9,6 @@ #include "OperatorFront.h" #include -#include #include namespace ScriptCanvas diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Containers/OperatorInsert.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Containers/OperatorInsert.cpp index 7374b3442f..889c2d4b98 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Containers/OperatorInsert.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Containers/OperatorInsert.cpp @@ -7,7 +7,6 @@ */ #include "OperatorInsert.h" -#include #include namespace ScriptCanvas diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Containers/OperatorPushBack.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Containers/OperatorPushBack.cpp index 5793d06aec..d5cbf7b36e 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Containers/OperatorPushBack.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Containers/OperatorPushBack.cpp @@ -7,7 +7,6 @@ */ #include "OperatorPushBack.h" -#include #include namespace ScriptCanvas diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Containers/OperatorSize.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Containers/OperatorSize.cpp index 072d3b87ed..e7313c6f39 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Containers/OperatorSize.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Containers/OperatorSize.cpp @@ -7,7 +7,6 @@ */ #include "OperatorSize.h" -#include #include #include diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Math/OperatorAdd.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Math/OperatorAdd.cpp index 15727ac5ba..f50c3f3565 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Math/OperatorAdd.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Math/OperatorAdd.cpp @@ -7,7 +7,6 @@ */ #include "OperatorAdd.h" -#include #include #include #include diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Math/OperatorArithmetic.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Math/OperatorArithmetic.cpp index eb3e352211..5fd6bb1edb 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Math/OperatorArithmetic.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Math/OperatorArithmetic.cpp @@ -7,7 +7,6 @@ */ #include "OperatorArithmetic.h" -#include #include #include diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Math/OperatorDiv.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Math/OperatorDiv.cpp index 6890cb66ed..046b1d7ed6 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Math/OperatorDiv.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Math/OperatorDiv.cpp @@ -7,7 +7,6 @@ */ #include "OperatorDiv.h" -#include #include #include #include diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Math/OperatorDivideByNumber.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Math/OperatorDivideByNumber.cpp index db7ff3722b..665b6e5e0f 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Math/OperatorDivideByNumber.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Math/OperatorDivideByNumber.cpp @@ -7,7 +7,6 @@ */ #include "OperatorDivideByNumber.h" -#include #include #include #include diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Math/OperatorLength.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Math/OperatorLength.cpp index 83720f47c1..648cfa72a2 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Math/OperatorLength.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Math/OperatorLength.cpp @@ -7,7 +7,6 @@ */ #include "OperatorLength.h" -#include #include #include diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Math/OperatorMul.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Math/OperatorMul.cpp index 06ccb617ff..2488644871 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Math/OperatorMul.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Math/OperatorMul.cpp @@ -7,7 +7,6 @@ */ #include "OperatorMul.h" -#include #include #include #include diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Math/OperatorSub.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Math/OperatorSub.cpp index 21b38fc553..cec4c64216 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Math/OperatorSub.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Math/OperatorSub.cpp @@ -7,7 +7,6 @@ */ #include "OperatorSub.h" -#include #include #include diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Operator.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Operator.cpp index 3d31096f12..cd82263b28 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Operator.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Operator.cpp @@ -14,8 +14,6 @@ #include #include -#include - #include namespace ScriptCanvas diff --git a/Gems/ScriptCanvas/Code/scriptcanvasgem_common_files.cmake b/Gems/ScriptCanvas/Code/scriptcanvasgem_common_files.cmake index 1301883453..6df2f80339 100644 --- a/Gems/ScriptCanvas/Code/scriptcanvasgem_common_files.cmake +++ b/Gems/ScriptCanvas/Code/scriptcanvasgem_common_files.cmake @@ -105,7 +105,6 @@ set(FILES Include/ScriptCanvas/Libraries/Core/GetVariable.cpp Include/ScriptCanvas/Libraries/Core/Method.cpp Include/ScriptCanvas/Libraries/Core/MethodOverloaded.cpp - Include/ScriptCanvas/Libraries/Core/MethodUtility.cpp Include/ScriptCanvas/Libraries/Core/Nodeling.cpp Include/ScriptCanvas/Libraries/Core/ReceiveScriptEvent.cpp Include/ScriptCanvas/Libraries/Core/Repeater.cpp diff --git a/Gems/ScriptCanvas/Code/scriptcanvasgem_headers.cmake b/Gems/ScriptCanvas/Code/scriptcanvasgem_headers.cmake index 68fb0e2e67..a22fb370c0 100644 --- a/Gems/ScriptCanvas/Code/scriptcanvasgem_headers.cmake +++ b/Gems/ScriptCanvas/Code/scriptcanvasgem_headers.cmake @@ -155,7 +155,6 @@ set(FILES Include/ScriptCanvas/Libraries/Core/GetVariable.ScriptCanvasGrammar.xml Include/ScriptCanvas/Libraries/Core/Method.h Include/ScriptCanvas/Libraries/Core/MethodOverloaded.h - Include/ScriptCanvas/Libraries/Core/MethodUtility.h Include/ScriptCanvas/Libraries/Core/Nodeling.h Include/ScriptCanvas/Libraries/Core/Nodeling.ScriptCanvasGrammar.xml Include/ScriptCanvas/Libraries/Core/ReceiveScriptEvent.h From 0344e8bf1d197e528b92afe4ffdc27cbe4128940 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 6 Jan 2022 13:50:26 -0800 Subject: [PATCH 213/284] Removes FindTaggedEntities.cpp from Gems/ScriptCanvas Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Libraries/Entity/FindTaggedEntities.cpp | 27 ------------------- 1 file changed, 27 deletions(-) delete mode 100644 Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Entity/FindTaggedEntities.cpp diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Entity/FindTaggedEntities.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Entity/FindTaggedEntities.cpp deleted file mode 100644 index ab5d0f775d..0000000000 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Entity/FindTaggedEntities.cpp +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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 - -#include - -namespace ScriptCanvas -{ - namespace Nodes - { - namespace Entity - { - void FindTaggedEntities::OnInputSignal(const SlotId&) - { - AZ::Crc32 tagEntity = WhenEntityActiveProperty::GetCrc32(this); - } - } - } -} - -#include From f4a3867b7dc863359f26e2e1f93970a18f7110bc Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 6 Jan 2022 13:51:57 -0800 Subject: [PATCH 214/284] Removes BinaryOperation.h/cpp from Gems/ScriptCanvas Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Libraries/Math/BinaryOperation.cpp | 137 ------------------ .../Libraries/Math/BinaryOperation.h | 46 ------ 2 files changed, 183 deletions(-) delete mode 100644 Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Math/BinaryOperation.cpp delete mode 100644 Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Math/BinaryOperation.h diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Math/BinaryOperation.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Math/BinaryOperation.cpp deleted file mode 100644 index 68621799f1..0000000000 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Math/BinaryOperation.cpp +++ /dev/null @@ -1,137 +0,0 @@ -/* - * 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 "BinaryOperation.h" - -namespace ScriptCanvas -{ - namespace Nodes - { - namespace Math - { - void Sum::Reflect(AZ::ReflectContext* reflection) - { - AZ::SerializeContext* serializeContext = azrtti_cast(reflection); - if (serializeContext) - { - serializeContext->Class() - ->Version(2) - ->Field("A", &Sum::m_a) - ->Field("B", &Sum::m_b) - ; - - AZ::EditContext* editContext = serializeContext->GetEditContext(); - if (editContext) - { - editContext->Class("Sum", "Performs the sum between two numbers.") - ->ClassElement(AZ::Edit::ClassElements::EditorData, "") - ->Attribute(AZ::Edit::Attributes::Icon, "Editor/Icons/ScriptCanvas/Sum.png") - ; - } - - } - - AZ::BehaviorContext* behaviorContext = azrtti_cast(reflection); - if (behaviorContext) - { - behaviorContext->Class("Sum") - ->Method("In", &Sum::OnInputSignal) - ->Attribute(ScriptCanvas::Attributes::Input, true) - ->Method("Out", &Sum::SignalOutput) - ->Attribute(ScriptCanvas::Attributes::Output, true) - ->Property("A", BehaviorValueProperty(&Sum::m_a)) - ->Property("B", BehaviorValueProperty(&Sum::m_b)) - ->Property("This", BehaviorValueProperty(&Sum::m_sum)) - ; - } - } - - Sum::Sum() - : Number() - {} - - Sum::~Sum() - {} - - void Sum::OnEntry() - { - m_status = ExecutionStatus::Immediate; - m_executionMode = ExecutionStatus::Immediate; - } - - void Sum::OnInputSignal(const SlotID& slot) - { - //static const SlotID& inSlot = SlotID("In"); - - //if (slot == inSlot) - //{ - // Types::Value* result = nullptr; - - // if (auto value = azdynamic_cast(Evaluate(SlotID("This")))) - // { - // m_value = value->Get(); - // } - //} - } - - void Sum::OnExecute(double deltaTime) - { - if (m_status != ExecutionStatus::NotStarted) - { - EvaluateSlot(SlotID("GetThis")); - SignalOutput(SlotID("Out")); - } - } - - AZ::BehaviorValueParameter Sum::EvaluateSlot(const ScriptCanvas::SlotID& slotId) - { - ScriptCanvas::Slot* slot = GetSlot(slotId); - if (slot) - { - if (slot->GetType() == ScriptCanvas::SlotType::Setter) - { - if (!slot->GetConnectionList().empty()) - { - auto connection = slot->GetConnectionList()[0]; - - // Evaluate the node connected to this slot, we'll set our value according to it. - AZ::BehaviorValueParameter parameter; - ScriptCanvas::NodeServiceRequestBus::EventResult(parameter, connection.GetNodeId(), &NodeServiceRequests::EvaluateSlot, connection.GetSlotId()); - return slot->GetProperty() ? ScriptCanvas::SafeSet(parameter, slot->GetProperty()->m_setter, this) : parameter; - } - } - else if (slot->GetType() == ScriptCanvas::SlotType::Getter) - { - static const ScriptCanvas::SlotID aSlot("SetA"); - static const ScriptCanvas::SlotID bSlot("SetB"); - - // Evaluating each slot will invoke its setter which, if there is a connection it will get evaluate and - // return the connected value, otherwise we'll use the default value of the property. - EvaluateSlot(aSlot); - EvaluateSlot(bSlot); - - // Both m_a and m_b have been resolved so we'll do the sum and return it. - m_sum = m_a.Get() + m_b.Get(); - - return AZ::BehaviorValueParameter(&m_sum); - } - } - - // There was no connection to invoke a setter - return AZ::BehaviorValueParameter(); - } - - Types::Value* Sum::Evaluate(const SlotID& slot) - { - AZ_Assert(false, "Deprecated"); - return nullptr; - } - } - } -} diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Math/BinaryOperation.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Math/BinaryOperation.h deleted file mode 100644 index 48e63f93d4..0000000000 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Math/BinaryOperation.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * 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 - -#include - -namespace ScriptCanvas -{ - class NodeVisitor; - - namespace Nodes - { - class BinaryOperation - : public Number - { - public: - - AZ_COMPONENT(BinaryOperation, "{04798FF9-50EE-487E-9433-B2C4F0FE4D37}", Node); - - static void Reflect(AZ::ReflectContext* reflection); - - BinaryOperation(); - ~BinaryOperation() override; - - void OnInputSignal(const SlotID& slot) override; - Types::Value* Evaluate(const SlotID& slot) override; - - AZ::BehaviorValueParameter EvaluateSlot(const ScriptCanvas::SlotID&) override; - - void Visit(NodeVisitor& visitor) const override { visitor.Visit(*this); } - - protected: - - Types::ValueFloat m_a; - Types::ValueFloat m_b; - Types::ValueFloat m_sum; - - }; - } -} From 0b8859b24607175bedb17ead726a976f96e6bdd2 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 6 Jan 2022 14:02:22 -0800 Subject: [PATCH 215/284] Removes Format.cpp from Gems/ScriptCanvas Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Include/ScriptCanvas/Libraries/String/Format.cpp | 9 --------- .../ScriptCanvas/Code/scriptcanvasgem_common_files.cmake | 1 - 2 files changed, 10 deletions(-) delete mode 100644 Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/String/Format.cpp diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/String/Format.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/String/Format.cpp deleted file mode 100644 index f541bbacbe..0000000000 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/String/Format.cpp +++ /dev/null @@ -1,9 +0,0 @@ -/* - * 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 "Format.h" diff --git a/Gems/ScriptCanvas/Code/scriptcanvasgem_common_files.cmake b/Gems/ScriptCanvas/Code/scriptcanvasgem_common_files.cmake index 6df2f80339..b3e1e05cc5 100644 --- a/Gems/ScriptCanvas/Code/scriptcanvasgem_common_files.cmake +++ b/Gems/ScriptCanvas/Code/scriptcanvasgem_common_files.cmake @@ -144,7 +144,6 @@ set(FILES Include/ScriptCanvas/Libraries/Spawning/Spawning.cpp Include/ScriptCanvas/Libraries/Spawning/SpawnNodeable.cpp Include/ScriptCanvas/Libraries/String/Contains.cpp - Include/ScriptCanvas/Libraries/String/Format.cpp Include/ScriptCanvas/Libraries/String/Replace.cpp Include/ScriptCanvas/Libraries/String/String.cpp Include/ScriptCanvas/Libraries/String/StringMethods.cpp From d9dbd439d417835edfc72177bae24f64fe3baa90 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 6 Jan 2022 14:52:25 -0800 Subject: [PATCH 216/284] Removes CountdownNodeable.cpp/h from Gems/ScriptCanvas Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Libraries/Time/CountdownNodeable.cpp | 90 ------------------- .../Libraries/Time/CountdownNodeable.h | 75 ---------------- 2 files changed, 165 deletions(-) delete mode 100644 Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Time/CountdownNodeable.cpp delete mode 100644 Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Time/CountdownNodeable.h diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Time/CountdownNodeable.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Time/CountdownNodeable.cpp deleted file mode 100644 index 24544abac7..0000000000 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Time/CountdownNodeable.cpp +++ /dev/null @@ -1,90 +0,0 @@ -/* - * 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 "CountdownNodeable.h" -#include -#include - -namespace ScriptCanvas -{ - namespace Nodeables - { - namespace Time - { - CountdownNodeable::~CountdownNodeable() - { - AZ::TickBus::Handler::BusDisconnect(); - } - - void CountdownNodeable::InitiateCountdown(bool reset, float countdownSeconds, bool looping, float holdTime) - { - if (reset || !AZ::TickBus::Handler::BusIsConnected()) - { - // If we're resetting, we need to disconnect. - AZ::TickBus::Handler::BusDisconnect(); - - m_countdownSeconds = countdownSeconds; - m_looping = looping; - m_holdTime = holdTime; - - m_currentTime = m_countdownSeconds; - - AZ::TickBus::Handler::BusConnect(); - } - } - - void CountdownNodeable::OnDeactivate() - { - AZ::TickBus::Handler::BusDisconnect(); - } - - void CountdownNodeable::OnTick(float deltaTime, AZ::ScriptTimePoint time) - { - if (m_currentTime <= 0.f) - { - if (m_holding) - { - m_holding = false; - m_currentTime = m_countdownSeconds; - m_elapsedTime = 0.f; - return; - } - - if (!m_looping) - { - AZ::TickBus::Handler::BusDisconnect(); - } - else - { - m_holding = m_holdTime > 0.f; - m_currentTime = m_holding ? m_holdTime : m_countdownSeconds; - } - - ExecutionOut(AZ_CRC("Done", 0x102de0ab), m_elapsedTime); - } - else - { - m_currentTime -= static_cast(deltaTime); - m_elapsedTime = m_holding ? 0.f : m_countdownSeconds - m_currentTime; - } - } - - void CountdownNodeable::Reset(float countdownSeconds, Data::BooleanType looping, float holdTime) - { - InitiateCountdown(true, countdownSeconds, looping, holdTime); - } - - void CountdownNodeable::Start(float countdownSeconds, Data::BooleanType looping, float holdTime) - { - InitiateCountdown(false, countdownSeconds, looping, holdTime); - } - } - } -} - -#include diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Time/CountdownNodeable.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Time/CountdownNodeable.h deleted file mode 100644 index 98e9356b18..0000000000 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Time/CountdownNodeable.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * 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 - -#include - -#include -#include -#include - -#include - -namespace ScriptCanvas -{ - namespace Nodeables - { - namespace Time - { - class CountdownNodeable - : public ScriptCanvas::Nodeable - , public AZ::TickBus::Handler - { - NodeDefinition(CountdownNodeable, "Delay", "Counts down time from a specified value.", - NodeTags::Category("Timing"), - NodeTags::Version(0) - ); - - public: - virtual ~CountdownNodeable(); - - InputMethod("Start", "When signaled, execution is delayed at this node according to the specified properties.", - SlotTags::Contracts({ DisallowReentrantExecutionContract })) - void Start(float countdownSeconds, Data::BooleanType looping, float holdTime); - - DataInput(float, "Start: Time", 0.0f, "", SlotTags::DisplayGroup("Start")); - DataInput(Data::BooleanType, "Start: Loop", false, "", SlotTags::DisplayGroup("Start")); - DataInput(float, "Start: Hold", 0.0f, "", SlotTags::DisplayGroup("Start")); - - InputMethod("Reset", "When signaled, execution is delayed at this node according to the specified properties.", - SlotTags::Contracts({ DisallowReentrantExecutionContract })) - void Reset(float countdownSeconds, Data::BooleanType looping, float holdTime); - - DataInput(float, "Reset: Time", 0.0f, "", SlotTags::DisplayGroup("Reset")); - DataInput(Data::BooleanType, "Reset: Loop", false, "", SlotTags::DisplayGroup("Reset")); - DataInput(float, "Reset: Hold", 0.0f, "", SlotTags::DisplayGroup("Reset")); - - ExecutionLatentOutput("Done", "Signaled when the delay reaches zero."); - DataOutput(float, "Elapsed", 0.0f, "The amount of time that has elapsed since the delay began.", - SlotTags::DisplayGroup("Done")); - - protected: - void OnDeactivate() override; - - // TickBus - void OnTick(float deltaTime, AZ::ScriptTimePoint time) override; - - private: - void InitiateCountdown(bool reset, float countdownSeconds, bool looping, float holdTime); - - float m_countdownSeconds = 0.0f; - bool m_looping = false; - float m_holdTime = 0.0f; - float m_elapsedTime = 0.0f; - bool m_holding = false; - float m_currentTime = 0.0f; - }; - } - } -} From e0a12e740c622ef97028709ed56f161c062399ae Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 6 Jan 2022 14:55:39 -0800 Subject: [PATCH 217/284] Removes AddFailure.cpp from Gems/ScriptCanvas Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Libraries/UnitTesting/AddFailure.cpp | 12 ------------ .../Code/scriptcanvasgem_common_files.cmake | 1 - 2 files changed, 13 deletions(-) delete mode 100644 Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/UnitTesting/AddFailure.cpp diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/UnitTesting/AddFailure.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/UnitTesting/AddFailure.cpp deleted file mode 100644 index d8a61ba076..0000000000 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/UnitTesting/AddFailure.cpp +++ /dev/null @@ -1,12 +0,0 @@ -/* - * 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 "AddFailure.h" - -#include "UnitTestBus.h" - diff --git a/Gems/ScriptCanvas/Code/scriptcanvasgem_common_files.cmake b/Gems/ScriptCanvas/Code/scriptcanvasgem_common_files.cmake index b3e1e05cc5..9569422e0f 100644 --- a/Gems/ScriptCanvas/Code/scriptcanvasgem_common_files.cmake +++ b/Gems/ScriptCanvas/Code/scriptcanvasgem_common_files.cmake @@ -148,7 +148,6 @@ set(FILES Include/ScriptCanvas/Libraries/String/String.cpp Include/ScriptCanvas/Libraries/String/StringMethods.cpp Include/ScriptCanvas/Libraries/String/Utilities.cpp - Include/ScriptCanvas/Libraries/UnitTesting/AddFailure.cpp Include/ScriptCanvas/Libraries/UnitTesting/ExpectEqual.cpp Include/ScriptCanvas/Libraries/UnitTesting/ExpectFalse.cpp Include/ScriptCanvas/Libraries/UnitTesting/ExpectGreaterThan.cpp From a2479259c99490820dd88795aa9507c4f342777b Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 6 Jan 2022 14:56:21 -0800 Subject: [PATCH 218/284] Removes UnitTestBus.cpp from Gems/ScriptCanvas Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Libraries/UnitTesting/UnitTestBus.cpp | 23 ------------------- 1 file changed, 23 deletions(-) delete mode 100644 Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/UnitTesting/UnitTestBus.cpp diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/UnitTesting/UnitTestBus.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/UnitTesting/UnitTestBus.cpp deleted file mode 100644 index addbb96494..0000000000 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/UnitTesting/UnitTestBus.cpp +++ /dev/null @@ -1,23 +0,0 @@ -/* - * 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 "UnitTestBus.h" - -#include -#include -#include - -namespace ScriptCanvas -{ - namespace UnitTesting - { - - - } // namespace UnitTest - -} // namespace ScriptCanvas From 14952b6c34b2e638e23de5082e11f61a42ccabc0 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 6 Jan 2022 15:02:02 -0800 Subject: [PATCH 219/284] Removes UnitTestBusSenderMacros.h from Gems/ScriptCanvas Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Libraries/UnitTesting/ExpectEqual.cpp | 1 - .../UnitTesting/ExpectGreaterThan.cpp | 1 - .../UnitTesting/ExpectGreaterThanEqual.cpp | 1 - .../Libraries/UnitTesting/ExpectLessThan.cpp | 1 - .../UnitTesting/ExpectLessThanEqual.cpp | 1 - .../Libraries/UnitTesting/ExpectNotEqual.cpp | 1 - .../Libraries/UnitTesting/UnitTestBusSender.h | 1 - .../UnitTesting/UnitTestBusSenderMacros.h | 75 ------------------- .../Code/scriptcanvasgem_headers.cmake | 1 - 9 files changed, 83 deletions(-) delete mode 100644 Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/UnitTesting/UnitTestBusSenderMacros.h diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/UnitTesting/ExpectEqual.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/UnitTesting/ExpectEqual.cpp index fa6b5e35b0..96717274f5 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/UnitTesting/ExpectEqual.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/UnitTesting/ExpectEqual.cpp @@ -9,7 +9,6 @@ #include "ExpectEqual.h" #include "UnitTestBus.h" -#include "UnitTestBusSenderMacros.h" namespace ScriptCanvas { diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/UnitTesting/ExpectGreaterThan.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/UnitTesting/ExpectGreaterThan.cpp index deb92f0bf9..dc1d9cd5c7 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/UnitTesting/ExpectGreaterThan.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/UnitTesting/ExpectGreaterThan.cpp @@ -9,7 +9,6 @@ #include "ExpectGreaterThan.h" #include "UnitTestBus.h" -#include "UnitTestBusSenderMacros.h" namespace ScriptCanvas { diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/UnitTesting/ExpectGreaterThanEqual.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/UnitTesting/ExpectGreaterThanEqual.cpp index ad14591a07..a4a8677bcd 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/UnitTesting/ExpectGreaterThanEqual.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/UnitTesting/ExpectGreaterThanEqual.cpp @@ -9,7 +9,6 @@ #include "ExpectGreaterThanEqual.h" #include "UnitTestBus.h" -#include "UnitTestBusSenderMacros.h" namespace ScriptCanvas { diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/UnitTesting/ExpectLessThan.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/UnitTesting/ExpectLessThan.cpp index 1e7047d6e0..48a7621eb6 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/UnitTesting/ExpectLessThan.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/UnitTesting/ExpectLessThan.cpp @@ -9,7 +9,6 @@ #include "ExpectLessThan.h" #include "UnitTestBus.h" -#include "UnitTestBusSenderMacros.h" namespace ScriptCanvas { diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/UnitTesting/ExpectLessThanEqual.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/UnitTesting/ExpectLessThanEqual.cpp index b69f3235e5..a04a9ae211 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/UnitTesting/ExpectLessThanEqual.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/UnitTesting/ExpectLessThanEqual.cpp @@ -9,7 +9,6 @@ #include "ExpectLessThanEqual.h" #include "UnitTestBus.h" -#include "UnitTestBusSenderMacros.h" namespace ScriptCanvas { diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/UnitTesting/ExpectNotEqual.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/UnitTesting/ExpectNotEqual.cpp index acf5e0e3cc..95ab9059c8 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/UnitTesting/ExpectNotEqual.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/UnitTesting/ExpectNotEqual.cpp @@ -9,7 +9,6 @@ #include "ExpectNotEqual.h" #include "UnitTestBus.h" -#include "UnitTestBusSenderMacros.h" namespace ScriptCanvas { diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/UnitTesting/UnitTestBusSender.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/UnitTesting/UnitTestBusSender.h index 00f3453394..59dd432961 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/UnitTesting/UnitTestBusSender.h +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/UnitTesting/UnitTestBusSender.h @@ -11,7 +11,6 @@ #include "UnitTesting.h" #include "UnitTestBus.h" -#include "UnitTestBusSenderMacros.h" namespace AZ { diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/UnitTesting/UnitTestBusSenderMacros.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/UnitTesting/UnitTestBusSenderMacros.h deleted file mode 100644 index 5ff6e2216e..0000000000 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/UnitTesting/UnitTestBusSenderMacros.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * 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 - -#define SCRIPT_CANVAS_UNIT_TEST_EQUALITY_TYPES(OVERLOAD, NAME, PARAM0, PARAM1, PARAM2)\ - OVERLOAD(NAME, AABB, PARAM0, PARAM1, PARAM2)\ - OVERLOAD(NAME, Boolean, PARAM0, PARAM1, PARAM2)\ - OVERLOAD(NAME, CRC, PARAM0, PARAM1, PARAM2)\ - OVERLOAD(NAME, Color, PARAM0, PARAM1, PARAM2)\ - OVERLOAD(NAME, EntityID, PARAM0, PARAM1, PARAM2)\ - OVERLOAD(NAME, Matrix3x3, PARAM0, PARAM1, PARAM2)\ - OVERLOAD(NAME, Matrix4x4, PARAM0, PARAM1, PARAM2)\ - OVERLOAD(NAME, Number, PARAM0, PARAM1, PARAM2)\ - OVERLOAD(NAME, OBB, PARAM0, PARAM1, PARAM2)\ - OVERLOAD(NAME, Plane, PARAM0, PARAM1, PARAM2)\ - OVERLOAD(NAME, Quaternion, PARAM0, PARAM1, PARAM2)\ - OVERLOAD(NAME, String, PARAM0, PARAM1, PARAM2)\ - OVERLOAD(NAME, Transform, PARAM0, PARAM1, PARAM2)\ - OVERLOAD(NAME, Vector2, PARAM0, PARAM1, PARAM2)\ - OVERLOAD(NAME, Vector3, PARAM0, PARAM1, PARAM2)\ - OVERLOAD(NAME, Vector4, PARAM0, PARAM1, PARAM2) - -#define SCRIPT_CANVAS_UNIT_TEST_COMPARE_TYPES(OVERLOAD, NAME, PARAM0, PARAM1, PARAM2)\ - OVERLOAD(NAME, Number, PARAM0, PARAM1, PARAM2)\ - OVERLOAD(NAME, String, PARAM0, PARAM1, PARAM2) - -#define SCRIPT_CANVAS_UNIT_TEST_SENDER_OVERLOAD_DECLARATION(NAME, TYPE, PARAM0, PARAM1, PARAM2)\ - static void NAME(const AZ::EntityId& graphUniqueId, const Data::TYPE##Type candidate, const Data::TYPE##Type reference, const Report& report); - -#define SCRIPT_CANVAS_UNIT_TEST_SENDER_OVERLOAD_IMPLEMENTATION(NAME, TYPE, PARAM0, PARAM1, PARAM2)\ - void EventSender::NAME(const AZ::EntityId& graphUniqueId, const Data::TYPE##Type candidate, const Data::TYPE##Type reference, const Report& report)\ - {\ - void(BusTraits::* f)(const Data::##TYPE##Type, const Data::##TYPE##Type, const Report&) = &BusTraits::##NAME;\ - Bus::Event(graphUniqueId, f, candidate, reference, report);\ - } - -#define SCRIPT_CANVAS_UNIT_TEST_SENDER_OVERLOAD_REFLECTION(NAME, TYPE, LOOK_UP, OPERATOR, PARAM2)\ - builder->Method(LOOK_UP, static_cast(&EventSender::##NAME), { { {"", "", behaviorContext->MakeDefaultValue(UniqueId)}, {"Candidate", "left of " OPERATOR}, {"Reference", "right of " OPERATOR}, {"Report", "additional notes for the test report"} } }) ;\ - builder->Attribute(AZ::ScriptCanvasAttributes::HiddenParameterIndex, uniqueIdIndex); - -#define SCRIPT_CANVAS_UNIT_TEST_SENDER_EQUALITY_OVERLOAD_DECLARATIONS(NAME)\ - SCRIPT_CANVAS_UNIT_TEST_EQUALITY_TYPES(SCRIPT_CANVAS_UNIT_TEST_SENDER_OVERLOAD_DECLARATION, NAME, unused, unused, unused) - -#define SCRIPT_CANVAS_UNIT_TEST_SENDER_EQUALITY_OVERLOAD_IMPLEMENTATIONS(NAME)\ - SCRIPT_CANVAS_UNIT_TEST_EQUALITY_TYPES(SCRIPT_CANVAS_UNIT_TEST_SENDER_OVERLOAD_IMPLEMENTATION, NAME, unused, unused, unused) - -#define SCRIPT_CANVAS_UNIT_TEST_SENDER_EQUALITY_OVERLOAD_REFLECTIONS(NAME, LOOK_UP, OPERATOR)\ - SCRIPT_CANVAS_UNIT_TEST_EQUALITY_TYPES(SCRIPT_CANVAS_UNIT_TEST_SENDER_OVERLOAD_REFLECTION, NAME, LOOK_UP, OPERATOR, unused) - -#define SCRIPT_CANVAS_UNIT_TEST_SENDER_COMPARE_OVERLOAD_DECLARATIONS(NAME)\ - SCRIPT_CANVAS_UNIT_TEST_COMPARE_TYPES(SCRIPT_CANVAS_UNIT_TEST_SENDER_OVERLOAD_DECLARATION, NAME, unused, unused, unused) - -#define SCRIPT_CANVAS_UNIT_TEST_SENDER_COMPARE_OVERLOAD_IMPLEMENTATIONS(NAME)\ - SCRIPT_CANVAS_UNIT_TEST_COMPARE_TYPES(SCRIPT_CANVAS_UNIT_TEST_SENDER_OVERLOAD_IMPLEMENTATION, NAME, unused, unused, unused) - -#define SCRIPT_CANVAS_UNIT_TEST_SENDER_COMPARE_OVERLOAD_REFLECTIONS(NAME, LOOK_UP, OPERATOR)\ - SCRIPT_CANVAS_UNIT_TEST_COMPARE_TYPES(SCRIPT_CANVAS_UNIT_TEST_SENDER_OVERLOAD_REFLECTION, NAME, LOOK_UP, OPERATOR, unused) - -#define SCRIPT_CANVAS_UNIT_TEST_LEGACY_NODE_IMPLEMENTATION(NAME, TYPE, PARAM0, PARAM1, PARAM2)\ - case Data::eType::##TYPE##:\ - {\ - void(ScriptCanvas::UnitTesting::BusTraits::* f)(const Data::##TYPE##Type, const Data::##TYPE##Type, const ScriptCanvas::UnitTesting::Report&) = &ScriptCanvas::UnitTesting::BusTraits::##NAME##;\ - ScriptCanvas::UnitTesting::Bus::Event(GetOwningScriptCanvasId(), f, *lhs->GetAs(), *rhs->GetAs(), *report);\ - }\ - break; - -#define SCRIPT_CANVAS_UNIT_TEST_LEGACY_NODE_EQUALITY_IMPLEMENTATIONS(NAME) case Data::eType::Number: break; default: break; - -#define SCRIPT_CANVAS_UNIT_TEST_LEGACY_NODE_COMPARE_IMPLEMENTATIONS(NAME) case Data::eType::Number: break; default: break; diff --git a/Gems/ScriptCanvas/Code/scriptcanvasgem_headers.cmake b/Gems/ScriptCanvas/Code/scriptcanvasgem_headers.cmake index a22fb370c0..9ccd352929 100644 --- a/Gems/ScriptCanvas/Code/scriptcanvasgem_headers.cmake +++ b/Gems/ScriptCanvas/Code/scriptcanvasgem_headers.cmake @@ -300,7 +300,6 @@ set(FILES Include/ScriptCanvas/Libraries/UnitTesting/Auxiliary/Auxiliary.h Include/ScriptCanvas/Libraries/UnitTesting/Auxiliary/AuxiliaryGenerics.h Include/ScriptCanvas/Libraries/UnitTesting/UnitTestBusSender.h - Include/ScriptCanvas/Libraries/UnitTesting/UnitTestBusSenderMacros.h Include/ScriptCanvas/Libraries/Operators/Operators.h Include/ScriptCanvas/Libraries/Operators/Operator.h Include/ScriptCanvas/Libraries/Operators/Operator.ScriptCanvasGrammar.xml From faa44260c6c8a2f4d9e559363168e7d89c099e15 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 6 Jan 2022 15:09:10 -0800 Subject: [PATCH 220/284] Removes AuxiliaryGenerics.h from Gems/ScriptCanvas Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../UnitTesting/Auxiliary/AuxiliaryGenerics.h | 40 ------------------- .../Code/scriptcanvasgem_headers.cmake | 1 - 2 files changed, 41 deletions(-) delete mode 100644 Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/UnitTesting/Auxiliary/AuxiliaryGenerics.h diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/UnitTesting/Auxiliary/AuxiliaryGenerics.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/UnitTesting/Auxiliary/AuxiliaryGenerics.h deleted file mode 100644 index cdbed97807..0000000000 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/UnitTesting/Auxiliary/AuxiliaryGenerics.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * 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 - -#include - -namespace ScriptCanvas -{ - namespace UnitTesting - { - namespace Auxiliary - { - AZ_INLINE AZStd::vector FillWithOrdinals(Data::NumberType count) - { - AZStd::vector ordinals; - ordinals.reserve(aznumeric_caster(count)); - - for (float ordinal = 1.f; ordinal <= count; ++ordinal) - { - ordinals.push_back(ordinal); - } - - return ordinals; - } - SCRIPT_CANVAS_GENERIC_FUNCTION_NODE(FillWithOrdinals, "UnitTesting/Auxiliary", "{D135E6C2-DDAE-494F-B13B-F214D3E0BC20}", "", "Count"); - - using Registrar = RegistrarGeneric - < FillWithOrdinalsNode - > ; - - - } - } -} diff --git a/Gems/ScriptCanvas/Code/scriptcanvasgem_headers.cmake b/Gems/ScriptCanvas/Code/scriptcanvasgem_headers.cmake index 9ccd352929..1c32c743d6 100644 --- a/Gems/ScriptCanvas/Code/scriptcanvasgem_headers.cmake +++ b/Gems/ScriptCanvas/Code/scriptcanvasgem_headers.cmake @@ -298,7 +298,6 @@ set(FILES Include/ScriptCanvas/Libraries/UnitTesting/UnitTesting.h Include/ScriptCanvas/Libraries/UnitTesting/UnitTestingLibrary.h Include/ScriptCanvas/Libraries/UnitTesting/Auxiliary/Auxiliary.h - Include/ScriptCanvas/Libraries/UnitTesting/Auxiliary/AuxiliaryGenerics.h Include/ScriptCanvas/Libraries/UnitTesting/UnitTestBusSender.h Include/ScriptCanvas/Libraries/Operators/Operators.h Include/ScriptCanvas/Libraries/Operators/Operator.h From b571e0c03168e193d66bd165164626d67f4659af Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 6 Jan 2022 15:11:22 -0800 Subject: [PATCH 221/284] Removes AbstractModelTranslator.h from Gems/ScriptCanvas Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Translation/AbstractModelTranslator.h | 34 ------------------- .../Code/scriptcanvasgem_headers.cmake | 1 - 2 files changed, 35 deletions(-) delete mode 100644 Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/AbstractModelTranslator.h diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/AbstractModelTranslator.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/AbstractModelTranslator.h deleted file mode 100644 index dc7c3852d3..0000000000 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/AbstractModelTranslator.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * 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 - -#include - -namespace ScriptCanvas -{ - class Graph; - - namespace Grammar - { - class AbstractCodeModel; - } - - namespace Translation - { - // move the shared functionality here\ - - // avoid virtual calls with a virtual function call - // that defines characters for single line comment - // block comment open/close, etc - // function delcarations, etc - // scope resolution - - } - -} diff --git a/Gems/ScriptCanvas/Code/scriptcanvasgem_headers.cmake b/Gems/ScriptCanvas/Code/scriptcanvasgem_headers.cmake index 1c32c743d6..72c49cb272 100644 --- a/Gems/ScriptCanvas/Code/scriptcanvasgem_headers.cmake +++ b/Gems/ScriptCanvas/Code/scriptcanvasgem_headers.cmake @@ -54,7 +54,6 @@ set(FILES Include/ScriptCanvas/Core/SlotNames.h Include/ScriptCanvas/Core/SubgraphInterface.h Include/ScriptCanvas/Core/SubgraphInterfaceUtility.h - Include/ScriptCanvas/Translation/AbstractModelTranslator.h Include/ScriptCanvas/Translation/Configuration.h Include/ScriptCanvas/Translation/GraphToCPlusPlus.h Include/ScriptCanvas/Translation/GraphToLua.h From d4f45e9ac59c3c0a3d3249b3037fba49c4d4b6b6 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 6 Jan 2022 15:19:58 -0800 Subject: [PATCH 222/284] Removes GraphToCPlusPlus from Gems/ScriptCanvas Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Translation/GraphToCPlusPlus.cpp | 201 ------------------ .../Translation/GraphToCPlusPlus.h | 60 ------ .../ScriptCanvas/Translation/Translation.cpp | 36 ---- .../Code/scriptcanvasgem_common_files.cmake | 1 - .../Code/scriptcanvasgem_headers.cmake | 1 - 5 files changed, 299 deletions(-) delete mode 100644 Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToCPlusPlus.cpp delete mode 100644 Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToCPlusPlus.h diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToCPlusPlus.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToCPlusPlus.cpp deleted file mode 100644 index c6c927ebe8..0000000000 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToCPlusPlus.cpp +++ /dev/null @@ -1,201 +0,0 @@ -/* - * 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 "GraphToCPlusPlus.h" - -#include -#include - -namespace ScriptCanvas -{ - namespace Translation - { - Configuration CreateCPlusPluseConfig() - { - Configuration configuration; - configuration.m_blockCommentClose = "*/"; - configuration.m_blockCommentOpen = "/*"; - configuration.m_namespaceClose = "}"; - configuration.m_namespaceOpen = "{"; - configuration.m_namespaceOpenPrefix = "namespace"; - configuration.m_scopeClose = "}"; - configuration.m_scopeOpen = "{"; - configuration.m_singleLineComment = "//"; - return configuration; - } - - GraphToCPlusPlus::GraphToCPlusPlus(const Grammar::AbstractCodeModel& model) - : GraphToX(CreateCPlusPluseConfig(), model) - { - WriteHeaderDotH(); - WriteHeaderDotCPP(); - - TranslateDependenciesDotH(); - TranslateDependenciesDotCPP(); - - TranslateNamespaceOpen(); - { - TranslateClassOpen(); - { - TranslateVariables(); - TranslateHandlers(); - TranslateConstruction(); - TranslateDestruction(); - TranslateStartNode(); - } - TranslateClassClose(); - } - TranslateNamespaceClose(); - } - - AZ::Outcome> GraphToCPlusPlus::Translate(const Grammar::AbstractCodeModel& model, AZStd::string& dotH, AZStd::string& dotCPP) - { - GraphToCPlusPlus translation(model); - - if (translation.IsSuccessfull()) - { - dotH = AZStd::move(translation.m_dotH.MoveOutput()); - dotCPP = AZStd::move(translation.m_dotCPP.MoveOutput()); - return AZ::Success(); - } - else - { - return AZ::Failure(AZStd::make_pair(AZStd::string(".h errors"), AZStd::string(".cpp errors"))); - } - } - - void GraphToCPlusPlus::TranslateClassClose() - { - m_dotH.Outdent(); - m_dotH.WriteIndent(); - m_dotH.Write("};"); - m_dotH.WriteSpace(); - SingleLineComment(m_dotH); - m_dotH.WriteSpace(); - m_dotH.WriteLine("class %s", GetGraphName().data()); - } - - void GraphToCPlusPlus::TranslateClassOpen() - { - m_dotH.WriteIndent(); - m_dotH.WriteLine("class %s", GetGraphName().data()); - m_dotH.WriteIndent(); - m_dotH.WriteLine("{"); - m_dotH.Indent(); - } - - void GraphToCPlusPlus::TranslateConstruction() - { - - } - - void GraphToCPlusPlus::TranslateDependencies() - { - TranslateDependenciesDotH(); - TranslateDependenciesDotCPP(); - } - - void GraphToCPlusPlus::TranslateDependenciesDotH() - { - - } - - void GraphToCPlusPlus::TranslateDependenciesDotCPP() - { - - } - - void GraphToCPlusPlus::TranslateDestruction() - { - - } - - void GraphToCPlusPlus::TranslateHandlers() - { - - } - - void GraphToCPlusPlus::TranslateNamespaceOpen() - { - OpenNamespace(m_dotH, "ScriptCanvas"); - OpenNamespace(m_dotH, GetAutoNativeNamespace()); - OpenNamespace(m_dotCPP, "ScriptCanvas"); - OpenNamespace(m_dotCPP, GetAutoNativeNamespace()); - } - - void GraphToCPlusPlus::TranslateNamespaceClose() - { - CloseNamespace(m_dotH, "ScriptCanvas"); - CloseNamespace(m_dotH, GetAutoNativeNamespace()); - CloseNamespace(m_dotCPP, "ScriptCanvas"); - CloseNamespace(m_dotCPP, GetAutoNativeNamespace()); - } - - void GraphToCPlusPlus::TranslateStartNode() - { - // write a start function - const Node* startNode = nullptr; - - if (startNode) - { - { // .h - m_dotH.WriteIndent(); - m_dotH.WriteLine("public: static void %s(const RuntimeContext& context);", Grammar::k_OnGraphStartFunctionName); - } - - { // .cpp - m_dotCPP.WriteIndent(); - m_dotCPP.WriteLine("void %s::%s(const RuntimeContext& context)", GetGraphName().data(), Grammar::k_OnGraphStartFunctionName); - OpenScope(m_dotCPP); - { - m_dotCPP.WriteIndent(); - m_dotCPP.WriteLine("AZ_TracePrintf(\"ScriptCanvas\", \"This call wasn't generated from parsing a print node!\");"); - m_dotCPP.WriteLine("LogNotificationBus::Event(context.GetGraphId(), &LogNotifications::LogMessage, \"This call wasn't generated from parsing a print node!\");"); - // get the related function call and call it - // with possible appropriate variables - } - CloseScope(m_dotCPP); - } - } - } - - void GraphToCPlusPlus::TranslateVariables() - { - - } - - void GraphToCPlusPlus::WriteHeader() - { - WriteHeaderDotH(); - WriteHeaderDotCPP(); - } - - void GraphToCPlusPlus::WriteHeaderDotCPP() - { - WriteCopyright(m_dotCPP); - m_dotCPP.WriteNewLine(); - WriteDoNotModify(m_dotCPP); - m_dotCPP.WriteNewLine(); - m_dotCPP.WriteLine("#include \"%s.h\"", GetGraphName().data()); - m_dotCPP.WriteNewLine(); - } - - void GraphToCPlusPlus::WriteHeaderDotH() - { - WriteCopyright(m_dotH); - m_dotH.WriteNewLine(); - m_dotH.WriteLine("#pragma once"); - m_dotH.WriteNewLine(); - WriteDoNotModify(m_dotH); - m_dotH.WriteNewLine(); - m_dotH.WriteLine("#include "); - m_dotH.WriteNewLine(); - } - - } -} diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToCPlusPlus.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToCPlusPlus.h deleted file mode 100644 index f1007f6956..0000000000 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToCPlusPlus.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * 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 - -#include - -#include "TranslationUtilities.h" -#include "GraphToX.h" - -namespace ScriptCanvas -{ - class Graph; - - namespace Grammar - { - class AbstractCodeModel; - } - - namespace Translation - { - class GraphToCPlusPlus - : public GraphToX - { - public: - static AZ::Outcome> Translate(const Grammar::AbstractCodeModel& model, AZStd::string& dotH, AZStd::string& dotCPP); - - AZ_INLINE bool IsSuccessfull() const { return false; } - private: - // cpp only - Writer m_dotH; - Writer m_dotCPP; - - GraphToCPlusPlus(const Grammar::AbstractCodeModel& model); - - void TranslateClassClose(); - void TranslateClassOpen(); - void TranslateConstruction(); - void TranslateDependencies(); - void TranslateDependenciesDotH(); - void TranslateDependenciesDotCPP(); - void TranslateDestruction(); - void TranslateFunctions(); - void TranslateHandlers(); - void TranslateNamespaceOpen(); - void TranslateNamespaceClose(); - void TranslateStartNode(); - void TranslateVariables(); - void WriteHeader(); // Write, not translate, because this should be less dependent on the contents of the graph - void WriteHeaderDotH(); // Write, not translate, because this should be less dependent on the contents of the graph - void WriteHeaderDotCPP(); // Write, not translate, because this should be less dependent on the contents of the graph - }; - } - -} diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/Translation.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/Translation.cpp index 3299bb97b4..db7ea22112 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/Translation.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/Translation.cpp @@ -18,7 +18,6 @@ #include #include -#include #include #include @@ -27,41 +26,6 @@ namespace TranslationCPP using namespace ScriptCanvas; using namespace ScriptCanvas::Translation; - /* - AZ::Outcome, AZStd::pair> ToCPlusPlus(const Grammar::AbstractCodeModel& model, bool rawSave = false) - { - AZStd::string dotH, dotCPP; - auto outcome = GraphToCPlusPlus::Translate(model, dotH, dotCPP); - if (outcome.IsSuccess()) - { -#if defined(SCRIPT_CANVAS_PRINT_FILES_CONSOLE) - AZ_TracePrintf("ScriptCanvas", "\n\n *** .h file ***\n\n"); - AZ_TracePrintf("ScriptCanvas", dotH.data()); - AZ_TracePrintf("ScriptCanvas", "\n\n *** .cpp file *\n\n"); - AZ_TracePrintf("ScriptCanvas", dotCPP.data()); - AZ_TracePrintf("ScriptCanvas", "\n\n"); -#endif - if (rawSave) - { - auto saveOutcome = SaveDotH(model.GetSource(), dotH); - if (saveOutcome.IsSuccess()) - { - saveOutcome = SaveDotCPP(model.GetSource(), dotCPP); - } - if (!saveOutcome.IsSuccess()) - { - AZ_TracePrintf("Save failed %s", saveOutcome.GetError().data()); - } - } - return AZ::Success(AZStd::make_pair(AZStd::move(dotH), AZStd::move(dotCPP))); - } - else - { - return AZ::Failure(outcome.TakeError()); - } - } - */ - AZ::Outcome ToLua(const Grammar::AbstractCodeModel& model, bool rawSave = false) { auto outcome = GraphToLua::Translate(model); diff --git a/Gems/ScriptCanvas/Code/scriptcanvasgem_common_files.cmake b/Gems/ScriptCanvas/Code/scriptcanvasgem_common_files.cmake index 9569422e0f..b765a92f45 100644 --- a/Gems/ScriptCanvas/Code/scriptcanvasgem_common_files.cmake +++ b/Gems/ScriptCanvas/Code/scriptcanvasgem_common_files.cmake @@ -39,7 +39,6 @@ set(FILES Include/ScriptCanvas/Core/SlotMetadata.cpp Include/ScriptCanvas/Core/SubgraphInterface.cpp Include/ScriptCanvas/Core/SubgraphInterfaceUtility.cpp - Include/ScriptCanvas/Translation/GraphToCPlusPlus.cpp Include/ScriptCanvas/Translation/GraphToLua.cpp Include/ScriptCanvas/Translation/GraphToLuaUtility.cpp Include/ScriptCanvas/Translation/GraphToX.cpp diff --git a/Gems/ScriptCanvas/Code/scriptcanvasgem_headers.cmake b/Gems/ScriptCanvas/Code/scriptcanvasgem_headers.cmake index 72c49cb272..0eec37350e 100644 --- a/Gems/ScriptCanvas/Code/scriptcanvasgem_headers.cmake +++ b/Gems/ScriptCanvas/Code/scriptcanvasgem_headers.cmake @@ -55,7 +55,6 @@ set(FILES Include/ScriptCanvas/Core/SubgraphInterface.h Include/ScriptCanvas/Core/SubgraphInterfaceUtility.h Include/ScriptCanvas/Translation/Configuration.h - Include/ScriptCanvas/Translation/GraphToCPlusPlus.h Include/ScriptCanvas/Translation/GraphToLua.h Include/ScriptCanvas/Translation/GraphToLuaUtility.h Include/ScriptCanvas/Translation/GraphToX.h From 4d01cdc59170b5946cd986c34055936b00485161 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 6 Jan 2022 15:27:18 -0800 Subject: [PATCH 223/284] Removes FullyConnectedNodePaletteCreation.h from Gems/ScriptCanvasDeveloper Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../FullyConnectedNodePaletteCreation.h | 19 ------------------- .../ScriptCanvasDeveloperEditorComponent.cpp | 1 - 2 files changed, 20 deletions(-) delete mode 100644 Gems/ScriptCanvasDeveloper/Code/Editor/Include/ScriptCanvasDeveloperEditor/AutomationActions/FullyConnectedNodePaletteCreation.h diff --git a/Gems/ScriptCanvasDeveloper/Code/Editor/Include/ScriptCanvasDeveloperEditor/AutomationActions/FullyConnectedNodePaletteCreation.h b/Gems/ScriptCanvasDeveloper/Code/Editor/Include/ScriptCanvasDeveloperEditor/AutomationActions/FullyConnectedNodePaletteCreation.h deleted file mode 100644 index 42c90bff73..0000000000 --- a/Gems/ScriptCanvasDeveloper/Code/Editor/Include/ScriptCanvasDeveloperEditor/AutomationActions/FullyConnectedNodePaletteCreation.h +++ /dev/null @@ -1,19 +0,0 @@ -/* - * 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 - -class QAction; -class QMenu; - -namespace ScriptCanvasDeveloperEditor -{ - namespace NodePaletteFullCreation - { - QAction* FullyConnectedNodePaletteCreation(QMenu* mainWindow); - }; -} diff --git a/Gems/ScriptCanvasDeveloper/Code/Editor/Source/ScriptCanvasDeveloperEditorComponent.cpp b/Gems/ScriptCanvasDeveloper/Code/Editor/Source/ScriptCanvasDeveloperEditorComponent.cpp index 9193556624..e4fabcc136 100644 --- a/Gems/ScriptCanvasDeveloper/Code/Editor/Source/ScriptCanvasDeveloperEditorComponent.cpp +++ b/Gems/ScriptCanvasDeveloper/Code/Editor/Source/ScriptCanvasDeveloperEditorComponent.cpp @@ -17,7 +17,6 @@ #include #include #include -#include #include #include #include From 991ef84f08212bf84961001336b4cbfb7d60bac3 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 6 Jan 2022 15:32:18 -0800 Subject: [PATCH 224/284] Removes XMLDoc from Gems/ScriptCanvasDeveloper Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Code/Editor/Source/XMLDoc.cpp | 411 ------------------ .../Code/Editor/Source/XMLDoc.h | 50 --- ...riptcanvasdeveloper_gem_editor_files.cmake | 2 - 3 files changed, 463 deletions(-) delete mode 100644 Gems/ScriptCanvasDeveloper/Code/Editor/Source/XMLDoc.cpp delete mode 100644 Gems/ScriptCanvasDeveloper/Code/Editor/Source/XMLDoc.h diff --git a/Gems/ScriptCanvasDeveloper/Code/Editor/Source/XMLDoc.cpp b/Gems/ScriptCanvasDeveloper/Code/Editor/Source/XMLDoc.cpp deleted file mode 100644 index a246bb946e..0000000000 --- a/Gems/ScriptCanvasDeveloper/Code/Editor/Source/XMLDoc.cpp +++ /dev/null @@ -1,411 +0,0 @@ -/* - * 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 "XMLDoc.h" -#include -#include -#include -#include -#include -#include - -namespace ScriptCanvasDeveloperEditor -{ - namespace Internal - { - xml_node<> *FindDocumentTypeNode(const xml_document<> & doc, const AZStd::string & nodeName) - { - // this will only work if the xml document was parsed with the flag "parse_doctype_node" - - for(xml_node<> *docTypeNode=doc.first_node(); docTypeNode!=nullptr; docTypeNode=docTypeNode->next_sibling()) - { - if (docTypeNode->type() == node_type::node_doctype) - { - if ( nodeName == docTypeNode->value() ) - { - return docTypeNode; - } - } - } - - return nullptr; - } - - bool GetAttribute(xml_node<> *tsNode, AZStd::string_view attribName, float & value) - { - if( tsNode != nullptr) - { - for (xml_attribute<> *attrib = tsNode->first_attribute(); attrib != nullptr; attrib = attrib->next_attribute()) - { - if ( attribName == attrib->name() ) - { - value = AzFramework::StringFunc::ToFloat( attrib->value() ); - return true; - } - } - } - - return false; - } - - bool GetAttribute(xml_node<> *tsNode, AZStd::string_view attribName, AZStd::string & value) - { - if( tsNode != nullptr) - { - for (xml_attribute<> *attrib = tsNode->first_attribute(); attrib != nullptr; attrib = attrib->next_attribute()) - { - if (attribName == attrib->name()) - { - value = attrib->value(); - return true; - } - } - } - - return false; - } - - xml_node<> *FindContextNode(const xml_document<> & doc, const AZStd::string & contextName) - { - xml_node<> *tsNode = doc.first_node("TS"); - - if (tsNode != nullptr) - { - for(xml_node<> *contextNode=tsNode->first_node("context"); contextNode!=nullptr; contextNode=contextNode->next_sibling("context") ) - { - xml_node<> *contextNameNode = contextNode->first_node("name"); - - if (contextNameNode != nullptr) - { - if( contextName == contextNameNode->value() ) - { - return contextNode; - } - } - } - } - - return nullptr; - } - } - - XMLDocPtr XMLDoc::Alloc(const AZStd::string& contextName) - { - XMLDocPtr xmlDoc( AZStd::make_shared() ); - - xmlDoc->CreateTSDoc(contextName); - - return xmlDoc; - } - - XMLDocPtr XMLDoc::LoadFromDisk(const AZStd::string& fileName) - { - XMLDocPtr xmlDoc(AZStd::make_shared()); - - if ( !xmlDoc->LoadTSDoc(fileName) ) - { - xmlDoc = nullptr; - } - - return xmlDoc; - } - - XMLDoc::XMLDoc() - : m_tsNode(nullptr) - , m_context(nullptr) - , m_readBuffer(0) - { - } - - void XMLDoc::CreateTSDoc(const AZStd::string& contextName) - { - xml_node<>* decl = m_doc.allocate_node(node_declaration); - decl->append_attribute(m_doc.allocate_attribute("version", "1.0")); - decl->append_attribute(m_doc.allocate_attribute("encoding", "utf-8")); - m_doc.append_node(decl); - - xml_node<>* commentNode = m_doc.allocate_node(node_comment, "", AllocString(AZStd::string::format("Generated for %s", contextName.c_str()))); - m_doc.append_node(commentNode); - - xml_node<>* docType = m_doc.allocate_node(node_doctype, "", "TS"); - m_doc.append_node(docType); - - m_tsNode = m_doc.allocate_node(node_element, "TS"); - m_doc.append_node(m_tsNode); - m_tsNode->append_attribute(m_doc.allocate_attribute("version", "2.1")); - m_tsNode->append_attribute(m_doc.allocate_attribute("language", "en_US")); - } - - bool XMLDoc::LoadTSDoc(const AZStd::string& fileName) - { - bool success = false; - - char tsFilePath[AZ::IO::MaxPathLength] = { "" }; - - if (AZ::IO::FileIOBase::GetInstance()->ResolvePath(fileName.c_str(), tsFilePath, AZ::IO::MaxPathLength)) - { - AZ::IO::FileIOStream xmlFile; - - if( AZ::IO::FileIOBase::GetInstance()->Exists(tsFilePath) ) - { - if ( xmlFile.Open(tsFilePath, AZ::IO::OpenMode::ModeRead|AZ::IO::OpenMode::ModeText) ) - { - AZ::IO::SizeType bytesToRead = xmlFile.GetLength(); - - if( bytesToRead > 0 ) - { - m_readBuffer.resize(bytesToRead, '\0'); - if( xmlFile.Read(bytesToRead, m_readBuffer.data() ) == bytesToRead ) - { - m_doc.parse( m_readBuffer.data() ); - - success = IsValidTSDoc(); - - if (success) - { - AZ_TracePrintf("ScriptCanvas", "Loaded \"%s\"", tsFilePath); - } - } - else - { - AZ_Error("ScriptCanvas", false, "XMLDoc::LoadTSDoc-Error reading Qt .ts file! filename=\"%s\".", tsFilePath); - } - } - else - { - AZ_Error("ScriptCanvas", false, "XMLDoc::LoadTSDoc-Zero byte Qt .ts file! filename=\"%s\".", tsFilePath); - } - } - else - { - AZ_Error("ScriptCanvas", false, "XMLDoc::LoadTSDoc-Can't open file Qt .ts file! filename=\"%s\".", tsFilePath); - } - } - } - else - { - AZ_Error("ScriptCanvas", false, "XMLDoc::LoadTSDoc-Invalid filename specified! filename=\"%s\".", tsFilePath); - } - - return success; - } - - bool XMLDoc::WriteToDisk(const AZStd::string & fileName) - { - bool success = false; - - char tsFilePath[AZ::IO::MaxPathLength] = { "" }; - if (AZ::IO::FileIOBase::GetInstance()->ResolvePath(fileName.c_str(), tsFilePath, AZ::IO::MaxPathLength)) - { - AZStd::string writeFolder(tsFilePath); - AzFramework::StringFunc::Path::StripFullName(writeFolder); - - if (!AZ::IO::FileIOBase::GetInstance()->IsDirectory(writeFolder.c_str())) - { - AZ::IO::FileIOBase::GetInstance()->CreatePath(writeFolder.c_str()); - } - - AZ::IO::FileIOStream xmlFile; - - if (xmlFile.Open(tsFilePath, AZ::IO::OpenMode::ModeWrite | AZ::IO::OpenMode::ModeText)) - { - AZStd::string xmlData(ToString()); - AZ::IO::SizeType bytesWritten = xmlFile.Write(xmlData.size(), xmlData.data()); - - if (bytesWritten != xmlData.size()) - { - AZ_Error("ScriptCanvas", false, "Write error writing out %s, bytes actually written: %llu expected bytes to write: %llu!", tsFilePath, bytesWritten, xmlData.size()); - } - else - { - AZ_TracePrintf("ScriptCanvas", "Successfully wrote out ScriptCanvas localization file \"%s\".", tsFilePath); - success = true; - } - - xmlFile.Close(); - } - else - { - AZ_Error("ScriptCanvas", false, "Could not open file \"%s\"!", tsFilePath); - } - } - else - { - AZ_Error("ScriptCanvas", false, "Invalid filename specified XMLDoc::WriteToDisk! filename=\"%s\".", tsFilePath); - } - - return success; - } - - - bool XMLDoc::StartContext(const AZStd::string& contextName) - { - bool isNew = false; - - if( !contextName.empty() ) - { - // check to see if we have a context of this name already, if so find that node and use it, otherwise - // create a new one. - - xml_node<> *existingContextNode = Internal::FindContextNode(m_doc, contextName); - - if (existingContextNode == nullptr) - { - m_context = m_doc.allocate_node(node_element, "context"); - m_tsNode->append_node(m_context); - - xml_node<>* contextNameNode = m_doc.allocate_node(node_element, "name", AllocString(contextName)); - m_context->append_node(contextNameNode); - - isNew = true; - } - else - { - m_context = existingContextNode; - } - } - else - { - m_context = nullptr; - } - - return isNew; - } - - void XMLDoc::AddToContext(const AZStd::string& id, const AZStd::string& translation/*=""*/, const AZStd::string& comment /*=""*/, const AZStd::string& source/*=""*/) - { - if (m_context == nullptr) - { - return; - } - - xml_node<>* messageNode = m_doc.allocate_node(node_element, "message"); - - messageNode->append_attribute(m_doc.allocate_attribute("id", AllocString(id))); - - xml_node<>* sourceNode = m_doc.allocate_node(node_element, "source", AllocString(source.empty() ? id.c_str() : source.c_str())); - messageNode->append_node(sourceNode); - - xml_node<>* translationNode = m_doc.allocate_node(node_element, "translation", AllocString(translation)); - messageNode->append_node(translationNode); - - xml_node<>* commentNode = m_doc.allocate_node(node_element, "comment", AllocString(comment)); - messageNode->append_node(commentNode); - - m_context->append_node(messageNode); - } - - bool XMLDoc::MethodFamilyExists(const AZStd::string& baseId) const - { - if (m_tsNode != nullptr) - { - AZStd::string nameID(baseId + "_NAME"); - - for (xml_node<> *contextNode=m_tsNode->first_node("context"); contextNode!=nullptr; contextNode=contextNode->next_sibling("context")) - { - for (xml_node<> *messageNode = contextNode->first_node("message"); messageNode != nullptr; messageNode = messageNode->next_sibling("message")) - { - AZStd::string id; - - if ( Internal::GetAttribute(messageNode, "id", id) ) - { - if (id == nameID) - { - return true; - } - } - } - } - } - - return false; - } - - AZStd::string XMLDoc::ToString() const - { - AZStd::string buffer; - - print( AZStd::back_inserter(buffer), m_doc, 0); - - return buffer; - } - - const char *XMLDoc::AllocString(const AZStd::string& str) - { - return m_doc.allocate_string( str.c_str(), str.size() + 1 ); - } - - bool XMLDoc::IsValidTSDoc() - { - bool isTSDoc = false; - // - // Basic format of a .ts file, we are checking to make sure the document type is ts, and the version is 2.1 or greater - // and there is a non-null language attribute. and at least 1 context section - // - // - // - // - // - // ... - // - // - // - - // this node should be the doc type - - xml_node<> *docTypeNode = Internal::FindDocumentTypeNode(m_doc, "TS"); - - if (docTypeNode !=nullptr) - { - xml_node<> *tsNode = m_doc.first_node("TS"); - - if( tsNode != nullptr) - { - float attribVersion = 0.0f; - if( Internal::GetAttribute(tsNode, "version", attribVersion) && (attribVersion >= 2.1f) ) - { - AZStd::string attribLanguage; - if( Internal::GetAttribute(tsNode, "language", attribLanguage) && !attribLanguage.empty() ) - { - xml_node<> *contextNode = tsNode->first_node("context"); - if(contextNode != nullptr) - { - m_tsNode = tsNode; - - AZ_TracePrintf("ScriptCanvas", "TS: Version=%2.1f, Language=\"%s\"", attribVersion, attribLanguage.c_str()); - isTSDoc = true; - } - else - { - AZ_Warning("ScriptCanvas", false, "TS document contains no \"context\" nodes!"); - } - } - else - { - AZ_Warning("ScriptCanvas", false, "TS document has a bad or missing \"language\" attribute!"); - } - } - else - { - AZ_Warning("ScriptCanvas", false, "TS document has a bad or missing \"version\" attribute!"); - } - } - else - { - AZ_Error("ScriptCanvas", false, "TS document contains no \"TS\" node!"); - } - } - else - { - AZ_Error("ScriptCanvas", false, "XML doc is not a valid TS document!"); - } - - return isTSDoc; - } -} diff --git a/Gems/ScriptCanvasDeveloper/Code/Editor/Source/XMLDoc.h b/Gems/ScriptCanvasDeveloper/Code/Editor/Source/XMLDoc.h deleted file mode 100644 index be98e1bab0..0000000000 --- a/Gems/ScriptCanvasDeveloper/Code/Editor/Source/XMLDoc.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * 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 - -#include -#include -#include -#include - -using namespace AZ::rapidxml; - -namespace ScriptCanvasDeveloperEditor -{ - class XMLDoc; - using XMLDocPtr = AZStd::shared_ptr; - - class XMLDoc - { - public: - static XMLDocPtr Alloc(const AZStd::string& contextName); - static XMLDocPtr LoadFromDisk(const AZStd::string& fileName); - - XMLDoc(); - virtual ~XMLDoc() {} - - bool WriteToDisk(const AZStd::string & filename); - bool StartContext(const AZStd::string& contextName); - void AddToContext(const AZStd::string& id, const AZStd::string& translation = "", const AZStd::string& comment = "", const AZStd::string& source = ""); - bool MethodFamilyExists(const AZStd::string& familyName) const; - AZStd::string ToString() const; - - private: - void CreateTSDoc(const AZStd::string& contextName); - bool LoadTSDoc(const AZStd::string& contextName); - bool IsValidTSDoc(); - const char *AllocString(const AZStd::string& str); - - private: - xml_document<> m_doc; - xml_node<> * m_tsNode; - xml_node<> * m_context; - AZStd::vector m_readBuffer; - }; -} diff --git a/Gems/ScriptCanvasDeveloper/Code/scriptcanvasdeveloper_gem_editor_files.cmake b/Gems/ScriptCanvasDeveloper/Code/scriptcanvasdeveloper_gem_editor_files.cmake index 1d34b5484a..c73b9919cd 100644 --- a/Gems/ScriptCanvasDeveloper/Code/scriptcanvasdeveloper_gem_editor_files.cmake +++ b/Gems/ScriptCanvasDeveloper/Code/scriptcanvasdeveloper_gem_editor_files.cmake @@ -53,8 +53,6 @@ set(FILES Editor/Source/NodeListDumpAction.cpp Editor/Source/TSGenerateAction.cpp Editor/Source/WrapperMock.cpp - Editor/Source/XMLDoc.cpp - Editor/Source/XMLDoc.h # AutomationActions Editor/Source/AutomationActions/DynamicSlotFullCreation.cpp From af2745afb8d96ac50667c8f92134530faf094e9a Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 6 Jan 2022 15:34:10 -0800 Subject: [PATCH 225/284] Removes FullyConnectedNodePaletteCreation.cpp from Gems/ScriptCanvasDeveloper Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../FullyConnectedNodePaletteCreation.cpp | 242 ------------------ 1 file changed, 242 deletions(-) delete mode 100644 Gems/ScriptCanvasDeveloper/Code/Editor/Source/AutomationActions/FullyConnectedNodePaletteCreation.cpp diff --git a/Gems/ScriptCanvasDeveloper/Code/Editor/Source/AutomationActions/FullyConnectedNodePaletteCreation.cpp b/Gems/ScriptCanvasDeveloper/Code/Editor/Source/AutomationActions/FullyConnectedNodePaletteCreation.cpp deleted file mode 100644 index 95075c8ea1..0000000000 --- a/Gems/ScriptCanvasDeveloper/Code/Editor/Source/AutomationActions/FullyConnectedNodePaletteCreation.cpp +++ /dev/null @@ -1,242 +0,0 @@ -/* - * 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 - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include -#include - -namespace ScriptCanvasDeveloperEditor -{ - namespace NodePaletteFullCreation - { - class CreateFullyConnectedNodePaletteInterface - : public ProcessNodePaletteInterface - { - public: - - CreateFullyConnectedNodePaletteInterface(DeveloperUtils::ConnectionStyle connectionStyle, bool skipHandlers = false) - { - m_chainConfig.m_connectionStyle = connectionStyle; - m_chainConfig.m_skipHandlers = skipHandlers; - } - - void SetupInterface(const AZ::EntityId& activeGraphCanvasGraphId, const ScriptCanvas::ScriptCanvasId& scriptCanvasId) - { - m_graphCanvasGraphId = activeGraphCanvasGraphId; - m_scriptCanvasId = scriptCanvasId; - - GraphCanvas::SceneRequestBus::EventResult(m_viewId, activeGraphCanvasGraphId, &GraphCanvas::SceneRequests::GetViewId); - GraphCanvas::SceneRequestBus::EventResult(m_gridId, activeGraphCanvasGraphId, &GraphCanvas::SceneRequests::GetGrid); - - GraphCanvas::GridRequestBus::EventResult(m_minorPitch, m_gridId, &GraphCanvas::GridRequests::GetMinorPitch); - - QGraphicsScene* graphicsScene = nullptr; - GraphCanvas::SceneRequestBus::EventResult(graphicsScene, activeGraphCanvasGraphId, &GraphCanvas::SceneRequests::AsQGraphicsScene); - - if (graphicsScene) - { - QRectF sceneArea = graphicsScene->sceneRect(); - sceneArea.adjust(m_minorPitch.GetX(), m_minorPitch.GetY(), -m_minorPitch.GetX(), -m_minorPitch.GetY()); - GraphCanvas::ViewRequestBus::Event(m_viewId, &GraphCanvas::ViewRequests::CenterOnArea, sceneArea); - QApplication::processEvents(); - } - - GraphCanvas::ViewRequestBus::EventResult(m_nodeCreationPos, m_viewId, &GraphCanvas::ViewRequests::GetViewSceneCenter); - - GraphCanvas::GraphCanvasGraphicsView* graphicsView = nullptr; - GraphCanvas::ViewRequestBus::EventResult(graphicsView, m_viewId, &GraphCanvas::ViewRequests::AsGraphicsView); - - m_viewportRectangle = graphicsView->mapToScene(graphicsView->viewport()->geometry()).boundingRect(); - - // Temporary work around until the extra automation tools can be merged over that have better ways of doing this. - const GraphCanvas::GraphCanvasTreeItem* treeItem = nullptr; - ScriptCanvasEditor::AutomationRequestBus::BroadcastResult(treeItem, &ScriptCanvasEditor::AutomationRequests::GetNodePaletteRoot); - - const GraphCanvas::NodePaletteTreeItem* onGraphStartItem = nullptr; - - if (treeItem) - { - AZStd::unordered_set< const GraphCanvas::GraphCanvasTreeItem* > unexploredSet = { treeItem }; - - while (!unexploredSet.empty()) - { - const GraphCanvas::GraphCanvasTreeItem* treeItem = (*unexploredSet.begin()); - unexploredSet.erase(unexploredSet.begin()); - - const GraphCanvas::NodePaletteTreeItem* nodePaletteTreeItem = azrtti_cast(treeItem); - - if (nodePaletteTreeItem && nodePaletteTreeItem->GetName().compare("On Graph Start") == 0) - { - onGraphStartItem = nodePaletteTreeItem; - break; - } - - for (int i = 0; i < treeItem->GetChildCount(); ++i) - { - const GraphCanvas::GraphCanvasTreeItem* childItem = treeItem->FindChildByRow(i); - - if (childItem) - { - unexploredSet.insert(childItem); - } - } - } - } - - if (onGraphStartItem) - { - ProcessItem(onGraphStartItem); - } - } - - int m_counter = 60; - - bool ShouldProcessItem(const GraphCanvas::NodePaletteTreeItem* nodePaletteTreeItem) const - { - return m_counter > 0; - } - - void ProcessItem(const GraphCanvas::NodePaletteTreeItem* nodePaletteTreeItem) - { - GraphCanvas::GraphCanvasMimeEvent* mimeEvent = nodePaletteTreeItem->CreateMimeEvent(); - - if (ScriptCanvasEditor::MultiCreateNodeMimeEvent* multiCreateMimeEvent = azrtti_cast(mimeEvent)) - { - --m_counter; - AZStd::vector< GraphCanvas::GraphCanvasMimeEvent* > mimeEvents = multiCreateMimeEvent->CreateMimeEvents(); - - for (GraphCanvas::GraphCanvasMimeEvent* currentEvent : mimeEvents) - { - ScriptCanvasEditor::NodeIdPair createdPair = DeveloperUtils::HandleMimeEvent(currentEvent, m_graphCanvasGraphId, m_viewportRectangle, m_widthOffset, m_heightOffset, m_maxRowHeight, m_minorPitch); - delete currentEvent; - - if (DeveloperUtils::CreateConnectedChain(createdPair, m_chainConfig)) - { - m_createdNodes.emplace_back(createdPair); - } - else - { - m_nodesToDelete.insert(GraphCanvas::GraphUtils::FindOutermostNode(createdPair.m_graphCanvasId)); - } - } - } - else if (mimeEvent) - { - --m_counter; - ScriptCanvasEditor::NodeIdPair createdPair = DeveloperUtils::HandleMimeEvent(mimeEvent, m_graphCanvasGraphId, m_viewportRectangle, m_widthOffset, m_heightOffset, m_maxRowHeight, m_minorPitch); - - if (DeveloperUtils::CreateConnectedChain(createdPair, m_chainConfig)) - { - m_createdNodes.emplace_back(createdPair); - } - else - { - m_nodesToDelete.insert(GraphCanvas::GraphUtils::FindOutermostNode(createdPair.m_graphCanvasId)); - } - } - - delete mimeEvent; - } - - private: - - void OnProcessingComplete() override - { - GraphCanvas::SceneRequestBus::Event(m_graphCanvasGraphId, &GraphCanvas::SceneRequests::Delete, m_nodesToDelete); - } - - DeveloperUtils::CreateConnectedChainConfig m_chainConfig; - - AZStd::vector m_createdNodes; - AZStd::unordered_set m_nodesToDelete; - - AZ::EntityId m_graphCanvasGraphId; - ScriptCanvas::ScriptCanvasId m_scriptCanvasId; - - AZ::Vector2 m_nodeCreationPos = AZ::Vector2::CreateZero(); - - AZ::EntityId m_viewId; - AZ::EntityId m_gridId; - - AZ::Vector2 m_minorPitch = AZ::Vector2::CreateZero(); - - QRectF m_viewportRectangle; - - int m_widthOffset = 0; - int m_heightOffset = 0; - - int m_maxRowHeight = 0; - }; - - void CreateSingleExecutionConnectedNodePaletteAction() - { - ScriptCanvasEditor::AutomationRequestBus::Broadcast(&ScriptCanvasEditor::AutomationRequests::SignalAutomationBegin); - - CreateFullyConnectedNodePaletteInterface nodePaletteInterface(DeveloperUtils::ConnectionStyle::SingleExecutionConnection); - DeveloperUtils::ProcessNodePalette(nodePaletteInterface); - - ScriptCanvasEditor::AutomationRequestBus::Broadcast(&ScriptCanvasEditor::AutomationRequests::SignalAutomationEnd); - } - - void CreateSingleExecutionConnectedNodePaletteExcludeHandlersAction() - { - ScriptCanvasEditor::AutomationRequestBus::Broadcast(&ScriptCanvasEditor::AutomationRequests::SignalAutomationBegin); - - CreateFullyConnectedNodePaletteInterface nodePaletteInterface(DeveloperUtils::ConnectionStyle::SingleExecutionConnection, true); - DeveloperUtils::ProcessNodePalette(nodePaletteInterface); - - ScriptCanvasEditor::AutomationRequestBus::Broadcast(&ScriptCanvasEditor::AutomationRequests::SignalAutomationEnd); - } - - QAction* FullyConnectedNodePaletteCreation(QMenu* mainMenu) - { - QAction* createNodePaletteAction = nullptr; - - if (mainMenu) - { - { - createNodePaletteAction = mainMenu->addAction(QAction::tr("Create Execution Connected Node Palette")); - createNodePaletteAction->setAutoRepeat(false); - createNodePaletteAction->setToolTip("Tries to create every node in the node palette and will attempt to create an execution path through them."); - - QObject::connect(createNodePaletteAction, &QAction::triggered, &CreateSingleExecutionConnectedNodePaletteAction); - } - - { - createNodePaletteAction = mainMenu->addAction(QAction::tr("Create Execution Connected Node Palette sans Handlers")); - createNodePaletteAction->setAutoRepeat(false); - createNodePaletteAction->setToolTip("Tries to create every node in the node palette(except EBus Handlers) and attempt to create an execution path through them.."); - - QObject::connect(createNodePaletteAction, &QAction::triggered, &CreateSingleExecutionConnectedNodePaletteExcludeHandlersAction); - } - - - } - - return createNodePaletteAction; - } - } -} From 5b2ea01a8382f094aea681b2ebde34a04e68a58b Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 6 Jan 2022 15:35:02 -0800 Subject: [PATCH 226/284] Removes ScriptCanvas_Regressions.cpp from Gems/ScriptCanvasTesting Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Code/Tests/ScriptCanvas_Regressions.cpp | 13 ------------- .../scriptcanvastestingeditor_tests_files.cmake | 1 - 2 files changed, 14 deletions(-) delete mode 100644 Gems/ScriptCanvasTesting/Code/Tests/ScriptCanvas_Regressions.cpp diff --git a/Gems/ScriptCanvasTesting/Code/Tests/ScriptCanvas_Regressions.cpp b/Gems/ScriptCanvasTesting/Code/Tests/ScriptCanvas_Regressions.cpp deleted file mode 100644 index 72ec6067b1..0000000000 --- a/Gems/ScriptCanvasTesting/Code/Tests/ScriptCanvas_Regressions.cpp +++ /dev/null @@ -1,13 +0,0 @@ -/* - * 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 - -using namespace ScriptCanvasTests; - diff --git a/Gems/ScriptCanvasTesting/Code/scriptcanvastestingeditor_tests_files.cmake b/Gems/ScriptCanvasTesting/Code/scriptcanvastestingeditor_tests_files.cmake index 87d65aa7b4..e2e86ca551 100644 --- a/Gems/ScriptCanvasTesting/Code/scriptcanvastestingeditor_tests_files.cmake +++ b/Gems/ScriptCanvasTesting/Code/scriptcanvastestingeditor_tests_files.cmake @@ -23,7 +23,6 @@ set(FILES Tests/ScriptCanvas_Math.cpp Tests/ScriptCanvas_MethodOverload.cpp Tests/ScriptCanvas_NodeGenerics.cpp - Tests/ScriptCanvas_Regressions.cpp Tests/ScriptCanvas_RuntimeInterpreted.cpp Tests/ScriptCanvas_Slots.cpp Tests/ScriptCanvas_StringNodes.cpp From 91e404567df1407d4e603270596f1f3205c59fe7 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 6 Jan 2022 15:36:35 -0800 Subject: [PATCH 227/284] Removes UnitTestingReporter from Gems/ScriptCanvasTesting Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Source/Framework/UnitTestingReporter.cpp | 253 ------------------ .../Source/Framework/UnitTestingReporter.h | 105 -------- 2 files changed, 358 deletions(-) delete mode 100644 Gems/ScriptCanvasTesting/Code/Source/Framework/UnitTestingReporter.cpp delete mode 100644 Gems/ScriptCanvasTesting/Code/Source/Framework/UnitTestingReporter.h diff --git a/Gems/ScriptCanvasTesting/Code/Source/Framework/UnitTestingReporter.cpp b/Gems/ScriptCanvasTesting/Code/Source/Framework/UnitTestingReporter.cpp deleted file mode 100644 index 7041b2de32..0000000000 --- a/Gems/ScriptCanvasTesting/Code/Source/Framework/UnitTestingReporter.cpp +++ /dev/null @@ -1,253 +0,0 @@ -/* - * 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 "UnitTestingReporter.h" - -#include -#include - -#define SCRIPT_CANVAS_UNIT_TEST_REPORTER_EXPECT_EQ(LHS, RHS)\ - EXPECT_EQ(LHS, RHS) << report.data(); - -#define SCRIPT_CANVAS_UNIT_TEST_REPORTER_EXPECT_NE(LHS, RHS)\ - EXPECT_NE(LHS, RHS) << report.data(); - -#define SCRIPT_CANVAS_UNIT_TEST_REPORTER_EXPECT_GT(LHS, RHS)\ - EXPECT_GT(LHS, RHS) << report.data(); - -#define SCRIPT_CANVAS_UNIT_TEST_REPORTER_EXPECT_GE(LHS, RHS)\ - EXPECT_GE(LHS, RHS) << report.data(); - -#define SCRIPT_CANVAS_UNIT_TEST_REPORTER_EXPECT_LT(LHS, RHS)\ - EXPECT_LT(LHS, RHS) << report.data(); - -#define SCRIPT_CANVAS_UNIT_TEST_REPORTER_EXPECT_LE(LHS, RHS)\ - EXPECT_LE(LHS, RHS) << report.data(); - -namespace ScriptCanvas -{ - namespace UnitTesting - { - Reporter::Reporter() - : m_graphId{} - , m_entityId{} - {} - - Reporter::Reporter(const RuntimeComponent& graph) - { - SetGraph(graph); - } - - Reporter::~Reporter() - { - Reset(); - } - - void Reporter::Checkpoint(const Report& report) - { - if (m_isReportFinished) - return; - - m_checkpoints.push_back(report); - } - - const AZStd::vector& Reporter::GetCheckpoints() const - { - AZ_Assert(m_isReportFinished, "the report must be finished before evaluation"); - return m_checkpoints; - } - - const AZStd::vector& Reporter::GetFailure() const - { - AZ_Assert(m_isReportFinished, "the report must be finished before evaluation"); - return m_failures; - } - - const AZ::EntityId& Reporter::GetGraphId() const - { - return m_graphId; - } - - const AZStd::vector& Reporter::GetSuccess() const - { - AZ_Assert(m_isReportFinished, "the report must be finished before evaluation"); - return m_successes; - } - - bool Reporter::IsActivated() const - { - return m_graphIsActivated; - } - - bool Reporter::IsComplete() const - { - AZ_Assert(m_isReportFinished, "the report must be finished before evaluation"); - return m_graphIsComplete; - } - - bool Reporter::IsDeactivated() const - { - AZ_Assert(m_isReportFinished, "the report must be finished before evaluation"); - return m_graphIsDeactivated; - } - - bool Reporter::IsErrorFree() const - { - AZ_Assert(m_isReportFinished, "the report must be finished before evaluation"); - return m_graphIsErrorFree; - } - - bool Reporter::IsReportFinished() const - { - return m_isReportFinished; - } - - void Reporter::FinishReport() - { - AZ_Assert(!m_isReportFinished, "the report is already finished"); - m_isReportFinished = true; - } - - void Reporter::FinishReport(const RuntimeComponent& graph) - { - AZ_Assert(!m_isReportFinished, "the report is already finished"); - Bus::Handler::BusDisconnect(m_graphId); - AZ::EntityBus::Handler::BusDisconnect(m_entityId); - m_graphIsErrorFree = !graph.IsInErrorState(); - m_isReportFinished = true; - } - - bool Reporter::operator==(const Reporter& other) const - { - AZ_Assert(m_isReportFinished, "the report must be finished before evaluation"); - return m_graphIsActivated == other.m_graphIsActivated - && m_graphIsDeactivated == other.m_graphIsDeactivated - && m_graphIsComplete == other.m_graphIsComplete - && m_graphIsErrorFree == other.m_graphIsErrorFree - && m_isReportFinished == other.m_isReportFinished - && m_failures == other.m_failures - && m_successes == other.m_successes; - } - - void Reporter::OnEntityActivated(const AZ::EntityId& entity) - { - AZ_Assert(m_entityId == entity, "this reporter is listening to the wrong entity"); - if (m_isReportFinished) - return; - - m_graphIsActivated = true; - } - - void Reporter::OnEntityDeactivated(const AZ::EntityId& entity) - { - AZ_Assert(m_entityId == entity, "this reporter is listening to the wrong entity"); - if (m_isReportFinished) - return; - - m_graphIsDeactivated = true; - } - - void Reporter::Reset() - { - if (m_graphId.IsValid()) - { - Bus::Handler::BusDisconnect(); - } - - if (m_entityId.IsValid()) - { - AZ::EntityBus::Handler::BusDisconnect(); - } - - m_graphIsActivated = false; - m_graphIsComplete = false; - m_graphIsErrorFree = false; - m_isReportFinished = false; - m_graphId = AZ::EntityId{}; - m_failures.clear(); - m_failures.clear(); - } - - void Reporter::SetGraph(const RuntimeComponent& graph) - { - Reset(); - m_graphId = graph.GetUniqueId(); - m_entityId = graph.GetEntityId(); - Bus::Handler::BusConnect(m_graphId); - AZ::EntityBus::Handler::BusConnect(m_entityId); - } - - // Handler - void Reporter::MarkComplete(const Report& report) - { - if (m_isReportFinished) - return; - - if (m_graphIsComplete) - { - AddFailure(AZStd::string::format("MarkComplete was called twice. %s", report.data())); - } - else - { - m_graphIsComplete = true; - } - } - - void Reporter::AddFailure(const Report& report) - { - if (m_isReportFinished) - return; - - m_failures.push_back(report); - Checkpoint(AZStd::string::format("AddFailure: %s", report.data())); - } - - void Reporter::AddSuccess(const Report& report) - { - if (m_isReportFinished) - return; - - m_successes.push_back(report); - Checkpoint(AZStd::string::format("AddSuccess: %s", report.data())); - } - - void Reporter::ExpectFalse(const bool value, const Report& report) - { - EXPECT_FALSE(value) << report.data(); - Checkpoint(AZStd::string::format("ExpectFalse: %s", report.data())); - } - - void Reporter::ExpectTrue(const bool value, const Report& report) - { - EXPECT_TRUE(value) << report.data(); - Checkpoint(AZStd::string::format("ExpectTrue: %s", report.data())); - } - - void Reporter::ExpectEqualNumber(const Data::NumberType lhs, const Data::NumberType rhs, const Report& report) - { - EXPECT_NEAR(lhs, rhs, 0.001) << report.data(); - Checkpoint(AZStd::string::format("ExpectEqualNumber: %s", report.data())); - } - - void Reporter::ExpectNotEqualNumber(const Data::NumberType lhs, const Data::NumberType rhs, const Report& report) - { - EXPECT_NE(lhs, rhs) << report.data(); - Checkpoint(AZStd::string::format("ExpectNotEqualNumber: %s", report.data())); - } - - SCRIPT_CANVAS_UNIT_TEST_EQUALITY_OVERLOAD_IMPLEMENTATIONS(Reporter, ExpectEqual, SCRIPT_CANVAS_UNIT_TEST_REPORTER_EXPECT_EQ) - SCRIPT_CANVAS_UNIT_TEST_EQUALITY_OVERLOAD_IMPLEMENTATIONS(Reporter, ExpectNotEqual, SCRIPT_CANVAS_UNIT_TEST_REPORTER_EXPECT_NE) - SCRIPT_CANVAS_UNIT_TEST_COMPARE_OVERLOAD_IMPLEMENTATIONS(Reporter, ExpectGreaterThan, SCRIPT_CANVAS_UNIT_TEST_REPORTER_EXPECT_GT) - SCRIPT_CANVAS_UNIT_TEST_COMPARE_OVERLOAD_IMPLEMENTATIONS(Reporter, ExpectGreaterThanEqual, SCRIPT_CANVAS_UNIT_TEST_REPORTER_EXPECT_GE) - SCRIPT_CANVAS_UNIT_TEST_COMPARE_OVERLOAD_IMPLEMENTATIONS(Reporter, ExpectLessThan, SCRIPT_CANVAS_UNIT_TEST_REPORTER_EXPECT_LT) - SCRIPT_CANVAS_UNIT_TEST_COMPARE_OVERLOAD_IMPLEMENTATIONS(Reporter, ExpectLessThanEqual, SCRIPT_CANVAS_UNIT_TEST_REPORTER_EXPECT_LE) - - } // namespace UnitTesting - -} // namespace ScriptCanvas diff --git a/Gems/ScriptCanvasTesting/Code/Source/Framework/UnitTestingReporter.h b/Gems/ScriptCanvasTesting/Code/Source/Framework/UnitTestingReporter.h deleted file mode 100644 index 27c91d9ccc..0000000000 --- a/Gems/ScriptCanvasTesting/Code/Source/Framework/UnitTestingReporter.h +++ /dev/null @@ -1,105 +0,0 @@ -/* - * 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 - -#include -#include -#include -#include -#include - -namespace ScriptCanvas -{ - class RuntimeComponent; - - namespace UnitTesting - { - class Reporter - : public Bus::Handler - , public AZ::EntityBus::Handler - { - public: - Reporter(); - Reporter(const RuntimeComponent& graph); - ~Reporter(); - - void FinishReport(); - - void FinishReport(const RuntimeComponent& graph); - - const AZStd::vector& GetCheckpoints() const; - - const AZStd::vector& GetFailure() const; - - const AZ::EntityId& GetGraphId() const; - - const AZStd::vector& GetSuccess() const; - - bool IsActivated() const; - - bool IsComplete() const; - - bool IsDeactivated() const; - - bool IsErrorFree() const; - - bool IsReportFinished() const; - - bool operator==(const Reporter& other) const; - - void Reset(); - - void SetGraph(const RuntimeComponent& graph); - - // Bus::Handler - - void AddFailure(const Report& report) override; - - void AddSuccess(const Report& report) override; - - void Checkpoint(const Report& report) override; - - void ExpectFalse(const bool value, const Report& report) override; - - void ExpectTrue(const bool value, const Report& report) override; - - void MarkComplete(const Report& report) override; - - SCRIPT_CANVAS_UNIT_TEST_EQUALITY_OVERLOAD_OVERRIDES(ExpectEqual); - - SCRIPT_CANVAS_UNIT_TEST_EQUALITY_OVERLOAD_OVERRIDES(ExpectNotEqual); - - SCRIPT_CANVAS_UNIT_TEST_COMPARE_OVERLOAD_OVERRIDES(ExpectGreaterThan); - - SCRIPT_CANVAS_UNIT_TEST_COMPARE_OVERLOAD_OVERRIDES(ExpectGreaterThanEqual); - - SCRIPT_CANVAS_UNIT_TEST_COMPARE_OVERLOAD_OVERRIDES(ExpectLessThan); - - SCRIPT_CANVAS_UNIT_TEST_COMPARE_OVERLOAD_OVERRIDES(ExpectLessThanEqual); - - protected: - void OnEntityActivated(const AZ::EntityId&) override; - void OnEntityDeactivated(const AZ::EntityId&) override; - - private: - bool m_graphIsActivated = false; - bool m_graphIsDeactivated = false; - bool m_graphIsComplete = false; - bool m_graphIsErrorFree = false; - bool m_isReportFinished = false; - AZ::EntityId m_graphId; - AZ::EntityId m_entityId; - AZStd::vector m_checkpoints; - AZStd::vector m_failures; - AZStd::vector m_successes; - }; // class Reporter/ - - } // namespace UnitTesting - -} // namespace ScriptCanvas From eb5218e1a3bc96589034c248e912ac39cd68d2d6 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 6 Jan 2022 15:40:54 -0800 Subject: [PATCH 228/284] Removes ScriptCanvas_BehaviorContext from Gems/ScriptCanvasTesting Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Tests/ScriptCanvas_BehaviorContext.cpp | 29 ------------------- ...criptcanvastestingeditor_tests_files.cmake | 1 - 2 files changed, 30 deletions(-) delete mode 100644 Gems/ScriptCanvasTesting/Code/Tests/ScriptCanvas_BehaviorContext.cpp diff --git a/Gems/ScriptCanvasTesting/Code/Tests/ScriptCanvas_BehaviorContext.cpp b/Gems/ScriptCanvasTesting/Code/Tests/ScriptCanvas_BehaviorContext.cpp deleted file mode 100644 index 5222be6e31..0000000000 --- a/Gems/ScriptCanvasTesting/Code/Tests/ScriptCanvas_BehaviorContext.cpp +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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 -#include -#include - -#include -#include -#include - -using namespace ScriptCanvasTests; -using namespace ScriptCanvasEditor; -using namespace TestNodes; - -void ReflectSignCorrectly() -{ - AZ::BehaviorContext* behaviorContext(nullptr); - AZ::ComponentApplicationBus::BroadcastResult(behaviorContext, &AZ::ComponentApplicationRequests::GetBehaviorContext); - AZ_Assert(behaviorContext, "A behavior context is required!"); - behaviorContext->Method("Sign", AZ::GetSign); -} diff --git a/Gems/ScriptCanvasTesting/Code/scriptcanvastestingeditor_tests_files.cmake b/Gems/ScriptCanvasTesting/Code/scriptcanvastestingeditor_tests_files.cmake index e2e86ca551..98bf13c404 100644 --- a/Gems/ScriptCanvasTesting/Code/scriptcanvastestingeditor_tests_files.cmake +++ b/Gems/ScriptCanvasTesting/Code/scriptcanvastestingeditor_tests_files.cmake @@ -16,7 +16,6 @@ set(FILES Source/Framework/ScriptCanvasTestApplication.h Source/Framework/EntityRefTests.h Tests/ScriptCanvasTestingTest.cpp - Tests/ScriptCanvas_BehaviorContext.cpp Tests/ScriptCanvas_ContainerSupport.cpp Tests/ScriptCanvas_Core.cpp Tests/ScriptCanvas_EventHandlers.cpp From 250500e93782798473e193e0ad2f3dda832b7b70 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 6 Jan 2022 15:48:54 -0800 Subject: [PATCH 229/284] Removes BuilderSystemComponent.h from Gems/ScriptEvents Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Code/Builder/BuilderSystemComponent.h | 40 ------------------- .../scriptevents_editor_builder_files.cmake | 1 - 2 files changed, 41 deletions(-) delete mode 100644 Gems/ScriptEvents/Code/Builder/BuilderSystemComponent.h diff --git a/Gems/ScriptEvents/Code/Builder/BuilderSystemComponent.h b/Gems/ScriptEvents/Code/Builder/BuilderSystemComponent.h deleted file mode 100644 index 485698e99a..0000000000 --- a/Gems/ScriptEvents/Code/Builder/BuilderSystemComponent.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * 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 - -#include -#include - -namespace ScriptEventsBuilder -{ - class BuilderSystemComponent - : public AZ::Component - { - public: - AZ_COMPONENT(BuilderSystemComponent, "{6CE4EF5D-5A18-4E25-A676-501644676B58}"); - - BuilderSystemComponent(); - ~BuilderSystemComponent() override; - - static void Reflect(AZ::ReflectContext* context); - - static void GetDependentServices(AZ::ComponentDescriptor::DependencyArrayType& dependent); - - //////////////////////////////////////////////////////////////////////// - // AZ::Component... - void Init() override; - void Activate() override; - void Deactivate() override; - //////////////////////////////////////////////////////////////////////// - - private: - BuilderSystemComponent(const BuilderSystemComponent&) = delete; - - }; -} diff --git a/Gems/ScriptEvents/Code/scriptevents_editor_builder_files.cmake b/Gems/ScriptEvents/Code/scriptevents_editor_builder_files.cmake index 5cce31dcd9..ece30fbd07 100644 --- a/Gems/ScriptEvents/Code/scriptevents_editor_builder_files.cmake +++ b/Gems/ScriptEvents/Code/scriptevents_editor_builder_files.cmake @@ -11,5 +11,4 @@ set(FILES Builder/ScriptEventsBuilderComponent.h Builder/ScriptEventsBuilderWorker.cpp Builder/ScriptEventsBuilderWorker.h - Builder/BuilderSystemComponent.h ) From 1251d66114c3bc20dc7afcb07c13825e8d282069 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 6 Jan 2022 15:51:25 -0800 Subject: [PATCH 230/284] Removes ScriptEventsLegacyDefinitions from Gems/ScriptEvents Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../ScriptEventsLegacyDefinitions.h | 122 ------------------ 1 file changed, 122 deletions(-) delete mode 100644 Gems/ScriptEvents/Code/Include/ScriptEvents/ScriptEventsLegacyDefinitions.h diff --git a/Gems/ScriptEvents/Code/Include/ScriptEvents/ScriptEventsLegacyDefinitions.h b/Gems/ScriptEvents/Code/Include/ScriptEvents/ScriptEventsLegacyDefinitions.h deleted file mode 100644 index b61d07295d..0000000000 --- a/Gems/ScriptEvents/Code/Include/ScriptEvents/ScriptEventsLegacyDefinitions.h +++ /dev/null @@ -1,122 +0,0 @@ -/* - * 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 - -#include -#include -#include -#include - - - - -namespace ScriptEventsLegacy -{ - /** - * This class represents an EBus event parameter. - * void Foo(parameterType parameterName) - * ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - * parameter - */ - struct ParameterDefinition - { - AZ_TYPE_INFO(ParameterDefinition, "{6586FFB5-0FF6-424F-A542-C797E2FF3458}"); - AZ_CLASS_ALLOCATOR(ParameterDefinition, AZ::SystemAllocator, 0); - - ParameterDefinition() = default; - ParameterDefinition(const AZStd::string& name, const AZStd::string& tooltip, const AZ::Uuid& type) - : m_name(name) - , m_tooltip(tooltip) - , m_type(type) - {} - - AZStd::string m_name; - AZStd::string m_tooltip; - AZ::Uuid m_type = AZ::BehaviorContext::GetVoidTypeId(); - }; - - /** - * This class represents an EBus event. - * void Foo (parameterType parameterName, parameterType2 parameterName2) - * ^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - * m_returnType, m_name, m_parameters - */ - struct EventDefinition - { - AZ_TYPE_INFO(EventDefinition, "{211BB356-FA42-400F-B3DD-9326C6A686B6}"); - AZ_CLASS_ALLOCATOR(EventDefinition, AZ::SystemAllocator, 0); - - EventDefinition() = default; - EventDefinition(const AZStd::string& eventName, const AZStd::string& tooltip, const AZ::Uuid& returnValue, const AZStd::vector& parameters) - : m_name(eventName) - , m_tooltip(tooltip) - , m_returnType(returnValue) - , m_parameters(parameters) - {} - - AZStd::string m_name; - AZStd::string m_tooltip; - AZ::Uuid m_returnType = AZ::BehaviorContext::GetVoidTypeId(); - AZStd::vector m_parameters; - }; - - /** - * This class represents EBus type traits. - * At the moment only bus id type is supported. - */ - struct TypeTraitsDefinition - { - AZ_TYPE_INFO(TypeTraitsDefinition, "{EC374DE0-8003-4572-BC26-C4A8DBE50AB6}"); - AZ_CLASS_ALLOCATOR(TypeTraitsDefinition, AZ::SystemAllocator, 0); - - TypeTraitsDefinition() = default; - TypeTraitsDefinition(const AZ::Uuid& busIdType) - : m_busIdType(busIdType) {} - - AZ::Uuid m_busIdType = AZ::BehaviorContext::GetVoidTypeId(); - }; - - /** - * This class represents an EBus. - * An EBus has a name, traits, and a collection of events - * Configurable EBuses are added to the Behavior Context as both Request and Notification buses - */ - struct Definition - { - AZ_TYPE_INFO(Definition, "{4663215E-8137-4A16-979D-26B48401F40D}"); - AZ_CLASS_ALLOCATOR(Definition, AZ::SystemAllocator, 0); - - Definition() = default; - Definition(const AZStd::string& name, const AZStd::string& tooltip, const TypeTraitsDefinition& traits, const AZStd::vector& events) - : m_name(name) - , m_tooltip(tooltip) - , m_traits(traits) - , m_events(events) - {} - - EventDefinition FindEvent(const char* name) const - { - for (const EventDefinition& eventDefinition : m_events) - { - if (eventDefinition.m_name.compare(name) == 0) - { - return eventDefinition; - } - } - - return EventDefinition(); - } - - AZStd::string m_name; - AZStd::string m_tooltip; - AZStd::string m_category = "Custom Events"; - TypeTraitsDefinition m_traits; - AZStd::vector m_events; - }; -} From 57499860e0244c9e49e55d086ce94de5e4fedf58 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 6 Jan 2022 15:51:58 -0800 Subject: [PATCH 231/284] Removes Input.h/cpp from Gems/StartingPoint Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Gems/StartingPointInput/Code/Source/Input.cpp | 490 ------------------ Gems/StartingPointInput/Code/Source/Input.h | 125 ----- 2 files changed, 615 deletions(-) delete mode 100644 Gems/StartingPointInput/Code/Source/Input.cpp delete mode 100644 Gems/StartingPointInput/Code/Source/Input.h diff --git a/Gems/StartingPointInput/Code/Source/Input.cpp b/Gems/StartingPointInput/Code/Source/Input.cpp deleted file mode 100644 index 934ebe4d35..0000000000 --- a/Gems/StartingPointInput/Code/Source/Input.cpp +++ /dev/null @@ -1,490 +0,0 @@ -/* - * 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 "Input.h" -#include "LyToAzInputNameConversions.h" -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -// CryCommon includes -#include -#include - - -namespace Input -{ - static const int s_inputVersion = 2; - - bool ConvertInputVersion1To2(AZ::SerializeContext& context, AZ::SerializeContext::DataElementNode& classElement) - { - const int deviceTypeElementIndex = classElement.FindElement(AZ_CRC("Input Device Type")); - if (deviceTypeElementIndex == -1) - { - AZ_Error("Input", false, "Could not find 'Input Device Type' element"); - return false; - } - - AZ::SerializeContext::DataElementNode& deviceTypeElementNode = classElement.GetSubElement(deviceTypeElementIndex); - AZStd::string deviceTypeElementValue; - if (!deviceTypeElementNode.GetData(deviceTypeElementValue)) - { - AZ_Error("Input", false, "Could not get 'Input Device Type' element as a string"); - return false; - } - - const AZStd::string convertedDeviceType = ConvertInputDeviceName(deviceTypeElementValue); - if (!deviceTypeElementNode.SetData(context, convertedDeviceType)) - { - AZ_Error("Input", false, "Could not set 'Input Device Type' element as a string"); - return false; - } - - const int eventNameElementIndex = classElement.FindElement(AZ_CRC("Input Name")); - if (eventNameElementIndex == -1) - { - AZ_Error("Input", false, "Could not find 'Input Name' element"); - return false; - } - - AZ::SerializeContext::DataElementNode& eventNameElementNode = classElement.GetSubElement(eventNameElementIndex); - AZStd::string eventNameElementValue; - if (!eventNameElementNode.GetData(eventNameElementValue)) - { - AZ_Error("Input", false, "Could not get 'Input Name' element as a string"); - return false; - } - - const AZStd::string convertedElementName = ConvertInputEventName(eventNameElementValue); - if (!eventNameElementNode.SetData(context, convertedElementName)) - { - AZ_Error("Input", false, "Could not set 'Input Name' element as a string"); - return false; - } - - return true; - } - - bool ConvertInputVersion(AZ::SerializeContext& context, AZ::SerializeContext::DataElementNode& classElement) - { - int currentUpgradedVersion = classElement.GetVersion(); - while (currentUpgradedVersion < s_inputVersion) - { - switch (currentUpgradedVersion) - { - case 1: - { - if (ConvertInputVersion1To2(context, classElement)) - { - currentUpgradedVersion = 2; - } - else - { - AZ_Warning("Input", false, "Failed to convert Input from version 1 to 2, its data will be lost on save"); - return false; - } - } - break; - case 0: - default: - { - AZ_Warning("Input", false, "Unable to convert Input: unsupported version %i, its data will be lost on save", currentUpgradedVersion); - return false; - } - } - } - return true; - } - - void Input::Reflect(AZ::ReflectContext* reflection) - { - AZ::SerializeContext* serializeContext = azrtti_cast(reflection); - if (serializeContext) - { - serializeContext->Class() - ->Version(s_inputVersion, &ConvertInputVersion) - ->Field("Input Device Type", &Input::m_inputDeviceType) - ->Field("Input Name", &Input::m_inputName) - ->Field("Event Value Multiplier", &Input::m_eventValueMultiplier) - ->Field("Dead Zone", &Input::m_deadZone); - - AZ::EditContext* editContext = serializeContext->GetEditContext(); - if (editContext) - { - editContext->Class("Input", "Hold an input to generate an event") - ->ClassElement(AZ::Edit::ClassElements::EditorData, "") - ->Attribute(AZ::Edit::Attributes::NameLabelOverride, &Input::GetEditorText) - ->Attribute(AZ::Edit::Attributes::ChangeNotify, AZ::Edit::PropertyRefreshLevels::AttributesAndValues) - ->DataElement(AZ::Edit::UIHandlers::ComboBox, &Input::m_inputDeviceType, "Input Device Type", "The type of input device, ex keyboard") - ->Attribute(AZ::Edit::Attributes::ChangeNotify, &Input::OnDeviceSelected) - ->Attribute(AZ::Edit::Attributes::StringList, &Input::GetInputDeviceTypes) - ->DataElement(AZ::Edit::UIHandlers::ComboBox, &Input::m_inputName, "Input Name", "The name of the input you want to hold ex. space") - ->Attribute(AZ::Edit::Attributes::StringList, &Input::GetInputNamesBySelectedDevice) - ->Attribute(AZ::Edit::Attributes::ChangeNotify, AZ::Edit::PropertyRefreshLevels::AttributesAndValues) - ->DataElement(0, &Input::m_eventValueMultiplier, "Event value multiplier", "When the event fires, the value will be scaled by this multiplier") - ->Attribute(AZ::Edit::Attributes::ChangeNotify, AZ::Edit::PropertyRefreshLevels::AttributesAndValues) - ->DataElement(0, &Input::m_deadZone, "Dead zone", "An event will only be sent out if the value is above this threshold") - ->Attribute(AZ::Edit::Attributes::Min, 0.0f); - } - - if (AZ::BehaviorContext* behaviorContext = azrtti_cast(reflection)) - { - behaviorContext->EBus("InputEventNotificationBus") - ->Event("OnPressed", &AZ::InputEventNotificationBus::Events::OnPressed) - ->Event("OnHeld", &AZ::InputEventNotificationBus::Events::OnHeld) - ->Event("OnReleased", &AZ::InputEventNotificationBus::Events::OnReleased); - } - } - } - - Input::Input() - { - if (m_inputDeviceType.empty()) - { - auto&& deviceTypes = GetInputDeviceTypes(); - if (!deviceTypes.empty()) - { - m_inputDeviceType = deviceTypes[0]; - OnDeviceSelected(); - } - } - } - - bool Input::OnInputChannelEventFiltered(const AzFramework::InputChannel& inputChannel) - { - const LocalUserId localUserIdOfEvent = static_cast(inputChannel.GetInputDevice().GetAssignedLocalUserId()); - const float value = CalculateEventValue(inputChannel); - const bool isPressed = fabs(value) > m_deadZone; - if (!m_wasPressed && isPressed) - { - SendEventsInternal(value, localUserIdOfEvent, m_outgoingBusId, &AZ::InputEventNotificationBus::Events::OnPressed); - } - else if (m_wasPressed && isPressed) - { - SendEventsInternal(value, localUserIdOfEvent, m_outgoingBusId, &AZ::InputEventNotificationBus::Events::OnHeld); - } - else if (m_wasPressed && !isPressed) - { - SendEventsInternal(value, localUserIdOfEvent, m_outgoingBusId, &AZ::InputEventNotificationBus::Events::OnReleased); - } - m_wasPressed = isPressed; - - // Return false so we don't consume the event. This should perhaps be a configurable option? - return false; - } - - float Input::CalculateEventValue(const AzFramework::InputChannel& inputChannel) const - { - return inputChannel.GetValue(); - } - - void Input::SendEventsInternal(float value, const AzFramework::LocalUserId& localUserIdOfEvent, const AZ::InputEventNotificationId busId, InputEventType eventType) - { - value *= m_eventValueMultiplier; - - AZ::InputEventNotificationId localUserBusId = AZ::InputEventNotificationId(localUserIdOfEvent, busId.m_actionNameCrc); - AZ::InputEventNotificationBus::Event(localUserBusId, eventType, value); - - AZ::InputEventNotificationId wildCardBusId = AZ::InputEventNotificationId(AzFramework::LocalUserIdAny, busId.m_actionNameCrc); - AZ::InputEventNotificationBus::Event(wildCardBusId, eventType, value); - } - - void Input::Activate(const AZ::InputEventNotificationId& eventNotificationId) - { - const AzFramework::InputDevice* inputDevice = AzFramework::InputDeviceRequests::FindInputDevice(AzFramework::InputDeviceId(m_inputDeviceType.c_str())); - if (!inputDevice || !inputDevice->IsSupported()) - { - // The input device that this input binding would be listening for input from - // is not supported on the current platform, so don't bother even activating. - // Please note distinction between InputDevice::IsSupported and IsConnected. - return; - } - - const AZ::Crc32 channelNameFilter(m_inputName.c_str()); - const AZ::Crc32 deviceNameFilter(m_inputDeviceType.c_str()); - const AzFramework::LocalUserId localUserIdFilter(eventNotificationId.m_localUserId); - AZStd::shared_ptr filter = AZStd::make_shared(channelNameFilter, deviceNameFilter, localUserIdFilter); - InputChannelEventListener::SetFilter(filter); - InputChannelEventListener::Connect(); - m_wasPressed = false; - - m_outgoingBusId = eventNotificationId; - AZ::GlobalInputRecordRequestBus::Handler::BusConnect(); - AZ::EditableInputRecord editableRecord; - editableRecord.m_localUserId = eventNotificationId.m_localUserId; - editableRecord.m_deviceName = m_inputDeviceType; - editableRecord.m_eventGroup = eventNotificationId.m_actionNameCrc; - editableRecord.m_inputName = m_inputName; - AZ::InputRecordRequestBus::Handler::BusConnect(editableRecord); - } - - void Input::Deactivate(const AZ::InputEventNotificationId& eventNotificationId) - { - if (m_wasPressed) - { - AZ::InputEventNotificationBus::Event(m_outgoingBusId, &AZ::InputEventNotifications::OnReleased, 0.0f); - } - InputChannelEventListener::Disconnect(); - AZ::GlobalInputRecordRequestBus::Handler::BusDisconnect(); - AZ::InputRecordRequestBus::Handler::BusDisconnect(); - } - - AZStd::string Input::GetEditorText() const - { - return m_inputName.empty() ? "" : - m_inputName + (m_outputAxis == OutputAxis::X ? " (x-axis)" : " (y-axis)"); - } - - const AZStd::vector ThumbstickInput::GetInputDeviceTypes() const - { - // Gamepads are currently the only device type that support thumbstick input. - // We could (should) be more robust here by iterating over all input devices, - // looking for any with associated input channels of type InputChannelAxis2D. - AZStd::vector retval; - retval.push_back(AzFramework::InputDeviceGamepad::Name); - return retval; - } - - const AZStd::vector ThumbstickInput::GetInputNamesBySelectedDevice() const - { - // Gamepads are currently the only device type that support thumbstick input. - // We could (should) be more robust here by iterating over all input devices, - // looking for any with associated input channels of type InputChannelAxis2D. - AZStd::vector retval; - retval.push_back(AzFramework::InputDeviceGamepad::ThumbStickAxis2D::L.GetName()); - retval.push_back(AzFramework::InputDeviceGamepad::ThumbStickAxis2D::R.GetName()); - return retval; - } - - bool ThumbstickInput::OnInputChannelEventFiltered(const AzFramework::InputChannel& inputChannel) - { - // Because we are sending all thumbstick events regardless of if they are inside the dead-zone - // (see InputChannelAxis2D::ProcessRawInputEvent) - // ThumbstickInput components can effectively cancel themselves out if they happen to be setup - // to receive input from a local user id that is signed into multiple controllers at the same - // time. If the controller not being used is updated last, the (~0, ~0) events it sends every - // frame cause the base Input::OnInputChannelEventFiltered function to determine that we need - // to send an InputEventNotificationBus::Events::OnReleased event because m_wasPressed is set - // to true by the other controller that is actually in use (and that is being updated first). - // - // To combat this, anytime we enter the m_wasPressed == true state we'll store a reference to - // the input device id that sent the event (see below). Each time we receive an event we will - // then check whether it's originating from the same input device id, and if not we will just - // ignore it. Please note that while taking the address of the device id is a little sketchy, - // we can do this because it's lifecycle is guaranteed to be longer than that of this object - // UNLESS we ever start calling InputSystemComponent::RecreateEnabledInputDevices somewhere. - // - // Now in this case, the old InputDevice that owns the InputChannelId will be destroyed, but - // not before the InputChannels it owns are destroyed first meaning InputChannel::ResetState - // will be called, the internal state of the input channels will be reset, and an event will - // be broadcast that will ultimately result in m_wasPressed being set to false and therefore - // m_wasLastPressedByInputDeviceId being set to nullptr below instead of becoming a dangling - // pointer. I definitely don't like this much, as it is risky behavior entirely dependent on - // the internal workings of the AzFramework input system, but it's the fastest way to perform - // this additional check. The alternative is to store the last pressed InputDeviceId by value, - // but this would involve a (slightly) more expensive check (see InputDeviceId::operator==), - // along with a string copy each time we set/reset the value (see InputDeviceId::operator=). - // - // At some point it may be worth looking at doing this check (or a safer version of it) in - // the base Input::OnInputChannelEventFiltered function, because the 'one user logged into - // multiple controllers' situation could conceivably cause strange behaviour for all types - // of input bindings (albeit only if the user were to actively use both controllers at the - // same time, in which case who can even really say what the correct behaviour should be?). - // But that would be a far riskier change, and because it's only a problem for thumb-stick - // input we're sending even when the controller is completely idle this fix will do for now. - const InputDeviceId* inputDeviceId = &(inputChannel.GetInputDevice().GetInputDeviceId()); - if (m_wasLastPressedByInputDeviceId && m_wasLastPressedByInputDeviceId != inputDeviceId) - { - return false; - } - - const bool shouldBeConsumed = Input::OnInputChannelEventFiltered(inputChannel); - m_wasLastPressedByInputDeviceId = m_wasPressed ? inputDeviceId : nullptr; - return shouldBeConsumed; - } - - float ThumbstickInput::CalculateEventValue(const AzFramework::InputChannel& inputChannel) const - { - const AzFramework::InputChannelAxis2D::AxisData2D* axisData2D = inputChannel.GetCustomData(); - if (axisData2D == nullptr) - { - AZ_Warning("ThumbstickInput", false, "InputChannel with id '%s' has no axis data 2D", inputChannel.GetInputChannelId().GetName()); - return 0.0f; - } - - const AZ::Vector2 outputValues = ApplyDeadZonesAndSensitivity(axisData2D->m_preDeadZoneValues, - m_innerDeadZoneRadius, - m_outerDeadZoneRadius, - m_axisDeadZoneValue, - m_sensitivityExponent); - - // Ideally we would return both values here and allow each to be mapped to a different output - // event, but that would require a greater re-factor of both the InputManagementFramework Gem - // and the StartingPointInput Gem, and there is nothing preventing anyone from setting up one - // ThumbstickInput component for each axis so it would only be a simplification/optimization. - const float axisValueToReturn = (m_outputAxis == OutputAxis::X) ? outputValues.GetX() : outputValues.GetY(); - return axisValueToReturn; - } - - AZ::Vector2 ThumbstickInput::ApplyDeadZonesAndSensitivity(const AZ::Vector2& inputValues, float innerDeadZone, float outerDeadZone, float axisDeadZone, float sensitivityExponent) - { - static const AZ::Vector2 zeroVector = AZ::Vector2::CreateZero(); - const AZ::Vector2 rawAbsValues(fabsf(inputValues.GetX()), fabsf(inputValues.GetY())); - const float rawLength = rawAbsValues.GetLength(); - if (rawLength == 0.0f) - { - return zeroVector; - } - - // Apply the circular dead zones - const AZ::Vector2 normalizedValues = rawAbsValues / rawLength; - const float postCircularDeadZoneLength = AZ::GetClamp((rawLength - innerDeadZone) / (outerDeadZone - innerDeadZone), 0.0f, 1.0f); - AZ::Vector2 absValues = normalizedValues * postCircularDeadZoneLength; - - // Apply the per-axis dead zone - const AZ::Vector2 absAxisValues = zeroVector.GetMax(rawAbsValues - AZ::Vector2(axisDeadZone, axisDeadZone)) / (outerDeadZone - axisDeadZone); - - // Merge the circular and per-axis dead zones. The resulting values are the smallest ones (dead zone takes priority). And restore the components sign. - const AZ::Vector2 signValues(AZ::GetSign(inputValues.GetX()), AZ::GetSign(inputValues.GetY())); - AZ::Vector2 values = absValues.GetMin(absAxisValues) * signValues; - - // Rescale the vector using the post circular dead zone length, which is the real stick vector length, - // to avoid any jump in values when the stick is fully pushed along an axis and slowly getting out of the axis dead zone - // Additionally, apply the sensitivity curve to the final stick vector length - const float postAxisDeadZoneLength = values.GetLength(); - if (postAxisDeadZoneLength > 0.0f) - { - values /= postAxisDeadZoneLength; - - const float postSensitivityLength = powf(postCircularDeadZoneLength, sensitivityExponent); - values *= postSensitivityLength; - } - - return values; - } -} // namespace Input diff --git a/Gems/StartingPointInput/Code/Source/Input.h b/Gems/StartingPointInput/Code/Source/Input.h deleted file mode 100644 index f6734a4f71..0000000000 --- a/Gems/StartingPointInput/Code/Source/Input.h +++ /dev/null @@ -1,125 +0,0 @@ -/* - * 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 -#include -#include -#include -#include -#include -#include -#include - -namespace AZ -{ - class ReflectContext; -} - -namespace Input -{ - ////////////////////////////////////////////////////////////////////////// - /// Input handles raw input from any source and outputs Pressed, Held, and Released input events - class Input - : public InputSubComponent - , protected AzFramework::InputChannelEventListener - , protected AZ::GlobalInputRecordRequestBus::Handler - , protected AZ::InputRecordRequestBus::Handler - { - public: - Input(); - ~Input() override = default; - AZ_RTTI(Input, "{546C9EBC-90EF-4F03-891A-0736BE2A487E}", InputSubComponent); - static void Reflect(AZ::ReflectContext* reflection); - - ////////////////////////////////////////////////////////////////////////// - // InputSubComponent - void Activate(const AZ::InputEventNotificationId& eventNotificationId) override; - void Deactivate(const AZ::InputEventNotificationId& eventNotificationId) override; - - protected: - AZStd::string GetEditorText() const; - virtual const AZStd::vector GetInputDeviceTypes() const; - virtual const AZStd::vector GetInputNamesBySelectedDevice() const; - - AZ::Crc32 OnDeviceSelected(); - - ////////////////////////////////////////////////////////////////////////// - // AZ::GlobalInputRecordRequests::Handler - void GatherEditableInputRecords(AZ::EditableInputRecords& outResults) override; - - ////////////////////////////////////////////////////////////////////////// - // AZ::EditableInputRecord::Handler - void SetInputRecord(const AZ::EditableInputRecord& newInputRecord) override; - - ////////////////////////////////////////////////////////////////////////// - // AzFramework::InputChannelEventListener - bool OnInputChannelEventFiltered(const AzFramework::InputChannel& inputChannel) override; - - using InputEventType = void(AZ::InputEventNotificationBus::Events::*)(float); - virtual float CalculateEventValue(const AzFramework::InputChannel& inputChannel) const; - void SendEventsInternal(float value, const AzFramework::LocalUserId& localUserIdOfEvent, const AZ::InputEventNotificationId busId, InputEventType eventType); - - ////////////////////////////////////////////////////////////////////////// - // Non Reflected Data - AZ::InputEventNotificationId m_outgoingBusId; - bool m_wasPressed = false; - - ////////////////////////////////////////////////////////////////////////// - // Reflected Data - float m_eventValueMultiplier = 1.f; - AZStd::string m_inputName = ""; - AZStd::string m_inputDeviceType = ""; - float m_deadZone = 0.0f; - }; - - ////////////////////////////////////////////////////////////////////////// - /// ThumbstickInput handles raw input from thumbstick sources, applies any - /// custom dead-zone or sensitivity curve calculations, and then outputs - /// Pressed, Held, and Released input events for the specified axis - class ThumbstickInput - : public Input - { - public: - ThumbstickInput(); - ~ThumbstickInput() override = default; - AZ_RTTI(ThumbstickInput, "{4881FA7C-0667-476C-8C77-4DBB6C69F646}", Input); - static void Reflect(AZ::ReflectContext* reflection); - - protected: - ////////////////////////////////////////////////////////////////////////// - // InputSubComponent - AZStd::string GetEditorText() const; - const AZStd::vector GetInputDeviceTypes() const override; - const AZStd::vector GetInputNamesBySelectedDevice() const override; - bool OnInputChannelEventFiltered(const AzFramework::InputChannel& inputChannel) override; - float CalculateEventValue(const AzFramework::InputChannel& inputChannel) const override; - - static AZ::Vector2 ApplyDeadZonesAndSensitivity(const AZ::Vector2& inputValues, - float innerDeadZone, - float outerDeadZone, - float axisDeadZone, - float sensitivityExponent); - - enum class OutputAxis - { - X, - Y - }; - - ////////////////////////////////////////////////////////////////////////// - // Non Reflected Data - const AzFramework::InputDeviceId* m_wasLastPressedByInputDeviceId = nullptr; - - ////////////////////////////////////////////////////////////////////////// - // Reflected Data - float m_innerDeadZoneRadius = 0.0f; - float m_outerDeadZoneRadius = 1.0f; - float m_axisDeadZoneValue = 0.0f; - float m_sensitivityExponent = 1.0f; - OutputAxis m_outputAxis = OutputAxis::X; - }; -} // namespace Input From 03f734c8b3b96b6fcffd51227353088e37acac2a Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 6 Jan 2022 15:52:40 -0800 Subject: [PATCH 232/284] Removes LyToAzInputNameConversions.h from Gems/StartingPointMovement Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Code/Source/LyToAzInputNameConversions.h | 231 ------------------ 1 file changed, 231 deletions(-) delete mode 100644 Gems/StartingPointInput/Code/Source/LyToAzInputNameConversions.h diff --git a/Gems/StartingPointInput/Code/Source/LyToAzInputNameConversions.h b/Gems/StartingPointInput/Code/Source/LyToAzInputNameConversions.h deleted file mode 100644 index cc94ce1dd5..0000000000 --- a/Gems/StartingPointInput/Code/Source/LyToAzInputNameConversions.h +++ /dev/null @@ -1,231 +0,0 @@ -/* - * 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 - -#include -#include -#include -#include - -namespace Input -{ - using namespace AzFramework; - - ////////////////////////////////////////////////////////////////////////// - inline AZStd::string ConvertInputDeviceName(AZStd::string inputDeviceName) - { - // Using std::unordered_map instead of AZStd to avoid allocator issues - static const std::unordered_map map = - { - { "mouse", InputDeviceMouse::Id.GetName() }, - { "keyboard", InputDeviceKeyboard::Id.GetName() }, - { "gamepad", InputDeviceGamepad::Name }, - { "game console controller", InputDeviceGamepad::Name }, - { "other game console controller", InputDeviceGamepad::Name }, - { "Oculus Touch Controller", "oculus_controllers" }, - { "OpenVR Controller", "openvr_controllers" } - }; - - const auto& it = map.find(inputDeviceName.c_str()); - return it != map.end() ? it->second.c_str() : inputDeviceName.c_str(); - } - - ////////////////////////////////////////////////////////////////////////// - inline AZStd::string ConvertInputEventName(AZStd::string inputEventName) - { - // Using std::unordered_map instead of AZStd to avoid allocator issues - static const std::unordered_map map = - { - { "mouse1", InputDeviceMouse::Button::Left.GetName() }, - { "mouse2", InputDeviceMouse::Button::Right.GetName() }, - { "mouse3", InputDeviceMouse::Button::Middle.GetName() }, - { "mouse4", InputDeviceMouse::Button::Other1.GetName() }, - { "mouse5", InputDeviceMouse::Button::Other2.GetName() }, - { "maxis_x", InputDeviceMouse::Movement::X.GetName() }, - { "maxis_y", InputDeviceMouse::Movement::Y.GetName() }, - { "maxis_z", InputDeviceMouse::Movement::Z.GetName() }, - { "mwheel_up", InputDeviceMouse::Movement::Z.GetName() }, - { "mwheel_down", InputDeviceMouse::Movement::Z.GetName() }, - { "mouse_pos", InputDeviceMouse::SystemCursorPosition.GetName() }, - - { "escape", InputDeviceKeyboard::Key::Escape.GetName() }, - { "1", InputDeviceKeyboard::Key::Alphanumeric1.GetName() }, - { "2", InputDeviceKeyboard::Key::Alphanumeric2.GetName() }, - { "3", InputDeviceKeyboard::Key::Alphanumeric3.GetName() }, - { "4", InputDeviceKeyboard::Key::Alphanumeric4.GetName() }, - { "5", InputDeviceKeyboard::Key::Alphanumeric5.GetName() }, - { "6", InputDeviceKeyboard::Key::Alphanumeric6.GetName() }, - { "7", InputDeviceKeyboard::Key::Alphanumeric7.GetName() }, - { "8", InputDeviceKeyboard::Key::Alphanumeric8.GetName() }, - { "9", InputDeviceKeyboard::Key::Alphanumeric9.GetName() }, - { "0", InputDeviceKeyboard::Key::Alphanumeric0.GetName() }, - { "minus", InputDeviceKeyboard::Key::PunctuationHyphen.GetName() }, - { "equals", InputDeviceKeyboard::Key::PunctuationEquals.GetName() }, - { "backspace", InputDeviceKeyboard::Key::EditBackspace.GetName() }, - { "tab", InputDeviceKeyboard::Key::EditTab.GetName() }, - { "q", InputDeviceKeyboard::Key::AlphanumericQ.GetName() }, - { "w", InputDeviceKeyboard::Key::AlphanumericW.GetName() }, - { "e", InputDeviceKeyboard::Key::AlphanumericE.GetName() }, - { "r", InputDeviceKeyboard::Key::AlphanumericR.GetName() }, - { "t", InputDeviceKeyboard::Key::AlphanumericT.GetName() }, - { "y", InputDeviceKeyboard::Key::AlphanumericY.GetName() }, - { "u", InputDeviceKeyboard::Key::AlphanumericU.GetName() }, - { "i", InputDeviceKeyboard::Key::AlphanumericI.GetName() }, - { "o", InputDeviceKeyboard::Key::AlphanumericO.GetName() }, - { "p", InputDeviceKeyboard::Key::AlphanumericP.GetName() }, - { "lbracket", InputDeviceKeyboard::Key::PunctuationBracketL.GetName() }, - { "rbracket", InputDeviceKeyboard::Key::PunctuationBracketR.GetName() }, - { "enter", InputDeviceKeyboard::Key::EditEnter.GetName() }, - { "lctrl", InputDeviceKeyboard::Key::ModifierCtrlL.GetName() }, - { "a", InputDeviceKeyboard::Key::AlphanumericA.GetName() }, - { "s", InputDeviceKeyboard::Key::AlphanumericS.GetName() }, - { "d", InputDeviceKeyboard::Key::AlphanumericD.GetName() }, - { "f", InputDeviceKeyboard::Key::AlphanumericF.GetName() }, - { "g", InputDeviceKeyboard::Key::AlphanumericG.GetName() }, - { "h", InputDeviceKeyboard::Key::AlphanumericH.GetName() }, - { "j", InputDeviceKeyboard::Key::AlphanumericJ.GetName() }, - { "k", InputDeviceKeyboard::Key::AlphanumericK.GetName() }, - { "l", InputDeviceKeyboard::Key::AlphanumericL.GetName() }, - { "semicolon", InputDeviceKeyboard::Key::PunctuationSemicolon.GetName() }, - { "apostrophe", InputDeviceKeyboard::Key::PunctuationApostrophe.GetName() }, - { "tilde", InputDeviceKeyboard::Key::PunctuationTilde.GetName() }, - { "lshift", InputDeviceKeyboard::Key::ModifierShiftL.GetName() }, - { "backslash", InputDeviceKeyboard::Key::PunctuationBackslash.GetName() }, - { "z", InputDeviceKeyboard::Key::AlphanumericZ.GetName() }, - { "x", InputDeviceKeyboard::Key::AlphanumericX.GetName() }, - { "c", InputDeviceKeyboard::Key::AlphanumericC.GetName() }, - { "v", InputDeviceKeyboard::Key::AlphanumericV.GetName() }, - { "b", InputDeviceKeyboard::Key::AlphanumericB.GetName() }, - { "n", InputDeviceKeyboard::Key::AlphanumericN.GetName() }, - { "m", InputDeviceKeyboard::Key::AlphanumericM.GetName() }, - { "comma", InputDeviceKeyboard::Key::PunctuationComma.GetName() }, - { "period", InputDeviceKeyboard::Key::PunctuationPeriod.GetName() }, - { "slash", InputDeviceKeyboard::Key::PunctuationSlash.GetName() }, - { "rshift", InputDeviceKeyboard::Key::ModifierShiftR.GetName() }, - { "np_multiply", InputDeviceKeyboard::Key::NumPadMultiply.GetName() }, - { "lalt", InputDeviceKeyboard::Key::ModifierAltL.GetName() }, - { "space", InputDeviceKeyboard::Key::EditSpace.GetName() }, - { "capslock", InputDeviceKeyboard::Key::EditCapsLock.GetName() }, - { "f1", InputDeviceKeyboard::Key::Function01.GetName() }, - { "f2", InputDeviceKeyboard::Key::Function02.GetName() }, - { "f3", InputDeviceKeyboard::Key::Function03.GetName() }, - { "f4", InputDeviceKeyboard::Key::Function04.GetName() }, - { "f5", InputDeviceKeyboard::Key::Function05.GetName() }, - { "f6", InputDeviceKeyboard::Key::Function06.GetName() }, - { "f7", InputDeviceKeyboard::Key::Function07.GetName() }, - { "f8", InputDeviceKeyboard::Key::Function08.GetName() }, - { "f9", InputDeviceKeyboard::Key::Function09.GetName() }, - { "f10", InputDeviceKeyboard::Key::Function10.GetName() }, - { "numlock", InputDeviceKeyboard::Key::NumLock.GetName() }, - { "scrolllock", InputDeviceKeyboard::Key::WindowsSystemScrollLock.GetName() }, - { "np_7", InputDeviceKeyboard::Key::NumPad7.GetName() }, - { "np_8", InputDeviceKeyboard::Key::NumPad8.GetName() }, - { "np_9", InputDeviceKeyboard::Key::NumPad9.GetName() }, - { "np_subtract", InputDeviceKeyboard::Key::NumPadSubtract.GetName() }, - { "np_4", InputDeviceKeyboard::Key::NumPad4.GetName() }, - { "np_5", InputDeviceKeyboard::Key::NumPad5.GetName() }, - { "np_6", InputDeviceKeyboard::Key::NumPad6.GetName() }, - { "np_add", InputDeviceKeyboard::Key::NumPadAdd.GetName() }, - { "np_1", InputDeviceKeyboard::Key::NumPad1.GetName() }, - { "np_2", InputDeviceKeyboard::Key::NumPad2.GetName() }, - { "np_3", InputDeviceKeyboard::Key::NumPad3.GetName() }, - { "np_0", InputDeviceKeyboard::Key::NumPad0.GetName() }, - { "np_period", InputDeviceKeyboard::Key::NumPadDecimal.GetName() }, - { "f11", InputDeviceKeyboard::Key::Function11.GetName() }, - { "f12", InputDeviceKeyboard::Key::Function12.GetName() }, - { "f13", InputDeviceKeyboard::Key::Function13.GetName() }, - { "f14", InputDeviceKeyboard::Key::Function14.GetName() }, - { "f15", InputDeviceKeyboard::Key::Function15.GetName() }, - { "np_enter", InputDeviceKeyboard::Key::NumPadEnter.GetName() }, - { "rctrl", InputDeviceKeyboard::Key::ModifierCtrlR.GetName() }, - { "np_divide", InputDeviceKeyboard::Key::NumPadDivide.GetName() }, - { "print", InputDeviceKeyboard::Key::WindowsSystemPrint.GetName() }, - { "ralt", InputDeviceKeyboard::Key::ModifierAltR.GetName() }, - { "pause", InputDeviceKeyboard::Key::WindowsSystemPause.GetName() }, - { "home", InputDeviceKeyboard::Key::NavigationHome.GetName() }, - { "up", InputDeviceKeyboard::Key::NavigationArrowUp.GetName() }, - { "pgup", InputDeviceKeyboard::Key::NavigationPageUp.GetName() }, - { "left", InputDeviceKeyboard::Key::NavigationArrowLeft.GetName() }, - { "right", InputDeviceKeyboard::Key::NavigationArrowRight.GetName() }, - { "end", InputDeviceKeyboard::Key::NavigationEnd.GetName() }, - { "down", InputDeviceKeyboard::Key::NavigationArrowDown.GetName() }, - { "pgdn", InputDeviceKeyboard::Key::NavigationPageDown.GetName() }, - { "insert", InputDeviceKeyboard::Key::NavigationInsert.GetName() }, - { "delete", InputDeviceKeyboard::Key::NavigationDelete.GetName() }, - { "oem_102", InputDeviceKeyboard::Key::SupplementaryISO.GetName() }, - - { "gamepad_a", InputDeviceGamepad::Button::A.GetName() }, - { "gamepad_b", InputDeviceGamepad::Button::B.GetName() }, - { "gamepad_x", InputDeviceGamepad::Button::X.GetName() }, - { "gamepad_y", InputDeviceGamepad::Button::Y.GetName() }, - { "gamepad_l1", InputDeviceGamepad::Button::L1.GetName() }, - { "gamepad_r1", InputDeviceGamepad::Button::R1.GetName() }, - { "gamepad_l2", InputDeviceGamepad::Trigger::L2.GetName() }, - { "gamepad_r2", InputDeviceGamepad::Trigger::R2.GetName() }, - { "gamepad_l3", InputDeviceGamepad::Button::L3.GetName() }, - { "gamepad_r3", InputDeviceGamepad::Button::R3.GetName() }, - { "gamepad_up", InputDeviceGamepad::Button::DU.GetName() }, - { "gamepad_down", InputDeviceGamepad::Button::DD.GetName() }, - { "gamepad_left", InputDeviceGamepad::Button::DL.GetName() }, - { "gamepad_right", InputDeviceGamepad::Button::DR.GetName() }, - { "gamepad_start", InputDeviceGamepad::Button::Start.GetName() }, - { "gamepad_select", InputDeviceGamepad::Button::Select.GetName() }, - { "gamepad_sticklx", InputDeviceGamepad::ThumbStickAxis1D::LX.GetName() }, - { "gamepad_stickly", InputDeviceGamepad::ThumbStickAxis1D::LY.GetName() }, - { "gamepad_stickrx", InputDeviceGamepad::ThumbStickAxis1D::RX.GetName() }, - { "gamepad_stickry", InputDeviceGamepad::ThumbStickAxis1D::RY.GetName() }, - - // Additional platform device configurations may be added here - - { "OculusTouch_A", "oculus_button_a" }, - { "OculusTouch_B", "oculus_button_b" }, - { "OculusTouch_X", "oculus_button_x" }, - { "OculusTouch_Y", "oculus_button_y" }, - { "OculusTouch_LeftThumbstickButton", "oculus_button_l3" }, - { "OculusTouch_RightThumbstickButton", "oculus_button_r3" }, - { "OculusTouch_LeftTrigger", "oculus_trigger_l1" }, - { "OculusTouch_RightTrigger", "oculus_trigger_r1" }, - { "OculusTouch_LeftHandTrigger", "oculus_trigger_l2" }, - { "OculusTouch_RightHandTrigger", "oculus_trigger_r2" }, - { "OculusTouch_LeftThumbstickX", "oculus_thumbstick_l_x" }, - { "OculusTouch_LeftThumbstickY", "oculus_thumbstick_l_y" }, - { "OculusTouch_RightThumbstickX", "oculus_thumbstick_r_x" }, - { "OculusTouch_RightThumbstickY", "oculus_thumbstick_r_y" }, - - { "OpenVR_A_0", "openvr_button_a_l" }, - { "OpenVR_A_1", "openvr_button_a_r" }, - { "OpenVR_DPadUp_0", "openvr_button_d_up_l" }, - { "OpenVR_DPadDown_0", "openvr_button_d_down_l" }, - { "OpenVR_DPadLeft_0", "openvr_button_d_left_l" }, - { "OpenVR_DPadRight_0", "openvr_button_d_right_l" }, - { "OpenVR_DPadUp_1", "openvr_button_d_up_r" }, - { "OpenVR_DPadDown_1", "openvr_button_d_down_r" }, - { "OpenVR_DPadLeft_1", "openvr_button_d_left_r" }, - { "OpenVR_DPadRight_1", "openvr_button_d_right_r" }, - { "OpenVR_Grip_0", "openvr_button_grip_l" }, - { "OpenVR_Grip_1", "openvr_button_grip_r" }, - { "OpenVR_Application_0", "openvr_button_start_l" }, - { "OpenVR_Application_1", "openvr_button_start_r" }, - { "OpenVR_System_0", "openvr_button_select_l" }, - { "OpenVR_System_1", "openvr_button_select_r" }, - { "OpenVR_TriggerButton_0", "openvr_button_trigger_l" }, - { "OpenVR_TriggerButton_1", "openvr_button_trigger_r" }, - { "OpenVR_TouchpadButton_0", "openvr_button_touchpad_l" }, - { "OpenVR_TouchpadButton_1", "openvr_button_touchpad_r" }, - { "OpenVR_Trigger_0", "openvr_trigger_l1" }, - { "OpenVR_Trigger_1", "openvr_trigger_r1" }, - { "OpenVR_TouchpadX_0", "openvr_touchpad_l_x" }, - { "OpenVR_TouchpadY_0", "openvr_touchpad_l_y" }, - { "OpenVR_TouchpadX_1", "openvr_touchpad_r_x" }, - { "OpenVR_TouchpadY_1", "openvr_touchpad_r_y" } - }; - - const auto& it = map.find(inputEventName.c_str()); - return it != map.end() ? it->second.c_str() : inputEventName.c_str(); - } -} // namespace Input From b442cb9b3a6e5442c7707f4d69b9013ba744e61f Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 6 Jan 2022 15:56:14 -0800 Subject: [PATCH 233/284] Removes unused files from Gems/StartingPointMovement Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../StartingPointMovement/Code/CMakeLists.txt | 2 -- .../StartingPointMovementConstants.h | 21 -------------- .../StartingPointMovementUtilities.h | 29 ------------------- .../startingpointmovement_shared_files.cmake | 2 -- 4 files changed, 54 deletions(-) delete mode 100644 Gems/StartingPointMovement/Code/Include/StartingPointMovement/StartingPointMovementConstants.h delete mode 100644 Gems/StartingPointMovement/Code/Include/StartingPointMovement/StartingPointMovementUtilities.h diff --git a/Gems/StartingPointMovement/Code/CMakeLists.txt b/Gems/StartingPointMovement/Code/CMakeLists.txt index 1225c922de..cef65f0574 100644 --- a/Gems/StartingPointMovement/Code/CMakeLists.txt +++ b/Gems/StartingPointMovement/Code/CMakeLists.txt @@ -14,8 +14,6 @@ ly_add_target( INCLUDE_DIRECTORIES PRIVATE Source - PUBLIC - Include BUILD_DEPENDENCIES PRIVATE AZ::AzCore diff --git a/Gems/StartingPointMovement/Code/Include/StartingPointMovement/StartingPointMovementConstants.h b/Gems/StartingPointMovement/Code/Include/StartingPointMovement/StartingPointMovementConstants.h deleted file mode 100644 index 9cc3c48c79..0000000000 --- a/Gems/StartingPointMovement/Code/Include/StartingPointMovement/StartingPointMovementConstants.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - * 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 Movement -{ - ////////////////////////////////////////////////////////////////////////// - /// These are intended to be used as an index and needs to be implicitly - /// convertible to int. See StartingPointMovementUtilities.h for examples - enum AxisOfRotation - { - X_Axis = 0, - Y_Axis = 1, - Z_Axis = 2 - }; -} //namespace Movement diff --git a/Gems/StartingPointMovement/Code/Include/StartingPointMovement/StartingPointMovementUtilities.h b/Gems/StartingPointMovement/Code/Include/StartingPointMovement/StartingPointMovementUtilities.h deleted file mode 100644 index a7799a4caf..0000000000 --- a/Gems/StartingPointMovement/Code/Include/StartingPointMovement/StartingPointMovementUtilities.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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 -#include -#include "StartingPointMovement/StartingPointMovementConstants.h" -#include -#include - -namespace Movement -{ - ////////////////////////////////////////////////////////////////////////// - /// This will calculate an AZ::Transform based on an axis of rotation and an angle - ////////////////////////////////////////////////////////////////////////// - static AZ::Transform CreateRotationFromAxis(AxisOfRotation rotationType, float radians) - { - static const AZ::Transform(*s_createRotation[3]) (const float) = - { - &AZ::Transform::CreateRotationX, - &AZ::Transform::CreateRotationY, - &AZ::Transform::CreateRotationZ - }; - return s_createRotation[rotationType](radians); - } -} //namespace Movement diff --git a/Gems/StartingPointMovement/Code/startingpointmovement_shared_files.cmake b/Gems/StartingPointMovement/Code/startingpointmovement_shared_files.cmake index 9d15aad6ff..e807bfe31f 100644 --- a/Gems/StartingPointMovement/Code/startingpointmovement_shared_files.cmake +++ b/Gems/StartingPointMovement/Code/startingpointmovement_shared_files.cmake @@ -8,6 +8,4 @@ set(FILES Source/StartingPointMovementGem.cpp - Include/StartingPointMovement/StartingPointMovementConstants.h - Include/StartingPointMovement/StartingPointMovementUtilities.h ) From 064a7f0b9ba3ff4d1acd766941be618d700d870c Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 6 Jan 2022 15:57:43 -0800 Subject: [PATCH 234/284] Removes FuelInterface from Gems/Twitch Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Gems/Twitch/Code/Source/FuelInterface.h | 18 ------------------ Gems/Twitch/Code/Source/IFuelInterface.h | 21 --------------------- 2 files changed, 39 deletions(-) delete mode 100644 Gems/Twitch/Code/Source/FuelInterface.h delete mode 100644 Gems/Twitch/Code/Source/IFuelInterface.h diff --git a/Gems/Twitch/Code/Source/FuelInterface.h b/Gems/Twitch/Code/Source/FuelInterface.h deleted file mode 100644 index 560161083f..0000000000 --- a/Gems/Twitch/Code/Source/FuelInterface.h +++ /dev/null @@ -1,18 +0,0 @@ -/* - * 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 Twitch -{ - class AZ_DEPRECATED(, "The FuelInterface has been deprecated. HTTPRequest functionality has been moved to TwitchREST. Auth has been mvoed to TwitchSystemComponent. All remaining has been deprecated.") - FuelInterface - { - - }; -} diff --git a/Gems/Twitch/Code/Source/IFuelInterface.h b/Gems/Twitch/Code/Source/IFuelInterface.h deleted file mode 100644 index bc2e4a7c5a..0000000000 --- a/Gems/Twitch/Code/Source/IFuelInterface.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - * 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 - -#include -#include - -namespace Twitch -{ - class AZ_DEPRECATED(,"The IFuelInterface has been deprecated. HTTPRequest functionality has been moved to TwitchREST. Auth has been mvoed to TwitchSystemComponent. All remaining has been deprecated.") - IFuelInterface - { - - }; -} From ff6f6689a16e15eae9e8ea8b343fd0ed44c7927a Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 6 Jan 2022 16:00:35 -0800 Subject: [PATCH 235/284] Removes DependencyRequestBus from Gems/Vegetation Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Vegetation/Ebuses/DependencyRequestBus.h | 32 ------------------- Gems/Vegetation/Code/Tests/VegetationMocks.h | 1 - Gems/Vegetation/Code/vegetation_files.cmake | 1 - 3 files changed, 34 deletions(-) delete mode 100644 Gems/Vegetation/Code/Include/Vegetation/Ebuses/DependencyRequestBus.h diff --git a/Gems/Vegetation/Code/Include/Vegetation/Ebuses/DependencyRequestBus.h b/Gems/Vegetation/Code/Include/Vegetation/Ebuses/DependencyRequestBus.h deleted file mode 100644 index e143d3d8cf..0000000000 --- a/Gems/Vegetation/Code/Include/Vegetation/Ebuses/DependencyRequestBus.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * 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 - -#include -#include -#include -#include - -namespace Vegetation -{ - /** - * the EBus is used to query entity and asset dependencies - */ - class DependencyRequests : public AZ::ComponentBus - { - public: - //! allows multiple threads to call - using MutexType = AZStd::recursive_mutex; - - virtual void GetEntityDependencies(AZStd::vector& dependencies) const = 0; - virtual void GetAssetDependencies(AZStd::vector& dependencies) const = 0; - }; - - typedef AZ::EBus DependencyRequestBus; -} diff --git a/Gems/Vegetation/Code/Tests/VegetationMocks.h b/Gems/Vegetation/Code/Tests/VegetationMocks.h index 3361afa177..a3bd80392d 100644 --- a/Gems/Vegetation/Code/Tests/VegetationMocks.h +++ b/Gems/Vegetation/Code/Tests/VegetationMocks.h @@ -10,7 +10,6 @@ #include #include #include -#include #include #include #include diff --git a/Gems/Vegetation/Code/vegetation_files.cmake b/Gems/Vegetation/Code/vegetation_files.cmake index b4d4e3a356..b839222b19 100644 --- a/Gems/Vegetation/Code/vegetation_files.cmake +++ b/Gems/Vegetation/Code/vegetation_files.cmake @@ -24,7 +24,6 @@ set(FILES Include/Vegetation/Ebuses/DebugNotificationBus.h Include/Vegetation/Ebuses/DebugRequestsBus.h Include/Vegetation/Ebuses/DebugSystemDataBus.h - Include/Vegetation/Ebuses/DependencyRequestBus.h Include/Vegetation/Ebuses/DescriptorNotificationBus.h Include/Vegetation/Ebuses/DescriptorProviderRequestBus.h Include/Vegetation/Ebuses/DescriptorSelectorRequestBus.h From 223baa7e458b3f6db1fb5cf8e2d77235c68a3944 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 6 Jan 2022 16:04:46 -0800 Subject: [PATCH 236/284] Removes ProducerConsumerQueue.h and ConcurrentQueue.h from Gems/Vegetation Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Code/Source/Util/ConcurrentQueue.h | 80 ------------ .../Code/Source/Util/ProducerConsumerQueue.h | 119 ------------------ Gems/Vegetation/Code/vegetation_files.cmake | 2 - 3 files changed, 201 deletions(-) delete mode 100644 Gems/Vegetation/Code/Source/Util/ConcurrentQueue.h delete mode 100644 Gems/Vegetation/Code/Source/Util/ProducerConsumerQueue.h diff --git a/Gems/Vegetation/Code/Source/Util/ConcurrentQueue.h b/Gems/Vegetation/Code/Source/Util/ConcurrentQueue.h deleted file mode 100644 index 38a816808d..0000000000 --- a/Gems/Vegetation/Code/Source/Util/ConcurrentQueue.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - * 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 - -#include -#include -#include - -namespace Vegetation -{ - /** - * Manages a light weight producer consumer storage container - */ - template > - class ConcurrentQueue final - { - public: - AZ_INLINE QueueType& ClaimQueue() - { - int lastQueue = Flip(); - return m_queueData[lastQueue]; - } - - AZ_INLINE QueueType& ClaimQueueNoSort() - { - int lastQueue = FlipNoSort(); - return m_queueData[lastQueue]; - } - - AZ_INLINE bool IsCurrentEmpty() const - { - return m_queueData[m_currentQueueIndex].empty(); - } - - AZ_INLINE void EmplaceBack(TItem item) - { - m_queueData[m_currentQueueIndex].emplace_back(AZStd::move(item)); - } - - AZ_INLINE void CopyBack(TItem item) - { - m_queueData[m_currentQueueIndex].push_back(item); - } - - AZ_INLINE void Insert(TItem item) - { - m_queueData[m_currentQueueIndex].insert(item); - } - - protected: - AZ_INLINE int Flip() - { - // get rid of possible duplicates - int processIndex = FlipNoSort(); - m_queueData[processIndex].sort(); - m_queueData[processIndex].unique(); - return processIndex; - } - - AZ_INLINE int FlipNoSort() - { - int processIndex = m_currentQueueIndex; - { - AZStd::lock_guard lock(m_queueMutex); - m_currentQueueIndex = 1 - m_currentQueueIndex; - } - return processIndex; - } - - private: - QueueType m_queueData[2]; - AZStd::atomic_int m_currentQueueIndex{0}; - AZStd::recursive_mutex m_queueMutex; - }; -} diff --git a/Gems/Vegetation/Code/Source/Util/ProducerConsumerQueue.h b/Gems/Vegetation/Code/Source/Util/ProducerConsumerQueue.h deleted file mode 100644 index 55e6385b93..0000000000 --- a/Gems/Vegetation/Code/Source/Util/ProducerConsumerQueue.h +++ /dev/null @@ -1,119 +0,0 @@ -/* - * 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 - -#include -#include -#include -#include -#include "ConcurrentQueue.h" - -namespace Vegetation -{ - /** - * A simple producer-consumer class to handle dual-threaded working queues - */ - template , typename ConsumerQueueType = AZStd::list> - class ProducerConsumerQueue final - { - public: - AZ_INLINE void EmplaceBack(TItem item) - { - m_producerQueue.EmplaceBack(AZStd::move(item)); - } - - AZ_INLINE void CopyBack(TItem item) - { - m_producerQueue.CopyBack(item); - } - - AZ_INLINE bool IsEmpty() const - { - if (m_producerQueue.IsCurrentEmpty()) - { - AZStd::lock_guard lock(m_consumerQueueMutex); - return m_consumerQueue.empty(); - } - return false; - } - - using ItemFunc = AZStd::function; - using ContinueFunc = AZStd::function; - - // on ItemFunc return TRUE, remove from consumer queue - AZ_INLINE void Consume(ItemFunc consumeItemFunc, ContinueFunc continueFunc) - { - if (CanConsume()) - { - PrepareConsumer(); - } - - // attempt to consume the items - AZStd::lock_guard lock(m_consumerQueueMutex); - auto itItem = m_consumerQueue.begin(); - while (itItem != m_consumerQueue.end()) - { - if (consumeItemFunc(*itItem)) - { - itItem = m_consumerQueue.erase(itItem); - } - else - { - ++itItem; - } - if (!continueFunc()) - { - break; - } - } - } - - // on ItemFunc return TRUE, stop processing - AZ_INLINE void Process(ItemFunc processItemFunc) - { - if (CanConsume()) - { - PrepareConsumer(); - } - - // process the locked queue - AZStd::lock_guard lock(m_consumerQueueMutex); - auto itItem = m_consumerQueue.begin(); - while (itItem != m_consumerQueue.end()) - { - if (processItemFunc(*itItem)) - { - break; - } - ++itItem; - } - } - - protected: - AZ_INLINE bool CanConsume() const - { - return !m_producerQueue.IsCurrentEmpty(); - } - - AZ_INLINE void PrepareConsumer() - { - AZStd::lock_guard lock(m_consumerQueueMutex); - auto& itemList = m_producerQueue.ClaimQueueNoSort(); - while (!itemList.empty()) - { - m_consumerQueue.emplace_back(AZStd::move(itemList.back())); - itemList.pop_back(); - } - } - - private: - ProducerQueueType m_producerQueue; - ConsumerQueueType m_consumerQueue; - mutable AZStd::recursive_mutex m_consumerQueueMutex; - }; -} diff --git a/Gems/Vegetation/Code/vegetation_files.cmake b/Gems/Vegetation/Code/vegetation_files.cmake index b839222b19..b4e90cab97 100644 --- a/Gems/Vegetation/Code/vegetation_files.cmake +++ b/Gems/Vegetation/Code/vegetation_files.cmake @@ -87,8 +87,6 @@ set(FILES Source/Components/SurfaceMaskFilterComponent.h Source/Components/SurfaceSlopeFilterComponent.cpp Source/Components/SurfaceSlopeFilterComponent.h - Source/Util/ConcurrentQueue.h - Source/Util/ProducerConsumerQueue.h Source/Debugger/AreaDebugComponent.cpp Source/Debugger/AreaDebugComponent.h Source/Debugger/DebugComponent.cpp From c1d2da990a6d355df30471a957623e600d5b1e67 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 6 Jan 2022 16:11:39 -0800 Subject: [PATCH 237/284] Removes WhiteBoxAllocator and EditorWhiteBoxBus from Gems/WhiteBox Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Code/Include/WhiteBox/EditorWhiteBoxBus.h | 28 --------------- .../Code/Source/WhiteBoxAllocator.cpp | 13 ------- Gems/WhiteBox/Code/Source/WhiteBoxAllocator.h | 34 ------------------- Gems/WhiteBox/Code/Source/WhiteBoxModule.cpp | 4 --- .../whitebox_editor_supported_files.cmake | 1 - .../Code/whitebox_supported_files.cmake | 2 -- 6 files changed, 82 deletions(-) delete mode 100644 Gems/WhiteBox/Code/Include/WhiteBox/EditorWhiteBoxBus.h delete mode 100644 Gems/WhiteBox/Code/Source/WhiteBoxAllocator.cpp delete mode 100644 Gems/WhiteBox/Code/Source/WhiteBoxAllocator.h diff --git a/Gems/WhiteBox/Code/Include/WhiteBox/EditorWhiteBoxBus.h b/Gems/WhiteBox/Code/Include/WhiteBox/EditorWhiteBoxBus.h deleted file mode 100644 index 841d86003e..0000000000 --- a/Gems/WhiteBox/Code/Include/WhiteBox/EditorWhiteBoxBus.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * 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 - -#include - -namespace WhiteBox -{ - //! EditorWhiteBox system level requests. - class EditorWhiteBoxRequests : public AZ::EBusTraits - { - public: - // EBusTraits overrides ... - static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Single; - static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single; - - protected: - ~EditorWhiteBoxRequests() = default; - }; - - using EditorWhiteBoxRequestBus = AZ::EBus; -} // namespace WhiteBox diff --git a/Gems/WhiteBox/Code/Source/WhiteBoxAllocator.cpp b/Gems/WhiteBox/Code/Source/WhiteBoxAllocator.cpp deleted file mode 100644 index a0c873d14a..0000000000 --- a/Gems/WhiteBox/Code/Source/WhiteBoxAllocator.cpp +++ /dev/null @@ -1,13 +0,0 @@ -/* - * 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 "WhiteBoxAllocator.h" - -namespace WhiteBox -{ -} // namespace WhiteBox diff --git a/Gems/WhiteBox/Code/Source/WhiteBoxAllocator.h b/Gems/WhiteBox/Code/Source/WhiteBoxAllocator.h deleted file mode 100644 index a66c6d021b..0000000000 --- a/Gems/WhiteBox/Code/Source/WhiteBoxAllocator.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * 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 - -#include -#include - -namespace WhiteBox -{ - //! White Box Gem allocator for all default allocations. - class WhiteBoxAllocator : public AZ::SimpleSchemaAllocator> - { - public: - AZ_TYPE_INFO(WhiteBoxAllocator, "{BFEB8C64-FDB7-4A19-B9B4-DDF57A434F14}"); - - using Schema = AZ::ChildAllocatorSchema; - using Base = AZ::SimpleSchemaAllocator; - using Descriptor = Base::Descriptor; - - WhiteBoxAllocator() - : Base("White Box Allocator", "Child Allocator used to track White Box allocations") - { - } - }; - - //! Alias for using WhiteBoxAllocator with std container types. - using WhiteBoxAZStdAlloc = AZ::AZStdAlloc; -} // namespace WhiteBox diff --git a/Gems/WhiteBox/Code/Source/WhiteBoxModule.cpp b/Gems/WhiteBox/Code/Source/WhiteBoxModule.cpp index b0723667e9..27def67f1a 100644 --- a/Gems/WhiteBox/Code/Source/WhiteBoxModule.cpp +++ b/Gems/WhiteBox/Code/Source/WhiteBoxModule.cpp @@ -7,7 +7,6 @@ */ #include "Components/WhiteBoxColliderComponent.h" -#include "WhiteBoxAllocator.h" #include "WhiteBoxComponent.h" #include "WhiteBoxModule.h" #include "WhiteBoxSystemComponent.h" @@ -19,8 +18,6 @@ namespace WhiteBox WhiteBoxModule::WhiteBoxModule() : CryHooksModule() { - AZ::AllocatorInstance::Create(); - // push results of [MyComponent]::CreateDescriptor() into m_descriptors here m_descriptors.insert( m_descriptors.end(), @@ -33,7 +30,6 @@ namespace WhiteBox WhiteBoxModule::~WhiteBoxModule() { - AZ::AllocatorInstance::Destroy(); } AZ::ComponentTypeList WhiteBoxModule::GetRequiredSystemComponents() const diff --git a/Gems/WhiteBox/Code/whitebox_editor_supported_files.cmake b/Gems/WhiteBox/Code/whitebox_editor_supported_files.cmake index ac4746b5a7..71dc8b9289 100644 --- a/Gems/WhiteBox/Code/whitebox_editor_supported_files.cmake +++ b/Gems/WhiteBox/Code/whitebox_editor_supported_files.cmake @@ -7,7 +7,6 @@ # set(FILES - Include/WhiteBox/EditorWhiteBoxBus.h Include/WhiteBox/EditorWhiteBoxComponentBus.h Include/WhiteBox/WhiteBoxToolApi.h Include/WhiteBox/EditorWhiteBoxColliderBus.h diff --git a/Gems/WhiteBox/Code/whitebox_supported_files.cmake b/Gems/WhiteBox/Code/whitebox_supported_files.cmake index 87eb594eb5..faf054c9d6 100644 --- a/Gems/WhiteBox/Code/whitebox_supported_files.cmake +++ b/Gems/WhiteBox/Code/whitebox_supported_files.cmake @@ -8,8 +8,6 @@ set(FILES Include/WhiteBox/WhiteBoxBus.h - Source/WhiteBoxAllocator.cpp - Source/WhiteBoxAllocator.h Source/WhiteBoxComponent.cpp Source/WhiteBoxComponent.h Source/WhiteBoxSystemComponent.cpp From ef9e95c1db715a612ef7cb6870014d4be4e65727 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 6 Jan 2022 16:12:17 -0800 Subject: [PATCH 238/284] More improvements to the unused_compilation script Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- scripts/cleanup/unusued_compilation.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/scripts/cleanup/unusued_compilation.py b/scripts/cleanup/unusued_compilation.py index 4515a663af..1bd69d496f 100644 --- a/scripts/cleanup/unusued_compilation.py +++ b/scripts/cleanup/unusued_compilation.py @@ -20,11 +20,15 @@ EXCLUSIONS = ( 'REGISTER_QT_CLASS_DESC(', 'TEST(', 'TEST_F(', + 'TEST_P(', 'INSTANTIATE_TEST_CASE_P(', 'INSTANTIATE_TYPED_TEST_CASE_P(', 'AZ_UNIT_TEST_HOOK(', 'IMPLEMENT_TEST_EXECUTABLE_MAIN(', + 'BENCHMARK_REGISTER_F(', 'DllMain(', + 'wWinMain(', + 'AZ_DLL_EXPORT', 'CreatePluginInstance(' ) PATH_EXCLUSIONS = ( @@ -37,7 +41,9 @@ PATH_EXCLUSIONS = ( 'python\\*', 'build\\*', 'install\\*', - 'Code\\Framework\\AzCore\\AzCore\\Android\\*' + 'Code\\Framework\\AzCore\\AzCore\\Android\\*', + 'Gems\\ImGui\\External\\ImGui\\*', + '*_Traits_*.h', ) @@ -104,7 +110,7 @@ def cleanup_unused_compilation(path): with open(file, 'w') as source_file: source_file.write('') # d. build - ret = ci_build.build('build_config.json', 'Windows', 'profile_vs2019') + ret = ci_build.build('build_config.json', 'Windows', 'profile') # e.1 if build succeeds, leave the file empty (leave backup) # e.2 if build fails, restore backup if ret != 0: From 4800aebe6583b3c5493cb22bdad734e4a80a6fdf Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 20 Jan 2022 15:46:15 -0800 Subject: [PATCH 239/284] Removes file that was removed but got missing after rebase Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Gems/LmbrCentral/Code/Tests/lmbrcentral_editor_tests_files.cmake | 1 - Gems/LmbrCentral/Code/Tests/lmbrcentral_tests_files.cmake | 1 - 2 files changed, 2 deletions(-) diff --git a/Gems/LmbrCentral/Code/Tests/lmbrcentral_editor_tests_files.cmake b/Gems/LmbrCentral/Code/Tests/lmbrcentral_editor_tests_files.cmake index 72a26c2884..222eebc6e9 100644 --- a/Gems/LmbrCentral/Code/Tests/lmbrcentral_editor_tests_files.cmake +++ b/Gems/LmbrCentral/Code/Tests/lmbrcentral_editor_tests_files.cmake @@ -9,7 +9,6 @@ set(FILES LmbrCentralEditorTest.cpp LmbrCentralReflectionTest.h - LmbrCentralReflectionTest.cpp EditorBoxShapeComponentTests.cpp EditorSphereShapeComponentTests.cpp EditorCapsuleShapeComponentTests.cpp diff --git a/Gems/LmbrCentral/Code/Tests/lmbrcentral_tests_files.cmake b/Gems/LmbrCentral/Code/Tests/lmbrcentral_tests_files.cmake index 1555ff53d8..485fd77b61 100644 --- a/Gems/LmbrCentral/Code/Tests/lmbrcentral_tests_files.cmake +++ b/Gems/LmbrCentral/Code/Tests/lmbrcentral_tests_files.cmake @@ -18,7 +18,6 @@ set(FILES QuadShapeTest.cpp TubeShapeTest.cpp LmbrCentralReflectionTest.h - LmbrCentralReflectionTest.cpp LmbrCentralTest.cpp ShapeGeometryUtilTest.cpp SpawnerComponentTest.cpp From 44c6ca294d4f106b9cb9bde3885f593f56ff3065 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 20 Jan 2022 16:05:55 -0800 Subject: [PATCH 240/284] Fixes for rebasing Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Editor/ErrorReport.h | 3 --- Code/Editor/IEditorImpl.cpp | 1 + Code/Legacy/CrySystem/System.cpp | 3 +++ 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Code/Editor/ErrorReport.h b/Code/Editor/ErrorReport.h index 2ede92a8fe..a80bb36404 100644 --- a/Code/Editor/ErrorReport.h +++ b/Code/Editor/ErrorReport.h @@ -17,9 +17,6 @@ // forward declarations. class CParticleItem; -#include "BaseLibraryItem.h" -#include - #include "Objects/BaseObject.h" #include "Include/EditorCoreAPI.h" #include "Include/IErrorReport.h" diff --git a/Code/Editor/IEditorImpl.cpp b/Code/Editor/IEditorImpl.cpp index fc18e1f4c3..ec688b27c7 100644 --- a/Code/Editor/IEditorImpl.cpp +++ b/Code/Editor/IEditorImpl.cpp @@ -12,6 +12,7 @@ #include "EditorDefs.h" #include "IEditorImpl.h" +#include // Qt #include diff --git a/Code/Legacy/CrySystem/System.cpp b/Code/Legacy/CrySystem/System.cpp index a5cee3a6b6..0b82eded4e 100644 --- a/Code/Legacy/CrySystem/System.cpp +++ b/Code/Legacy/CrySystem/System.cpp @@ -461,6 +461,9 @@ bool CSystem::IsQuitting() const bool wasExitMainLoopRequested = false; AzFramework::ApplicationRequests::Bus::BroadcastResult(wasExitMainLoopRequested, &AzFramework::ApplicationRequests::WasExitMainLoopRequested); return wasExitMainLoopRequested; +} + +////////////////////////////////////////////////////////////////////////// ISystem* CSystem::GetCrySystem() { return this; From 1e591ab01974bec6fb997ac4f3e310c191499e12 Mon Sep 17 00:00:00 2001 From: Chris Galvan Date: Fri, 21 Jan 2022 15:32:30 -0600 Subject: [PATCH 241/284] Removed const_cast now that we've switched from array_view to span Signed-off-by: Chris Galvan --- .../Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp index e2268dbdd8..76260f506e 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp @@ -385,7 +385,7 @@ namespace AZ { size_t imageDataIndex = (y * width * pixelSize) + (x * pixelSize); - auto& outValue = const_cast(outValues[outValuesIndex++]); + auto& outValue = outValues[outValuesIndex++]; outValue = Internal::RetrieveFloatValue(imageData.data(), imageDataIndex, imageDescriptor.m_format); } } @@ -412,7 +412,7 @@ namespace AZ { size_t imageDataIndex = (y * width * pixelSize) + (x * pixelSize); - auto& outValue = const_cast(outValues[outValuesIndex++]); + auto& outValue = outValues[outValuesIndex++]; outValue = Internal::RetrieveUintValue(imageData.data(), imageDataIndex, imageDescriptor.m_format); } } @@ -439,7 +439,7 @@ namespace AZ { size_t imageDataIndex = (y * width * pixelSize) + (x * pixelSize); - auto& outValue = const_cast(outValues[outValuesIndex++]); + auto& outValue = outValues[outValuesIndex++]; outValue = Internal::RetrieveIntValue(imageData.data(), imageDataIndex, imageDescriptor.m_format); } } From c13622c5afcf74426c9ca6d05cb866893cd436b9 Mon Sep 17 00:00:00 2001 From: Chris Galvan Date: Fri, 21 Jan 2022 16:07:27 -0600 Subject: [PATCH 242/284] Handled special case logic for SNORM minimum value conversion Signed-off-by: Chris Galvan --- .../Source/RPI.Reflect/Image/StreamingImageAsset.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp index 76260f506e..1ed900b2b8 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp @@ -146,8 +146,12 @@ namespace AZ case AZ::RHI::Format::R8_SNORM: { // Scale the value from AZ::s8 min/max to -1 to 1 + // We need to treat -128 and -127 the same, so that we get a symmetric + // range of -127 to 127 with complementary scaled values of -1 to 1 auto actualMem = reinterpret_cast(mem); - return ScaleValue(actualMem[index], std::numeric_limits::min(), std::numeric_limits::max(), -1, 1); + AZ::s8 signedMax = std::numeric_limits::max(); + AZ::s8 signedMin = aznumeric_cast(-signedMax); + return ScaleValue(AZStd::max(actualMem[index], signedMin), signedMin, signedMax, -1, 1); } case AZ::RHI::Format::D16_UNORM: case AZ::RHI::Format::R16_UNORM: @@ -157,8 +161,12 @@ namespace AZ case AZ::RHI::Format::R16_SNORM: { // Scale the value from AZ::s16 min/max to -1 to 1 + // We need to treat -32768 and -32767 the same, so that we get a symmetric + // range of -32767 to 32767 with complementary scaled values of -1 to 1 auto actualMem = reinterpret_cast(mem); - return ScaleValue(actualMem[index], std::numeric_limits::min(), std::numeric_limits::max(), -1, 1); + AZ::s16 signedMax = std::numeric_limits::max(); + AZ::s16 signedMin = aznumeric_cast(-signedMax); + return ScaleValue(AZStd::max(actualMem[index], signedMin), signedMin, signedMax, -1, 1); } case AZ::RHI::Format::R16_FLOAT: { From 29b3cf4fee581110e1cc9453fd28f0bec9a9f908 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Fri, 21 Jan 2022 15:29:42 -0800 Subject: [PATCH 243/284] Fixes to the unused script Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../cleanup/{unusued_compilation.py => unused_compilation.py} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename scripts/cleanup/{unusued_compilation.py => unused_compilation.py} (99%) diff --git a/scripts/cleanup/unusued_compilation.py b/scripts/cleanup/unused_compilation.py similarity index 99% rename from scripts/cleanup/unusued_compilation.py rename to scripts/cleanup/unused_compilation.py index 1bd69d496f..8aeadff309 100644 --- a/scripts/cleanup/unusued_compilation.py +++ b/scripts/cleanup/unused_compilation.py @@ -52,7 +52,7 @@ def create_filelist(path): for input_file in path: if os.path.isdir(input_file): for dp, dn, filenames in os.walk(input_file): - if 'build\\windows_vs2019' in dp: + if 'build\\windows' in dp: continue for f in filenames: extension = os.path.splitext(f)[1] From 6c31f45b9ea8a59e02e810bd120ccfad7a4dba2c Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Fri, 21 Jan 2022 15:30:36 -0800 Subject: [PATCH 244/284] Fixes the validation script Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Framework/AzFramework/AzFramework/Debug/DebugCameraBus.h | 0 .../Tools/EMotionStudio/EMStudioSDK/Source/EMStudioPlugin.cpp | 0 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 Code/Framework/AzFramework/AzFramework/Debug/DebugCameraBus.h delete mode 100644 Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/EMStudioPlugin.cpp diff --git a/Code/Framework/AzFramework/AzFramework/Debug/DebugCameraBus.h b/Code/Framework/AzFramework/AzFramework/Debug/DebugCameraBus.h deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/EMStudioPlugin.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/EMStudioPlugin.cpp deleted file mode 100644 index e69de29bb2..0000000000 From 109cab9b8aa34588ceb19afb322f681c94c2ed25 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Fri, 21 Jan 2022 15:30:56 -0800 Subject: [PATCH 245/284] Fixes Linux generation Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../AzToolsFramework/aztoolsframework_linux_files.cmake | 1 - .../AzToolsFramework/aztoolsframework_mac_files.cmake | 1 - 2 files changed, 2 deletions(-) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_linux_files.cmake b/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_linux_files.cmake index afd487daf7..af4bfcb8f4 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_linux_files.cmake +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_linux_files.cmake @@ -29,5 +29,4 @@ set(FILES UI/UICore/SaveChangesDialog.hxx UI/UICore/SaveChangesDialog.cpp UI/UICore/SaveChangesDialog.ui - ToolsFileUtils/ToolsFileUtils_generic.cpp ) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_mac_files.cmake b/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_mac_files.cmake index afd487daf7..af4bfcb8f4 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_mac_files.cmake +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_mac_files.cmake @@ -29,5 +29,4 @@ set(FILES UI/UICore/SaveChangesDialog.hxx UI/UICore/SaveChangesDialog.cpp UI/UICore/SaveChangesDialog.ui - ToolsFileUtils/ToolsFileUtils_generic.cpp ) From fd4014b2789689ef516c7af7ab01e0c56409e89b Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Fri, 21 Jan 2022 15:31:17 -0800 Subject: [PATCH 246/284] PR comments Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Editor/CryEditDoc.cpp | 4 ++-- Code/Editor/Util/MemoryBlock.cpp | 4 +--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/Code/Editor/CryEditDoc.cpp b/Code/Editor/CryEditDoc.cpp index bcd3efd770..c7d719184d 100644 --- a/Code/Editor/CryEditDoc.cpp +++ b/Code/Editor/CryEditDoc.cpp @@ -2129,12 +2129,12 @@ void CCryEditDoc::ReleaseXmlArchiveArray(TDocMultiArchive& arrXmlAr) ////////////////////////////////////////////////////////////////////////// // AzToolsFramework::EditorEntityContextNotificationBus interface implementation -void CCryEditDoc::OnSliceInstantiated([[maybe_unused]] const AZ::Data::AssetId& sliceAssetId, [[maybe_unused]] AZ::SliceComponent::SliceInstanceAddress& sliceAddress, [[maybe_unused]] const AzFramework::SliceInstantiationTicket& /*ticket*/) +void CCryEditDoc::OnSliceInstantiated([[maybe_unused]] const AZ::Data::AssetId& sliceAssetId, [[maybe_unused]] AZ::SliceComponent::SliceInstanceAddress& sliceAddress, [[maybe_unused]] const AzFramework::SliceInstantiationTicket& ticket) { GetIEditor()->ResumeUndo(); } -void CCryEditDoc::OnSliceInstantiationFailed([[maybe_unused]] const AZ::Data::AssetId& sliceAssetId, [[maybe_unused]] const AzFramework::SliceInstantiationTicket& /*ticket*/) +void CCryEditDoc::OnSliceInstantiationFailed([[maybe_unused]] const AZ::Data::AssetId& sliceAssetId, [[maybe_unused]] const AzFramework::SliceInstantiationTicket& ticket) { GetIEditor()->ResumeUndo(); } diff --git a/Code/Editor/Util/MemoryBlock.cpp b/Code/Editor/Util/MemoryBlock.cpp index 6b57557f6f..eb4b53420b 100644 --- a/Code/Editor/Util/MemoryBlock.cpp +++ b/Code/Editor/Util/MemoryBlock.cpp @@ -169,12 +169,10 @@ void CMemoryBlock::Uncompress(CMemoryBlock& toBlock) const assert(this != &toBlock); toBlock.Allocate(m_uncompressedSize); toBlock.m_uncompressedSize = 0; -#if !defined(NDEBUG) unsigned long destSize = m_uncompressedSize; - int result = uncompress((unsigned char*)toBlock.GetBuffer(), &destSize, (unsigned char*)GetBuffer(), GetSize()); + [[maybe_unused]] int result = uncompress((unsigned char*)toBlock.GetBuffer(), &destSize, (unsigned char*)GetBuffer(), GetSize()); assert(result == Z_OK); assert(destSize == static_cast(m_uncompressedSize)); -#endif } ////////////////////////////////////////////////////////////////////////// From 4d62351628781092fedf1fb3e9f0a555e69fd863 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Fri, 21 Jan 2022 16:42:30 -0800 Subject: [PATCH 247/284] Fixes for Linux no unity builds Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Editor/Util/GuidUtil.cpp | 2 +- .../ToolsFileUtils/ToolsFileUtils_generic.cpp | 47 +++++++++++++++++++ .../UI/PropertyEditor/PropertyColorCtrl.cpp | 2 +- .../aztoolsframework_linux_files.cmake | 1 + .../aztoolsframework_mac_files.cmake | 1 + .../Source/RenderPlugin/CommandCallbacks.cpp | 1 + .../RenderPlugin/RenderUpdateCallback.cpp | 1 + .../Source/OpenGLRender/GLWidget.cpp | 4 +- .../Integration/FloatDataInterface.h | 4 ++ .../Libraries/Core/GetVariable.cpp | 1 + 10 files changed, 61 insertions(+), 3 deletions(-) create mode 100644 Code/Framework/AzToolsFramework/AzToolsFramework/ToolsFileUtils/ToolsFileUtils_generic.cpp diff --git a/Code/Editor/Util/GuidUtil.cpp b/Code/Editor/Util/GuidUtil.cpp index e8ea6fd3f8..dbd7d4c371 100644 --- a/Code/Editor/Util/GuidUtil.cpp +++ b/Code/Editor/Util/GuidUtil.cpp @@ -11,7 +11,7 @@ const char* GuidUtil::ToString(REFGUID guid) { static char guidString[64]; - sprintf_s(guidString, "{%.8" GUID_FORMAT_DATA1 "-%.4X-%.4X-%.2X%.2X-%.2X%.2X%.2X%.2X%.2X%.2X}", guid.Data1, guid.Data2, guid.Data3, guid.Data4[0], guid.Data4[1], + azsprintf(guidString, "{%.8" GUID_FORMAT_DATA1 "-%.4X-%.4X-%.2X%.2X-%.2X%.2X%.2X%.2X%.2X%.2X}", guid.Data1, guid.Data2, guid.Data3, guid.Data4[0], guid.Data4[1], guid.Data4[2], guid.Data4[3], guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7]); return guidString; } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsFileUtils/ToolsFileUtils_generic.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsFileUtils/ToolsFileUtils_generic.cpp new file mode 100644 index 0000000000..8357a265ba --- /dev/null +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsFileUtils/ToolsFileUtils_generic.cpp @@ -0,0 +1,47 @@ +/* + * 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 "ToolsFileUtils.h" +#include +#include + +#include + +namespace AzToolsFramework +{ + namespace ToolsFileUtils + { + bool SetModificationTime(const char* const filename, AZ::u64 modificationTime) + { + struct stat statResult; + if (stat(filename, &statResult) != 0) + { + return false; + } + + struct utimbuf puttime; + puttime.modtime = modificationTime; + puttime.actime = static_cast(statResult.st_ctime); + + if (utime(filename, &puttime) == 0) + { + return true; + } + + return false; + } + + bool GetFreeDiskSpace(const QString& path, qint64& outFreeDiskSpace) + { + QStorageInfo storageInfo(path); + outFreeDiskSpace = storageInfo.bytesFree(); + + return outFreeDiskSpace >= 0; + } + } +} diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyColorCtrl.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyColorCtrl.cpp index fd6580225f..fae24d9b3a 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyColorCtrl.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/PropertyColorCtrl.cpp @@ -18,7 +18,7 @@ AZ_PUSH_DISABLE_WARNING(4251, "-Wunknown-warning-option") #include AZ_POP_DISABLE_WARNING #include -#include +#include namespace AzToolsFramework { diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_linux_files.cmake b/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_linux_files.cmake index af4bfcb8f4..afd487daf7 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_linux_files.cmake +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_linux_files.cmake @@ -29,4 +29,5 @@ set(FILES UI/UICore/SaveChangesDialog.hxx UI/UICore/SaveChangesDialog.cpp UI/UICore/SaveChangesDialog.ui + ToolsFileUtils/ToolsFileUtils_generic.cpp ) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_mac_files.cmake b/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_mac_files.cmake index af4bfcb8f4..afd487daf7 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_mac_files.cmake +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_mac_files.cmake @@ -29,4 +29,5 @@ set(FILES UI/UICore/SaveChangesDialog.hxx UI/UICore/SaveChangesDialog.cpp UI/UICore/SaveChangesDialog.ui + ToolsFileUtils/ToolsFileUtils_generic.cpp ) diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/CommandCallbacks.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/CommandCallbacks.cpp index a04e2a87c8..c53c382d34 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/CommandCallbacks.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/CommandCallbacks.cpp @@ -10,6 +10,7 @@ #include "RenderPlugin.h" #include #include +#include namespace EMStudio diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/RenderUpdateCallback.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/RenderUpdateCallback.cpp index 49bb5509b6..2024746971 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/RenderUpdateCallback.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/RenderUpdateCallback.cpp @@ -13,6 +13,7 @@ #include #include "RenderWidget.h" #include "RenderViewWidget.h" +#include namespace EMStudio diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/OpenGLRender/GLWidget.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/OpenGLRender/GLWidget.cpp index c6cab07a44..eefac45a3b 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/OpenGLRender/GLWidget.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/RenderPlugins/Source/OpenGLRender/GLWidget.cpp @@ -15,8 +15,10 @@ #include #include #include -#include "../../../../EMStudioSDK/Source/RenderPlugin/RenderViewWidget.h" +#include +#include +#include namespace EMStudio { diff --git a/Gems/GraphModel/Code/Include/GraphModel/Integration/FloatDataInterface.h b/Gems/GraphModel/Code/Include/GraphModel/Integration/FloatDataInterface.h index 66c0f57fe4..8aefe5baf0 100644 --- a/Gems/GraphModel/Code/Include/GraphModel/Integration/FloatDataInterface.h +++ b/Gems/GraphModel/Code/Include/GraphModel/Integration/FloatDataInterface.h @@ -8,6 +8,9 @@ #pragma once +// Graph Canvas +#include + // Graph Model #include @@ -36,3 +39,4 @@ namespace GraphModelIntegration AZStd::weak_ptr m_slot; }; } + diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/GetVariable.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/GetVariable.cpp index f88fb03726..e77d1abeb6 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/GetVariable.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/GetVariable.cpp @@ -12,6 +12,7 @@ #include #include #include +#include namespace ScriptCanvas { From f3120ca780ffe04231db495e67b4ff3853b5eb41 Mon Sep 17 00:00:00 2001 From: Chris Galvan Date: Tue, 25 Jan 2022 09:58:00 -0600 Subject: [PATCH 248/284] Made some float constants more explicit and updated the pixel index calculation logic to be more concise Signed-off-by: Chris Galvan --- .../Source/RPI.Reflect/Image/StreamingImageAsset.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp index 1ed900b2b8..dc9f0bbaa6 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp @@ -151,7 +151,7 @@ namespace AZ auto actualMem = reinterpret_cast(mem); AZ::s8 signedMax = std::numeric_limits::max(); AZ::s8 signedMin = aznumeric_cast(-signedMax); - return ScaleValue(AZStd::max(actualMem[index], signedMin), signedMin, signedMax, -1, 1); + return ScaleValue(AZStd::max(actualMem[index], signedMin), signedMin, signedMax, -1.0f, 1.0f); } case AZ::RHI::Format::D16_UNORM: case AZ::RHI::Format::R16_UNORM: @@ -166,7 +166,7 @@ namespace AZ auto actualMem = reinterpret_cast(mem); AZ::s16 signedMax = std::numeric_limits::max(); AZ::s16 signedMin = aznumeric_cast(-signedMax); - return ScaleValue(AZStd::max(actualMem[index], signedMin), signedMin, signedMax, -1, 1); + return ScaleValue(AZStd::max(actualMem[index], signedMin), signedMin, signedMax, -1.0f, 1.0f); } case AZ::RHI::Format::R16_FLOAT: { @@ -391,7 +391,7 @@ namespace AZ { for (uint32_t x = topLeft.first; x <= bottomRight.first; ++x) { - size_t imageDataIndex = (y * width * pixelSize) + (x * pixelSize); + size_t imageDataIndex = (y * width + x) * pixelSize; auto& outValue = outValues[outValuesIndex++]; outValue = Internal::RetrieveFloatValue(imageData.data(), imageDataIndex, imageDescriptor.m_format); @@ -418,7 +418,7 @@ namespace AZ { for (uint32_t x = topLeft.first; x <= bottomRight.first; ++x) { - size_t imageDataIndex = (y * width * pixelSize) + (x * pixelSize); + size_t imageDataIndex = (y * width + x) * pixelSize; auto& outValue = outValues[outValuesIndex++]; outValue = Internal::RetrieveUintValue(imageData.data(), imageDataIndex, imageDescriptor.m_format); @@ -445,7 +445,7 @@ namespace AZ { for (uint32_t x = topLeft.first; x <= bottomRight.first; ++x) { - size_t imageDataIndex = (y * width * pixelSize) + (x * pixelSize); + size_t imageDataIndex = (y * width + x) * pixelSize; auto& outValue = outValues[outValuesIndex++]; outValue = Internal::RetrieveIntValue(imageData.data(), imageDataIndex, imageDescriptor.m_format); From efd2e41b05efd79c3a24036c1c9bd14e73313b61 Mon Sep 17 00:00:00 2001 From: Chris Galvan Date: Tue, 25 Jan 2022 10:22:39 -0600 Subject: [PATCH 249/284] Added unit test for single pixel and pixel regions API usage Signed-off-by: Chris Galvan --- .../Code/Tests/Image/StreamingImageTests.cpp | 43 +++++++++++++++++-- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/Gems/Atom/RPI/Code/Tests/Image/StreamingImageTests.cpp b/Gems/Atom/RPI/Code/Tests/Image/StreamingImageTests.cpp index f7476c0bc4..f90702d948 100644 --- a/Gems/Atom/RPI/Code/Tests/Image/StreamingImageTests.cpp +++ b/Gems/Atom/RPI/Code/Tests/Image/StreamingImageTests.cpp @@ -433,12 +433,12 @@ namespace UnitTest return poolAsset; } - AZ::Data::Asset BuildTestImage() + AZ::Data::Asset BuildTestImage(AZ::RHI::Format format = AZ::RHI::Format::R8G8B8A8_UNORM) { using namespace AZ; const uint32_t arraySize = 2; - const uint32_t pixelSize = 4; + const uint32_t pixelSize = RHI::GetFormatSize(format); const uint32_t mipCountHead = 1; const uint32_t mipCountMiddle = 2; const uint32_t mipCountTail = 3; @@ -453,7 +453,7 @@ namespace UnitTest RPI::StreamingImageAssetCreator assetCreator; assetCreator.Begin(Data::AssetId(Uuid::CreateRandom())); - RHI::ImageDescriptor imageDesc = RHI::ImageDescriptor::Create2DArray(RHI::ImageBindFlags::ShaderRead, imageWidth, imageHeight, arraySize, RHI::Format::R8G8B8A8_UNORM); + RHI::ImageDescriptor imageDesc = RHI::ImageDescriptor::Create2DArray(RHI::ImageBindFlags::ShaderRead, imageWidth, imageHeight, arraySize, format); imageDesc.m_mipLevels = static_cast(mipCountTotal); assetCreator.SetImageDescriptor(imageDesc); @@ -726,4 +726,41 @@ namespace UnitTest RPI::ImageSystemInterface::Get()->Update(); } + + TEST_F(StreamingImageTests, GetSubImagePixelValues) + { + using namespace AZ; + + Data::Asset imageAsset = BuildTestImage(AZ::RHI::Format::R8_UNORM); + + auto streamingImageAsset = imageAsset.Get(); + EXPECT_NE(streamingImageAsset, nullptr); + + // Validate retrieving one pixel at a time + auto size = streamingImageAsset->GetImageDescriptor().m_size; + for (uint32_t y = 0; y < size.m_height; ++y) + { + for (uint32_t x = 0; x < size.m_width; ++x) + { + auto pixelDataValue = imageAsset->GetSubImagePixelValue(x, y); + auto pixelExpectedValue = static_cast(y * size.m_width + x) / static_cast(std::numeric_limits::max()); + + EXPECT_TRUE(AZ::IsClose(pixelDataValue, pixelExpectedValue)); + } + } + + // Validate retrieving a region of pixels + AZStd::vector pixelValues(size.m_width * size.m_height); + auto topLeft = AZStd::make_pair(0, 0); + auto bottomRight = AZStd::make_pair(size.m_width - 1, size.m_height - 1); + AZStd::span valueSpan(pixelValues.begin(), pixelValues.size()); + streamingImageAsset->GetSubImagePixelValues(topLeft, bottomRight, valueSpan); + for (uint32_t index = 0; index < pixelValues.size(); ++index) + { + auto pixelDataValue = valueSpan[index]; + auto pixelExpectedValue = static_cast(index) / static_cast(std::numeric_limits::max()); + + EXPECT_TRUE(AZ::IsClose(pixelDataValue, pixelExpectedValue)); + } + } } From 8b5f532e306a174ade34eae4c3edae258dc7d252 Mon Sep 17 00:00:00 2001 From: Chris Galvan Date: Tue, 25 Jan 2022 14:25:32 -0600 Subject: [PATCH 250/284] Disable render pipeline for EditorViewportWidget until a level has been loaded Signed-off-by: Chris Galvan --- Code/Editor/EditorViewportWidget.cpp | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/Code/Editor/EditorViewportWidget.cpp b/Code/Editor/EditorViewportWidget.cpp index a8180bcace..6ba62604e8 100644 --- a/Code/Editor/EditorViewportWidget.cpp +++ b/Code/Editor/EditorViewportWidget.cpp @@ -89,6 +89,7 @@ #include // Atom +#include #include #include #include @@ -584,7 +585,7 @@ void EditorViewportWidget::OnEditorNotifyEvent(EEditorNotifyEvent event) m_renderViewport->SetScene(nullptr); break; - case eNotify_OnEndSceneOpen: + case eNotify_OnEndLoad: UpdateScene(); SetDefaultCamera(); break; @@ -2324,7 +2325,22 @@ void EditorViewportWidget::UpdateScene() { AZ::RPI::SceneNotificationBus::Handler::BusDisconnect(); m_renderViewport->SetScene(mainScene); - AZ::RPI::SceneNotificationBus::Handler::BusConnect(m_renderViewport->GetViewportContext()->GetRenderScene()->GetId()); + auto viewportContext = m_renderViewport->GetViewportContext(); + AZ::RPI::SceneNotificationBus::Handler::BusConnect(viewportContext->GetRenderScene()->GetId()); + + // Don't enable the render pipeline until a level has been loaded + auto renderPipeline = viewportContext->GetCurrentPipeline(); + if (renderPipeline) + { + if (GetIEditor()->IsLevelLoaded()) + { + renderPipeline->AddToRenderTick(); + } + else + { + renderPipeline->RemoveFromRenderTick(); + } + } } } } From 6e05ac678d475fc93925ba51be8df82aa96ff7a4 Mon Sep 17 00:00:00 2001 From: Chris Galvan Date: Tue, 25 Jan 2022 16:46:49 -0600 Subject: [PATCH 251/284] Hide the RenderViewportWidget when there is no level loaded so the gradient background is visible Signed-off-by: Chris Galvan --- Code/Editor/EditorViewportWidget.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Code/Editor/EditorViewportWidget.cpp b/Code/Editor/EditorViewportWidget.cpp index 6ba62604e8..9a9e9f5ad3 100644 --- a/Code/Editor/EditorViewportWidget.cpp +++ b/Code/Editor/EditorViewportWidget.cpp @@ -2329,15 +2329,19 @@ void EditorViewportWidget::UpdateScene() AZ::RPI::SceneNotificationBus::Handler::BusConnect(viewportContext->GetRenderScene()->GetId()); // Don't enable the render pipeline until a level has been loaded + // Also show/hide the RenderViewportWidget accordingly so that we get the + // expected gradient background when no level is loaded auto renderPipeline = viewportContext->GetCurrentPipeline(); if (renderPipeline) { if (GetIEditor()->IsLevelLoaded()) { + m_renderViewport->show(); renderPipeline->AddToRenderTick(); } else { + m_renderViewport->hide(); renderPipeline->RemoveFromRenderTick(); } } From a3e541cc47564b3823b016fb0ce3c068f376fbb0 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Tue, 25 Jan 2022 16:14:02 -0800 Subject: [PATCH 252/284] Adding back NodeableOutNative.h per PR request Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../NodeableOut/NodeableOutNative.h_unused | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/NodeableOut/NodeableOutNative.h_unused diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/NodeableOut/NodeableOutNative.h_unused b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/NodeableOut/NodeableOutNative.h_unused new file mode 100644 index 0000000000..ab6859db1e --- /dev/null +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/NodeableOut/NodeableOutNative.h_unused @@ -0,0 +1,66 @@ +/* + * 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 + +#include +#include +#include + +#include + +namespace ScriptCanvas +{ + namespace Execution + { + template + FunctorOut CreateOutWithArgs(Callable&& callable, Allocator& allocator, AZStd::Internal::pack_traits_arg_sequence, std::index_sequence, ReturnTypeIsNotVoid) + { + auto nodeCallWrapper = [callable = AZStd::forward(callable)](AZ::BehaviorValueParameter* result, AZ::BehaviorValueParameter* arguments, int numArguments) mutable + { + [[maybe_unused]] constexpr size_t numFunctorArguments = sizeof...(Args); + (void)numArguments; + AZ_Assert(numArguments == numFunctorArguments, "number of arguments doesn't match number of parameters"); + AZ_Assert(result, "no null result allowed"); + result->StoreResult(AZStd::invoke(callable, *arguments[IndexSequence].GetAsUnsafe()...)); + }; + + static_assert(!AZStd::is_same_v || sizeof(nodeCallWrapper) <= MaxNodeableOutStackSize, "Lambda is too large to fit within NodebleOut functor"); + return FunctorOut(AZStd::move(nodeCallWrapper), allocator); + } + + template + FunctorOut CreateOutWithArgs(Callable&& callable, Allocator& allocator, AZStd::Internal::pack_traits_arg_sequence, std::index_sequence, ReturnTypeIsVoid) + { + auto nodeCallWrapper = [callable = AZStd::forward(callable)](AZ::BehaviorValueParameter*, AZ::BehaviorValueParameter* arguments, int numArguments) mutable + { + [[maybe_unused]] constexpr size_t numFunctorArguments = sizeof...(Args); + (void)numArguments; + AZ_Assert(numArguments == numFunctorArguments, "number of arguments doesn't match number of parameters"); + AZStd::invoke(callable, *arguments[IndexSequence].GetAsUnsafe()...); + }; + + static_assert(!AZStd::is_same_v || sizeof(nodeCallWrapper) <= MaxNodeableOutStackSize, "Lambda is too large to fit within NodebleOut functor"); + return FunctorOut(AZStd::move(nodeCallWrapper), allocator); + } + + template + FunctorOut CreateOut(Callable&& callable, Allocator& allocator) + { + using CallableTraits = AZStd::function_traits>; + return CreateOutWithArgs + ( AZStd::forward(callable) + , allocator + , typename CallableTraits::arg_types{} + , typename CallableTraits::template expand_args{} + , typename AZStd::is_void::type{}); + } + + } + +} From 25157b3fa15cd34e5edc8f908cdf77298922732a Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Tue, 25 Jan 2022 16:26:00 -0800 Subject: [PATCH 253/284] PR comments Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Framework/AzCore/AzCore/Memory/SystemAllocator.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Code/Framework/AzCore/AzCore/Memory/SystemAllocator.cpp b/Code/Framework/AzCore/AzCore/Memory/SystemAllocator.cpp index 0414740f2a..7238a18672 100644 --- a/Code/Framework/AzCore/AzCore/Memory/SystemAllocator.cpp +++ b/Code/Framework/AzCore/AzCore/Memory/SystemAllocator.cpp @@ -118,9 +118,9 @@ namespace AZ AZ_Assert(!g_isSystemSchemaUsed, "AZ::SystemAllocator MUST be created first! It's the source of all allocations!"); #if AZCORE_SYSTEM_ALLOCATOR == AZCORE_SYSTEM_ALLOCATOR_HPHA - m_schema = new (&g_systemSchema) HphaSchema(heapDesc); + m_schema = new (&g_systemSchema) HphaSchema(heapDesc); #elif AZCORE_SYSTEM_ALLOCATOR == AZCORE_SYSTEM_ALLOCATOR_MALLOC - m_schema = new (&g_systemSchema) MallocSchema(heapDesc); + m_schema = new (&g_systemSchema) MallocSchema(heapDesc); #endif g_isSystemSchemaUsed = true; isReady = true; @@ -292,7 +292,7 @@ namespace AZ //========================================================================= SystemAllocator::size_type SystemAllocator::AllocationSize(pointer_type ptr) { - size_type allocSize = MemorySizeAdjustedDown(m_schema->AllocationSize(ptr)); + size_type allocSize = MemorySizeAdjustedDown(m_schema->AllocationSize(ptr)); return allocSize; } From d46bd0ebc061f3313a35dd86d806323afb6e5c04 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Tue, 25 Jan 2022 16:27:40 -0800 Subject: [PATCH 254/284] Removes special Android case, those files where palified properly Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- scripts/cleanup/unused_compilation.py | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/cleanup/unused_compilation.py b/scripts/cleanup/unused_compilation.py index 8aeadff309..1c16e69812 100644 --- a/scripts/cleanup/unused_compilation.py +++ b/scripts/cleanup/unused_compilation.py @@ -41,7 +41,6 @@ PATH_EXCLUSIONS = ( 'python\\*', 'build\\*', 'install\\*', - 'Code\\Framework\\AzCore\\AzCore\\Android\\*', 'Gems\\ImGui\\External\\ImGui\\*', '*_Traits_*.h', ) From ae3503b74c55db243c0267bf2de3c605fe216f6a Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Tue, 25 Jan 2022 18:31:51 -0800 Subject: [PATCH 255/284] Fixes build after merge Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Editor/CryEdit.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Code/Editor/CryEdit.cpp b/Code/Editor/CryEdit.cpp index 805a22e880..fcc330b0b2 100644 --- a/Code/Editor/CryEdit.cpp +++ b/Code/Editor/CryEdit.cpp @@ -1820,10 +1820,7 @@ bool CCryEditApp::InitInstance() if (GetIEditor()->GetCommandManager()->IsRegistered("editor.open_lnm_editor")) { CCommand0::SUIInfo uiInfo; -#if !defined(NDEBUG) - bool ok = -#endif - GetIEditor()->GetCommandManager()->GetUIInfo("editor.open_lnm_editor", uiInfo); + bool ok = GetIEditor()->GetCommandManager()->GetUIInfo("editor.open_lnm_editor", uiInfo); assert(ok); } From e6113eb9c53cbe59bee03a44b71a2b86a246740a Mon Sep 17 00:00:00 2001 From: Danilo Aimini <82231674+AMZN-daimini@users.noreply.github.com> Date: Tue, 25 Jan 2022 21:09:00 -0800 Subject: [PATCH 256/284] Add checks to handle failure in creating entity as a child of a read-only entity in TrackView and LandscapeCanvas (#7156) Signed-off-by: Danilo Aimini <82231674+AMZN-daimini@users.noreply.github.com> --- Code/Editor/TrackView/TrackViewDialog.cpp | 7 +++- .../Code/Source/Editor/MainWindow.cpp | 32 +++++++++++++++++++ .../Code/Source/Editor/MainWindow.h | 4 +++ 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/Code/Editor/TrackView/TrackViewDialog.cpp b/Code/Editor/TrackView/TrackViewDialog.cpp index d70cbad29e..034e12c098 100644 --- a/Code/Editor/TrackView/TrackViewDialog.cpp +++ b/Code/Editor/TrackView/TrackViewDialog.cpp @@ -1046,7 +1046,12 @@ void CTrackViewDialog::OnAddSequence() AzToolsFramework::ScopedUndoBatch undoBatch("Create TrackView Director Node"); sequenceManager->CreateSequence(sequenceName, sequenceType); CTrackViewSequence* newSequence = sequenceManager->GetSequenceByName(sequenceName); - AZ_Assert(newSequence, "Creating new sequence failed."); + + if (!newSequence) + { + return; + } + undoBatch.MarkEntityDirty(newSequence->GetSequenceComponentEntityId()); // make it the currently selected sequence diff --git a/Gems/LandscapeCanvas/Code/Source/Editor/MainWindow.cpp b/Gems/LandscapeCanvas/Code/Source/Editor/MainWindow.cpp index e58ea77373..8e3159969d 100644 --- a/Gems/LandscapeCanvas/Code/Source/Editor/MainWindow.cpp +++ b/Gems/LandscapeCanvas/Code/Source/Editor/MainWindow.cpp @@ -19,13 +19,16 @@ #include #include #include +#include #include #include +#include #include #include #include #include #include +#include #include #include @@ -37,6 +40,7 @@ // Qt #include +#include #include #include #include @@ -448,6 +452,8 @@ namespace LandscapeCanvasEditor return config; } + AzFramework::EntityContextId MainWindow::s_editorEntityContextId = AzFramework::EntityContextId::CreateNull(); + MainWindow::MainWindow(QWidget* parent) : GraphModelIntegration::EditorMainWindow(GetDefaultConfig(), parent) { @@ -470,9 +476,15 @@ namespace LandscapeCanvasEditor AZ::ComponentApplicationBus::BroadcastResult(m_serializeContext, &AZ::ComponentApplicationRequests::GetSerializeContext); AZ_Assert(m_serializeContext, "Failed to acquire application serialize context."); + AzToolsFramework::EditorEntityContextRequestBus::BroadcastResult( + s_editorEntityContextId, &AzToolsFramework::EditorEntityContextRequests::GetEditorEntityContextId); + m_prefabFocusPublicInterface = AZ::Interface::Get(); AZ_Assert(m_prefabFocusPublicInterface, "LandscapeCanvas - could not get PrefabFocusPublicInterface on construction."); + m_readOnlyEntityPublicInterface = AZ::Interface::Get(); + AZ_Assert(m_readOnlyEntityPublicInterface, "LandscapeCanvas - could not get ReadOnlyEntityPublicInterface on construction."); + const GraphCanvas::EditorId& editorId = GetEditorId(); // Register unique color palettes for our connections (data types) @@ -837,6 +849,26 @@ namespace LandscapeCanvasEditor { using namespace AzFramework::Terrain; + // Detect if it's possible to create a new entity in the current context + AZ::EntityId focusRootEntityId = m_prefabFocusPublicInterface->GetFocusedPrefabContainerEntityId(s_editorEntityContextId); + if (m_readOnlyEntityPublicInterface->IsReadOnly(focusRootEntityId)) + { + // Abort + CloseEditor(dockWidget->GetDockWidgetId()); + + QWidget* activeWindow = AzToolsFramework::GetActiveWindow(); + + QMessageBox::warning( + activeWindow, + QString("Landscape Canvas Asset Creation Error"), + QString("Could not create new Landscape Canvas asset under read-only entity."), + QMessageBox::Ok, + QMessageBox::Ok + ); + + return; + } + // Invoke the GraphCanvas base instead of the GraphModelIntegration::EditorMainWindow so that we // can do our own custom handling when opening an existing graph GraphCanvas::AssetEditorMainWindow::OnEditorOpened(dockWidget); diff --git a/Gems/LandscapeCanvas/Code/Source/Editor/MainWindow.h b/Gems/LandscapeCanvas/Code/Source/Editor/MainWindow.h index de6b10529d..09eb63d681 100644 --- a/Gems/LandscapeCanvas/Code/Source/Editor/MainWindow.h +++ b/Gems/LandscapeCanvas/Code/Source/Editor/MainWindow.h @@ -34,6 +34,8 @@ namespace AzToolsFramework { + class ReadOnlyEntityPublicInterface; + namespace Prefab { class PrefabFocusPublicInterface; @@ -261,7 +263,9 @@ namespace LandscapeCanvasEditor AZ::SerializeContext* m_serializeContext = nullptr; + static AzFramework::EntityContextId s_editorEntityContextId; AzToolsFramework::Prefab::PrefabFocusPublicInterface* m_prefabFocusPublicInterface = nullptr; + AzToolsFramework::ReadOnlyEntityPublicInterface* m_readOnlyEntityPublicInterface = nullptr; bool m_ignoreGraphUpdates = false; bool m_prefabPropagationInProgress = false; From b0a725340c53bd750174b4f98c16b7b436418886 Mon Sep 17 00:00:00 2001 From: moraaar Date: Wed, 26 Jan 2022 09:37:21 +0000 Subject: [PATCH 257/284] Moved gems .setreg files to Registry folder, otherwise they will be missing in a Pre-built SDK Engine (#7140) Signed-off-by: moraaar --- .../{ => Registry}/AssetProcessorGemConfig.setreg | 0 .../{ => Registry}/AssetProcessorGemConfig.setreg | 0 .../{ => Registry}/AssetProcessorGemConfig.setreg | 0 .../{ => Registry}/AssetProcessorGemConfig.setreg | 0 .../{ => Registry}/AssetProcessorGemConfig.setreg | 5 +++++ .../{ => Registry}/AssetProcessorGemConfig.setreg | 0 Registry/AssetProcessorPlatformConfig.setreg | 11 ----------- 7 files changed, 5 insertions(+), 11 deletions(-) rename Gems/Atom/Asset/ImageProcessingAtom/{ => Registry}/AssetProcessorGemConfig.setreg (100%) rename Gems/AtomLyIntegration/CommonFeatures/{ => Registry}/AssetProcessorGemConfig.setreg (100%) rename Gems/AudioEngineWwise/{ => Registry}/AssetProcessorGemConfig.setreg (100%) rename Gems/Blast/{ => Registry}/AssetProcessorGemConfig.setreg (100%) rename Gems/PhysX/{ => Registry}/AssetProcessorGemConfig.setreg (70%) rename Gems/WhiteBox/{ => Registry}/AssetProcessorGemConfig.setreg (100%) diff --git a/Gems/Atom/Asset/ImageProcessingAtom/AssetProcessorGemConfig.setreg b/Gems/Atom/Asset/ImageProcessingAtom/Registry/AssetProcessorGemConfig.setreg similarity index 100% rename from Gems/Atom/Asset/ImageProcessingAtom/AssetProcessorGemConfig.setreg rename to Gems/Atom/Asset/ImageProcessingAtom/Registry/AssetProcessorGemConfig.setreg diff --git a/Gems/AtomLyIntegration/CommonFeatures/AssetProcessorGemConfig.setreg b/Gems/AtomLyIntegration/CommonFeatures/Registry/AssetProcessorGemConfig.setreg similarity index 100% rename from Gems/AtomLyIntegration/CommonFeatures/AssetProcessorGemConfig.setreg rename to Gems/AtomLyIntegration/CommonFeatures/Registry/AssetProcessorGemConfig.setreg diff --git a/Gems/AudioEngineWwise/AssetProcessorGemConfig.setreg b/Gems/AudioEngineWwise/Registry/AssetProcessorGemConfig.setreg similarity index 100% rename from Gems/AudioEngineWwise/AssetProcessorGemConfig.setreg rename to Gems/AudioEngineWwise/Registry/AssetProcessorGemConfig.setreg diff --git a/Gems/Blast/AssetProcessorGemConfig.setreg b/Gems/Blast/Registry/AssetProcessorGemConfig.setreg similarity index 100% rename from Gems/Blast/AssetProcessorGemConfig.setreg rename to Gems/Blast/Registry/AssetProcessorGemConfig.setreg diff --git a/Gems/PhysX/AssetProcessorGemConfig.setreg b/Gems/PhysX/Registry/AssetProcessorGemConfig.setreg similarity index 70% rename from Gems/PhysX/AssetProcessorGemConfig.setreg rename to Gems/PhysX/Registry/AssetProcessorGemConfig.setreg index 993a99616b..a5ac31131c 100644 --- a/Gems/PhysX/AssetProcessorGemConfig.setreg +++ b/Gems/PhysX/Registry/AssetProcessorGemConfig.setreg @@ -10,6 +10,11 @@ "glob": "*.pxheightfield", "params": "copy", "productAssetType": "{B61189FE-B2D7-4AF1-8951-CB5C0F7834FC}" + }, + "RC PhysXMeshAsset": { + "glob": "*.pxmesh", + "params": "copy", + "productAssetType": "{7A2871B9-5EAB-4DE0-A901-B0D2C6920DDB}" } } } diff --git a/Gems/WhiteBox/AssetProcessorGemConfig.setreg b/Gems/WhiteBox/Registry/AssetProcessorGemConfig.setreg similarity index 100% rename from Gems/WhiteBox/AssetProcessorGemConfig.setreg rename to Gems/WhiteBox/Registry/AssetProcessorGemConfig.setreg diff --git a/Registry/AssetProcessorPlatformConfig.setreg b/Registry/AssetProcessorPlatformConfig.setreg index 255bac17e0..87133ba34b 100644 --- a/Registry/AssetProcessorPlatformConfig.setreg +++ b/Registry/AssetProcessorPlatformConfig.setreg @@ -480,17 +480,6 @@ "glob": "*.der", "params": "copy" }, - "RC PhysXMeshAsset": { - "glob": "*.pxmesh", - "params": "copy", - "productAssetType": "{7A2871B9-5EAB-4DE0-A901-B0D2C6920DDB}" - }, - // Copy over cooked PhysX heightfield - "RC PhysX HeightField": { - "glob": "*.pxheightfield", - "params": "copy", - "productAssetType": "{B61189FE-B2D7-4AF1-8951-CB5C0F7834FC}" - }, "RC filetag": { "glob": "*.filetag", "params": "copy", From 56f778483b979808c916c988718bc995af1c9fc8 Mon Sep 17 00:00:00 2001 From: Tom Hulton-Harrop <82228511+hultonha@users.noreply.github.com> Date: Wed, 26 Jan 2022 11:16:18 +0000 Subject: [PATCH 258/284] Fix for editor intersection with helpers disabled for EditorSplineComponent (#7143) * update file name for editor intersection tests Signed-off-by: Tom Hulton-Harrop <82228511+hultonha@users.noreply.github.com> * add additional tests for editor spline component for viewport intersection Signed-off-by: Tom Hulton-Harrop <82228511+hultonha@users.noreply.github.com> --- .../Source/Shape/EditorSplineComponent.cpp | 15 ++ .../Code/Source/Shape/EditorSplineComponent.h | 3 +- .../EditorComponentIntersectionTests.cpp | 169 ++++++++++++++++++ .../EditorShapeComponentIntersectionTests.cpp | 114 ------------ .../lmbrcentral_editor_tests_files.cmake | 2 +- 5 files changed, 187 insertions(+), 116 deletions(-) create mode 100644 Gems/LmbrCentral/Code/Tests/EditorComponentIntersectionTests.cpp delete mode 100644 Gems/LmbrCentral/Code/Tests/EditorShapeComponentIntersectionTests.cpp diff --git a/Gems/LmbrCentral/Code/Source/Shape/EditorSplineComponent.cpp b/Gems/LmbrCentral/Code/Source/Shape/EditorSplineComponent.cpp index 0875f237b3..056e9ddbdb 100644 --- a/Gems/LmbrCentral/Code/Source/Shape/EditorSplineComponent.cpp +++ b/Gems/LmbrCentral/Code/Source/Shape/EditorSplineComponent.cpp @@ -15,6 +15,7 @@ #include #include #include +#include #include #include "MathConversion.h" @@ -357,6 +358,20 @@ namespace LmbrCentral return (static_cast(rayIntersectData.m_distanceSq) < powf(s_lineWidth * screenToWorldScale, 2.0f)); } + bool EditorSplineComponent::SupportsEditorRayIntersect() + { + return AzToolsFramework::HelpersVisible(); + } + + bool EditorSplineComponent::SupportsEditorRayIntersectViewport(const AzFramework::ViewportInfo& viewportInfo) + { + bool helpersVisible = false; + AzToolsFramework::ViewportInteraction::ViewportSettingsRequestBus::EventResult( + helpersVisible, viewportInfo.m_viewportId, + &AzToolsFramework::ViewportInteraction::ViewportSettingsRequestBus::Events::HelpersVisible); + return helpersVisible; + } + void EditorSplineComponent::OnTransformChanged(const AZ::Transform& /*local*/, const AZ::Transform& world) { m_cachedUniformScaleTransform = AzToolsFramework::TransformUniformScale(world); diff --git a/Gems/LmbrCentral/Code/Source/Shape/EditorSplineComponent.h b/Gems/LmbrCentral/Code/Source/Shape/EditorSplineComponent.h index f13879cee5..3ab8a7c795 100644 --- a/Gems/LmbrCentral/Code/Source/Shape/EditorSplineComponent.h +++ b/Gems/LmbrCentral/Code/Source/Shape/EditorSplineComponent.h @@ -62,7 +62,8 @@ namespace LmbrCentral bool EditorSelectionIntersectRayViewport( const AzFramework::ViewportInfo& viewportInfo, const AZ::Vector3& src, const AZ::Vector3& dir, float& distance) override; - bool SupportsEditorRayIntersect() override { return true; }; + bool SupportsEditorRayIntersect() override; + bool SupportsEditorRayIntersectViewport(const AzFramework::ViewportInfo& viewportInfo) override; // EditorComponentSelectionNotificationsBus overrides ... void OnAccentTypeChanged(AzToolsFramework::EntityAccentType accent) override { m_accentType = accent; } diff --git a/Gems/LmbrCentral/Code/Tests/EditorComponentIntersectionTests.cpp b/Gems/LmbrCentral/Code/Tests/EditorComponentIntersectionTests.cpp new file mode 100644 index 0000000000..92582844aa --- /dev/null +++ b/Gems/LmbrCentral/Code/Tests/EditorComponentIntersectionTests.cpp @@ -0,0 +1,169 @@ +/* + * 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 +#include +#include +#include +#include +#include +#include + +#include "Shape/EditorSphereShapeComponent.h" +#include "Shape/EditorSplineComponent.h" + +namespace LmbrCentral +{ + using AzToolsFramework::ViewportInteraction::BuildMouseButtons; + using AzToolsFramework::ViewportInteraction::BuildMouseInteraction; + using AzToolsFramework::ViewportInteraction::BuildMousePick; + + class EditorIntersectionComponentFixture : public UnitTest::ToolsApplicationFixture + { + public: + void SetUpEditorFixtureImpl() override + { + AZ::SerializeContext* serializeContext = nullptr; + AZ::ComponentApplicationBus::BroadcastResult(serializeContext, &AZ::ComponentApplicationBus::Events::GetSerializeContext); + + m_editorSphereShapeComponentDescriptor = + AZStd::unique_ptr(EditorSphereShapeComponent::CreateDescriptor()); + m_editorSphereShapeComponentDescriptor->Reflect(serializeContext); + m_editorSplineComponentDescriptor = AZStd::unique_ptr(EditorSplineComponent::CreateDescriptor()); + m_editorSplineComponentDescriptor->Reflect(serializeContext); + + m_entityId1 = UnitTest::CreateDefaultEditorEntity("Entity1"); + } + + void TearDownEditorFixtureImpl() override + { + bool entityDestroyed = false; + AzToolsFramework::EditorEntityContextRequestBus::BroadcastResult( + entityDestroyed, &AzToolsFramework::EditorEntityContextRequestBus::Events::DestroyEditorEntity, m_entityId1); + + m_editorSplineComponentDescriptor.reset(); + m_editorSphereShapeComponentDescriptor.reset(); + } + + AZ::EntityId m_entityId1; + AZStd::unique_ptr m_editorSphereShapeComponentDescriptor; + AZStd::unique_ptr m_editorSplineComponentDescriptor; + }; + + struct IntersectionQueryOutcome + { + bool m_helpersVisible; + bool m_expectedIntersection; + }; + + using EditorComponentIndirectCallManipulatorViewportInteractionFixture = + UnitTest::IndirectCallManipulatorViewportInteractionFixtureMixin; + + class EditorComponentIndirectCallManipulatorViewportInteractionFixtureParam + : public EditorComponentIndirectCallManipulatorViewportInteractionFixture + , public ::testing::WithParamInterface + { + public: + virtual void CreateEditorComponent(AZ::Entity* entity) = 0; + virtual void SetupEditorComponent(AZ::EntityId entityId) = 0; + + void SetUpEditorFixtureImpl() override + { + EditorComponentIndirectCallManipulatorViewportInteractionFixture::SetUpEditorFixtureImpl(); + + auto* entity1 = AzToolsFramework::GetEntityById(m_entityId1); + AZ_Assert(entity1, "Entity1 could not be found"); + entity1->Deactivate(); + CreateEditorComponent(entity1); + entity1->Activate(); + + AZ::TransformBus::Event( + m_entityId1, &AZ::TransformBus::Events::SetWorldTM, AZ::Transform::CreateTranslation(AZ::Vector3(0.0f, 2.0f, 0.0f))); + + SetupEditorComponent(m_entityId1); + + m_cameraState = AzFramework::CreateDefaultCamera(AZ::Transform::CreateIdentity(), AZ::Vector2(1024.0f, 768.0f)); + } + + void VerifySelectionIntersection() + { + // given + m_viewportManipulatorInteraction->GetViewportInteraction().SetHelpersVisible(GetParam().m_helpersVisible); + + const auto entity1ScreenPosition = + AzFramework::WorldToScreen(AzToolsFramework::GetWorldTranslation(m_entityId1), m_cameraState); + const auto viewportId = m_viewportManipulatorInteraction->GetViewportInteraction().GetViewportId(); + const auto mouseInteraction = BuildMouseInteraction( + BuildMousePick(m_cameraState, entity1ScreenPosition), + BuildMouseButtons(AzToolsFramework::ViewportInteraction::MouseButton::None), + AzToolsFramework::ViewportInteraction::InteractionId(AZ::EntityId(), viewportId), + AzToolsFramework::ViewportInteraction::KeyboardModifiers()); + + // mimic mouse move + m_actionDispatcher->CameraState(m_cameraState)->MousePosition(entity1ScreenPosition); + + // when + float closestDistance = AZStd::numeric_limits::max(); + const bool entityPicked = AzToolsFramework::PickEntity(m_entityId1, mouseInteraction, closestDistance, viewportId); + + // then + EXPECT_THAT(entityPicked, ::testing::Eq(GetParam().m_expectedIntersection)); + } + }; + + class ShapeEditorComponentIndirectCallManipulatorViewportInteractionFixtureParam + : public EditorComponentIndirectCallManipulatorViewportInteractionFixtureParam + { + public: + void CreateEditorComponent(AZ::Entity* entity) override + { + entity->CreateComponent(); + } + + void SetupEditorComponent(AZ::EntityId entityId) override + { + LmbrCentral::SphereShapeComponentRequestsBus::Event( + entityId, &LmbrCentral::SphereShapeComponentRequestsBus::Events::SetRadius, 1.0f); + } + }; + + class SplineEditorComponentIndirectCallManipulatorViewportInteractionFixtureParam + : public EditorComponentIndirectCallManipulatorViewportInteractionFixtureParam + { + public: + void CreateEditorComponent(AZ::Entity* entity) override + { + entity->CreateComponent(); + } + + void SetupEditorComponent([[maybe_unused]] AZ::EntityId entityId) override + { + // unused + } + }; + + TEST_P(ShapeEditorComponentIndirectCallManipulatorViewportInteractionFixtureParam, ShapeIntersectionOnlyHappensWithHelpersEnabled) + { + VerifySelectionIntersection(); + } + + INSTANTIATE_TEST_CASE_P( + All, + ShapeEditorComponentIndirectCallManipulatorViewportInteractionFixtureParam, + testing::Values(IntersectionQueryOutcome{ true, true }, IntersectionQueryOutcome{ false, false })); + + TEST_P(SplineEditorComponentIndirectCallManipulatorViewportInteractionFixtureParam, SplineIntersectionOnlyHappensWithHelpersEnabled) + { + VerifySelectionIntersection(); + } + + INSTANTIATE_TEST_CASE_P( + All, + SplineEditorComponentIndirectCallManipulatorViewportInteractionFixtureParam, + testing::Values(IntersectionQueryOutcome{ true, true }, IntersectionQueryOutcome{ false, false })); +} // namespace LmbrCentral diff --git a/Gems/LmbrCentral/Code/Tests/EditorShapeComponentIntersectionTests.cpp b/Gems/LmbrCentral/Code/Tests/EditorShapeComponentIntersectionTests.cpp deleted file mode 100644 index a3e8865d5a..0000000000 --- a/Gems/LmbrCentral/Code/Tests/EditorShapeComponentIntersectionTests.cpp +++ /dev/null @@ -1,114 +0,0 @@ -/* - * 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 -#include -#include -#include -#include -#include -#include - -#include "Shape/EditorSphereShapeComponent.h" - -namespace LmbrCentral -{ - using AzToolsFramework::ViewportInteraction::BuildMouseButtons; - using AzToolsFramework::ViewportInteraction::BuildMouseInteraction; - using AzToolsFramework::ViewportInteraction::BuildMousePick; - - class EditorSphereShapeComponentFixture : public UnitTest::ToolsApplicationFixture - { - public: - void SetUpEditorFixtureImpl() override - { - AZ::SerializeContext* serializeContext = nullptr; - AZ::ComponentApplicationBus::BroadcastResult(serializeContext, &AZ::ComponentApplicationBus::Events::GetSerializeContext); - - m_editorSphereShapeComponentDescriptor = - AZStd::unique_ptr(EditorSphereShapeComponent::CreateDescriptor()); - m_editorSphereShapeComponentDescriptor->Reflect(serializeContext); - - m_entityId1 = UnitTest::CreateDefaultEditorEntity("Entity1"); - } - - void TearDownEditorFixtureImpl() override - { - bool entityDestroyed = false; - AzToolsFramework::EditorEntityContextRequestBus::BroadcastResult( - entityDestroyed, &AzToolsFramework::EditorEntityContextRequestBus::Events::DestroyEditorEntity, m_entityId1); - - m_editorSphereShapeComponentDescriptor.reset(); - } - - AZ::EntityId m_entityId1; - AZStd::unique_ptr m_editorSphereShapeComponentDescriptor; - }; - - struct IntersectionQueryOutcome - { - bool m_helpersVisible; - bool m_expectedIntersection; - }; - - using ShapeComponentIndirectCallManipulatorViewportInteractionFixture = - UnitTest::IndirectCallManipulatorViewportInteractionFixtureMixin; - - class ShapeComponentIndirectCallManipulatorViewportInteractionFixtureParam - : public ShapeComponentIndirectCallManipulatorViewportInteractionFixture - , public ::testing::WithParamInterface - { - public: - void SetUpEditorFixtureImpl() override - { - ShapeComponentIndirectCallManipulatorViewportInteractionFixture::SetUpEditorFixtureImpl(); - - auto* entity1 = AzToolsFramework::GetEntityById(m_entityId1); - AZ_Assert(entity1, "Entity1 could not be found"); - entity1->Deactivate(); - entity1->CreateComponent(); - entity1->Activate(); - - AZ::TransformBus::Event( - m_entityId1, &AZ::TransformBus::Events::SetWorldTM, AZ::Transform::CreateTranslation(AZ::Vector3(0.0f, 2.0f, 0.0f))); - LmbrCentral::SphereShapeComponentRequestsBus::Event( - m_entityId1, &LmbrCentral::SphereShapeComponentRequestsBus::Events::SetRadius, 1.0f); - - m_cameraState = AzFramework::CreateDefaultCamera(AZ::Transform::CreateIdentity(), AZ::Vector2(1024.0f, 768.0f)); - } - }; - - TEST_P(ShapeComponentIndirectCallManipulatorViewportInteractionFixtureParam, ShapeIntersectionOnlyHappensWithHelpersEnabled) - { - // given - m_viewportManipulatorInteraction->GetViewportInteraction().SetHelpersVisible(GetParam().m_helpersVisible); - - const auto entity1ScreenPosition = AzFramework::WorldToScreen(AzToolsFramework::GetWorldTranslation(m_entityId1), m_cameraState); - const auto viewportId = m_viewportManipulatorInteraction->GetViewportInteraction().GetViewportId(); - const auto mouseInteraction = BuildMouseInteraction( - BuildMousePick(m_cameraState, entity1ScreenPosition), - BuildMouseButtons(AzToolsFramework::ViewportInteraction::MouseButton::None), - AzToolsFramework::ViewportInteraction::InteractionId(AZ::EntityId(), viewportId), - AzToolsFramework::ViewportInteraction::KeyboardModifiers()); - - // mimic mouse move - m_actionDispatcher->CameraState(m_cameraState)->MousePosition(entity1ScreenPosition); - - // when - float closestDistance = AZStd::numeric_limits::max(); - const bool entityPicked = AzToolsFramework::PickEntity(m_entityId1, mouseInteraction, closestDistance, viewportId); - - // then - EXPECT_THAT(entityPicked, ::testing::Eq(GetParam().m_expectedIntersection)); - } - - INSTANTIATE_TEST_CASE_P( - All, - ShapeComponentIndirectCallManipulatorViewportInteractionFixtureParam, - testing::Values(IntersectionQueryOutcome{ true, true }, IntersectionQueryOutcome{ false, false })); -} // namespace LmbrCentral diff --git a/Gems/LmbrCentral/Code/Tests/lmbrcentral_editor_tests_files.cmake b/Gems/LmbrCentral/Code/Tests/lmbrcentral_editor_tests_files.cmake index b667b4bf2e..950f43e80f 100644 --- a/Gems/LmbrCentral/Code/Tests/lmbrcentral_editor_tests_files.cmake +++ b/Gems/LmbrCentral/Code/Tests/lmbrcentral_editor_tests_files.cmake @@ -10,7 +10,7 @@ set(FILES LmbrCentralEditorTest.cpp LmbrCentralReflectionTest.h LmbrCentralReflectionTest.cpp - EditorShapeComponentIntersectionTests.cpp + EditorComponentIntersectionTests.cpp EditorBoxShapeComponentTests.cpp EditorSphereShapeComponentTests.cpp EditorCapsuleShapeComponentTests.cpp From c789814d75ca75002733d8ddcf83a7193d379458 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 26 Jan 2022 07:36:33 -0800 Subject: [PATCH 259/284] adds another maybe_unused to a new variable using assert Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Editor/CryEdit.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Code/Editor/CryEdit.cpp b/Code/Editor/CryEdit.cpp index fcc330b0b2..b9081c3f90 100644 --- a/Code/Editor/CryEdit.cpp +++ b/Code/Editor/CryEdit.cpp @@ -1820,7 +1820,7 @@ bool CCryEditApp::InitInstance() if (GetIEditor()->GetCommandManager()->IsRegistered("editor.open_lnm_editor")) { CCommand0::SUIInfo uiInfo; - bool ok = GetIEditor()->GetCommandManager()->GetUIInfo("editor.open_lnm_editor", uiInfo); + [[maybe_unused]] bool ok = GetIEditor()->GetCommandManager()->GetUIInfo("editor.open_lnm_editor", uiInfo); assert(ok); } From 1a7a350880e505b7e75355420dd25c677abc6e91 Mon Sep 17 00:00:00 2001 From: Danilo Aimini <82231674+AMZN-daimini@users.noreply.github.com> Date: Wed, 26 Jan 2022 08:12:34 -0800 Subject: [PATCH 260/284] Introduce a new Focus Mode API function to retrieve full list of EntityIds that are in focus. (#7159) Signed-off-by: Danilo Aimini <82231674+AMZN-daimini@users.noreply.github.com> --- .../FocusMode/FocusModeInterface.h | 5 ++ .../FocusMode/FocusModeSystemComponent.cpp | 62 +++++++++++++++++++ .../FocusMode/FocusModeSystemComponent.h | 15 +++++ .../Tests/FocusMode/EditorFocusModeTests.cpp | 53 ++++++++++++++++ 4 files changed, 135 insertions(+) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/FocusMode/FocusModeInterface.h b/Code/Framework/AzToolsFramework/AzToolsFramework/FocusMode/FocusModeInterface.h index 5455e8d773..74d207af64 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/FocusMode/FocusModeInterface.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/FocusMode/FocusModeInterface.h @@ -17,6 +17,8 @@ namespace AzToolsFramework { + using EntityIdList = AZStd::vector; + //! FocusModeInterface //! Interface to handle the Editor Focus Mode. class FocusModeInterface @@ -36,6 +38,9 @@ namespace AzToolsFramework //! @return The entity id of the root of the Editor focus, or an invalid entity id if no focus is set. virtual AZ::EntityId GetFocusRoot(AzFramework::EntityContextId entityContextId) = 0; + //! Returns a list of the ids of all the entities that are descendants of the focus root. + virtual EntityIdList GetFocusedEntities(AzFramework::EntityContextId entityContextId) = 0; + //! Returns whether the entity id provided is part of the focused sub-tree. virtual bool IsInFocusSubTree(AZ::EntityId entityId) const = 0; }; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/FocusMode/FocusModeSystemComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/FocusMode/FocusModeSystemComponent.cpp index 16640f4edf..3266daedb3 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/FocusMode/FocusModeSystemComponent.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/FocusMode/FocusModeSystemComponent.cpp @@ -40,10 +40,14 @@ namespace AzToolsFramework void FocusModeSystemComponent::Activate() { AZ::Interface::Register(this); + EditorEntityInfoNotificationBus::Handler::BusConnect(); + Prefab::PrefabPublicNotificationBus::Handler::BusConnect(); } void FocusModeSystemComponent::Deactivate() { + Prefab::PrefabPublicNotificationBus::Handler::BusDisconnect(); + EditorEntityInfoNotificationBus::Handler::BusDisconnect(); AZ::Interface::Unregister(this); } @@ -89,6 +93,9 @@ namespace AzToolsFramework AZ::EntityId previousFocusEntityId = m_focusRoot; m_focusRoot = entityId; + + RefreshFocusedEntityIdList(); + FocusModeNotificationBus::Broadcast(&FocusModeNotifications::OnEditorFocusChanged, previousFocusEntityId, m_focusRoot); } @@ -102,6 +109,11 @@ namespace AzToolsFramework return m_focusRoot; } + EntityIdList FocusModeSystemComponent::GetFocusedEntities([[maybe_unused]] AzFramework::EntityContextId entityContextId) + { + return m_focusedEntityIdList; + } + bool FocusModeSystemComponent::IsInFocusSubTree(AZ::EntityId entityId) const { if (m_focusRoot == AZ::EntityId()) @@ -112,4 +124,54 @@ namespace AzToolsFramework return AzToolsFramework::IsInFocusSubTree(entityId, m_focusRoot); } + void FocusModeSystemComponent::OnEntityInfoUpdatedAddChildEnd(AZ::EntityId parentId, AZ::EntityId childId) + { + // If the parent's entityId is in the list, add the child. + if (auto iter = AZStd::find(m_focusedEntityIdList.begin(), m_focusedEntityIdList.end(), parentId); + iter != m_focusedEntityIdList.end()) + { + m_focusedEntityIdList.push_back(childId); + } + } + + void FocusModeSystemComponent::OnEntityInfoUpdatedRemoveChildEnd([[maybe_unused]] AZ::EntityId parentId, AZ::EntityId childId) + { + // If the removed entityId is in the list, remove it. + if (auto iter = AZStd::find(m_focusedEntityIdList.begin(), m_focusedEntityIdList.end(), childId); + iter != m_focusedEntityIdList.end()) + { + m_focusedEntityIdList.erase(iter); + } + } + + void FocusModeSystemComponent::OnPrefabInstancePropagationEnd() + { + // Can't rely on any of the entities in the list to still exist, refresh the whole thing. + RefreshFocusedEntityIdList(); + } + + void FocusModeSystemComponent::RefreshFocusedEntityIdList() + { + m_focusedEntityIdList.clear(); + + AZStd::queue entityIdQueue; + entityIdQueue.push(m_focusRoot); + + while (!entityIdQueue.empty()) + { + AZ::EntityId entityId = entityIdQueue.front(); + entityIdQueue.pop(); + + m_focusedEntityIdList.push_back(entityId); + + EntityIdList children; + EditorEntityInfoRequestBus::EventResult(children, entityId, &EditorEntityInfoRequestBus::Events::GetChildren); + + for (AZ::EntityId childEntityId : children) + { + entityIdQueue.push(childEntityId); + } + } + } + } // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/FocusMode/FocusModeSystemComponent.h b/Code/Framework/AzToolsFramework/AzToolsFramework/FocusMode/FocusModeSystemComponent.h index dabaa6aaf4..eb246a387f 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/FocusMode/FocusModeSystemComponent.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/FocusMode/FocusModeSystemComponent.h @@ -11,7 +11,9 @@ #include #include +#include #include +#include namespace AzToolsFramework { @@ -21,6 +23,8 @@ namespace AzToolsFramework class FocusModeSystemComponent final : public AZ::Component , private FocusModeInterface + , private EditorEntityInfoNotificationBus::Handler + , private Prefab::PrefabPublicNotificationBus::Handler { public: AZ_COMPONENT(FocusModeSystemComponent, "{6CE522FE-2057-4794-BD05-61E04BD8EA30}"); @@ -42,10 +46,21 @@ namespace AzToolsFramework void SetFocusRoot(AZ::EntityId entityId) override; void ClearFocusRoot(AzFramework::EntityContextId entityContextId) override; AZ::EntityId GetFocusRoot(AzFramework::EntityContextId entityContextId) override; + EntityIdList GetFocusedEntities(AzFramework::EntityContextId entityContextId) override; bool IsInFocusSubTree(AZ::EntityId entityId) const override; + // EditorEntityInfoNotificationBus overrides ... + void OnEntityInfoUpdatedAddChildEnd(AZ::EntityId parentId, AZ::EntityId childId) override; + void OnEntityInfoUpdatedRemoveChildEnd(AZ::EntityId parentId, AZ::EntityId childId) override; + + // PrefabPublicNotificationBus overrides ... + void OnPrefabInstancePropagationEnd() override; + private: + void RefreshFocusedEntityIdList(); + AZ::EntityId m_focusRoot; + EntityIdList m_focusedEntityIdList; }; } // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/Tests/FocusMode/EditorFocusModeTests.cpp b/Code/Framework/AzToolsFramework/Tests/FocusMode/EditorFocusModeTests.cpp index bac60230d6..524323230b 100644 --- a/Code/Framework/AzToolsFramework/Tests/FocusMode/EditorFocusModeTests.cpp +++ b/Code/Framework/AzToolsFramework/Tests/FocusMode/EditorFocusModeTests.cpp @@ -7,6 +7,7 @@ */ #include +#include namespace UnitTest { @@ -30,6 +31,58 @@ namespace UnitTest EXPECT_EQ(m_focusModeInterface->GetFocusRoot(m_editorEntityContextId), AZ::EntityId()); } + TEST_F(EditorFocusModeFixture, GetFocusedEntitiesBase) + { + m_focusModeInterface->SetFocusRoot(m_entityMap[StreetEntityName]); + + AzToolsFramework::EntityIdList entities = m_focusModeInterface->GetFocusedEntities(m_editorEntityContextId); + + EXPECT_EQ(entities.size(), 5); + EXPECT_TRUE(AZStd::find(entities.begin(), entities.end(), m_entityMap[StreetEntityName]) != entities.end()); + EXPECT_TRUE(AZStd::find(entities.begin(), entities.end(), m_entityMap[CarEntityName]) != entities.end()); + EXPECT_TRUE(AZStd::find(entities.begin(), entities.end(), m_entityMap[Passenger1EntityName]) != entities.end()); + EXPECT_TRUE(AZStd::find(entities.begin(), entities.end(), m_entityMap[SportsCarEntityName]) != entities.end()); + EXPECT_TRUE(AZStd::find(entities.begin(), entities.end(), m_entityMap[Passenger2EntityName]) != entities.end()); + } + + TEST_F(EditorFocusModeFixture, GetFocusedEntitiesSiblings) + { + m_focusModeInterface->SetFocusRoot(m_entityMap[SportsCarEntityName]); + + AzToolsFramework::EntityIdList entities = m_focusModeInterface->GetFocusedEntities(m_editorEntityContextId); + + EXPECT_EQ(entities.size(), 2); + EXPECT_TRUE(AZStd::find(entities.begin(), entities.end(), m_entityMap[SportsCarEntityName]) != entities.end()); + EXPECT_TRUE(AZStd::find(entities.begin(), entities.end(), m_entityMap[Passenger2EntityName]) != entities.end()); + } + + TEST_F(EditorFocusModeFixture, GetFocusedEntitiesAddEntity) + { + m_focusModeInterface->SetFocusRoot(m_entityMap[SportsCarEntityName]); + + AZ::EntityId testEntityId = CreateEditorEntity("Test", m_entityMap[Passenger2EntityName]); + + AzToolsFramework::EntityIdList entities = m_focusModeInterface->GetFocusedEntities(m_editorEntityContextId); + + EXPECT_EQ(entities.size(), 3); + EXPECT_TRUE(AZStd::find(entities.begin(), entities.end(), m_entityMap[SportsCarEntityName]) != entities.end()); + EXPECT_TRUE(AZStd::find(entities.begin(), entities.end(), m_entityMap[Passenger2EntityName]) != entities.end()); + EXPECT_TRUE(AZStd::find(entities.begin(), entities.end(), testEntityId) != entities.end()); + } + + TEST_F(EditorFocusModeFixture, GetFocusedEntitiesRemoveEntity) + { + m_focusModeInterface->SetFocusRoot(m_entityMap[SportsCarEntityName]); + + AzToolsFramework::ToolsApplicationRequestBus::Broadcast( + &AzToolsFramework::ToolsApplicationRequests::DeleteEntityAndAllDescendants, m_entityMap[Passenger2EntityName]); + + AzToolsFramework::EntityIdList entities = m_focusModeInterface->GetFocusedEntities(m_editorEntityContextId); + + EXPECT_EQ(entities.size(), 1); + EXPECT_TRUE(AZStd::find(entities.begin(), entities.end(), m_entityMap[SportsCarEntityName]) != entities.end()); + } + TEST_F(EditorFocusModeFixture, IsInFocusSubTreeAncestorsDescendants) { // When the focus is set to an entity, all its descendants are in the focus subtree while the ancestors aren't. From 7ef9a01d245bdc03b6c89cdccda915d232e0ba3b Mon Sep 17 00:00:00 2001 From: Chris Galvan Date: Wed, 26 Jan 2022 10:16:31 -0600 Subject: [PATCH 261/284] Fixed compile issue on Linux Signed-off-by: Chris Galvan --- .../RPI.Reflect/Image/StreamingImageAsset.cpp | 45 +++---------------- 1 file changed, 6 insertions(+), 39 deletions(-) diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp index dc9f0bbaa6..a3cfc581b6 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp @@ -93,42 +93,6 @@ namespace AZ AZ::u16 h; }; - template - float RetrieveFloatValue(const AZ::u8* mem, size_t index) - { - static_assert(false, "Unsupported pixel format"); - } - - template - AZ::u32 RetrieveUintValue(const AZ::u8* mem, size_t index) - { - static_assert(false, "Unsupported pixel format"); - } - - template - AZ::s32 RetrieveIntValue(const AZ::u8* mem, size_t index) - { - static_assert(false, "Unsupported pixel format"); - } - - template <> - float RetrieveFloatValue([[maybe_unused]] const AZ::u8* mem, [[maybe_unused]] size_t index) - { - return 0.0f; - } - - template <> - AZ::u32 RetrieveUintValue([[maybe_unused]] const AZ::u8* mem, [[maybe_unused]] size_t index) - { - return 0; - } - - template <> - AZ::s32 RetrieveIntValue([[maybe_unused]] const AZ::u8* mem, [[maybe_unused]] size_t index) - { - return 0; - } - float ScaleValue(float value, float origMin, float origMax, float scaledMin, float scaledMax) { return ((value - origMin) / (origMax - origMin)) * (scaledMax - scaledMin) + scaledMin; @@ -180,7 +144,8 @@ namespace AZ return actualMem[index]; } default: - return RetrieveFloatValue(mem, index); + AZ_Assert(false, "Unsupported pixel format"); + return 0.0f; } } @@ -203,7 +168,8 @@ namespace AZ return actualMem[index]; } default: - return RetrieveUintValue(mem, index); + AZ_Assert(false, "Unsupported pixel format"); + return 0; } } @@ -226,7 +192,8 @@ namespace AZ return actualMem[index]; } default: - return RetrieveIntValue(mem, index); + AZ_Assert(false, "Unsupported pixel format"); + return 0; } } } From 62775add6d2a3a225b8d7dc975095e48990c929d Mon Sep 17 00:00:00 2001 From: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> Date: Wed, 26 Jan 2022 10:44:35 -0600 Subject: [PATCH 262/284] Implemented Support to allow project's to reference gems via the gem name (#7109) * Implemented Support to allow project's to reference gems via the gem name Updated the enable-gem command to add the name of the enabled gem to the "gem_names" array in the project.json Updated the enable-gem test to validate this functionality Centralized the CMake logic for locating external subdirectories to the Subdirectories.cmake script Added an option to the edit-project-properties and edit-engine-properties o3de.py commands to add/remove/replace the "gem_names" field in the project.json and engine.json respectively Added a CMake function to determine the root CMake "subdirectory" of any input path which is a parent of it. This logic has been used to improve the installation of external gems to the /External directory. Tested out the install layout before submitting PR fixes #7108 Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Fixed the enable-gem test on Linux to resolve the mock path. Renamed all of the o3de python test from "unit_test*.py" to "test*.py" to faciliate the python unittest module picking up the test automatically. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Adding test for the disable_gem command. Fixed some typos in engine_properties.py scrip. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> --- CMakeLists.txt | 56 +---- Gems/PhysXDebug/Code/CMakeLists.txt | 2 +- cmake/FileUtil.cmake | 44 +++- cmake/PAL.cmake | 46 +--- cmake/Platform/Common/Install_common.cmake | 55 +++-- cmake/Projects.cmake | 30 +-- cmake/Subdirectories.cmake | 197 +++++++++++++++++ cmake/cmake_files.cmake | 1 + engine.json | 2 +- scripts/o3de/o3de/cmake.py | 19 +- scripts/o3de/o3de/disable_gem.py | 17 +- scripts/o3de/o3de/enable_gem.py | 17 +- scripts/o3de/o3de/engine_properties.py | 46 +++- scripts/o3de/o3de/project_properties.py | 41 +++- scripts/o3de/tests/CMakeLists.txt | 27 ++- .../{unit_test_cmake.py => test_cmake.py} | 0 scripts/o3de/tests/test_disable_gem.py | 200 ++++++++++++++++++ ..._test_enable_gem.py => test_enable_gem.py} | 31 +-- ...roperties.py => test_engine_properties.py} | 0 ...ne_template.py => test_engine_template.py} | 0 ...m_properties.py => test_gem_properties.py} | 0 ...obal_project.py => test_global_project.py} | 0 ...unit_test_manifest.py => test_manifest.py} | 0 ...stration.py => test_print_registration.py} | 0 ...operties.py => test_project_properties.py} | 0 ...unit_test_register.py => test_register.py} | 0 .../{unit_test_utils.py => test_utils.py} | 0 27 files changed, 635 insertions(+), 196 deletions(-) create mode 100644 cmake/Subdirectories.cmake rename scripts/o3de/tests/{unit_test_cmake.py => test_cmake.py} (100%) create mode 100644 scripts/o3de/tests/test_disable_gem.py rename scripts/o3de/tests/{unit_test_enable_gem.py => test_enable_gem.py} (82%) rename scripts/o3de/tests/{unit_test_engine_properties.py => test_engine_properties.py} (100%) rename scripts/o3de/tests/{unit_test_engine_template.py => test_engine_template.py} (100%) rename scripts/o3de/tests/{unit_test_gem_properties.py => test_gem_properties.py} (100%) rename scripts/o3de/tests/{unit_test_global_project.py => test_global_project.py} (100%) rename scripts/o3de/tests/{unit_test_manifest.py => test_manifest.py} (100%) rename scripts/o3de/tests/{unit_test_print_registration.py => test_print_registration.py} (100%) rename scripts/o3de/tests/{unit_test_project_properties.py => test_project_properties.py} (100%) rename scripts/o3de/tests/{unit_test_register.py => test_register.py} (100%) rename scripts/o3de/tests/{unit_test_utils.py => test_utils.py} (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index efcc866195..3f9f56a606 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -44,51 +44,11 @@ include(cmake/SettingsRegistry.cmake) include(cmake/TestImpactFramework/LYTestImpactFramework.cmake) include(cmake/CMakeFiles.cmake) include(cmake/O3DEJson.cmake) +include(cmake/Subdirectories.cmake) -################################################################################ -# Subdirectory processing -################################################################################ - -# this function is building up the LY_EXTERNAL_SUBDIRS global property -function(add_engine_gem_json_external_subdirectories gem_path) - set(gem_json_path ${gem_path}/gem.json) - if(EXISTS ${gem_json_path}) - read_json_external_subdirs(gem_external_subdirs ${gem_path}/gem.json) - foreach(gem_external_subdir ${gem_external_subdirs}) - file(REAL_PATH ${gem_external_subdir} real_external_subdir BASE_DIRECTORY ${gem_path}) - set_property(GLOBAL APPEND PROPERTY LY_EXTERNAL_SUBDIRS ${real_external_subdir}) - add_engine_gem_json_external_subdirectories(${real_external_subdir}) - endforeach() - endif() -endfunction() - -function(add_engine_json_external_subdirectories) - read_json_external_subdirs(engine_external_subdirs ${LY_ROOT_FOLDER}/engine.json) - foreach(engine_external_subdir ${engine_external_subdirs}) - file(REAL_PATH ${engine_external_subdir} real_external_subdir BASE_DIRECTORY ${LY_ROOT_FOLDER}) - set_property(GLOBAL APPEND PROPERTY LY_EXTERNAL_SUBDIRS ${real_external_subdir}) - add_engine_gem_json_external_subdirectories(${real_external_subdir}) - endforeach() -endfunction() - -function(add_subdirectory_on_externalsubdirs) - get_property(external_subdirs GLOBAL PROPERTY LY_EXTERNAL_SUBDIRS) - list(APPEND LY_EXTERNAL_SUBDIRS ${external_subdirs}) - # Loop over the additional external subdirectories and invoke add_subdirectory on them - foreach(external_directory ${LY_EXTERNAL_SUBDIRS}) - # Hash the external_directory name and append it to the Binary Directory section of add_subdirectory - # This is to deal with potential situations where multiple external directories has the same last directory name - # For example if D:/Company1/RayTracingGem and F:/Company2/Path/RayTracingGem were both added as a subdirectory - file(REAL_PATH ${external_directory} full_directory_path) - string(SHA256 full_directory_hash ${full_directory_path}) - # Truncate the full_directory_hash down to 8 characters to avoid hitting the Windows 260 character path limit - # when the external subdirectory contains relative paths of significant length - string(SUBSTRING ${full_directory_hash} 0 8 full_directory_hash) - # Use the last directory as the suffix path to use for the Binary Directory - get_filename_component(directory_name ${external_directory} NAME) - add_subdirectory(${external_directory} ${CMAKE_BINARY_DIR}/External/${directory_name}-${full_directory_hash}) - endforeach() -endfunction() +# Gather the list of o3de_manifest external Subdirectories +# into the LY_EXTERNAL_SUBDIRS_O3DE_MANIFEST_PROPERTY +add_o3de_manifest_json_external_subdirectories() # Add the projects first so the Launcher can find them include(cmake/Projects.cmake) @@ -99,9 +59,11 @@ endif() if(NOT INSTALLED_ENGINE) # Add external subdirectories listed in the engine.json. LY_EXTERNAL_SUBDIRS is a cache variable so the user can add extra - # external subdirectories. This should go before adding the rest of the targets so the targets are availbe to the launcher. + # external subdirectories. This should go before adding the rest of the targets so the targets are available to the launcher. add_engine_json_external_subdirectories() - add_subdirectory_on_externalsubdirs() + + # Invoke add_subdirectory on external subdirectories that should be used a this point + add_subdirectory_on_external_subdirs() # Add the rest of the targets add_subdirectory(Assets) @@ -114,7 +76,7 @@ if(NOT INSTALLED_ENGINE) else() ly_find_o3de_packages() - add_subdirectory_on_externalsubdirs() + add_subdirectory_on_external_subdirs() endif() ################################################################################ diff --git a/Gems/PhysXDebug/Code/CMakeLists.txt b/Gems/PhysXDebug/Code/CMakeLists.txt index 0886f2bf34..1f5d266fbf 100644 --- a/Gems/PhysXDebug/Code/CMakeLists.txt +++ b/Gems/PhysXDebug/Code/CMakeLists.txt @@ -10,7 +10,7 @@ o3de_find_gem("PhysX" physx_gem_path) set(physx_gem_json ${physx_gem_path}/gem.json) o3de_restricted_path(${physx_gem_json} physx_gem_restricted_path physx_gem_parent_relative_path) -o3de_pal_dir(physx_pal_source_dir ${physx_gem_path}/Code/Source/Platform/${PAL_PLATFORM_NAME} ${physx_gem_restricted_path} ${physx_gem_path} ${physx_gem_parent_relative_path}) +o3de_pal_dir(physx_pal_source_dir ${physx_gem_path}/Code/Source/Platform/${PAL_PLATFORM_NAME} "${physx_gem_restricted_path}" "${physx_gem_path}" "${physx_gem_parent_relative_path}") include(${physx_pal_source_dir}/PAL_${PAL_PLATFORM_NAME_LOWERCASE}.cmake) # for PAL_TRAIT_PHYSX_SUPPORTED diff --git a/cmake/FileUtil.cmake b/cmake/FileUtil.cmake index 5721cf452c..aa63b97c9d 100644 --- a/cmake/FileUtil.cmake +++ b/cmake/FileUtil.cmake @@ -153,6 +153,36 @@ function(ly_get_last_path_segment_concat_sha256 absolute_path output_path) set(${output_path} ${last_path_segment_sha256_path} PARENT_SCOPE) endfunction() +#! ly_get_root_subdirectory_which_is_parent: Locates the root source directory added the input directory +# as a subdirectory of the build, which an actual prefix of the input directory +# This is done by recursing through the PARENT_DIRECTORY "DIRECTORY" property +# The use for this is to locate the top most directory which called add_subdirectory from any input path +# i.e Given an +# LY_ROOT_FOLDER = D:\o3de +# EXTERNAL_SUBDIRS = [D:\TestGem, D:\o3de\Gems\MyGem] +# The LY_ROOT_FOLDER is responsible for invoking add_subdirectory on the external subdirectories +# so it in the PARENT_DIRECTORY property, of the subdirectory, though it might not be an actual "parent" +# If the input path to this function is D:\TestGem\Code, then the return value is D:\TestGem +# If the input path to this function is D:\o3de\Gems\MyGem, then the return value is D:\o3de + +# \arg:absolute_path - directory to locate top most parent "subdirectory", which is an "parent" of the input +# \return:output_path- top most parent subdirectory, which is actual parent(i.e a prefix) +function(ly_get_root_subdirectory_which_is_parent absolute_path output_path) + # Walk up the parent add_subdirectory calls until a parent directory which is not a prefix of the target directory + # is found + cmake_path(SET candidate_path ${absolute_path}) + get_property(parent_subdir DIRECTORY ${candidate_path} PROPERTY PARENT_DIRECTORY) + cmake_path(IS_PREFIX parent_subdir ${candidate_path} is_parent_subdir) + while(parent_subdir AND is_parent_subdir) + cmake_path(SET candidate_path "${parent_subdir}") + get_property(parent_subdir DIRECTORY ${candidate_path} PROPERTY PARENT_DIRECTORY) + cmake_path(IS_PREFIX parent_subdir ${candidate_path} is_parent_subdir) + endwhile() + + message(DEBUG "Root subdirectory of path \"${absolute_path}\" is \"${candidate_path}\"") + set(${output_path} ${candidate_path} PARENT_SCOPE) +endfunction() + #! ly_get_engine_relative_source_dir: Attempts to form a path relative to the BASE_DIRECTORY. # If that fails the last path segment of the absolute_target_source_dir concatenated with a SHA256 hash to form a target directory # \arg:BASE_DIRECTORY - Directory to base relative path against. Defaults to LY_ROOT_FOLDER @@ -167,14 +197,16 @@ function(ly_get_engine_relative_source_dir absolute_target_source_dir output_sou endif() # Get a relative target source directory to the LY root folder if possible - # Otherwise use the final component name + # Otherwise use the top most source directory which led to calling add_subdirectory on the input directory + ly_get_root_subdirectory_which_is_parent(${absolute_target_source_dir} root_subdir_of_target) + cmake_path(RELATIVE_PATH absolute_target_source_dir BASE_DIRECTORY ${root_subdir_of_target} OUTPUT_VARIABLE relative_target_source_dir) + cmake_path(IS_PREFIX LY_ROOT_FOLDER ${absolute_target_source_dir} is_target_source_dir_subdirectory_of_engine) - if(is_target_source_dir_subdirectory_of_engine) - cmake_path(RELATIVE_PATH absolute_target_source_dir BASE_DIRECTORY ${LY_ROOT_FOLDER} OUTPUT_VARIABLE relative_target_source_dir) - else() - ly_get_last_path_segment_concat_sha256(${absolute_target_source_dir} target_source_dir_last_path_segment) + if(NOT is_target_source_dir_subdirectory_of_engine) + cmake_path(GET root_subdir_of_target FILENAME root_subdir_dirname) + set(relative_subdir ${relative_target_source_dir}) unset(relative_target_source_dir) - cmake_path(APPEND relative_target_source_dir "External" ${target_source_dir_last_path_segment}) + cmake_path(APPEND relative_target_source_dir "External" ${root_subdir_dirname} ${relative_subdir}) endif() set(${output_source_dir} ${relative_target_source_dir} PARENT_SCOPE) diff --git a/cmake/PAL.cmake b/cmake/PAL.cmake index a43e601c74..b76fb8ac81 100644 --- a/cmake/PAL.cmake +++ b/cmake/PAL.cmake @@ -51,49 +51,21 @@ function(o3de_read_manifest o3de_manifest_json_data) endif() endfunction() -#! o3de_recurse_gems: returns the gem paths -# -# \arg:object json path -# \arg:gems returns the gems from the external subdirectory elements from the manifest -function(o3de_recurse_gems object_json_path gems) - get_filename_component(object_json_parent_path ${object_json_path} DIRECTORY) - ly_file_read(${object_json_path} json_data) - string(JSON external_subdirectories_count ERROR_VARIABLE json_error LENGTH ${json_data} "external_subdirectories") - if(NOT json_error) - if(external_subdirectories_count GREATER 0) - math(EXPR external_subdirectories_range "${external_subdirectories_count}-1") - foreach(external_subdirectories_index RANGE ${external_subdirectories_range}) - string(JSON external_subdirectories_entry ERROR_VARIABLE json_error GET ${json_data} "external_subdirectories" "${external_subdirectories_index}") - cmake_path(IS_RELATIVE external_subdirectories_entry is_relative) - if(${is_relative}) - cmake_path(ABSOLUTE_PATH external_subdirectories_entry BASE_DIRECTORY ${object_json_parent_path} NORMALIZE OUTPUT_VARIABLE external_subdirectories_entry) - endif() - if(EXISTS ${external_subdirectories_entry}/gem.json) - list(APPEND gem_entries ${external_subdirectories_entry}) - o3de_recurse_gems(${external_subdirectories_entry}/gem.json gem_entries) - endif() - endforeach() - endif() - endif() - set(${gems} ${gem_entries} PARENT_SCOPE) -endfunction() #! o3de_find_gem: returns the gem path # # \arg:gem_name the gem name to find # \arg:the path of the gem function(o3de_find_gem gem_name gem_path) - o3de_get_manifest_path(manifest_path) - if(EXISTS ${manifest_path}) - o3de_recurse_gems(${manifest_path} gems) - endif() - o3de_recurse_gems(${LY_ROOT_FOLDER}/engine.json gems) - foreach(gem ${gems}) - ly_file_read(${gem}/gem.json json_data) - string(JSON gem_json_name ERROR_VARIABLE json_error GET ${json_data} "gem_name") - if(gem_json_name STREQUAL gem_name) - set(${gem_path} ${gem} PARENT_SCOPE) - return() + get_all_external_subdirectories(all_external_subdirs) + foreach(external_subdir IN LISTS all_external_subdirs) + set(candidate_gem_path ${external_subdir}/gem.json) + if(EXISTS ${candidate_gem_path}) + o3de_read_json_key(gem_json_name ${candidate_gem_path} "gem_name") + if(gem_json_name STREQUAL gem_name) + set(${gem_path} ${external_subdir} PARENT_SCOPE) + return() + endif() endif() endforeach() endfunction() diff --git a/cmake/Platform/Common/Install_common.cmake b/cmake/Platform/Common/Install_common.cmake index e42664c107..5d92b9944e 100644 --- a/cmake/Platform/Common/Install_common.cmake +++ b/cmake/Platform/Common/Install_common.cmake @@ -448,9 +448,27 @@ function(ly_setup_cmake_install) # Transform the LY_EXTERNAL_SUBDIRS global property list into a json array set(indent " ") get_property(external_subdirs GLOBAL PROPERTY LY_EXTERNAL_SUBDIRS) + list(REMOVE_DUPLICATES external_subdirs) foreach(external_subdir ${external_subdirs}) - cmake_path(RELATIVE_PATH external_subdir BASE_DIRECTORY ${LY_ROOT_FOLDER} OUTPUT_VARIABLE engine_rel_external_subdir) - list(APPEND relative_external_subdirs "\"${engine_rel_external_subdir}\"") + # If an external subdirectory is not a subdirectory of the engine root, then + # prepend "External" to its subdirectory root + ly_get_root_subdirectory_which_is_parent(${external_subdir} root_subdir_of_external_subdir) + cmake_path(RELATIVE_PATH external_subdir BASE_DIRECTORY ${root_subdir_of_external_subdir} OUTPUT_VARIABLE engine_rel_external_subdir) + + cmake_path(IS_PREFIX LY_ROOT_FOLDER ${external_subdir} is_subdirectory_of_engine) + if(NOT is_subdirectory_of_engine) + cmake_path(GET root_subdir_of_external_subdir FILENAME root_subdir_dirname) + set(relative_subdir ${engine_rel_external_subdir}) + unset(engine_rel_external_subdir) + cmake_path(APPEND engine_rel_external_subdir "External" ${root_subdir_dirname} ${relative_subdir}) + endif() + + set(quoted_engine_rel_external_subdir "\"${engine_rel_external_subdir}\"") + if (quoted_engine_rel_external_subdir IN_LIST relative_external_subdirs) + message(WARNING "An external subdirectory \"${external_subdir}\" has been found twice when generating the engine.json for the install layout") + else() + list(APPEND relative_external_subdirs "\"${engine_rel_external_subdir}\"") + endif() endforeach() list(JOIN relative_external_subdirs ",\n${indent}" LY_INSTALL_EXTERNAL_SUBDIRS) @@ -507,7 +525,17 @@ function(ly_setup_cmake_install) # Add to find_subdirectories all directories in which ly_add_target were called in get_property(all_subdirectories GLOBAL PROPERTY LY_ALL_TARGET_DIRECTORIES) foreach(target_subdirectory IN LISTS all_subdirectories) - cmake_path(RELATIVE_PATH target_subdirectory BASE_DIRECTORY ${LY_ROOT_FOLDER} OUTPUT_VARIABLE relative_target_subdirectory) + ly_get_root_subdirectory_which_is_parent(${target_subdirectory} root_subdir_of_target) + cmake_path(RELATIVE_PATH target_subdirectory BASE_DIRECTORY ${root_subdir_of_target} OUTPUT_VARIABLE relative_target_subdirectory) + + cmake_path(IS_PREFIX LY_ROOT_FOLDER ${target_subdirectory} is_subdirectory_of_engine) + if(NOT is_subdirectory_of_engine) + cmake_path(GET root_subdir_of_target FILENAME root_subdir_dirname) + set(relative_subdir ${relative_target_subdirectory}) + unset(relative_target_subdirectory) + cmake_path(APPEND relative_target_subdirectory "External" ${root_subdir_dirname} ${relative_subdir}) + endif() + string(APPEND find_subdirectories "add_subdirectory(${relative_target_subdirectory})\n") endforeach() set(permutation_find_subdirectories ${CMAKE_CURRENT_BINARY_DIR}/cmake/Platform/${PAL_PLATFORM_NAME}/${LY_BUILD_PERMUTATION}/o3de_subdirectories_${PAL_PLATFORM_NAME_LOWERCASE}.cmake) @@ -657,12 +685,12 @@ function(ly_setup_assets) set_property(GLOBAL APPEND PROPERTY global_gem_candidate_dirs_prop ${gem_candidate_dir}) endforeach() - # Iterate over each gem candidate directories and read populate a directory property + # Iterate over each gem candidate directories and populate a directory property # containing the files to copy over get_property(gem_candidate_dirs GLOBAL PROPERTY global_gem_candidate_dirs_prop) foreach(gem_candidate_dir IN LISTS gem_candidate_dirs) get_property(filtered_asset_paths DIRECTORY ${gem_candidate_dir} PROPERTY directory_filtered_asset_paths) - ly_get_last_path_segment_concat_sha256(${gem_candidate_dir} last_gem_root_path_segment) + # Check if the gem is a subdirectory of the engine cmake_path(IS_PREFIX LY_ROOT_FOLDER ${gem_candidate_dir} is_gem_subdirectory_of_engine) @@ -697,15 +725,16 @@ function(ly_setup_assets) # gem directories and files to install get_property(gems_assets_paths DIRECTORY ${gem_candidate_dir} PROPERTY gems_assets_paths) foreach(gem_absolute_path IN LISTS gems_assets_paths) - if(is_gem_subdirectory_of_engine) - cmake_path(RELATIVE_PATH gem_absolute_path BASE_DIRECTORY ${LY_ROOT_FOLDER} OUTPUT_VARIABLE gem_install_dest_dir) - else() - # The gem resides outside of the LY_ROOT_FOLDER, so the destination is made relative to the - # gem candidate directory and placed under the "External" directory" - # directory - cmake_path(RELATIVE_PATH gem_absolute_path BASE_DIRECTORY ${gem_candidate_dir} OUTPUT_VARIABLE gem_relative_path) + # If an external subdirectory is not a subdirectory of the engine root, then + # prepend "External" to its subdirectory root + ly_get_root_subdirectory_which_is_parent(${gem_candidate_dir} root_subdir_of_gem) + cmake_path(RELATIVE_PATH gem_absolute_path BASE_DIRECTORY ${root_subdir_of_gem} OUTPUT_VARIABLE gem_install_dest_dir) + + if(NOT is_gem_subdirectory_of_engine) + cmake_path(GET root_subdir_of_gem FILENAME root_subdir_dirname) + set(relative_subdir ${gem_install_dest_dir}) unset(gem_install_dest_dir) - cmake_path(APPEND gem_install_dest_dir "External" ${last_gem_root_path_segment} ${gem_relative_path}) + cmake_path(APPEND gem_install_dest_dir "External" ${root_subdir_dirname} ${relative_subdir}) endif() cmake_path(GET gem_install_dest_dir PARENT_PATH gem_install_dest_dir) diff --git a/cmake/Projects.cmake b/cmake/Projects.cmake index c6aa6c382a..acfa921ef1 100644 --- a/cmake/Projects.cmake +++ b/cmake/Projects.cmake @@ -118,30 +118,6 @@ function(ly_generate_project_build_path_setreg project_real_path) file(GENERATE OUTPUT ${project_user_build_path_setreg_file} CONTENT ${project_build_path_setreg_content}) endfunction() -function(add_gem_json_external_subdirectories gem_path) - set(gem_json_path ${gem_path}/gem.json) - if(EXISTS ${gem_json_path}) - read_json_external_subdirs(gem_external_subdirs ${gem_path}/gem.json) - foreach(gem_external_subdir ${gem_external_subdirs}) - file(REAL_PATH ${gem_external_subdir} real_external_subdir BASE_DIRECTORY ${gem_path}) - set_property(GLOBAL APPEND PROPERTY LY_EXTERNAL_SUBDIRS ${real_external_subdir}) - add_gem_json_external_subdirectories(${real_external_subdir}) - endforeach() - endif() -endfunction() - -function(add_project_json_external_subdirectories project_path) - set(project_json_path ${project_path}/project.json) - if(EXISTS ${project_json_path}) - read_json_external_subdirs(project_external_subdirs ${project_path}/project.json) - foreach(project_external_subdir ${project_external_subdirs}) - file(REAL_PATH ${project_external_subdir} real_external_subdir BASE_DIRECTORY ${project_path}) - set_property(GLOBAL APPEND PROPERTY LY_EXTERNAL_SUBDIRS ${real_external_subdir}) - add_gem_json_external_subdirectories(${real_external_subdir}) - endforeach() - endif() -endfunction() - function(install_project_asset_artifacts project_real_path) # The cmake tar command has a bit of a flaw # Any paths within the archive files it creates are relative to the current working directory. @@ -212,16 +188,16 @@ foreach(project ${LY_PROJECTS}) # when the external subdirectory contains relative paths of significant length string(SUBSTRING ${full_directory_hash} 0 8 full_directory_hash) - get_filename_component(project_folder_name ${project} NAME) + cmake_path(GET project FILENAME project_folder_name ) list(APPEND LY_PROJECTS_FOLDER_NAME ${project_folder_name}) add_subdirectory(${project} "${project_folder_name}-${full_directory_hash}") ly_generate_project_build_path_setreg(${full_directory_path}) - add_project_json_external_subdirectories(${full_directory_path}) # Get project name o3de_read_json_key(project_name ${full_directory_path}/project.json "project_name") + add_project_json_external_subdirectories(${full_directory_path} "${project_name}") - install_project_asset_artifacts(${full_directory_path}) + install_project_asset_artifacts(${full_directory_path}) endforeach() diff --git a/cmake/Subdirectories.cmake b/cmake/Subdirectories.cmake new file mode 100644 index 0000000000..3580710c82 --- /dev/null +++ b/cmake/Subdirectories.cmake @@ -0,0 +1,197 @@ +# +# 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_guard() + +################################################################################ +# Subdirectory processing +################################################################################ + +# this function is building up the LY_EXTERNAL_SUBDIRS global property +function(add_engine_gem_json_external_subdirectories gem_path) + set(gem_json_path ${gem_path}/gem.json) + if(EXISTS ${gem_json_path}) + read_json_external_subdirs(gem_external_subdirs ${gem_path}/gem.json) + foreach(gem_external_subdir ${gem_external_subdirs}) + file(REAL_PATH ${gem_external_subdir} real_external_subdir BASE_DIRECTORY ${gem_path}) + + # Append external subdirectory if it is not in global property + get_property(current_external_subdirs GLOBAL PROPERTY LY_EXTERNAL_SUBDIRS) + if(NOT real_external_subdir IN_LIST current_external_subdirs) + set_property(GLOBAL APPEND PROPERTY LY_EXTERNAL_SUBDIRS ${real_external_subdir}) + # Also append the project external subdirectores to the LY_EXTERNAL_SUBDIRS_ENGINE property + set_property(GLOBAL APPEND PROPERTY LY_EXTERNAL_SUBDIRS_ENGINE ${real_external_subdir}) + add_engine_gem_json_external_subdirectories(${real_external_subdir}) + endif() + endforeach() + endif() +endfunction() + +function(add_engine_json_external_subdirectories) + set(engine_json_path ${LY_ROOT_FOLDER}/engine.json) + if(EXISTS ${engine_json_path}) + read_json_external_subdirs(engine_external_subdirs ${engine_json_path}) + foreach(engine_external_subdir ${engine_external_subdirs}) + file(REAL_PATH ${engine_external_subdir} real_external_subdir BASE_DIRECTORY ${LY_ROOT_FOLDER}) + + # Append external subdirectory if it is not in global property + get_property(current_external_subdirs GLOBAL PROPERTY LY_EXTERNAL_SUBDIRS) + if(NOT real_external_subdir IN_LIST current_external_subdirs) + set_property(GLOBAL APPEND PROPERTY LY_EXTERNAL_SUBDIRS ${real_external_subdir}) + # Also append the project external subdirectores to the LY_EXTERNAL_SUBDIRS_ENGINE property + set_property(GLOBAL APPEND PROPERTY LY_EXTERNAL_SUBDIRS_ENGINE ${real_external_subdir}) + add_engine_gem_json_external_subdirectories(${real_external_subdir}) + endif() + endforeach() + endif() +endfunction() + + +function(add_project_gem_json_external_subdirectories gem_path project_name) + set(gem_json_path ${gem_path}/gem.json) + if(EXISTS ${gem_json_path}) + read_json_external_subdirs(gem_external_subdirs ${gem_path}/gem.json) + foreach(gem_external_subdir ${gem_external_subdirs}) + file(REAL_PATH ${gem_external_subdir} real_external_subdir BASE_DIRECTORY ${gem_path}) + + # Append external subdirectory if it is not in global property + get_property(current_external_subdirs GLOBAL PROPERTY LY_EXTERNAL_SUBDIRS) + if(NOT real_external_subdir IN_LIST current_external_subdirs) + set_property(GLOBAL APPEND PROPERTY LY_EXTERNAL_SUBDIRS ${real_external_subdir}) + # Also append the project external subdirectores to the LY_EXTERNAL_SUBDIRS_${project_name} property + set_property(GLOBAL APPEND PROPERTY LY_EXTERNAL_SUBDIRS_${project_name} ${real_external_subdir}) + add_project_gem_json_external_subdirectories(${real_external_subdir} "${project_name}") + endif() + endforeach() + endif() +endfunction() + +function(add_project_json_external_subdirectories project_path project_name) + set(project_json_path ${project_path}/project.json) + if(EXISTS ${project_json_path}) + read_json_external_subdirs(project_external_subdirs ${project_path}/project.json) + foreach(project_external_subdir ${project_external_subdirs}) + file(REAL_PATH ${project_external_subdir} real_external_subdir BASE_DIRECTORY ${project_path}) + + # Append external subdirectory if it is not in global property + get_property(current_external_subdirs GLOBAL PROPERTY LY_EXTERNAL_SUBDIRS) + if(NOT real_external_subdir IN_LIST current_external_subdirs) + set_property(GLOBAL APPEND PROPERTY LY_EXTERNAL_SUBDIRS ${real_external_subdir}) + # Also append the project external subdirectores to the LY_EXTERNAL_SUBDIRS_${project_name} property + set_property(GLOBAL APPEND PROPERTY LY_EXTERNAL_SUBDIRS_${project_name} ${real_external_subdir}) + add_project_gem_json_external_subdirectories(${real_external_subdir} "${project_name}") + endif() + endforeach() + endif() +endfunction() + + +#! add_o3de_manifest_gem_json_external_subdirectories : Recurses through external subdirectories +#! originally found in the add_o3de_manifest_json_external_subdirectories command +function(add_o3de_manifest_gem_json_external_subdirectories gem_path) + set(gem_json_path ${gem_path}/gem.json) + if(EXISTS ${gem_json_path}) + read_json_external_subdirs(gem_external_subdirs ${gem_path}/gem.json) + foreach(gem_external_subdir ${gem_external_subdirs}) + file(REAL_PATH ${gem_external_subdir} real_external_subdir BASE_DIRECTORY ${gem_path}) + + # Append external subdirectory ONLY to LY_EXTERNAL_SUBDIRS_O3DE_MANIFEST PROPERTY + # It is not appended to LY_EXTERNAL_SUBDIRS unless that gem is used by the project + get_property(current_external_subdirs GLOBAL PROPERTY LY_EXTERNAL_SUBDIRS_O3DE_MANIFEST) + if(NOT real_external_subdir IN_LIST current_external_subdirs) + set_property(GLOBAL APPEND PROPERTY LY_EXTERNAL_SUBDIRS_O3DE_MANIFEST ${real_external_subdir}) + add_o3de_manifest_gem_json_external_subdirectories(${real_external_subdir}) + endif() + endforeach() + endif() +endfunction() + +#! add_o3de_manifest_json_external_subdirectories : Adds the list of external_subdirectories +#! in the user o3de_manifest.json to the LY_EXTERNAL_SUBDIRS_O3DE_MANIFEST property +function(add_o3de_manifest_json_external_subdirectories) + o3de_get_manifest_path(manifest_path) + if(EXISTS ${manifest_path}) + read_json_external_subdirs(o3de_manifest_external_subdirs ${manifest_path}) + foreach(manifest_external_subdir ${o3de_manifest_external_subdirs}) + file(REAL_PATH ${manifest_external_subdir} real_external_subdir BASE_DIRECTORY ${LY_ROOT_FOLDER}) + + # Append external subdirectory ONLY to LY_EXTERNAL_SUBDIRS_O3DE_MANIFEST PROPERTY + # It is not appended to LY_EXTERNAL_SUBDIRS unless that gem is used by the project + get_property(current_external_subdirs GLOBAL PROPERTY LY_EXTERNAL_SUBDIRS_O3DE_MANIFEST) + if(NOT real_external_subdir IN_LIST current_external_subdirs) + set_property(GLOBAL APPEND PROPERTY LY_EXTERNAL_SUBDIRS_O3DE_MANIFEST ${real_external_subdir}) + add_o3de_manifest_gem_json_external_subdirectories(${real_external_subdir}) + endif() + endforeach() + endif() +endfunction() + +#! Gather unique_list of all external subdirectories that is union +#! of the engine.json, project.json, o3de_manifest.json and any gem.json files found visiting +function(get_all_external_subdirectories output_subdirs) + get_property(all_external_subdirs GLOBAL PROPERTY LY_EXTERNAL_SUBDIRS) + get_property(manifest_external_subdirs GLOBAL PROPERTY LY_EXTERNAL_SUBDIRS_O3DE_MANIFEST) + list(APPEND all_external_subdirs ${manifest_external_subdirs}) + list(REMOVE_DUPLICATES all_external_subdirs) + set(${output_subdirs} ${all_external_subdirs} PARENT_SCOPE) +endfunction() + +#! add_registered_gems_to_external_subdirs: +#! Accepts a list of gem_names (which can be read from the project.json or engine.json) +#! and cross checks them against union of all external subdirectories to determine the gem path. +#! If that gem exist it is appended to LY_EXTERNAL_SUBDIRS so that that the build generator +#! adds to the generated build project. +#! Otherwise a fatal error is logged indicating that is not gem could not be found in the list of external subdirectories +function(add_registered_gems_to_external_subdirs gem_names) + if (gem_names) + get_all_external_subdirectories(all_external_subdirs) + foreach(gem_name IN LISTS gem_names) + unset(gem_path) + o3de_find_gem(${gem_name} gem_path) + if (gem_path) + set_property(GLOBAL PROPERTY LY_EXTERNAL_SUBDIRS ${gem_path} APPEND) + else() + list(JOIN all_external_subdirs "\n" external_subdirs_formatted) + message(SEND_ERROR "The gem \"${gem_name}\" from the \"gem_names\" field in the engine.json/project.json " + " could not be found in any gem.json from the following list of registered external subdirectories:\n" + "${external_subdirs_formatted}") + break() + endif() + endforeach() + endif() +endfunction() + +function(add_subdirectory_on_external_subdirs) + # Lookup the paths of "gem_names" array all project.json files and engine.json + # and append them to the LY_EXTERNAL_SUBDIRS property + foreach(project ${LY_PROJECTS}) + file(REAL_PATH ${project} full_directory_path BASE_DIRECTORY ${CMAKE_SOURCE_DIR}) + o3de_read_json_array(gem_names ${full_directory_path}/project.json "gem_names") + add_registered_gems_to_external_subdirs("${gem_names}") + endforeach() + o3de_read_json_array(gem_names ${LY_ROOT_FOLDER}/engine.json "gem_names") + add_registered_gems_to_external_subdirs("${gem_names}") + + get_property(external_subdirs GLOBAL PROPERTY LY_EXTERNAL_SUBDIRS) + list(APPEND LY_EXTERNAL_SUBDIRS ${external_subdirs}) + list(REMOVE_DUPLICATES LY_EXTERNAL_SUBDIRS) + # Loop over the additional external subdirectories and invoke add_subdirectory on them + foreach(external_directory ${LY_EXTERNAL_SUBDIRS}) + # Hash the external_directory name and append it to the Binary Directory section of add_subdirectory + # This is to deal with potential situations where multiple external directories has the same last directory name + # For example if D:/Company1/RayTracingGem and F:/Company2/Path/RayTracingGem were both added as a subdirectory + file(REAL_PATH ${external_directory} full_directory_path) + string(SHA256 full_directory_hash ${full_directory_path}) + # Truncate the full_directory_hash down to 8 characters to avoid hitting the Windows 260 character path limit + # when the external subdirectory contains relative paths of significant length + string(SUBSTRING ${full_directory_hash} 0 8 full_directory_hash) + # Use the last directory as the suffix path to use for the Binary Directory + cmake_path(GET external_directory FILENAME directory_name) + add_subdirectory(${external_directory} ${CMAKE_BINARY_DIR}/External/${directory_name}-${full_directory_hash}) + endforeach() +endfunction() diff --git a/cmake/cmake_files.cmake b/cmake/cmake_files.cmake index caeab9d12e..90f1e9a2d8 100644 --- a/cmake/cmake_files.cmake +++ b/cmake/cmake_files.cmake @@ -35,6 +35,7 @@ set(FILES Projects.cmake RuntimeDependencies.cmake SettingsRegistry.cmake + Subdirectories.cmake UnitTest.cmake Version.cmake ) diff --git a/engine.json b/engine.json index 51b6738001..5c64eed308 100644 --- a/engine.json +++ b/engine.json @@ -54,7 +54,7 @@ "Gems/NvCloth", "Gems/PhysX", "Gems/PhysXDebug", - "Gems/Prefab", + "Gems/Prefab/PrefabBuilder", "Gems/Presence", "Gems/PrimitiveAssets", "Gems/Profiler", diff --git a/scripts/o3de/o3de/cmake.py b/scripts/o3de/o3de/cmake.py index 7a820a9677..163d77f2f4 100644 --- a/scripts/o3de/o3de/cmake.py +++ b/scripts/o3de/o3de/cmake.py @@ -150,7 +150,10 @@ def remove_gem_dependency(cmake_file: pathlib.Path, # If the in_gem_list was flipped to false, that means the currently parsed line contained the # line end marker, so append that to the result_line result_line += enable_gem_end_marker if not in_gem_list else '' - t_data.append(result_line + '\n') + # Strip of trailing whitespace. This also strips result lines which are empty of the indent + result_line = result_line.rstrip() + if result_line: + t_data.append(result_line + '\n') else: t_data.append(line) @@ -165,11 +168,6 @@ def remove_gem_dependency(cmake_file: pathlib.Path, return 0 -def get_project_gems(project_path: pathlib.Path, - platform: str = 'Common') -> set: - return get_gems_from_cmake_file(get_enabled_gem_cmake_file(project_path=project_path, platform=platform)) - - def get_enabled_gems(cmake_file: pathlib.Path) -> set: """ Gets a list of enabled gems from the cmake file @@ -206,15 +204,6 @@ def get_enabled_gems(cmake_file: pathlib.Path) -> set: return gem_target_set -def get_project_gem_paths(project_path: pathlib.Path, - platform: str = 'Common') -> set: - gem_names = get_project_gems(project_path, platform) - gem_paths = set() - for gem_name in gem_names: - gem_paths.add(manifest.get_registered(gem_name=gem_name, project_path=project_path)) - return gem_paths - - def get_enabled_gem_cmake_file(project_name: str = None, project_path: str or pathlib.Path = None, platform: str = 'Common') -> pathlib.Path or None: diff --git a/scripts/o3de/o3de/disable_gem.py b/scripts/o3de/o3de/disable_gem.py index eecc765d32..617ad8ba41 100644 --- a/scripts/o3de/o3de/disable_gem.py +++ b/scripts/o3de/o3de/disable_gem.py @@ -15,7 +15,7 @@ import os import pathlib import sys -from o3de import cmake, manifest, utils +from o3de import cmake, manifest, project_properties, utils logger = logging.getLogger('o3de.disable_gem') logging.basicConfig(format=utils.LOG_FORMAT) @@ -68,8 +68,8 @@ def disable_gem_in_project(gem_name: str = None, f' {project_path / "project.json"}, engine.json') return 1 gem_path = pathlib.Path(gem_path).resolve() - # make sure this gem already exists if we're adding. We can always remove a gem. - if not gem_path.exists(): + # make sure the gem path is a directory + if not gem_path.is_dir(): logger.error(f'Gem Path {gem_path} does not exist.') return 1 @@ -79,9 +79,6 @@ def disable_gem_in_project(gem_name: str = None, logger.error(f'Could not read gem.json content under {gem_path}.') return 1 - # when removing we will try to do as much as possible even with failures so ret_val will be the last error code - ret_val = 0 - if not enabled_gem_file: enabled_gem_file = cmake.get_enabled_gem_cmake_file(project_path=project_path) @@ -89,10 +86,14 @@ def disable_gem_in_project(gem_name: str = None, if not enabled_gem_file.is_file(): logger.error(f'Enabled gem file {enabled_gem_file} is not present.') return 1 + # remove the gem error_code = cmake.remove_gem_dependency(enabled_gem_file, gem_json_data['gem_name']) - if error_code: - ret_val = error_code + + # Remove the name of the gem from the project.json "gem_names" field if the gem is neither + # registered with the project.json nor engine.json + ret_val = project_properties.edit_project_props(project_path, + delete_gem_names=gem_json_data['gem_name']) or error_code return ret_val diff --git a/scripts/o3de/o3de/enable_gem.py b/scripts/o3de/o3de/enable_gem.py index ea79f6c73f..bcfcd7157a 100644 --- a/scripts/o3de/o3de/enable_gem.py +++ b/scripts/o3de/o3de/enable_gem.py @@ -16,7 +16,7 @@ import os import pathlib import sys -from o3de import cmake, manifest, register, validation, utils +from o3de import cmake, manifest, project_properties, register, validation, utils logger = logging.getLogger('o3de.enable_gem') logging.basicConfig(format=utils.LOG_FORMAT) @@ -33,7 +33,7 @@ def enable_gem_in_project(gem_name: str = None, :param gem_path: path to the gem to add :param project_name: name of to the project to add the gem to :param project_path: path to the project to add the gem to - :param enabled_gem_file_file: if this dependency goes/is in a specific file + :param enabled_gem_file: if this dependency goes/is in a specific file :return: 0 for success or non 0 failure code """ # we need either a project name or path @@ -80,8 +80,6 @@ def enable_gem_in_project(gem_name: str = None, logger.error(f'Could not read gem.json content under {gem_path}.') return 1 - - ret_val = 0 if enabled_gem_file: # make sure this is a project has an enabled gems file if not enabled_gem_file.is_file(): @@ -96,17 +94,16 @@ def enable_gem_in_project(gem_name: str = None, if not project_enabled_gem_file.is_file(): project_enabled_gem_file.touch() - # Before adding the gem_dependency check if the project is registered in either the project or engine - # manifest + # Before adding the gem_dependency check if the project is registered in either the project or engine manifest buildable_gems = manifest.get_engine_gems() buildable_gems.extend(manifest.get_project_gems(project_path)) - # Convert each path to pathlib.Path object and filter out duplictes using dict.fromkeys + # Convert each path to pathlib.Path object and filter out duplicates using dict.fromkeys buildable_gems = list(dict.fromkeys(map(lambda gem_path_string: pathlib.Path(gem_path_string), buildable_gems))) ret_val = 0 - # If the gem is not part of buildable set, it needs to be registered - if not gem_path in buildable_gems: - ret_val = register.register(gem_path=gem_path, external_subdir_project_path=project_path) + # If the gem is not part of buildable set, it's gem_name should be registered to the "gem_names" field + if gem_path not in buildable_gems: + ret_val = project_properties.edit_project_props(project_path, new_gem_names=gem_json_data['gem_name']) # add the gem if it is registered in either the project.json or engine.json ret_val = ret_val or cmake.add_gem_dependency(project_enabled_gem_file, gem_json_data['gem_name']) diff --git a/scripts/o3de/o3de/engine_properties.py b/scripts/o3de/o3de/engine_properties.py index 636e32704e..06bff88d64 100644 --- a/scripts/o3de/o3de/engine_properties.py +++ b/scripts/o3de/o3de/engine_properties.py @@ -18,11 +18,35 @@ from o3de import manifest, utils logger = logging.getLogger('o3de.engine_properties') logging.basicConfig(format=utils.LOG_FORMAT) +def _edit_gem_names(engine_json: dict, + new_gem_names: str or list = None, + delete_gem_names: str or list = None, + replace_gem_names: str or list = None): + if new_gem_names: + tag_list = new_gem_names.split() if isinstance(new_gem_names, str) else new_gem_names + engine_json.setdefault('gem_names', []).extend(tag_list) + if delete_gem_names: + removal_list = delete_gem_names.split() if isinstance(delete_gem_names, str) else delete_gem_names + if 'gem_names' in engine_json: + for tag in removal_list: + if tag in engine_json['gem_names']: + engine_json['gem_names'].remove(tag) + if replace_gem_names: + tag_list = replace_gem_names.split() if isinstance(replace_gem_names, str) else replace_gem_names + engine_json['gem_names'] = tag_list + + # Remove duplicates from list + engine_json['gem_names'] = list(dict.fromkeys(engine_json.get('gem_names', []))) + def edit_engine_props(engine_path: pathlib.Path = None, engine_name: str = None, new_name: str = None, - new_version: str = None) -> int: + new_version: str = None, + new_gem_names: str or list = None, + delete_gem_names: str or list = None, + replace_gem_names: str or list = None + ) -> int: if not engine_path and not engine_name: logger.error(f'Either a engine path or a engine name must be supplied to lookup engine.json') return 1 @@ -51,13 +75,20 @@ def edit_engine_props(engine_path: pathlib.Path = None, if new_version: engine_json_data['O3DEVersion'] = new_version + # Update the gem_names field in the engine.json + _edit_gem_names(engine_json_data, new_gem_names, delete_gem_names, replace_gem_names) + return 0 if manifest.save_o3de_manifest(engine_json_data, pathlib.Path(engine_path) / 'engine.json') else 1 def _edit_engine_props(args: argparse) -> int: return edit_engine_props(args.engine_path, - args.engine_name, - args.engine_new_name, - args.engine_version) + args.engine_name, + args.engine_new_name, + args.engine_version, + args.add_gem_names, + args.delete_gem_names, + args.replace_gem_names + ) def add_parser_args(parser): group = parser.add_mutually_exclusive_group(required=True) @@ -70,6 +101,13 @@ def add_parser_args(parser): help='Sets the name for the engine.') group.add_argument('-ev', '--engine-version', type=str, required=False, help='Sets the version for the engine.') + group = parser.add_mutually_exclusive_group(required=False) + group.add_argument('-agn', '--add-gem-names', type=str, nargs='*', required=False, + help='Adds gem name(s) to gem_names field. Space delimited list (ex. -at A B C)') + group.add_argument('-dgn', '--delete-gem-names', type=str, nargs='*', required=False, + help='Removes gem name(s) from the gem_names field. Space delimited list (ex. -dt A B C') + group.add_argument('-rgn', '--replace-gem-names', type=str, nargs='*', required=False, + help='Replace entirety of gem_names field with space delimited list of values') parser.set_defaults(func=_edit_engine_props) def add_args(subparsers) -> None: diff --git a/scripts/o3de/o3de/project_properties.py b/scripts/o3de/o3de/project_properties.py index 9ee55773b5..f809bc8153 100644 --- a/scripts/o3de/o3de/project_properties.py +++ b/scripts/o3de/o3de/project_properties.py @@ -28,6 +28,27 @@ def get_project_props(name: str = None, path: pathlib.Path = None) -> dict: return proj_json +def _edit_gem_names(proj_json: dict, + new_gem_names: str or list = None, + delete_gem_names: str or list = None, + replace_gem_names: str or list = None): + if new_gem_names: + tag_list = new_gem_names.split() if isinstance(new_gem_names, str) else new_gem_names + proj_json.setdefault('gem_names', []).extend(tag_list) + if delete_gem_names: + removal_list = delete_gem_names.split() if isinstance(delete_gem_names, str) else delete_gem_names + if 'gem_names' in proj_json: + for tag in removal_list: + if tag in proj_json['gem_names']: + proj_json['gem_names'].remove(tag) + if replace_gem_names: + tag_list = replace_gem_names.split() if isinstance(replace_gem_names, str) else replace_gem_names + proj_json['gem_names'] = tag_list + + # Remove duplicates from list + proj_json['gem_names'] = list(dict.fromkeys(proj_json.get('gem_names', []))) + + def edit_project_props(proj_path: pathlib.Path = None, proj_name: str = None, new_name: str = None, @@ -38,7 +59,11 @@ def edit_project_props(proj_path: pathlib.Path = None, new_icon: str = None, new_tags: str or list = None, delete_tags: str or list = None, - replace_tags: str or list = None) -> int: + replace_tags: str or list = None, + new_gem_names: str or list = None, + delete_gem_names: str or list = None, + replace_gem_names: str or list = None + ) -> int: proj_json = get_project_props(proj_name, proj_path) if not proj_json: @@ -74,6 +99,8 @@ def edit_project_props(proj_path: pathlib.Path = None, if replace_tags: tag_list = replace_tags.split() if isinstance(replace_tags, str) else replace_tags proj_json['user_tags'] = tag_list + # Update the gem_names field in the project.json + _edit_gem_names(proj_json, new_gem_names, delete_gem_names, replace_gem_names) return 0 if manifest.save_o3de_manifest(proj_json, pathlib.Path(proj_path) / 'project.json') else 1 @@ -89,7 +116,10 @@ def _edit_project_props(args: argparse) -> int: args.project_icon, args.add_tags, args.delete_tags, - args.replace_tags) + args.replace_tags, + args.add_gem_names, + args.delete_gem_names, + args.replace_gem_names) def add_parser_args(parser): @@ -118,6 +148,13 @@ def add_parser_args(parser): help='Removes tag(s) from the user_tags property. Space delimited list (ex. -dt A B C') group.add_argument('-rt', '--replace-tags', type=str, nargs ='*', required=False, help='Replace entirety of user_tags property with space delimited list of values') + group = parser.add_mutually_exclusive_group(required=False) + group.add_argument('-agn', '--add-gem-names', type=str, nargs='*', required=False, + help='Adds gem name(s) to gem_names field. Space delimited list (ex. -at A B C)') + group.add_argument('-dgn', '--delete-gem-names', type=str, nargs='*', required=False, + help='Removes gem name(s) from the gem_names field. Space delimited list (ex. -dt A B C') + group.add_argument('-rgn', '--replace-gem-names', type=str, nargs='*', required=False, + help='Replace entirety of gem_names field with space delimited list of values') parser.set_defaults(func=_edit_project_props) diff --git a/scripts/o3de/tests/CMakeLists.txt b/scripts/o3de/tests/CMakeLists.txt index de8e9e4974..4c75e5e7df 100644 --- a/scripts/o3de/tests/CMakeLists.txt +++ b/scripts/o3de/tests/CMakeLists.txt @@ -13,70 +13,77 @@ endif() # Add a test to test out the o3de package `o3de.py register` command ly_add_pytest( NAME o3de_register - PATH ${CMAKE_CURRENT_LIST_DIR}/unit_test_register.py + PATH ${CMAKE_CURRENT_LIST_DIR}/test_register.py TEST_SUITE smoke EXCLUDE_TEST_RUN_TARGET_FROM_IDE ) ly_add_pytest( NAME o3de_cmake - PATH ${CMAKE_CURRENT_LIST_DIR}/unit_test_cmake.py + PATH ${CMAKE_CURRENT_LIST_DIR}/test_cmake.py + TEST_SUITE smoke + EXCLUDE_TEST_RUN_TARGET_FROM_IDE +) + +ly_add_pytest( + NAME o3de_disable_gem + PATH ${CMAKE_CURRENT_LIST_DIR}/test_disable_gem.py TEST_SUITE smoke EXCLUDE_TEST_RUN_TARGET_FROM_IDE ) ly_add_pytest( NAME o3de_enable_gem - PATH ${CMAKE_CURRENT_LIST_DIR}/unit_test_enable_gem.py + PATH ${CMAKE_CURRENT_LIST_DIR}/test_enable_gem.py TEST_SUITE smoke EXCLUDE_TEST_RUN_TARGET_FROM_IDE ) ly_add_pytest( NAME o3de_global_project - PATH ${CMAKE_CURRENT_LIST_DIR}/unit_test_global_project.py + PATH ${CMAKE_CURRENT_LIST_DIR}/test_global_project.py TEST_SUITE smoke EXCLUDE_TEST_RUN_TARGET_FROM_IDE ) ly_add_pytest( NAME o3de_manifest - PATH ${CMAKE_CURRENT_LIST_DIR}/unit_test_manifest.py + PATH ${CMAKE_CURRENT_LIST_DIR}/test_manifest.py TEST_SUITE smoke EXCLUDE_TEST_RUN_TARGET_FROM_IDE ) ly_add_pytest( NAME o3de_engine_properties - PATH ${CMAKE_CURRENT_LIST_DIR}/unit_test_engine_properties.py + PATH ${CMAKE_CURRENT_LIST_DIR}/test_engine_properties.py TEST_SUITE smoke EXCLUDE_TEST_RUN_TARGET_FROM_IDE ) ly_add_pytest( NAME o3de_project_properties - PATH ${CMAKE_CURRENT_LIST_DIR}/unit_test_project_properties.py + PATH ${CMAKE_CURRENT_LIST_DIR}/test_project_properties.py TEST_SUITE smoke EXCLUDE_TEST_RUN_TARGET_FROM_IDE ) ly_add_pytest( NAME o3de_gem_properties - PATH ${CMAKE_CURRENT_LIST_DIR}/unit_test_gem_properties.py + PATH ${CMAKE_CURRENT_LIST_DIR}/test_gem_properties.py TEST_SUITE smoke EXCLUDE_TEST_RUN_TARGET_FROM_IDE ) ly_add_pytest( NAME o3de_template - PATH ${CMAKE_CURRENT_LIST_DIR}/unit_test_engine_template.py + PATH ${CMAKE_CURRENT_LIST_DIR}/test_engine_template.py TEST_SUITE smoke EXCLUDE_TEST_RUN_TARGET_FROM_IDE ) ly_add_pytest( NAME o3de_register_show - PATH ${CMAKE_CURRENT_LIST_DIR}/unit_test_print_registration.py + PATH ${CMAKE_CURRENT_LIST_DIR}/test_print_registration.py TEST_SUITE smoke EXCLUDE_TEST_RUN_TARGET_FROM_IDE ) diff --git a/scripts/o3de/tests/unit_test_cmake.py b/scripts/o3de/tests/test_cmake.py similarity index 100% rename from scripts/o3de/tests/unit_test_cmake.py rename to scripts/o3de/tests/test_cmake.py diff --git a/scripts/o3de/tests/test_disable_gem.py b/scripts/o3de/tests/test_disable_gem.py new file mode 100644 index 0000000000..18e0402185 --- /dev/null +++ b/scripts/o3de/tests/test_disable_gem.py @@ -0,0 +1,200 @@ +# +# 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 json + +import pytest +import pathlib +from unittest.mock import patch + +from o3de import cmake, disable_gem, enable_gem + + +TEST_PROJECT_JSON_PAYLOAD = ''' +{ + "project_name": "TestProject", + "origin": "The primary repo for TestProject goes here: i.e. http://www.mydomain.com", + "license": "What license TestProject uses goes here: i.e. https://opensource.org/licenses/MIT", + "display_name": "TestProject", + "summary": "A short description of TestProject.", + "canonical_tags": [ + "Project" + ], + "user_tags": [ + "TestProject" + ], + "icon_path": "preview.png", + "engine": "o3de-install", + "restricted_name": "projects", + "external_subdirectories": [ + ] +} +''' + +TEST_GEM_JSON_PAYLOAD = ''' +{ + "gem_name": "TestGem", + "display_name": "TestGem", + "license": "Apache-2.0 Or MIT", + "license_url": "https://github.com/o3de/o3de/blob/development/LICENSE.txt", + "origin": "Open 3D Engine - o3de.org", + "origin_url": "https://github.com/o3de/o3de", + "type": "Code", + "summary": "A short description of TestGem.", + "canonical_tags": [ + "Gem" + ], + "user_tags": [ + "TestGem" + ], + "icon_path": "preview.png", + "requirements": "Any requirement goes here.", + "documentation_url": "The link to the documentation goes here.", + "dependencies": [ + ] +} +''' + +TEST_O3DE_MANIFEST_JSON_PAYLOAD = ''' +{ + "o3de_manifest_name": "testuser", + "origin": "C:/Users/testuser/.o3de", + "default_engines_folder": "C:/Users/testuser/.o3de/Engines", + "default_projects_folder": "C:/Users/testuser/.o3de/Projects", + "default_gems_folder": "C:/Users/testuser/.o3de/Gems", + "default_templates_folder": "C:/Users/testuser/.o3de/Templates", + "default_restricted_folder": "C:/Users/testuser/.o3de/Restricted", + "default_third_party_folder": "C:/Users/testuser/.o3de/3rdParty", + "projects": [ + "D:/MinimalProject" + ], + "external_subdirectories": [], + "templates": [], + "restricted": [], + "repos": [], + "engines": [ + "D:/o3de/o3de" + ], + "engines_path": { + "o3de": "D:/o3de/o3de" + } +} +''' + +@pytest.fixture(scope='class') +def init_disable_gem_data(request): + class DisableGemData: + def __init__(self): + self.project_data = json.loads(TEST_PROJECT_JSON_PAYLOAD) + self.gem_data = json.loads(TEST_GEM_JSON_PAYLOAD) + request.cls.disable_gem = DisableGemData() + + +@pytest.mark.usefixtures('init_disable_gem_data') +class TestDisableGemCommand: + @pytest.mark.parametrize("gem_path, project_path, gem_registered_with_project, gem_registered_with_engine," + "expected_result", [ + pytest.param(pathlib.PurePath('TestProject/TestGem'), pathlib.PurePath('TestProject'), False, True, 0), + pytest.param(pathlib.PurePath('TestProject/TestGem'), pathlib.PurePath('TestProject'), False, False, 0), + pytest.param(pathlib.PurePath('TestProject/TestGem'), pathlib.PurePath('TestProject'), True, False, 0), + pytest.param(pathlib.PurePath('TestGem'), pathlib.PurePath('TestProject'), False, False, 0), + ] + ) + def test_disable_gem_registers_gem_name_with_project_json(self, gem_path, project_path, gem_registered_with_project, + gem_registered_with_engine, expected_result): + + project_gem_dependencies = [] + + def get_registered_path(project_name: str = None, gem_name: str = None) -> pathlib.Path or None: + if project_name: + return project_path + elif gem_name: + return gem_path + return None + + def save_o3de_manifest(new_project_data: dict, manifest_path: pathlib.Path = None) -> bool: + if manifest_path == project_path / 'project.json': + self.disable_gem.project_data = new_project_data + return True + + def load_o3de_manifest(manifest_path: pathlib.Path = None) -> dict or None: + if not manifest_path: + return json.loads(TEST_O3DE_MANIFEST_JSON_PAYLOAD) + return None + + def get_project_json_data(project_name: str = None, project_path: pathlib.Path = None): + return self.disable_gem.project_data + + def get_gem_json_data(gem_path: pathlib.Path, project_path: pathlib.Path): + return self.disable_gem.gem_data + + def get_project_gems(project_path: pathlib.Path): + return [pathlib.Path(gem_path).resolve()] if gem_registered_with_project else [] + + def get_engine_gems(): + return [pathlib.Path(gem_path).resolve()] if gem_registered_with_engine else [] + + def add_gem_dependency(enable_gem_cmake_file: pathlib.Path, gem_name: str): + project_gem_dependencies.append(gem_name) + return 0 + + def remove_gem_dependency(enable_gem_cmake_file: pathlib.Path, gem_name: str): + project_gem_dependencies.remove(gem_name) + return 0 + + def get_enabled_gems(enable_gem_cmake_file: pathlib.Path) -> list: + return project_gem_dependencies + + + with patch('pathlib.Path.is_dir', return_value=True) as pathlib_is_dir_patch,\ + patch('pathlib.Path.is_file', return_value=True) as pathlib_is_file_patch, \ + patch('o3de.manifest.load_o3de_manifest', side_effect=load_o3de_manifest) as load_o3de_manifest_patch, \ + patch('o3de.manifest.save_o3de_manifest', side_effect=save_o3de_manifest) as save_o3de_manifest_patch,\ + patch('o3de.manifest.get_registered', side_effect=get_registered_path) as get_registered_patch,\ + patch('o3de.manifest.get_gem_json_data', side_effect=get_gem_json_data) as get_gem_json_data_patch,\ + patch('o3de.manifest.get_project_json_data', side_effect=get_project_json_data) as get_gem_json_data_patch,\ + patch('o3de.manifest.get_project_gems', side_effect=get_project_gems) as get_project_gems_patch,\ + patch('o3de.manifest.get_engine_gems', side_effect=get_engine_gems) as get_engine_gems_patch,\ + patch('o3de.cmake.add_gem_dependency', side_effect=add_gem_dependency) as add_gem_dependency_patch, \ + patch('o3de.cmake.remove_gem_dependency', + side_effect=remove_gem_dependency) as remove_gem_dependency_patch, \ + patch('o3de.cmake.get_enabled_gems', + side_effect=get_enabled_gems) as get_enabled_gems, \ + patch('o3de.validation.valid_o3de_gem_json', return_value=True) as valid_gem_json_patch: + + # Clear out any "gem_names" from the previous iterations + self.disable_gem.project_data.pop('gem_names', None) + + # First enable the gem + assert enable_gem.enable_gem_in_project(gem_path=gem_path, project_path=project_path) == 0 + + # Check that the gem is enabled + gem_json = get_gem_json_data(gem_path, project_path) + project_json = get_project_json_data(project_path=project_path) + enabled_gems_list = cmake.get_enabled_gems(project_path / "Gem/enabled_gems.cmake") + assert gem_json.get('gem_name', '') in enabled_gems_list + + # If the gem that is neither registered in the project.json nor engine.json, + # then it must appear in the "gem_names" field. + if not gem_registered_with_engine and not gem_registered_with_project: + assert gem_json.get('gem_name', '') in project_json.get('gem_names', []) + else: + assert gem_json.get('gem_name', '') not in project_json.get('gem_names', []) + + # Now disable the gem + result = disable_gem.disable_gem_in_project(gem_path=gem_path, project_path=project_path) + assert result == expected_result + + # Refresh the enabled_gems list and check for removal of the gem + gem_json = get_gem_json_data(gem_path, project_path) + project_json = get_project_json_data(project_path=project_path) + enabled_gems_list = cmake.get_enabled_gems(project_path / "Gem/enabled_gems.cmake") + assert gem_json.get('gem_name', '') not in enabled_gems_list + + # If gem name should no longer appear in the "gem_names" field + assert gem_json.get('gem_name', '') not in project_json.get('gem_names', []) diff --git a/scripts/o3de/tests/unit_test_enable_gem.py b/scripts/o3de/tests/test_enable_gem.py similarity index 82% rename from scripts/o3de/tests/unit_test_enable_gem.py rename to scripts/o3de/tests/test_enable_gem.py index 8067fc329d..9e9fe0a713 100644 --- a/scripts/o3de/tests/unit_test_enable_gem.py +++ b/scripts/o3de/tests/test_enable_gem.py @@ -104,10 +104,11 @@ class TestEnableGemCommand: pytest.param(pathlib.PurePath('TestProject/TestGem'), pathlib.PurePath('TestProject'), False, True, 0), pytest.param(pathlib.PurePath('TestProject/TestGem'), pathlib.PurePath('TestProject'), False, False, 0), pytest.param(pathlib.PurePath('TestProject/TestGem'), pathlib.PurePath('TestProject'), True, False, 0), + pytest.param(pathlib.PurePath('TestGem'), pathlib.PurePath('TestProject'), False, False, 0), ] ) - def test_enable_gem_registers_gem_as_well(self, gem_path, project_path, gem_registered_with_project, gem_registered_with_engine, - expected_result): + def test_enable_gem_registers_gem_name_with_project_json(self, gem_path, project_path, gem_registered_with_project, + gem_registered_with_engine, expected_result): def get_registered_path(project_name: str = None, gem_name: str = None) -> pathlib.Path: if project_name: @@ -116,11 +117,8 @@ class TestEnableGemCommand: return gem_path return None - def get_registered_gem_path(gem_name: str) -> pathlib.Path: - return gem_path - def save_o3de_manifest(new_project_data: dict, manifest_path: pathlib.Path = None) -> bool: - if manifest_path == project_path: + if manifest_path == project_path / 'project.json': self.enable_gem.project_data = new_project_data return True @@ -129,17 +127,17 @@ class TestEnableGemCommand: return json.loads(TEST_O3DE_MANIFEST_JSON_PAYLOAD) return None - def get_project_json_data(project_path: pathlib.Path): + def get_project_json_data(project_name: str = None, project_path: pathlib.Path = None): return self.enable_gem.project_data def get_gem_json_data(gem_path: pathlib.Path, project_path: pathlib.Path): return self.enable_gem.gem_data def get_project_gems(project_path: pathlib.Path): - return [gem_path] if gem_registered_with_project else [] + return [pathlib.Path(gem_path).resolve()] if gem_registered_with_project else [] def get_engine_gems(): - return [gem_path] if gem_registered_with_engine else [] + return [pathlib.Path(gem_path).resolve()] if gem_registered_with_engine else [] def add_gem_dependency(enable_gem_cmake_file: pathlib.Path, gem_name: str): return 0 @@ -155,11 +153,14 @@ class TestEnableGemCommand: patch('o3de.manifest.get_engine_gems', side_effect=get_engine_gems) as get_engine_gems_patch,\ patch('o3de.cmake.add_gem_dependency', side_effect=add_gem_dependency) as add_gem_dependency_patch,\ patch('o3de.validation.valid_o3de_gem_json', return_value=True) as valid_gem_json_patch: + + self.enable_gem.project_data.pop('gem_names', None) result = enable_gem.enable_gem_in_project(gem_path=gem_path, project_path=project_path) assert result == expected_result - # If the gem isn't registered with the engine or project already it should now be registered with the project - if not gem_registered_with_engine and gem_registered_with_project: - # Prepend the project path to each external subdirectory - project_relative_subdirs = map(lambda subdir: (pathlib.Path(project_path) / subdir).as_posix(), - self.enable_gem.project_data.get('external_subdirectories', [])) - assert gem_path.as_posix() in project_relative_subdirs + + gem_json = get_gem_json_data(gem_path, project_path) + project_json = get_project_json_data(project_path=project_path) + if not gem_registered_with_engine and not gem_registered_with_project: + assert gem_json.get('gem_name', '') in project_json.get('gem_names', []) + else: + assert gem_json.get('gem_name', '') not in project_json.get('gem_names', []) diff --git a/scripts/o3de/tests/unit_test_engine_properties.py b/scripts/o3de/tests/test_engine_properties.py similarity index 100% rename from scripts/o3de/tests/unit_test_engine_properties.py rename to scripts/o3de/tests/test_engine_properties.py diff --git a/scripts/o3de/tests/unit_test_engine_template.py b/scripts/o3de/tests/test_engine_template.py similarity index 100% rename from scripts/o3de/tests/unit_test_engine_template.py rename to scripts/o3de/tests/test_engine_template.py diff --git a/scripts/o3de/tests/unit_test_gem_properties.py b/scripts/o3de/tests/test_gem_properties.py similarity index 100% rename from scripts/o3de/tests/unit_test_gem_properties.py rename to scripts/o3de/tests/test_gem_properties.py diff --git a/scripts/o3de/tests/unit_test_global_project.py b/scripts/o3de/tests/test_global_project.py similarity index 100% rename from scripts/o3de/tests/unit_test_global_project.py rename to scripts/o3de/tests/test_global_project.py diff --git a/scripts/o3de/tests/unit_test_manifest.py b/scripts/o3de/tests/test_manifest.py similarity index 100% rename from scripts/o3de/tests/unit_test_manifest.py rename to scripts/o3de/tests/test_manifest.py diff --git a/scripts/o3de/tests/unit_test_print_registration.py b/scripts/o3de/tests/test_print_registration.py similarity index 100% rename from scripts/o3de/tests/unit_test_print_registration.py rename to scripts/o3de/tests/test_print_registration.py diff --git a/scripts/o3de/tests/unit_test_project_properties.py b/scripts/o3de/tests/test_project_properties.py similarity index 100% rename from scripts/o3de/tests/unit_test_project_properties.py rename to scripts/o3de/tests/test_project_properties.py diff --git a/scripts/o3de/tests/unit_test_register.py b/scripts/o3de/tests/test_register.py similarity index 100% rename from scripts/o3de/tests/unit_test_register.py rename to scripts/o3de/tests/test_register.py diff --git a/scripts/o3de/tests/unit_test_utils.py b/scripts/o3de/tests/test_utils.py similarity index 100% rename from scripts/o3de/tests/unit_test_utils.py rename to scripts/o3de/tests/test_utils.py From aa025a5e7d1d4e1a7837dd8157006cd3e0d3622b Mon Sep 17 00:00:00 2001 From: Chris Galvan Date: Wed, 26 Jan 2022 10:48:08 -0600 Subject: [PATCH 263/284] Updated unit tests per PR feedback Signed-off-by: Chris Galvan --- Gems/Atom/RPI/Code/Tests/Image/StreamingImageTests.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/Gems/Atom/RPI/Code/Tests/Image/StreamingImageTests.cpp b/Gems/Atom/RPI/Code/Tests/Image/StreamingImageTests.cpp index f90702d948..28e5dbd9fe 100644 --- a/Gems/Atom/RPI/Code/Tests/Image/StreamingImageTests.cpp +++ b/Gems/Atom/RPI/Code/Tests/Image/StreamingImageTests.cpp @@ -745,7 +745,7 @@ namespace UnitTest auto pixelDataValue = imageAsset->GetSubImagePixelValue(x, y); auto pixelExpectedValue = static_cast(y * size.m_width + x) / static_cast(std::numeric_limits::max()); - EXPECT_TRUE(AZ::IsClose(pixelDataValue, pixelExpectedValue)); + EXPECT_NEAR(pixelDataValue, pixelExpectedValue, Constants::Tolerance); } } @@ -753,14 +753,13 @@ namespace UnitTest AZStd::vector pixelValues(size.m_width * size.m_height); auto topLeft = AZStd::make_pair(0, 0); auto bottomRight = AZStd::make_pair(size.m_width - 1, size.m_height - 1); - AZStd::span valueSpan(pixelValues.begin(), pixelValues.size()); - streamingImageAsset->GetSubImagePixelValues(topLeft, bottomRight, valueSpan); + streamingImageAsset->GetSubImagePixelValues(topLeft, bottomRight, pixelValues); for (uint32_t index = 0; index < pixelValues.size(); ++index) { - auto pixelDataValue = valueSpan[index]; + auto pixelDataValue = pixelValues[index]; auto pixelExpectedValue = static_cast(index) / static_cast(std::numeric_limits::max()); - EXPECT_TRUE(AZ::IsClose(pixelDataValue, pixelExpectedValue)); + EXPECT_NEAR(pixelDataValue, pixelExpectedValue, Constants::Tolerance); } } } From 921c1e2201a0a8da87735d13b3c447055d5e86b4 Mon Sep 17 00:00:00 2001 From: Chris Galvan Date: Wed, 26 Jan 2022 11:15:37 -0600 Subject: [PATCH 264/284] Modified GetSubImagePixelValues API to be exclusive with bottom right coordinate, and documented as such Signed-off-by: Chris Galvan --- .../RPI.Reflect/Image/StreamingImageAsset.h | 3 +++ .../RPI.Reflect/Image/StreamingImageAsset.cpp | 17 +++++++++-------- .../Code/Tests/Image/StreamingImageTests.cpp | 2 +- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Image/StreamingImageAsset.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Image/StreamingImageAsset.h index 93d0392e38..2e01f99cd9 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Image/StreamingImageAsset.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Image/StreamingImageAsset.h @@ -91,12 +91,15 @@ namespace AZ T GetSubImagePixelValue(uint32_t x, uint32_t y, uint32_t componentIndex = 0, uint32_t mip = 0, uint32_t slice = 0); //! Retrieve a region of image pixel values (float) for specified mip and slice + //! NOTE: The topLeft coordinate is inclusive, whereas the bottomRight is exclusive void GetSubImagePixelValues(AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::span outValues, uint32_t componentIndex = 0, uint32_t mip = 0, uint32_t slice = 0); //! Retrieve a region of image pixel values (uint) for specified mip and slice + //! NOTE: The topLeft coordinate is inclusive, whereas the bottomRight is exclusive void GetSubImagePixelValues(AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::span outValues, uint32_t componentIndex = 0, uint32_t mip = 0, uint32_t slice = 0); //! Retrieve a region of image pixel values (int) for specified mip and slice + //! NOTE: The topLeft coordinate is inclusive, whereas the bottomRight is exclusive void GetSubImagePixelValues(AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::span outValues, uint32_t componentIndex = 0, uint32_t mip = 0, uint32_t slice = 0); //! Returns streaming image pool asset id of the pool that will be used to create the streaming image. diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp index a3cfc581b6..286b259696 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp @@ -315,9 +315,10 @@ namespace AZ { AZStd::array values = { aznumeric_cast(0) }; - auto position = AZStd::make_pair(x, y); + auto topLeft = AZStd::make_pair(x, y); + auto bottomRight = AZStd::make_pair(x + 1, y + 1); AZStd::span valueSpan(values.begin(), values.size()); - GetSubImagePixelValues(position, position, valueSpan, componentIndex, mip, slice); + GetSubImagePixelValues(topLeft, bottomRight, valueSpan, componentIndex, mip, slice); return values[0]; } @@ -354,9 +355,9 @@ namespace AZ const uint32_t pixelSize = AZ::RHI::GetFormatSize(imageDescriptor.m_format); size_t outValuesIndex = 0; - for (uint32_t y = topLeft.second; y <= bottomRight.second; ++y) + for (uint32_t y = topLeft.second; y < bottomRight.second; ++y) { - for (uint32_t x = topLeft.first; x <= bottomRight.first; ++x) + for (uint32_t x = topLeft.first; x < bottomRight.first; ++x) { size_t imageDataIndex = (y * width + x) * pixelSize; @@ -381,9 +382,9 @@ namespace AZ const uint32_t pixelSize = AZ::RHI::GetFormatSize(imageDescriptor.m_format); size_t outValuesIndex = 0; - for (uint32_t y = topLeft.second; y <= bottomRight.second; ++y) + for (uint32_t y = topLeft.second; y < bottomRight.second; ++y) { - for (uint32_t x = topLeft.first; x <= bottomRight.first; ++x) + for (uint32_t x = topLeft.first; x < bottomRight.first; ++x) { size_t imageDataIndex = (y * width + x) * pixelSize; @@ -408,9 +409,9 @@ namespace AZ const uint32_t pixelSize = AZ::RHI::GetFormatSize(imageDescriptor.m_format); size_t outValuesIndex = 0; - for (uint32_t y = topLeft.second; y <= bottomRight.second; ++y) + for (uint32_t y = topLeft.second; y < bottomRight.second; ++y) { - for (uint32_t x = topLeft.first; x <= bottomRight.first; ++x) + for (uint32_t x = topLeft.first; x < bottomRight.first; ++x) { size_t imageDataIndex = (y * width + x) * pixelSize; diff --git a/Gems/Atom/RPI/Code/Tests/Image/StreamingImageTests.cpp b/Gems/Atom/RPI/Code/Tests/Image/StreamingImageTests.cpp index 28e5dbd9fe..5efab95818 100644 --- a/Gems/Atom/RPI/Code/Tests/Image/StreamingImageTests.cpp +++ b/Gems/Atom/RPI/Code/Tests/Image/StreamingImageTests.cpp @@ -752,7 +752,7 @@ namespace UnitTest // Validate retrieving a region of pixels AZStd::vector pixelValues(size.m_width * size.m_height); auto topLeft = AZStd::make_pair(0, 0); - auto bottomRight = AZStd::make_pair(size.m_width - 1, size.m_height - 1); + auto bottomRight = AZStd::make_pair(size.m_width, size.m_height); streamingImageAsset->GetSubImagePixelValues(topLeft, bottomRight, pixelValues); for (uint32_t index = 0; index < pixelValues.size(); ++index) { From 8151856e83c7337121e2f7d159f721cb2219b3b8 Mon Sep 17 00:00:00 2001 From: Chris Galvan Date: Wed, 26 Jan 2022 13:01:30 -0600 Subject: [PATCH 265/284] Removed legacy Editor config spec Signed-off-by: Chris Galvan --- .../ReflectedPropertyItem.cpp | 18 +--- .../ReflectedVarWrapper.cpp | 36 -------- .../ReflectedVarWrapper.h | 17 ---- Code/Editor/CryEdit.cpp | 1 - Code/Editor/CryEditPy.cpp | 29 ------ Code/Editor/EditorPreferencesPageGeneral.cpp | 4 - Code/Editor/EditorPreferencesPageGeneral.h | 1 - Code/Editor/IEditor.h | 6 -- Code/Editor/IEditorImpl.cpp | 46 ---------- Code/Editor/IEditorImpl.h | 6 -- Code/Editor/Lib/Tests/IEditorMock.h | 4 - Code/Editor/Objects/BaseObject.cpp | 53 +---------- Code/Editor/Objects/BaseObject.h | 9 -- Code/Editor/Objects/EntityObject.cpp | 41 +-------- Code/Editor/Objects/EntityObject.h | 3 - Code/Editor/Settings.cpp | 44 --------- Code/Editor/Settings.h | 5 - Code/Editor/UIEnumsDatabase.cpp | 91 ------------------- Code/Editor/UIEnumsDatabase.h | 47 ---------- Code/Editor/UndoConfigSpec.cpp | 45 --------- Code/Editor/UndoConfigSpec.h | 37 -------- Code/Editor/Util/Variable.cpp | 47 ---------- Code/Editor/Util/Variable.h | 28 +----- Code/Editor/Util/VariablePropertyType.cpp | 8 -- Code/Editor/Util/VariablePropertyType.h | 1 - Code/Editor/editor_core_files.cmake | 2 - Code/Editor/editor_lib_files.cmake | 2 - Code/Legacy/CryCommon/ISystem.h | 13 --- 28 files changed, 6 insertions(+), 638 deletions(-) delete mode 100644 Code/Editor/UIEnumsDatabase.cpp delete mode 100644 Code/Editor/UIEnumsDatabase.h delete mode 100644 Code/Editor/UndoConfigSpec.cpp delete mode 100644 Code/Editor/UndoConfigSpec.h diff --git a/Code/Editor/Controls/ReflectedPropertyControl/ReflectedPropertyItem.cpp b/Code/Editor/Controls/ReflectedPropertyControl/ReflectedPropertyItem.cpp index af418c6e0d..0fcbac3204 100644 --- a/Code/Editor/Controls/ReflectedPropertyControl/ReflectedPropertyItem.cpp +++ b/Code/Editor/Controls/ReflectedPropertyControl/ReflectedPropertyItem.cpp @@ -229,28 +229,16 @@ void ReflectedPropertyItem::SetVariable(IVariable *var) break; case ePropertyFloat: case ePropertyAngle: - //if the Description has a valid global enumDB lookup, edit as an enum, otherwise use normal float editor - if (desc.m_pEnumDBItem) - m_reflectedVarAdapter = new ReflectedVarDBEnumAdapter; - else - m_reflectedVarAdapter = new ReflectedVarFloatAdapter; + m_reflectedVarAdapter = new ReflectedVarFloatAdapter; break; case ePropertyInt: - //if the Description has a valid global enumDB lookup, edit as an enum, otherwise use normal int editor - if (desc.m_pEnumDBItem) - m_reflectedVarAdapter = new ReflectedVarDBEnumAdapter; - else - m_reflectedVarAdapter = new ReflectedVarIntAdapter; + m_reflectedVarAdapter = new ReflectedVarIntAdapter; break; case ePropertyBool: m_reflectedVarAdapter = new ReflectedVarBoolAdapter; break; case ePropertyString: - //if the Description has a valid global enumDB lookup, edit as an enum, otherwise use normal string editor - if (desc.m_pEnumDBItem) - m_reflectedVarAdapter = new ReflectedVarDBEnumAdapter; - else - m_reflectedVarAdapter = new ReflectedVarStringAdapter; + m_reflectedVarAdapter = new ReflectedVarStringAdapter; break; case ePropertySelection: m_reflectedVarAdapter = new ReflectedVarEnumAdapter; diff --git a/Code/Editor/Controls/ReflectedPropertyControl/ReflectedVarWrapper.cpp b/Code/Editor/Controls/ReflectedPropertyControl/ReflectedVarWrapper.cpp index 2320938f08..8eefbbc8eb 100644 --- a/Code/Editor/Controls/ReflectedPropertyControl/ReflectedVarWrapper.cpp +++ b/Code/Editor/Controls/ReflectedPropertyControl/ReflectedVarWrapper.cpp @@ -15,7 +15,6 @@ // Editor #include "ReflectedPropertyCtrl.h" -#include "UIEnumsDatabase.h" namespace { @@ -254,41 +253,6 @@ void ReflectedVarEnumAdapter::OnVariableChange([[maybe_unused]] IVariable* pVari } } -void ReflectedVarDBEnumAdapter::SetVariable(IVariable *pVariable) -{ - Prop::Description desc(pVariable); - m_pEnumDBItem = desc.m_pEnumDBItem; - m_reflectedVar.reset(new CReflectedVarEnum(pVariable->GetHumanName().toUtf8().data())); - if (m_pEnumDBItem) - { - for (int i = 0; i < m_pEnumDBItem->strings.size(); i++) - { - QString name = m_pEnumDBItem->strings[i]; - m_reflectedVar->addEnum( m_pEnumDBItem->NameToValue(name).toUtf8().data(), name.toUtf8().data() ); - } - } -} - -void ReflectedVarDBEnumAdapter::SyncReflectedVarToIVar(IVariable *pVariable) -{ - const AZStd::string valueStr = pVariable->GetDisplayValue().toUtf8().data(); - const AZStd::string value = m_pEnumDBItem ? AZStd::string(m_pEnumDBItem->ValueToName(valueStr.c_str()).toUtf8().data()) : valueStr; - m_reflectedVar->setEnumByName(value); - -} - -void ReflectedVarDBEnumAdapter::SyncIVarToReflectedVar(IVariable *pVariable) -{ - QString iVarVal = m_reflectedVar->m_selectedEnumName.c_str(); - if (m_pEnumDBItem) - { - iVarVal = m_pEnumDBItem->NameToValue(iVarVal); - } - pVariable->SetDisplayValue(iVarVal); -} - - - void ReflectedVarVector2Adapter::SetVariable(IVariable *pVariable) { m_reflectedVar.reset(new CReflectedVarVector2(pVariable->GetHumanName().toUtf8().data())); diff --git a/Code/Editor/Controls/ReflectedPropertyControl/ReflectedVarWrapper.h b/Code/Editor/Controls/ReflectedPropertyControl/ReflectedVarWrapper.h index 4bcd6dcaa3..807413226c 100644 --- a/Code/Editor/Controls/ReflectedPropertyControl/ReflectedVarWrapper.h +++ b/Code/Editor/Controls/ReflectedPropertyControl/ReflectedVarWrapper.h @@ -16,7 +16,6 @@ #include -struct CUIEnumsDatabase_SEnum; class ReflectedPropertyItem; // Class to wrap the CReflectedVars and sync them with corresponding IVariable. @@ -145,22 +144,6 @@ AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING bool m_updatingEnums; }; -class EDITOR_CORE_API ReflectedVarDBEnumAdapter - : public ReflectedVarAdapter -{ -public: - void SetVariable(IVariable* pVariable) override; - void SyncReflectedVarToIVar(IVariable* pVariable) override; - void SyncIVarToReflectedVar(IVariable* pVariable) override; - CReflectedVar* GetReflectedVar() override { return m_reflectedVar.data(); } -private: -AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING - QScopedPointer > m_reflectedVar; -AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING - - CUIEnumsDatabase_SEnum* m_pEnumDBItem; -}; - class EDITOR_CORE_API ReflectedVarVector2Adapter : public ReflectedVarAdapter { diff --git a/Code/Editor/CryEdit.cpp b/Code/Editor/CryEdit.cpp index b9081c3f90..982f8ba411 100644 --- a/Code/Editor/CryEdit.cpp +++ b/Code/Editor/CryEdit.cpp @@ -1709,7 +1709,6 @@ bool CCryEditApp::InitInstance() mainWindow->Initialize(); GetIEditor()->GetCommandManager()->RegisterAutoCommands(); - GetIEditor()->AddUIEnums(); mainWindowWrapper->enableSaveRestoreGeometry("O3DE", "O3DE", "mainWindowGeometry"); m_pDocManager->OnFileNew(); diff --git a/Code/Editor/CryEditPy.cpp b/Code/Editor/CryEditPy.cpp index a25a497a4e..5dea57c1ed 100644 --- a/Code/Editor/CryEditPy.cpp +++ b/Code/Editor/CryEditPy.cpp @@ -26,7 +26,6 @@ #include "Core/QtEditorApplication.h" #include "CheckOutDialog.h" #include "GameEngine.h" -#include "UndoConfigSpec.h" #include "ViewManager.h" #include "EditorViewportCamera.h" @@ -369,21 +368,6 @@ namespace inline namespace Commands { - void PySetConfigSpec(int spec, int platform) - { - CUndo undo("Set Config Spec"); - if (CUndo::IsRecording()) - { - CUndo::Record(new CUndoConficSpec()); - } - GetIEditor()->SetEditorConfigSpec((ESystemConfigSpec)spec, (ESystemConfigPlatform)platform); - } - - int PyGetConfigSpec() - { - return static_cast(GetIEditor()->GetEditorConfigSpec()); - } - int PyGetConfigPlatform() { return static_cast(GetIEditor()->GetEditorConfigPlatform()); @@ -434,9 +418,7 @@ namespace AzToolsFramework addLegacyGeneral(behaviorContext->Method("set_current_view_rotation", PySetCurrentViewRotation, nullptr, "Sets the rotation of the current view as given x, y, z Euler angles in degrees.")); addLegacyGeneral(behaviorContext->Method("export_to_engine", CCryEditApp::Command_ExportToEngine, nullptr, "Exports the current level to the engine.")); - addLegacyGeneral(behaviorContext->Method("set_config_spec", PySetConfigSpec, nullptr, "Sets the system config spec and platform.")); addLegacyGeneral(behaviorContext->Method("get_config_platform", PyGetConfigPlatform, nullptr, "Gets the system config platform.")); - addLegacyGeneral(behaviorContext->Method("get_config_spec", PyGetConfigSpec, nullptr, "Gets the system config spec.")); addLegacyGeneral(behaviorContext->Method("set_result_to_success", PySetResultToSuccess, nullptr, "Sets the result of a script execution to success. Used only for Sandbox AutoTests.")); addLegacyGeneral(behaviorContext->Method("set_result_to_failure", PySetResultToFailure, nullptr, "Sets the result of a script execution to failure. Used only for Sandbox AutoTests.")); @@ -464,17 +446,6 @@ namespace AzToolsFramework }; addCheckoutDialog(behaviorContext->Method("enable_for_all", PyCheckOutDialogEnableForAll, nullptr, "Enables the 'Apply to all' button in the checkout dialog; useful for allowing the user to apply a decision to check out files to multiple, related operations.")); - behaviorContext->EnumProperty("SystemConfigSpec_Auto") - ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Automation); - behaviorContext->EnumProperty("SystemConfigSpec_Low") - ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Automation); - behaviorContext->EnumProperty("SystemConfigSpec_Medium") - ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Automation); - behaviorContext->EnumProperty("SystemConfigSpec_High") - ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Automation); - behaviorContext->EnumProperty("SystemConfigSpec_VeryHigh") - ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Automation); - behaviorContext->EnumProperty("SystemConfigPlatform_InvalidPlatform") ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Automation); behaviorContext->EnumProperty("SystemConfigPlatform_Pc") diff --git a/Code/Editor/EditorPreferencesPageGeneral.cpp b/Code/Editor/EditorPreferencesPageGeneral.cpp index 95b3bc4c50..642b9c37e7 100644 --- a/Code/Editor/EditorPreferencesPageGeneral.cpp +++ b/Code/Editor/EditorPreferencesPageGeneral.cpp @@ -30,7 +30,6 @@ void CEditorPreferencesPage_General::Reflect(AZ::SerializeContext& serialize) serialize.Class() ->Version(3) ->Field("PreviewPanel", &GeneralSettings::m_previewPanel) - ->Field("ApplyConfigSpec", &GeneralSettings::m_applyConfigSpec) ->Field("EnableSourceControl", &GeneralSettings::m_enableSourceControl) ->Field("ClearConsole", &GeneralSettings::m_clearConsoleOnGameModeStart) ->Field("ConsoleBackgroundColorTheme", &GeneralSettings::m_consoleBackgroundColorTheme) @@ -81,7 +80,6 @@ void CEditorPreferencesPage_General::Reflect(AZ::SerializeContext& serialize) { editContext->Class("General Settings", "General Editor Preferences") ->DataElement(AZ::Edit::UIHandlers::CheckBox, &GeneralSettings::m_previewPanel, "Show Geometry Preview Panel", "Show Geometry Preview Panel") - ->DataElement(AZ::Edit::UIHandlers::CheckBox, &GeneralSettings::m_applyConfigSpec, "Hide objects by config spec", "Hide objects by config spec") ->DataElement(AZ::Edit::UIHandlers::CheckBox, &GeneralSettings::m_enableSourceControl, "Enable Source Control", "Enable Source Control") ->DataElement( AZ::Edit::UIHandlers::CheckBox, &GeneralSettings::m_clearConsoleOnGameModeStart, "Clear Console at game startup", "Clear Console when game mode starts") @@ -157,7 +155,6 @@ void CEditorPreferencesPage_General::OnApply() { //general settings gSettings.bPreviewGeometryWindow = m_generalSettings.m_previewPanel; - gSettings.bApplyConfigSpecInEditor = m_generalSettings.m_applyConfigSpec; gSettings.enableSourceControl = m_generalSettings.m_enableSourceControl; gSettings.clearConsoleOnGameModeStart = m_generalSettings.m_clearConsoleOnGameModeStart; gSettings.consoleBackgroundColorTheme = m_generalSettings.m_consoleBackgroundColorTheme; @@ -195,7 +192,6 @@ void CEditorPreferencesPage_General::InitializeSettings() { //general settings m_generalSettings.m_previewPanel = gSettings.bPreviewGeometryWindow; - m_generalSettings.m_applyConfigSpec = gSettings.bApplyConfigSpecInEditor; m_generalSettings.m_enableSourceControl = gSettings.enableSourceControl; m_generalSettings.m_clearConsoleOnGameModeStart = gSettings.clearConsoleOnGameModeStart; m_generalSettings.m_consoleBackgroundColorTheme = gSettings.consoleBackgroundColorTheme; diff --git a/Code/Editor/EditorPreferencesPageGeneral.h b/Code/Editor/EditorPreferencesPageGeneral.h index 01700dea88..ff2ebf79f8 100644 --- a/Code/Editor/EditorPreferencesPageGeneral.h +++ b/Code/Editor/EditorPreferencesPageGeneral.h @@ -45,7 +45,6 @@ private: AZ_TYPE_INFO(GeneralSettings, "{C2AE8F6D-7AA6-499E-A3E8-ECCD0AC6F3D2}") bool m_previewPanel; - bool m_applyConfigSpec; bool m_enableSourceControl; bool m_clearConsoleOnGameModeStart; AzToolsFramework::ConsoleColorTheme m_consoleBackgroundColorTheme; diff --git a/Code/Editor/IEditor.h b/Code/Editor/IEditor.h index 52f8c1ac6f..da29b00f2d 100644 --- a/Code/Editor/IEditor.h +++ b/Code/Editor/IEditor.h @@ -46,7 +46,6 @@ class ICommandManager; class CEditorCommandManager; class CHyperGraphManager; class CConsoleSynchronization; -class CUIEnumsDatabase; struct ISourceControl; struct IEditorClassFactory; struct ITransformManipulator; @@ -660,15 +659,10 @@ struct IEditor //! Only returns true if source control is both available AND currently connected and functioning virtual bool IsSourceControlConnected() = 0; - virtual CUIEnumsDatabase* GetUIEnumsDatabase() = 0; - virtual void AddUIEnums() = 0; virtual void ReduceMemory() = 0; //! Export manager for exporting objects and a terrain from the game to DCC tools virtual IExportManager* GetExportManager() = 0; - //! Set current configuration spec of the editor. - virtual void SetEditorConfigSpec(ESystemConfigSpec spec, ESystemConfigPlatform platform) = 0; - virtual ESystemConfigSpec GetEditorConfigSpec() const = 0; virtual ESystemConfigPlatform GetEditorConfigPlatform() const = 0; virtual void ReloadTemplates() = 0; virtual void ShowStatusText(bool bEnable) = 0; diff --git a/Code/Editor/IEditorImpl.cpp b/Code/Editor/IEditorImpl.cpp index d3f881a252..05b74f3b05 100644 --- a/Code/Editor/IEditorImpl.cpp +++ b/Code/Editor/IEditorImpl.cpp @@ -51,7 +51,6 @@ #include "GameEngine.h" #include "ToolBox.h" #include "MainWindow.h" -#include "UIEnumsDatabase.h" #include "RenderHelpers/AxisHelper.h" #include "Settings.h" #include "Include/IObjectManager.h" @@ -116,7 +115,6 @@ CEditorImpl::CEditorImpl() , m_pErrorsDlg(nullptr) , m_pSourceControl(nullptr) , m_pSelectionTreeManager(nullptr) - , m_pUIEnumsDatabase(nullptr) , m_pConsoleSync(nullptr) , m_pSettingsManager(nullptr) , m_pLevelIndependentFileMan(nullptr) @@ -146,7 +144,6 @@ CEditorImpl::CEditorImpl() regCtx.pCommandManager = m_pCommandManager; regCtx.pClassFactory = m_pClassFactory; m_pEditorFileMonitor.reset(new CEditorFileMonitor()); - m_pUIEnumsDatabase = new CUIEnumsDatabase; m_pDisplaySettings = new CDisplaySettings; m_pDisplaySettings->LoadRegistry(); m_pPluginManager = new CPluginManager; @@ -298,7 +295,6 @@ CEditorImpl::~CEditorImpl() SAFE_DELETE(m_pCommandManager) SAFE_DELETE(m_pClassFactory) SAFE_DELETE(m_pLasLoadedLevelErrorReport) - SAFE_DELETE(m_pUIEnumsDatabase) SAFE_DELETE(m_pSettingsManager); @@ -1473,48 +1469,6 @@ IExportManager* CEditorImpl::GetExportManager() return m_pExportManager; } -void CEditorImpl::AddUIEnums() -{ - // Spec settings for shadow casting lights - AZStd::string SpecString[4]; - QStringList types; - types.push_back("Never=0"); - SpecString[0] = AZStd::string::format("VeryHigh Spec=%d", CONFIG_VERYHIGH_SPEC); - types.push_back(SpecString[0].c_str()); - SpecString[1] = AZStd::string::format("High Spec=%d", CONFIG_HIGH_SPEC); - types.push_back(SpecString[1].c_str()); - SpecString[2] = AZStd::string::format("Medium Spec=%d", CONFIG_MEDIUM_SPEC); - types.push_back(SpecString[2].c_str()); - SpecString[3] = AZStd::string::format("Low Spec=%d", CONFIG_LOW_SPEC); - types.push_back(SpecString[3].c_str()); - m_pUIEnumsDatabase->SetEnumStrings("CastShadows", types); - - // Power-of-two percentages - AZStd::string percentStringPOT[5]; - types.clear(); - percentStringPOT[0] = AZStd::string::format("Default=%d", 0); - types.push_back(percentStringPOT[0].c_str()); - percentStringPOT[1] = AZStd::string::format("12.5=%d", 1); - types.push_back(percentStringPOT[1].c_str()); - percentStringPOT[2] = AZStd::string::format("25=%d", 2); - types.push_back(percentStringPOT[2].c_str()); - percentStringPOT[3] = AZStd::string::format("50=%d", 3); - types.push_back(percentStringPOT[3].c_str()); - percentStringPOT[4] = AZStd::string::format("100=%d", 4); - types.push_back(percentStringPOT[4].c_str()); - m_pUIEnumsDatabase->SetEnumStrings("ShadowMinResPercent", types); -} - -void CEditorImpl::SetEditorConfigSpec(ESystemConfigSpec spec, [[maybe_unused]]ESystemConfigPlatform platform) -{ - gSettings.editorConfigSpec = spec; -} - -ESystemConfigSpec CEditorImpl::GetEditorConfigSpec() const -{ - return (ESystemConfigSpec)gSettings.editorConfigSpec; -} - ESystemConfigPlatform CEditorImpl::GetEditorConfigPlatform() const { return m_pSystem->GetConfigPlatform(); diff --git a/Code/Editor/IEditorImpl.h b/Code/Editor/IEditorImpl.h index 08629e434b..5e47a76802 100644 --- a/Code/Editor/IEditorImpl.h +++ b/Code/Editor/IEditorImpl.h @@ -268,14 +268,9 @@ public: bool IsSourceControlConnected() override; //! Setup Material Editor mode void SetMatEditMode(bool bIsMatEditMode); - CUIEnumsDatabase* GetUIEnumsDatabase() override { return m_pUIEnumsDatabase; }; - void AddUIEnums() override; void ReduceMemory() override; // Get Export manager IExportManager* GetExportManager() override; - // Set current configuration spec of the editor. - void SetEditorConfigSpec(ESystemConfigSpec spec, ESystemConfigPlatform platform) override; - ESystemConfigSpec GetEditorConfigSpec() const override; ESystemConfigPlatform GetEditorConfigPlatform() const override; void ReloadTemplates() override; void AddErrorMessage(const QString& text, const QString& caption); @@ -347,7 +342,6 @@ protected: CSelectionTreeManager* m_pSelectionTreeManager; - CUIEnumsDatabase* m_pUIEnumsDatabase; //! CConsole Synchronization CConsoleSynchronization* m_pConsoleSync; //! Editor Settings Manager diff --git a/Code/Editor/Lib/Tests/IEditorMock.h b/Code/Editor/Lib/Tests/IEditorMock.h index b2f7e2627f..99c05c7f4d 100644 --- a/Code/Editor/Lib/Tests/IEditorMock.h +++ b/Code/Editor/Lib/Tests/IEditorMock.h @@ -165,12 +165,8 @@ public: MOCK_METHOD0(GetSourceControl, ISourceControl* ()); MOCK_METHOD0(IsSourceControlAvailable, bool()); MOCK_METHOD0(IsSourceControlConnected, bool()); - MOCK_METHOD0(GetUIEnumsDatabase, CUIEnumsDatabase* ()); - MOCK_METHOD0(AddUIEnums, void()); MOCK_METHOD0(ReduceMemory, void()); MOCK_METHOD0(GetExportManager, IExportManager* ()); - MOCK_METHOD2(SetEditorConfigSpec, void(ESystemConfigSpec , ESystemConfigPlatform )); - MOCK_CONST_METHOD0(GetEditorConfigSpec, ESystemConfigSpec()); MOCK_CONST_METHOD0(GetEditorConfigPlatform, ESystemConfigPlatform()); MOCK_METHOD0(ReloadTemplates, void()); MOCK_METHOD1(ShowStatusText, void(bool )); diff --git a/Code/Editor/Objects/BaseObject.cpp b/Code/Editor/Objects/BaseObject.cpp index c14547407b..1497f2440a 100644 --- a/Code/Editor/Objects/BaseObject.cpp +++ b/Code/Editor/Objects/BaseObject.cpp @@ -62,7 +62,7 @@ protected: ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// -//! Undo object for CBaseObject that only stores its transform, color, area and minSpec +//! Undo object for CBaseObject that only stores its transform, color, area class CUndoBaseObjectMinimal : public IUndoObject { @@ -84,7 +84,6 @@ private: Vec3 scale; QColor color; float area; - int minSpec; }; void SetTransformsFromState(CBaseObject* pObject, const StateStruct& state, bool bUndo); @@ -253,7 +252,6 @@ CUndoBaseObjectMinimal::CUndoBaseObjectMinimal(CBaseObject* pObj, [[maybe_unused m_undoState.scale = pObj->GetScale(); m_undoState.color = pObj->GetColor(); m_undoState.area = pObj->GetArea(); - m_undoState.minSpec = pObj->GetMinSpec(); } ////////////////////////////////////////////////////////////////////////// @@ -284,14 +282,12 @@ void CUndoBaseObjectMinimal::Undo(bool bUndo) m_redoState.rotate = pObject->GetRotation(); m_redoState.color = pObject->GetColor(); m_redoState.area = pObject->GetArea(); - m_redoState.minSpec = pObject->GetMinSpec(); } SetTransformsFromState(pObject, m_undoState, bUndo); pObject->ChangeColor(m_undoState.color); pObject->SetArea(m_undoState.area); - pObject->SetMinSpec(m_undoState.minSpec, false); using namespace AzToolsFramework; ComponentEntityObjectRequestBus::Event(pObject, &ComponentEntityObjectRequestBus::Events::UpdatePreemptiveUndoCache); @@ -310,7 +306,6 @@ void CUndoBaseObjectMinimal::Redo() pObject->ChangeColor(m_redoState.color); pObject->SetArea(m_redoState.area); - pObject->SetMinSpec(m_redoState.minSpec, false); using namespace AzToolsFramework; ComponentEntityObjectRequestBus::Event(pObject, &ComponentEntityObjectRequestBus::Events::UpdatePreemptiveUndoCache); @@ -382,7 +377,6 @@ CBaseObject::CBaseObject() , m_bMatrixInWorldSpace(false) , m_bMatrixValid(false) , m_bWorldBoxValid(false) - , m_nMinSpec(0) , m_vDrawIconPos(0, 0, 0) , m_nIconFlags(0) { @@ -413,7 +407,6 @@ bool CBaseObject::Init([[maybe_unused]] IEditor* ie, CBaseObject* prev, [[maybe_ SetLocalTM(prev->GetPos(), prev->GetRotation(), prev->GetScale()); SetArea(prev->GetArea()); SetColor(prev->GetColor()); - SetMinSpec(prev->GetMinSpec(), false); // Copy all basic variables. EnableUpdateCallbacks(false); @@ -1053,17 +1046,6 @@ void CBaseObject::SetSelected(bool bSelect) } } -////////////////////////////////////////////////////////////////////////// -bool CBaseObject::IsHiddenBySpec() const -{ - if (!gSettings.bApplyConfigSpecInEditor) - { - return false; - } - - return (m_nMinSpec != 0 && gSettings.editorConfigSpec != 0 && m_nMinSpec > static_cast(gSettings.editorConfigSpec)); -} - ////////////////////////////////////////////////////////////////////////// //! Returns true if object hidden. bool CBaseObject::IsHidden() const @@ -1107,7 +1089,6 @@ void CBaseObject::Serialize(CObjectArchive& ar) Vec3 scale = m_scale; Quat quat = m_rotate; Ang3 angles(0, 0, 0); - uint32 nMinSpec = m_nMinSpec; QColor color = m_color; float flattenArea = m_flattenArea; @@ -1135,12 +1116,6 @@ void CBaseObject::Serialize(CObjectArchive& ar) xmlNode->getAttr("Parent", parentId); xmlNode->getAttr("LookAt", lookatId); xmlNode->getAttr("Material", mtlName); - xmlNode->getAttr("MinSpec", nMinSpec); - - if (nMinSpec <= CONFIG_VERYHIGH_SPEC) // Ignore invalid values. - { - m_nMinSpec = nMinSpec; - } bool bHidden = flags & OBJFLAG_HIDDEN; bool bFrozen = flags & OBJFLAG_FROZEN; @@ -1245,11 +1220,6 @@ void CBaseObject::Serialize(CObjectArchive& ar) { xmlNode->setAttr("Flags", flags); } - - if (m_nMinSpec != 0) - { - xmlNode->setAttr("MinSpec", (uint32)m_nMinSpec); - } } // Serialize variables after default entity parameters. @@ -1300,11 +1270,6 @@ XmlNodeRef CBaseObject::Export([[maybe_unused]] const QString& levelPath, XmlNod objNode->setAttr("Scale", scale); } - if (m_nMinSpec != 0) - { - objNode->setAttr("MinSpec", (uint32)m_nMinSpec); - } - // Save variables. CVarObject::Serialize(objNode, false); @@ -2134,22 +2099,6 @@ bool CBaseObject::IsSimilarObject(CBaseObject* pObject) return false; } -////////////////////////////////////////////////////////////////////////// -void CBaseObject::SetMinSpec(uint32 nSpec, bool bSetChildren) -{ - m_nMinSpec = nSpec; - UpdateVisibility(!IsHidden()); - - // Set min spec for all childs. - if (bSetChildren) - { - for (int i = static_cast(m_childs.size()) - 1; i >= 0; --i) - { - m_childs[i]->SetMinSpec(nSpec, true); - } - } -} - ////////////////////////////////////////////////////////////////////////// EScaleWarningLevel CBaseObject::GetScaleWarningLevel() const { diff --git a/Code/Editor/Objects/BaseObject.h b/Code/Editor/Objects/BaseObject.h index 666d9f3e1d..aa748bade4 100644 --- a/Code/Editor/Objects/BaseObject.h +++ b/Code/Editor/Objects/BaseObject.h @@ -256,8 +256,6 @@ public: //! Returns true if object hidden. bool IsHidden() const; - //! Check against min spec. - bool IsHiddenBySpec() const; //! Returns true if object frozen. virtual bool IsFrozen() const; //! Returns true if object is shared between missions. @@ -465,12 +463,6 @@ public: //! Check if specified object is very similar to this one. virtual bool IsSimilarObject(CBaseObject* pObject); - ////////////////////////////////////////////////////////////////////////// - // Object minimal usage spec (All/Low/Medium/High) - ////////////////////////////////////////////////////////////////////////// - uint32 GetMinSpec() const { return m_nMinSpec; } - virtual void SetMinSpec(uint32 nSpec, bool bSetChildren = true); - //! In This function variables of the object must be initialized. virtual void InitVariables() {}; @@ -668,7 +660,6 @@ private: mutable uint32 m_bMatrixValid : 1; mutable uint32 m_bWorldBoxValid : 1; uint32 m_bInSelectionBox : 1; - uint32 m_nMinSpec : 8; Vec3 m_vDrawIconPos; AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING diff --git a/Code/Editor/Objects/EntityObject.cpp b/Code/Editor/Objects/EntityObject.cpp index 86512377c6..450a15766c 100644 --- a/Code/Editor/Objects/EntityObject.cpp +++ b/Code/Editor/Objects/EntityObject.cpp @@ -200,7 +200,6 @@ CEntityObject::CEntityObject() // Init Variables. mv_castShadow = true; - mv_castShadowMinSpec = CONFIG_LOW_SPEC; mv_outdoor = false; mv_recvWind = false; mv_renderNearest = false; @@ -249,18 +248,10 @@ CEntityObject::~CEntityObject() ////////////////////////////////////////////////////////////////////////// void CEntityObject::InitVariables() { - mv_castShadowMinSpec.AddEnumItem("Never", END_CONFIG_SPEC_ENUM); - mv_castShadowMinSpec.AddEnumItem("Low", CONFIG_LOW_SPEC); - mv_castShadowMinSpec.AddEnumItem("Medium", CONFIG_MEDIUM_SPEC); - mv_castShadowMinSpec.AddEnumItem("High", CONFIG_HIGH_SPEC); - mv_castShadowMinSpec.AddEnumItem("VeryHigh", CONFIG_VERYHIGH_SPEC); - mv_castShadow.SetFlags(mv_castShadow.GetFlags() | IVariable::UI_INVISIBLE); - mv_castShadowMinSpec->SetFlags(mv_castShadowMinSpec->GetFlags() | IVariable::UI_UNSORTED); AddVariable(mv_outdoor, "OutdoorOnly", tr("Outdoor Only")); AddVariable(mv_castShadow, "CastShadow", tr("Cast Shadow")); - AddVariable(mv_castShadowMinSpec, "CastShadowMinspec", tr("Cast Shadow MinSpec")); AddVariable(mv_ratioLOD, "LodRatio"); AddVariable(mv_viewDistanceMultiplier, "ViewDistanceMultiplier"); @@ -361,7 +352,6 @@ bool CEntityObject::ConvertFromObject(CBaseObject* object) CEntityObject* pObject = ( CEntityObject* )object; mv_outdoor = pObject->mv_outdoor; - mv_castShadowMinSpec = pObject->mv_castShadowMinSpec; mv_ratioLOD = pObject->mv_ratioLOD; mv_viewDistanceMultiplier = pObject->mv_viewDistanceMultiplier; mv_hiddenInGame = pObject->mv_hiddenInGame; @@ -521,22 +511,6 @@ void CEntityObject::AdjustLightProperties(CVarBlockPtr& properties, const char* } } - if (IVariable* pCastShadowVar = FindVariableInSubBlock(properties, pSubBlockVar, "nCastShadows")) - { - if (bCastShadowLegacy) - { - pCastShadowVar->SetDisplayValue("1"); - } - pCastShadowVar->SetDataType(IVariable::DT_UIENUM); - pCastShadowVar->SetFlags(pCastShadowVar->GetFlags() | IVariable::UI_UNSORTED); - } - - if (IVariable* pShadowMinRes = FindVariableInSubBlock(properties, pSubBlockVar, "nShadowMinResPercent")) - { - pShadowMinRes->SetDataType(IVariable::DT_UIENUM); - pShadowMinRes->SetFlags(pShadowMinRes->GetFlags() | IVariable::UI_UNSORTED); - } - if (IVariable* pFade = FindVariableInSubBlock(properties, pSubBlockVar, "vFadeDimensionsLeft")) { pFade->SetFlags(pFade->GetFlags() | IVariable::UI_INVISIBLE); @@ -873,12 +847,6 @@ void CEntityObject::Serialize(CObjectArchive& ar) RemoveAllEntityLinks(); PostLoad(ar); } - - if ((mv_castShadowMinSpec == CONFIG_LOW_SPEC) && !mv_castShadow) // backwards compatibility check - { - mv_castShadowMinSpec = END_CONFIG_SPEC_ENUM; - mv_castShadow = true; - } } else { @@ -1033,8 +1001,6 @@ XmlNodeRef CEntityObject::Export([[maybe_unused]] const QString& levelPath, XmlN objNode->setAttr("ViewDistanceMultiplier", mv_viewDistanceMultiplier); } - objNode->setAttr("CastShadowMinSpec", mv_castShadowMinSpec); - if (mv_recvWind) { objNode->setAttr("RecvWind", true); @@ -1050,11 +1016,6 @@ XmlNodeRef CEntityObject::Export([[maybe_unused]] const QString& levelPath, XmlN objNode->setAttr("OutdoorOnly", true); } - if (GetMinSpec() != 0) - { - objNode->setAttr("MinSpec", ( uint32 )GetMinSpec()); - } - if (mv_hiddenInGame) { objNode->setAttr("HiddenInGame", true); @@ -1163,7 +1124,7 @@ void CEntityObject::UpdateVisibility(bool bVisible) { CBaseObject::UpdateVisibility(bVisible); - bool bVisibleWithSpec = bVisible && !IsHiddenBySpec(); + bool bVisibleWithSpec = bVisible; if (bVisibleWithSpec != static_cast(m_bVisible)) { m_bVisible = bVisibleWithSpec; diff --git a/Code/Editor/Objects/EntityObject.h b/Code/Editor/Objects/EntityObject.h index c6b7e4ce2d..2e8aeeabc7 100644 --- a/Code/Editor/Objects/EntityObject.h +++ b/Code/Editor/Objects/EntityObject.h @@ -174,8 +174,6 @@ public: ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// - int GetCastShadowMinSpec() const { return mv_castShadowMinSpec; } - float GetRatioLod() const { return static_cast(mv_ratioLOD); }; float GetViewDistanceMultiplier() const { return mv_viewDistanceMultiplier; } @@ -306,7 +304,6 @@ protected: ////////////////////////////////////////////////////////////////////////// CVariable mv_outdoor; CVariable mv_castShadow; // Legacy, required for backwards compatibility - CSmartVariableEnum mv_castShadowMinSpec; CVariable mv_ratioLOD; CVariable mv_viewDistanceMultiplier; CVariable mv_hiddenInGame; // Entity is hidden in game (on start). diff --git a/Code/Editor/Settings.cpp b/Code/Editor/Settings.cpp index 9514957795..9efe846b9e 100644 --- a/Code/Editor/Settings.cpp +++ b/Code/Editor/Settings.cpp @@ -129,8 +129,6 @@ SEditorSettings::SEditorSettings() bVisualizeNavigationAccessibility = false; navigationDebugAgentType = 0; - editorConfigSpec = CONFIG_VERYHIGH_SPEC; //arbitrary choice, but lets assume that we want things to initially look as good as possible in the editor. - viewports.bAlwaysShowRadiuses = false; viewports.bSync2DViews = false; viewports.fDefaultAspectRatio = 800.0f / 600.0f; @@ -166,7 +164,6 @@ SEditorSettings::SEditorSettings() bPreviewGeometryWindow = true; bBackupOnSave = true; backupOnSaveMaxCount = 3; - bApplyConfigSpecInEditor = true; showErrorDialogOnLoad = 1; consoleBackgroundColorTheme = AzToolsFramework::ConsoleColorTheme::Dark; @@ -433,40 +430,6 @@ void SEditorSettings::LoadValue(const char* sSection, const char* sKey, QString& } } -////////////////////////////////////////////////////////////////////////// -void SEditorSettings::LoadValue(const char* sSection, const char* sKey, ESystemConfigSpec& value) -{ - if (bSettingsManagerMode) - { - int valueCheck = 0; - - if (GetIEditor()->GetSettingsManager()) - { - GetIEditor()->GetSettingsManager()->LoadSetting(sSection, sKey, valueCheck); - } - - if (valueCheck >= CONFIG_AUTO_SPEC && valueCheck < END_CONFIG_SPEC_ENUM) - { - value = (ESystemConfigSpec)valueCheck; - SaveValue(sSection, sKey, value); - } - } - else - { - const SettingsGroup sg(sSection); - auto valuecheck = static_cast(s_editorSettings()->value(sKey, QVariant::fromValue(value)).toInt()); - if (valuecheck >= CONFIG_AUTO_SPEC && valuecheck < END_CONFIG_SPEC_ENUM) - { - value = valuecheck; - - if (GetIEditor()->GetSettingsManager()) - { - GetIEditor()->GetSettingsManager()->SaveSetting(sSection, sKey, value); - } - } - } -} - ////////////////////////////////////////////////////////////////////////// void SEditorSettings::Save(bool isEditorClosing) { @@ -503,9 +466,6 @@ void SEditorSettings::Save(bool isEditorClosing) SaveValue("Settings", "BackupOnSave", bBackupOnSave); SaveValue("Settings", "SaveBackupMaxCount", backupOnSaveMaxCount); - SaveValue("Settings", "ApplyConfigSpecInEditor", bApplyConfigSpecInEditor); - - SaveValue("Settings", "editorConfigSpec", editorConfigSpec); SaveValue("Settings", "TemporaryDirectory", strStandardTempDirectory); @@ -697,9 +657,6 @@ void SEditorSettings::Load() LoadValue("Settings", "BackupOnSave", bBackupOnSave); LoadValue("Settings", "SaveBackupMaxCount", backupOnSaveMaxCount); - LoadValue("Settings", "ApplyConfigSpecInEditor", bApplyConfigSpecInEditor); - LoadValue("Settings", "editorConfigSpec", editorConfigSpec); - LoadValue("Settings", "TemporaryDirectory", strStandardTempDirectory); @@ -894,7 +851,6 @@ void SEditorSettings::PostInitApply() REGISTER_CVAR2_CB("ed_toolbarIconSize", &gui.nToolbarIconSize, gui.nToolbarIconSize, VF_NULL, "Override size of the toolbar icons 0-default, 16,32,...", ToolbarIconSizeChanged); - GetIEditor()->SetEditorConfigSpec(editorConfigSpec, GetISystem()->GetConfigPlatform()); REGISTER_CVAR2("ed_backgroundUpdatePeriod", &backgroundUpdatePeriod, backgroundUpdatePeriod, 0, "Delay between frame updates (ms) when window is out of focus but not minimized. 0 = disable background update"); REGISTER_CVAR2("ed_showErrorDialogOnLoad", &showErrorDialogOnLoad, showErrorDialogOnLoad, 0, "Show error dialog on level load"); REGISTER_CVAR2_CB("ed_keepEditorActive", &keepEditorActive, 0, VF_NULL, "Keep the editor active, even if no focus is set", KeepEditorActiveChanged); diff --git a/Code/Editor/Settings.h b/Code/Editor/Settings.h index 0ebb70501d..e88f2f6550 100644 --- a/Code/Editor/Settings.h +++ b/Code/Editor/Settings.h @@ -378,10 +378,6 @@ AZ_POP_DISABLE_DLL_EXPORT_BASECLASS_WARNING SGUI_Settings gui; - bool bApplyConfigSpecInEditor; - - ESystemConfigSpec editorConfigSpec; - //! Terrain Texture Export/Import filename. QString terrainTextureExport; @@ -451,7 +447,6 @@ private: void LoadValue(const char* sSection, const char* sKey, float& value); void LoadValue(const char* sSection, const char* sKey, bool& value); void LoadValue(const char* sSection, const char* sKey, QString& value); - void LoadValue(const char* sSection, const char* sKey, ESystemConfigSpec& value); void SaveCloudSettings(); diff --git a/Code/Editor/UIEnumsDatabase.cpp b/Code/Editor/UIEnumsDatabase.cpp deleted file mode 100644 index b859f54ffa..0000000000 --- a/Code/Editor/UIEnumsDatabase.cpp +++ /dev/null @@ -1,91 +0,0 @@ -/* - * 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 "EditorDefs.h" - -#include "UIEnumsDatabase.h" - -////////////////////////////////////////////////////////////////////////// -QString CUIEnumsDatabase_SEnum::NameToValue(const QString& name) -{ - int n = (int)strings.size(); - for (int i = 0; i < n; i++) - { - if (name == strings[i]) - { - return values[i]; - } - } - return name; -} - -////////////////////////////////////////////////////////////////////////// -QString CUIEnumsDatabase_SEnum::ValueToName(const QString& value) -{ - int n = (int)strings.size(); - for (int i = 0; i < n; i++) - { - if (value == values[i]) - { - return strings[i]; - } - } - return value; -} - -////////////////////////////////////////////////////////////////////////// -CUIEnumsDatabase::CUIEnumsDatabase() -{ -} - -////////////////////////////////////////////////////////////////////////// -CUIEnumsDatabase::~CUIEnumsDatabase() -{ - // Free enums. - for (Enums::iterator it = m_enums.begin(); it != m_enums.end(); ++it) - { - delete it->second; - } -} - -////////////////////////////////////////////////////////////////////////// -void CUIEnumsDatabase::SetEnumStrings(const QString& enumName, const QStringList& sStringsArray) -{ - int nStringCount = sStringsArray.size(); - - CUIEnumsDatabase_SEnum* pEnum = stl::find_in_map(m_enums, enumName, nullptr); - if (!pEnum) - { - pEnum = new CUIEnumsDatabase_SEnum; - pEnum->m_name = enumName; - m_enums[enumName] = pEnum; - } - pEnum->strings.clear(); - pEnum->values.clear(); - for (int i = 0; i < nStringCount; i++) - { - QString str = sStringsArray[i]; - QString value = str; - int pos = str.indexOf('='); - if (pos >= 0) - { - value = str.mid(pos + 1); - str = str.mid(0, pos); - } - pEnum->strings.push_back(str); - pEnum->values.push_back(value); - } -} - -////////////////////////////////////////////////////////////////////////// -CUIEnumsDatabase_SEnum* CUIEnumsDatabase::FindEnum(const QString& enumName) const -{ - CUIEnumsDatabase_SEnum* pEnum = stl::find_in_map(m_enums, enumName, nullptr); - return pEnum; -} diff --git a/Code/Editor/UIEnumsDatabase.h b/Code/Editor/UIEnumsDatabase.h deleted file mode 100644 index 102b30a7c5..0000000000 --- a/Code/Editor/UIEnumsDatabase.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * 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 - * - */ - - -#ifndef CRYINCLUDE_EDITOR_UIENUMSDATABASE_H -#define CRYINCLUDE_EDITOR_UIENUMSDATABASE_H -#pragma once - -#include "Include/EditorCoreAPI.h" - -struct EDITOR_CORE_API CUIEnumsDatabase_SEnum -{ - AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING - QString m_name; - QStringList strings; // Display Strings. - QStringList values; // Corresponding Values. - AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING - - QString NameToValue(const QString& name); - QString ValueToName(const QString& value); -}; - -////////////////////////////////////////////////////////////////////////// -// Stores string associates to the enumeration collections for UI. -////////////////////////////////////////////////////////////////////////// -class EDITOR_CORE_API CUIEnumsDatabase -{ -public: - CUIEnumsDatabase(); - ~CUIEnumsDatabase(); - - void SetEnumStrings(const QString& enumName, const QStringList& sStringsArray); - CUIEnumsDatabase_SEnum* FindEnum(const QString& enumName) const; - -private: - AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING - typedef std::map Enums; - Enums m_enums; - AZ_POP_DISABLE_DLL_EXPORT_MEMBER_WARNING -}; - -#endif // CRYINCLUDE_EDITOR_UIENUMSDATABASE_H diff --git a/Code/Editor/UndoConfigSpec.cpp b/Code/Editor/UndoConfigSpec.cpp deleted file mode 100644 index 93b73a90a1..0000000000 --- a/Code/Editor/UndoConfigSpec.cpp +++ /dev/null @@ -1,45 +0,0 @@ -/* - * 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 - * - */ - - -// Description : Undo for Python function (PySetConfigSpec) - - -#include "EditorDefs.h" - -#include "UndoConfigSpec.h" - -CUndoConficSpec::CUndoConficSpec(const QString& pUndoDescription) -{ - m_undo = GetIEditor()->GetEditorConfigSpec(); - m_undoDescription = pUndoDescription; -} - -int CUndoConficSpec::GetSize() -{ - return sizeof(*this); -} - -QString CUndoConficSpec::GetDescription() -{ - return m_undoDescription; -} - -void CUndoConficSpec::Undo(bool bUndo) -{ - if (bUndo) - { - m_redo = GetIEditor()->GetEditorConfigSpec(); - } - GetIEditor()->SetEditorConfigSpec((ESystemConfigSpec)m_undo, GetIEditor()->GetEditorConfigPlatform()); -} - -void CUndoConficSpec::Redo() -{ - GetIEditor()->SetEditorConfigSpec((ESystemConfigSpec)m_redo, GetIEditor()->GetEditorConfigPlatform()); -} diff --git a/Code/Editor/UndoConfigSpec.h b/Code/Editor/UndoConfigSpec.h deleted file mode 100644 index f4aa80477e..0000000000 --- a/Code/Editor/UndoConfigSpec.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * 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 - * - */ - - -// Description : Undo for Python function (PySetConfigSpec) - - -#ifndef CRYINCLUDE_EDITOR_UNDOCONFIGSPEC_H -#define CRYINCLUDE_EDITOR_UNDOCONFIGSPEC_H -#pragma once - -#include "Undo/IUndoObject.h" - -class CUndoConficSpec - : public IUndoObject -{ -public: - CUndoConficSpec(const QString& pUndoDescription = "Set Config Spec"); - -protected: - int GetSize(); - QString GetDescription(); - void Undo(bool bUndo); - void Redo(); - -private: - int m_undo; - int m_redo; - QString m_undoDescription; -}; - -#endif // CRYINCLUDE_EDITOR_UNDOCONFIGSPEC_H diff --git a/Code/Editor/Util/Variable.cpp b/Code/Editor/Util/Variable.cpp index 3d7c35ac1c..4f56743479 100644 --- a/Code/Editor/Util/Variable.cpp +++ b/Code/Editor/Util/Variable.cpp @@ -10,7 +10,6 @@ #include "EditorDefs.h" #include "Variable.h" -#include "UIEnumsDatabase.h" #include "UsedResources.h" // for CUsedResources @@ -496,49 +495,3 @@ void CVarObject::Serialize(XmlNodeRef node, bool load) m_vars->Serialize(node, load); } } - - -CVarGlobalEnumList::CVarGlobalEnumList(CUIEnumsDatabase_SEnum* pEnum) - : m_pEnum(pEnum) -{ -} - -CVarGlobalEnumList::CVarGlobalEnumList(const QString& enumName) -{ - m_pEnum = GetIEditor()->GetUIEnumsDatabase()->FindEnum(enumName); -} - -//! Get the name of specified value in enumeration. -QString CVarGlobalEnumList::GetItemName(uint index) -{ - if (!m_pEnum || index >= static_cast(m_pEnum->strings.size())) - { - return QString(); - } - return m_pEnum->strings[index]; -} - -QString CVarGlobalEnumList::NameToValue(const QString& name) -{ - if (m_pEnum) - { - return m_pEnum->NameToValue(name); - } - else - { - return name; - } -} - -QString CVarGlobalEnumList::ValueToName(const QString& value) -{ - if (m_pEnum) - { - return m_pEnum->ValueToName(value); - } - else - { - return value; - } -} - diff --git a/Code/Editor/Util/Variable.h b/Code/Editor/Util/Variable.h index 639161775c..0d8cbb1459 100644 --- a/Code/Editor/Util/Variable.h +++ b/Code/Editor/Util/Variable.h @@ -151,7 +151,7 @@ struct IVariable DT_SEQUENCE, // Movie Sequence (DEPRECATED, use DT_SEQUENCE_ID, instead.) DT_MISSIONOBJ, // Mission Objective DT_USERITEMCB, // Use a callback GetItemsCallback in user data of variable - DT_UIENUM, // Edit as enum, uses CUIEnumsDatabase to lookup the enum to value pairs and combobox in GUI. + DT_UIENUM, // DEPRECATED DT_SEQUENCE_ID, // Movie Sequence DT_LIGHT_ANIMATION, // Light Animation Node in the global Light Animation Set DT_PARTICLE_EFFECT, @@ -1451,32 +1451,6 @@ protected: friend class _smart_ptr >; }; -struct CUIEnumsDatabase_SEnum; - -////////////////////////////////////////////////////////////////////////// -AZ_PUSH_DISABLE_DLL_EXPORT_BASECLASS_WARNING -class EDITOR_CORE_API CVarGlobalEnumList - : public CVarEnumListBase -{ -AZ_POP_DISABLE_DLL_EXPORT_BASECLASS_WARNING -public: - CVarGlobalEnumList(CUIEnumsDatabase_SEnum* pEnum); - CVarGlobalEnumList(const QString& enumName); - - //! Get the name of specified value in enumeration. - virtual QString GetItemName(uint index); - - virtual QString NameToValue(const QString& name); - virtual QString ValueToName(const QString& value); - - //! Don't add anything to a global enum database - virtual void AddItem([[maybe_unused]] const QString& name, [[maybe_unused]] const QString& value) {} - -private: - CUIEnumsDatabase_SEnum* m_pEnum; -}; - - ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// //! Selection list shown in combo box, for enumerated variable. diff --git a/Code/Editor/Util/VariablePropertyType.cpp b/Code/Editor/Util/VariablePropertyType.cpp index 3f472dde72..5af104b3fb 100644 --- a/Code/Editor/Util/VariablePropertyType.cpp +++ b/Code/Editor/Util/VariablePropertyType.cpp @@ -10,7 +10,6 @@ #include "VariablePropertyType.h" #include "Variable.h" -#include "UIEnumsDatabase.h" #include "IEditor.h" namespace Prop @@ -72,7 +71,6 @@ namespace Prop , m_bHardMin(false) , m_bHardMax(false) , m_valueMultiplier(1) - , m_pEnumDBItem(nullptr) { } @@ -86,7 +84,6 @@ namespace Prop , m_bHardMin(false) , m_bHardMax(false) , m_valueMultiplier(1) - , m_pEnumDBItem(nullptr) { if (!pVar) { @@ -160,11 +157,6 @@ namespace Prop m_rangeMin = max(-360.0f, m_rangeMin); m_rangeMax = min(360.0f, m_rangeMax); } - else if (type == IVariable::DT_UIENUM) - { - m_pEnumDBItem = GetIEditor()->GetUIEnumsDatabase()->FindEnum(m_name); - } - const bool useExplicitStep = (pVar->GetFlags() & IVariable::UI_EXPLICIT_STEP); if (!useExplicitStep) diff --git a/Code/Editor/Util/VariablePropertyType.h b/Code/Editor/Util/VariablePropertyType.h index decb930cb3..e37b38cdb7 100644 --- a/Code/Editor/Util/VariablePropertyType.h +++ b/Code/Editor/Util/VariablePropertyType.h @@ -73,7 +73,6 @@ namespace Prop bool m_bHardMax; QString m_name; float m_valueMultiplier; - CUIEnumsDatabase_SEnum* m_pEnumDBItem; }; EDITOR_CORE_API const char* GetName(int dataType); diff --git a/Code/Editor/editor_core_files.cmake b/Code/Editor/editor_core_files.cmake index 7cb40927a4..4cf092e774 100644 --- a/Code/Editor/editor_core_files.cmake +++ b/Code/Editor/editor_core_files.cmake @@ -8,7 +8,6 @@ set(FILES UsedResources.h - UIEnumsDatabase.h Include/EditorCoreAPI.cpp Include/IErrorReport.h Include/IFileUtil.h @@ -31,7 +30,6 @@ set(FILES Controls/QToolTipWidget.h Controls/QToolTipWidget.cpp UsedResources.cpp - UIEnumsDatabase.cpp LyViewPaneNames.h QtViewPaneManager.cpp QtViewPaneManager.h diff --git a/Code/Editor/editor_lib_files.cmake b/Code/Editor/editor_lib_files.cmake index d1c903eb72..5812aae4bb 100644 --- a/Code/Editor/editor_lib_files.cmake +++ b/Code/Editor/editor_lib_files.cmake @@ -441,7 +441,6 @@ set(FILES IPostRenderer.h ToolBox.h TrackViewNewSequenceDialog.h - UndoConfigSpec.h Util/GeometryUtil.h LevelIndependentFileMan.cpp LevelIndependentFileMan.h @@ -528,7 +527,6 @@ set(FILES ToolBox.cpp TrackViewNewSequenceDialog.cpp TrackViewNewSequenceDialog.ui - UndoConfigSpec.cpp Dialogs/ErrorsDlg.cpp Dialogs/ErrorsDlg.h Dialogs/ErrorsDlg.ui diff --git a/Code/Legacy/CryCommon/ISystem.h b/Code/Legacy/CryCommon/ISystem.h index cb2ba0d5bc..b68dd2041c 100644 --- a/Code/Legacy/CryCommon/ISystem.h +++ b/Code/Legacy/CryCommon/ISystem.h @@ -87,19 +87,6 @@ enum ESystemUpdateFlags ESYSUPDATE_EDITOR = 0x0004 }; -// Description: -// Configuration specification, depends on user selected machine specification. -enum ESystemConfigSpec -{ - CONFIG_AUTO_SPEC = 0, - CONFIG_LOW_SPEC = 1, - CONFIG_MEDIUM_SPEC = 2, - CONFIG_HIGH_SPEC = 3, - CONFIG_VERYHIGH_SPEC = 4, - - END_CONFIG_SPEC_ENUM, // MUST BE LAST VALUE. USED FOR ERROR CHECKING. -}; - // Description: // Configuration platform. Autodetected at start, can be modified through the editor. enum ESystemConfigPlatform From 52f1ef84c7c9fb8801bb02e361e2b337253bcbd6 Mon Sep 17 00:00:00 2001 From: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> Date: Wed, 26 Jan 2022 14:20:01 -0600 Subject: [PATCH 266/284] Fixed string_view compilation in GCC 10+. (#7153) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fixed string_view compilation in GCC 10+. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * More GCC 10+ Fixes. GCC 11 seems to have an issue with linkage regarding using a lambda as a default parameter in a function declaration. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * GCC10+ Fix - Fixed binding to a temporary references. > error: loop variable ‘pathName’ of type ‘const QString&’ binds to a temporary constructed from type ‘const char* const’ [-Werror=range-loop-construct] 415 | for (const QString& pathName : { "CrySystem", Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> --- .../AzCore/AzCore/std/string/string_view.h | 164 ++++++++++-------- .../native/utilities/ApplicationManager.cpp | 2 +- .../Include/Atom/RHI/ThreadLocalContext.h | 8 +- 3 files changed, 100 insertions(+), 74 deletions(-) diff --git a/Code/Framework/AzCore/AzCore/std/string/string_view.h b/Code/Framework/AzCore/AzCore/std/string/string_view.h index c333e2cea1..daa00d98d3 100644 --- a/Code/Framework/AzCore/AzCore/std/string/string_view.h +++ b/Code/Framework/AzCore/AzCore/std/string/string_view.h @@ -309,78 +309,87 @@ namespace AZStd } static constexpr bool eq(char_type left, char_type right) noexcept { return left == right; } static constexpr bool lt(char_type left, char_type right) noexcept { return left < right; } - static constexpr int compare(const char_type* s1, const char_type* s2, size_t count) noexcept - { - // In GCC versions prior to major version 10, __builtin_memcmp fails in valid checks in constexpr evaluation -#if !defined(AZ_COMPILER_GCC) || AZ_COMPILER_GCC >= 100000 - if constexpr (AZStd::is_same_v) - { - return __builtin_memcmp(s1, s2, count); - } - else if constexpr (AZStd::is_same_v) - { - return __builtin_wmemcmp(s1, s2, count); - } else -#endif - { - if (az_builtin_is_constant_evaluated()) - { - for (; count; --count, ++s1, ++s2) + static constexpr int compare(const char_type* s1, const char_type* s2, size_t count) noexcept + { + // In GCC versions , __builtin_memcmp fails in valid checks in constexpr evaluation +#if !defined(AZ_COMPILER_GCC) + if constexpr (AZStd::is_same_v) + { + return __builtin_memcmp(s1, s2, count); + } + else if constexpr (AZStd::is_same_v) + { + return __builtin_wmemcmp(s1, s2, count); + } + else +#endif + { + if (az_builtin_is_constant_evaluated()) + { + for (; count; --count, ++s1, ++s2) { - if (lt(*s1, *s2)) - { - return -1; - } - else if (lt(*s2, *s1)) - { - return 1; - } - } - return 0; - } - else - { - return ::memcmp(s1, s2, count * sizeof(char_type)); - } - } + if (lt(*s1, *s2)) + { + return -1; + } + else if (lt(*s2, *s1)) + { + return 1; + } + } + return 0; + } + else + { + return ::memcmp(s1, s2, count * sizeof(char_type)); + } + } } static constexpr size_t length(const char_type* s) noexcept { // For GCC versions less than 10, __builtin_strlen and __builtin_wcslen is not supported as const expressions // so for that case it will need to manually count the characters (at compile time) instead -#if defined(AZ_COMPILER_GCC) && AZ_COMPILER_GCC < 100000 if constexpr (AZStd::is_same_v) { +#if defined(AZ_COMPILER_GCC) && AZ_COMPILER_GCC < 100000 if (!az_builtin_is_constant_evaluated()) { return strlen(s); } + else + { + size_t strLength{}; + for (; *s; ++s, ++strLength) + { + ; + } + return strLength; + } +#else + return __builtin_strlen(s); +#endif } else if constexpr (AZStd::is_same_v) { +#if defined(AZ_COMPILER_GCC) if (!az_builtin_is_constant_evaluated()) { return wcslen(s); } - } - - size_t strLength{}; - for (; *s; ++s, ++strLength) - { - ; - } - return strLength; + else + { + size_t strLength{}; + for (; *s; ++s, ++strLength) + { + ; + } + return strLength; + } #else - - if constexpr (AZStd::is_same_v) - { - return __builtin_strlen(s); - } - else if constexpr (AZStd::is_same_v) - { return __builtin_wcslen(s); +#endif } else { @@ -391,46 +400,59 @@ namespace AZStd } return strLength; } -#endif // defined(AZ_COMPILER_GCC) && AZ_COMPILER_GCC < 100000 + } static constexpr const char_type* find(const char_type* s, size_t count, const char_type& ch) noexcept { - // For GCC versions less than 10, __builtin_char_memchr and __builtin_wmemchr is not supported, and - // __builtin_memchr is not supported as const expressions. In those cases we will manually locate and + // For GCC versions less than 10, __builtin_char_memchr and __builtin_wmemchr is not supported, and + // __builtin_memchr is not supported as const expressions. In those cases we will manually locate and // return the pointer to 's' (at compile time) -#if defined(AZ_COMPILER_GCC) && AZ_COMPILER_GCC < 100000 if constexpr (AZStd::is_same_v) { +#if defined(AZ_COMPILER_GCC) if (!az_builtin_is_constant_evaluated()) { return static_cast(__builtin_memchr(s, ch, count)); } + else + { + for (; count; --count, ++s) + { + if (eq(*s, ch)) + { + return s; + } + } + + return nullptr; + } +#else + return __builtin_char_memchr(s, ch, count); +#endif // defined(AZ_COMPILER_GCC)AZ_COMPILER_GCC < 100000 } else if constexpr (AZStd::is_same_v) { +#if defined(AZ_COMPILER_GCC) if (!az_builtin_is_constant_evaluated()) { return wmemchr(s, ch, count); } - } - - for (; count; --count, ++s) - { - if (eq(*s, ch)) + else { - return s; + for (; count; --count, ++s) + { + if (eq(*s, ch)) + { + return s; + } + } + + return nullptr; } - } - return nullptr; #else - if constexpr (AZStd::is_same_v) - { - return __builtin_char_memchr(s, ch, count); - } - else if constexpr (AZStd::is_same_v) - { return __builtin_wmemchr(s, ch, count); +#endif } else { @@ -441,9 +463,9 @@ namespace AZStd return s; } } + return nullptr; } -#endif } static constexpr char_type* move(char_type* dest, const char_type* src, size_t count) noexcept { @@ -453,7 +475,7 @@ namespace AZStd return dest; } - #if az_has_builtin_memmove + #if !defined(AZ_COMPILER_GCC) && az_has_builtin_memmove __builtin_memmove(dest, src, count * sizeof(char_type)); #else auto NonBuiltinMove = [](char_type* dest1, const char_type* src1, size_t count1) constexpr @@ -506,7 +528,7 @@ namespace AZStd } static constexpr char_type* copy(char_type* dest, const char_type* src, size_t count) noexcept { - #if az_has_builtin_memcpy + #if !defined(AZ_COMPILER_GCC) && az_has_builtin_memcpy __builtin_memcpy(dest, src, count * sizeof(char_type)); #else auto NonBuiltinCopy = [](char_type* dest1, const char_type* src1, size_t count1) constexpr @@ -536,7 +558,7 @@ namespace AZStd static constexpr char_type* copy_backward(char_type* dest, const char_type* src, size_t count) noexcept { char_type* result = dest; - #if az_has_builtin_memmove + #if !defined(AZ_COMPILER_GCC) && az_has_builtin_memmove __builtin_memmove(dest, src, count * sizeof(char_type)); #else if (az_builtin_is_constant_evaluated()) diff --git a/Code/Tools/AssetProcessor/native/utilities/ApplicationManager.cpp b/Code/Tools/AssetProcessor/native/utilities/ApplicationManager.cpp index 57884b304f..06536921d9 100644 --- a/Code/Tools/AssetProcessor/native/utilities/ApplicationManager.cpp +++ b/Code/Tools/AssetProcessor/native/utilities/ApplicationManager.cpp @@ -412,7 +412,7 @@ void ApplicationManager::PopulateApplicationDependencies() // Note that its not necessary for any of these files to actually exist. It is considered a "change" if they // change their file modtime, or if they go from existing to not existing, or if they go from not existing, to existing. // any of those should cause AP to drop. - for (const QString& pathName : { "CrySystem", + for (QString pathName : { "CrySystem", "SceneCore", "SceneData", "SceneBuilder", "AzQtComponents" }) diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI/ThreadLocalContext.h b/Gems/Atom/RHI/Code/Include/Atom/RHI/ThreadLocalContext.h index 4d3534b845..d45c7bf93e 100644 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI/ThreadLocalContext.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI/ThreadLocalContext.h @@ -19,7 +19,7 @@ namespace AZ { /** * This class is a container of thread local storage. It allows for multiple instances - * of thread local storage to exist simultaneously (a property not possible with the + * of thread local storage to exist simultaneously (a property not possible with the * thread_local modifier, which is really a thread global). The context tracks AZ thread * lifetime through a bus in order to clean up storage for exiting threads. The context * allows thread-safe iteration of all thread contexts, which is also a property not possible @@ -36,7 +36,11 @@ namespace AZ public: using InitFunction = AZStd::function; - ThreadLocalContext(InitFunction initFunction = [] (Storage&) {}); + static void DefaultFunction(Storage&) + { + } + + ThreadLocalContext(InitFunction initFunction = &DefaultFunction); ~ThreadLocalContext(); // No copying or moving allowed. From 453808eb908c9f45970cc42a87d30f3cad523173 Mon Sep 17 00:00:00 2001 From: Ken Pruiksma Date: Wed, 26 Jan 2022 14:30:13 -0600 Subject: [PATCH 267/284] Clipmap bounds class (#7134) * ClipmapBounds class - This class is built to keep track of textures for clipmap like structures where there is a virtual center point and the edges need to be updated as the camera moves around the world Signed-off-by: Ken Pruiksma * Removing dead code Signed-off-by: Ken Pruiksma * Updates from PR feedback. Signed-off-by: Ken Pruiksma * comment update Signed-off-by: Ken Pruiksma * Updates from review suggestions Signed-off-by: Ken Pruiksma * More updates. Moved the snapped center point calculation out to a separate function so the constructor doesn't need to do unnecessary work. Signed-off-by: Ken Pruiksma * Removing unused variable. Signed-off-by: Ken Pruiksma * Fixing bug in unit test that was doing a comparison and throwing away the result instead of actually testing it. Signed-off-by: Ken Pruiksma * Adding some comments and constifying some functions. Signed-off-by: Ken Pruiksma * Fixing numeric casting issue on linux Signed-off-by: Ken Pruiksma --- .../Code/Source/TerrainRenderer/Aabb2i.cpp | 32 +- .../Code/Source/TerrainRenderer/Aabb2i.h | 4 + .../Source/TerrainRenderer/ClipmapBounds.cpp | 278 +++++++++++++++ .../Source/TerrainRenderer/ClipmapBounds.h | 159 +++++++++ .../Code/Source/TerrainRenderer/Vector2i.cpp | 71 +++- .../Code/Source/TerrainRenderer/Vector2i.h | 14 +- .../Terrain/Code/Tests/ClipmapBoundsTests.cpp | 336 ++++++++++++++++++ Gems/Terrain/Code/terrain_files.cmake | 6 +- Gems/Terrain/Code/terrain_tests_files.cmake | 9 +- 9 files changed, 892 insertions(+), 17 deletions(-) create mode 100644 Gems/Terrain/Code/Source/TerrainRenderer/ClipmapBounds.cpp create mode 100644 Gems/Terrain/Code/Source/TerrainRenderer/ClipmapBounds.h create mode 100644 Gems/Terrain/Code/Tests/ClipmapBoundsTests.cpp diff --git a/Gems/Terrain/Code/Source/TerrainRenderer/Aabb2i.cpp b/Gems/Terrain/Code/Source/TerrainRenderer/Aabb2i.cpp index c38651f296..82d5a6bf2d 100644 --- a/Gems/Terrain/Code/Source/TerrainRenderer/Aabb2i.cpp +++ b/Gems/Terrain/Code/Source/TerrainRenderer/Aabb2i.cpp @@ -18,12 +18,40 @@ namespace Terrain Aabb2i Aabb2i::operator+(const Vector2i& rhs) const { - return { m_min + rhs, m_max + rhs }; + Aabb2i returnValue = *this; + returnValue += rhs; + return returnValue; + } + + Aabb2i& Aabb2i::operator+=(const Vector2i& rhs) + { + m_min += rhs; + m_max += rhs; + return *this; } Aabb2i Aabb2i::operator-(const Vector2i& rhs) const { - return *this + -rhs; + Aabb2i returnValue = *this; + returnValue -= rhs; + return returnValue; + } + + Aabb2i& Aabb2i::operator-=(const Vector2i& rhs) + { + m_min -= rhs; + m_max -= rhs; + return *this; + } + + bool Aabb2i::operator==(const Aabb2i& other) const + { + return m_min == other.m_min && m_max == other.m_max; + } + + bool Aabb2i::operator!=(const Aabb2i& other) const + { + return !(*this == other); } Aabb2i Aabb2i::GetClamped(Aabb2i rhs) const diff --git a/Gems/Terrain/Code/Source/TerrainRenderer/Aabb2i.h b/Gems/Terrain/Code/Source/TerrainRenderer/Aabb2i.h index 88f735564d..3d350c8c3a 100644 --- a/Gems/Terrain/Code/Source/TerrainRenderer/Aabb2i.h +++ b/Gems/Terrain/Code/Source/TerrainRenderer/Aabb2i.h @@ -21,7 +21,11 @@ namespace Terrain Aabb2i(const Vector2i& min, const Vector2i& max); Aabb2i operator+(const Vector2i& offset) const; + Aabb2i& operator+=(const Vector2i& offset); Aabb2i operator-(const Vector2i& offset) const; + Aabb2i& operator-=(const Vector2i& offset); + bool operator==(const Aabb2i& other) const; + bool operator!=(const Aabb2i& other) const; Aabb2i GetClamped(Aabb2i rhs) const; bool IsValid() const; diff --git a/Gems/Terrain/Code/Source/TerrainRenderer/ClipmapBounds.cpp b/Gems/Terrain/Code/Source/TerrainRenderer/ClipmapBounds.cpp new file mode 100644 index 0000000000..29cc853328 --- /dev/null +++ b/Gems/Terrain/Code/Source/TerrainRenderer/ClipmapBounds.cpp @@ -0,0 +1,278 @@ +/* + * 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 +#include +#include + +namespace Terrain +{ + bool ClipmapBoundsRegion::operator==(const ClipmapBoundsRegion& other) const + { + return m_localAabb == other.m_localAabb && m_worldAabb.IsClose(other.m_worldAabb); + } + + bool ClipmapBoundsRegion::operator!=(const ClipmapBoundsRegion& other) const + { + return !(*this == other); + } + + ClipmapBounds::ClipmapBounds(const ClipmapBoundsDescriptor& desc) + : m_size(desc.m_size) + , m_halfSize(desc.m_size >> 1) + , m_clipmapUpdateMultiple(AZ::GetMax(desc.m_clipmapUpdateMultiple, 1)) + , m_scale(desc.m_clipToWorldScale) + , m_rcpScale(1.0f / desc.m_clipToWorldScale) + { + AZ_Error("ClipmapBounds", m_scale > 0.0f, "ClipmapBounds should have a scale that is greater than 0.0f."); + m_scale = AZ::GetMax(m_scale, AZ::Constants::FloatEpsilon); + + // recalculate m_center + m_center = GetSnappedCenter(GetClipSpaceVector(desc.m_worldSpaceCenter)); + } + + auto ClipmapBounds::UpdateCenter(const AZ::Vector2& newCenter, AZ::Aabb* untouchedRegion) -> ClipmapBoundsRegionList + { + return UpdateCenter(GetClipSpaceVector(newCenter), untouchedRegion); + } + + auto ClipmapBounds::UpdateCenter(const Vector2i& newCenter, AZ::Aabb* untouchedRegion) -> ClipmapBoundsRegionList + { + AZStd::vector updateRegions; + + // If the new snapped center isn't the same as the old, then generate update regions in clipmap space + Vector2i updatedCenter = GetSnappedCenter(newCenter); + + int32_t xDiff = updatedCenter.m_x - m_center.m_x; + int32_t updateWidth = AZStd::GetMin(abs(xDiff), m_size); + + /* + Calculate the update regions. In the common case, there will be two update regions that form either + an L or inverted L shape. To avoid double-counting the corner, it is always put in the vertical box: + _ + | | + | |____ + |_|____| + + */ + + // Calculate the vertical box + if (updatedCenter.m_x != m_center.m_x) + { + updateRegions.push_back(); + Aabb2i& updateRegion = updateRegions.back(); + + if (updatedCenter.m_x < m_center.m_x) + { + updateRegion.m_min.m_x = updatedCenter.m_x - m_halfSize; + updateRegion.m_max.m_x = updateRegion.m_min.m_x + updateWidth; + } + else + { + updateRegion.m_max.m_x = updatedCenter.m_x + m_halfSize; + updateRegion.m_min.m_x = updateRegion.m_max.m_x - updateWidth; + } + updateRegion.m_min.m_y = updatedCenter.m_y - m_halfSize; + updateRegion.m_max.m_y = updatedCenter.m_y + m_halfSize; + } + + // Calculate the horizontal box + if (updatedCenter.m_y != m_center.m_y && updateWidth < m_size) + { + updateRegions.push_back(); + Aabb2i& updateRegion = updateRegions.back(); + + uint32_t updateHeight = AZStd::GetMin(abs(updatedCenter.m_y - m_center.m_y), m_size); + if (updatedCenter.m_y < m_center.m_y) + { + updateRegion.m_min.m_y = updatedCenter.m_y - m_halfSize; + updateRegion.m_max.m_y = updateRegion.m_min.m_y + updateHeight; + } + else + { + updateRegion.m_max.m_y = updatedCenter.m_y + m_halfSize; + updateRegion.m_min.m_y = updateRegion.m_max.m_y - updateHeight; + } + + // If there was a vertical box, then don't double-count the corner of the update. + if (xDiff < 0) + { + updateRegion.m_min.m_x = updatedCenter.m_x - m_halfSize + updateWidth; + updateRegion.m_max.m_x = updatedCenter.m_x + m_halfSize; + } + else if (xDiff > 0) + { + updateRegion.m_min.m_x = updatedCenter.m_x - m_halfSize; + updateRegion.m_max.m_x = updatedCenter.m_x + m_halfSize - updateWidth; + } + } + + if (untouchedRegion) + { + // Default to the entire area being untouched. + AZ::Aabb worldBounds = GetWorldBounds(); + float maxX = worldBounds.GetMax().GetX(); + float minX = worldBounds.GetMin().GetX(); + float maxY = worldBounds.GetMax().GetY(); + float minY = worldBounds.GetMin().GetY(); + + if (updatedCenter.m_x < m_center.m_x) + { + maxX = (updatedCenter.m_x + m_halfSize) * m_rcpScale; + } + else if (updatedCenter.m_x > m_center.m_x) + { + minX = (updatedCenter.m_x - m_halfSize) * m_rcpScale; + } + if (updatedCenter.m_y < m_center.m_y) + { + maxY = (updatedCenter.m_y + m_halfSize) * m_rcpScale; + } + else if (updatedCenter.m_y > m_center.m_y) + { + minY = (updatedCenter.m_y - m_halfSize) * m_rcpScale; + } + + untouchedRegion->Set(AZ::Vector3(minX, minY, 0.0f), AZ::Vector3(maxX, maxY, 0.0f)); + } + + m_center = updatedCenter; + + m_modCenter.m_x = (m_size + (m_center.m_x % m_size)) % m_size; + m_modCenter.m_y = (m_size + (m_center.m_y % m_size)) % m_size; + + ClipmapBoundsRegionList boundsUpdate; + for (Aabb2i& updateRegion : updateRegions) + { + ClipmapBoundsRegionList update = TransformRegion(updateRegion); + boundsUpdate.insert(boundsUpdate.end(), update.begin(), update.end()); + } + + return boundsUpdate; + } + + auto ClipmapBounds::TransformRegion(AZ::Aabb worldSpaceRegion) -> ClipmapBoundsRegionList + { + AZ::Vector2 worldMin = AZ::Vector2(worldSpaceRegion.GetMin().GetX(), worldSpaceRegion.GetMin().GetY()); + AZ::Vector2 worldMax = AZ::Vector2(worldSpaceRegion.GetMax().GetX(), worldSpaceRegion.GetMax().GetY()); + + Aabb2i clipSpaceRegion; + clipSpaceRegion.m_min = GetClipSpaceVector(worldMin); + clipSpaceRegion.m_max = GetClipSpaceVector(worldMax); + + return TransformRegion(clipSpaceRegion); + } + + auto ClipmapBounds::TransformRegion(Aabb2i region) -> ClipmapBoundsRegionList + { + ClipmapBoundsRegionList transformedRegions; + + Aabb2i clampedRegion = region.GetClamped(GetLocalBounds()); + if (!clampedRegion.IsValid()) + { + // Early out if the region is outside the bounds + return transformedRegions; + } + + Vector2i minCorner = m_center - m_halfSize; + + Vector2i minBoundary; + minBoundary.m_x = (minCorner.m_x / m_size - (minCorner.m_x < 0 ? 1 : 0)) * m_size; + minBoundary.m_y = (minCorner.m_y / m_size - (minCorner.m_y < 0 ? 1 : 0)) * m_size; + + Aabb2i bottomLeftTile = Aabb2i(minBoundary, minBoundary + m_size); + + // For each of the 4 quadrants: + auto calculateQuadrant = [&](Aabb2i tile) + { + Aabb2i regionClampedToTile = clampedRegion.GetClamped(tile); + if (regionClampedToTile.IsValid()) + { + transformedRegions.push_back( + ClipmapBoundsRegion({ + GetWorldSpaceAabb(regionClampedToTile), + regionClampedToTile - tile.m_min + }) + ); + } + }; + + calculateQuadrant(bottomLeftTile); + calculateQuadrant(bottomLeftTile + Vector2i(m_size, 0)); + calculateQuadrant(bottomLeftTile + Vector2i(0, m_size)); + calculateQuadrant(bottomLeftTile + Vector2i(m_size, m_size)); + + return transformedRegions; + } + + AZ::Aabb ClipmapBounds::GetWorldBounds() const + { + Aabb2i localBounds = GetLocalBounds(); + + return AZ::Aabb::CreateFromMinMaxValues( + localBounds.m_min.m_x * m_scale, localBounds.m_min.m_y * m_scale, 0.0f, + localBounds.m_max.m_x * m_scale, localBounds.m_max.m_y * m_scale, 0.0f); + } + + float ClipmapBounds::GetWorldSpaceSafeDistance() const + { + return (m_halfSize - m_clipmapUpdateMultiple) * m_scale; + } + + Vector2i ClipmapBounds::GetSnappedCenter(const Vector2i& center) + { + Vector2i updatedCenter = m_center; + + // Update the snapped center if the new center has drifted beyond the margin + auto UpdateDim = [&](int32_t centerDim, int32_t& snappedCenterDim) -> void + { + int32_t diff = centerDim - snappedCenterDim; + + int32_t scaledCenterDim = (centerDim / m_clipmapUpdateMultiple); + if (centerDim < 0) + { + // Force rounding down for negatives + scaledCenterDim--; + } + + if (diff >= m_clipmapUpdateMultiple) + { + snappedCenterDim = scaledCenterDim * m_clipmapUpdateMultiple; + } + if (diff < -m_clipmapUpdateMultiple) + { + snappedCenterDim = (scaledCenterDim + 1) * m_clipmapUpdateMultiple; + } + }; + UpdateDim(center.m_x, updatedCenter.m_x); + UpdateDim(center.m_y, updatedCenter.m_y); + + return updatedCenter; + } + + Aabb2i ClipmapBounds::GetLocalBounds() const + { + return Aabb2i(m_center - m_halfSize, m_center + m_halfSize); + } + + Vector2i ClipmapBounds::GetClipSpaceVector(const AZ::Vector2& worldSpaceVector) const + { + // Get rounded integer x/y coords in clipmap space. + int32_t x = AZStd::lround(worldSpaceVector.GetX() * m_rcpScale); + int32_t y = AZStd::lround(worldSpaceVector.GetY() * m_rcpScale); + return Vector2i(x, y); + } + + AZ::Aabb ClipmapBounds::GetWorldSpaceAabb(const Aabb2i& clipSpaceAabb) const + { + return AZ::Aabb::CreateFromMinMaxValues( + clipSpaceAabb.m_min.m_x * m_scale, clipSpaceAabb.m_min.m_y * m_scale, 0.0f, + clipSpaceAabb.m_max.m_x * m_scale, clipSpaceAabb.m_max.m_y * m_scale, 0.0f + ); + } +} diff --git a/Gems/Terrain/Code/Source/TerrainRenderer/ClipmapBounds.h b/Gems/Terrain/Code/Source/TerrainRenderer/ClipmapBounds.h new file mode 100644 index 0000000000..1aac4d8c9e --- /dev/null +++ b/Gems/Terrain/Code/Source/TerrainRenderer/ClipmapBounds.h @@ -0,0 +1,159 @@ +/* + * 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 + +#include +#include +#include +#include +#include +#include + +namespace Terrain +{ + + struct ClipmapBoundsDescriptor + { + //! Width and height of the clipmap in texels. + uint32_t m_size = 1024; + + //! Current center location of the clipmap in world space + AZ::Vector2 m_worldSpaceCenter = AZ::Vector2::CreateZero(); + + // Updates to the clipmap will be produced in multiples of this value. This + // allows for larger but less frequent updates, and gives some wiggle room + // for each movement before an update is triggered. + // Note: This also means that whatever uses this clipmap should only ever + // display m_size - (2 * m_clipmapUpdateMultiple) pixels from the clipmap. + // Use GetWorldSpaceSafeDistance() to get the safe distance from center. + uint32_t m_clipmapUpdateMultiple = 4; + + //! Scale of the clip map compared to the world. A scale of 0.5 means that + //! a clipmap of size 1024 would cover 512 meters. + float m_clipToWorldScale = 1.0f; + }; + + struct ClipmapBoundsRegion + { + //! The world bounds of the updated region. Z is ignored. + AZ::Aabb m_worldAabb; + + //! The clipmaps bounds of the updated region. Will always be between 0 and size. + //! Min inclusive, max exclusive. + Aabb2i m_localAabb; + + bool operator==(const ClipmapBoundsRegion& other) const; + bool operator!=(const ClipmapBoundsRegion& other) const; + }; + + // This class manages a single clipmap region. A clipmap is a virtual view into a much larger + // region, where the clipmap view is centered around a point like the current camera position. + // The clipmap texture wraps to form a repeating grid and never moves, but only data within + // the clipmap bounds is actually valid. This makes looking up data in the clipmap trivial + // since it's just the world coordinate scaled by some amount. This technique also allows for + // only the edge areas of the clipmap to be updated as the center point moves around the world. + // + // The edges of the clipmap bounds will typically run through the texture, dividing it into 4 + // regions, except in cases where the clipmap bounds happen to be aligned with the underlying + // grid. This means whenever some bounding box needs to be updated in the clipmap, it may actually + // translate to 4 different areas of the underlying texture - one for each quadrant. + // + // This class aids in figuring out which areas of a clipmap need to be updated as its center point + // moves around in the world, and can map a single region that needs to be updated into several + // separate regions for each quadrant. + + /* + ___________________________ + | | | | | Clipmap Clipmap + | | | | | Bounds Texture (Tiled) + |______|______|______|______| ______ ______ + | | _|____ | | | | | |____|_| + | | | | | | | |_|_*__| | | | + |______|____|_|_*__|_|______| |_|____| |_*__|_| + | | |_|____| | | + | | | | | + |______|______|______|______| + | | | | | + | | | | | + |______|______|______|______| + + */ + + class ClipmapBounds + { + public: + + explicit ClipmapBounds(const ClipmapBoundsDescriptor& desc); + ~ClipmapBounds() = default; + + using ClipmapBoundsRegionList = AZStd::vector; + + //! Updates the clipmap bounds using a world coordinate center position and returns + //! 0-2 regions that need to be updated due to moving beyond the margins. These update + //! regions will always be at least the size of the margin, and will represent horizontal + //! and/or vertical strips along the edges of the clipmap. An optional untouched region + //! aabb can be passed to this function to get an aabb of areas inside the bounds of the + //! clipmap but not updated by the center moving. This can be useful in cases where part + //! of the bounds of the clipmap is dirty, but areas that will already be updated due + //! to the center moving shouldn't be updated twice. + ClipmapBoundsRegionList UpdateCenter(const AZ::Vector2& newCenter, AZ::Aabb* untouchedRegion = nullptr); + + //! Updates the clipmap bounds using a position in clipmap space (no scaling) and returns + //! 0-2 regions that need to be updated due to moving beyond the margins. These update + //! regions will always be at least the size of the margin, and will represent horizontal + //! and/or vertical strips along the edges of the clipmap. An optional untouched region + //! aabb can be passed to this function to get an aabb of areas inside the bounds of the + //! clipmap but not updated by the center moving. This can be useful in cases where part + //! of the bounds of the clipmap is dirty, but areas that will already be updated due + //! to the center moving shouldn't be updated twice. + ClipmapBoundsRegionList UpdateCenter(const Vector2i& newCenter, AZ::Aabb* untouchedRegion = nullptr); + + //! Takes in a single world space region and transforms it into 0-4 regions in the clipmap clamped + //! to the bounds of the clipmap. + ClipmapBoundsRegionList TransformRegion(AZ::Aabb worldSpaceRegion); + + //! Takes in a single unscaled clipmap space region and transforms it into 0-4 regions in the clipmap clamped + //! to the bounds of the clipmap. + ClipmapBoundsRegionList TransformRegion(Aabb2i clipSpaceRegion); + + //! Returns the bounds covered by this clipmap in world space. Z component is always 0. + AZ::Aabb GetWorldBounds() const; + + //! Returns the safe x and y distance from the center in world space. This is based on the scale, + //! clipmap size, and m_clipmapUpdateMultiple. For example, a clipmap size 1024 with scale + //! 0.25 and margin of 4 would have a safe distance of (1024 * 0.5 - 4) * 0.25 = 127.0f. + float GetWorldSpaceSafeDistance() const; + + private: + + //! Returns the center point snapped to a multiple of m_clipmapUpdateMultiple. This isn't + //! a simple rounding operation. The value returned will only be different from the curernt + //! center if the value passed in is greater than m_clipmapUpdateMultiple away from the center. + Vector2i GetSnappedCenter(const Vector2i& center); + + //! Returns the bounds covered by the clipmap in local space + Aabb2i GetLocalBounds() const; + + //! Applies scale and averages a world space vector to get a clip space vector. + Vector2i GetClipSpaceVector(const AZ::Vector2& worldSpaceVector) const; + + //! Applies inverse scale to get a world aabb from clip space aabb. + AZ::Aabb GetWorldSpaceAabb(const Aabb2i& clipSpaceAabb) const; + + Vector2i m_center; + Vector2i m_modCenter; + int32_t m_size; + int32_t m_halfSize; + int32_t m_clipmapUpdateMultiple; + float m_scale; + float m_rcpScale; + + }; + +} diff --git a/Gems/Terrain/Code/Source/TerrainRenderer/Vector2i.cpp b/Gems/Terrain/Code/Source/TerrainRenderer/Vector2i.cpp index 1df945b88c..058b9ae76f 100644 --- a/Gems/Terrain/Code/Source/TerrainRenderer/Vector2i.cpp +++ b/Gems/Terrain/Code/Source/TerrainRenderer/Vector2i.cpp @@ -7,35 +7,90 @@ */ #include +#include namespace Terrain { - auto Vector2i::operator+(const Vector2i& rhs) const -> Vector2i + + Vector2i::Vector2i(int32_t x, int32_t y) + : m_x(x) + , m_y(y) + {} + + Vector2i::Vector2i(uint32_t value) + : m_x(aznumeric_cast(value)) + , m_y(aznumeric_cast(value)) + {} + + Vector2i::Vector2i(int32_t value) + : m_x(value) + , m_y(value) + {} + + Vector2i Vector2i::operator+(const Vector2i& rhs) const { - Vector2i offsetPoint = *this; - offsetPoint += rhs; - return offsetPoint; + Vector2i returnPoint = *this; + returnPoint += rhs; + return returnPoint; } - auto Vector2i::operator+=(const Vector2i& rhs) -> Vector2i& + Vector2i& Vector2i::operator+=(const Vector2i& rhs) { m_x += rhs.m_x; m_y += rhs.m_y; return *this; } - auto Vector2i::operator-(const Vector2i& rhs) const -> Vector2i + Vector2i Vector2i::operator-(const Vector2i& rhs) const { return *this + -rhs; } - auto Vector2i::operator-=(const Vector2i& rhs) -> Vector2i& + Vector2i& Vector2i::operator-=(const Vector2i& rhs) { return *this += -rhs; } - auto Vector2i::operator-() const -> Vector2i + Vector2i Vector2i::operator-() const { return {-m_x, -m_y}; } + + Vector2i Vector2i::operator*(const Vector2i& rhs) const + { + Vector2i returnPoint = *this; + returnPoint *= rhs; + return returnPoint; + } + + Vector2i& Vector2i::operator*=(const Vector2i& rhs) + { + m_x *= rhs.m_x; + m_y *= rhs.m_y; + return *this; + } + + Vector2i Vector2i::operator/(const Vector2i& rhs) const + { + Vector2i returnPoint = *this; + returnPoint /= rhs; + return returnPoint; + } + + Vector2i& Vector2i::operator/=(const Vector2i& rhs) + { + m_x /= rhs.m_x; + m_y /= rhs.m_y; + return *this; + } + + bool Vector2i::operator==(const Vector2i& rhs) const + { + return rhs.m_x == m_x && rhs.m_y == m_y; + } + + bool Vector2i::operator!=(const Vector2i& rhs) const + { + return !(*this == rhs); + } } diff --git a/Gems/Terrain/Code/Source/TerrainRenderer/Vector2i.h b/Gems/Terrain/Code/Source/TerrainRenderer/Vector2i.h index 1244972fe9..a7c598a91f 100644 --- a/Gems/Terrain/Code/Source/TerrainRenderer/Vector2i.h +++ b/Gems/Terrain/Code/Source/TerrainRenderer/Vector2i.h @@ -16,14 +16,26 @@ namespace Terrain { public: + Vector2i() = default; + Vector2i(int32_t x, int32_t y); + Vector2i(uint32_t value); + Vector2i(int32_t value); + Vector2i operator+(const Vector2i& rhs) const; Vector2i& operator+=(const Vector2i& rhs); Vector2i operator-(const Vector2i& rhs) const; Vector2i& operator-=(const Vector2i& rhs); Vector2i operator-() const; + Vector2i operator*(const Vector2i& rhs) const; + Vector2i& operator*=(const Vector2i& rhs); + Vector2i operator/(const Vector2i& rhs) const; + Vector2i& operator/=(const Vector2i& rhs); + + bool operator==(const Vector2i& rhs) const; + bool operator!=(const Vector2i& rhs) const; + int32_t m_x{ 0 }; int32_t m_y{ 0 }; - }; } diff --git a/Gems/Terrain/Code/Tests/ClipmapBoundsTests.cpp b/Gems/Terrain/Code/Tests/ClipmapBoundsTests.cpp new file mode 100644 index 0000000000..9b09deb8f5 --- /dev/null +++ b/Gems/Terrain/Code/Tests/ClipmapBoundsTests.cpp @@ -0,0 +1,336 @@ +/* + * 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 +#include + +#include +#include + +#include +#include + +namespace UnitTest +{ + class ClipmapBoundsTests + : public UnitTest::AllocatorsTestFixture + { + public: + void CheckTransformRegionFullBounds(const Terrain::ClipmapBoundsDescriptor& desc); + }; + + void ClipmapBoundsTests::CheckTransformRegionFullBounds(const Terrain::ClipmapBoundsDescriptor& desc) + { + Terrain::ClipmapBounds bounds(desc); + + AZ::Aabb worldBounds = bounds.GetWorldBounds(); + float worldBoundsSize = worldBounds.GetXExtent(); + + auto output = bounds.TransformRegion(worldBounds); + ASSERT_EQ(output.size(), 4); + + AZ::Vector2 boundary = AZ::Vector2( + floorf(worldBounds.GetMax().GetX() / worldBoundsSize), + floorf(worldBounds.GetMax().GetY() / worldBoundsSize) + ) * worldBoundsSize; + + Terrain::Vector2i localMax = { + aznumeric_cast(AZStd::lround(desc.m_worldSpaceCenter.GetX() / desc.m_clipToWorldScale)), + aznumeric_cast(AZStd::lround(desc.m_worldSpaceCenter.GetY() / desc.m_clipToWorldScale)) + }; + localMax += aznumeric_cast(desc.m_size / 2ul); + + int32_t intSize = int32_t(desc.m_size); + Terrain::Vector2i localBoundary = { + ((localMax.m_x % intSize) + intSize) % intSize, + ((localMax.m_y % intSize) + intSize) % intSize + }; + + // Check each quadrant returned + AZStd::vector expected; + expected.resize(4); + + expected.at(0).m_localAabb = Terrain::Aabb2i({localBoundary.m_x, localBoundary.m_y}, {intSize, intSize}); + expected.at(0).m_worldAabb = AZ::Aabb::CreateFromMinMaxValues( + worldBounds.GetMin().GetX(), worldBounds.GetMin().GetY(), 0.0f, + boundary.GetX(), boundary.GetY(), 0.0f); + + expected.at(1).m_localAabb = Terrain::Aabb2i({0, localBoundary.m_y}, {localBoundary.m_x, intSize}); + expected.at(1).m_worldAabb = AZ::Aabb::CreateFromMinMaxValues( + boundary.GetX(), worldBounds.GetMin().GetY(), 0.0f, + worldBounds.GetMax().GetX(), boundary.GetY(), 0.0f); + + expected.at(2).m_localAabb = Terrain::Aabb2i({localBoundary.m_x, 0}, {intSize, localBoundary.m_y}); + expected.at(2).m_worldAabb = AZ::Aabb::CreateFromMinMaxValues( + worldBounds.GetMin().GetX(), boundary.GetY(), 0.0f, + boundary.GetX(), worldBounds.GetMax().GetY(), 0.0f); + + expected.at(3).m_localAabb = Terrain::Aabb2i({ 0, 0 }, { localBoundary.m_x, localBoundary.m_y }); + expected.at(3).m_worldAabb = AZ::Aabb::CreateFromMinMaxValues( + boundary.GetX(), boundary.GetY(), 0.0f, + worldBounds.GetMax().GetX(), worldBounds.GetMax().GetY(), 0.0f); + + EXPECT_THAT(output, ::testing::UnorderedElementsAreArray(expected)); + } + + TEST_F(ClipmapBoundsTests, Construction) + { + Terrain::ClipmapBoundsDescriptor desc; + Terrain::ClipmapBounds bounds(desc); + } + + TEST_F(ClipmapBoundsTests, BasicTransform) + { + // Create clipmap around 0.0, so it's perfectly divided into 4 quadrants + Terrain::ClipmapBoundsDescriptor desc; + desc.m_worldSpaceCenter = AZ::Vector2(0.0f, 0.0f); + desc.m_clipmapUpdateMultiple = 0; + desc.m_clipToWorldScale = 1.0f; + desc.m_size = 1024; + Terrain::ClipmapBounds bounds(desc); + + auto output = bounds.TransformRegion(AZ::Aabb::CreateFromMinMaxValues(-512.0f, -512.0f, 0.0f, 512.0f, 512.0f, 0.0f)); + + ASSERT_EQ(output.size(), 4); + + // Check each quadrant returned + EXPECT_EQ(output.at(0).m_localAabb, Terrain::Aabb2i({512, 512}, {1024, 1024})); + EXPECT_TRUE(output.at(0).m_worldAabb.IsClose(AZ::Aabb::CreateFromMinMaxValues(-512.0f, -512.0f, 0.0f, 0.0f, 0.0f, 0.0f))); + EXPECT_EQ(output.at(1).m_localAabb, Terrain::Aabb2i({0, 512}, {512, 1024})); + EXPECT_TRUE(output.at(1).m_worldAabb.IsClose(AZ::Aabb::CreateFromMinMaxValues(0.0f, -512.0f, 0.0f, 512.0f, 0.0f, 0.0f))); + EXPECT_EQ(output.at(2).m_localAabb, Terrain::Aabb2i({512, 0}, {1024, 512})); + EXPECT_TRUE(output.at(2).m_worldAabb.IsClose(AZ::Aabb::CreateFromMinMaxValues(-512.0f, 0.0f, 0.0f, 0.0f, 512.0f, 0.0f))); + EXPECT_EQ(output.at(3).m_localAabb, Terrain::Aabb2i({0, 0}, {512, 512})); + EXPECT_TRUE(output.at(3).m_worldAabb.IsClose(AZ::Aabb::CreateFromMinMaxValues(0.0f, 0.0f, 0.0f, 512.0f, 512.0f, 0.0f))); + } + + TEST_F(ClipmapBoundsTests, ScaledTransform) + { + // Create clipmap around 0.0, so it's perfectly divided into 4 quadrants, but half-scale + Terrain::ClipmapBoundsDescriptor desc; + desc.m_worldSpaceCenter = AZ::Vector2(0.0f, 0.0f); + desc.m_clipmapUpdateMultiple = 0; + desc.m_clipToWorldScale = 0.5f; + desc.m_size = 1024; + Terrain::ClipmapBounds bounds(desc); + + auto output = bounds.TransformRegion(AZ::Aabb::CreateFromMinMaxValues(-256.0f, -256.0f, 0.0f, 256.0f, 256.0f, 0.0f)); + + ASSERT_EQ(output.size(), 4); + + // Check each quadrant returned + EXPECT_EQ(output.at(0).m_localAabb, Terrain::Aabb2i({512, 512}, {1024, 1024})); + EXPECT_TRUE(output.at(0).m_worldAabb.IsClose(AZ::Aabb::CreateFromMinMaxValues(-256.0f, -256.0f, 0.0f, 0.0f, 0.0f, 0.0f))); + EXPECT_EQ(output.at(1).m_localAabb, Terrain::Aabb2i({0, 512}, {512, 1024})); + EXPECT_TRUE(output.at(1).m_worldAabb.IsClose(AZ::Aabb::CreateFromMinMaxValues(0.0f, -256.0f, 0.0f, 256.0f, 0.0f, 0.0f))); + EXPECT_EQ(output.at(2).m_localAabb, Terrain::Aabb2i({512, 0}, {1024, 512})); + EXPECT_TRUE(output.at(2).m_worldAabb.IsClose(AZ::Aabb::CreateFromMinMaxValues(-256.0f, 0.0f, 0.0f, 0.0f, 256.0f, 0.0f))); + EXPECT_EQ(output.at(3).m_localAabb, Terrain::Aabb2i({0, 0}, {512, 512})); + EXPECT_TRUE(output.at(3).m_worldAabb.IsClose(AZ::Aabb::CreateFromMinMaxValues(0.0f, 0.0f, 0.0f, 256.0f, 256.0f, 0.0f))); + } + + TEST_F(ClipmapBoundsTests, ComplexTransformsFullBounds) + { + // Check 4 different clipmaps - one in completely positive space, one in negative space, and two straddling the axis + + // Clipmap in negative space + { + Terrain::ClipmapBoundsDescriptor desc; + desc.m_worldSpaceCenter = AZ::Vector2(-1234.0f, -5432.0f); + desc.m_clipmapUpdateMultiple = 0; + desc.m_clipToWorldScale = 0.75f; + desc.m_size = 512; + CheckTransformRegionFullBounds(desc); + } + + // Clipmap in positive space + { + Terrain::ClipmapBoundsDescriptor desc; + desc.m_worldSpaceCenter = AZ::Vector2(1234.0f, 5432.0f); + desc.m_clipmapUpdateMultiple = 0; + desc.m_clipToWorldScale = 1.25f; + desc.m_size = 1024; + CheckTransformRegionFullBounds(desc); + } + + // Clipmap on x axis + { + Terrain::ClipmapBoundsDescriptor desc; + desc.m_worldSpaceCenter = AZ::Vector2(1234.0f, -100.0f); + desc.m_clipmapUpdateMultiple = 0; + desc.m_clipToWorldScale = 1.5f; + desc.m_size = 256; + CheckTransformRegionFullBounds(desc); + } + // Clipmap on y axis + { + Terrain::ClipmapBoundsDescriptor desc; + desc.m_worldSpaceCenter = AZ::Vector2(-100.0f, 5432.0f); + desc.m_clipmapUpdateMultiple = 0; + desc.m_clipToWorldScale = 1.0f; + desc.m_size = 2048; + CheckTransformRegionFullBounds(desc); + } + } + + TEST_F(ClipmapBoundsTests, TransformSmallBounds) + { + // Create clipmap around 0.0, so it's perfectly divided into 4 quadrants + Terrain::ClipmapBoundsDescriptor desc; + desc.m_worldSpaceCenter = AZ::Vector2(0.0f, 0.0f); + desc.m_clipmapUpdateMultiple = 0; + desc.m_clipToWorldScale = 1.0f; + desc.m_size = 1024; + Terrain::ClipmapBounds bounds(desc); + + { + // Single quadrant positive + + AZ::Aabb smallArea = AZ::Aabb::CreateFromMinMaxValues( + 10.0f, 10.0f, 0.0f, 50.0f, 50.0f, 0.0f + ); + + auto output = bounds.TransformRegion(smallArea); + + ASSERT_EQ(output.size(), 1); + EXPECT_EQ(output.at(0).m_localAabb, Terrain::Aabb2i({10, 10}, {50, 50})); + EXPECT_TRUE(output.at(0).m_worldAabb.IsClose(AZ::Aabb::CreateFromMinMaxValues(10.0f, 10.0f, 0.0f, 50.0f, 50.0f, 0.0f))); + } + + { + // Single quadrant negative + + AZ::Aabb smallArea = AZ::Aabb::CreateFromMinMaxValues( + -50.0f, -50.0f, 0.0f, -10.0f, -10.0f, 0.0f + ); + + auto output = bounds.TransformRegion(smallArea); + + ASSERT_EQ(output.size(), 1); + EXPECT_EQ(output.at(0).m_localAabb, Terrain::Aabb2i({974, 974}, {1014, 1014})); + EXPECT_TRUE(output.at(0).m_worldAabb.IsClose(AZ::Aabb::CreateFromMinMaxValues(-50.0f, -50.0f, 0.0f, -10.0f, -10.0f, 0.0f))); + } + + { + // 2 quadrant positive + + AZ::Aabb smallArea = AZ::Aabb::CreateFromMinMaxValues( + 10.0f, -10.0f, 0.0f, 50.0f, 50.0f, 0.0f + ); + + auto output = bounds.TransformRegion(smallArea); + + ASSERT_EQ(output.size(), 2); + EXPECT_EQ(output.at(0).m_localAabb, Terrain::Aabb2i({10, 1014}, {50, 1024})); + EXPECT_TRUE(output.at(0).m_worldAabb.IsClose(AZ::Aabb::CreateFromMinMaxValues(10.0f, -10.0f, 0.0f, 50.0f, 0.0f, 0.0f))); + EXPECT_EQ(output.at(1).m_localAabb, Terrain::Aabb2i({10, 0}, {50, 50})); + EXPECT_TRUE(output.at(1).m_worldAabb.IsClose(AZ::Aabb::CreateFromMinMaxValues(10.0f, 0.0f, 0.0f, 50.0f, 50.0f, 0.0f))); + } + } + + TEST_F(ClipmapBoundsTests, MarginReducesUpdates) + { + // With a margin defined, the bounds should only trigger updates when the camera moves outside the margins + + // Create clipmap around 0.0, so it's perfectly divided into 4 quadrants + Terrain::ClipmapBoundsDescriptor desc; + desc.m_worldSpaceCenter = AZ::Vector2(0.0f, 0.0f); + desc.m_clipmapUpdateMultiple = 16; + desc.m_clipToWorldScale = 1.0f; + desc.m_size = 1024; + Terrain::ClipmapBounds bounds(desc); + + // center moved forward to 10, still within margin + auto output1 = bounds.UpdateCenter(AZ::Vector2(10.0f, 10.0f)); + EXPECT_EQ(output1.size(), 0); + // center moved forwrd to 20, beyond margin, triggers update + auto output2 = bounds.UpdateCenter(AZ::Vector2(20.0f, 20.0f)); + EXPECT_GT(output2.size(), 0); + // center moved back to 10, still within margin + auto output3 = bounds.UpdateCenter(AZ::Vector2(10.0f, 10.0f)); + EXPECT_EQ(output3.size(), 0); + // center moved back to 0, still within margin (on edge) + auto output4 = bounds.UpdateCenter(AZ::Vector2(0.0f, 0.0f)); + EXPECT_EQ(output4.size(), 0); + // center moved back to -10, beyond margin, triggers update + auto output5 = bounds.UpdateCenter(AZ::Vector2(-10.0f, -10.0f)); + EXPECT_GT(output5.size(), 0); + } + + TEST_F(ClipmapBoundsTests, CenterMovementUpdates) + { + // Create clipmap around 0.0, so it's perfectly divided into 4 quadrants + Terrain::ClipmapBoundsDescriptor desc; + desc.m_worldSpaceCenter = AZ::Vector2(0.0f, 0.0f); + desc.m_clipmapUpdateMultiple = 16; + desc.m_clipToWorldScale = 1.0f; + desc.m_size = 1024; + Terrain::ClipmapBounds bounds(desc); + + { + AZ::Aabb untouchedRegion = AZ::Aabb::CreateNull(); + auto output = bounds.UpdateCenter(AZ::Vector2(20.0f, 20.0f), &untouchedRegion); + ASSERT_EQ(output.size(), 4); + + // Instead of checking bounds directly, do several checks to make sure the bounds are appropriate. Since + // the center moved just outside the margin along the diagonal, we should expect two edges to be updated + // that are the width of the margin. + + // 1. The number of pixels updated in the bounds should be two sides of margin width + float pixelsCovered = 0; + for (auto& region : output) + { + // Note: GetSurfaceArea() returns the area of all 6 sides of the aabb. With a Z extent of 0, that + // means that only the top and bottom will be counted, so we need to multiply by 0.5. + pixelsCovered += region.m_worldAabb.GetSurfaceArea() * 0.5f; + } + + // Two edges of margin * size, minus the overlap in the corner. + const uint32_t updateMultiple = desc.m_clipmapUpdateMultiple; + float expectedCoverage = updateMultiple * desc.m_size * 2.0f - updateMultiple * updateMultiple; + EXPECT_NEAR(pixelsCovered, expectedCoverage, 0.0001f); + + // 2. The untouched region area should match what's expected + float untouchedRegionArea = untouchedRegion.GetSurfaceArea() * 0.5f; + float expectedUntouchedRegionSide = aznumeric_cast(desc.m_size - desc.m_clipmapUpdateMultiple); + float expectedUntouchedRegionArea = expectedUntouchedRegionSide * expectedUntouchedRegionSide; + EXPECT_NEAR(untouchedRegionArea, expectedUntouchedRegionArea, 0.0001f); + + // 3. All of the update regions should be inside the world bounds of the clipmap + AZ::Aabb worldBounds = bounds.GetWorldBounds(); + for (auto& region : output) + { + EXPECT_EQ(region.m_worldAabb.GetClamped(worldBounds), region.m_worldAabb); + } + + // 4. The untouched region should also be inside the world bounds of the clipmap; + EXPECT_EQ(untouchedRegion.GetClamped(worldBounds), untouchedRegion); + + // 5. None of the update regions should overlap each other or the untouched region + + // push the untouched region on the vector to make comparisons easier + output.push_back(Terrain::ClipmapBoundsRegion({untouchedRegion, Terrain::Aabb2i({}) })); + for (uint32_t i = 0; i < output.size(); ++i) + { + const AZ::Aabb boundsToCheck = output.at(i).m_worldAabb; + for (uint32_t j = i + 1; j < output.size(); ++j) + { + // AZ::Aabb::Overlaps() counts touching edges as overlapping, so we need a strict version + auto strictOverlaps = [](const AZ::Aabb& aabb1, const AZ::Aabb& aabb2) -> bool + { + return aabb1.GetMin().IsLessThan(aabb2.GetMax()) && + aabb1.GetMax().IsGreaterThan(aabb2.GetMin()); + }; + EXPECT_FALSE(strictOverlaps(boundsToCheck, output.at(j).m_worldAabb)); + } + } + + } + + } +} diff --git a/Gems/Terrain/Code/terrain_files.cmake b/Gems/Terrain/Code/terrain_files.cmake index 4b994c2587..53a7c6ac6d 100644 --- a/Gems/Terrain/Code/terrain_files.cmake +++ b/Gems/Terrain/Code/terrain_files.cmake @@ -35,6 +35,10 @@ set(FILES Source/TerrainRenderer/Components/TerrainMacroMaterialComponent.h Source/TerrainRenderer/Aabb2i.cpp Source/TerrainRenderer/Aabb2i.h + Source/TerrainRenderer/BindlessImageArrayHandler.cpp + Source/TerrainRenderer/BindlessImageArrayHandler.h + Source/TerrainRenderer/ClipmapBounds.cpp + Source/TerrainRenderer/ClipmapBounds.h Source/TerrainRenderer/TerrainFeatureProcessor.cpp Source/TerrainRenderer/TerrainFeatureProcessor.h Source/TerrainRenderer/TerrainDetailMaterialManager.cpp @@ -43,8 +47,6 @@ set(FILES Source/TerrainRenderer/TerrainMacroMaterialManager.h Source/TerrainRenderer/TerrainMeshManager.cpp Source/TerrainRenderer/TerrainMeshManager.h - Source/TerrainRenderer/BindlessImageArrayHandler.cpp - Source/TerrainRenderer/BindlessImageArrayHandler.h Source/TerrainRenderer/TerrainAreaMaterialRequestBus.h Source/TerrainRenderer/TerrainMacroMaterialBus.cpp Source/TerrainRenderer/TerrainMacroMaterialBus.h diff --git a/Gems/Terrain/Code/terrain_tests_files.cmake b/Gems/Terrain/Code/terrain_tests_files.cmake index 1a46fdd203..39cbe0861b 100644 --- a/Gems/Terrain/Code/terrain_tests_files.cmake +++ b/Gems/Terrain/Code/terrain_tests_files.cmake @@ -7,14 +7,15 @@ # set(FILES - Tests/TerrainTest.cpp - Tests/TerrainSystemTest.cpp + Tests/ClipmapBoundsTests.cpp Tests/LayerSpawnerTests.cpp - Tests/TerrainPhysicsColliderTests.cpp - Tests/SurfaceMaterialsListTest.cpp Tests/MockAxisAlignedBoxShapeComponent.h Tests/TerrainHeightGradientListTests.cpp Tests/TerrainMacroMaterialTests.cpp + Tests/SurfaceMaterialsListTest.cpp + Tests/TerrainPhysicsColliderTests.cpp Tests/TerrainSurfaceGradientListTests.cpp Tests/TerrainSystemBenchmarks.cpp + Tests/TerrainSystemTest.cpp + Tests/TerrainTest.cpp ) From 6eec5e1a21b75aaabede378649964a037cfc44f4 Mon Sep 17 00:00:00 2001 From: Mike Chang Date: Wed, 26 Jan 2022 13:00:46 -0800 Subject: [PATCH 268/284] EBS snapshot script (#6978) Adding snapshot script, modify Jenkinsfile and build_config.json for each platform to use the snapshot tag Signed-off-by: Mike Chang --- scripts/build/Jenkins/Jenkinsfile | 32 ++- .../build/Platform/Android/build_config.json | 9 +- scripts/build/Platform/Android/pipeline.json | 6 +- .../build/Platform/Linux/build_config.json | 3 +- scripts/build/Platform/Linux/pipeline.json | 4 + .../build/Platform/Windows/build_config.json | 9 +- scripts/build/Platform/Windows/pipeline.json | 6 +- scripts/build/tools/ebs_snapshot.py | 197 ++++++++++++++++++ 8 files changed, 255 insertions(+), 11 deletions(-) create mode 100644 scripts/build/tools/ebs_snapshot.py diff --git a/scripts/build/Jenkins/Jenkinsfile b/scripts/build/Jenkins/Jenkinsfile index b55689b871..e4957992a5 100644 --- a/scripts/build/Jenkins/Jenkinsfile +++ b/scripts/build/Jenkins/Jenkinsfile @@ -9,6 +9,7 @@ import groovy.json.JsonOutput PIPELINE_CONFIG_FILE = 'scripts/build/Jenkins/lumberyard.json' INCREMENTAL_BUILD_SCRIPT_PATH = 'scripts/build/bootstrap/incremental_build_util.py' +EBS_SNAPSHOT_SCRIPT_PATH = 'scripts/build/tools/ebs_snapshot.py' PIPELINE_RETRY_ATTEMPTS = 3 EMPTY_JSON = readJSON text: '{}' @@ -206,7 +207,8 @@ def CheckoutBootstrapScripts(String branchName) { [$class: 'SparseCheckoutPaths', sparseCheckoutPaths: [ [ $class: 'SparseCheckoutPath', path: 'scripts/build/Jenkins/' ], [ $class: 'SparseCheckoutPath', path: 'scripts/build/bootstrap/' ], - [ $class: 'SparseCheckoutPath', path: 'scripts/build/Platform' ] + [ $class: 'SparseCheckoutPath', path: 'scripts/build/Platform' ], + [ $class: 'SparseCheckoutPath', path: 'scripts/build/tools/' ] ]], // Shallow checkouts break changelog computation. Do not enable. [$class: 'CloneOption', noTags: false, reference: '', shallow: false] @@ -495,6 +497,19 @@ def PostBuildCommonSteps(String workspace, Map params, boolean mount = true) { } } +def HandleDriveSnapshots(String repositoryName, String projectName, String pipeline, String branchName, String platform, String buildType) { + unstash name: 'ebs_snapshot_script' + + catchError(message: "Error snapshotting volume (this won't fail the build)", buildResult: 'UNSTABLE', stageResult: 'FAILURE') { + def pythonCmd = 'python3 -u ' + + mountName = "Name:${repositoryName}_${projectName}_${pipeline}_${branchName}_${platform}_${buildType}" + mountName = mountName.replace('/', '_').replace('\\', '_') + palSh("${pythonCmd} ${EBS_SNAPSHOT_SCRIPT_PATH} --action create --tags ${mountName} --execute", "Starting volume snapshots", true) + palSh("${pythonCmd} ${EBS_SNAPSHOT_SCRIPT_PATH} --action delete --tags ${mountName} --retention ${env.SNAP_RETENTION} --execute", "Cleaning up old snapshots", true) + } +} + def CreateSetupStage(Map pipelineConfig, String snapshot, String repositoryName, String projectName, String pipelineName, String branchName, String platformName, String jobName, Map environmentVars, boolean onlyMountEBSVolume = false) { return { stage('Setup') { @@ -564,6 +579,14 @@ def CreateTeardownStage(Map environmentVars, Map params) { } } +def CreateSnapshotStage(String repositoryName, String projectName, String pipelineName, String branchName, String platformName, String buildType, String jobName) { + return{ + stage("${jobName}_snapshot_ebs_volume") { + HandleDriveSnapshots(repositoryName, projectName, pipelineName, branchName, platformName, buildType) + } + } +} + def CreateSingleNode(Map pipelineConfig, def platform, def build_job, Map envVars, String branchName, String pipelineName, String repositoryName, String projectName, boolean onlyMountEBSVolume = false) { def nodeLabel = envVars['NODE_LABEL'] return { @@ -632,6 +655,9 @@ def CreateSingleNode(Map pipelineConfig, def platform, def build_job, Map envVar CreateExportTestScreenshotsStage(pipelineConfig, branchName, platform.key, build_job_name, envVars, params).call() } CreateTeardownStage(envVars, params).call() + if (envVars['CREATE_SNAPSHOT']?.toBoolean()) { + CreateSnapshotStage(repositoryName, projectName, pipelineName, branchName, platform.key, build_job.key, build_job_name).call() + } } } } @@ -816,9 +842,11 @@ try { pipelineProperties.add(parameters(pipelineParameters.unique())) properties(pipelineProperties) - // Stash the INCREMENTAL_BUILD_SCRIPT_PATH since all nodes will use it + // Stash the INCREMENTAL_BUILD_SCRIPT_PATH and EBS_SNAPSHOT_SCRIPT_PATH since all nodes will use it stash name: 'incremental_build_script', includes: INCREMENTAL_BUILD_SCRIPT_PATH + stash name: 'ebs_snapshot_script', + includes: EBS_SNAPSHOT_SCRIPT_PATH } } } diff --git a/scripts/build/Platform/Android/build_config.json b/scripts/build/Platform/Android/build_config.json index da538b22ec..e31aa4d5a0 100644 --- a/scripts/build/Platform/Android/build_config.json +++ b/scripts/build/Platform/Android/build_config.json @@ -9,7 +9,8 @@ }, "profile_pipe": { "TAGS": [ - "default" + "default", + "snapshot" ], "steps": [ "profile" @@ -77,7 +78,8 @@ "default", "weekly-build-metrics", "nightly-incremental", - "nightly-clean" + "nightly-clean", + "snapshot" ], "COMMAND":"../Windows/build_asset_windows.cmd", "PARAMETERS": { @@ -127,7 +129,8 @@ "gradle": { "TAGS":[ "default", - "weekly-build-metrics" + "weekly-build-metrics", + "snapshot" ], "COMMAND":"gradle_windows.cmd", "PARAMETERS": { diff --git a/scripts/build/Platform/Android/pipeline.json b/scripts/build/Platform/Android/pipeline.json index 2e426c7891..ca3a9f998e 100644 --- a/scripts/build/Platform/Android/pipeline.json +++ b/scripts/build/Platform/Android/pipeline.json @@ -14,6 +14,10 @@ }, "nightly-clean": { "CLEAN_WORKSPACE": true + }, + "snapshot": { + "CLEAN_WORKSPACE": true, + "CREATE_SNAPSHOT": true } } -} \ No newline at end of file +} diff --git a/scripts/build/Platform/Linux/build_config.json b/scripts/build/Platform/Linux/build_config.json index c8f8752609..c7c20dca28 100644 --- a/scripts/build/Platform/Linux/build_config.json +++ b/scripts/build/Platform/Linux/build_config.json @@ -9,7 +9,8 @@ }, "profile_nounity_pipe": { "TAGS": [ - "default" + "default", + "snapshot" ], "steps": [ "profile_nounity", diff --git a/scripts/build/Platform/Linux/pipeline.json b/scripts/build/Platform/Linux/pipeline.json index 605adf1837..e12d41294b 100644 --- a/scripts/build/Platform/Linux/pipeline.json +++ b/scripts/build/Platform/Linux/pipeline.json @@ -12,6 +12,10 @@ }, "nightly-clean": { "CLEAN_WORKSPACE": true + }, + "snapshot": { + "CLEAN_WORKSPACE": true, + "CREATE_SNAPSHOT": true } }, "PIPELINE_JENKINS_PARAMETERS": { diff --git a/scripts/build/Platform/Windows/build_config.json b/scripts/build/Platform/Windows/build_config.json index e3d5a4a3fc..017f56bb68 100644 --- a/scripts/build/Platform/Windows/build_config.json +++ b/scripts/build/Platform/Windows/build_config.json @@ -9,7 +9,8 @@ }, "validation_pipe": { "TAGS": [ - "default" + "default", + "snapshot" ], "steps": [ "validation" @@ -27,7 +28,8 @@ }, "profile_pipe": { "TAGS": [ - "default" + "default", + "snapshot" ], "steps": [ "profile", @@ -288,7 +290,8 @@ "default", "nightly-incremental", "nightly-clean", - "weekly-build-metrics" + "weekly-build-metrics", + "snapshot" ], "COMMAND": "build_windows.cmd", "PARAMETERS": { diff --git a/scripts/build/Platform/Windows/pipeline.json b/scripts/build/Platform/Windows/pipeline.json index 47e6af2d10..3b93da9713 100644 --- a/scripts/build/Platform/Windows/pipeline.json +++ b/scripts/build/Platform/Windows/pipeline.json @@ -12,6 +12,10 @@ }, "nightly-clean": { "CLEAN_WORKSPACE": true + }, + "snapshot": { + "CLEAN_WORKSPACE": true, + "CREATE_SNAPSHOT": true } }, "PIPELINE_JENKINS_PARAMETERS": { @@ -62,4 +66,4 @@ } ] } -} \ No newline at end of file +} diff --git a/scripts/build/tools/ebs_snapshot.py b/scripts/build/tools/ebs_snapshot.py new file mode 100644 index 0000000000..483bceb988 --- /dev/null +++ b/scripts/build/tools/ebs_snapshot.py @@ -0,0 +1,197 @@ +# +# 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 argparse +import boto3 +import logging +import sys +from botocore.config import Config + +log = logging.getLogger(__name__) +log.setLevel(logging.INFO) +log.addHandler(logging.StreamHandler()) + +DEFAULT_REGION = 'us-west-2' +DEFAULT_SNAPSHOT_RETAIN = 2 +DEFAULT_SNAPSHOT_DESCRIPTION = 'Created for Build Artifact Snapshots' +DEFAULT_DRYRUN = True + +def _kv_to_dict(kv_string): + """ + Simple splitting of a key value string to dictionary in "Name: , Values: []" form + + :param kv_string: String in the form of "key:value" + :return Dictionary of values + """ + dict = {} + + if ":" not in kv_string: + log.error(f'Keyvalue parameter not in the form of "key:value"') + raise ValueError + + kv = kv_string.split(':') + dict['Name'] = f'tag:{kv[0]}' + dict['Values'] = [kv[1]] + + return dict + +def _format_tags(tag_keyvalue): + """ + Format tags in list form + + :param tag_keyvalue: String of comma separated key value pairs + :return List of dictionary values + """ + tag_filter = [] + + for keyvalue in tag_keyvalue: + tag_filter.append(_kv_to_dict(keyvalue)) + + return tag_filter + +def get_ec2_resource(): + """ + Get the AWS EC2 resource object, with appropriate region + + :return The EC2 resource object + """ + session = boto3.session.Session() + region = session.region_name + if region is None: + region = DEFAULT_REGION + + resource_config = Config( + region_name=region, + retries={ + 'mode': 'standard' + } + ) + resource = boto3.resource('ec2', config=resource_config) + return resource + +def create_snapshot(ec2_resource, tag_keyvalue, snap_description, snap_dryrun=DEFAULT_DRYRUN): + """ + Find and snapshot all EBS volumes that have a matching tag value. Injects all volume tags into the snapshot, + including the name and adds a description + + :param ec2_resource: The EC2 resource object + :param tag_keyvalue: List of Strings with tag keyvalues in the form of "key:value" + :param snap_description: String with the snapshot description to write + :param snap_dryrun: Boolean to dryrun the action. Set to true by default (always dryrun) + :return: Number of EBS volumes that are snapshotted successfully, number of EBS volumes that failed to be snapshotted + """ + success = 0 + failure = 0 + + tags = _format_tags(tag_keyvalue) + + for tag in tags: + response = ec2_resource.volumes.filter(Filters=[tag]) + log.info(f'Snapshotting EBS volumes with tags that match {tag}...') + for volume in response: + try: + log.info(f'Snapshotting volume {volume.volume_id}') + volume.create_snapshot(Description=snap_description, TagSpecifications=[{'ResourceType': 'snapshot', 'Tags': volume.tags}], DryRun=snap_dryrun) + success += 1 + except Exception as e: + log.error(f'Failed to snapshot volume {volume.volume_id}.') + log.error(e) + failure += 1 + + return success, failure + +def delete_snapshot(ec2_resource, tag_keyvalue, snap_description, snap_retention, snap_dryrun=DEFAULT_DRYRUN): + """ + Find all EBS snapshots that have a matching tag value AND description. If the number of snapshots exceeds a retention amount, + delete the oldest snapshot until retention is achived. + + :param ec2_resource: The EC2 resource object + :param tag_keyvalue: List of Strings with tag keyvalues in the form of "key:value" + :param snap_description: String with the snapshot description to search + :param snap_retention: Integer with the number of snapshots to retain + :param snap_dryrun: Boolean to dryrun the action. Set to true by default (always dryrun) + :return: Number of EBS snapshots deleted successfully, number of EBS snapshots that failed to be deleted + """ + success = 0 + failure = 0 + description_filter = {"Name": "description", "Values": [snap_description]} + + tags = _format_tags(tag_keyvalue) + + for tag in tags: + response = list(ec2_resource.snapshots.filter(Filters=[tag,description_filter])) + log.info(f'Getting snapshots with tags that match {tag}...') + num_snaps = len(response) + log.info(f'Tag {tag} has {num_snaps} snapshots') + + if num_snaps > snap_retention: + log.info(f'Deleting oldest snapshots to keep retention of {snap_retention}') + snap_list = sorted(response, key=lambda k: k.start_time) # Get a sorted list of snapshots by start time in descending order + diff_snap = num_snaps - snap_retention + for n in range(diff_snap): + try: + log.info(f'Deleting snapshot {snap_list[n].snapshot_id}') + snap_list[n].delete(DryRun=snap_dryrun) + success += 1 + except Exception as e: + log.error(f'Failed to delete snapshot {snap_list[n].snapshot_id}.') + log.error(e) + failure += 1 + + return success, failure + +def list_snapshot(ec2_resource, tag_keyvalue, snap_description): + """ + Find all EBS snapshots that have a matching tag value AND description. Prints snap id, description, tags, and start time. + + :param ec2_resource: The EC2 resource object + :param tag_keyvalue: List of Strings with tag keyvalues in the form of "key:value" + :param snap_description: String with the snapshot description to search + :return: None + """ + + description_filter = {"Name": "description", "Values": [snap_description]} + + tags = _format_tags(tag_keyvalue) + + for tag in tags: + response = ec2_resource.snapshots.filter(Filters=[tag,description_filter]) + log.info(f'Getting snapshots with tags that match {tag}...') + num_snaps = len(list(response)) + log.info(f'Tag {tag} has {num_snaps} snapshots') + snap_list = sorted(response, key=lambda k: k.start_time) + for n in range(num_snaps): + print(f'Snap ID: {snap_list[n].snapshot_id} \n Description: {snap_list[n].description} \n Tags: {snap_list[n].tags} \n Start Time: {snap_list[n].start_time}') + + return None + +def parse_args(): + parser = argparse.ArgumentParser(description='Script to manage EBS snapshots for build artifacts') + parser.add_argument('--action', '-a', type=str, help='(create|delete|list) Creates, deletes, or lists EBS snapshots based on tag. Requires --tags argument') + parser.add_argument('--tags', '-t', type=str, required=True, help='Comma separated key value tags to search for in the form of "key:value", for example, "PipelineAndBranch:default_development","PipelineAndBranch:default_development"') + parser.add_argument('--description', '-d', default=DEFAULT_SNAPSHOT_DESCRIPTION, help=f'Snapshot description to write or search for. Defaults to "{DEFAULT_SNAPSHOT_DESCRIPTION}"') + parser.add_argument('--retention', '-r', nargs="?", const=DEFAULT_SNAPSHOT_RETAIN, type=int, help=f'Integer with the number of snapshots to retain. Defaults to {DEFAULT_SNAPSHOT_RETAIN}') + parser.add_argument('--execute', '-e', action='store_false', help=f'Execute the snapshot commands. This needs to be set, otherwise it will always dryrun') + return parser.parse_args() + +def main(): + args = parse_args() + tag_list = args.tags.split(",") + ec2_resource = get_ec2_resource() + if 'create' in args.action: + ret = create_snapshot(ec2_resource, tag_list, args.description, args.execute) + log.info(f'{ret[0]} snapshots created, {ret[1]} snapshots failed') + elif 'delete' in args.action: + ret = delete_snapshot(ec2_resource, tag_list, args.description, args.retention, args.execute) + log.info(f'{ret[0]} snapshots deleted, {ret[1]} snapshot deletions failed') + elif 'list' in args.action: + ret = list_snapshot(ec2_resource, tag_list, args.description) + +if __name__ == "__main__": + sys.exit(main()) + \ No newline at end of file From 43219c7ab6f8452adebf8507a032afc11159b4c5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 26 Jan 2022 13:21:51 -0800 Subject: [PATCH 269/284] Bump jinja2 in /scripts/build/build_node/Platform/Common (#7167) Bumps [jinja2](https://github.com/pallets/jinja) from 2.11.2 to 2.11.3. - [Release notes](https://github.com/pallets/jinja/releases) - [Changelog](https://github.com/pallets/jinja/blob/main/CHANGES.rst) - [Commits](https://github.com/pallets/jinja/compare/2.11.2...2.11.3) --- updated-dependencies: - dependency-name: jinja2 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- scripts/build/build_node/Platform/Common/requirements.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/build/build_node/Platform/Common/requirements.txt b/scripts/build/build_node/Platform/Common/requirements.txt index 1429c33731..6940f41805 100644 --- a/scripts/build/build_node/Platform/Common/requirements.txt +++ b/scripts/build/build_node/Platform/Common/requirements.txt @@ -40,9 +40,9 @@ idna==2.10 \ --hash=sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6 \ --hash=sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0 \ # via requests -jinja2==2.11.2 \ - --hash=sha256:89aab215427ef59c34ad58735269eb58b1a5808103067f7bb9d5836c651b3bb0 \ - --hash=sha256:f0a4641d3cf955324a89c04f3d94663aa4d638abe8f733ecd3582848e1c37035 \ +jinja2==2.11.3 \ + --hash=sha256:03e47ad063331dd6a3f04a43eddca8a966a26ba0c5b7207a9a9e4e08f1b29419 \ + --hash=sha256:a6d58433de0ae800347cab1fa3043cebbabe8baa9d29e668f1c768cb87a333c6 \ # via -r requirements.txt jmespath==0.10.0 \ --hash=sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9 \ From b9910ac188583b416a4f64dbe87b44bb1281db8e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 26 Jan 2022 13:22:07 -0800 Subject: [PATCH 270/284] Bump rsa from 4.5 to 4.7 in /scripts/build/build_node/Platform/Common (#7168) Bumps [rsa](https://github.com/sybrenstuvel/python-rsa) from 4.5 to 4.7. - [Release notes](https://github.com/sybrenstuvel/python-rsa/releases) - [Changelog](https://github.com/sybrenstuvel/python-rsa/blob/main/CHANGELOG.md) - [Commits](https://github.com/sybrenstuvel/python-rsa/compare/version-4.5...version-4.7) --- updated-dependencies: - dependency-name: rsa dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- scripts/build/build_node/Platform/Common/requirements.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/build/build_node/Platform/Common/requirements.txt b/scripts/build/build_node/Platform/Common/requirements.txt index 6940f41805..b1a95d5889 100644 --- a/scripts/build/build_node/Platform/Common/requirements.txt +++ b/scripts/build/build_node/Platform/Common/requirements.txt @@ -175,9 +175,9 @@ requests==2.25.0 \ --hash=sha256:7f1a0b932f4a60a1a65caa4263921bb7d9ee911957e0ae4a23a6dd08185ad5f8 \ --hash=sha256:e786fa28d8c9154e6a4de5d46a1d921b8749f8b74e28bde23768e5e16eece998 \ # via -r requirements.txt -rsa==4.5 \ - --hash=sha256:35c5b5f6675ac02120036d97cf96f1fde4d49670543db2822ba5015e21a18032 \ - --hash=sha256:4d409f5a7d78530a4a2062574c7bd80311bc3af29b364e293aa9b03eea77714f \ +rsa==4.7 \ + --hash=sha256:a8774e55b59fd9fc893b0d05e9bfc6f47081f46ff5b46f39ccf24631b7be356b \ + --hash=sha256:69805d6b69f56eb05b62daea3a7dbd7aa44324ad1306445e05da8060232d00f4 \ # via -r requirements.txt s3transfer==0.3.3 \ --hash=sha256:2482b4259524933a022d59da830f51bd746db62f047d6eb213f2f8855dcb8a13 \ From 48cea8991091217375521f194dd9ac3233702f35 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 26 Jan 2022 13:22:21 -0800 Subject: [PATCH 271/284] Bump pywin32 in /scripts/build/build_node/Platform/Common (#7169) Bumps [pywin32](https://github.com/mhammond/pywin32) from 228 to 301. - [Release notes](https://github.com/mhammond/pywin32/releases) - [Changelog](https://github.com/mhammond/pywin32/blob/main/CHANGES.txt) - [Commits](https://github.com/mhammond/pywin32/commits) --- updated-dependencies: - dependency-name: pywin32 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .../Platform/Common/requirements.txt | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/scripts/build/build_node/Platform/Common/requirements.txt b/scripts/build/build_node/Platform/Common/requirements.txt index b1a95d5889..74ae31350c 100644 --- a/scripts/build/build_node/Platform/Common/requirements.txt +++ b/scripts/build/build_node/Platform/Common/requirements.txt @@ -131,19 +131,17 @@ pytz==2020.4 \ --hash=sha256:3e6b7dd2d1e0a59084bcee14a17af60c5c562cdc16d828e8eba2e683d3a7e268 \ --hash=sha256:5c55e189b682d420be27c6995ba6edce0c0a77dd67bfbe2ae6607134d5851ffd \ # via -r requirements.txt -pywin32==228 \ - --hash=sha256:00eaf43dbd05ba6a9b0080c77e161e0b7a601f9a3f660727a952e40140537de7 \ - --hash=sha256:11cb6610efc2f078c9e6d8f5d0f957620c333f4b23466931a247fb945ed35e89 \ - --hash=sha256:1f45db18af5d36195447b2cffacd182fe2d296849ba0aecdab24d3852fbf3f80 \ - --hash=sha256:37dc9935f6a383cc744315ae0c2882ba1768d9b06700a70f35dc1ce73cd4ba9c \ - --hash=sha256:6e38c44097a834a4707c1b63efa9c2435f5a42afabff634a17f563bc478dfcc8 \ - --hash=sha256:8319bafdcd90b7202c50d6014efdfe4fde9311b3ff15fd6f893a45c0868de203 \ - --hash=sha256:9b3466083f8271e1a5eb0329f4e0d61925d46b40b195a33413e0905dccb285e8 \ - --hash=sha256:a60d795c6590a5b6baeacd16c583d91cce8038f959bd80c53bd9a68f40130f2d \ - --hash=sha256:af40887b6fc200eafe4d7742c48417529a8702dcc1a60bf89eee152d1d11209f \ - --hash=sha256:ec16d44b49b5f34e99eb97cf270806fdc560dff6f84d281eb2fcb89a014a56a9 \ - --hash=sha256:ed74b72d8059a6606f64842e7917aeee99159ebd6b8d6261c518d002837be298 \ - --hash=sha256:fa6ba028909cfc64ce9e24bcf22f588b14871980d9787f1e2002c99af8f1850c \ +pywin32==301 \ + --hash=sha256:93367c96e3a76dfe5003d8291ae16454ca7d84bb24d721e0b74a07610b7be4a7 \ + --hash=sha256:9635df6998a70282bd36e7ac2a5cef9ead1627b0a63b17c731312c7a0daebb72 \ + --hash=sha256:c866f04a182a8cb9b7855de065113bbd2e40524f570db73ef1ee99ff0a5cc2f0 \ + --hash=sha256:dafa18e95bf2a92f298fe9c582b0e205aca45c55f989937c52c454ce65b93c78 \ + --hash=sha256:98f62a3f60aa64894a290fb7494bfa0bfa0a199e9e052e1ac293b2ad3cd2818b \ + --hash=sha256:fb3b4933e0382ba49305cc6cd3fb18525df7fd96aa434de19ce0878133bf8e4a \ + --hash=sha256:88981dd3cfb07432625b180f49bf4e179fb8cbb5704cd512e38dd63636af7a17 \ + --hash=sha256:8c9d33968aa7fcddf44e47750e18f3d034c3e443a707688a008a2e52bbef7e96 \ + --hash=sha256:595d397df65f1b2e0beaca63a883ae6d8b6df1cdea85c16ae85f6d2e648133fe \ + --hash=sha256:87604a4087434cd814ad8973bd47d6524bd1fa9e971ce428e76b62a5e0860fdf \ # via -r requirements.txt pyxb==1.2.6 \ --hash=sha256:2a00f38dd1d87b88f92d79bc5a09718d730419b88e814545f472bbd5a3bf27b4 \ From 670777f0f2c8deba90f9bbba5f45d072064aef7a Mon Sep 17 00:00:00 2001 From: Chris Galvan Date: Wed, 26 Jan 2022 15:25:47 -0600 Subject: [PATCH 272/284] Moved the pixel value retrieval APIs from StreamingImageAsset to RPIUtils Signed-off-by: Chris Galvan --- .../Code/Include/Atom/RPI.Public/RPIUtils.h | 19 +- .../RPI.Reflect/Image/StreamingImageAsset.h | 20 -- .../RPI/Code/Source/RPI.Public/RPIUtils.cpp | 311 ++++++++++++++++++ .../RPI.Reflect/Image/StreamingImageAsset.cpp | 297 ----------------- .../Code/Tests/Image/StreamingImageTests.cpp | 5 +- 5 files changed, 332 insertions(+), 320 deletions(-) diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/RPIUtils.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/RPIUtils.h index 70754777c7..5b5c642047 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/RPIUtils.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/RPIUtils.h @@ -16,6 +16,8 @@ #include #include +#include + namespace AZ { namespace RPI @@ -57,7 +59,22 @@ namespace AZ //! Same as above. Provided as a convenience when all arguments of the 'numthreads' attributes should be assigned to RHI::DispatchDirect::m_threadsPerGroup* variables. AZ::Outcome GetComputeShaderNumThreads(const Data::Asset& shaderAsset, RHI::DispatchDirect& dispatchDirect); - + + //! Get single image pixel value for specified mip and slice + template + T GetSubImagePixelValue(const AZ::Data::Asset& imageAsset, uint32_t x, uint32_t y, uint32_t componentIndex = 0, uint32_t mip = 0, uint32_t slice = 0); + + //! Retrieve a region of image pixel values (float) for specified mip and slice + //! NOTE: The topLeft coordinate is inclusive, whereas the bottomRight is exclusive + void GetSubImagePixelValues(const AZ::Data::Asset& imageAsset, AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::span outValues, uint32_t componentIndex = 0, uint32_t mip = 0, uint32_t slice = 0); + + //! Retrieve a region of image pixel values (uint) for specified mip and slice + //! NOTE: The topLeft coordinate is inclusive, whereas the bottomRight is exclusive + void GetSubImagePixelValues(const AZ::Data::Asset& imageAsset, AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::span outValues, uint32_t componentIndex = 0, uint32_t mip = 0, uint32_t slice = 0); + + //! Retrieve a region of image pixel values (int) for specified mip and slice + //! NOTE: The topLeft coordinate is inclusive, whereas the bottomRight is exclusive + void GetSubImagePixelValues(const AZ::Data::Asset& imageAsset, AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::span outValues, uint32_t componentIndex = 0, uint32_t mip = 0, uint32_t slice = 0); } // namespace RPI } // namespace AZ diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Image/StreamingImageAsset.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Image/StreamingImageAsset.h index 2e01f99cd9..73af8370cb 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Image/StreamingImageAsset.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Image/StreamingImageAsset.h @@ -12,7 +12,6 @@ #include #include #include -#include namespace AZ { @@ -86,22 +85,6 @@ namespace AZ //! Get image data for specified mip and slice. It may return empty array if its mipchain assets are not loaded AZStd::array_view GetSubImageData(uint32_t mip, uint32_t slice); - //! Get single image pixel value for specified mip and slice - template - T GetSubImagePixelValue(uint32_t x, uint32_t y, uint32_t componentIndex = 0, uint32_t mip = 0, uint32_t slice = 0); - - //! Retrieve a region of image pixel values (float) for specified mip and slice - //! NOTE: The topLeft coordinate is inclusive, whereas the bottomRight is exclusive - void GetSubImagePixelValues(AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::span outValues, uint32_t componentIndex = 0, uint32_t mip = 0, uint32_t slice = 0); - - //! Retrieve a region of image pixel values (uint) for specified mip and slice - //! NOTE: The topLeft coordinate is inclusive, whereas the bottomRight is exclusive - void GetSubImagePixelValues(AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::span outValues, uint32_t componentIndex = 0, uint32_t mip = 0, uint32_t slice = 0); - - //! Retrieve a region of image pixel values (int) for specified mip and slice - //! NOTE: The topLeft coordinate is inclusive, whereas the bottomRight is exclusive - void GetSubImagePixelValues(AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::span outValues, uint32_t componentIndex = 0, uint32_t mip = 0, uint32_t slice = 0); - //! Returns streaming image pool asset id of the pool that will be used to create the streaming image. const Data::AssetId& GetPoolAssetId() const; @@ -144,9 +127,6 @@ namespace AZ uint32_t m_totalImageDataSize = 0; StreamingImageFlags m_flags = StreamingImageFlags::None; - - template - T GetSubImagePixelValueInternal(uint32_t x, uint32_t y, uint32_t componentIndex = 0, uint32_t mip = 0, uint32_t slice = 0); }; } } diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/RPIUtils.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/RPIUtils.cpp index 7285273c3e..c36472dd8b 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/RPIUtils.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/RPIUtils.cpp @@ -20,6 +20,203 @@ namespace AZ { namespace RPI { + namespace Internal + { + // The original implementation was from cryhalf's CryConvertFloatToHalf and CryConvertHalfToFloat function + // Will be replaced with centralized half float API + struct SHalf + { + explicit SHalf(float floatValue) + { + AZ::u32 Result; + + AZ::u32 intValue = ((AZ::u32*)(&floatValue))[0]; + AZ::u32 Sign = (intValue & 0x80000000U) >> 16U; + intValue = intValue & 0x7FFFFFFFU; + + if (intValue > 0x47FFEFFFU) + { + // The number is too large to be represented as a half. Saturate to infinity. + Result = 0x7FFFU; + } + else + { + if (intValue < 0x38800000U) + { + // The number is too small to be represented as a normalized half. + // Convert it to a denormalized value. + AZ::u32 Shift = 113U - (intValue >> 23U); + intValue = (0x800000U | (intValue & 0x7FFFFFU)) >> Shift; + } + else + { + // Rebias the exponent to represent the value as a normalized half. + intValue += 0xC8000000U; + } + + Result = ((intValue + 0x0FFFU + ((intValue >> 13U) & 1U)) >> 13U) & 0x7FFFU; + } + h = static_cast(Result | Sign); + } + + operator float() const + { + AZ::u32 Mantissa; + AZ::u32 Exponent; + AZ::u32 Result; + + Mantissa = h & 0x03FF; + + if ((h & 0x7C00) != 0) // The value is normalized + { + Exponent = ((h >> 10) & 0x1F); + } + else if (Mantissa != 0) // The value is denormalized + { + // Normalize the value in the resulting float + Exponent = 1; + + do + { + Exponent--; + Mantissa <<= 1; + } while ((Mantissa & 0x0400) == 0); + + Mantissa &= 0x03FF; + } + else // The value is zero + { + Exponent = static_cast(-112); + } + + Result = ((h & 0x8000) << 16) | // Sign + ((Exponent + 112) << 23) | // Exponent + (Mantissa << 13); // Mantissa + + return *(float*)&Result; + } + + private: + AZ::u16 h; + }; + + float ScaleValue(float value, float origMin, float origMax, float scaledMin, float scaledMax) + { + return ((value - origMin) / (origMax - origMin)) * (scaledMax - scaledMin) + scaledMin; + } + + float RetrieveFloatValue(const AZ::u8* mem, size_t index, AZ::RHI::Format format) + { + switch (format) + { + case AZ::RHI::Format::R8_UNORM: + case AZ::RHI::Format::A8_UNORM: + { + return mem[index] / static_cast(std::numeric_limits::max()); + } + case AZ::RHI::Format::R8_SNORM: + { + // Scale the value from AZ::s8 min/max to -1 to 1 + // We need to treat -128 and -127 the same, so that we get a symmetric + // range of -127 to 127 with complementary scaled values of -1 to 1 + auto actualMem = reinterpret_cast(mem); + AZ::s8 signedMax = std::numeric_limits::max(); + AZ::s8 signedMin = aznumeric_cast(-signedMax); + return ScaleValue(AZStd::max(actualMem[index], signedMin), signedMin, signedMax, -1.0f, 1.0f); + } + case AZ::RHI::Format::D16_UNORM: + case AZ::RHI::Format::R16_UNORM: + { + return mem[index] / static_cast(std::numeric_limits::max()); + } + case AZ::RHI::Format::R16_SNORM: + { + // Scale the value from AZ::s16 min/max to -1 to 1 + // We need to treat -32768 and -32767 the same, so that we get a symmetric + // range of -32767 to 32767 with complementary scaled values of -1 to 1 + auto actualMem = reinterpret_cast(mem); + AZ::s16 signedMax = std::numeric_limits::max(); + AZ::s16 signedMin = aznumeric_cast(-signedMax); + return ScaleValue(AZStd::max(actualMem[index], signedMin), signedMin, signedMax, -1.0f, 1.0f); + } + case AZ::RHI::Format::R16_FLOAT: + { + auto actualMem = reinterpret_cast(mem); + return SHalf(actualMem[index]); + } + case AZ::RHI::Format::D32_FLOAT: + case AZ::RHI::Format::R32_FLOAT: + { + auto actualMem = reinterpret_cast(mem); + return actualMem[index]; + } + default: + AZ_Assert(false, "Unsupported pixel format"); + return 0.0f; + } + } + + AZ::u32 RetrieveUintValue(const AZ::u8* mem, size_t index, AZ::RHI::Format format) + { + switch (format) + { + case AZ::RHI::Format::R8_UINT: + { + return mem[index] / static_cast(std::numeric_limits::max()); + } + case AZ::RHI::Format::R16_UINT: + { + auto actualMem = reinterpret_cast(mem); + return actualMem[index] / static_cast(std::numeric_limits::max()); + } + case AZ::RHI::Format::R32_UINT: + { + auto actualMem = reinterpret_cast(mem); + return actualMem[index]; + } + default: + AZ_Assert(false, "Unsupported pixel format"); + return 0; + } + } + + AZ::s32 RetrieveIntValue(const AZ::u8* mem, size_t index, AZ::RHI::Format format) + { + switch (format) + { + case AZ::RHI::Format::R8_SINT: + { + return mem[index] / static_cast(std::numeric_limits::max()); + } + case AZ::RHI::Format::R16_SINT: + { + auto actualMem = reinterpret_cast(mem); + return actualMem[index] / static_cast(std::numeric_limits::max()); + } + case AZ::RHI::Format::R32_SINT: + { + auto actualMem = reinterpret_cast(mem); + return actualMem[index]; + } + default: + AZ_Assert(false, "Unsupported pixel format"); + return 0; + } + } + + template + T GetSubImagePixelValueInternal(const AZ::Data::Asset& imageAsset, uint32_t x, uint32_t y, uint32_t componentIndex, uint32_t mip, uint32_t slice) + { + AZStd::array values = { aznumeric_cast(0) }; + + auto topLeft = AZStd::make_pair(x, y); + auto bottomRight = AZStd::make_pair(x + 1, y + 1); + AZStd::span valueSpan(values.begin(), values.size()); + GetSubImagePixelValues(imageAsset, topLeft, bottomRight, valueSpan, componentIndex, mip, slice); + + return values[0]; + } + } Data::AssetId GetShaderAssetId(const AZStd::string& shaderFilePath, bool isCritical) { @@ -222,5 +419,119 @@ namespace AZ { return GetComputeShaderNumThreads(shaderAsset, &dispatchDirect.m_threadsPerGroupX, &dispatchDirect.m_threadsPerGroupY, &dispatchDirect.m_threadsPerGroupZ); } + + template<> + float GetSubImagePixelValue(const AZ::Data::Asset& imageAsset, uint32_t x, uint32_t y, uint32_t componentIndex, uint32_t mip, uint32_t slice) + { + return Internal::GetSubImagePixelValueInternal(imageAsset, x, y, componentIndex, mip, slice); + } + + template<> + AZ::u32 GetSubImagePixelValue(const AZ::Data::Asset& imageAsset, uint32_t x, uint32_t y, uint32_t componentIndex, uint32_t mip, uint32_t slice) + { + return Internal::GetSubImagePixelValueInternal(imageAsset, x, y, componentIndex, mip, slice); + } + + template<> + AZ::s32 GetSubImagePixelValue(const AZ::Data::Asset& imageAsset, uint32_t x, uint32_t y, uint32_t componentIndex, uint32_t mip, uint32_t slice) + { + return Internal::GetSubImagePixelValueInternal(imageAsset, x, y, componentIndex, mip, slice); + } + + void GetSubImagePixelValues(const AZ::Data::Asset& imageAsset, AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::span outValues, uint32_t componentIndex, uint32_t mip, uint32_t slice) + { + // TODO: Use the component index + (void)componentIndex; + + if (!imageAsset.IsReady()) + { + return; + } + + auto imageData = imageAsset->GetSubImageData(mip, slice); + + if (!imageData.empty()) + { + const AZ::RHI::ImageDescriptor imageDescriptor = imageAsset->GetImageDescriptor(); + auto width = imageDescriptor.m_size.m_width; + const uint32_t pixelSize = AZ::RHI::GetFormatSize(imageDescriptor.m_format); + + size_t outValuesIndex = 0; + for (uint32_t y = topLeft.second; y < bottomRight.second; ++y) + { + for (uint32_t x = topLeft.first; x < bottomRight.first; ++x) + { + size_t imageDataIndex = (y * width + x) * pixelSize; + + auto& outValue = outValues[outValuesIndex++]; + outValue = Internal::RetrieveFloatValue(imageData.data(), imageDataIndex, imageDescriptor.m_format); + } + } + } + } + + void GetSubImagePixelValues(const AZ::Data::Asset& imageAsset, AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::span outValues, uint32_t componentIndex, uint32_t mip, uint32_t slice) + { + // TODO: Use the component index + (void)componentIndex; + + if (!imageAsset.IsReady()) + { + return; + } + + auto imageData = imageAsset->GetSubImageData(mip, slice); + + if (!imageData.empty()) + { + const AZ::RHI::ImageDescriptor imageDescriptor = imageAsset->GetImageDescriptor(); + auto width = imageDescriptor.m_size.m_width; + const uint32_t pixelSize = AZ::RHI::GetFormatSize(imageDescriptor.m_format); + + size_t outValuesIndex = 0; + for (uint32_t y = topLeft.second; y < bottomRight.second; ++y) + { + for (uint32_t x = topLeft.first; x < bottomRight.first; ++x) + { + size_t imageDataIndex = (y * width + x) * pixelSize; + + auto& outValue = outValues[outValuesIndex++]; + outValue = Internal::RetrieveUintValue(imageData.data(), imageDataIndex, imageDescriptor.m_format); + } + } + } + } + + void GetSubImagePixelValues(const AZ::Data::Asset& imageAsset, AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::span outValues, uint32_t componentIndex, uint32_t mip, uint32_t slice) + { + // TODO: Use the component index + (void)componentIndex; + + if (!imageAsset.IsReady()) + { + return; + } + + auto imageData = imageAsset->GetSubImageData(mip, slice); + + if (!imageData.empty()) + { + const AZ::RHI::ImageDescriptor imageDescriptor = imageAsset->GetImageDescriptor(); + auto width = imageDescriptor.m_size.m_width; + const uint32_t pixelSize = AZ::RHI::GetFormatSize(imageDescriptor.m_format); + + size_t outValuesIndex = 0; + for (uint32_t y = topLeft.second; y < bottomRight.second; ++y) + { + for (uint32_t x = topLeft.first; x < bottomRight.first; ++x) + { + size_t imageDataIndex = (y * width + x) * pixelSize; + + auto& outValue = outValues[outValuesIndex++]; + outValue = Internal::RetrieveIntValue(imageData.data(), imageDataIndex, imageDescriptor.m_format); + } + } + } + } } } diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp index 286b259696..59f359e474 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp @@ -13,191 +13,6 @@ namespace AZ { - namespace Internal - { - // The original implementation was from cryhalf's CryConvertFloatToHalf and CryConvertHalfToFloat function - // Will be replaced with centralized half float API - struct SHalf - { - explicit SHalf(float floatValue) - { - AZ::u32 Result; - - AZ::u32 intValue = ((AZ::u32*)(&floatValue))[0]; - AZ::u32 Sign = (intValue & 0x80000000U) >> 16U; - intValue = intValue & 0x7FFFFFFFU; - - if (intValue > 0x47FFEFFFU) - { - // The number is too large to be represented as a half. Saturate to infinity. - Result = 0x7FFFU; - } - else - { - if (intValue < 0x38800000U) - { - // The number is too small to be represented as a normalized half. - // Convert it to a denormalized value. - AZ::u32 Shift = 113U - (intValue >> 23U); - intValue = (0x800000U | (intValue & 0x7FFFFFU)) >> Shift; - } - else - { - // Rebias the exponent to represent the value as a normalized half. - intValue += 0xC8000000U; - } - - Result = ((intValue + 0x0FFFU + ((intValue >> 13U) & 1U)) >> 13U) & 0x7FFFU; - } - h = static_cast(Result | Sign); - } - - operator float() const - { - AZ::u32 Mantissa; - AZ::u32 Exponent; - AZ::u32 Result; - - Mantissa = h & 0x03FF; - - if ((h & 0x7C00) != 0) // The value is normalized - { - Exponent = ((h >> 10) & 0x1F); - } - else if (Mantissa != 0) // The value is denormalized - { - // Normalize the value in the resulting float - Exponent = 1; - - do - { - Exponent--; - Mantissa <<= 1; - } while ((Mantissa & 0x0400) == 0); - - Mantissa &= 0x03FF; - } - else // The value is zero - { - Exponent = static_cast(-112); - } - - Result = ((h & 0x8000) << 16) | // Sign - ((Exponent + 112) << 23) | // Exponent - (Mantissa << 13); // Mantissa - - return *(float*)&Result; - } - - private: - AZ::u16 h; - }; - - float ScaleValue(float value, float origMin, float origMax, float scaledMin, float scaledMax) - { - return ((value - origMin) / (origMax - origMin)) * (scaledMax - scaledMin) + scaledMin; - } - - float RetrieveFloatValue(const AZ::u8* mem, size_t index, AZ::RHI::Format format) - { - switch (format) - { - case AZ::RHI::Format::R8_UNORM: - case AZ::RHI::Format::A8_UNORM: - { - return mem[index] / static_cast(std::numeric_limits::max()); - } - case AZ::RHI::Format::R8_SNORM: - { - // Scale the value from AZ::s8 min/max to -1 to 1 - // We need to treat -128 and -127 the same, so that we get a symmetric - // range of -127 to 127 with complementary scaled values of -1 to 1 - auto actualMem = reinterpret_cast(mem); - AZ::s8 signedMax = std::numeric_limits::max(); - AZ::s8 signedMin = aznumeric_cast(-signedMax); - return ScaleValue(AZStd::max(actualMem[index], signedMin), signedMin, signedMax, -1.0f, 1.0f); - } - case AZ::RHI::Format::D16_UNORM: - case AZ::RHI::Format::R16_UNORM: - { - return mem[index] / static_cast(std::numeric_limits::max()); - } - case AZ::RHI::Format::R16_SNORM: - { - // Scale the value from AZ::s16 min/max to -1 to 1 - // We need to treat -32768 and -32767 the same, so that we get a symmetric - // range of -32767 to 32767 with complementary scaled values of -1 to 1 - auto actualMem = reinterpret_cast(mem); - AZ::s16 signedMax = std::numeric_limits::max(); - AZ::s16 signedMin = aznumeric_cast(-signedMax); - return ScaleValue(AZStd::max(actualMem[index], signedMin), signedMin, signedMax, -1.0f, 1.0f); - } - case AZ::RHI::Format::R16_FLOAT: - { - auto actualMem = reinterpret_cast(mem); - return SHalf(actualMem[index]); - } - case AZ::RHI::Format::D32_FLOAT: - case AZ::RHI::Format::R32_FLOAT: - { - auto actualMem = reinterpret_cast(mem); - return actualMem[index]; - } - default: - AZ_Assert(false, "Unsupported pixel format"); - return 0.0f; - } - } - - AZ::u32 RetrieveUintValue(const AZ::u8* mem, size_t index, AZ::RHI::Format format) - { - switch (format) - { - case AZ::RHI::Format::R8_UINT: - { - return mem[index] / static_cast(std::numeric_limits::max()); - } - case AZ::RHI::Format::R16_UINT: - { - auto actualMem = reinterpret_cast(mem); - return actualMem[index] / static_cast(std::numeric_limits::max()); - } - case AZ::RHI::Format::R32_UINT: - { - auto actualMem = reinterpret_cast(mem); - return actualMem[index]; - } - default: - AZ_Assert(false, "Unsupported pixel format"); - return 0; - } - } - - AZ::s32 RetrieveIntValue(const AZ::u8* mem, size_t index, AZ::RHI::Format format) - { - switch (format) - { - case AZ::RHI::Format::R8_SINT: - { - return mem[index] / static_cast(std::numeric_limits::max()); - } - case AZ::RHI::Format::R16_SINT: - { - auto actualMem = reinterpret_cast(mem); - return actualMem[index] / static_cast(std::numeric_limits::max()); - } - case AZ::RHI::Format::R32_SINT: - { - auto actualMem = reinterpret_cast(mem); - return actualMem[index]; - } - default: - AZ_Assert(false, "Unsupported pixel format"); - return 0; - } - } - } - namespace RPI { const char* StreamingImageAsset::DisplayName = "StreamingImage"; @@ -309,117 +124,5 @@ namespace AZ return mipChainAsset->GetSubImageData(mip - mipChain.m_mipOffset, slice); } - - template - T StreamingImageAsset::GetSubImagePixelValueInternal(uint32_t x, uint32_t y, uint32_t componentIndex, uint32_t mip, uint32_t slice) - { - AZStd::array values = { aznumeric_cast(0) }; - - auto topLeft = AZStd::make_pair(x, y); - auto bottomRight = AZStd::make_pair(x + 1, y + 1); - AZStd::span valueSpan(values.begin(), values.size()); - GetSubImagePixelValues(topLeft, bottomRight, valueSpan, componentIndex, mip, slice); - - return values[0]; - } - - template<> - float StreamingImageAsset::GetSubImagePixelValue(uint32_t x, uint32_t y, uint32_t componentIndex, uint32_t mip, uint32_t slice) - { - return GetSubImagePixelValueInternal(x, y, componentIndex, mip, slice); - } - - template<> - AZ::u32 StreamingImageAsset::GetSubImagePixelValue(uint32_t x, uint32_t y, uint32_t componentIndex, uint32_t mip, uint32_t slice) - { - return GetSubImagePixelValueInternal(x, y, componentIndex, mip, slice); - } - - template<> - AZ::s32 StreamingImageAsset::GetSubImagePixelValue(uint32_t x, uint32_t y, uint32_t componentIndex, uint32_t mip, uint32_t slice) - { - return GetSubImagePixelValueInternal(x, y, componentIndex, mip, slice); - } - - void StreamingImageAsset::GetSubImagePixelValues(AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::span outValues, uint32_t componentIndex, uint32_t mip, uint32_t slice) - { - // TODO: Use the component index - (void)componentIndex; - - auto imageData = GetSubImageData(mip, slice); - - if (!imageData.empty()) - { - const AZ::RHI::ImageDescriptor imageDescriptor = GetImageDescriptor(); - auto width = imageDescriptor.m_size.m_width; - const uint32_t pixelSize = AZ::RHI::GetFormatSize(imageDescriptor.m_format); - - size_t outValuesIndex = 0; - for (uint32_t y = topLeft.second; y < bottomRight.second; ++y) - { - for (uint32_t x = topLeft.first; x < bottomRight.first; ++x) - { - size_t imageDataIndex = (y * width + x) * pixelSize; - - auto& outValue = outValues[outValuesIndex++]; - outValue = Internal::RetrieveFloatValue(imageData.data(), imageDataIndex, imageDescriptor.m_format); - } - } - } - } - - void StreamingImageAsset::GetSubImagePixelValues(AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::span outValues, uint32_t componentIndex, uint32_t mip, uint32_t slice) - { - // TODO: Use the component index - (void)componentIndex; - - auto imageData = GetSubImageData(mip, slice); - - if (!imageData.empty()) - { - const AZ::RHI::ImageDescriptor imageDescriptor = GetImageDescriptor(); - auto width = imageDescriptor.m_size.m_width; - const uint32_t pixelSize = AZ::RHI::GetFormatSize(imageDescriptor.m_format); - - size_t outValuesIndex = 0; - for (uint32_t y = topLeft.second; y < bottomRight.second; ++y) - { - for (uint32_t x = topLeft.first; x < bottomRight.first; ++x) - { - size_t imageDataIndex = (y * width + x) * pixelSize; - - auto& outValue = outValues[outValuesIndex++]; - outValue = Internal::RetrieveUintValue(imageData.data(), imageDataIndex, imageDescriptor.m_format); - } - } - } - } - - void StreamingImageAsset::GetSubImagePixelValues(AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::span outValues, uint32_t componentIndex, uint32_t mip, uint32_t slice) - { - // TODO: Use the component index - (void)componentIndex; - - auto imageData = GetSubImageData(mip, slice); - - if (!imageData.empty()) - { - const AZ::RHI::ImageDescriptor imageDescriptor = GetImageDescriptor(); - auto width = imageDescriptor.m_size.m_width; - const uint32_t pixelSize = AZ::RHI::GetFormatSize(imageDescriptor.m_format); - - size_t outValuesIndex = 0; - for (uint32_t y = topLeft.second; y < bottomRight.second; ++y) - { - for (uint32_t x = topLeft.first; x < bottomRight.first; ++x) - { - size_t imageDataIndex = (y * width + x) * pixelSize; - - auto& outValue = outValues[outValuesIndex++]; - outValue = Internal::RetrieveIntValue(imageData.data(), imageDataIndex, imageDescriptor.m_format); - } - } - } - } } } diff --git a/Gems/Atom/RPI/Code/Tests/Image/StreamingImageTests.cpp b/Gems/Atom/RPI/Code/Tests/Image/StreamingImageTests.cpp index 5efab95818..ef4a0a0e08 100644 --- a/Gems/Atom/RPI/Code/Tests/Image/StreamingImageTests.cpp +++ b/Gems/Atom/RPI/Code/Tests/Image/StreamingImageTests.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include @@ -742,7 +743,7 @@ namespace UnitTest { for (uint32_t x = 0; x < size.m_width; ++x) { - auto pixelDataValue = imageAsset->GetSubImagePixelValue(x, y); + auto pixelDataValue = RPI::GetSubImagePixelValue(imageAsset, x, y); auto pixelExpectedValue = static_cast(y * size.m_width + x) / static_cast(std::numeric_limits::max()); EXPECT_NEAR(pixelDataValue, pixelExpectedValue, Constants::Tolerance); @@ -753,7 +754,7 @@ namespace UnitTest AZStd::vector pixelValues(size.m_width * size.m_height); auto topLeft = AZStd::make_pair(0, 0); auto bottomRight = AZStd::make_pair(size.m_width, size.m_height); - streamingImageAsset->GetSubImagePixelValues(topLeft, bottomRight, pixelValues); + RPI::GetSubImagePixelValues(imageAsset, topLeft, bottomRight, pixelValues); for (uint32_t index = 0; index < pixelValues.size(); ++index) { auto pixelDataValue = pixelValues[index]; From c2ae853d955e4938aa1a382db9dfd72cd625e209 Mon Sep 17 00:00:00 2001 From: Chris Galvan Date: Wed, 26 Jan 2022 15:37:30 -0600 Subject: [PATCH 273/284] Fixed python bindings unit test Signed-off-by: Chris Galvan --- Code/Editor/Lib/Tests/test_CryEditPythonBindings.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/Code/Editor/Lib/Tests/test_CryEditPythonBindings.cpp b/Code/Editor/Lib/Tests/test_CryEditPythonBindings.cpp index 5246fcdee5..1d9b26dbbc 100644 --- a/Code/Editor/Lib/Tests/test_CryEditPythonBindings.cpp +++ b/Code/Editor/Lib/Tests/test_CryEditPythonBindings.cpp @@ -66,9 +66,7 @@ namespace CryEditPythonBindingsUnitTests EXPECT_TRUE(behaviorContext->m_methods.find("set_current_view_position") != behaviorContext->m_methods.end()); EXPECT_TRUE(behaviorContext->m_methods.find("set_current_view_rotation") != behaviorContext->m_methods.end()); EXPECT_TRUE(behaviorContext->m_methods.find("export_to_engine") != behaviorContext->m_methods.end()); - EXPECT_TRUE(behaviorContext->m_methods.find("set_config_spec") != behaviorContext->m_methods.end()); EXPECT_TRUE(behaviorContext->m_methods.find("get_config_platform") != behaviorContext->m_methods.end()); - EXPECT_TRUE(behaviorContext->m_methods.find("get_config_spec") != behaviorContext->m_methods.end()); EXPECT_TRUE(behaviorContext->m_methods.find("set_result_to_success") != behaviorContext->m_methods.end()); EXPECT_TRUE(behaviorContext->m_methods.find("set_result_to_failure") != behaviorContext->m_methods.end()); EXPECT_TRUE(behaviorContext->m_methods.find("idle_enable") != behaviorContext->m_methods.end()); From 0550167f9f4b524e4e12823d367a04a2518f1362 Mon Sep 17 00:00:00 2001 From: Chris Galvan Date: Wed, 26 Jan 2022 16:09:03 -0600 Subject: [PATCH 274/284] Updated API to return false if there is any issue retrieving the data Signed-off-by: Chris Galvan --- .../Code/Include/Atom/RPI.Public/RPIUtils.h | 6 +- .../RPI/Code/Source/RPI.Public/RPIUtils.cpp | 99 ++++++++++--------- 2 files changed, 57 insertions(+), 48 deletions(-) diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/RPIUtils.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/RPIUtils.h index 5b5c642047..546089ab1e 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/RPIUtils.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/RPIUtils.h @@ -66,15 +66,15 @@ namespace AZ //! Retrieve a region of image pixel values (float) for specified mip and slice //! NOTE: The topLeft coordinate is inclusive, whereas the bottomRight is exclusive - void GetSubImagePixelValues(const AZ::Data::Asset& imageAsset, AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::span outValues, uint32_t componentIndex = 0, uint32_t mip = 0, uint32_t slice = 0); + bool GetSubImagePixelValues(const AZ::Data::Asset& imageAsset, AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::span outValues, uint32_t componentIndex = 0, uint32_t mip = 0, uint32_t slice = 0); //! Retrieve a region of image pixel values (uint) for specified mip and slice //! NOTE: The topLeft coordinate is inclusive, whereas the bottomRight is exclusive - void GetSubImagePixelValues(const AZ::Data::Asset& imageAsset, AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::span outValues, uint32_t componentIndex = 0, uint32_t mip = 0, uint32_t slice = 0); + bool GetSubImagePixelValues(const AZ::Data::Asset& imageAsset, AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::span outValues, uint32_t componentIndex = 0, uint32_t mip = 0, uint32_t slice = 0); //! Retrieve a region of image pixel values (int) for specified mip and slice //! NOTE: The topLeft coordinate is inclusive, whereas the bottomRight is exclusive - void GetSubImagePixelValues(const AZ::Data::Asset& imageAsset, AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::span outValues, uint32_t componentIndex = 0, uint32_t mip = 0, uint32_t slice = 0); + bool GetSubImagePixelValues(const AZ::Data::Asset& imageAsset, AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::span outValues, uint32_t componentIndex = 0, uint32_t mip = 0, uint32_t slice = 0); } // namespace RPI } // namespace AZ diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/RPIUtils.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/RPIUtils.cpp index c36472dd8b..ecca215536 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/RPIUtils.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/RPIUtils.cpp @@ -438,100 +438,109 @@ namespace AZ return Internal::GetSubImagePixelValueInternal(imageAsset, x, y, componentIndex, mip, slice); } - void GetSubImagePixelValues(const AZ::Data::Asset& imageAsset, AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::span outValues, uint32_t componentIndex, uint32_t mip, uint32_t slice) + bool GetSubImagePixelValues(const AZ::Data::Asset& imageAsset, AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::span outValues, uint32_t componentIndex, uint32_t mip, uint32_t slice) { // TODO: Use the component index (void)componentIndex; if (!imageAsset.IsReady()) { - return; + return false; } auto imageData = imageAsset->GetSubImageData(mip, slice); - - if (!imageData.empty()) + if (imageData.empty()) { - const AZ::RHI::ImageDescriptor imageDescriptor = imageAsset->GetImageDescriptor(); - auto width = imageDescriptor.m_size.m_width; - const uint32_t pixelSize = AZ::RHI::GetFormatSize(imageDescriptor.m_format); + return false; + } - size_t outValuesIndex = 0; - for (uint32_t y = topLeft.second; y < bottomRight.second; ++y) + const AZ::RHI::ImageDescriptor imageDescriptor = imageAsset->GetImageDescriptor(); + auto width = imageDescriptor.m_size.m_width; + const uint32_t pixelSize = AZ::RHI::GetFormatSize(imageDescriptor.m_format); + + size_t outValuesIndex = 0; + for (uint32_t y = topLeft.second; y < bottomRight.second; ++y) + { + for (uint32_t x = topLeft.first; x < bottomRight.first; ++x) { - for (uint32_t x = topLeft.first; x < bottomRight.first; ++x) - { - size_t imageDataIndex = (y * width + x) * pixelSize; + size_t imageDataIndex = (y * width + x) * pixelSize; - auto& outValue = outValues[outValuesIndex++]; - outValue = Internal::RetrieveFloatValue(imageData.data(), imageDataIndex, imageDescriptor.m_format); - } + auto& outValue = outValues[outValuesIndex++]; + outValue = Internal::RetrieveFloatValue(imageData.data(), imageDataIndex, imageDescriptor.m_format); } } + + return true; } - void GetSubImagePixelValues(const AZ::Data::Asset& imageAsset, AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::span outValues, uint32_t componentIndex, uint32_t mip, uint32_t slice) + bool GetSubImagePixelValues(const AZ::Data::Asset& imageAsset, AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::span outValues, uint32_t componentIndex, uint32_t mip, uint32_t slice) { // TODO: Use the component index (void)componentIndex; if (!imageAsset.IsReady()) { - return; + return false; } auto imageData = imageAsset->GetSubImageData(mip, slice); - - if (!imageData.empty()) + if (imageData.empty()) { - const AZ::RHI::ImageDescriptor imageDescriptor = imageAsset->GetImageDescriptor(); - auto width = imageDescriptor.m_size.m_width; - const uint32_t pixelSize = AZ::RHI::GetFormatSize(imageDescriptor.m_format); + return false; + } - size_t outValuesIndex = 0; - for (uint32_t y = topLeft.second; y < bottomRight.second; ++y) + const AZ::RHI::ImageDescriptor imageDescriptor = imageAsset->GetImageDescriptor(); + auto width = imageDescriptor.m_size.m_width; + const uint32_t pixelSize = AZ::RHI::GetFormatSize(imageDescriptor.m_format); + + size_t outValuesIndex = 0; + for (uint32_t y = topLeft.second; y < bottomRight.second; ++y) + { + for (uint32_t x = topLeft.first; x < bottomRight.first; ++x) { - for (uint32_t x = topLeft.first; x < bottomRight.first; ++x) - { - size_t imageDataIndex = (y * width + x) * pixelSize; + size_t imageDataIndex = (y * width + x) * pixelSize; - auto& outValue = outValues[outValuesIndex++]; - outValue = Internal::RetrieveUintValue(imageData.data(), imageDataIndex, imageDescriptor.m_format); - } + auto& outValue = outValues[outValuesIndex++]; + outValue = Internal::RetrieveUintValue(imageData.data(), imageDataIndex, imageDescriptor.m_format); } } + + return true; } - void GetSubImagePixelValues(const AZ::Data::Asset& imageAsset, AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::span outValues, uint32_t componentIndex, uint32_t mip, uint32_t slice) + bool GetSubImagePixelValues(const AZ::Data::Asset& imageAsset, AZStd::pair topLeft, AZStd::pair bottomRight, AZStd::span outValues, uint32_t componentIndex, uint32_t mip, uint32_t slice) { // TODO: Use the component index (void)componentIndex; if (!imageAsset.IsReady()) { - return; + return false; } auto imageData = imageAsset->GetSubImageData(mip, slice); - - if (!imageData.empty()) + if (imageData.empty()) { - const AZ::RHI::ImageDescriptor imageDescriptor = imageAsset->GetImageDescriptor(); - auto width = imageDescriptor.m_size.m_width; - const uint32_t pixelSize = AZ::RHI::GetFormatSize(imageDescriptor.m_format); + return false; + } - size_t outValuesIndex = 0; - for (uint32_t y = topLeft.second; y < bottomRight.second; ++y) + const AZ::RHI::ImageDescriptor imageDescriptor = imageAsset->GetImageDescriptor(); + auto width = imageDescriptor.m_size.m_width; + const uint32_t pixelSize = AZ::RHI::GetFormatSize(imageDescriptor.m_format); + + size_t outValuesIndex = 0; + for (uint32_t y = topLeft.second; y < bottomRight.second; ++y) + { + for (uint32_t x = topLeft.first; x < bottomRight.first; ++x) { - for (uint32_t x = topLeft.first; x < bottomRight.first; ++x) - { - size_t imageDataIndex = (y * width + x) * pixelSize; + size_t imageDataIndex = (y * width + x) * pixelSize; - auto& outValue = outValues[outValuesIndex++]; - outValue = Internal::RetrieveIntValue(imageData.data(), imageDataIndex, imageDescriptor.m_format); - } + auto& outValue = outValues[outValuesIndex++]; + outValue = Internal::RetrieveIntValue(imageData.data(), imageDataIndex, imageDescriptor.m_format); } } + + return true; } } } From b9824ed17296a1e4a48e6587e1f5d7ef7501ae35 Mon Sep 17 00:00:00 2001 From: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> Date: Wed, 26 Jan 2022 16:15:47 -0600 Subject: [PATCH 275/284] Updated all array_view uses with the C++20 span. (#7157) * Updated all array_view uses with the C++20 span. The updates were done in the following order 1. `AZStd::array_view<([^>].+)\* ?>` -> `AZStd::span<\1 const>` 2. `AZStd::array_view<(?:const )(.+)>` -> `AZStd::span` 3. `AZStd::array_view` -> `AZStd::span` Removed the implementation of array_view. Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> * Added missing whitespace between `const` and the typename for spans. Updated the ShaderTest comparison of the ShaderResourceGroupLayout span to compare the sizes as well Updated comments on some of the methods that stated that they return "an array" to mention they return "a span". Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> --- .../AtomCore/AtomCore/atomcore_files.cmake | 1 - .../AtomCore/std/containers/array_view.h | 156 --------- Code/Framework/AtomCore/Tests/ArrayView.cpp | 300 ------------------ .../AtomCore/Tests/atomcore_tests_files.cmake | 1 - .../AzCore/AzCore/std/containers/span.h | 19 +- .../AzCore/Tests/AZStd/SpanTests.cpp | 12 + .../Code/Source/Processing/Utils.cpp | 2 +- .../Tests/SupervariantCmdArgumentTests.cpp | 22 +- .../SkinnedMesh/SkinnedMeshInputBuffers.h | 8 +- .../Atom/Feature/Utils/IndexedDataVector.h | 2 +- .../Feature/Utils/MultiIndexedDataVector.h | 2 +- .../CoreLights/CascadedShadowmapsPass.cpp | 4 +- .../CoreLights/CascadedShadowmapsPass.h | 4 +- .../DirectionalLightFeatureProcessor.cpp | 2 +- .../Source/CoreLights/EsmShadowmapsPass.cpp | 2 +- .../Source/CoreLights/EsmShadowmapsPass.h | 2 +- .../CoreLights/ProjectedShadowmapsPass.h | 2 +- .../Source/Decals/DecalFeatureProcessor.cpp | 10 +- .../Source/Decals/DecalFeatureProcessor.h | 8 +- .../Code/Source/Decals/DecalTextureArray.cpp | 2 +- .../Code/Source/Decals/DecalTextureArray.h | 4 +- .../DecalTextureArrayFeatureProcessor.cpp | 2 +- .../Code/Source/Mesh/MeshFeatureProcessor.cpp | 2 +- .../SkinnedMesh/SkinnedMeshDispatchItem.cpp | 4 +- .../SkinnedMesh/SkinnedMeshDispatchItem.h | 4 +- .../SkinnedMesh/SkinnedMeshInputBuffers.cpp | 4 +- .../SkinnedMesh/SkinnedMeshRenderProxy.cpp | 2 +- .../SkinnedMesh/SkinnedMeshRenderProxy.h | 2 +- .../SkinnedMesh/SkinnedMeshStatsCollector.cpp | 4 +- .../SkinnedMesh/SkinnedMeshStatsCollector.h | 4 +- .../Atom/RHI.Edit/ShaderCompilerArguments.h | 2 +- .../RHI/Code/Include/Atom/RHI.Edit/Utils.h | 2 +- .../Atom/RHI.Reflect/ConstantsLayout.h | 6 +- .../Atom/RHI.Reflect/IndirectBufferLayout.h | 4 +- .../Atom/RHI.Reflect/InputStreamLayout.h | 6 +- .../RHI.Reflect/PipelineLayoutDescriptor.h | 2 +- .../Atom/RHI.Reflect/PipelineLibraryData.h | 4 +- .../Atom/RHI.Reflect/RenderAttachmentLayout.h | 2 +- .../RHI.Reflect/ShaderResourceGroupLayout.h | 16 +- .../Code/Include/Atom/RHI/CommandListStates.h | 2 +- .../RHI/Code/Include/Atom/RHI/ConstantsData.h | 36 +-- .../Atom/RHI/Code/Include/Atom/RHI/DrawList.h | 4 +- .../Code/Include/Atom/RHI/DrawPacketBuilder.h | 10 +- .../RHI/Code/Include/Atom/RHI/FrameGraph.h | 8 +- .../Include/Atom/RHI/FrameGraphExecuter.h | 2 +- .../Include/Atom/RHI/FrameGraphInterface.h | 8 +- .../Code/Include/Atom/RHI/PipelineLibrary.h | 6 +- .../Atom/RHI/ShaderResourceGroupData.h | 76 ++--- .../Code/Include/Atom/RHI/StreamBufferView.h | 4 +- .../Include/Atom/RHI/StreamingImagePool.h | 10 +- .../Atom/RHI/TransientAttachmentPool.h | 2 +- Gems/Atom/RHI/Code/Source/RHI.Edit/Utils.cpp | 2 +- .../Source/RHI.Reflect/ConstantsLayout.cpp | 4 +- .../RHI.Reflect/IndirectBufferLayout.cpp | 4 +- .../Source/RHI.Reflect/InputStreamLayout.cpp | 4 +- .../RHI.Reflect/PipelineLibraryData.cpp | 2 +- .../RHI.Reflect/ShaderResourceGroupLayout.cpp | 14 +- .../RHI/Code/Source/RHI/ConstantsData.cpp | 34 +- .../RHI/Code/Source/RHI/DrawPacketBuilder.cpp | 10 +- Gems/Atom/RHI/Code/Source/RHI/FrameGraph.cpp | 6 +- .../Code/Source/RHI/FrameGraphExecuter.cpp | 2 +- .../RHI/Code/Source/RHI/PipelineLibrary.cpp | 2 +- .../Source/RHI/ShaderResourceGroupData.cpp | 48 +-- .../Source/RHI/ShaderResourceGroupPool.cpp | 8 +- .../RHI/Code/Source/RHI/StreamBufferView.cpp | 2 +- .../Code/Source/RHI/StreamingImagePool.cpp | 2 +- .../Source/RHI/TransientAttachmentPool.cpp | 2 +- .../Tests/InputStreamLayoutBuilderTests.cpp | 4 +- Gems/Atom/RHI/Code/Tests/PipelineState.cpp | 2 +- Gems/Atom/RHI/Code/Tests/PipelineState.h | 2 +- .../RenderAttachmentLayoutBuilderTests.cpp | 4 +- .../Code/Tests/ShaderResourceGroupTests.cpp | 18 +- .../RHI.Reflect/DX12/ShaderStageFunction.h | 4 +- .../DX12/Code/Source/RHI/AsyncUploadQueue.h | 2 +- .../RHI/DX12/Code/Source/RHI/CommandList.cpp | 4 +- .../RHI/DX12/Code/Source/RHI/CommandList.h | 2 +- .../DX12/Code/Source/RHI/PipelineLibrary.cpp | 8 +- .../DX12/Code/Source/RHI/PipelineLibrary.h | 2 +- .../Source/RHI/ShaderResourceGroupPool.cpp | 26 +- .../Code/Source/RHI/ShaderResourceGroupPool.h | 8 +- .../RHI.Reflect/Metal/ShaderStageFunction.h | 2 +- .../RHI.Builders/ShaderPlatformInterface.cpp | 148 ++++----- .../Metal/Code/Source/RHI/ArgumentBuffer.cpp | 120 +++---- .../Metal/Code/Source/RHI/ArgumentBuffer.h | 46 +-- .../Metal/Code/Source/RHI/AsyncUploadQueue.h | 20 +- .../RHI/Metal/Code/Source/RHI/CommandList.cpp | 178 +++++------ .../Metal/Code/Source/RHI/PipelineLibrary.cpp | 2 +- .../Metal/Code/Source/RHI/PipelineLibrary.h | 2 +- .../Source/RHI/ShaderResourceGroupPool.cpp | 8 +- .../Null/Code/Source/RHI/PipelineLibrary.h | 2 +- .../RHI.Reflect/Vulkan/ShaderStageFunction.h | 4 +- .../Vulkan/Code/Source/RHI/CommandList.cpp | 6 +- .../RHI/Vulkan/Code/Source/RHI/CommandList.h | 4 +- .../Vulkan/Code/Source/RHI/DescriptorSet.cpp | 8 +- .../Vulkan/Code/Source/RHI/DescriptorSet.h | 10 +- .../Code/Source/RHI/DescriptorSetLayout.cpp | 14 +- .../Source/RHI/FrameGraphExecuteGroup.cpp | 6 +- .../Code/Source/RHI/FrameGraphExecuteGroup.h | 4 +- .../Source/RHI/FrameGraphExecuteGroupBase.h | 4 +- .../RHI/FrameGraphExecuteGroupMerged.cpp | 8 +- .../Source/RHI/FrameGraphExecuteGroupMerged.h | 8 +- .../Vulkan/Code/Source/RHI/PipelineLayout.cpp | 2 +- .../Code/Source/RHI/PipelineLibrary.cpp | 4 +- .../Vulkan/Code/Source/RHI/PipelineLibrary.h | 2 +- .../RHI/Vulkan/Code/Source/RHI/RenderPass.cpp | 10 +- .../RHI/Vulkan/Code/Source/RHI/RenderPass.h | 4 +- .../RPI.Edit/Material/MaterialPropertyId.h | 4 +- .../Atom/RPI.Public/GpuQuery/GpuQueryTypes.h | 4 +- .../Atom/RPI.Public/GpuQuery/QueryPool.h | 10 +- .../Include/Atom/RPI.Public/Model/Model.h | 2 +- .../Include/Atom/RPI.Public/Model/ModelLod.h | 4 +- .../Include/Atom/RPI.Public/Pass/ParentPass.h | 2 +- .../Code/Include/Atom/RPI.Public/Pass/Pass.h | 2 +- .../Atom/RPI.Public/Pass/PassAttachment.h | 2 +- .../Atom/RPI.Public/Pass/PassLibrary.h | 2 +- .../Include/Atom/RPI.Public/Shader/Shader.h | 2 +- .../RPI.Public/Shader/ShaderResourceGroup.h | 86 ++--- .../Atom/RPI.Reflect/Buffer/BufferAsset.h | 4 +- .../RPI.Reflect/Image/ImageMipChainAsset.h | 6 +- .../RPI.Reflect/Image/StreamingImageAsset.h | 2 +- .../Atom/RPI.Reflect/Material/MaterialAsset.h | 2 +- .../RPI.Reflect/Material/MaterialTypeAsset.h | 4 +- .../Material/MaterialTypeAssetCreator.h | 2 +- .../Atom/RPI.Reflect/Model/ModelAsset.h | 2 +- .../Atom/RPI.Reflect/Model/ModelKdTree.h | 6 +- .../Atom/RPI.Reflect/Model/ModelLodAsset.h | 22 +- .../RPI.Reflect/Pass/PassAttachmentReflect.h | 12 +- .../Atom/RPI.Reflect/Pass/PassRequest.h | 4 +- .../Atom/RPI.Reflect/Pass/PassTemplate.h | 2 +- .../Atom/RPI.Reflect/Shader/ShaderAsset.h | 4 +- .../RPI.Edit/Material/MaterialPropertyId.cpp | 2 +- .../RPI.Public/GpuQuery/GpuQueryTypes.cpp | 2 +- .../Source/RPI.Public/GpuQuery/QueryPool.cpp | 6 +- .../GpuQuery/TimestampQueryPool.cpp | 4 +- .../Code/Source/RPI.Public/Model/Model.cpp | 2 +- .../Code/Source/RPI.Public/Model/ModelLod.cpp | 2 +- .../Source/RPI.Public/Pass/ParentPass.cpp | 2 +- .../Code/Source/RPI.Public/Shader/Shader.cpp | 2 +- .../RPI.Public/Shader/ShaderResourceGroup.cpp | 58 ++-- .../Source/RPI.Reflect/Buffer/BufferAsset.cpp | 4 +- .../RPI.Reflect/Buffer/BufferAssetCreator.cpp | 2 +- .../RPI.Reflect/Image/ImageMipChainAsset.cpp | 8 +- .../RPI.Reflect/Image/StreamingImageAsset.cpp | 6 +- .../Material/MaterialTypeAsset.cpp | 2 +- .../Source/RPI.Reflect/Model/ModelAsset.cpp | 10 +- .../RPI.Reflect/Model/ModelAssetCreator.cpp | 2 +- .../Source/RPI.Reflect/Model/ModelKdTree.cpp | 12 +- .../RPI.Reflect/Model/ModelLodAsset.cpp | 10 +- .../Model/ModelLodAssetCreator.cpp | 2 +- .../Source/RPI.Reflect/Shader/ShaderAsset.cpp | 2 +- Gems/Atom/RPI/Code/Tests/Common/RHI/Stubs.h | 16 +- .../Code/Tests/Image/StreamingImageTests.cpp | 6 +- .../Material/MaterialSourceDataTests.cpp | 4 +- .../RPI/Code/Tests/Shader/ShaderTests.cpp | 6 +- ...ShaderResourceGroupConstantBufferTests.cpp | 20 +- .../Code/Source/Document/MaterialDocument.cpp | 2 +- .../Code/Include/Atom/Utils/ImageComparison.h | 6 +- .../Utils/Code/Include/Atom/Utils/PngFile.h | 6 +- .../Utils/Code/Include/Atom/Utils/PpmFile.h | 6 +- .../Utils/Code/Source/ImageComparison.cpp | 6 +- Gems/Atom/Utils/Code/Source/PngFile.cpp | 4 +- Gems/Atom/Utils/Code/Source/PpmFile.cpp | 4 +- .../Source/Mesh/MeshComponentController.cpp | 4 +- .../EMotionFXAtom/Code/Source/ActorAsset.cpp | 2 +- .../Code/Source/AtomActorInstance.cpp | 2 +- Gems/AtomTressFX/Code/Passes/HairParentPass.h | 2 +- .../EMotionFX/Code/EMotionFX/Source/Actor.cpp | 10 +- Gems/EMotionFX/Code/EMotionFX/Source/Mesh.cpp | 2 +- Gems/LyShine/Code/Source/LyShinePass.h | 2 +- .../BindlessImageArrayHandler.cpp | 2 +- 170 files changed, 833 insertions(+), 1274 deletions(-) delete mode 100644 Code/Framework/AtomCore/AtomCore/std/containers/array_view.h delete mode 100644 Code/Framework/AtomCore/Tests/ArrayView.cpp diff --git a/Code/Framework/AtomCore/AtomCore/atomcore_files.cmake b/Code/Framework/AtomCore/AtomCore/atomcore_files.cmake index 9167c1e645..827d26ecf5 100644 --- a/Code/Framework/AtomCore/AtomCore/atomcore_files.cmake +++ b/Code/Framework/AtomCore/AtomCore/atomcore_files.cmake @@ -13,7 +13,6 @@ set(FILES Instance/InstanceData.h Instance/InstanceData.cpp Instance/InstanceDatabase.h - std/containers/array_view.h std/containers/fixed_vector_set.h std/containers/lru_cache.h std/containers/vector_set.h diff --git a/Code/Framework/AtomCore/AtomCore/std/containers/array_view.h b/Code/Framework/AtomCore/AtomCore/std/containers/array_view.h deleted file mode 100644 index 522b69bf9b..0000000000 --- a/Code/Framework/AtomCore/AtomCore/std/containers/array_view.h +++ /dev/null @@ -1,156 +0,0 @@ -/* - * 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 - -#include -#include -#include - -namespace AZStd -{ - /** - * Immutable wrapper for an array of data. It does not maintain storage for the data, - * but just holds pointers to mark the beginning and end of the array. It can be - * conveniently constructed from a variety of other container types like array, - * vector, and fixed_vector. - * - * Example: - * Given "void Func(AZStd::array_view a) {...}" you can call... - * - Func({1,2,3}); - * - AZStd::array a = {1,2,3}; - * Func(a); - * - AZStd::vector v = {1,2,3}; - * Func(v); - * - AZStd::fixed_vector fv = {1,2,3}; - * Func(fv); - * - * Since the array_view does not copy and store any data, it is only valid as long as the data used to create it is valid. - */ - template - class array_view final - { - public: - using value_type = Element; - - using pointer = value_type*; - using const_pointer = const value_type*; - - using reference = value_type&; - using const_reference = const value_type&; - - using size_type = AZStd::size_t; - using difference_type = AZStd::ptrdiff_t; - - using iterator = const value_type*; - using const_iterator = const value_type*; - using reverse_iterator = AZStd::reverse_iterator; - using const_reverse_iterator = AZStd::reverse_iterator; - - array_view() - : m_begin(nullptr) - , m_end(nullptr) - { } - - ~array_view() = default; - - array_view(const_pointer s, size_type length) - : m_begin(s) - , m_end(m_begin + length) - { - if (length == 0) erase(); - } - - array_view(const_pointer first, const_pointer last) - : m_begin(first) - , m_end(last) - { } - - // We explicitly delete this constructor because it's too easy to accidentally - // create an array_view to just the first element instead of an entire array. - array_view(const_pointer s) = delete; - - template - array_view(const AZStd::array& data) - : m_begin(data.data()) - , m_end(m_begin + data.size()) - { } - - array_view(const AZStd::vector& data) - : m_begin(data.data()) - , m_end(m_begin + data.size()) - { } - - template - array_view(const AZStd::fixed_vector& data) - : m_begin(data.data()) - , m_end(m_begin + data.size()) - { } - - array_view(const array_view&) = default; - - array_view(array_view&& other) - : array_view(other.m_begin, other.m_end) - { -#if AZ_DEBUG_BUILD // Clearing the original pointers isn't necessary, but is good for debugging - other.m_begin = nullptr; - other.m_end = nullptr; -#endif - } - - array_view& operator=(const array_view& other) = default; - - array_view& operator=(array_view&& other) - { - m_begin = other.m_begin; - m_end = other.m_end; -#if AZ_DEBUG_BUILD // Clearing the original pointers isn't necessary, but is good for debugging - other.m_begin = nullptr; - other.m_end = nullptr; -#endif - return *this; - } - - size_type size() const { return m_end - m_begin; } - - bool empty() const { return m_end == m_begin; } - - const_pointer data() const { return m_begin; } - - const_reference operator[](size_type index) const - { - AZ_Assert(index < size(), "index value is out of range"); - return m_begin[index]; - } - - void erase() { m_begin = m_end = nullptr; } - - iterator begin() const { return m_begin; } - iterator end() const { return m_end; } - const_iterator cbegin() const { return m_begin; } - const_iterator cend() const { return m_end; } - reverse_iterator rbegin() const { return reverse_iterator(m_end); } - reverse_iterator rend() const { return reverse_iterator(m_begin); } - const_reverse_iterator crbegin() const { return const_reverse_iterator(cend()); } - const_reverse_iterator crend() const { return const_reverse_iterator(cbegin()); } - - friend bool operator==(array_view lhs, array_view rhs) - { - return lhs.m_begin == rhs.m_begin && lhs.m_end == rhs.m_end; - } - - friend bool operator!=(array_view lhs, array_view rhs) { return !(lhs == rhs); } - friend bool operator< (array_view lhs, array_view rhs) { return lhs.m_begin < rhs.m_begin || lhs.m_begin == rhs.m_begin && lhs.m_end < rhs.m_end; } - friend bool operator> (array_view lhs, array_view rhs) { return lhs.m_begin > rhs.m_begin || lhs.m_begin == rhs.m_begin && lhs.m_end > rhs.m_end; } - friend bool operator<=(array_view lhs, array_view rhs) { return lhs == rhs || lhs < rhs; } - friend bool operator>=(array_view lhs, array_view rhs) { return lhs == rhs || lhs > rhs; } - - private: - const_pointer m_begin; - const_pointer m_end; - }; -} // namespace AZStd diff --git a/Code/Framework/AtomCore/Tests/ArrayView.cpp b/Code/Framework/AtomCore/Tests/ArrayView.cpp deleted file mode 100644 index f0208ced3b..0000000000 --- a/Code/Framework/AtomCore/Tests/ArrayView.cpp +++ /dev/null @@ -1,300 +0,0 @@ -/* - * 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 - -#include -#include - -namespace UnitTest -{ - using namespace AZStd; - - class ArrayView : public AllocatorsTestFixture - { - protected: - template - void ExpectEqual(initializer_list expectedValues, array_view arrayView) - { - EXPECT_EQ(false, arrayView.empty()); - EXPECT_EQ(expectedValues.size(), arrayView.size()); - - typename AZStd::vector::const_iterator iterator = arrayView.begin(); - - for (int i = 0; i < expectedValues.size(); ++i, ++iterator) - { - EXPECT_EQ(expectedValues.begin()[i], arrayView[i]); - EXPECT_EQ(expectedValues.begin()[i], *iterator); - } - - EXPECT_EQ(iterator, arrayView.end()); - } - }; - - TEST_F(ArrayView, DefaultConstructor) - { - array_view defaultView; - - EXPECT_EQ(nullptr, defaultView.begin()); - EXPECT_EQ(nullptr, defaultView.end()); - EXPECT_EQ(0, defaultView.size()); - EXPECT_EQ(true, defaultView.empty()); - } - - TEST_F(ArrayView, PointerConstructor1) - { - int originalValues[4] = { 2,3,4,5 }; - array_view view(originalValues, AZ_ARRAY_SIZE(originalValues)); - - ExpectEqual({ 2,3,4,5 }, view); - - EXPECT_EQ(originalValues, view.begin()); - EXPECT_EQ(&originalValues[4], view.end()); - } - - TEST_F(ArrayView, PointerConstructor2) - { - int originalValues[3] = { 6,7,8 }; - array_view view(originalValues, &originalValues[3]); - - ExpectEqual({ 6,7,8 }, view); - - EXPECT_EQ(originalValues, view.begin()); - EXPECT_EQ(&originalValues[3], view.end()); - } - - TEST_F(ArrayView, ArrayConstructor) - { - array originalValues = { 9,10,11,12 }; - array_view view(originalValues); - - ExpectEqual({ 9,10,11,12 }, view); - - EXPECT_EQ(originalValues.begin(), view.begin()); - EXPECT_EQ(originalValues.end(), view.end()); - } - - - TEST_F(ArrayView, VectorConstructor) - { - vector originalValues = { 13,14,15,16,17,18 }; - array_view view(originalValues); - - ExpectEqual({ 13,14,15,16,17,18 }, view); - - EXPECT_EQ(originalValues.begin(), view.begin()); - EXPECT_EQ(originalValues.end(), view.end()); - } - - TEST_F(ArrayView, FixedVectorConstructor) - { - fixed_vector originalValues = { 17,18,19 }; // Note that even though the fixed_vector capacity is 10, it's size is 3, so the view size will be 3 as well - array_view view(originalValues); - - ExpectEqual({ 17,18,19 }, view); - - EXPECT_EQ(originalValues.begin(), view.begin()); - EXPECT_EQ(originalValues.end(), view.end()); - } - - TEST_F(ArrayView, CopyConstructor) - { - fixed_vector originalValues = { 27,28 }; - - array_view view1(originalValues); - array_view view2(view1); - - ExpectEqual({ 27,28 }, view2); - - EXPECT_EQ(view1.begin(), view2.begin()); - EXPECT_EQ(view1.end(), view2.end()); - } - - TEST_F(ArrayView, MoveConstructor) - { - int originalValues[] = { 29,30,31 }; - array_view view1(originalValues, AZ_ARRAY_SIZE(originalValues)); - array_view view2(AZStd::move(view1)); - - ExpectEqual({ 29,30,31 }, view2); - - EXPECT_EQ(originalValues, view2.begin()); - EXPECT_EQ(&originalValues[3], view2.end()); - - // This isn't strictly necessary but is a good way to make sure the move - // constructor actually exists and it itn't just calling the copy constructor -#if AZ_DEBUG_BUILD // The pointers are only cleared in debug - EXPECT_EQ(nullptr, view1.begin()); - EXPECT_EQ(nullptr, view1.end()); -#endif - } - - TEST_F(ArrayView, AssignmentOperator) - { - fixed_vector originalValues = { 32,33,34,35 }; - - array_view view1(originalValues); - array_view view2; - - view2 = view1; - - ExpectEqual({ 32,33,34,35 }, view2); - - EXPECT_EQ(view1.begin(), view2.begin()); - EXPECT_EQ(view1.end(), view2.end()); - } - - TEST_F(ArrayView, MoveAssignmentOperator) - { - int originalValues[] = { 36,37,38,39,40 }; - array_view view1(originalValues, AZ_ARRAY_SIZE(originalValues)); - array_view view2; - view2 = AZStd::move(view1); - - ExpectEqual({ 36,37,38,39,40 }, view2); - - EXPECT_EQ(originalValues, view2.begin()); - EXPECT_EQ(&originalValues[5], view2.end()); - - // This isn't strictly necessary but is a good way to make sure the move - // assignment operator actually exists and it itn't just calling the norm - // assignment operator -#if AZ_DEBUG_BUILD // The pointers are only cleared in debug - EXPECT_EQ(nullptr, view1.begin()); - EXPECT_EQ(nullptr, view1.end()); -#endif - } - - TEST_F(ArrayView, Erase) - { - fixed_vector originalValues = { 1,2,3,4 }; - - array_view view(originalValues); - view.erase(); - - EXPECT_EQ(nullptr, view.begin()); - EXPECT_EQ(nullptr, view.end()); - EXPECT_EQ(0, view.size()); - EXPECT_EQ(true, view.empty()); - } - - TEST_F(ArrayView, BeginAndEnd) - { - fixed_vector originalValues = { 1,2,3,4 }; - - array_view view(originalValues); - - EXPECT_EQ(1, view.begin()[0]); - EXPECT_EQ(4, view.end()[-1]); - EXPECT_EQ(1, view.cbegin()[0]); - EXPECT_EQ(4, view.cend()[-1]); - EXPECT_EQ(4, view.rbegin()[0]); - EXPECT_EQ(1, view.rend()[-1]); - EXPECT_EQ(4, view.crbegin()[0]); - EXPECT_EQ(1, view.crend()[-1]); - } - - TEST_F(ArrayView, ImplicitConstruction) - { - // This test verifies that we can pass in various non-array_view types - // into functions that take an array_view - - // The compile cannot detect the correct template type so that has to be specified explicitly - - ExpectEqual({ 1,2,3 }, vector({ 1,2,3 })); - ExpectEqual({ 1,2,3 }, fixed_vector({ 1,2,3 })); - ExpectEqual({ 1,2,3 }, array({ 1,2,3 })); - } - - void CheckComparisonOperators(bool areEqual, array_view a, array_view b) - { - EXPECT_EQ(areEqual, a == b); - - // For less/greater operators, the exact order doesn't really matter; - // We just check for internal consistency - if (areEqual) - { - EXPECT_EQ(false, a != b); - EXPECT_EQ(false, a < b); - EXPECT_EQ(false, a > b); - EXPECT_EQ(true, a <= b); - EXPECT_EQ(true, a >= b); - } - else - { - EXPECT_EQ(true, a != b); - - EXPECT_EQ(a > b, a >= b); - EXPECT_EQ(a < b, a <= b); - - EXPECT_NE(a > b, a < b); - EXPECT_NE(a >= b, a <= b); - EXPECT_NE(a >= b, a < b); - EXPECT_NE(a > b, a <= b); - EXPECT_NE(a <= b, a > b); - EXPECT_NE(a < b, a >= b); - } - } - - TEST_F(ArrayView, ComparisonOperators) - { - int arrayA[] = { 1,2,3 }; - int arrayB[] = { 1,2,3 }; - - array_view arrayA_view(arrayA, 3); - array_view arrayB_view(arrayB, 3); - array_view arrayA_otherView(arrayA, 3); - // view of a sub-array aligned to the beginning of the array - array_view arrayA_headView(arrayA, 2); - array_view arrayB_headView(arrayB, 2); - // view of a sub-array aligned to the end of the array - array_view arrayA_tailView(&arrayA[1], 2); - array_view arrayB_tailView(&arrayB[1], 2); - // view of a sub-array in the middle of the array - array_view arrayA_centerView(&arrayA[1], 1); - array_view arrayB_centerView(&arrayB[1], 1); - - // Same view - CheckComparisonOperators(true, arrayA_view, arrayA_view); - - // Different view, same array - CheckComparisonOperators(true, arrayA_view, arrayA_otherView); - CheckComparisonOperators(true, arrayA_otherView, arrayA_view); - - // Different arrays - CheckComparisonOperators(false, arrayA_view, arrayB_view); - CheckComparisonOperators(false, arrayB_view, arrayA_view); - - // Same arrays, but one is a just a subset of the array - CheckComparisonOperators(false, arrayA_view, arrayA_headView); - CheckComparisonOperators(false, arrayA_view, arrayA_tailView); - CheckComparisonOperators(false, arrayA_view, arrayA_centerView); - CheckComparisonOperators(false, arrayA_headView, arrayA_view); - CheckComparisonOperators(false, arrayA_tailView, arrayA_view); - CheckComparisonOperators(false, arrayA_centerView, arrayA_view); - - // Different arrays, different lengths - CheckComparisonOperators(false, arrayA_view, arrayB_headView); - CheckComparisonOperators(false, arrayB_view, arrayA_headView); - CheckComparisonOperators(false, arrayB_headView, arrayA_view); - CheckComparisonOperators(false, arrayA_headView, arrayB_view); - } - - TEST_F(ArrayView, AssertOutOfBounds) - { - array_view view({ 1,2,3,4 }); - - AZ_TEST_START_TRACE_SUPPRESSION; - - view[4]; - view[5]; - - AZ_TEST_STOP_TRACE_SUPPRESSION(2); - } - -} diff --git a/Code/Framework/AtomCore/Tests/atomcore_tests_files.cmake b/Code/Framework/AtomCore/Tests/atomcore_tests_files.cmake index 4522a4b7b6..c518371e8d 100644 --- a/Code/Framework/AtomCore/Tests/atomcore_tests_files.cmake +++ b/Code/Framework/AtomCore/Tests/atomcore_tests_files.cmake @@ -7,7 +7,6 @@ # set(FILES - ArrayView.cpp ConcurrencyCheckerTests.cpp InstanceDatabase.cpp lru_cache.cpp diff --git a/Code/Framework/AzCore/AzCore/std/containers/span.h b/Code/Framework/AzCore/AzCore/std/containers/span.h index d0ac704fc3..807d87e634 100644 --- a/Code/Framework/AzCore/AzCore/std/containers/span.h +++ b/Code/Framework/AzCore/AzCore/std/containers/span.h @@ -42,12 +42,11 @@ namespace AZStd::Internal namespace AZStd { /** - * First pass partial implementation of span copied over from array_view. It - * returns non-const iterator/pointers. first(), last(), and subspan() - * are yet to be implemented. It does not maintain storage for the data, - * but just holds pointers to mark the beginning and end of the array. - * It can be conveniently constructed from a variety of other container - * types like array, vector, and fixed_vector. + * Full C++20 implementation of span done using the C++ draft at https://eel.is/c++draft/views. + * It does not maintain storage for the data, + * but just hold a pointer to mark the beginning and the size for the elements. + * It can be constructed any type that models the C++ contiguous_range concept + * such like array, vector, fixed_vector, raw-array, string_view, string, etc... . * * Example: * Given "void Func(AZStd::span a) {...}" you can call... @@ -84,7 +83,7 @@ namespace AZStd inline static constexpr size_t extent = Extent; - constexpr span() noexcept = default;; + constexpr span() noexcept = default; ~span() = default; @@ -110,12 +109,12 @@ namespace AZStd Extent != dynamic_extent, int> = 0> constexpr explicit span(It first, End last); - template> + template> constexpr span(type_identity_t (&arr)[N]) noexcept; - template > + template > constexpr span(array& data) noexcept; - template > + template > constexpr span(const array& data) noexcept; template && diff --git a/Code/Framework/AzCore/Tests/AZStd/SpanTests.cpp b/Code/Framework/AzCore/Tests/AZStd/SpanTests.cpp index f9861ae1f2..6fe0704491 100644 --- a/Code/Framework/AzCore/Tests/AZStd/SpanTests.cpp +++ b/Code/Framework/AzCore/Tests/AZStd/SpanTests.cpp @@ -246,4 +246,16 @@ namespace UnitTest AZ_TEST_STOP_TRACE_SUPPRESSION(1); } } + + TEST_F(SpanTestFixture, CanInitializeFixedArrayToDynamicExtentSpan) + { + constexpr size_t arrayElementCount = 5; + static constexpr AZStd::array intArray{ 4, 5, 6, 1, 7 }; + + constexpr AZStd::span arraySpan(intArray); + static_assert(intArray.data() == arraySpan.data()); + + constexpr AZStd::span arraySpanFixedExtent(intArray); + static_assert(intArray.data() == arraySpanFixedExtent.data()); + } } diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/Utils.cpp b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/Utils.cpp index 20e1b18e77..bcf330f7d3 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/Utils.cpp +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Processing/Utils.cpp @@ -286,7 +286,7 @@ namespace ImageProcessingAtom for (u32 slice = 0; slice < arraySize; slice++) { - AZStd::array_view imageData = imageAsset->GetSubImageData(mip, slice); + AZStd::span imageData = imageAsset->GetSubImageData(mip, slice); memcpy(imageBuf + slice * imageData.size(), imageData.data(), imageData.size()); } } diff --git a/Gems/Atom/Asset/Shader/Code/Tests/SupervariantCmdArgumentTests.cpp b/Gems/Atom/Asset/Shader/Code/Tests/SupervariantCmdArgumentTests.cpp index da80b15d79..df7dbc3186 100644 --- a/Gems/Atom/Asset/Shader/Code/Tests/SupervariantCmdArgumentTests.cpp +++ b/Gems/Atom/Asset/Shader/Code/Tests/SupervariantCmdArgumentTests.cpp @@ -71,7 +71,7 @@ namespace UnitTest //! Helper function. //! Given an input list of {Key, Value} pairs returns a list of strings where each string is of the form: "Key=Value". - AZStd::vector CreateListOfStringsFromListOfKeyValues(AZStd::array_view listOfKeyValues) const + AZStd::vector CreateListOfStringsFromListOfKeyValues(AZStd::span listOfKeyValues) const { AZStd::vector listOfStrings; for (const auto& keyValue : listOfKeyValues) @@ -90,7 +90,7 @@ namespace UnitTest //! Helper function. //! Given an input list of {Key, Value} pairs returns a list of strings where each string is of the form: "Key1", "Value1", "Key2", "Value2". - AZStd::vector CreateListOfSingleStringsFromListOfKeyValues(AZStd::array_view listOfKeyValues) const + AZStd::vector CreateListOfSingleStringsFromListOfKeyValues(AZStd::span listOfKeyValues) const { AZStd::vector listOfStrings; for (const auto& keyValue : listOfKeyValues) @@ -134,7 +134,7 @@ namespace UnitTest //! Returns a command line string that results of concatenating the input list of {Key, Value} pairs (with '='). //! Example of a returned string: //! "key1=value1 key2 key3 key4=value" - AZStd::string CreateCmdLineStringFromListOfKeyValues(AZStd::array_view listOfKeyValues) const + AZStd::string CreateCmdLineStringFromListOfKeyValues(AZStd::span listOfKeyValues) const { AZStd::string cmdLineString; for (const auto& keyValueView : listOfKeyValues) @@ -148,7 +148,7 @@ namespace UnitTest //! Returns a command line string of macro definitions that results of concatenating the input list of {Key, Value} pairs. //! Example of a returned string: //! "-Dkey1=value1 -Dkey2 -Dkey3 -Dkey4=value" - AZStd::string CreateMacroDefinitionCmdLineStringFromListOfKeyValues(AZStd::array_view listOfKeyValues) const + AZStd::string CreateMacroDefinitionCmdLineStringFromListOfKeyValues(AZStd::span listOfKeyValues) const { AZStd::string cmdLineString; for (const auto& keyValueView : listOfKeyValues) @@ -161,7 +161,7 @@ namespace UnitTest //! @param includePaths A List of folder paths //! @param predefinedMacros A List of strings with format: "name[=value]" ShaderBuilder::PreprocessorOptions CreatePreprocessorOptions( - AZStd::array_view includePaths, AZStd::array_view predefinedMacros) const + AZStd::span includePaths, AZStd::span predefinedMacros) const { ShaderBuilder::PreprocessorOptions preprocessorOptions; @@ -200,8 +200,8 @@ namespace UnitTest //! @param azslcAdditionalFreeArguments A string representing series of command line arguments for AZSLc. //! @param dxcAdditionalFreeArguments: A string representing series of command line arguments for DXC. ShaderBuilder::GlobalBuildOptions CreateGlobalBuildOptions( - AZStd::array_view includePaths, - AZStd::array_view predefinedMacros, + AZStd::span includePaths, + AZStd::span predefinedMacros, AZStd::string_view azslcAdditionalFreeArguments, AZStd::string_view dxcAdditionalFreeArguments) const { @@ -227,7 +227,7 @@ namespace UnitTest return supervariantInfo; } - bool StringContainsAllSubstrings(AZStd::string_view haystack, AZStd::array_view substrings) + bool StringContainsAllSubstrings(AZStd::string_view haystack, AZStd::span substrings) { return AZStd::all_of(AZ_BEGIN_END(substrings), [&](AZStd::string_view needle) -> bool @@ -237,7 +237,7 @@ namespace UnitTest ); } - bool StringDoesNotContainAnyOneOfTheSubstrings(AZStd::string_view haystack, AZStd::array_view substrings) + bool StringDoesNotContainAnyOneOfTheSubstrings(AZStd::string_view haystack, AZStd::span substrings) { return AZStd::all_of(AZ_BEGIN_END(substrings), [&](AZStd::string_view needle) -> bool { return (haystack.find(needle) == AZStd::string::npos); @@ -247,7 +247,7 @@ namespace UnitTest //! @returns: True if all strings in @substring appear in @vectorOfString. //! @remark: Keep in mind that this is not the same as saying that all strings in @vectorOfStrings appear in @substrings. bool VectorContainsAllSubstrings( - AZStd::array_view vectorOfStrings, AZStd::array_view substrings) + AZStd::span vectorOfStrings, AZStd::span substrings) { return AZStd::all_of( AZ_BEGIN_END(substrings), @@ -264,7 +264,7 @@ namespace UnitTest } //! @returns: True only if None of the strings in @vectorOfStrings contains any of the strings in @substrings. - bool VectorDoesNotContainAnyOneOfTheSubstrings(AZStd::array_view vectorOfStrings, AZStd::array_view substrings) + bool VectorDoesNotContainAnyOneOfTheSubstrings(AZStd::span vectorOfStrings, AZStd::span substrings) { return AZStd::all_of(AZ_BEGIN_END(vectorOfStrings), [&](AZStd::string_view haystack) -> bool { return StringDoesNotContainAnyOneOfTheSubstrings(haystack, substrings); diff --git a/Gems/Atom/Feature/Common/Code/Include/Atom/Feature/SkinnedMesh/SkinnedMeshInputBuffers.h b/Gems/Atom/Feature/Common/Code/Include/Atom/Feature/SkinnedMesh/SkinnedMeshInputBuffers.h index c52bed8cf2..bb5f08c65e 100644 --- a/Gems/Atom/Feature/Common/Code/Include/Atom/Feature/SkinnedMesh/SkinnedMeshInputBuffers.h +++ b/Gems/Atom/Feature/Common/Code/Include/Atom/Feature/SkinnedMesh/SkinnedMeshInputBuffers.h @@ -27,13 +27,13 @@ namespace AZ class BufferView; class IndexBufferView; } - + namespace RPI { class Model; class ShaderResourceGroup; } - + namespace Render { //! Info needed to create per-submesh views into the skinned mesh buffers so that the target skinned model can be broken into multiple sub-meshes. @@ -212,8 +212,8 @@ namespace AZ //! Get an individual lod const SkinnedMeshInputLod& GetLod(size_t lodIndex) const; - //! Get an array_view of the buffer views for all the input streams - AZStd::array_view> GetInputBufferViews(size_t lodIndex) const; + //! Get a span of the buffer views for all the input streams + AZStd::span> GetInputBufferViews(size_t lodIndex) const; //! Get the buffer view for a specific input stream AZ::RHI::Ptr GetInputBufferView(size_t lodIndex, uint8_t inputStream) const; diff --git a/Gems/Atom/Feature/Common/Code/Include/Atom/Feature/Utils/IndexedDataVector.h b/Gems/Atom/Feature/Common/Code/Include/Atom/Feature/Utils/IndexedDataVector.h index b2d483e48c..5deecb990f 100644 --- a/Gems/Atom/Feature/Common/Code/Include/Atom/Feature/Utils/IndexedDataVector.h +++ b/Gems/Atom/Feature/Common/Code/Include/Atom/Feature/Utils/IndexedDataVector.h @@ -8,7 +8,7 @@ #pragma once -#include +#include #include namespace AZ::Render diff --git a/Gems/Atom/Feature/Common/Code/Include/Atom/Feature/Utils/MultiIndexedDataVector.h b/Gems/Atom/Feature/Common/Code/Include/Atom/Feature/Utils/MultiIndexedDataVector.h index c0f11dd159..cc065680dc 100644 --- a/Gems/Atom/Feature/Common/Code/Include/Atom/Feature/Utils/MultiIndexedDataVector.h +++ b/Gems/Atom/Feature/Common/Code/Include/Atom/Feature/Utils/MultiIndexedDataVector.h @@ -9,7 +9,7 @@ #pragma once #include -#include +#include namespace AZ { diff --git a/Gems/Atom/Feature/Common/Code/Source/CoreLights/CascadedShadowmapsPass.cpp b/Gems/Atom/Feature/Common/Code/Source/CoreLights/CascadedShadowmapsPass.cpp index 5529a2916b..4a5ea4a112 100644 --- a/Gems/Atom/Feature/Common/Code/Source/CoreLights/CascadedShadowmapsPass.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/CoreLights/CascadedShadowmapsPass.cpp @@ -71,7 +71,7 @@ namespace AZ } } - const AZStd::array_view CascadedShadowmapsPass::GetPipelineViewTags() + const AZStd::span CascadedShadowmapsPass::GetPipelineViewTags() { if (m_childrenPipelineViewTags.size() != Shadow::MaxNumberOfCascades) { @@ -181,7 +181,7 @@ namespace AZ RPI::Ptr CascadedShadowmapsPass::CreateChild(uint16_t cascadeIndex) { - const AZStd::array_view childrenViewTags = GetPipelineViewTags(); + const AZStd::span childrenViewTags = GetPipelineViewTags(); const Name passName{ AZStd::string::format("DirectionalLightShadowmapPass.%d", cascadeIndex) }; auto passData = AZStd::make_shared(); diff --git a/Gems/Atom/Feature/Common/Code/Source/CoreLights/CascadedShadowmapsPass.h b/Gems/Atom/Feature/Common/Code/Source/CoreLights/CascadedShadowmapsPass.h index e673a77ddb..1f7acfadb2 100644 --- a/Gems/Atom/Feature/Common/Code/Source/CoreLights/CascadedShadowmapsPass.h +++ b/Gems/Atom/Feature/Common/Code/Source/CoreLights/CascadedShadowmapsPass.h @@ -9,7 +9,7 @@ #include #include -#include +#include #include #include #include @@ -36,7 +36,7 @@ namespace AZ void SetCameraViewName(const AZStd::string& viewName); //! This returns pipeline view tag for children. - const AZStd::array_view GetPipelineViewTags(); + const AZStd::span GetPipelineViewTags(); //! This exposes the shadowmap atlas. ShadowmapAtlas& GetShadowmapAtlas(); diff --git a/Gems/Atom/Feature/Common/Code/Source/CoreLights/DirectionalLightFeatureProcessor.cpp b/Gems/Atom/Feature/Common/Code/Source/CoreLights/DirectionalLightFeatureProcessor.cpp index 5cf65adcee..1b8ad72a4c 100644 --- a/Gems/Atom/Feature/Common/Code/Source/CoreLights/DirectionalLightFeatureProcessor.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/CoreLights/DirectionalLightFeatureProcessor.cpp @@ -1018,7 +1018,7 @@ namespace AZ for (const auto& passIt : m_cascadedShadowmapsPasses) { CascadedShadowmapsPass* shadowPass = passIt.second.front(); - const AZStd::array_view& viewTags = shadowPass->GetPipelineViewTags(); + const AZStd::span& viewTags = shadowPass->GetPipelineViewTags(); AZ_Assert(viewTags.size() >= cascadeCount, "DirectionalLightFeatureProcessor: There is not enough pipeline view tags."); RPI::RenderPipeline* pipeline = shadowPass->GetRenderPipeline(); diff --git a/Gems/Atom/Feature/Common/Code/Source/CoreLights/EsmShadowmapsPass.cpp b/Gems/Atom/Feature/Common/Code/Source/CoreLights/EsmShadowmapsPass.cpp index 553133aef7..722a8f3d23 100644 --- a/Gems/Atom/Feature/Common/Code/Source/CoreLights/EsmShadowmapsPass.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/CoreLights/EsmShadowmapsPass.cpp @@ -112,7 +112,7 @@ namespace AZ m_shadowmapImageSize = inputBinding.m_attachment->m_descriptor.m_image.m_size; m_shadowmapArraySize = inputBinding.m_attachment->m_descriptor.m_image.m_arraySize; - const AZStd::array_view>& children = GetChildren(); + const AZStd::span>& children = GetChildren(); AZ_Assert(children.size() == EsmChildPassKindCount, "[EsmShadowmapsPass '%s'] The count of children is wrong.", GetPathName().GetCStr()); for (uint32_t childPassIndex = 0; childPassIndex < EsmChildPassKindCount; ++childPassIndex) diff --git a/Gems/Atom/Feature/Common/Code/Source/CoreLights/EsmShadowmapsPass.h b/Gems/Atom/Feature/Common/Code/Source/CoreLights/EsmShadowmapsPass.h index 5a9898d507..3e4ec1735e 100644 --- a/Gems/Atom/Feature/Common/Code/Source/CoreLights/EsmShadowmapsPass.h +++ b/Gems/Atom/Feature/Common/Code/Source/CoreLights/EsmShadowmapsPass.h @@ -15,7 +15,7 @@ #include #include #include -#include +#include #include #include diff --git a/Gems/Atom/Feature/Common/Code/Source/CoreLights/ProjectedShadowmapsPass.h b/Gems/Atom/Feature/Common/Code/Source/CoreLights/ProjectedShadowmapsPass.h index dc7df7de78..cc99cdb8f1 100644 --- a/Gems/Atom/Feature/Common/Code/Source/CoreLights/ProjectedShadowmapsPass.h +++ b/Gems/Atom/Feature/Common/Code/Source/CoreLights/ProjectedShadowmapsPass.h @@ -9,7 +9,7 @@ #include #include -#include +#include #include #include #include diff --git a/Gems/Atom/Feature/Common/Code/Source/Decals/DecalFeatureProcessor.cpp b/Gems/Atom/Feature/Common/Code/Source/Decals/DecalFeatureProcessor.cpp index 8e446435fa..69681110c9 100644 --- a/Gems/Atom/Feature/Common/Code/Source/Decals/DecalFeatureProcessor.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/Decals/DecalFeatureProcessor.cpp @@ -16,7 +16,7 @@ #include #include #include -#include +#include #include namespace AZ @@ -114,14 +114,14 @@ namespace AZ } } - AZStd::array_view> DecalFeatureProcessor::GetImageArray() const + AZStd::span> DecalFeatureProcessor::GetImageArray() const { // [GFX TODO][ATOM-4445] Replace this hardcoded constant with atlasing / bindless so we can have far more than 8 decal textures // Note this constant also is defined in View.srg const size_t MaxDecals = 8; size_t numImages = AZStd::min(MaxDecals, m_decalData.GetDataCount()); - AZStd::array_view imageArrayView(m_decalData.GetDataVector<1>().begin(), m_decalData.GetDataVector<1>().begin() + numImages); + AZStd::span imageArrayView(m_decalData.GetDataVector<1>().begin(), m_decalData.GetDataVector<1>().begin() + numImages); return imageArrayView; } @@ -130,8 +130,8 @@ namespace AZ { AZ_PROFILE_SCOPE(RPI, "DecalFeatureProcessor: Render"); - AZStd::array_view> baseMaps = GetImagesFromDecalData<1>(); - AZStd::array_view> opacityMaps = GetImagesFromDecalData<2>(); + AZStd::span> baseMaps = GetImagesFromDecalData<1>(); + AZStd::span> opacityMaps = GetImagesFromDecalData<2>(); for (const RPI::ViewPtr& view : packet.m_views) { diff --git a/Gems/Atom/Feature/Common/Code/Source/Decals/DecalFeatureProcessor.h b/Gems/Atom/Feature/Common/Code/Source/Decals/DecalFeatureProcessor.h index f651b5cd2d..b2785b1770 100644 --- a/Gems/Atom/Feature/Common/Code/Source/Decals/DecalFeatureProcessor.h +++ b/Gems/Atom/Feature/Common/Code/Source/Decals/DecalFeatureProcessor.h @@ -81,11 +81,11 @@ namespace AZ DecalFeatureProcessor(const DecalFeatureProcessor&) = delete; Data::Instance GetImageFromMaterial(const AZ::Name& mapName, Data::Instance materialInstance) const; - AZStd::array_view> GetImageArray() const; + AZStd::span> GetImageArray() const; void CacheShaderIndices(); template - AZStd::array_view> GetImagesFromDecalData(); + AZStd::span> GetImagesFromDecalData(); static constexpr const char* FeatureProcessorName = "DecalFeatureProcessor"; @@ -105,7 +105,7 @@ namespace AZ }; template - AZStd::array_view> + AZStd::span> AZ::Render::DecalFeatureProcessor::GetImagesFromDecalData() { // [GFX TODO][ATOM-4445] Replace this hardcoded constant with atlasing / bindless so we can have far more than 8 decal textures @@ -113,7 +113,7 @@ namespace AZ const size_t MaxDecals = 4; size_t numImages = AZStd::min(MaxDecals, m_decalData.GetDataCount()); - AZStd::array_view imageArrayView(m_decalData.GetDataVector().begin(), m_decalData.GetDataVector().begin() + numImages); + AZStd::span imageArrayView(m_decalData.GetDataVector().begin(), m_decalData.GetDataVector().begin() + numImages); return imageArrayView; } } // namespace Render diff --git a/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArray.cpp b/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArray.cpp index 56ff1648d4..d570990be0 100644 --- a/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArray.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArray.cpp @@ -267,7 +267,7 @@ namespace AZ return AZ::RHI::GetImageSubresourceLayout(mipSize, descriptor.m_format); } - AZStd::array_view DecalTextureArray::GetRawImageData(const AZ::Name& mapName, int arrayLevel, const int mip) const + AZStd::span DecalTextureArray::GetRawImageData(const AZ::Name& mapName, int arrayLevel, const int mip) const { // We always want to provide valid data to the AssetCreator for each texture. // If this spot in the array is empty, just provide some random image as filler. diff --git a/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArray.h b/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArray.h index 39e66176fd..a9bf994aac 100644 --- a/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArray.h +++ b/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArray.h @@ -13,7 +13,7 @@ #include #include #include -#include +#include #include @@ -81,7 +81,7 @@ namespace AZ RHI::Size GetImageDimensions(const DecalMapType mapType) const; RHI::Format GetFormat(const DecalMapType mapType) const; RHI::ImageSubresourceLayout GetLayout(const DecalMapType mapType, int mip) const; - AZStd::array_view GetRawImageData(const AZ::Name& mapName, int arrayLevel, int mip) const; + AZStd::span GetRawImageData(const AZ::Name& mapName, int arrayLevel, int mip) const; bool AreAllAssetsReady() const; bool IsAssetReady(const MaterialData& materialData) const; diff --git a/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArrayFeatureProcessor.cpp b/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArrayFeatureProcessor.cpp index c6b4d4e754..681a316b91 100644 --- a/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArrayFeatureProcessor.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArrayFeatureProcessor.cpp @@ -13,7 +13,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/Gems/Atom/Feature/Common/Code/Source/Mesh/MeshFeatureProcessor.cpp b/Gems/Atom/Feature/Common/Code/Source/Mesh/MeshFeatureProcessor.cpp index 6b9a3fc698..1aa79d1945 100644 --- a/Gems/Atom/Feature/Common/Code/Source/Mesh/MeshFeatureProcessor.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/Mesh/MeshFeatureProcessor.cpp @@ -772,7 +772,7 @@ namespace AZ return; } - const AZStd::array_view>& modelLods = m_model->GetLods(); + const AZStd::span>& modelLods = m_model->GetLods(); if (modelLods.empty()) { return; diff --git a/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshDispatchItem.cpp b/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshDispatchItem.cpp index 5ec26cebde..2ccfdd2c26 100644 --- a/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshDispatchItem.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshDispatchItem.cpp @@ -225,12 +225,12 @@ namespace AZ return m_boneTransforms; } - AZStd::array_view> SkinnedMeshDispatchItem::GetSourceUnskinnedBufferViews() const + AZStd::span> SkinnedMeshDispatchItem::GetSourceUnskinnedBufferViews() const { return m_inputBuffers->GetInputBufferViews(m_lodIndex); } - AZStd::array_view> SkinnedMeshDispatchItem::GetTargetSkinnedBufferViews() const + AZStd::span> SkinnedMeshDispatchItem::GetTargetSkinnedBufferViews() const { return m_actorInstanceBufferViews; } diff --git a/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshDispatchItem.h b/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshDispatchItem.h index 739267d602..54b61f28c4 100644 --- a/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshDispatchItem.h +++ b/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshDispatchItem.h @@ -65,8 +65,8 @@ namespace AZ const RHI::DispatchItem& GetRHIDispatchItem() const; Data::Instance GetBoneTransforms() const; - AZStd::array_view> GetSourceUnskinnedBufferViews() const; - AZStd::array_view> GetTargetSkinnedBufferViews() const; + AZStd::span> GetSourceUnskinnedBufferViews() const; + AZStd::span> GetTargetSkinnedBufferViews() const; size_t GetVertexCount() const; private: // SkinnedMeshShaderOptionNotificationBus::Handler diff --git a/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshInputBuffers.cpp b/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshInputBuffers.cpp index 4146a669fe..e3219be597 100644 --- a/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshInputBuffers.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshInputBuffers.cpp @@ -212,7 +212,7 @@ namespace AZ void SkinnedMeshInputLod::CreateSharedSubMeshBufferViews() { - AZStd::array_view meshes = m_modelLodAsset->GetMeshes(); + AZStd::span meshes = m_modelLodAsset->GetMeshes(); m_sharedSubMeshViews.resize(meshes.size()); // The index and static buffer views will be shared by all instances that use the same SkinnedMeshInputBuffers, so set them here @@ -307,7 +307,7 @@ namespace AZ return m_lods[lodIndex]; } - AZStd::array_view> SkinnedMeshInputBuffers::GetInputBufferViews(size_t lodIndex) const + AZStd::span> SkinnedMeshInputBuffers::GetInputBufferViews(size_t lodIndex) const { return m_lods[lodIndex].m_bufferViews; } diff --git a/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshRenderProxy.cpp b/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshRenderProxy.cpp index 2f8ccc12ed..6f1e636b85 100644 --- a/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshRenderProxy.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshRenderProxy.cpp @@ -145,7 +145,7 @@ namespace AZ } } - AZStd::array_view> SkinnedMeshRenderProxy::GetDispatchItems() const + AZStd::span> SkinnedMeshRenderProxy::GetDispatchItems() const { return m_dispatchItemsByLod; } diff --git a/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshRenderProxy.h b/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshRenderProxy.h index ffad21207e..275c8ea21d 100644 --- a/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshRenderProxy.h +++ b/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshRenderProxy.h @@ -45,7 +45,7 @@ namespace AZ void SetSkinningMatrices(const AZStd::vector& data) override; void SetMorphTargetWeights(uint32_t lodIndex, const AZStd::vector& weights) override; - AZStd::array_view< AZStd::unique_ptr> GetDispatchItems() const; + AZStd::span> GetDispatchItems() const; private: AZ_DISABLE_COPY_MOVE(SkinnedMeshRenderProxy); diff --git a/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshStatsCollector.cpp b/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshStatsCollector.cpp index abfdf4c101..124c697e4a 100644 --- a/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshStatsCollector.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshStatsCollector.cpp @@ -78,7 +78,7 @@ namespace AZ } } - void SkinnedMeshStatsCollector::AddReadOnlyBufferViewsToSceneStats(const AZStd::array_view>& sourceUnskinnedBufferViews) + void SkinnedMeshStatsCollector::AddReadOnlyBufferViewsToSceneStats(const AZStd::span>& sourceUnskinnedBufferViews) { for (const AZ::RHI::Ptr& bufferView : sourceUnskinnedBufferViews) { @@ -94,7 +94,7 @@ namespace AZ } } - void SkinnedMeshStatsCollector::AddWritableBufferViewsToSceneStats(const AZStd::array_view>& targetSkinnedBufferViews) + void SkinnedMeshStatsCollector::AddWritableBufferViewsToSceneStats(const AZStd::span>& targetSkinnedBufferViews) { for (const AZ::RHI::Ptr& bufferView : targetSkinnedBufferViews) { diff --git a/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshStatsCollector.h b/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshStatsCollector.h index f81cf0d5af..ef35a2aa65 100644 --- a/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshStatsCollector.h +++ b/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshStatsCollector.h @@ -33,8 +33,8 @@ namespace AZ void ResetAllStats(); void AddDispatchItemToSceneStats(const AZStd::unique_ptr& dispatchItem); void AddBonesToSceneStats(const Data::Instance& boneTransformBuffer); - void AddReadOnlyBufferViewsToSceneStats(const AZStd::array_view>& sourceUnskinnedBufferViews); - void AddWritableBufferViewsToSceneStats(const AZStd::array_view>& targetSkinnedBufferViews); + void AddReadOnlyBufferViewsToSceneStats(const AZStd::span>& sourceUnskinnedBufferViews); + void AddWritableBufferViewsToSceneStats(const AZStd::span>& targetSkinnedBufferViews); void AddVerticesToSceneStats(size_t vertexCount); SkinnedMeshSceneStats m_sceneStats; diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI.Edit/ShaderCompilerArguments.h b/Gems/Atom/RHI/Code/Include/Atom/RHI.Edit/ShaderCompilerArguments.h index 83a868ab65..012d9288a0 100644 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI.Edit/ShaderCompilerArguments.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI.Edit/ShaderCompilerArguments.h @@ -10,7 +10,7 @@ #include #include #include -#include +#include namespace AZ { diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI.Edit/Utils.h b/Gems/Atom/RHI/Code/Include/Atom/RHI.Edit/Utils.h index d648f05b46..4b1f647102 100644 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI.Edit/Utils.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI.Edit/Utils.h @@ -129,7 +129,7 @@ namespace AZ //! @returns A new string based on @commandLineString but with the matching arguments and their values //! removed from it. AZStd::string RemoveArgumentsFromCommandLineString( - AZStd::array_view listOfArguments, AZStd::string_view commandLineString); + AZStd::span listOfArguments, AZStd::string_view commandLineString); //! @param commandLineString: " --arg1 -arg2 --arg3=foo --arg4=bar " //! @returns "--arg1 -arg2 --arg3=foo --arg4=bar" diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI.Reflect/ConstantsLayout.h b/Gems/Atom/RHI/Code/Include/Atom/RHI.Reflect/ConstantsLayout.h index 653e8e4474..eae84e7970 100644 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI.Reflect/ConstantsLayout.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI.Reflect/ConstantsLayout.h @@ -9,7 +9,7 @@ #include #include -#include +#include #include #include @@ -72,7 +72,7 @@ namespace AZ //! Returns the full lists of shader input added to the layout. Inputs //! maintain their original order with respect to AddShaderInput. - AZStd::array_view GetShaderInputList() const; + AZStd::span GetShaderInputList() const; //! Returns the total size in bytes used by the constants. uint32_t GetDataSize() const; @@ -84,7 +84,7 @@ namespace AZ //! Prints to the console the shader input names specified by input list of indices //! Will ignore any indices outside of the inputs array bounds - void DebugPrintNames(AZStd::array_view constantList) const; + void DebugPrintNames(AZStd::span constantList) const; protected: ConstantsLayout() = default; diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI.Reflect/IndirectBufferLayout.h b/Gems/Atom/RHI/Code/Include/Atom/RHI.Reflect/IndirectBufferLayout.h index fd26d845f7..a645cfc7b3 100644 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI.Reflect/IndirectBufferLayout.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI.Reflect/IndirectBufferLayout.h @@ -12,7 +12,7 @@ #include #include #include -#include +#include namespace AZ { @@ -137,7 +137,7 @@ namespace AZ bool AddIndirectCommand(const IndirectCommandDescriptor& command); /// Returns the list of indirect commands of the layout. Must be called after the layout is finalized. - AZStd::array_view GetCommands() const; + AZStd::span GetCommands() const; //! Returns the position of a command. //! Must be called after the layout is finalized. diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI.Reflect/InputStreamLayout.h b/Gems/Atom/RHI/Code/Include/Atom/RHI.Reflect/InputStreamLayout.h index 879584f224..914709a60f 100644 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI.Reflect/InputStreamLayout.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI.Reflect/InputStreamLayout.h @@ -10,7 +10,7 @@ #include #include #include -#include +#include #include #include @@ -158,10 +158,10 @@ namespace AZ const PrimitiveTopology GetTopology() const; /// Returns the list of stream channels. - AZStd::array_view GetStreamChannels() const; + AZStd::span GetStreamChannels() const; /// Returns the list of stream buffers. - AZStd::array_view GetStreamBuffers() const; + AZStd::span GetStreamBuffers() const; /// Returns the hash computed in Finalize(), which must be called first. HashValue64 GetHash() const; diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI.Reflect/PipelineLayoutDescriptor.h b/Gems/Atom/RHI/Code/Include/Atom/RHI.Reflect/PipelineLayoutDescriptor.h index 216021a316..86bc059c1a 100644 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI.Reflect/PipelineLayoutDescriptor.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI.Reflect/PipelineLayoutDescriptor.h @@ -10,7 +10,7 @@ #include #include -#include +#include #include #include diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI.Reflect/PipelineLibraryData.h b/Gems/Atom/RHI/Code/Include/Atom/RHI.Reflect/PipelineLibraryData.h index c86d38fdeb..38f3cb0c51 100644 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI.Reflect/PipelineLibraryData.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI.Reflect/PipelineLibraryData.h @@ -8,7 +8,7 @@ #pragma once #include -#include +#include #include #include @@ -47,7 +47,7 @@ namespace AZ static ConstPtr Create(AZStd::vector&& data); /// Returns the data payload which describes the platform-specific pipeline library data. - AZStd::array_view GetData() const; + AZStd::span GetData() const; private: PipelineLibraryData(AZStd::vector&& data); diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI.Reflect/RenderAttachmentLayout.h b/Gems/Atom/RHI/Code/Include/Atom/RHI.Reflect/RenderAttachmentLayout.h index 9a3c3dd226..bb3c2156c2 100644 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI.Reflect/RenderAttachmentLayout.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI.Reflect/RenderAttachmentLayout.h @@ -13,7 +13,7 @@ #include #include #include -#include +#include namespace AZ { diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI.Reflect/ShaderResourceGroupLayout.h b/Gems/Atom/RHI/Code/Include/Atom/RHI.Reflect/ShaderResourceGroupLayout.h index 34737019ca..5510fc039f 100644 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI.Reflect/ShaderResourceGroupLayout.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI.Reflect/ShaderResourceGroupLayout.h @@ -10,7 +10,7 @@ #include #include #include -#include +#include #include #include #include @@ -116,7 +116,7 @@ namespace AZ // The following methods are only permitted on a finalized layout. /// Returns the full list of static samplers descriptors declared on the layout. - AZStd::array_view GetStaticSamplers() const; + AZStd::span GetStaticSamplers() const; /** * Resolves an shader input name to an index for each type of shader input. To maximize performance, @@ -148,13 +148,13 @@ namespace AZ * maintain their original order with respect to AddShaderInput. Each type * of shader input has its own separate list. */ - AZStd::array_view GetShaderInputListForBuffers() const; - AZStd::array_view GetShaderInputListForImages() const; - AZStd::array_view GetShaderInputListForSamplers() const; - AZStd::array_view GetShaderInputListForConstants() const; + AZStd::span GetShaderInputListForBuffers() const; + AZStd::span GetShaderInputListForImages() const; + AZStd::span GetShaderInputListForSamplers() const; + AZStd::span GetShaderInputListForConstants() const; - AZStd::array_view GetShaderInputListForBufferUnboundedArrays() const; - AZStd::array_view GetShaderInputListForImageUnboundedArrays() const; + AZStd::span GetShaderInputListForBufferUnboundedArrays() const; + AZStd::span GetShaderInputListForImageUnboundedArrays() const; /** * Each shader input may contain multiple shader resources. The layout computes diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI/CommandListStates.h b/Gems/Atom/RHI/Code/Include/Atom/RHI/CommandListStates.h index 34a25eb8b6..1937631f13 100644 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI/CommandListStates.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI/CommandListStates.h @@ -20,7 +20,7 @@ namespace AZ struct CommandListRenderTargetsState { using StateList = AZStd::fixed_vector; - void Set(AZStd::array_view newElements) + void Set(AZStd::span newElements) { m_states = StateList(newElements.begin(), newElements.end()); m_isDirty = true; diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI/ConstantsData.h b/Gems/Atom/RHI/Code/Include/Atom/RHI/ConstantsData.h index fd38e4c08d..04aa97a189 100644 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI/ConstantsData.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI/ConstantsData.h @@ -20,11 +20,11 @@ namespace AZ { namespace RHI { - //! The intent of this class is to provide fast and thin access to the underlying constant - //! data (inline or from an SRG), with basic validation to protect the user. As a secondary objective, it provides type-specific convenience - //! operations as long as they don't violate the primary "fast" and "thin" objectives. To clarify, thin means - //! we don't make assumptions about the data or how the user wants to operate on the data, and the convenience - //! operations boil down to thin wrappers for single calls to SetConstantRaw and GetConstantRaw. So these + //! The intent of this class is to provide fast and thin access to the underlying constant + //! data (inline or from an SRG), with basic validation to protect the user. As a secondary objective, it provides type-specific convenience + //! operations as long as they don't violate the primary "fast" and "thin" objectives. To clarify, thin means + //! we don't make assumptions about the data or how the user wants to operate on the data, and the convenience + //! operations boil down to thin wrappers for single calls to SetConstantRaw and GetConstantRaw. So these //! convenience functions are provided in situations that are "low-hanging-fruit". class ConstantsData { @@ -53,7 +53,7 @@ namespace AZ //! Assigns an array of type T to the constant shader input. template - bool SetConstantArray(ShaderInputConstantIndex inputIndex, AZStd::array_view values); + bool SetConstantArray(ShaderInputConstantIndex inputIndex, AZStd::span values); //! Assigns constant data as a whole. bool SetConstantData(const void* bytes, size_t byteCount); @@ -64,7 +64,7 @@ namespace AZ //! of elements in the returned array is the number of evenly divisible elements. //! If the strides do not match, an empty array is returned. template - AZStd::array_view GetConstantArray(ShaderInputConstantIndex inputIndex) const; + AZStd::span GetConstantArray(ShaderInputConstantIndex inputIndex) const; //! Returns the constant data as type 'T' returned by value. The size of the constant region //! must match the size of T exactly. Otherwise, an empty instance is returned. @@ -77,11 +77,11 @@ namespace AZ template T GetConstant(ShaderInputConstantIndex inputIndex, uint32_t arrayIndex) const; - //! Returns constant data for the given shader input index as an array of bytes. - AZStd::array_view GetConstantRaw(ShaderInputConstantIndex inputIndex) const; + //! Returns constant data for the given shader input index as a span of bytes. + AZStd::span GetConstantRaw(ShaderInputConstantIndex inputIndex) const; //! Returns the opaque constant data populated by calls to SetConstant and SetConstantData. - AZStd::array_view GetConstantData() const; + AZStd::span GetConstantData() const; //! Returns the constants layout. const ConstantsLayout* GetLayout() const; @@ -123,7 +123,7 @@ namespace AZ template bool ConstantsData::SetConstant(ShaderInputConstantIndex inputIndex, const T& value) { - AZStd::array_view valueArray(&value, 1); + AZStd::span valueArray(&value, 1); return SetConstantArray(inputIndex, valueArray); } @@ -152,7 +152,7 @@ namespace AZ bool ConstantsData::SetConstant(ShaderInputConstantIndex inputIndex, const Color& value); template <> - bool ConstantsData::SetConstantArray(ShaderInputConstantIndex inputIndex, AZStd::array_view values); + bool ConstantsData::SetConstantArray(ShaderInputConstantIndex inputIndex, AZStd::span values); template <> bool ConstantsData::GetConstant(ShaderInputConstantIndex inputIndex) const; @@ -213,7 +213,7 @@ namespace AZ } template - bool ConstantsData::SetConstantArray(ShaderInputConstantIndex inputIndex, AZStd::array_view values) + bool ConstantsData::SetConstantArray(ShaderInputConstantIndex inputIndex, AZStd::span values) { const size_t sizeInBytes = values.size() * sizeof(T); if (ValidateConstantAccess(inputIndex, ValidateConstantAccessExpect::Complete, 0, sizeInBytes)) @@ -224,15 +224,15 @@ namespace AZ } template - AZStd::array_view ConstantsData::GetConstantArray(ShaderInputConstantIndex inputIndex) const + AZStd::span ConstantsData::GetConstantArray(ShaderInputConstantIndex inputIndex) const { - AZStd::array_view constantBytes = GetConstantRaw(inputIndex); + AZStd::span constantBytes = GetConstantRaw(inputIndex); const size_t elementSize = sizeof(T); const size_t elementCount = DivideByMultiple(constantBytes.size(), elementSize); const size_t sizeInBytes = elementCount * elementSize; if (ValidateConstantAccess(inputIndex, ValidateConstantAccessExpect::Complete, 0, sizeInBytes)) { - return AZStd::array_view(reinterpret_cast(constantBytes.data()), elementCount); + return AZStd::span(reinterpret_cast(constantBytes.data()), elementCount); } return {}; } @@ -240,7 +240,7 @@ namespace AZ template T ConstantsData::GetConstant(ShaderInputConstantIndex inputIndex) const { - AZStd::array_view constantBytes = GetConstantRaw(inputIndex); + AZStd::span constantBytes = GetConstantRaw(inputIndex); const size_t sizeInBytes = sizeof(T); if (ValidateConstantAccess(inputIndex, ValidateConstantAccessExpect::Complete, 0, sizeInBytes)) { @@ -252,7 +252,7 @@ namespace AZ template T ConstantsData::GetConstant(ShaderInputConstantIndex inputIndex, uint32_t arrayIndex) const { - AZStd::array_view constantBytes = GetConstantRaw(inputIndex); + AZStd::span constantBytes = GetConstantRaw(inputIndex); const size_t elementSize = sizeof(T); const size_t elementOffset = arrayIndex * elementSize; if (ValidateConstantAccess(inputIndex, ValidateConstantAccessExpect::ArrayElement, elementOffset, elementSize)) diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI/DrawList.h b/Gems/Atom/RHI/Code/Include/Atom/RHI/DrawList.h index 72bfed3300..dfb458217f 100644 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI/DrawList.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI/DrawList.h @@ -11,7 +11,7 @@ #include #include -#include +#include #include @@ -36,7 +36,7 @@ namespace AZ using DrawListMask = AZStd::bitset; using DrawList = AZStd::vector; - using DrawListView = AZStd::array_view; + using DrawListView = AZStd::span; /// Contains a table of draw lists, indexed by the tag. using DrawListsByTag = AZStd::array; diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI/DrawPacketBuilder.h b/Gems/Atom/RHI/Code/Include/Atom/RHI/DrawPacketBuilder.h index 30e013d486..fdaa2b594a 100644 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI/DrawPacketBuilder.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI/DrawPacketBuilder.h @@ -32,7 +32,7 @@ namespace AZ uint8_t m_stencilRef = 0; //! The array of stream buffers to bind for this draw item. - AZStd::array_view m_streamBufferViews; + AZStd::span m_streamBufferViews; //! Shader resource group unique for this draw request const ShaderResourceGroup* m_uniqueShaderResourceGroup = nullptr; @@ -56,13 +56,13 @@ namespace AZ void SetIndexBufferView(const IndexBufferView& indexBufferView); - void SetRootConstants(AZStd::array_view rootConstants); + void SetRootConstants(AZStd::span rootConstants); - void SetScissors(AZStd::array_view scissors); + void SetScissors(AZStd::span scissors); void SetScissor(const Scissor& scissor); - void SetViewports(AZStd::array_view viewports); + void SetViewports(AZStd::span viewports); void SetViewport(const Viewport& viewport); @@ -85,7 +85,7 @@ namespace AZ IndexBufferView m_indexBufferView; AZStd::fixed_vector m_drawRequests; AZStd::fixed_vector m_shaderResourceGroups; - AZStd::array_view m_rootConstants; + AZStd::span m_rootConstants; AZStd::fixed_vector m_scissors; AZStd::fixed_vector m_viewports; }; diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI/FrameGraph.h b/Gems/Atom/RHI/Code/Include/Atom/RHI/FrameGraph.h index c361750bc6..ac7a224594 100644 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI/FrameGraph.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI/FrameGraph.h @@ -7,7 +7,7 @@ */ #pragma once -#include +#include #include #include @@ -105,11 +105,11 @@ namespace AZ // See RHI::FrameGraphInterface for detailed comments ResultCode UseAttachment(const BufferScopeAttachmentDescriptor& descriptor, ScopeAttachmentAccess access, ScopeAttachmentUsage usage); ResultCode UseAttachment(const ImageScopeAttachmentDescriptor& descriptor, ScopeAttachmentAccess access, ScopeAttachmentUsage usage); - ResultCode UseAttachments(AZStd::array_view descriptors, ScopeAttachmentAccess access, ScopeAttachmentUsage usage); + ResultCode UseAttachments(AZStd::span descriptors, ScopeAttachmentAccess access, ScopeAttachmentUsage usage); ResultCode UseResolveAttachment(const ResolveScopeAttachmentDescriptor& descriptor); - ResultCode UseColorAttachments(AZStd::array_view descriptors); + ResultCode UseColorAttachments(AZStd::span descriptors); ResultCode UseDepthStencilAttachment(const ImageScopeAttachmentDescriptor& descriptor, ScopeAttachmentAccess access); - ResultCode UseSubpassInputAttachments(AZStd::array_view descriptors); + ResultCode UseSubpassInputAttachments(AZStd::span descriptors); ResultCode UseShaderAttachment(const BufferScopeAttachmentDescriptor& descriptor, ScopeAttachmentAccess access); ResultCode UseShaderAttachment(const ImageScopeAttachmentDescriptor& descriptor, ScopeAttachmentAccess access); ResultCode UseCopyAttachment(const BufferScopeAttachmentDescriptor& descriptor, ScopeAttachmentAccess access); diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI/FrameGraphExecuter.h b/Gems/Atom/RHI/Code/Include/Atom/RHI/FrameGraphExecuter.h index fa05428967..72fe29d0d5 100644 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI/FrameGraphExecuter.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI/FrameGraphExecuter.h @@ -124,7 +124,7 @@ namespace AZ FrameGraphExecuteGroupType* AddGroup(); //! Returns a list of the registered execute groups. - AZStd::array_view> GetGroups() const; + AZStd::span> GetGroups() const; private: ////////////////////////////////////////////////////////////////////////// diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI/FrameGraphInterface.h b/Gems/Atom/RHI/Code/Include/Atom/RHI/FrameGraphInterface.h index a9bf2130cd..ed14783c56 100644 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI/FrameGraphInterface.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI/FrameGraphInterface.h @@ -18,7 +18,7 @@ #include #include -#include +#include namespace AZ { @@ -79,7 +79,7 @@ namespace AZ //! Declares an array of image attachments for use on the current scope. ResultCode UseAttachments( - AZStd::array_view descriptors, + AZStd::span descriptors, ScopeAttachmentAccess access, ScopeAttachmentUsage usage) { @@ -87,7 +87,7 @@ namespace AZ } //! Declares an array of color attachments for use on the current scope. - ResultCode UseColorAttachments(AZStd::array_view descriptors) + ResultCode UseColorAttachments(AZStd::span descriptors) { return m_frameGraph.UseColorAttachments(descriptors); } @@ -100,7 +100,7 @@ namespace AZ //! Declares an array of subpass input attachments for use on the current scope. //! See UseSubpassInputAttachment for a definition about a SubpassInput. - ResultCode UseSubpassInputAttachments(AZStd::array_view descriptors) + ResultCode UseSubpassInputAttachments(AZStd::span descriptors) { return m_frameGraph.UseSubpassInputAttachments(descriptors); } diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI/PipelineLibrary.h b/Gems/Atom/RHI/Code/Include/Atom/RHI/PipelineLibrary.h index 3a49b121cd..687038f52e 100644 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI/PipelineLibrary.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI/PipelineLibrary.h @@ -19,7 +19,7 @@ namespace AZ /// A handle typed to the pipeline library. Used by the PipelineStateCache to abstract access. using PipelineLibraryHandle = Handle; - + //! PipelineState initialization is an expensive operation on certain platforms. If multiple pipeline states //! are created with little variation between them, the contents are still duplicated. This class is an allocation //! context for pipeline states, provided at PipelineState::Init, which will perform de-duplication of @@ -58,7 +58,7 @@ namespace AZ //! libraries and merge them into a single unified library. The serialized data can then be //! extracted from the unified library. An error code is returned on failure and the behavior //! is as if the method was never called. - ResultCode MergeInto(AZStd::array_view librariesToMerge); + ResultCode MergeInto(AZStd::span librariesToMerge); //! Serializes the platform-specific data and returns it as a new PipelineLibraryData instance. //! The data is opaque to the user and can only be used to re-initialize the library. Use @@ -85,7 +85,7 @@ namespace AZ virtual void ShutdownInternal() = 0; /// Called when libraries are being merged into this one. - virtual ResultCode MergeIntoInternal(AZStd::array_view libraries) = 0; + virtual ResultCode MergeIntoInternal(AZStd::span libraries) = 0; /// Called when the library is serializing out platform-specific data. virtual ConstPtr GetSerializedDataInternal() const = 0; diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI/ShaderResourceGroupData.h b/Gems/Atom/RHI/Code/Include/Atom/RHI/ShaderResourceGroupData.h index ef4e734c01..8904924c41 100644 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI/ShaderResourceGroupData.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI/ShaderResourceGroupData.h @@ -24,16 +24,16 @@ namespace AZ //! and shader constants. It utilizes basic reflection information from the shader resource group layout //! to construct the table in the correct format for the platform-specific compile phase. The user //! is expected to create instances of this class, fill data, and then push it to an SRG instance. - //! + //! //! The shader resource group (SRG) includes a set of built-in SRG constants in a single internally-managed //! constant buffer. This is separate from any custom constant buffers that some SRG layouts may include //! as shader resources. SRG constants can be conveniently accessed through a variety of SetConstant. - //! + //! //! This data structure holds strong references to the resource views bound onto it. - //! + //! //! NOTE [Performance Warning]: This data structure allocates memory. If compiling several SRG's in a batch, //! prefer to share the data between them (i.e. within a single job). - //! + //! //! NOTE [SRG Constants]: The ConstantsData class is used for efficiently setting/getting the constants values of the SRG. class ShaderResourceGroupData { @@ -65,25 +65,25 @@ namespace AZ bool SetImageView(ShaderInputImageIndex inputIndex, const ImageView* imageView, uint32_t arrayIndex); //! Sets an array of image view for the given shader input index. - bool SetImageViewArray(ShaderInputImageIndex inputIndex, AZStd::array_view imageViews, uint32_t arrayIndex = 0); + bool SetImageViewArray(ShaderInputImageIndex inputIndex, AZStd::span imageViews, uint32_t arrayIndex = 0); //! Sets an unbounded array of image view for the given shader input index. - bool SetImageViewUnboundedArray(ShaderInputImageUnboundedArrayIndex inputIndex, AZStd::array_view imageViews); + bool SetImageViewUnboundedArray(ShaderInputImageUnboundedArrayIndex inputIndex, AZStd::span imageViews); //! Sets one buffer view for the given shader input index. bool SetBufferView(ShaderInputBufferIndex inputIndex, const BufferView* bufferView, uint32_t arrayIndex = 0); //! Sets an array of image view for the given shader input index. - bool SetBufferViewArray(ShaderInputBufferIndex inputIndex, AZStd::array_view bufferViews, uint32_t arrayIndex = 0); + bool SetBufferViewArray(ShaderInputBufferIndex inputIndex, AZStd::span bufferViews, uint32_t arrayIndex = 0); //! Sets an unbounded array of buffer view for the given shader input index. - bool SetBufferViewUnboundedArray(ShaderInputBufferUnboundedArrayIndex inputIndex, AZStd::array_view bufferViews); + bool SetBufferViewUnboundedArray(ShaderInputBufferUnboundedArrayIndex inputIndex, AZStd::span bufferViews); //! Sets one sampler for the given shader input index, using the bindingIndex as the key. bool SetSampler(ShaderInputSamplerIndex inputIndex, const SamplerState& sampler, uint32_t arrayIndex = 0); //! Sets an array of samplers for the given shader input index. - bool SetSamplerArray(ShaderInputSamplerIndex inputIndex, AZStd::array_view samplers, uint32_t arrayIndex = 0); + bool SetSamplerArray(ShaderInputSamplerIndex inputIndex, AZStd::span samplers, uint32_t arrayIndex = 0); //! Assigns constant data for the given constant shader input index. bool SetConstantRaw(ShaderInputConstantIndex inputIndex, const void* bytes, uint32_t byteCount); @@ -96,17 +96,17 @@ namespace AZ //! Assigns a specified number of rows from a Matrix template bool SetConstantMatrixRows(ShaderInputConstantIndex inputIndex, const T& value, uint32_t rowCount); - + //! Assigns a value of type T to the constant shader input, at an array offset. template bool SetConstant(ShaderInputConstantIndex inputIndex, const T& value, uint32_t arrayIndex); //! Assigns an array of type T to the constant shader input. template - bool SetConstantArray(ShaderInputConstantIndex inputIndex, AZStd::array_view values); + bool SetConstantArray(ShaderInputConstantIndex inputIndex, AZStd::span values); //! Assigns constant data as a whole. - //! + //! //! CAUTION! //! Different platforms might follow different packing rules for the internally-managed SRG constant buffer. //! To set manually a constant buffer as a whole please use Constant Buffers in AZSL, @@ -118,33 +118,33 @@ namespace AZ //! Returns a single image view associated with the image shader input index and array offset. const ConstPtr& GetImageView(ShaderInputImageIndex inputIndex, uint32_t arrayIndex) const; - //! Returns an array of image views associated with the given image shader input index. - AZStd::array_view> GetImageViewArray(ShaderInputImageIndex inputIndex) const; + //! Returns a span of image views associated with the given image shader input index. + AZStd::span> GetImageViewArray(ShaderInputImageIndex inputIndex) const; - //! Returns an unbounded array of image views associated with the given buffer shader input index. - AZStd::array_view> GetImageViewUnboundedArray(ShaderInputImageUnboundedArrayIndex inputIndex) const; + //! Returns an unbounded span of image views associated with the given buffer shader input index. + AZStd::span> GetImageViewUnboundedArray(ShaderInputImageUnboundedArrayIndex inputIndex) const; //! Returns a single buffer view associated with the buffer shader input index and array offset. const ConstPtr& GetBufferView(ShaderInputBufferIndex inputIndex, uint32_t arrayIndex) const; - //! Returns an array of buffer views associated with the given buffer shader input index. - AZStd::array_view> GetBufferViewArray(ShaderInputBufferIndex inputIndex) const; + //! Returns a span of buffer views associated with the given buffer shader input index. + AZStd::span> GetBufferViewArray(ShaderInputBufferIndex inputIndex) const; - //! Returns an unbounded array of buffer views associated with the given buffer shader input index. - AZStd::array_view> GetBufferViewUnboundedArray(ShaderInputBufferUnboundedArrayIndex inputIndex) const; + //! Returns an unbounded span of buffer views associated with the given buffer shader input index. + AZStd::span> GetBufferViewUnboundedArray(ShaderInputBufferUnboundedArrayIndex inputIndex) const; //! Returns a single sampler associated with the sampler shader input index and array offset. const SamplerState& GetSampler(ShaderInputSamplerIndex inputIndex, uint32_t arrayIndex) const; - //! Returns an array of samplers associated with the sampler shader input index. - AZStd::array_view GetSamplerArray(ShaderInputSamplerIndex inputIndex) const; + //! Returns a span of samplers associated with the sampler shader input index. + AZStd::span GetSamplerArray(ShaderInputSamplerIndex inputIndex) const; //! Returns constant data for the given shader input index as a template type. //! The stride of T must match the size of the constant input region. The number - //! of elements in the returned array is the number of evenly divisible elements. - //! If the strides do not match, an empty array is returned. + //! of elements in the returned span is the number of evenly divisible elements. + //! If the strides do not match, an empty span is returned. template - AZStd::array_view GetConstantArray(ShaderInputConstantIndex inputIndex) const; + AZStd::span GetConstantArray(ShaderInputConstantIndex inputIndex) const; //! Returns the constant data as type 'T' returned by value. The size of the constant region //! must match the size of T exactly. Otherwise, an empty instance is returned. @@ -157,25 +157,25 @@ namespace AZ template T GetConstant(ShaderInputConstantIndex inputIndex, uint32_t arrayIndex) const; - //! Returns constant data for the given shader input index as an array of bytes. - AZStd::array_view GetConstantRaw(ShaderInputConstantIndex inputIndex) const; + //! Returns constant data for the given shader input index as a span of bytes. + AZStd::span GetConstantRaw(ShaderInputConstantIndex inputIndex) const; //! Returns a {Buffer, Image, Sampler} shader resource group. Each resource type has its own separate group. //! - The size of this group matches the size provided by ShaderResourceGroupLayout::GetGroupSizeFor{Buffer, Image, Sampler}. - //! - Use ShaderResourceGroupLayout::GetGroupInterval to retrieve a [min, max) interval into the array. - AZStd::array_view> GetImageGroup() const; - AZStd::array_view> GetBufferGroup() const; - AZStd::array_view GetSamplerGroup() const; - + //! - Use ShaderResourceGroupLayout::GetGroupInterval to retrieve a [min, max) interval into the span. + AZStd::span> GetImageGroup() const; + AZStd::span> GetBufferGroup() const; + AZStd::span GetSamplerGroup() const; + //! Reset image and buffer views setup for this ShaderResourceGroupData //! So it won't hold references for any RHI resources void ResetViews(); //! Returns the opaque constant data populated by calls to SetConstant and SetConstantData. - //! + //! //! CAUTION! //! Different platforms might follow different packing rules for the internally-managed SRG constant buffer. - AZStd::array_view GetConstantData() const; + AZStd::span GetConstantData() const; //! Returns the underlying ConstantsData struct const ConstantsData& GetConstantsData() const; @@ -213,7 +213,7 @@ namespace AZ //! times in order to ensure all SRG buffers are updated. void DisableCompilationForAllResourceTypes(); - //! Returns true if any of the resource type has been enabled for compilation. + //! Returns true if any of the resource type has been enabled for compilation. bool IsAnyResourceTypeUpdated() const; //! Enable compilation for a resourceType specified by resourceType/resourceTypeMask @@ -265,7 +265,7 @@ namespace AZ EnableResourceTypeCompilation(ResourceTypeMask::ConstantDataMask, ResourceType::ConstantData); return m_constantsData.SetConstant(inputIndex, value, arrayIndex); } - + template bool ShaderResourceGroupData::SetConstantMatrixRows(ShaderInputConstantIndex inputIndex, const T& value, uint32_t rowCount) { @@ -274,7 +274,7 @@ namespace AZ } template - bool ShaderResourceGroupData::SetConstantArray(ShaderInputConstantIndex inputIndex, AZStd::array_view values) + bool ShaderResourceGroupData::SetConstantArray(ShaderInputConstantIndex inputIndex, AZStd::span values) { if (!values.empty()) { @@ -284,7 +284,7 @@ namespace AZ } template - AZStd::array_view ShaderResourceGroupData::GetConstantArray(ShaderInputConstantIndex inputIndex) const + AZStd::span ShaderResourceGroupData::GetConstantArray(ShaderInputConstantIndex inputIndex) const { return m_constantsData.GetConstantArray(inputIndex); } diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI/StreamBufferView.h b/Gems/Atom/RHI/Code/Include/Atom/RHI/StreamBufferView.h index 4efc7da002..f1138804ab 100644 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI/StreamBufferView.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI/StreamBufferView.h @@ -8,7 +8,7 @@ #pragma once #include -#include +#include #include namespace AZ @@ -65,6 +65,6 @@ namespace AZ }; /// Utility function for checking that the set of StreamBufferViews aligns with the InputStreamLayout - bool ValidateStreamBufferViews(const InputStreamLayout& inputStreamLayout, AZStd::array_view streamBufferViews); + bool ValidateStreamBufferViews(const InputStreamLayout& inputStreamLayout, AZStd::span streamBufferViews); } } diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI/StreamingImagePool.h b/Gems/Atom/RHI/Code/Include/Atom/RHI/StreamingImagePool.h index ee139b6dc2..a719ce5a7a 100644 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI/StreamingImagePool.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI/StreamingImagePool.h @@ -11,7 +11,7 @@ #include #include -#include +#include namespace AZ { @@ -34,7 +34,7 @@ namespace AZ struct StreamingImageMipSlice { /// An array of subresource datas. The size of this array must match the array size of the image. - AZStd::array_view m_subresources; + AZStd::span m_subresources; /// The layout of each image in the array. ImageSubresourceLayout m_subresourceLayout; @@ -52,7 +52,7 @@ namespace AZ StreamingImageInitRequest( Image& image, const ImageDescriptor& descriptor, - AZStd::array_view tailMipSlices); + AZStd::span tailMipSlices); /// The image to initialize. Image* m_image = nullptr; @@ -65,7 +65,7 @@ namespace AZ * This should only include the baseline set of mips necessary to render the image at * its lowest resolution. The uploads is performed synchronously. */ - AZStd::array_view m_tailMipSlices; + AZStd::span m_tailMipSlices; }; /** @@ -83,7 +83,7 @@ namespace AZ * remain valid for the duration of the upload (until m_completeCallback * is triggered). */ - AZStd::array_view m_mipSlices; + AZStd::span m_mipSlices; /// Whether the function need to wait until the upload is finished. bool m_waitForUpload = false; diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI/TransientAttachmentPool.h b/Gems/Atom/RHI/Code/Include/Atom/RHI/TransientAttachmentPool.h index 334568154c..49317250f4 100644 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI/TransientAttachmentPool.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI/TransientAttachmentPool.h @@ -123,7 +123,7 @@ namespace AZ protected: // Adds the stats of a list of heaps into the Pool's TransientAttachmentStatistics. - void CollectHeapStats(AliasedResourceTypeFlags typeMask, AZStd::array_view heapStats); + void CollectHeapStats(AliasedResourceTypeFlags typeMask, AZStd::span heapStats); Scope* m_currentScope = nullptr; RHI::TransientAttachmentStatistics m_statistics; diff --git a/Gems/Atom/RHI/Code/Source/RHI.Edit/Utils.cpp b/Gems/Atom/RHI/Code/Source/RHI.Edit/Utils.cpp index 6b5b9cc3a5..b3a6b01ebb 100644 --- a/Gems/Atom/RHI/Code/Source/RHI.Edit/Utils.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI.Edit/Utils.cpp @@ -496,7 +496,7 @@ namespace AZ } AZStd::string RemoveArgumentsFromCommandLineString( - AZStd::array_view listOfArgumentsToRemove, AZStd::string_view commandLineString) + AZStd::span listOfArgumentsToRemove, AZStd::string_view commandLineString) { AZStd::string customizedArguments = commandLineString; for (const AZStd::string& azslcArgumentName : listOfArgumentsToRemove) diff --git a/Gems/Atom/RHI/Code/Source/RHI.Reflect/ConstantsLayout.cpp b/Gems/Atom/RHI/Code/Source/RHI.Reflect/ConstantsLayout.cpp index 8b9d6ae668..cdbd74ca17 100644 --- a/Gems/Atom/RHI/Code/Source/RHI.Reflect/ConstantsLayout.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI.Reflect/ConstantsLayout.cpp @@ -106,7 +106,7 @@ namespace AZ return m_inputs[inputIndex.GetIndex()]; } - AZStd::array_view ConstantsLayout::GetShaderInputList() const + AZStd::span ConstantsLayout::GetShaderInputList() const { return m_inputs; } @@ -145,7 +145,7 @@ namespace AZ return true; } - void ConstantsLayout::DebugPrintNames(AZStd::array_view constantList) const + void ConstantsLayout::DebugPrintNames(AZStd::span constantList) const { AZStd::string output; for (const ShaderInputConstantIndex& constantIdx : constantList) diff --git a/Gems/Atom/RHI/Code/Source/RHI.Reflect/IndirectBufferLayout.cpp b/Gems/Atom/RHI/Code/Source/RHI.Reflect/IndirectBufferLayout.cpp index 4eb5ca0abb..467d9f5cb1 100644 --- a/Gems/Atom/RHI/Code/Source/RHI.Reflect/IndirectBufferLayout.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI.Reflect/IndirectBufferLayout.cpp @@ -137,11 +137,11 @@ namespace AZ return true; } - AZStd::array_view IndirectBufferLayout::GetCommands() const + AZStd::span IndirectBufferLayout::GetCommands() const { if (!ValidateFinalizeState(ValidateFinalizeStateExpect::Finalized)) { - return AZStd::array_view(); + return AZStd::span(); } return m_commands; } diff --git a/Gems/Atom/RHI/Code/Source/RHI.Reflect/InputStreamLayout.cpp b/Gems/Atom/RHI/Code/Source/RHI.Reflect/InputStreamLayout.cpp index 3b548446b9..1ddb41ac8e 100644 --- a/Gems/Atom/RHI/Code/Source/RHI.Reflect/InputStreamLayout.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI.Reflect/InputStreamLayout.cpp @@ -159,12 +159,12 @@ namespace AZ return m_topology; } - AZStd::array_view InputStreamLayout::GetStreamChannels() const + AZStd::span InputStreamLayout::GetStreamChannels() const { return m_streamChannels; } - AZStd::array_view InputStreamLayout::GetStreamBuffers() const + AZStd::span InputStreamLayout::GetStreamBuffers() const { return m_streamBuffers; } diff --git a/Gems/Atom/RHI/Code/Source/RHI.Reflect/PipelineLibraryData.cpp b/Gems/Atom/RHI/Code/Source/RHI.Reflect/PipelineLibraryData.cpp index 1efe5d895a..1f0458032f 100644 --- a/Gems/Atom/RHI/Code/Source/RHI.Reflect/PipelineLibraryData.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI.Reflect/PipelineLibraryData.cpp @@ -31,7 +31,7 @@ namespace AZ : m_data{AZStd::move(data)} {} - AZStd::array_view PipelineLibraryData::GetData() const + AZStd::span PipelineLibraryData::GetData() const { return m_data; } diff --git a/Gems/Atom/RHI/Code/Source/RHI.Reflect/ShaderResourceGroupLayout.cpp b/Gems/Atom/RHI/Code/Source/RHI.Reflect/ShaderResourceGroupLayout.cpp index 6028593017..357d6da51a 100644 --- a/Gems/Atom/RHI/Code/Source/RHI.Reflect/ShaderResourceGroupLayout.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI.Reflect/ShaderResourceGroupLayout.cpp @@ -432,7 +432,7 @@ namespace AZ m_bindingSlot = Handle(bindingSlot); } - AZStd::array_view ShaderResourceGroupLayout::GetStaticSamplers() const + AZStd::span ShaderResourceGroupLayout::GetStaticSamplers() const { return m_staticSamplers; } @@ -497,32 +497,32 @@ namespace AZ return m_constantsDataLayout->GetShaderInput(index); } - AZStd::array_view ShaderResourceGroupLayout::GetShaderInputListForBuffers() const + AZStd::span ShaderResourceGroupLayout::GetShaderInputListForBuffers() const { return m_inputsForBuffers; } - AZStd::array_view ShaderResourceGroupLayout::GetShaderInputListForImages() const + AZStd::span ShaderResourceGroupLayout::GetShaderInputListForImages() const { return m_inputsForImages; } - AZStd::array_view ShaderResourceGroupLayout::GetShaderInputListForSamplers() const + AZStd::span ShaderResourceGroupLayout::GetShaderInputListForSamplers() const { return m_inputsForSamplers; } - AZStd::array_view ShaderResourceGroupLayout::GetShaderInputListForConstants() const + AZStd::span ShaderResourceGroupLayout::GetShaderInputListForConstants() const { return m_constantsDataLayout->GetShaderInputList(); } - AZStd::array_view ShaderResourceGroupLayout::GetShaderInputListForBufferUnboundedArrays() const + AZStd::span ShaderResourceGroupLayout::GetShaderInputListForBufferUnboundedArrays() const { return m_inputsForBufferUnboundedArrays; } - AZStd::array_view ShaderResourceGroupLayout::GetShaderInputListForImageUnboundedArrays() const + AZStd::span ShaderResourceGroupLayout::GetShaderInputListForImageUnboundedArrays() const { return m_inputsForImageUnboundedArrays; } diff --git a/Gems/Atom/RHI/Code/Source/RHI/ConstantsData.cpp b/Gems/Atom/RHI/Code/Source/RHI/ConstantsData.cpp index a86f278ee2..bff7c7e626 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/ConstantsData.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/ConstantsData.cpp @@ -144,7 +144,7 @@ namespace AZ } template <> - bool ConstantsData::SetConstantArray(ShaderInputConstantIndex inputIndex, AZStd::array_view values) + bool ConstantsData::SetConstantArray(ShaderInputConstantIndex inputIndex, AZStd::span values) { // The shader packs type bool as 4 bytes const size_t elementSize = 4; @@ -310,7 +310,7 @@ namespace AZ template <> bool ConstantsData::GetConstant(ShaderInputConstantIndex inputIndex) const { - AZStd::array_view constantBytes = GetConstantRaw(inputIndex); + AZStd::span constantBytes = GetConstantRaw(inputIndex); // The shader packs bool data as 4 bytes const size_t sizeInBytes = 4; if (ValidateConstantAccess(inputIndex, ValidateConstantAccessExpect::Complete, 0, sizeInBytes)) @@ -328,7 +328,7 @@ namespace AZ const size_t sizeInBytes = sizeof(float) * 11; if (ValidateConstantAccess(inputIndex, ValidateConstantAccessExpect::Complete, 0, sizeInBytes)) { - const AZStd::array_view constantBytes = GetConstantRaw(inputIndex); + const AZStd::span constantBytes = GetConstantRaw(inputIndex); // As per shader packing rules the Matrix3x3 is stored as 11 floats (2 are padding). float localData[12]; @@ -348,7 +348,7 @@ namespace AZ const uint32_t sizeInBytes = sizeof(Matrix3x4); if (ValidateConstantAccess(inputIndex, ValidateConstantAccessExpect::Complete, 0, sizeInBytes)) { - const AZStd::array_view constantBytes = GetConstantRaw(inputIndex); + const AZStd::span constantBytes = GetConstantRaw(inputIndex); const Matrix3x4& resultMatrix = Matrix3x4::CreateFromRowMajorFloat12(reinterpret_cast(constantBytes.data())); return resultMatrix; } @@ -361,7 +361,7 @@ namespace AZ const size_t sizeInBytes = sizeof(float) * 16; if (ValidateConstantAccess(inputIndex, ValidateConstantAccessExpect::Complete, 0, sizeInBytes)) { - const AZStd::array_view constantBytes = GetConstantRaw(inputIndex); + const AZStd::span constantBytes = GetConstantRaw(inputIndex); const Matrix4x4& resultMatrix = Matrix4x4::CreateFromRowMajorFloat16(reinterpret_cast(constantBytes.data())); return resultMatrix; } @@ -374,7 +374,7 @@ namespace AZ constexpr size_t vector2Size = 8; if (ValidateConstantAccess(inputIndex, ValidateConstantAccessExpect::Complete, 0, aznumeric_caster(vector2Size))) { - AZStd::array_view constantBytes = GetConstantRaw(inputIndex); + AZStd::span constantBytes = GetConstantRaw(inputIndex); return Vector2::CreateFromFloat2(reinterpret_cast(constantBytes.data())); } return Vector2(); @@ -387,7 +387,7 @@ namespace AZ constexpr size_t vector3Size = sizeof(float) * 3; if (ValidateConstantAccess(inputIndex, ValidateConstantAccessExpect::Complete, 0, vector3Size)) { - AZStd::array_view constantBytes = GetConstantRaw(inputIndex); + AZStd::span constantBytes = GetConstantRaw(inputIndex); return Vector3::CreateFromFloat3(reinterpret_cast(constantBytes.data())); } return Vector3(); @@ -399,7 +399,7 @@ namespace AZ constexpr size_t vector4Size = 16; if (ValidateConstantAccess(inputIndex, ValidateConstantAccessExpect::Complete, 0, aznumeric_caster(vector4Size))) { - AZStd::array_view constantBytes = GetConstantRaw(inputIndex); + AZStd::span constantBytes = GetConstantRaw(inputIndex); return Vector4::CreateFromFloat4(reinterpret_cast(constantBytes.data())); } return Vector4(); @@ -411,19 +411,19 @@ namespace AZ constexpr size_t colorSize = sizeof(Color); if (ValidateConstantAccess(inputIndex, ValidateConstantAccessExpect::Complete, 0, aznumeric_caster(colorSize))) { - AZStd::array_view constantBytes = GetConstantRaw(inputIndex); + AZStd::span constantBytes = GetConstantRaw(inputIndex); return Color::CreateFromFloat4(reinterpret_cast(constantBytes.data())); } return Color(); } - AZStd::array_view ConstantsData::GetConstantRaw(ShaderInputConstantIndex inputIndex) const + AZStd::span ConstantsData::GetConstantRaw(ShaderInputConstantIndex inputIndex) const { const Interval interval = GetLayout()->GetInterval(inputIndex); - return AZStd::array_view(&m_constantData[interval.m_min], interval.m_max - interval.m_min); + return AZStd::span(&m_constantData[interval.m_min], interval.m_max - interval.m_min); } - AZStd::array_view ConstantsData::GetConstantData() const + AZStd::span ConstantsData::GetConstantData() const { return m_constantData; } @@ -436,11 +436,11 @@ namespace AZ bool ConstantsData::ConstantIsEqual(const ConstantsData& other, ShaderInputConstantIndex inputIndex) const { - AZStd::array_view myConstant = GetConstantRaw(inputIndex); - AZStd::array_view otherConstant = other.GetConstantRaw(inputIndex); + AZStd::span myConstant = GetConstantRaw(inputIndex); + AZStd::span otherConstant = other.GetConstantRaw(inputIndex); // If they point to the same data, they are equal - if (myConstant == otherConstant) + if (myConstant.data() == otherConstant.data() && myConstant.size() == otherConstant.size()) { return true; } @@ -474,8 +474,8 @@ namespace AZ return differingIndices; } - AZStd::array_view myShaderInputs = m_layout->GetShaderInputList(); - AZStd::array_view otherShaderInputs = other.m_layout->GetShaderInputList(); + AZStd::span myShaderInputs = m_layout->GetShaderInputList(); + AZStd::span otherShaderInputs = other.m_layout->GetShaderInputList(); size_t minSize = AZStd::min(myShaderInputs.size(), otherShaderInputs.size()); size_t maxSize = AZStd::max(myShaderInputs.size(), otherShaderInputs.size()); diff --git a/Gems/Atom/RHI/Code/Source/RHI/DrawPacketBuilder.cpp b/Gems/Atom/RHI/Code/Source/RHI/DrawPacketBuilder.cpp index ec9dd1a14f..1cfd745227 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/DrawPacketBuilder.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/DrawPacketBuilder.cpp @@ -33,29 +33,29 @@ namespace AZ m_indexBufferView = indexBufferView; } - void DrawPacketBuilder::SetRootConstants(AZStd::array_view rootConstants) + void DrawPacketBuilder::SetRootConstants(AZStd::span rootConstants) { m_rootConstants = rootConstants; } - void DrawPacketBuilder::SetScissors(AZStd::array_view scissors) + void DrawPacketBuilder::SetScissors(AZStd::span scissors) { m_scissors = decltype(m_scissors)(scissors.begin(), scissors.end()); } void DrawPacketBuilder::SetScissor(const Scissor& scissor) { - SetScissors(AZStd::array_view(&scissor, 1)); + SetScissors(AZStd::span(&scissor, 1)); } - void DrawPacketBuilder::SetViewports(AZStd::array_view viewports) + void DrawPacketBuilder::SetViewports(AZStd::span viewports) { m_viewports = decltype(m_viewports)(viewports.begin(), viewports.end()); } void DrawPacketBuilder::SetViewport(const Viewport& viewport) { - SetViewports(AZStd::array_view(&viewport, 1)); + SetViewports(AZStd::span(&viewport, 1)); } void DrawPacketBuilder::AddShaderResourceGroup(const ShaderResourceGroup* shaderResourceGroup) diff --git a/Gems/Atom/RHI/Code/Source/RHI/FrameGraph.cpp b/Gems/Atom/RHI/Code/Source/RHI/FrameGraph.cpp index 25158b1b3d..08840670a0 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/FrameGraph.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/FrameGraph.cpp @@ -327,7 +327,7 @@ namespace AZ return ResultCode::InvalidArgument; } - ResultCode FrameGraph::UseAttachments(AZStd::array_view descriptors, ScopeAttachmentAccess access, ScopeAttachmentUsage usage) + ResultCode FrameGraph::UseAttachments(AZStd::span descriptors, ScopeAttachmentAccess access, ScopeAttachmentUsage usage) { for (const ImageScopeAttachmentDescriptor& descriptor : descriptors) { @@ -354,7 +354,7 @@ namespace AZ return ResultCode::InvalidArgument; } - ResultCode FrameGraph::UseColorAttachments(AZStd::array_view descriptors) + ResultCode FrameGraph::UseColorAttachments(AZStd::span descriptors) { return UseAttachments(descriptors, ScopeAttachmentAccess::Write, ScopeAttachmentUsage::RenderTarget); } @@ -364,7 +364,7 @@ namespace AZ return UseAttachment(descriptor, access, ScopeAttachmentUsage::DepthStencil); } - ResultCode FrameGraph::UseSubpassInputAttachments(AZStd::array_view descriptors) + ResultCode FrameGraph::UseSubpassInputAttachments(AZStd::span descriptors) { return UseAttachments(descriptors, ScopeAttachmentAccess::Read, ScopeAttachmentUsage::SubpassInput); } diff --git a/Gems/Atom/RHI/Code/Source/RHI/FrameGraphExecuter.cpp b/Gems/Atom/RHI/Code/Source/RHI/FrameGraphExecuter.cpp index 7599e9c8f6..a27d34b4c2 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/FrameGraphExecuter.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/FrameGraphExecuter.cpp @@ -19,7 +19,7 @@ namespace AZ m_jobPolicy = jobPolicy; } - AZStd::array_view> FrameGraphExecuter::GetGroups() const + AZStd::span> FrameGraphExecuter::GetGroups() const { return m_groups; } diff --git a/Gems/Atom/RHI/Code/Source/RHI/PipelineLibrary.cpp b/Gems/Atom/RHI/Code/Source/RHI/PipelineLibrary.cpp index be0428bc91..6a05565c38 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/PipelineLibrary.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/PipelineLibrary.cpp @@ -44,7 +44,7 @@ namespace AZ return resultCode; } - ResultCode PipelineLibrary::MergeInto(AZStd::array_view librariesToMerge) + ResultCode PipelineLibrary::MergeInto(AZStd::span librariesToMerge) { if (!ValidateIsInitialized()) { diff --git a/Gems/Atom/RHI/Code/Source/RHI/ShaderResourceGroupData.cpp b/Gems/Atom/RHI/Code/Source/RHI/ShaderResourceGroupData.cpp index eed14b41b7..09006f0a60 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/ShaderResourceGroupData.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/ShaderResourceGroupData.cpp @@ -112,7 +112,7 @@ namespace AZ return SetImageViewArray(inputIndex, imageViews, arrayIndex); } - bool ShaderResourceGroupData::SetImageViewArray(ShaderInputImageIndex inputIndex, AZStd::array_view imageViews, uint32_t arrayIndex) + bool ShaderResourceGroupData::SetImageViewArray(ShaderInputImageIndex inputIndex, AZStd::span imageViews, uint32_t arrayIndex) { if (GetLayout()->ValidateAccess(inputIndex, static_cast(arrayIndex + imageViews.size() - 1))) { @@ -132,13 +132,13 @@ namespace AZ { EnableResourceTypeCompilation(ResourceTypeMask::ImageViewMask, ResourceType::ImageView); } - + return isValidAll; } return false; } - bool ShaderResourceGroupData::SetImageViewUnboundedArray(ShaderInputImageUnboundedArrayIndex inputIndex, AZStd::array_view imageViews) + bool ShaderResourceGroupData::SetImageViewUnboundedArray(ShaderInputImageUnboundedArrayIndex inputIndex, AZStd::span imageViews) { if (GetLayout()->ValidateAccess(inputIndex)) { @@ -169,7 +169,7 @@ namespace AZ return SetBufferViewArray(inputIndex, bufferViews, arrayIndex); } - bool ShaderResourceGroupData::SetBufferViewArray(ShaderInputBufferIndex inputIndex, AZStd::array_view bufferViews, uint32_t arrayIndex) + bool ShaderResourceGroupData::SetBufferViewArray(ShaderInputBufferIndex inputIndex, AZStd::span bufferViews, uint32_t arrayIndex) { if (GetLayout()->ValidateAccess(inputIndex, static_cast(arrayIndex + bufferViews.size() - 1))) { @@ -194,7 +194,7 @@ namespace AZ return false; } - bool ShaderResourceGroupData::SetBufferViewUnboundedArray(ShaderInputBufferUnboundedArrayIndex inputIndex, AZStd::array_view bufferViews) + bool ShaderResourceGroupData::SetBufferViewUnboundedArray(ShaderInputBufferUnboundedArrayIndex inputIndex, AZStd::span bufferViews) { if (GetLayout()->ValidateAccess(inputIndex)) { @@ -221,10 +221,10 @@ namespace AZ bool ShaderResourceGroupData::SetSampler(ShaderInputSamplerIndex inputIndex, const SamplerState& sampler, uint32_t arrayIndex) { - return SetSamplerArray(inputIndex, AZStd::array_view(&sampler, 1), arrayIndex); + return SetSamplerArray(inputIndex, AZStd::span(&sampler, 1), arrayIndex); } - bool ShaderResourceGroupData::SetSamplerArray(ShaderInputSamplerIndex inputIndex, AZStd::array_view samplers, uint32_t arrayIndex) + bool ShaderResourceGroupData::SetSamplerArray(ShaderInputSamplerIndex inputIndex, AZStd::span samplers, uint32_t arrayIndex) { if (GetLayout()->ValidateAccess(inputIndex, static_cast(arrayIndex + samplers.size() - 1))) { @@ -241,7 +241,7 @@ namespace AZ return true; } return false; - } + } bool ShaderResourceGroupData::SetConstantRaw(ShaderInputConstantIndex inputIndex, const void* bytes, uint32_t byteCount) { @@ -265,7 +265,7 @@ namespace AZ EnableResourceTypeCompilation(ResourceTypeMask::ConstantDataMask, ResourceType::ConstantData); return m_constantsData.SetConstantData(bytes, byteOffset, byteCount); } - + const RHI::ConstPtr& ShaderResourceGroupData::GetImageView(RHI::ShaderInputImageIndex inputIndex, uint32_t arrayIndex) const { if (GetLayout()->ValidateAccess(inputIndex, arrayIndex)) @@ -276,21 +276,21 @@ namespace AZ return s_nullImageView; } - AZStd::array_view> ShaderResourceGroupData::GetImageViewArray(RHI::ShaderInputImageIndex inputIndex) const + AZStd::span> ShaderResourceGroupData::GetImageViewArray(RHI::ShaderInputImageIndex inputIndex) const { if (GetLayout()->ValidateAccess(inputIndex, 0)) { const Interval interval = GetLayout()->GetGroupInterval(inputIndex); - return AZStd::array_view>(&m_imageViews[interval.m_min], interval.m_max - interval.m_min); + return AZStd::span>(&m_imageViews[interval.m_min], interval.m_max - interval.m_min); } return {}; } - AZStd::array_view> ShaderResourceGroupData::GetImageViewUnboundedArray(RHI::ShaderInputImageUnboundedArrayIndex inputIndex) const + AZStd::span> ShaderResourceGroupData::GetImageViewUnboundedArray(RHI::ShaderInputImageUnboundedArrayIndex inputIndex) const { if (GetLayout()->ValidateAccess(inputIndex)) { - return AZStd::array_view>(m_imageViewsUnboundedArray.data(), m_imageViewsUnboundedArray.size()); + return AZStd::span>(m_imageViewsUnboundedArray.data(), m_imageViewsUnboundedArray.size()); } return {}; } @@ -305,21 +305,21 @@ namespace AZ return s_nullBufferView; } - AZStd::array_view> ShaderResourceGroupData::GetBufferViewArray(RHI::ShaderInputBufferIndex inputIndex) const + AZStd::span> ShaderResourceGroupData::GetBufferViewArray(RHI::ShaderInputBufferIndex inputIndex) const { if (GetLayout()->ValidateAccess(inputIndex, 0)) { const Interval interval = GetLayout()->GetGroupInterval(inputIndex); - return AZStd::array_view>(&m_bufferViews[interval.m_min], interval.m_max - interval.m_min); + return AZStd::span>(&m_bufferViews[interval.m_min], interval.m_max - interval.m_min); } return {}; } - AZStd::array_view> ShaderResourceGroupData::GetBufferViewUnboundedArray(RHI::ShaderInputBufferUnboundedArrayIndex inputIndex) const + AZStd::span> ShaderResourceGroupData::GetBufferViewUnboundedArray(RHI::ShaderInputBufferUnboundedArrayIndex inputIndex) const { if (GetLayout()->ValidateAccess(inputIndex)) { - return AZStd::array_view>(m_bufferViewsUnboundedArray.data(), m_bufferViewsUnboundedArray.size()); + return AZStd::span>(m_bufferViewsUnboundedArray.data(), m_bufferViewsUnboundedArray.size()); } return {}; } @@ -334,28 +334,28 @@ namespace AZ return s_nullSamplerState; } - AZStd::array_view ShaderResourceGroupData::GetSamplerArray(RHI::ShaderInputSamplerIndex inputIndex) const + AZStd::span ShaderResourceGroupData::GetSamplerArray(RHI::ShaderInputSamplerIndex inputIndex) const { const Interval interval = GetLayout()->GetGroupInterval(inputIndex); - return AZStd::array_view(&m_samplers[interval.m_min], interval.m_max - interval.m_min); + return AZStd::span(&m_samplers[interval.m_min], interval.m_max - interval.m_min); } - AZStd::array_view ShaderResourceGroupData::GetConstantRaw(ShaderInputConstantIndex inputIndex) const + AZStd::span ShaderResourceGroupData::GetConstantRaw(ShaderInputConstantIndex inputIndex) const { return m_constantsData.GetConstantRaw(inputIndex); } - AZStd::array_view> ShaderResourceGroupData::GetImageGroup() const + AZStd::span> ShaderResourceGroupData::GetImageGroup() const { return m_imageViews; } - AZStd::array_view> ShaderResourceGroupData::GetBufferGroup() const + AZStd::span> ShaderResourceGroupData::GetBufferGroup() const { return m_bufferViews; } - AZStd::array_view ShaderResourceGroupData::GetSamplerGroup() const + AZStd::span ShaderResourceGroupData::GetSamplerGroup() const { return m_samplers; } @@ -368,7 +368,7 @@ namespace AZ m_bufferViewsUnboundedArray.assign(m_bufferViewsUnboundedArray.size(), nullptr); } - AZStd::array_view ShaderResourceGroupData::GetConstantData() const + AZStd::span ShaderResourceGroupData::GetConstantData() const { return m_constantsData.GetConstantData(); } diff --git a/Gems/Atom/RHI/Code/Source/RHI/ShaderResourceGroupPool.cpp b/Gems/Atom/RHI/Code/Source/RHI/ShaderResourceGroupPool.cpp index 5d1da487ab..797fdec089 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/ShaderResourceGroupPool.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/ShaderResourceGroupPool.cpp @@ -202,8 +202,8 @@ namespace AZ // Generate diffs for image views. if (HasImageGroup()) { - AZStd::array_view> viewGroupOld = shaderResourceGroup.GetData().GetImageGroup(); - AZStd::array_view> viewGroupNew = groupData.GetImageGroup(); + AZStd::span> viewGroupOld = shaderResourceGroup.GetData().GetImageGroup(); + AZStd::span> viewGroupNew = groupData.GetImageGroup(); AZ_Assert(viewGroupOld.size() == viewGroupNew.size(), "ShaderResourceGroupData layouts do not match."); for (size_t i = 0; i < viewGroupOld.size(); ++i) { @@ -214,8 +214,8 @@ namespace AZ // Generate diffs for buffer views. if (HasBufferGroup()) { - AZStd::array_view> viewGroupOld = shaderResourceGroup.GetData().GetBufferGroup(); - AZStd::array_view> viewGroupNew = groupData.GetBufferGroup(); + AZStd::span> viewGroupOld = shaderResourceGroup.GetData().GetBufferGroup(); + AZStd::span> viewGroupNew = groupData.GetBufferGroup(); AZ_Assert(viewGroupOld.size() == viewGroupNew.size(), "ShaderResourceGroupData layouts do not match."); for (size_t i = 0; i < viewGroupOld.size(); ++i) { diff --git a/Gems/Atom/RHI/Code/Source/RHI/StreamBufferView.cpp b/Gems/Atom/RHI/Code/Source/RHI/StreamBufferView.cpp index 0d4a826362..b88f58e8ff 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/StreamBufferView.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/StreamBufferView.cpp @@ -56,7 +56,7 @@ namespace AZ return m_byteStride; } - bool ValidateStreamBufferViews(const RHI::InputStreamLayout& inputStreamLayout, AZStd::array_view streamBufferViews) + bool ValidateStreamBufferViews(const RHI::InputStreamLayout& inputStreamLayout, AZStd::span streamBufferViews) { bool ok = true; diff --git a/Gems/Atom/RHI/Code/Source/RHI/StreamingImagePool.cpp b/Gems/Atom/RHI/Code/Source/RHI/StreamingImagePool.cpp index 6db8da3b55..7bddb4d2f4 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/StreamingImagePool.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/StreamingImagePool.cpp @@ -14,7 +14,7 @@ namespace AZ StreamingImageInitRequest::StreamingImageInitRequest( Image& image, const ImageDescriptor& descriptor, - AZStd::array_view tailMipSlices) + AZStd::span tailMipSlices) : m_image{&image} , m_descriptor{descriptor} , m_tailMipSlices{tailMipSlices} diff --git a/Gems/Atom/RHI/Code/Source/RHI/TransientAttachmentPool.cpp b/Gems/Atom/RHI/Code/Source/RHI/TransientAttachmentPool.cpp index 4e5f83fa8c..2169fcd5d7 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/TransientAttachmentPool.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/TransientAttachmentPool.cpp @@ -117,7 +117,7 @@ namespace AZ return m_compileFlags; } - void TransientAttachmentPool::CollectHeapStats(AliasedResourceTypeFlags typeMask, AZStd::array_view heapStats) + void TransientAttachmentPool::CollectHeapStats(AliasedResourceTypeFlags typeMask, AZStd::span heapStats) { // [GFX_TODO][ATOM-4162] Report the memory allocated stat correctly (or as close as possible) when the heap // supports multiple resource types. Right now we are assigning all the memory used to one resource type. diff --git a/Gems/Atom/RHI/Code/Tests/InputStreamLayoutBuilderTests.cpp b/Gems/Atom/RHI/Code/Tests/InputStreamLayoutBuilderTests.cpp index 07b9078a4c..8b5bac4374 100644 --- a/Gems/Atom/RHI/Code/Tests/InputStreamLayoutBuilderTests.cpp +++ b/Gems/Atom/RHI/Code/Tests/InputStreamLayoutBuilderTests.cpp @@ -20,7 +20,7 @@ namespace UnitTest { protected: - void ExpectEq(AZStd::array_view expected, AZStd::array_view actual) + void ExpectEq(AZStd::span expected, AZStd::span actual) { EXPECT_EQ(expected.size(), actual.size()); for (int i = 0; i < expected.size() && i < actual.size(); ++i) @@ -31,7 +31,7 @@ namespace UnitTest } } - void ExpectEq(AZStd::array_view expected, AZStd::array_view actual) + void ExpectEq(AZStd::span expected, AZStd::span actual) { EXPECT_EQ(expected.size(), actual.size()); for (int i = 0; i < expected.size() && i < actual.size(); ++i) diff --git a/Gems/Atom/RHI/Code/Tests/PipelineState.cpp b/Gems/Atom/RHI/Code/Tests/PipelineState.cpp index 248f4d4b60..eefd6931a1 100644 --- a/Gems/Atom/RHI/Code/Tests/PipelineState.cpp +++ b/Gems/Atom/RHI/Code/Tests/PipelineState.cpp @@ -28,7 +28,7 @@ namespace UnitTest { } - RHI::ResultCode PipelineLibrary::MergeIntoInternal([[maybe_unused]] AZStd::array_view libraries) + RHI::ResultCode PipelineLibrary::MergeIntoInternal([[maybe_unused]] AZStd::span libraries) { return RHI::ResultCode::Success; } diff --git a/Gems/Atom/RHI/Code/Tests/PipelineState.h b/Gems/Atom/RHI/Code/Tests/PipelineState.h index 93478a8d73..ddaedfd73b 100644 --- a/Gems/Atom/RHI/Code/Tests/PipelineState.h +++ b/Gems/Atom/RHI/Code/Tests/PipelineState.h @@ -25,7 +25,7 @@ namespace UnitTest private: AZ::RHI::ResultCode InitInternal(AZ::RHI::Device&, const AZ::RHI::PipelineLibraryData*) override { return AZ::RHI::ResultCode::Success; } void ShutdownInternal() override; - AZ::RHI::ResultCode MergeIntoInternal(AZStd::array_view) override; + AZ::RHI::ResultCode MergeIntoInternal(AZStd::span) override; AZ::RHI::ConstPtr GetSerializedDataInternal() const override { return nullptr; } }; diff --git a/Gems/Atom/RHI/Code/Tests/RenderAttachmentLayoutBuilderTests.cpp b/Gems/Atom/RHI/Code/Tests/RenderAttachmentLayoutBuilderTests.cpp index fef484a3cd..2ed68750ad 100644 --- a/Gems/Atom/RHI/Code/Tests/RenderAttachmentLayoutBuilderTests.cpp +++ b/Gems/Atom/RHI/Code/Tests/RenderAttachmentLayoutBuilderTests.cpp @@ -21,13 +21,13 @@ namespace UnitTest protected: template - void ExpectEqMemory(AZStd::array_view expected, AZStd::array_view actual) + void ExpectEqMemory(AZStd::span expected, AZStd::span actual) { EXPECT_EQ(expected.size(), actual.size()); EXPECT_TRUE(memcmp(expected.data(), actual.data(), expected.size() * sizeof(T)) == 0); } - void ExpectEq(AZStd::array_view expected, AZStd::array_view actual) + void ExpectEq(AZStd::span expected, AZStd::span actual) { EXPECT_EQ(expected.size(), actual.size()); for (int i = 0; i < expected.size() && i < actual.size(); ++i) diff --git a/Gems/Atom/RHI/Code/Tests/ShaderResourceGroupTests.cpp b/Gems/Atom/RHI/Code/Tests/ShaderResourceGroupTests.cpp index 83b3b68b25..9544bd971a 100644 --- a/Gems/Atom/RHI/Code/Tests/ShaderResourceGroupTests.cpp +++ b/Gems/Atom/RHI/Code/Tests/ShaderResourceGroupTests.cpp @@ -316,7 +316,7 @@ namespace UnitTest const auto ValidateFloat4Values = [&]() { - AZStd::array_view float4ValueResult = srgData.GetConstantArray(float4ValueIndex); + AZStd::span float4ValueResult = srgData.GetConstantArray(float4ValueIndex); EXPECT_EQ(float4ValueResult.size(), 4); EXPECT_EQ(float4ValueResult[0], float4Values[0]); EXPECT_EQ(float4ValueResult[1], float4Values[1]); @@ -324,13 +324,13 @@ namespace UnitTest EXPECT_EQ(float4ValueResult[3], float4Values[3]); }; - AZStd::array_view uintValuesResult = srgData.GetConstantArray(uintValueIndex); + AZStd::span uintValuesResult = srgData.GetConstantArray(uintValueIndex); EXPECT_EQ(uintValuesResult.size(), 3); EXPECT_EQ(uintValuesResult[0], uintValues[0]); EXPECT_EQ(uintValuesResult[1], uintValues[1]); EXPECT_EQ(uintValuesResult[2], uintValues[2]); - AZStd::array_view nestedDataResult = srgData.GetConstantArray(nestedDataIndex); + AZStd::span nestedDataResult = srgData.GetConstantArray(nestedDataIndex); EXPECT_EQ(nestedDataResult.size(), 16); ValidateFloat4Values(); @@ -484,17 +484,17 @@ namespace UnitTest const Vector4 vector4 = Vector4::CreateFromFloat4(vector4values); EXPECT_TRUE(srgData.SetConstant(vector2index, vector2)); - AZStd::array_view resultVector2 = srgData.GetConstantRaw(vector2index); + AZStd::span resultVector2 = srgData.GetConstantRaw(vector2index); const Vector2 vector2result = *reinterpret_cast(resultVector2.data()); EXPECT_EQ(vector2result, vector2); EXPECT_TRUE(srgData.SetConstant(vector3index, vector3)); - AZStd::array_view resutVector3 = srgData.GetConstantRaw(vector3index); + AZStd::span resutVector3 = srgData.GetConstantRaw(vector3index); const Vector3 vector3result = *reinterpret_cast(resutVector3.data()); EXPECT_EQ(vector3result, vector3); EXPECT_TRUE(srgData.SetConstant(vector4index, vector4)); - AZStd::array_view resutVector4 = srgData.GetConstantRaw(vector4index); + AZStd::span resutVector4 = srgData.GetConstantRaw(vector4index); const Vector4 vector4result = *reinterpret_cast(resutVector4.data()); EXPECT_EQ(vector4result, vector4); } @@ -524,7 +524,7 @@ namespace UnitTest AZ_TEST_START_ASSERTTEST; EXPECT_FALSE(srgData.SetConstant(vector2index, vector3)); AZ_TEST_STOP_ASSERTTEST(1); - AZStd::array_view resutV3 = srgData.GetConstantRaw(vector2index); + AZStd::span resutV3 = srgData.GetConstantRaw(vector2index); const Vector3 v3result = *reinterpret_cast(resutV3.data()); EXPECT_NE(v3result, vector3); @@ -534,7 +534,7 @@ namespace UnitTest AZ_TEST_START_ASSERTTEST; EXPECT_FALSE(srgData.SetConstant(vector3index, vector4)); AZ_TEST_STOP_ASSERTTEST(1); - AZStd::array_view resutV4 = srgData.GetConstantRaw(vector3index); + AZStd::span resutV4 = srgData.GetConstantRaw(vector3index); const Vector4 v4result = *reinterpret_cast(resutV4.data()); EXPECT_NE(v4result, vector4); @@ -544,7 +544,7 @@ namespace UnitTest AZ_TEST_START_ASSERTTEST; EXPECT_FALSE(srgData.SetConstant(vector4index, vector3)); AZ_TEST_STOP_ASSERTTEST(1); - AZStd::array_view resutV3FromIndex4 = srgData.GetConstantRaw(vector4index); + AZStd::span resutV3FromIndex4 = srgData.GetConstantRaw(vector4index); const Vector4 v4resultFromIndex4 = *reinterpret_cast(resutV3FromIndex4.data()); EXPECT_NE(v4resultFromIndex4, vector4); } diff --git a/Gems/Atom/RHI/DX12/Code/Include/Atom/RHI.Reflect/DX12/ShaderStageFunction.h b/Gems/Atom/RHI/DX12/Code/Include/Atom/RHI.Reflect/DX12/ShaderStageFunction.h index e2c325d406..fa04c3a241 100644 --- a/Gems/Atom/RHI/DX12/Code/Include/Atom/RHI.Reflect/DX12/ShaderStageFunction.h +++ b/Gems/Atom/RHI/DX12/Code/Include/Atom/RHI.Reflect/DX12/ShaderStageFunction.h @@ -8,7 +8,7 @@ #pragma once #include -#include +#include #include #include #include @@ -19,7 +19,7 @@ namespace AZ namespace DX12 { using ShaderByteCode = AZStd::vector; - using ShaderByteCodeView = AZStd::array_view; + using ShaderByteCodeView = AZStd::span; /** * A set of indices used to access physical sub-stages within a virtual stage. diff --git a/Gems/Atom/RHI/DX12/Code/Source/RHI/AsyncUploadQueue.h b/Gems/Atom/RHI/DX12/Code/Source/RHI/AsyncUploadQueue.h index a468ee4bc2..870d8eef19 100644 --- a/Gems/Atom/RHI/DX12/Code/Source/RHI/AsyncUploadQueue.h +++ b/Gems/Atom/RHI/DX12/Code/Source/RHI/AsyncUploadQueue.h @@ -9,7 +9,7 @@ #include -#include +#include namespace AZ { diff --git a/Gems/Atom/RHI/DX12/Code/Source/RHI/CommandList.cpp b/Gems/Atom/RHI/DX12/Code/Source/RHI/CommandList.cpp index 25b412fbe1..a3026b592e 100644 --- a/Gems/Atom/RHI/DX12/Code/Source/RHI/CommandList.cpp +++ b/Gems/Atom/RHI/DX12/Code/Source/RHI/CommandList.cpp @@ -129,14 +129,14 @@ namespace AZ const RHI::Viewport* viewports, uint32_t count) { - m_state.m_viewportState.Set(AZStd::array_view(viewports, count)); + m_state.m_viewportState.Set(AZStd::span(viewports, count)); } void CommandList::SetScissors( const RHI::Scissor* scissors, uint32_t count) { - m_state.m_scissorState.Set(AZStd::array_view(scissors, count)); + m_state.m_scissorState.Set(AZStd::span(scissors, count)); } void CommandList::SetShaderResourceGroupForDraw(const RHI::ShaderResourceGroup& shaderResourceGroup) diff --git a/Gems/Atom/RHI/DX12/Code/Source/RHI/CommandList.h b/Gems/Atom/RHI/DX12/Code/Source/RHI/CommandList.h index da71d669b4..1c02af1fdf 100644 --- a/Gems/Atom/RHI/DX12/Code/Source/RHI/CommandList.h +++ b/Gems/Atom/RHI/DX12/Code/Source/RHI/CommandList.h @@ -18,7 +18,7 @@ #include #include #include -#include +#include #include #include diff --git a/Gems/Atom/RHI/DX12/Code/Source/RHI/PipelineLibrary.cpp b/Gems/Atom/RHI/DX12/Code/Source/RHI/PipelineLibrary.cpp index ae3053f446..0f1fab642a 100644 --- a/Gems/Atom/RHI/DX12/Code/Source/RHI/PipelineLibrary.cpp +++ b/Gems/Atom/RHI/DX12/Code/Source/RHI/PipelineLibrary.cpp @@ -46,7 +46,7 @@ namespace AZ ID3D12DeviceX* dx12Device = device.GetDevice(); #if defined (AZ_DX12_USE_PIPELINE_LIBRARY) - AZStd::array_view bytes; + AZStd::span bytes; bool shouldCreateLibFromSerializedData = true; if (RHI::Factory::Get().IsRenderDocModuleLoaded() || @@ -214,7 +214,7 @@ namespace AZ #endif } - RHI::ResultCode PipelineLibrary::MergeIntoInternal([[maybe_unused]] AZStd::array_view pipelineLibraries) + RHI::ResultCode PipelineLibrary::MergeIntoInternal([[maybe_unused]] AZStd::span pipelineLibraries) { if (RHI::Factory::Get().IsRenderDocModuleLoaded() || RHI::Factory::Get().IsPixModuleLoaded()) @@ -239,14 +239,14 @@ namespace AZ } } #endif - return RHI::ResultCode::Success; + return RHI::ResultCode::Success; } RHI::ConstPtr PipelineLibrary::GetSerializedDataInternal() const { #if defined (AZ_DX12_USE_PIPELINE_LIBRARY) AZStd::lock_guard lock(m_mutex); - + AZStd::vector serializedData(m_library->GetSerializedSize()); HRESULT hr = m_library->Serialize(serializedData.data(), serializedData.size()); diff --git a/Gems/Atom/RHI/DX12/Code/Source/RHI/PipelineLibrary.h b/Gems/Atom/RHI/DX12/Code/Source/RHI/PipelineLibrary.h index b970882246..f34c5bf8ae 100644 --- a/Gems/Atom/RHI/DX12/Code/Source/RHI/PipelineLibrary.h +++ b/Gems/Atom/RHI/DX12/Code/Source/RHI/PipelineLibrary.h @@ -33,7 +33,7 @@ namespace AZ // RHI::PipelineLibrary RHI::ResultCode InitInternal(RHI::Device& device, const RHI::PipelineLibraryData* serializedData) override; void ShutdownInternal() override; - RHI::ResultCode MergeIntoInternal(AZStd::array_view libraries) override; + RHI::ResultCode MergeIntoInternal(AZStd::span libraries) override; RHI::ConstPtr GetSerializedDataInternal() const override; bool IsMergeRequired() const; ////////////////////////////////////////////////////////////////////////// diff --git a/Gems/Atom/RHI/DX12/Code/Source/RHI/ShaderResourceGroupPool.cpp b/Gems/Atom/RHI/DX12/Code/Source/RHI/ShaderResourceGroupPool.cpp index e2573c72d9..9ec074cd81 100644 --- a/Gems/Atom/RHI/DX12/Code/Source/RHI/ShaderResourceGroupPool.cpp +++ b/Gems/Atom/RHI/DX12/Code/Source/RHI/ShaderResourceGroupPool.cpp @@ -20,7 +20,7 @@ namespace AZ namespace DX12 { template - AZStd::vector ShaderResourceGroupPool::GetSRVsFromImageViews(const AZStd::array_view>& imageViews, D3D12_SRV_DIMENSION dimension) + AZStd::vector ShaderResourceGroupPool::GetSRVsFromImageViews(const AZStd::span>& imageViews, D3D12_SRV_DIMENSION dimension) { AZStd::vector cpuSourceDescriptors(imageViews.size(), m_descriptorContext->GetNullHandleSRV(dimension)); @@ -36,7 +36,7 @@ namespace AZ } template - AZStd::vector ShaderResourceGroupPool::GetUAVsFromImageViews(const AZStd::array_view>& imageViews, D3D12_UAV_DIMENSION dimension) + AZStd::vector ShaderResourceGroupPool::GetUAVsFromImageViews(const AZStd::span>& imageViews, D3D12_UAV_DIMENSION dimension) { AZStd::vector cpuSourceDescriptors(imageViews.size(), m_descriptorContext->GetNullHandleUAV(dimension)); for (size_t i = 0; i < cpuSourceDescriptors.size(); ++i) @@ -50,7 +50,7 @@ namespace AZ return cpuSourceDescriptors; } - AZStd::vector ShaderResourceGroupPool::GetCBVsFromBufferViews(const AZStd::array_view>& bufferViews) + AZStd::vector ShaderResourceGroupPool::GetCBVsFromBufferViews(const AZStd::span>& bufferViews) { AZStd::vector cpuSourceDescriptors(bufferViews.size(), m_descriptorContext->GetNullHandleCBV()); @@ -278,7 +278,7 @@ namespace AZ { const RHI::ShaderInputBufferIndex bufferInputIndex(shaderInputIndex); - AZStd::array_view> bufferViews = groupData.GetBufferViewArray(bufferInputIndex); + AZStd::span> bufferViews = groupData.GetBufferViewArray(bufferInputIndex); D3D12_DESCRIPTOR_RANGE_TYPE descriptorRangeType = ConvertShaderInputBufferAccess(shaderInputBuffer.m_access); AZStd::vector descriptorHandles; switch (descriptorRangeType) @@ -313,7 +313,7 @@ namespace AZ { const RHI::ShaderInputImageIndex imageInputIndex(shaderInputIndex); - AZStd::array_view> imageViews = groupData.GetImageViewArray(imageInputIndex); + AZStd::span> imageViews = groupData.GetImageViewArray(imageInputIndex); D3D12_DESCRIPTOR_RANGE_TYPE descriptorRangeType = ConvertShaderInputImageAccess(shaderInputImage.m_access); AZStd::vector descriptorHandles; @@ -349,7 +349,7 @@ namespace AZ { const RHI::ShaderInputSamplerIndex samplerInputIndex(shaderInputIndex); - AZStd::array_view samplers = groupData.GetSamplerArray(samplerInputIndex); + AZStd::span samplers = groupData.GetSamplerArray(samplerInputIndex); UpdateDescriptorTableRange(descriptorTable, samplerInputIndex, samplers); } } @@ -364,7 +364,7 @@ namespace AZ for (const RHI::ShaderInputBufferUnboundedArrayDescriptor& shaderInputBufferUnboundedArray : groupLayout.GetShaderInputListForBufferUnboundedArrays()) { const RHI::ShaderInputBufferUnboundedArrayIndex bufferUnboundedArrayInputIndex(shaderInputIndex); - AZStd::array_view> bufferViews = groupData.GetBufferViewUnboundedArray(bufferUnboundedArrayInputIndex); + AZStd::span> bufferViews = groupData.GetBufferViewUnboundedArray(bufferUnboundedArrayInputIndex); uint32_t tableIndex = shaderInputIndex * RHI::Limits::Device::FrameCountMax + group.m_compiledDataIndex; @@ -403,7 +403,7 @@ namespace AZ for (const RHI::ShaderInputImageUnboundedArrayDescriptor& shaderInputImageUnboundedArray : groupLayout.GetShaderInputListForImageUnboundedArrays()) { const RHI::ShaderInputImageUnboundedArrayIndex imageUnboundedArrayInputIndex(shaderInputIndex); - AZStd::array_view> imageViews = groupData.GetImageViewUnboundedArray(imageUnboundedArrayInputIndex); + AZStd::span> imageViews = groupData.GetImageViewUnboundedArray(imageUnboundedArrayInputIndex); uint32_t tableIndex = shaderInputIndex * RHI::Limits::Device::FrameCountMax + group.m_compiledDataIndex; @@ -447,7 +447,7 @@ namespace AZ RHI::ShaderInputBufferAccess bufferAccess) { const RHI::ShaderInputBufferUnboundedArrayIndex bufferUnboundedArrayInputIndex(shaderInputIndex); - AZStd::array_view> bufferViews = + AZStd::span> bufferViews = groupData.GetBufferViewUnboundedArray(bufferUnboundedArrayInputIndex); if (bufferViews.empty()) @@ -488,7 +488,7 @@ namespace AZ RHI::ShaderInputImageType imageType) { const RHI::ShaderInputImageUnboundedArrayIndex imageUnboundedArrayInputIndex(shaderInputIndex); - AZStd::array_view> imageViews = + AZStd::span> imageViews = groupData.GetImageViewUnboundedArray(imageUnboundedArrayInputIndex); if (imageViews.empty()) @@ -565,7 +565,7 @@ namespace AZ for (const RHI::ShaderInputBufferUnboundedArrayDescriptor& shaderInputBufferUnboundedArray : groupLayout.GetShaderInputListForBufferUnboundedArrays()) { const RHI::ShaderInputBufferUnboundedArrayIndex bufferUnboundedArrayInputIndex(shaderInputIndex); - AZStd::array_view> bufferViews = groupData.GetBufferViewUnboundedArray(bufferUnboundedArrayInputIndex); + AZStd::span> bufferViews = groupData.GetBufferViewUnboundedArray(bufferUnboundedArrayInputIndex); uint32_t tableIndex = shaderInputIndex * RHI::Limits::Device::FrameCountMax + group.m_compiledDataIndex; if (!bufferViews.empty()) @@ -597,7 +597,7 @@ namespace AZ groupLayout.GetShaderInputListForImageUnboundedArrays()) { const RHI::ShaderInputImageUnboundedArrayIndex imageUnboundedArrayInputIndex(shaderInputIndex); - AZStd::array_view> imageViews = + AZStd::span> imageViews = groupData.GetImageViewUnboundedArray(imageUnboundedArrayInputIndex); uint32_t tableIndex = shaderInputIndex * RHI::Limits::Device::FrameCountMax + group.m_compiledDataIndex; @@ -675,7 +675,7 @@ namespace AZ void ShaderResourceGroupPool::UpdateDescriptorTableRange( DescriptorTable descriptorTable, RHI::ShaderInputSamplerIndex samplerInputIndex, - AZStd::array_view samplerStates) + AZStd::span samplerStates) { const DescriptorHandle nullHandle = m_descriptorContext->GetNullHandleSampler(); AZStd::vector cpuSourceDescriptors(aznumeric_caster(samplerStates.size()), nullHandle); diff --git a/Gems/Atom/RHI/DX12/Code/Source/RHI/ShaderResourceGroupPool.h b/Gems/Atom/RHI/DX12/Code/Source/RHI/ShaderResourceGroupPool.h index e1b2145097..2c375f7385 100644 --- a/Gems/Atom/RHI/DX12/Code/Source/RHI/ShaderResourceGroupPool.h +++ b/Gems/Atom/RHI/DX12/Code/Source/RHI/ShaderResourceGroupPool.h @@ -82,7 +82,7 @@ namespace AZ void UpdateDescriptorTableRange( DescriptorTable descriptorTable, RHI::ShaderInputSamplerIndex samplerIndex, - AZStd::array_view samplerStates); + AZStd::span samplerStates); //Cache all the gpu handles for the Descriptor tables related to all the views void CacheGpuHandlesForViews(ShaderResourceGroup& group); @@ -93,12 +93,12 @@ namespace AZ DescriptorTable GetSamplerTable(DescriptorTable descriptorTable, RHI::ShaderInputSamplerIndex samplerInputIndex) const; template - AZStd::vector GetSRVsFromImageViews(const AZStd::array_view>& imageViews, D3D12_SRV_DIMENSION dimension); + AZStd::vector GetSRVsFromImageViews(const AZStd::span>& imageViews, D3D12_SRV_DIMENSION dimension); template - AZStd::vector GetUAVsFromImageViews(const AZStd::array_view>& bufferViews, D3D12_UAV_DIMENSION dimension); + AZStd::vector GetUAVsFromImageViews(const AZStd::span>& bufferViews, D3D12_UAV_DIMENSION dimension); - AZStd::vector GetCBVsFromBufferViews(const AZStd::array_view>& bufferViews); + AZStd::vector GetCBVsFromBufferViews(const AZStd::span>& bufferViews); MemoryPoolSubAllocator m_constantAllocator; DescriptorContext* m_descriptorContext = nullptr; diff --git a/Gems/Atom/RHI/Metal/Code/Include/Atom/RHI.Reflect/Metal/ShaderStageFunction.h b/Gems/Atom/RHI/Metal/Code/Include/Atom/RHI.Reflect/Metal/ShaderStageFunction.h index cb655cd1b6..8069e32644 100644 --- a/Gems/Atom/RHI/Metal/Code/Include/Atom/RHI.Reflect/Metal/ShaderStageFunction.h +++ b/Gems/Atom/RHI/Metal/Code/Include/Atom/RHI.Reflect/Metal/ShaderStageFunction.h @@ -9,7 +9,7 @@ #include #include -#include +#include #include #include #include diff --git a/Gems/Atom/RHI/Metal/Code/Source/RHI.Builders/ShaderPlatformInterface.cpp b/Gems/Atom/RHI/Metal/Code/Source/RHI.Builders/ShaderPlatformInterface.cpp index 8c80205c17..79660f6382 100644 --- a/Gems/Atom/RHI/Metal/Code/Source/RHI.Builders/ShaderPlatformInterface.cpp +++ b/Gems/Atom/RHI/Metal/Code/Source/RHI.Builders/ShaderPlatformInterface.cpp @@ -53,7 +53,7 @@ namespace AZ { return AZ::Metal::PipelineLayoutDescriptor::Create(); } - + bool ShaderPlatformInterface::BuildPipelineLayoutDescriptor( RHI::Ptr pipelineLayoutDescriptor, const ShaderResourceGroupInfoList& srgInfoList, @@ -62,10 +62,10 @@ namespace AZ { AZ::Metal::PipelineLayoutDescriptor* metalDescriptor = azrtti_cast(pipelineLayoutDescriptor.get()); AZ_Assert(metalDescriptor, "PipelineLayoutDescriptor should have been created by now"); - + const uint32_t groupLayoutCount = static_cast(srgInfoList.size()); AZ_Assert(groupLayoutCount <= RHI::Limits::Pipeline::ShaderResourceGroupCountMax, "Exceeded ShaderResourceGroupLayout count limit."); - + // Slot to index mapping AZ::Metal::SlotToIndexTable slotToIndexTable; AZ::Metal::IndexToSlotTable indexToSlotTable; @@ -81,17 +81,17 @@ namespace AZ { return first.m_layout->GetBindingSlot() < second.m_layout->GetBindingSlot(); }); - + for (uint32_t groupLayoutIndex = 0; groupLayoutIndex < groupLayoutCount; ++groupLayoutIndex) { const auto& srgInfo = sortedSrgInfos[groupLayoutIndex]; const RHI::ShaderResourceGroupLayout& groupLayout = *srgInfo.m_layout; const uint32_t srgLayoutSlot = groupLayout.GetBindingSlot(); - + AZ_Assert(srgLayoutSlot <= RHI::Limits::Pipeline::ShaderResourceGroupCountMax, "Cannot exceed the array limit"); slotToIndexTable[srgLayoutSlot] = groupLayoutIndex; indexToSlotTable[groupLayoutIndex] = srgLayoutSlot; - + ShaderResourceGroupVisibility srgVisibility; for (const auto& resourceBindInfo : srgInfo.m_bindingInfo.m_resourcesRegisterMap) { @@ -99,24 +99,24 @@ namespace AZ } srgVisibility.m_constantDataStageMask = srgInfo.m_bindingInfo.m_constantDataBindingInfo.m_shaderStageMask; metalDescriptor->AddShaderResourceGroupVisibility(srgVisibility); - + //cache the layout in order to fill out unused variables m_srgLayouts[groupLayoutIndex] = srgInfo.m_layout; } - + if (rootConstantsInfo.m_totalSizeInBytes > 0) { metalDescriptor->SetRootConstantBinding(RootConstantBinding{ rootConstantsInfo.m_registerId, rootConstantsInfo.m_spaceId }); } - + metalDescriptor->SetBindingTables(slotToIndexTable, indexToSlotTable); return metalDescriptor->Finalize() == RHI::ResultCode::Success; } - + RHI::Ptr ShaderPlatformInterface::CreateShaderStageFunction(const StageDescriptor& stageDescriptor) { RHI::Ptr newShaderStageFunction = ShaderStageFunction::Create(RHI::ToRHIShaderStage(stageDescriptor.m_stageType)); - + const Metal::ShaderSourceCode& sourceCode = stageDescriptor.m_sourceCode; //Metal sourceCode is great for debugging but it is not needed as we are also packing the bytecode. This @@ -127,7 +127,7 @@ namespace AZ const AZStd::string& entryFunctionName = stageDescriptor.m_entryFunctionName; newShaderStageFunction->SetByteCode(byteCode); newShaderStageFunction->SetEntryFunctionName(entryFunctionName); - + newShaderStageFunction->Finalize(); return newShaderStageFunction; } @@ -159,7 +159,7 @@ namespace AZ return shaderCompilerArguments.MakeAdditionalAzslcCommandLineString() + " --use-spaces --unique-idx --namespace=mt,vk --root-const=128 --pad-root-const"; } - + AZStd::string ShaderPlatformInterface::GetAzslCompilerWarningParameters(const RHI::ShaderCompilerArguments& shaderCompilerArguments) const { return shaderCompilerArguments.MakeAdditionalAzslcWarningCommandLineString(); @@ -255,7 +255,7 @@ namespace AZ // Stage profile name parameter const AZStd::string shaderModelVersion = "6_2"; - + const AZStd::unordered_map stageToProfileName = { {RHI::ShaderHardwareStage::Vertex, "vs_" + shaderModelVersion}, @@ -268,15 +268,15 @@ namespace AZ AZ_Error(MetalShaderPlatformName, false, "Unsupported shader stage"); return false; } - + // For this approach we will be doing hlsl->spirv(through dxc) and spirv->metalSL(through spirv cross) // Output spirv file AZStd::string shaderSpirvOutputFile = RHI::BuildFileNameWithExtension(shaderSourceFile, tempFolder, "spirv"); - + // Compilation parameters AZStd::string params = shaderCompilerArguments.MakeAdditionalDxcCommandLineString(); params += " -spirv"; // Generate SPIRV shader - + // Enable half precision types when shader model >= 6.2 int shaderModelMajor = 0; int shaderModelMinor = 0; @@ -318,7 +318,7 @@ namespace AZ params.c_str(), // 3 shaderSpirvOutputFile.c_str(), // 4 dxcInputFile.c_str()); // 5 - + // Run dxc Compiler if (!RHI::ExecuteShaderCompiler(dxcRelativePath, dxcCommandOptions, shaderSourceFile, "DXC")) { @@ -329,9 +329,9 @@ namespace AZ { byProducts.m_intermediatePaths.insert(shaderSpirvOutputFile); // the spirv spit by DXC } - + IO::FileIOStream spirvOutFileStream(shaderSpirvOutputFile.data(), AZ::IO::OpenMode::ModeRead | AZ::IO::OpenMode::ModeBinary); - + if (!spirvOutFileStream.IsOpen()) { AZ_Error(MetalShaderPlatformName, false, "Failed because the shader file \"%s\" could not be opened", shaderSpirvOutputFile.data()); @@ -343,12 +343,12 @@ namespace AZ spirvOutFileStream.Close(); return false; } - + // spirv cross compiler executable static const char* spirvCrossRelativePath = "Builders/SPIRVCross/spirv-cross"; - + AZStd::string spirvCrossCommandOptions = AZStd::string::format("--msl --msl-version 20100 --msl-invariant-float-math --msl-argument-buffers --msl-decoration-binding --msl-texture-buffer-native --output \"%s\" \"%s\"", shaderMSLOutputFile.c_str(), shaderSpirvOutputFile.c_str()); - + // Run spirv cross if (!RHI::ExecuteShaderCompiler(spirvCrossRelativePath, spirvCrossCommandOptions, shaderSpirvOutputFile, "SpirvCross")) { @@ -357,7 +357,7 @@ namespace AZ return false; } spirvOutFileStream.Close(); - + IO::FileIOStream outFileStream(shaderMSLOutputFile.data(), IO::OpenMode::ModeRead); bool finalizeShaderResult = UpdateCompiledShader(outFileStream, MetalShaderPlatformName, shaderMSLOutputFile.data(), sourceMetalShader); AZ_Assert(finalizeShaderResult, "Final compiled shader was not created. Check if %s was created", shaderMSLOutputFile.c_str()); @@ -366,7 +366,7 @@ namespace AZ { byProducts.m_intermediatePaths.emplace(AZStd::move(shaderMSLOutputFile)); // .msl metal out of sv-cross } - + bool compileMetalSL = CreateMetalLib(MetalShaderPlatformName, shaderSourceFile, tempFolder, compiledByteCode, sourceMetalShader, platform); if (!compileMetalSL) { @@ -376,7 +376,7 @@ namespace AZ return finalizeShaderResult; } - + bool ShaderPlatformInterface::UpdateCompiledShader(AZ::IO::FileIOStream& fileStream, const char* platformName, const char* fileName, AZStd::vector& compiledShader) const { if (!fileStream.IsOpen()) @@ -390,16 +390,16 @@ namespace AZ fileStream.Close(); return false; } - + compiledShader.resize(fileStream.GetLength() + 1); // +1 to add end of string memset(compiledShader.data(), 0, fileStream.GetLength() + 1); fileStream.Read(fileStream.GetLength(), compiledShader.data()); fileStream.Close(); - + //Ensure that the argument buffer declaration in the shader matches the srg layout return AddUnusedResources(compiledShader); } - + bool ShaderPlatformInterface::CreateMetalLib(const char* platformName, const AZStd::string& shaderSourceFile, const AZStd::string& tempFolder, @@ -408,22 +408,22 @@ namespace AZ const AssetBuilderSDK::PlatformInfo& platform) const { AZStd::string inputMetalFile = RHI::BuildFileNameWithExtension(shaderSourceFile, tempFolder, "metal"); - + AZ::IO::FileIOStream sourceMtlfileStream(inputMetalFile.c_str(), AZ::IO::OpenMode::ModeWrite | AZ::IO::OpenMode::ModeBinary); if (!sourceMtlfileStream.IsOpen()) { AZ_Error(platformName, false, "Failed because the shader file \"%s\" could not be opened", inputMetalFile.c_str()); return false; } - + AZStd::string mtlSource = AZStd::string(sourceMetalShader.begin(), sourceMetalShader.end()); sourceMtlfileStream.Write(mtlSource.size(), mtlSource.data()); sourceMtlfileStream.Close(); - + AZStd::string outputAirFile = RHI::BuildFileNameWithExtension(shaderSourceFile, tempFolder, "air"); AZStd::string outMetalLibFile = RHI::BuildFileNameWithExtension(shaderSourceFile, tempFolder, "metallib"); - - //Debug symbols are always enabled at the moment. Need to turn them off for optimized shader assets. + + //Debug symbols are always enabled at the moment. Need to turn them off for optimized shader assets. AZStd::string shaderDebugInfo = "-gline-tables-only -MO"; AZStd::string shaderMslToAirOptions = "-fpreserve-invariance"; @@ -434,47 +434,47 @@ namespace AZ { platformSdk = "iphoneos"; } - + //Convert to air file AZStd::string mslToAirCommandOptions = AZStd::string::format("-sdk %s metal \"%s\" %s %s -c -o \"%s\"", platformSdk.c_str(), inputMetalFile.c_str(), shaderDebugInfo.c_str(), shaderMslToAirOptions.c_str(), outputAirFile.c_str()); - + if (!RHI::ExecuteShaderCompiler("/usr/bin/xcrun", mslToAirCommandOptions, inputMetalFile, "MslToAir")) { AZ_Error(MetalShaderPlatformName, false, "Failed to convert to AIR file %s", inputMetalFile.c_str()); return false; } - + //convert to metallib AZStd::string airToMetalLibCommandOptions = AZStd::string::format("-sdk %s metallib \"%s\" -o \"%s\"", platformSdk.c_str(), outputAirFile.c_str(), outMetalLibFile.c_str()); - + if (!RHI::ExecuteShaderCompiler("/usr/bin/xcrun", airToMetalLibCommandOptions, outputAirFile, "AirToMetallib")) { AZ_Error(MetalShaderPlatformName, false, "Failed to convert to metallib file"); return false; } - + AZ::IO::FileIOStream fileStream(outMetalLibFile.data(), AZ::IO::OpenMode::ModeRead); compiledByteCode.resize(fileStream.GetLength()); memset(compiledByteCode.data(), 0, fileStream.GetLength() ); fileStream.Read(fileStream.GetLength(), compiledByteCode.data()); fileStream.Close(); - + return true; } - + bool ShaderPlatformInterface::AddUnusedResources(AZStd::vector& compiledShader) const { AZStd::string finalMetalSLStr = AZStd::string(compiledShader.begin(), compiledShader.end()); - + const uint32_t groupLayoutCount = static_cast(m_srgLayouts.size()); AZStd::string constantBufferTempStructs = "\n"; AZStd::string structuredBufferTempStructs = "\n"; - + for (uint32_t groupLayoutIndex = 0; groupLayoutIndex < groupLayoutCount; ++groupLayoutIndex) { //const auto& srgInfo = m_srgInfoList[groupLayoutIndex]; const RHI::ShaderResourceGroupLayout& groupLayout = *m_srgLayouts[groupLayoutIndex]; - + //Check if an argument buffer declaration exists for this srg layout. AZStd::string srgBuffer = AZStd::string::format("spvDescriptorSetBuffer%i", groupLayoutIndex); size_t startOfArgBufferPos = finalMetalSLStr.find(srgBuffer); @@ -485,7 +485,7 @@ namespace AZ size_t endOfArgBufferPos = finalMetalSLStr.find("}", startOfArgBufferPos); AZStd::string fullArgBufferDeclarationStr = finalMetalSLStr.substr(startOfArgBufferPos,endOfArgBufferPos - startOfArgBufferPos + 1); - + //Add all the existing or dummy entries into m_argBufferEntries which is a set. The reason for using a set //is because we need the entries to be sorted based on the register and we do not want duplicates. bool result = AddConstantBufferEntries(groupLayout, constantBufferTempStructs, fullArgBufferDeclarationStr, groupLayoutIndex); @@ -494,44 +494,44 @@ namespace AZ AZ_Error(MetalShaderPlatformName, false, "Failed because adding constant buffer entries within AddUnusedResources failed"); return false; } - + result = AddImageEntries(groupLayout, fullArgBufferDeclarationStr); if(!result) { AZ_Error(MetalShaderPlatformName, false, "Failed because adding image entries within AddUnusedResources failed"); return false; } - + result = AddSamplerEntries(groupLayout, fullArgBufferDeclarationStr); if(!result) { AZ_Error(MetalShaderPlatformName, false, "Failed because adding static sampler entries within AddUnusedResources failed"); return false; } - + result = AddBufferEntries(groupLayout, structuredBufferTempStructs, fullArgBufferDeclarationStr, groupLayoutIndex); if(!result) { AZ_Error(MetalShaderPlatformName, false, "Failed because adding buffer entries within AddUnusedResources failed"); return false; } - + //Create a new spvDescriptorSetBuffer which matches the layout. AZStd::string newArgBufferLayoutStr = "\n"; for (const ArgBufferEntries &entry : m_argBufferEntries ) { newArgBufferLayoutStr += " " + entry.first + "\n"; } - + //Replace the existing declaration with the new one just generated. //We look for '{' and '}' to find out boundaries of the argument buffer declaration to replace size_t startOfArgBufferBracketPos = finalMetalSLStr.find("{", startOfArgBufferPos) + 1; size_t endOfArgBufferBracketPos = finalMetalSLStr.find("}", startOfArgBufferBracketPos) - 1; finalMetalSLStr.replace(startOfArgBufferBracketPos, endOfArgBufferBracketPos - startOfArgBufferBracketPos, newArgBufferLayoutStr); - + m_argBufferEntries.clear(); } - + //Add dummy definitions of constant buffer and structured buffer types to the top of the file AZStd::string startOfShaderTag = "using namespace metal;"; const size_t startOfShaderPos = finalMetalSLStr.find(startOfShaderTag); @@ -540,28 +540,28 @@ namespace AZ finalMetalSLStr.insert(startOfShaderPos + startOfShaderTag.length() + 1, constantBufferTempStructs); finalMetalSLStr.insert(startOfShaderPos + startOfShaderTag.length() + 1, structuredBufferTempStructs); } - + compiledShader = AZStd::vector(finalMetalSLStr.begin(), finalMetalSLStr.end()); return true; } - + bool ShaderPlatformInterface::AddConstantBufferEntries(const RHI::ShaderResourceGroupLayout& groupLayout, AZStd::string& constantBufferTempStructs, AZStd::string& argBufferStr, uint32_t groupLayoutIndex) const { - AZStd::array_view shaderInputConstantList = groupLayout.GetShaderInputListForConstants(); + AZStd::span shaderInputConstantList = groupLayout.GetShaderInputListForConstants(); if (shaderInputConstantList.empty()) { return true; } - + //Only need the information from the first element of the constant buffer. const RHI::ShaderInputConstantDescriptor& shaderInputConstant = shaderInputConstantList[0]; - + uint32_t regId = shaderInputConstant.m_registerId; AZStd::string srgResource = AZStd::string::format("id(%i)", regId); - + size_t resourceStartPos = argBufferStr.find(srgResource); //Check if we need to create a dummy entry if (resourceStartPos == AZStd::string::npos) @@ -578,7 +578,7 @@ namespace AZ * */ constantBufferTempStructs += AZStd::string::format("struct type_DummyStruct%i_DescSet%i\n{\n float dummyArray[%i];\n};\n", regId, groupLayoutIndex, numElements); - + //Create the final resource entry to be added to the set AZStd::string dummyResource = AZStd::string::format("constant type_DummyStruct%i_DescSet%i* dummyConstantBuffer%i [[id(%i)]];", regId, groupLayoutIndex, regId, regId); m_argBufferEntries.insert(AZStd::make_pair(dummyResource, regId)); @@ -590,7 +590,7 @@ namespace AZ return AddExistingResourceEntry("constant type_ConstantBuffer", resourceStartPos, regId, argBufferStr); } } - + bool ShaderPlatformInterface::AddImageEntries(const RHI::ShaderResourceGroupLayout& groupLayout, AZStd::string& argBufferStr) const { @@ -599,7 +599,7 @@ namespace AZ { uint32_t regId = shaderInputImage.m_registerId; AZStd::string srgResource = AZStd::string::format("id(%i)", regId); - + const size_t resourceStartPos = argBufferStr.find(srgResource); //Check if we need to create a dummy entry if (resourceStartPos == AZStd::string::npos) @@ -652,7 +652,7 @@ namespace AZ AZ_Assert(false, "Invalid texture type."); } } - + //Create the resource entry to be added to the set. Handle arrays by checking the shaderInputImage.m_count AZStd::string dummyResource; if(shaderInputImage.m_count > 1) @@ -678,11 +678,11 @@ namespace AZ } return result; } - + bool ShaderPlatformInterface::ProcessSamplerEntry(uint32_t regId, AZStd::string& argBufferStr, uint32_t samplercount) const { AZStd::string srgResource = AZStd::string::format("id(%i)", regId); - + const size_t resourceStartPos = argBufferStr.find(srgResource); //Check if we need to create a dummy entry if (resourceStartPos == AZStd::string::npos) @@ -705,7 +705,7 @@ namespace AZ return AddExistingResourceEntry("sampler", resourceStartPos, regId, argBufferStr); } } - + bool ShaderPlatformInterface::AddSamplerEntries(const RHI::ShaderResourceGroupLayout& groupLayout, AZStd::string& argBufferStr) const { @@ -714,15 +714,15 @@ namespace AZ { result &= ProcessSamplerEntry(staticSampler.m_registerId, argBufferStr, 0); } - + for (const RHI::ShaderInputSamplerDescriptor& dynamicSampler : groupLayout.GetShaderInputListForSamplers()) { result &= ProcessSamplerEntry(dynamicSampler.m_registerId, argBufferStr, dynamicSampler.m_count); } - + return result; } - + bool ShaderPlatformInterface::AddBufferEntries(const RHI::ShaderResourceGroupLayout& groupLayout, AZStd::string& structuredBufferTempStructs, AZStd::string& argBufferStr, @@ -733,7 +733,7 @@ namespace AZ { uint32_t regId = shaderInputBuffer.m_registerId; AZStd::string srgResource = AZStd::string::format("id(%i)", regId); - + size_t resourceStartPos = argBufferStr.find(srgResource); //Check if we need to create a dummy entry if (resourceStartPos == AZStd::string::npos) @@ -755,7 +755,7 @@ namespace AZ */ structuredBufferTempStructs += AZStd::string::format("struct DummySRG_%s_DescSet%i\n{\n float dummyArray[%i];\n};\n", shaderInputBuffer.m_name.GetCStr(), groupLayoutIndex, numElements); structuredBufferTempStructs += AZStd::string::format("struct type_RWStructuredDummyBuffer%i_DescSet%i\n{\n DummySRG_%s_DescSet%i _m0[%i];\n};\n", regId, groupLayoutIndex, shaderInputBuffer.m_name.GetCStr(), groupLayoutIndex, shaderInputBuffer.m_count); - + //Create the final resource entry to be added to the set AZStd::string dummyResource = AZStd::string::format("device type_RWStructuredDummyBuffer%i_DescSet%i* dummyStructuredBuffer%i [[id(%i)]];", regId, groupLayoutIndex, regId, regId); m_argBufferEntries.insert(AZStd::make_pair(dummyResource, regId)); @@ -823,7 +823,7 @@ namespace AZ } return result; } - + bool ShaderPlatformInterface::AddExistingResourceEntry(const char* resourceStr, size_t resourceStartPos, uint32_t regId, @@ -832,8 +832,8 @@ namespace AZ size_t prevEndOfLine = argBufferStr.rfind("\n", resourceStartPos); size_t nextEndOfLine = argBufferStr.find("\n", resourceStartPos); size_t startOfEntryPos = argBufferStr.find(resourceStr, prevEndOfLine); - - //Check to see if a valid entry is found. + + //Check to see if a valid entry is found. if(startOfEntryPos == AZStd::string::npos || startOfEntryPos > nextEndOfLine) { AZ_Error(MetalShaderPlatformName, startOfEntryPos != AZStd::string::npos, "Entry-> %s not found within Descriptor set %s", resourceStr, argBufferStr.c_str()); @@ -843,7 +843,7 @@ namespace AZ { size_t endOfEntryPos = argBufferStr.find("\n", startOfEntryPos); AZ_Assert(endOfEntryPos != AZStd::string::npos, "Resource entry missing"); - + AZStd::string existingEntry = argBufferStr.substr(prevEndOfLine,endOfEntryPos - prevEndOfLine); m_argBufferEntries.insert(AZStd::make_pair(existingEntry, regId)); return true; diff --git a/Gems/Atom/RHI/Metal/Code/Source/RHI/ArgumentBuffer.cpp b/Gems/Atom/RHI/Metal/Code/Source/RHI/ArgumentBuffer.cpp index b820a6bf76..6775258032 100644 --- a/Gems/Atom/RHI/Metal/Code/Source/RHI/ArgumentBuffer.cpp +++ b/Gems/Atom/RHI/Metal/Code/Source/RHI/ArgumentBuffer.cpp @@ -23,14 +23,14 @@ namespace AZ { return aznew ArgumentBuffer(); } - + void ArgumentBuffer::Init(Device* device, RHI::ConstPtr srgLayout, ShaderResourceGroup& group, ShaderResourceGroupPool* srgPool) { @autoreleasepool { m_device = device; m_srgLayout = srgLayout; - + m_constantBufferSize = srgLayout->GetConstantDataSize(); if (m_constantBufferSize) { @@ -47,23 +47,23 @@ namespace AZ m_constantBuffer.SetName(constantBufferName.c_str()); AZ_Assert(m_constantBuffer.IsValid(), "Couldnt allocate memory for Constant buffer") } - - + + NSMutableArray* argBufferDecriptors = [[[NSMutableArray alloc] init] autorelease]; bool argDescriptorsCreated = CreateArgumentDescriptors(argBufferDecriptors); - + if(argDescriptorsCreated) { NSSortDescriptor* sortDescriptor; sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"index" ascending:YES] autorelease]; NSArray* sortedArgDescriptors = [argBufferDecriptors sortedArrayUsingDescriptors:@[sortDescriptor]]; - + m_argumentEncoder = [m_device->GetMtlDevice() newArgumentEncoderWithArguments:sortedArgDescriptors]; NSUInteger argumentBufferLength = m_argumentEncoder.encodedLength; - + RHI::BufferDescriptor bufferDescriptor; - + bufferDescriptor.m_byteCount = argumentBufferLength; bufferDescriptor.m_bindFlags = RHI::BufferBindFlags::Constant; AZStd::string argBufferName = "ArgumentBuffer"; @@ -77,24 +77,24 @@ namespace AZ m_argumentBuffer.SetName(argBufferName.c_str()); SetName(Name(argBufferName.c_str())); - + //Attach the argument buffer to the argument encoder [m_argumentEncoder setArgumentBuffer:m_argumentBuffer.GetGpuAddress>() offset:m_argumentBuffer.GetOffset()]; - + //Attach the static samplers AttachStaticSamplers(); - + //Attach the constant buffer AttachConstantBuffer(); } } } - + bool ArgumentBuffer::CreateArgumentDescriptors(NSMutableArray* argBufferDecriptors) { bool resourceAdded = false; - + for (const RHI::ShaderInputBufferDescriptor& shaderInputBuffer : m_srgLayout->GetShaderInputListForBuffers()) { MTLArgumentDescriptor* bufferArgDescriptor = [[[MTLArgumentDescriptor alloc] init] autorelease]; @@ -102,7 +102,7 @@ namespace AZ [argBufferDecriptors addObject:bufferArgDescriptor]; resourceAdded = true; } - + for (const RHI::ShaderInputImageDescriptor& shaderInputImage : m_srgLayout->GetShaderInputListForImages()) { MTLArgumentDescriptor* imgArgDescriptor = [[[MTLArgumentDescriptor alloc] init] autorelease]; @@ -110,7 +110,7 @@ namespace AZ [argBufferDecriptors addObject:imgArgDescriptor]; resourceAdded = true; } - + for (const RHI::ShaderInputSamplerDescriptor& shaderInputSampler : m_srgLayout->GetShaderInputListForSamplers()) { MTLArgumentDescriptor* samplerArgDescriptor = [[[MTLArgumentDescriptor alloc] init] autorelease]; @@ -121,7 +121,7 @@ namespace AZ [argBufferDecriptors addObject:samplerArgDescriptor]; resourceAdded = true; } - + for (const RHI::ShaderInputStaticSamplerDescriptor& staticSamplerInput : m_srgLayout->GetStaticSamplers()) { MTLArgumentDescriptor* staticSamplerArgDescriptor = [[[MTLArgumentDescriptor alloc] init] autorelease]; @@ -131,8 +131,8 @@ namespace AZ [argBufferDecriptors addObject:staticSamplerArgDescriptor]; resourceAdded = true; } - - AZStd::array_view shaderInputConstantList = m_srgLayout->GetShaderInputListForConstants(); + + AZStd::span shaderInputConstantList = m_srgLayout->GetShaderInputListForConstants(); if (!shaderInputConstantList.empty()) { const RHI::ShaderInputConstantDescriptor& shaderInputConstant = shaderInputConstantList[0]; @@ -143,10 +143,10 @@ namespace AZ [argBufferDecriptors addObject:constBufferArgDescriptor]; resourceAdded = true; } - + return resourceAdded; } - + void ArgumentBuffer::AttachStaticSamplers() { for (const RHI::ShaderInputStaticSamplerDescriptor& staticSampler : m_srgLayout->GetStaticSamplers()) @@ -157,17 +157,17 @@ namespace AZ [m_argumentEncoder setSamplerState:mtlSamplerState atIndex:staticSampler.m_registerId]; } } - + void ArgumentBuffer::AttachConstantBuffer() { - AZStd::array_view shaderInputConstantList = m_srgLayout->GetShaderInputListForConstants(); + AZStd::span shaderInputConstantList = m_srgLayout->GetShaderInputListForConstants(); if (!shaderInputConstantList.empty()) { const RHI::ShaderInputConstantDescriptor& shaderInputConstant = shaderInputConstantList[0]; [m_argumentEncoder setBuffer:m_constantBuffer.GetGpuAddress>() offset:m_constantBuffer.GetOffset() atIndex:shaderInputConstant.m_registerId]; } } - + void ArgumentBuffer::BindNullSamplers(uint32_t registerId, uint32_t samplerCount) { AZStd::array, MaxEntriesInArgTable> mtlSamplers; @@ -177,25 +177,25 @@ namespace AZ { mtlSamplers[i] = nullMtlSampler; } - + NSRange range = {registerId, samplerCount}; [m_argumentEncoder setSamplerStates : mtlSamplers.data() withRange : range]; } - + void ArgumentBuffer::UpdateImageViews(const RHI::ShaderInputImageDescriptor& shaderInputImage, const RHI::ShaderInputImageIndex shaderInputIndex, - const AZStd::array_view>& imageViews) + const AZStd::span>& imageViews) { int imageArrayLen = 0; AZStd::array, MaxEntriesInArgTable> mtlTextures; - + for (const RHI::ConstPtr& imageViewBase : imageViews) { if (imageViewBase && !imageViewBase->IsStale()) { const auto& imageView = static_cast(*imageViewBase); - + RHI::Ptr textureMemPtr = imageView.GetMemoryView().GetMemory(); mtlTextures[imageArrayLen] = textureMemPtr->GetGpuAddress>(); m_resourceBindings[shaderInputImage.m_name].insert(ResourceBindingData{textureMemPtr, .m_imageAccess = shaderInputImage.m_access}); @@ -208,7 +208,7 @@ namespace AZ } imageArrayLen++; } - + AZ_Assert(imageArrayLen==shaderInputImage.m_count, "Make sure we have created the correct length of texture array"); if(imageArrayLen > 0) { @@ -217,10 +217,10 @@ namespace AZ withRange : range]; } } - + void ArgumentBuffer::UpdateSamplers(const RHI::ShaderInputSamplerDescriptor& shaderInputSampler, const RHI::ShaderInputSamplerIndex shaderInputIndex, - const AZStd::array_view& samplerStates) + const AZStd::span& samplerStates) { int samplerArrayLen = 0; AZStd::array, MaxEntriesInArgTable> mtlSamplers; @@ -232,7 +232,7 @@ namespace AZ mtlSamplers[samplerArrayLen] = GetMtlSampler(samplerDesc); samplerArrayLen++; } - + AZ_Assert(samplerArrayLen==shaderInputSampler.m_count, "Make sure we dont have a nil sampler within mtlSamplers"); if(samplerArrayLen > 0) { @@ -245,16 +245,16 @@ namespace AZ BindNullSamplers(shaderInputSampler.m_registerId, shaderInputSampler.m_count); } } - + void ArgumentBuffer::UpdateBufferViews(const RHI::ShaderInputBufferDescriptor& shaderInputBuffer, const RHI::ShaderInputBufferIndex shaderInputIndex, - const AZStd::array_view>& bufferViews) + const AZStd::span>& bufferViews) { int bufferArrayLen = 0; AZStd::array, MaxEntriesInArgTable> mtlBuffers; AZStd::array mtlBufferOffsets; AZStd::array, MaxEntriesInArgTable> mtlTextures; - + for (const RHI::ConstPtr& bufferViewBase : bufferViews) { if (bufferViewBase && !bufferViewBase->IsStale()) @@ -298,12 +298,12 @@ namespace AZ bufferArrayLen++; } - + AZ_Assert(bufferArrayLen==shaderInputBuffer.m_count, "Make sure we have created the correct length of buffer array"); if(bufferArrayLen > 0) { NSRange range = {shaderInputBuffer.m_registerId, bufferArrayLen}; - + if(shaderInputBuffer.m_type == RHI::ShaderInputBufferType::Typed) { [m_argumentEncoder setTextures : mtlTextures.data() @@ -317,8 +317,8 @@ namespace AZ } } } - - void ArgumentBuffer::UpdateConstantBufferViews(AZStd::array_view rawData) + + void ArgumentBuffer::UpdateConstantBufferViews(AZStd::span rawData) { AZ_Assert(rawData.size() <= m_constantBufferSize, "rawData size can not be bigger than constant Buffer Size"); if ( (m_constantBufferSize > 0) && (rawData.size() <= m_constantBufferSize)) @@ -326,11 +326,11 @@ namespace AZ memcpy(m_constantBuffer.GetCpuAddress(), rawData.data(), rawData.size()); } } - + void ArgumentBuffer::Shutdown() { ClearResourceTracking(); - + #if defined(ARGUMENTBUFFER_PAGEALLOCATOR) if(m_constantBuffer.IsValid()) { @@ -339,13 +339,13 @@ namespace AZ if(m_argumentBuffer.IsValid()) { m_device->GetArgumentBufferAllocator().DeAllocate(m_argumentBuffer); - } + } #else if(m_argumentBuffer.IsValid()) { m_device->QueueForRelease(m_argumentBuffer); } - + if(m_constantBuffer.IsValid()) { m_device->QueueForRelease(m_constantBuffer); @@ -354,28 +354,28 @@ namespace AZ m_argumentBuffer = {}; m_constantBuffer = {}; - + [m_argumentEncoder release]; m_argumentEncoder = nil; - + Base::Shutdown(); } - + id ArgumentBuffer::GetArgEncoderBuffer() const { return m_argumentBuffer.GetGpuAddress>(); }; - + size_t ArgumentBuffer::GetOffset() const { return m_argumentBuffer.GetOffset(); }; - + void ArgumentBuffer::ClearResourceTracking() { m_resourceBindings.clear(); } - + id ArgumentBuffer::GetMtlSampler(MTLSamplerDescriptor* samplerDesc) { const NSCache* samplerCache = m_device->GetSamplerCache(); @@ -385,10 +385,10 @@ namespace AZ mtlSamplerState = [m_device->GetMtlDevice() newSamplerStateWithDescriptor:samplerDesc]; [samplerCache setObject:mtlSamplerState forKey:samplerDesc]; } - + return mtlSamplerState; } - + void ArgumentBuffer::CollectUntrackedResources(id commandEncoder, const ShaderResourceGroupVisibility& srgResourcesVisInfo, ComputeResourcesToMakeResidentMap& resourcesToMakeResidentCompute, @@ -408,19 +408,19 @@ namespace AZ else { MTLRenderStages mtlRenderStages = GetRenderStages(srgResourcesVisInfo.m_constantDataStageMask); - AZStd::pair key = AZStd::make_pair(MTLResourceUsageRead, mtlRenderStages); + AZStd::pair key = AZStd::make_pair(MTLResourceUsageRead, mtlRenderStages); resourcesToMakeResidentGraphics[key].emplace(mtlconstantBufferResource); } } } - + //Cach all the resources within a srg that are used by the shader based on the visibility information for (const auto& it : m_resourceBindings) { //Extract the visibility mask for the give resource auto visMaskIt = srgResourcesVisInfo.m_resourcesStageMask.find(it.first); AZ_Assert(visMaskIt != srgResourcesVisInfo.m_resourcesStageMask.end(), "No Visibility information available") - + uint8_t numBitsSet = RHI::CountBitsSet(static_cast(visMaskIt->second)); //Only use this resource if it is used in one of the shaders if (numBitsSet > 0) @@ -464,7 +464,7 @@ namespace AZ AZ_Assert(false, "Undefined Resource type"); } } - + id mtlResourceToBind = resourceBindingData.m_resourcPtr->GetGpuAddress>(); resourcesToMakeResidentMap[resourceUsage].emplace(mtlResourceToBind); } @@ -475,7 +475,7 @@ namespace AZ const ResourceBindingsSet& resourceBindingDataSet, GraphicsResourcesToMakeResidentMap& resourcesToMakeResidentMap) const { - + MTLRenderStages mtlRenderStages = GetRenderStages(visShaderMask); MTLResourceUsage resourceUsage = MTLResourceUsageRead; for (const auto& resourceBindingData : resourceBindingDataSet) @@ -498,17 +498,17 @@ namespace AZ AZ_Assert(false, "Undefined Resource type"); } } - + AZStd::pair key = AZStd::make_pair(resourceUsage, mtlRenderStages); id mtlResourceToBind = resourceBindingData.m_resourcPtr->GetGpuAddress>(); resourcesToMakeResidentMap[key].emplace(mtlResourceToBind); } } - + bool ArgumentBuffer::IsNullHeapNeededForVertexStage(const ShaderResourceGroupVisibility& srgResourcesVisInfo) const { bool isUsedByVertexStage = false; - + //Iterate over all the SRG entries for (const auto& it : srgResourcesVisInfo.m_resourcesStageMask) { @@ -520,7 +520,7 @@ namespace AZ } return isUsedByVertexStage; } - + bool ArgumentBuffer::IsNullDescHeapNeeded() const { return m_useNullDescriptorHeap; diff --git a/Gems/Atom/RHI/Metal/Code/Source/RHI/ArgumentBuffer.h b/Gems/Atom/RHI/Metal/Code/Source/RHI/ArgumentBuffer.h index a680516dc6..03d8cdd439 100644 --- a/Gems/Atom/RHI/Metal/Code/Source/RHI/ArgumentBuffer.h +++ b/Gems/Atom/RHI/Metal/Code/Source/RHI/ArgumentBuffer.h @@ -26,12 +26,12 @@ struct ResourceBindingData AZ::RHI::ShaderInputImageAccess m_imageAccess; AZ::RHI::ShaderInputBufferAccess m_bufferAccess; }; - + bool operator==(const ResourceBindingData& other) const { return this->m_resourcPtr == other.m_resourcPtr; }; - + size_t GetHash() const { return static_cast(m_resourcPtr->GetHash()); @@ -58,12 +58,12 @@ namespace AZ class BufferMemoryAllocator; class ShaderResourceGroup; struct ShaderResourceGroupCompiledData; - + class ArgumentBuffer final : public RHI::DeviceObject { using Base = RHI::DeviceObject; - + public: AZ_CLASS_ALLOCATOR(ArgumentBuffer, AZ::SystemAllocator, 0); AZ_RTTI(ArgumentBuffer, "FEFE8823-7772-4EA0-9241-65C49ADFF6B3", Base); @@ -78,21 +78,21 @@ namespace AZ void UpdateImageViews(const RHI::ShaderInputImageDescriptor& shaderInputImage, const RHI::ShaderInputImageIndex shaderInputIndex, - const AZStd::array_view>& imageViews); - + const AZStd::span>& imageViews); + void UpdateSamplers(const RHI::ShaderInputSamplerDescriptor& shaderInputSampler, const RHI::ShaderInputSamplerIndex shaderInputIndex, - const AZStd::array_view& samplerStates); - + const AZStd::span& samplerStates); + void UpdateBufferViews(const RHI::ShaderInputBufferDescriptor& shaderInputBuffer, const RHI::ShaderInputBufferIndex shaderInputIndex, - const AZStd::array_view>& bufferViews); - - void UpdateConstantBufferViews(AZStd::array_view rawData); - + const AZStd::span>& bufferViews); + + void UpdateConstantBufferViews(AZStd::span rawData); + id GetArgEncoderBuffer() const; size_t GetOffset() const; - + //Map to cache all the resources based on the usage as we can batch all the resources for a given usage. using ComputeResourcesToMakeResidentMap = AZStd::unordered_map>>; //Map to cache all the resources based on the usage and shader stage as we can batch all the resources for a given usage/shader usage. @@ -102,31 +102,31 @@ namespace AZ const ShaderResourceGroupVisibility& srgResourcesVisInfo, ComputeResourcesToMakeResidentMap& resourcesToMakeResidentCompute, GraphicsResourcesToMakeResidentMap& resourcesToMakeResidentGraphics) const; - + void ClearResourceTracking(); bool IsNullHeapNeededForVertexStage(const ShaderResourceGroupVisibility& srgResourcesVisInfo) const; bool IsNullDescHeapNeeded() const; - + ////////////////////////////////////////////////////////////////////////// // RHI::DeviceObject void Shutdown() override; ////////////////////////////////////////////////////////////////////////// - + private: - + bool CreateArgumentDescriptors(NSMutableArray * argBufferDecriptors); void AttachStaticSamplers(); void AttachConstantBuffer(); - + // Use a cache to store and retrieve samplers id GetMtlSampler(MTLSamplerDescriptor* samplerDesc); using ResourceBindingsSet = AZStd::unordered_set; using ResourceBindingsMap = AZStd::unordered_map; ResourceBindingsMap m_resourceBindings; - + static const int MaxEntriesInArgTable = 31; - + void CollectResourcesForCompute(id encoder, const ResourceBindingsSet& resourceBindingData, ComputeResourcesToMakeResidentMap& resourcesToMakeResidentMap) const; @@ -139,13 +139,13 @@ namespace AZ const ResourceBindingsMap& resourceMap, const ShaderResourceGroupVisibility& srgResourcesVisInfo) const; void BindNullSamplers(uint32_t registerId, uint32_t samplerCount); - + Device* m_device = nullptr; RHI::ConstPtr m_srgLayout; - + id m_argumentEncoder; uint32_t m_constantBufferSize = 0; - + #if defined(ARGUMENTBUFFER_PAGEALLOCATOR) BufferMemoryView m_argumentBuffer; BufferMemoryView m_constantBuffer; diff --git a/Gems/Atom/RHI/Metal/Code/Source/RHI/AsyncUploadQueue.h b/Gems/Atom/RHI/Metal/Code/Source/RHI/AsyncUploadQueue.h index 7ae4a75764..3db15eca4c 100644 --- a/Gems/Atom/RHI/Metal/Code/Source/RHI/AsyncUploadQueue.h +++ b/Gems/Atom/RHI/Metal/Code/Source/RHI/AsyncUploadQueue.h @@ -10,7 +10,7 @@ #include #include #include -#include +#include #include #include #include @@ -34,7 +34,7 @@ namespace AZ : public RHI::DeviceObject { using Base = RHI::DeviceObject; - + public: AsyncUploadQueue() = default; @@ -57,13 +57,13 @@ namespace AZ uint64_t QueueUpload(const RHI::BufferStreamRequest& request); //! Queue copy commands to upload image subresources. - //! @param residentMip is the resident mip level the expand request starts from. + //! @param residentMip is the resident mip level the expand request starts from. //! @return queue id which can be use to check whether upload finished or wait for upload finish RHI::AsyncWorkHandle QueueUpload(const RHI::StreamingImageExpandRequest& request, uint32_t residentMip); bool IsUploadFinished(uint64_t fenceValue); void WaitForUpload(const RHI::AsyncWorkHandle& workHandle); - + private: struct FramePacket; RHI::AsyncWorkHandle CreateAsyncWork(Fence& fence, RHI::Fence::SignalCallback callback = nullptr); @@ -84,26 +84,26 @@ namespace AZ Fence m_fence; // Using persistent mapping for the staging resource so the Map function only need to be called called once. - uint8_t* m_stagingResourceData = nullptr; + uint8_t* m_stagingResourceData = nullptr; uint32_t m_dataOffset = 0; }; - + RHI::Ptr m_copyQueue; - // Begin the frame packet which m_frameIndex point to and get ready to start recording copy command by using this frame packet + // Begin the frame packet which m_frameIndex point to and get ready to start recording copy command by using this frame packet FramePacket* BeginFramePacket(CommandQueue* commandQueue); void EndFramePacket(CommandQueue* commandQueue); bool m_recordingFrame = false; - AZStd::vector m_framePackets; + AZStd::vector m_framePackets; size_t m_frameIndex = 0; Descriptor m_descriptor; // Fence for external upload request Fence m_uploadFence; - + RHI::Ptr m_device; - + //Command Buffer associated with the async copy queue CommandQueueCommandBuffer m_commandBuffer; diff --git a/Gems/Atom/RHI/Metal/Code/Source/RHI/CommandList.cpp b/Gems/Atom/RHI/Metal/Code/Source/RHI/CommandList.cpp index 2b8be3d1ab..c0277152b6 100644 --- a/Gems/Atom/RHI/Metal/Code/Source/RHI/CommandList.cpp +++ b/Gems/Atom/RHI/Metal/Code/Source/RHI/CommandList.cpp @@ -28,7 +28,7 @@ namespace AZ { return aznew CommandList(); } - + void CommandList::Init(RHI::HardwareQueueClass hardwareQueueClass, Device* device) { CommandListBase::Init(hardwareQueueClass, device); @@ -39,13 +39,13 @@ namespace AZ //Undefined symbols for architecture arm64: // "_objc_memmove_collectable", referenced from: //We can come back and revisit this after upgrading the build server machines to Mojave. - + m_state.m_pipelineState = nullptr; m_state.m_pipelineLayout = nullptr; m_state.m_streamsHash = AZ::HashValue64{0}; m_state.m_indicesHash = AZ::HashValue64{0}; m_state.m_stencilRef = -1; - + CommandListBase::Reset(); } @@ -59,11 +59,11 @@ namespace AZ Reset(); CommandListBase::FlushEncoder(); } - + void CommandList::Submit(const RHI::CopyItem& copyItem) { CreateEncoder(CommandEncoderType::Blit); - + id blitEncoder = GetEncoder>(); switch (copyItem.m_type) { @@ -78,7 +78,7 @@ namespace AZ toBuffer:destinationBuffer->GetMemoryView().GetGpuAddress>() destinationOffset:descriptor.m_destinationOffset size:descriptor.m_size]; - + Platform::SynchronizeBufferOnGPU(blitEncoder, destinationBuffer->GetMemoryView().GetGpuAddress>()); break; } @@ -87,19 +87,19 @@ namespace AZ const RHI::CopyImageDescriptor& descriptor = copyItem.m_image; const Image* sourceImage = static_cast(descriptor.m_sourceImage); const Image* destinationImage = static_cast(descriptor.m_destinationImage); - + MTLOrigin sourceOrigin = MTLOriginMake(descriptor.m_sourceOrigin.m_left, descriptor.m_sourceOrigin.m_top, descriptor.m_sourceOrigin.m_front); - + MTLSize sourceSize = MTLSizeMake(descriptor.m_sourceSize.m_width, descriptor.m_sourceSize.m_height, descriptor.m_sourceSize.m_depth); - + MTLOrigin destinationOrigin = MTLOriginMake(descriptor.m_destinationOrigin.m_left, descriptor.m_destinationOrigin.m_top, descriptor.m_destinationOrigin.m_front); - + [blitEncoder copyFromTexture: sourceImage->GetMemoryView().GetGpuAddress>() sourceSlice: descriptor.m_sourceSubresource.m_arraySlice sourceLevel: descriptor.m_sourceSubresource.m_mipSlice @@ -109,7 +109,7 @@ namespace AZ destinationSlice: descriptor.m_destinationSubresource.m_arraySlice destinationLevel: descriptor.m_destinationSubresource.m_mipSlice destinationOrigin: destinationOrigin]; - + Platform::SynchronizeTextureOnGPU(blitEncoder, destinationImage->GetMemoryView().GetGpuAddress>()); break; } @@ -122,11 +122,11 @@ namespace AZ MTLOrigin destinationOrigin = MTLOriginMake(descriptor.m_destinationOrigin.m_left, descriptor.m_destinationOrigin.m_top, descriptor.m_destinationOrigin.m_front); - + MTLSize sourceSize = MTLSizeMake(descriptor.m_sourceSize.m_width, descriptor.m_sourceSize.m_height, descriptor.m_sourceSize.m_depth); - + [blitEncoder copyFromBuffer:sourceBuffer->GetMemoryView().GetGpuAddress>() sourceOffset:sourceBuffer->GetMemoryView().GetOffset() + descriptor.m_sourceOffset sourceBytesPerRow:descriptor.m_sourceBytesPerRow @@ -136,7 +136,7 @@ namespace AZ destinationSlice:descriptor.m_destinationSubresource.m_arraySlice destinationLevel:descriptor.m_destinationSubresource.m_mipSlice destinationOrigin:destinationOrigin]; - + Platform::SynchronizeTextureOnGPU(blitEncoder, destinationImage->GetMemoryView().GetGpuAddress>()); break; } @@ -145,15 +145,15 @@ namespace AZ const RHI::CopyImageToBufferDescriptor& descriptor = copyItem.m_imageToBuffer; const auto* sourceImage = static_cast(descriptor.m_sourceImage); const auto* destinationBuffer = static_cast(descriptor.m_destinationBuffer); - + MTLOrigin sourceOrigin = MTLOriginMake(descriptor.m_sourceOrigin.m_left, descriptor.m_sourceOrigin.m_top, descriptor.m_sourceOrigin.m_front); - + MTLSize sourceSize = MTLSizeMake(descriptor.m_sourceSize.m_width, descriptor.m_sourceSize.m_height, descriptor.m_sourceSize.m_depth); - + [blitEncoder copyFromTexture:sourceImage->GetMemoryView().GetGpuAddress>() sourceSlice:descriptor.m_sourceSubresource.m_arraySlice sourceLevel:descriptor.m_sourceSubresource.m_mipSlice @@ -163,7 +163,7 @@ namespace AZ destinationOffset:destinationBuffer->GetMemoryView().GetOffset() + descriptor.m_destinationOffset destinationBytesPerRow:descriptor.m_destinationBytesPerRow destinationBytesPerImage:descriptor.m_destinationBytesPerImage]; - + Platform::SynchronizeBufferOnGPU(blitEncoder, destinationBuffer->GetMemoryView().GetGpuAddress>()); break; } @@ -173,27 +173,27 @@ namespace AZ } } } - + void CommandList::Submit(const RHI::DispatchItem& dispatchItem) { AZ_PROFILE_FUNCTION(RHI); - + CreateEncoder(CommandEncoderType::Compute); bool bindResourceSuccessfull = CommitShaderResources(dispatchItem); - + if(!bindResourceSuccessfull) { AZ_Assert(false, "Resource binding was unsuccessfully."); return; } const RHI::DispatchDirect& arguments = dispatchItem.m_arguments.m_direct; - MTLSize threadsPerGroup = {arguments.m_threadsPerGroupX, arguments.m_threadsPerGroupY, arguments.m_threadsPerGroupZ}; + MTLSize threadsPerGroup = {arguments.m_threadsPerGroupX, arguments.m_threadsPerGroupY, arguments.m_threadsPerGroupZ}; MTLSize numThreadGroup = {arguments.GetNumberOfGroupsX(), arguments.GetNumberOfGroupsY(), arguments.GetNumberOfGroupsZ()}; - + id computeEncoder = GetEncoder>(); [computeEncoder dispatchThreadgroups: numThreadGroup threadsPerThreadgroup: threadsPerGroup]; - + } void CommandList::Submit(const RHI::DispatchRaysItem& dispatchRaysItem) @@ -204,14 +204,14 @@ namespace AZ void CommandList::SetViewports(const RHI::Viewport* rhiViewports, uint32_t count) { - m_state.m_viewportState.Set(AZStd::array_view(rhiViewports, count)); + m_state.m_viewportState.Set(AZStd::span(rhiViewports, count)); } void CommandList::SetScissors(const RHI::Scissor* rhiScissors, uint32_t count) { - m_state.m_scissorState.Set(AZStd::array_view(rhiScissors, count)); + m_state.m_scissorState.Set(AZStd::span(rhiScissors, count)); } - + template void CommandList::SetRootConstants(const Item& item, const PipelineState* pipelineState) { @@ -221,15 +221,15 @@ namespace AZ if(m_commandEncoderType == CommandEncoderType::Render) { id renderEncoder = GetEncoder>(); - + [renderEncoder setVertexBytes: item.m_rootConstants length: pipelineLayout.GetRootConstantsSize() atIndex: pipelineLayout.GetRootConstantsSlotIndex()]; - + [renderEncoder setFragmentBytes: item.m_rootConstants length: pipelineLayout.GetRootConstantsSize() atIndex: pipelineLayout.GetRootConstantsSlotIndex()]; - + } else if(m_commandEncoderType == CommandEncoderType::Compute) { @@ -237,39 +237,39 @@ namespace AZ [computeEncoder setBytes: item.m_rootConstants length: pipelineLayout.GetRootConstantsSize() atIndex: pipelineLayout.GetRootConstantsSlotIndex()]; - + } } } - + bool CommandList::SetArgumentBuffers(const PipelineState* pipelineState, RHI::PipelineStateType stateType) { bool bindNullDescriptorHeap = false; MTLRenderStages mtlRenderStagesForNullDescHeap = 0; ShaderResourceBindings& bindings = GetShaderResourceBindingsByPipelineType(stateType); const PipelineLayout& pipelineLayout = pipelineState->GetPipelineLayout(); - + uint32_t bufferVertexRegisterIdMin = RHI::Limits::Pipeline::ShaderResourceGroupCountMax; uint32_t bufferFragmentOrComputeRegisterIdMin = RHI::Limits::Pipeline::ShaderResourceGroupCountMax; uint32_t bufferVertexRegisterIdMax = 0; uint32_t bufferFragmentOrComputeRegisterIdMax = 0; - + //Arrays to cache all the buffers and offsets in order to make batch calls MetalArgumentBufferArray mtlVertexArgBuffers; MetalArgumentBufferArrayOffsets mtlVertexArgBufferOffsets; MetalArgumentBufferArray mtlFragmentOrComputeArgBuffers; MetalArgumentBufferArrayOffsets mtlFragmentOrComputeArgBufferOffsets; - + mtlVertexArgBuffers.fill(nil); mtlFragmentOrComputeArgBuffers.fill(nil); mtlVertexArgBufferOffsets.fill(0); mtlFragmentOrComputeArgBufferOffsets.fill(0); - + //Map to cache all the resources based on the usage as we can batch all the resources for a given usage ArgumentBuffer::ComputeResourcesToMakeResidentMap resourcesToMakeResidentCompute; //Map to cache all the resources based on the usage and shader stage as we can batch all the resources for a given usage/shader usage ArgumentBuffer::GraphicsResourcesToMakeResidentMap resourcesToMakeResidentGraphics; - + for (uint32_t slot = 0; slot < RHI::Limits::Pipeline::ShaderResourceGroupCountMax; ++slot) { const ShaderResourceGroup* shaderResourceGroup = bindings.m_srgsBySlot[slot]; @@ -282,7 +282,7 @@ namespace AZ uint32_t srgVisIndex = pipelineLayout.GetIndexBySlot(shaderResourceGroup->GetBindingSlot()); const RHI::ShaderStageMask& srgVisInfo = pipelineLayout.GetSrgVisibility(srgVisIndex); const ShaderResourceGroupVisibility& srgResourcesVisInfo = pipelineLayout.GetSrgResourcesVisibility(srgVisIndex); - + bool isSrgUpdatd = bindings.m_srgsByIndex[slot] != shaderResourceGroup; if(isSrgUpdatd) { @@ -290,12 +290,12 @@ namespace AZ auto& compiledArgBuffer = shaderResourceGroup->GetCompiledArgumentBuffer(); id argBuffer = compiledArgBuffer.GetArgEncoderBuffer(); size_t argBufferOffset = compiledArgBuffer.GetOffset(); - + if(srgVisInfo != RHI::ShaderStageMask::None) { bool isNullDescHeapNeeded = compiledArgBuffer.IsNullDescHeapNeeded(); bindNullDescriptorHeap |= isNullDescHeapNeeded; - + //For graphics and compute shader stages, cache all the argument buffers, offsets and track the min/max indices if(m_commandEncoderType == CommandEncoderType::Render) { @@ -305,11 +305,11 @@ namespace AZ mtlVertexArgBuffers[slotIndex] = argBuffer; mtlVertexArgBufferOffsets[slotIndex] = argBufferOffset; bufferVertexRegisterIdMin = AZStd::min(slotIndex, bufferVertexRegisterIdMin); - bufferVertexRegisterIdMax = AZStd::max(slotIndex, bufferVertexRegisterIdMax); + bufferVertexRegisterIdMax = AZStd::max(slotIndex, bufferVertexRegisterIdMax); mtlRenderStagesForNullDescHeap = shaderResourceGroup->IsNullHeapNeededForVertexStage(srgResourcesVisInfo) ? mtlRenderStagesForNullDescHeap | MTLRenderStageVertex : mtlRenderStagesForNullDescHeap; } - + if( numBitsSet > 1 || srgVisInfo == RHI::ShaderStageMask::Fragment) { mtlFragmentOrComputeArgBuffers[slotIndex] = argBuffer; @@ -328,7 +328,7 @@ namespace AZ } } } - + //Check if the srg has been updated or if the srg resources visibility hash has been updated //as it is possible for draw items to have different PSOs in the same pass. const AZ::HashValue64 srgResourcesVisHash = pipelineLayout.GetSrgResourcesVisibilityHash(srgVisIndex); @@ -337,8 +337,8 @@ namespace AZ bindings.m_srgVisHashByIndex[slot] = srgResourcesVisHash; if(srgVisInfo != RHI::ShaderStageMask::None) { - - + + //For graphics and compute encoder make the resource resident (call UseResource) for the duration //of the work associated with the current scope and ensure that it's in a //format compatible with the appropriate metal function. @@ -353,7 +353,7 @@ namespace AZ } } } - + //For graphics and compute encoder bind all the argument buffers if(m_commandEncoderType == CommandEncoderType::Render) { @@ -362,7 +362,7 @@ namespace AZ bufferVertexRegisterIdMax, mtlVertexArgBuffers, mtlVertexArgBufferOffsets); - + BindArgumentBuffers(RHI::ShaderStage::Fragment, bufferFragmentOrComputeRegisterIdMin, bufferFragmentOrComputeRegisterIdMax, @@ -377,40 +377,40 @@ namespace AZ mtlFragmentOrComputeArgBuffers, mtlFragmentOrComputeArgBufferOffsets); } - + id renderEncoder = GetEncoder>(); id computeEncoder = GetEncoder>(); - + //Call UseResource on all resources for Compute stage for (const auto& key : resourcesToMakeResidentCompute) { AZStd::vector> resourcesToProcessVec(key.second.begin(), key.second.end()); - + [computeEncoder useResources: &resourcesToProcessVec[0] count: resourcesToProcessVec.size() usage: key.first]; - + } - + //Call UseResource on all resources for Vertex and Fragment stages for (const auto& key : resourcesToMakeResidentGraphics) { - + AZStd::vector> resourcesToProcessVec(key.second.begin(), key.second.end()); - + [renderEncoder useResources: &resourcesToProcessVec[0] count: resourcesToProcessVec.size() usage: key.first.first stages: key.first.second]; } - + if(bindNullDescriptorHeap) { MakeHeapsResident(mtlRenderStagesForNullDescHeap); } return true; } - + void CommandList::BindArgumentBuffers(RHI::ShaderStage shaderStage, uint16_t registerIdMin, uint16_t registerIdMax, @@ -428,7 +428,7 @@ namespace AZ if(mtlArgBuffers[i] == nil) { NSRange range = { startingIndex, i-startingIndex }; - + switch(shaderStage) { case RHI::ShaderStage::Vertex: @@ -462,7 +462,7 @@ namespace AZ } trackingRange = false; - + } } else @@ -475,13 +475,13 @@ namespace AZ } } } - + void CommandList::Submit(const RHI::DrawItem& drawItem) { AZ_PROFILE_FUNCTION(RHI); - + CreateEncoder(CommandEncoderType::Render); - + RHI::CommandListScissorState scissorState; if (drawItem.m_scissorsCount) { @@ -496,15 +496,15 @@ namespace AZ } CommitViewportState(); CommitScissorState(); - + const PipelineState* pipelineState = static_cast(drawItem.m_pipelineState); AZ_Assert(pipelineState, "PipelineState can not be null"); - + if(m_renderPassMultiSampleState != pipelineState->m_pipelineStateMultiSampleState) { AZ_Assert(false,"MultisampleState in the image descriptor needs to match the one provided in the pipeline state"); } - + id renderEncoder = GetEncoder>(); bool bindResourceSuccessfull = CommitShaderResources(drawItem); if(!bindResourceSuccessfull) @@ -512,21 +512,21 @@ namespace AZ AZ_Assert(false, "Resource binding was unsuccessfully."); return; } - + SetStreamBuffers(drawItem.m_streamBufferViews, drawItem.m_streamBufferViewCount); SetStencilRef(drawItem.m_stencilRef); MTLPrimitiveType mtlPrimType = pipelineState->GetPipelineTopology(); - + switch (drawItem.m_arguments.m_type) { case RHI::DrawType::Indexed: { const RHI::DrawIndexed& indexed = drawItem.m_arguments.m_indexed; - + const RHI::IndexBufferView& indexBuffDescriptor = *drawItem.m_indexBufferView; AZ::HashValue64 indicesHash = indexBuffDescriptor.GetHash(); - + m_state.m_indicesHash = indicesHash; const Buffer * buff = static_cast(indexBuffDescriptor.GetBuffer()); id mtlBuff = buff->GetMemoryView().GetGpuAddress>(); @@ -534,7 +534,7 @@ namespace AZ MTLIndexTypeUInt16 : MTLIndexTypeUInt32; uint32_t indexTypeSize = 0; GetIndexTypeSizeInBytes(mtlIndexType, indexTypeSize); - + uint32_t indexOffset = indexBuffDescriptor.GetByteOffset() + (indexed.m_indexOffset * indexTypeSize) + buff->GetMemoryView().GetOffset(); [renderEncoder drawIndexedPrimitives: mtlPrimType indexCount: indexed.m_indexCount @@ -546,15 +546,15 @@ namespace AZ baseInstance: indexed.m_instanceOffset]; break; } - + case RHI::DrawType::Linear: - { + { const RHI::DrawLinear& linear = drawItem.m_arguments.m_linear; [renderEncoder drawPrimitives: mtlPrimType vertexStart: linear.m_vertexOffset vertexCount: linear.m_vertexCount instanceCount: linear.m_instanceCount - baseInstance: linear.m_instanceOffset]; + baseInstance: linear.m_instanceOffset]; break; } } @@ -576,7 +576,7 @@ namespace AZ { CommandListBase::Shutdown(); } - + void CommandList::SetPipelineState(const PipelineState* pipelineState) { if (m_state.m_pipelineState != pipelineState) @@ -608,7 +608,7 @@ namespace AZ AZ_Assert(false, "Type not supported."); } } - + ShaderResourceBindings& bindings = GetShaderResourceBindingsByPipelineType(pipelineState->GetType()); for (size_t i = 0; i < bindings.m_srgsByIndex.size(); ++i) { @@ -623,7 +623,7 @@ namespace AZ } } } - + void CommandList::SetStencilRef(uint8_t stencilRef) { if (m_state.m_stencilRef != stencilRef) @@ -633,24 +633,24 @@ namespace AZ m_state.m_stencilRef = stencilRef; } } - + void CommandList::SetStreamBuffers(const RHI::StreamBufferView* streams, uint32_t count) { uint16_t bufferArrayLen = 0; AZStd::array, METAL_MAX_ENTRIES_BUFFER_ARG_TABLE> mtlStreamBuffers; AZStd::array mtlStreamBufferOffsets; - + AZ::HashValue64 streamsHash = AZ::HashValue64{0}; for (uint32_t i = 0; i < count; ++i) { streamsHash = AZ::TypeHash64(streamsHash, streams[i].GetHash()); } - + if (streamsHash != m_state.m_streamsHash) { m_state.m_streamsHash = streamsHash; AZ_Assert(count <= METAL_MAX_ENTRIES_BUFFER_ARG_TABLE , "Slots needed cannot exceed METAL_MAX_ENTRIES_BUFFER_ARG_TABLE"); - + NSRange range = {METAL_MAX_ENTRIES_BUFFER_ARG_TABLE - count, count}; //The stream buffers are populated from bottom to top as the top slots are taken by argument buffers for (int i = count-1; i >= 0; --i) @@ -671,7 +671,7 @@ namespace AZ withRange: range]; } } - + void CommandList::SetRasterizerState(const RasterizerState& rastState) { id renderEncoder = GetEncoder>(); @@ -681,17 +681,17 @@ namespace AZ [renderEncoder setTriangleFillMode: rastState.m_triangleFillMode]; [renderEncoder setDepthClipMode: rastState.m_depthClipMode]; } - + void CommandList::SetShaderResourceGroupForDraw(const RHI::ShaderResourceGroup& shaderResourceGroup) { SetShaderResourceGroup(static_cast(&shaderResourceGroup)); } - + void CommandList::SetShaderResourceGroupForDispatch(const RHI::ShaderResourceGroup& shaderResourceGroup) { SetShaderResourceGroup(static_cast(&shaderResourceGroup)); } - + CommandList::ShaderResourceBindings& CommandList::GetShaderResourceBindingsByPipelineType(RHI::PipelineStateType pipelineType) { return m_state.m_bindingsByPipe[static_cast(pipelineType)]; @@ -706,15 +706,15 @@ namespace AZ AZ_Assert(false, "Pipeline state not provided"); return false; } - + SetPipelineState(pipelineState); - + // Assign shader resource groups from the item to slot bindings. for (uint32_t srgIndex = 0; srgIndex < item.m_shaderResourceGroupCount; ++srgIndex) { SetShaderResourceGroup(static_cast(item.m_shaderResourceGroups[srgIndex])); } - + if (item.m_uniqueShaderResourceGroup) { SetShaderResourceGroup(static_cast(item.m_uniqueShaderResourceGroup)); @@ -730,7 +730,7 @@ namespace AZ { return; } - + AZ_PROFILE_FUNCTION(RHI); const auto& viewports = m_state.m_viewportState.m_states; MTLViewport metalViewports[viewports.size()]; @@ -744,7 +744,7 @@ namespace AZ metalViewports[i].znear = viewports[i].m_minZ; metalViewports[i].zfar = viewports[i].m_maxZ; } - + id renderEncoder = GetEncoder>(); [renderEncoder setViewports: metalViewports count: viewports.size()]; @@ -760,7 +760,7 @@ namespace AZ AZStd::array metalScissorRects; const auto& scissors = m_state.m_scissorState.m_states; - + AZ_Assert(scissors.size() <= MaxScissorsAllowed , "Number of scissors violate the maximum number of scissors allowed"); for (uint32_t i = 0; i < scissors.size(); ++i) { diff --git a/Gems/Atom/RHI/Metal/Code/Source/RHI/PipelineLibrary.cpp b/Gems/Atom/RHI/Metal/Code/Source/RHI/PipelineLibrary.cpp index cd0d152f7c..63d741dffd 100644 --- a/Gems/Atom/RHI/Metal/Code/Source/RHI/PipelineLibrary.cpp +++ b/Gems/Atom/RHI/Metal/Code/Source/RHI/PipelineLibrary.cpp @@ -27,7 +27,7 @@ namespace AZ { } - RHI::ResultCode PipelineLibrary::MergeIntoInternal(AZStd::array_view pipelineLibraries) + RHI::ResultCode PipelineLibrary::MergeIntoInternal(AZStd::span pipelineLibraries) { return RHI::ResultCode::Success; } diff --git a/Gems/Atom/RHI/Metal/Code/Source/RHI/PipelineLibrary.h b/Gems/Atom/RHI/Metal/Code/Source/RHI/PipelineLibrary.h index 8ec5f257c9..f462e20a8e 100644 --- a/Gems/Atom/RHI/Metal/Code/Source/RHI/PipelineLibrary.h +++ b/Gems/Atom/RHI/Metal/Code/Source/RHI/PipelineLibrary.h @@ -30,7 +30,7 @@ namespace AZ // RHI::PipelineLibrary RHI::ResultCode InitInternal(RHI::Device& device, const RHI::PipelineLibraryData* serializedData) override; void ShutdownInternal() override; - RHI::ResultCode MergeIntoInternal(AZStd::array_view libraries) override; + RHI::ResultCode MergeIntoInternal(AZStd::span libraries) override; RHI::ConstPtr GetSerializedDataInternal() const override; ////////////////////////////////////////////////////////////////////////// diff --git a/Gems/Atom/RHI/Metal/Code/Source/RHI/ShaderResourceGroupPool.cpp b/Gems/Atom/RHI/Metal/Code/Source/RHI/ShaderResourceGroupPool.cpp index fa962697e1..fac4c5621b 100644 --- a/Gems/Atom/RHI/Metal/Code/Source/RHI/ShaderResourceGroupPool.cpp +++ b/Gems/Atom/RHI/Metal/Code/Source/RHI/ShaderResourceGroupPool.cpp @@ -37,7 +37,7 @@ namespace AZ RHI::ResultCode ShaderResourceGroupPool::InitGroupInternal(RHI::ShaderResourceGroup& groupBase) { ShaderResourceGroup& group = static_cast(groupBase); - + for (size_t i = 0; i < RHI::Limits::Device::FrameCountMax; ++i) { auto argBuffer = ArgumentBuffer::Create(); @@ -82,7 +82,7 @@ namespace AZ for (const RHI::ShaderInputImageDescriptor& shaderInputImage : layout->GetShaderInputListForImages()) { const RHI::ShaderInputImageIndex imageInputIndex(shaderInputIndex); - AZStd::array_view> imageViews = groupData.GetImageViewArray(imageInputIndex); + AZStd::span> imageViews = groupData.GetImageViewArray(imageInputIndex); argBuffer.UpdateImageViews(shaderInputImage, imageInputIndex, imageViews); ++shaderInputIndex; } @@ -91,7 +91,7 @@ namespace AZ for (const RHI::ShaderInputSamplerDescriptor& shaderInputSampler : layout->GetShaderInputListForSamplers()) { const RHI::ShaderInputSamplerIndex samplerInputIndex(shaderInputIndex); - AZStd::array_view samplerStates = groupData.GetSamplerArray(samplerInputIndex); + AZStd::span samplerStates = groupData.GetSamplerArray(samplerInputIndex); argBuffer.UpdateSamplers(shaderInputSampler, samplerInputIndex, samplerStates); ++shaderInputIndex; } @@ -100,7 +100,7 @@ namespace AZ for (const RHI::ShaderInputBufferDescriptor& shaderInputBuffer : layout->GetShaderInputListForBuffers()) { const RHI::ShaderInputBufferIndex bufferInputIndex(shaderInputIndex); - AZStd::array_view> bufferViews = groupData.GetBufferViewArray(bufferInputIndex); + AZStd::span> bufferViews = groupData.GetBufferViewArray(bufferInputIndex); argBuffer.UpdateBufferViews(shaderInputBuffer, bufferInputIndex, bufferViews); ++shaderInputIndex; } diff --git a/Gems/Atom/RHI/Null/Code/Source/RHI/PipelineLibrary.h b/Gems/Atom/RHI/Null/Code/Source/RHI/PipelineLibrary.h index 1edd1ee8bc..e30b4c0ac7 100644 --- a/Gems/Atom/RHI/Null/Code/Source/RHI/PipelineLibrary.h +++ b/Gems/Atom/RHI/Null/Code/Source/RHI/PipelineLibrary.h @@ -30,7 +30,7 @@ namespace AZ // RHI::PipelineLibrary RHI::ResultCode InitInternal([[maybe_unused]] RHI::Device& device, [[maybe_unused]] const RHI::PipelineLibraryData* serializedData) override { return RHI::ResultCode::Success;} void ShutdownInternal() override {} - RHI::ResultCode MergeIntoInternal([[maybe_unused]] AZStd::array_view libraries) override { return RHI::ResultCode::Success;} + RHI::ResultCode MergeIntoInternal([[maybe_unused]] AZStd::span libraries) override { return RHI::ResultCode::Success;} RHI::ConstPtr GetSerializedDataInternal() const override { return nullptr;} ////////////////////////////////////////////////////////////////////////// }; diff --git a/Gems/Atom/RHI/Vulkan/Code/Include/Atom/RHI.Reflect/Vulkan/ShaderStageFunction.h b/Gems/Atom/RHI/Vulkan/Code/Include/Atom/RHI.Reflect/Vulkan/ShaderStageFunction.h index 799e4f3b89..7627100a05 100644 --- a/Gems/Atom/RHI/Vulkan/Code/Include/Atom/RHI.Reflect/Vulkan/ShaderStageFunction.h +++ b/Gems/Atom/RHI/Vulkan/Code/Include/Atom/RHI.Reflect/Vulkan/ShaderStageFunction.h @@ -9,7 +9,7 @@ #include #include -#include +#include #include #include #include @@ -21,7 +21,7 @@ namespace AZ namespace Vulkan { using ShaderByteCode = AZStd::vector; - using ShaderByteCodeView = AZStd::array_view; + using ShaderByteCodeView = AZStd::span; /** * A set of indices used to access physical sub-stages within a virtual stage. diff --git a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/CommandList.cpp b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/CommandList.cpp index c74b9d4d13..c1d87b0211 100644 --- a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/CommandList.cpp +++ b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/CommandList.cpp @@ -76,12 +76,12 @@ namespace AZ void CommandList::SetViewports(const RHI::Viewport* rhiViewports, uint32_t count) { - m_state.m_viewportState.Set(AZStd::array_view(rhiViewports, count)); + m_state.m_viewportState.Set(AZStd::span(rhiViewports, count)); } void CommandList::SetScissors(const RHI::Scissor* rhiScissors, uint32_t count) { - m_state.m_scissorState.Set(AZStd::array_view(rhiScissors, count)); + m_state.m_scissorState.Set(AZStd::span(rhiScissors, count)); } void CommandList::SetShaderResourceGroupForDraw(const RHI::ShaderResourceGroup& shaderResourceGroup) @@ -625,7 +625,7 @@ namespace AZ return ConvertResult(vkResult); } - void CommandList::ExecuteSecondaryCommandLists(const AZStd::array_view>& commands) + void CommandList::ExecuteSecondaryCommandLists(const AZStd::span>& commands) { AZ_Assert(m_isUpdating, "Secondary command buffers must be executed between BeginCommandBuffer() and EndCommandBuffer()."); AZ_Assert(m_descriptor.m_level == VK_COMMAND_BUFFER_LEVEL_PRIMARY, "Trying to execute commands from a secondary command list"); diff --git a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/CommandList.h b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/CommandList.h index 799c706d60..651842e081 100644 --- a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/CommandList.h +++ b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/CommandList.h @@ -17,7 +17,7 @@ #include #include #include -#include +#include #include #include #include @@ -103,7 +103,7 @@ namespace AZ bool IsInsideRenderPass() const; const Framebuffer* GetActiveFramebuffer() const; const RenderPass* GetActiveRenderpass() const; - void ExecuteSecondaryCommandLists(const AZStd::array_view>& commands); + void ExecuteSecondaryCommandLists(const AZStd::span>& commands); uint32_t GetQueueFamilyIndex() const; diff --git a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/DescriptorSet.cpp b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/DescriptorSet.cpp index 815eba086c..9a759d1842 100644 --- a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/DescriptorSet.cpp +++ b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/DescriptorSet.cpp @@ -39,7 +39,7 @@ namespace AZ } } - void DescriptorSet::UpdateBufferViews(uint32_t layoutIndex, const AZStd::array_view>& bufViews) + void DescriptorSet::UpdateBufferViews(uint32_t layoutIndex, const AZStd::span>& bufViews) { const DescriptorSetLayout& layout = *m_descriptor.m_descriptorSetLayout; VkDescriptorType type = layout.GetDescriptorType(layoutIndex); @@ -119,7 +119,7 @@ namespace AZ m_updateData.push_back(AZStd::move(data)); } - void DescriptorSet::UpdateImageViews(uint32_t layoutIndex, const AZStd::array_view>& imageViews, RHI::ShaderInputImageType imageType) + void DescriptorSet::UpdateImageViews(uint32_t layoutIndex, const AZStd::span>& imageViews, RHI::ShaderInputImageType imageType) { const DescriptorSetLayout& layout = *m_descriptor.m_descriptorSetLayout; @@ -169,7 +169,7 @@ namespace AZ m_updateData.push_back(AZStd::move(data)); } - void DescriptorSet::UpdateSamplers(uint32_t layoutIndex, const AZStd::array_view& samplers) + void DescriptorSet::UpdateSamplers(uint32_t layoutIndex, const AZStd::span& samplers) { auto& device = static_cast(GetDevice()); @@ -189,7 +189,7 @@ namespace AZ m_updateData.push_back(AZStd::move(data)); } - void DescriptorSet::UpdateConstantData(AZStd::array_view rawData) + void DescriptorSet::UpdateConstantData(AZStd::span rawData) { AZ_Assert(m_constantDataBuffer, "Null constant buffer"); const DescriptorSetLayout& layout = *m_descriptor.m_descriptorSetLayout; diff --git a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/DescriptorSet.h b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/DescriptorSet.h index 24fb587ade..1610a09418 100644 --- a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/DescriptorSet.h +++ b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/DescriptorSet.h @@ -13,7 +13,7 @@ #include #include #include -#include +#include #include #include @@ -57,10 +57,10 @@ namespace AZ void CommitUpdates(); - void UpdateBufferViews(uint32_t index, const AZStd::array_view>& bufViews); - void UpdateImageViews(uint32_t index, const AZStd::array_view>& imageViews, RHI::ShaderInputImageType imageType); - void UpdateSamplers(uint32_t index, const AZStd::array_view& samplers); - void UpdateConstantData(AZStd::array_view data); + void UpdateBufferViews(uint32_t index, const AZStd::span>& bufViews); + void UpdateImageViews(uint32_t index, const AZStd::span>& imageViews, RHI::ShaderInputImageType imageType); + void UpdateSamplers(uint32_t index, const AZStd::span& samplers); + void UpdateConstantData(AZStd::span data); RHI::Ptr GetConstantDataBufferView() const; diff --git a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/DescriptorSetLayout.cpp b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/DescriptorSetLayout.cpp index 564614a0a8..1c8e21b22f 100644 --- a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/DescriptorSetLayout.cpp +++ b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/DescriptorSetLayout.cpp @@ -152,12 +152,12 @@ namespace AZ RHI::ResultCode DescriptorSetLayout::BuildDescriptorSetLayoutBindings() { - const AZStd::array_view bufferDescs = m_shaderResourceGroupLayout->GetShaderInputListForBuffers(); - const AZStd::array_view imageDescs = m_shaderResourceGroupLayout->GetShaderInputListForImages(); - const AZStd::array_view bufferUnboundedArrayDescs = m_shaderResourceGroupLayout->GetShaderInputListForBufferUnboundedArrays(); - const AZStd::array_view imageUnboundedArrayDescs = m_shaderResourceGroupLayout->GetShaderInputListForImageUnboundedArrays(); - const AZStd::array_view samplerDescs = m_shaderResourceGroupLayout->GetShaderInputListForSamplers(); - const AZStd::array_view& staticSamplerDescs = m_shaderResourceGroupLayout->GetStaticSamplers(); + const AZStd::span bufferDescs = m_shaderResourceGroupLayout->GetShaderInputListForBuffers(); + const AZStd::span imageDescs = m_shaderResourceGroupLayout->GetShaderInputListForImages(); + const AZStd::span bufferUnboundedArrayDescs = m_shaderResourceGroupLayout->GetShaderInputListForBufferUnboundedArrays(); + const AZStd::span imageUnboundedArrayDescs = m_shaderResourceGroupLayout->GetShaderInputListForImageUnboundedArrays(); + const AZStd::span samplerDescs = m_shaderResourceGroupLayout->GetShaderInputListForSamplers(); + const AZStd::span& staticSamplerDescs = m_shaderResourceGroupLayout->GetStaticSamplers(); // The + 1 is for Constant Data. m_descriptorSetLayoutBindings.reserve( @@ -173,7 +173,7 @@ namespace AZ m_constantDataSize = m_shaderResourceGroupLayout->GetConstantDataSize(); if (m_constantDataSize) { - AZStd::array_view inputListForConstants = m_shaderResourceGroupLayout->GetShaderInputListForConstants(); + AZStd::span inputListForConstants = m_shaderResourceGroupLayout->GetShaderInputListForConstants(); AZ_Assert(!inputListForConstants.empty(), "Empty constant input list"); m_descriptorSetLayoutBindings.emplace_back(VkDescriptorSetLayoutBinding{}); VkDescriptorSetLayoutBinding& vbinding = m_descriptorSetLayoutBindings.back(); diff --git a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/FrameGraphExecuteGroup.cpp b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/FrameGraphExecuteGroup.cpp index 12efb488fb..8df7aac253 100644 --- a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/FrameGraphExecuteGroup.cpp +++ b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/FrameGraphExecuteGroup.cpp @@ -81,12 +81,12 @@ namespace AZ { } - AZStd::array_view FrameGraphExecuteGroup::GetScopes() const + AZStd::span FrameGraphExecuteGroup::GetScopes() const { - return AZStd::array_view(&m_scope, 1); + return AZStd::span(&m_scope, 1); } - AZStd::array_view> FrameGraphExecuteGroup::GetCommandLists() const + AZStd::span> FrameGraphExecuteGroup::GetCommandLists() const { return m_secondaryCommands; } diff --git a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/FrameGraphExecuteGroup.h b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/FrameGraphExecuteGroup.h index c7726beb76..f33775a9fa 100644 --- a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/FrameGraphExecuteGroup.h +++ b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/FrameGraphExecuteGroup.h @@ -44,8 +44,8 @@ namespace AZ ////////////////////////////////////////////////////////////////////////// // FrameGraphExecuteGroupBase - AZStd::array_view GetScopes() const override; - AZStd::array_view> GetCommandLists() const override; + AZStd::span GetScopes() const override; + AZStd::span> GetCommandLists() const override; ////////////////////////////////////////////////////////////////////////// //! Set the render context and subpass that will be used by this execute group. diff --git a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/FrameGraphExecuteGroupBase.h b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/FrameGraphExecuteGroupBase.h index 529c452658..c1666d5ef2 100644 --- a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/FrameGraphExecuteGroupBase.h +++ b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/FrameGraphExecuteGroupBase.h @@ -37,9 +37,9 @@ namespace AZ const RHI::GraphGroupId& GetGroupId() const; - virtual AZStd::array_view GetScopes() const = 0; + virtual AZStd::span GetScopes() const = 0; - virtual AZStd::array_view> GetCommandLists() const = 0; + virtual AZStd::span> GetCommandLists() const = 0; protected: RHI::Ptr AcquireCommandList(VkCommandBufferLevel level) const; diff --git a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/FrameGraphExecuteGroupMerged.cpp b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/FrameGraphExecuteGroupMerged.cpp index 84b6cafa7d..053afc802e 100644 --- a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/FrameGraphExecuteGroupMerged.cpp +++ b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/FrameGraphExecuteGroupMerged.cpp @@ -113,14 +113,14 @@ namespace AZ scope->EmitScopeBarriers(*m_commandList, Scope::BarrierSlot::Epilogue); } - AZStd::array_view FrameGraphExecuteGroupMerged::GetScopes() const + AZStd::span FrameGraphExecuteGroupMerged::GetScopes() const { return m_scopes; } - AZStd::array_view> FrameGraphExecuteGroupMerged::GetCommandLists() const + AZStd::span> FrameGraphExecuteGroupMerged::GetCommandLists() const { - return AZStd::array_view>(&m_commandList, 1); + return AZStd::span>(&m_commandList, 1); } void FrameGraphExecuteGroupMerged::SetPrimaryCommandList(CommandList& commandList) @@ -128,7 +128,7 @@ namespace AZ m_commandList = &commandList; } - void FrameGraphExecuteGroupMerged::SetRenderPasscontexts(AZStd::array_view renderPassContexts) + void FrameGraphExecuteGroupMerged::SetRenderPasscontexts(AZStd::span renderPassContexts) { m_renderPassContexts = renderPassContexts; } diff --git a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/FrameGraphExecuteGroupMerged.h b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/FrameGraphExecuteGroupMerged.h index 82c85ce3fe..47f97806a2 100644 --- a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/FrameGraphExecuteGroupMerged.h +++ b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/FrameGraphExecuteGroupMerged.h @@ -33,12 +33,12 @@ namespace AZ //! Set the command list that the group will use. void SetPrimaryCommandList(CommandList& commandList); //! Set the list of renderpasses that the group will use. - void SetRenderPasscontexts(AZStd::array_view renderPassContexts); + void SetRenderPasscontexts(AZStd::span renderPassContexts); ////////////////////////////////////////////////////////////////////////// // FrameGraphExecuteGroupBase - AZStd::array_view GetScopes() const override; - AZStd::array_view> GetCommandLists() const override; + AZStd::span GetScopes() const override; + AZStd::span> GetCommandLists() const override; ////////////////////////////////////////////////////////////////////////// private: @@ -60,7 +60,7 @@ namespace AZ // Primary command list used to record the work. RHI::Ptr m_commandList; // List of renderpasses and framebuffers used by the scopes in the group. - AZStd::array_view m_renderPassContexts; + AZStd::span m_renderPassContexts; }; } } diff --git a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/PipelineLayout.cpp b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/PipelineLayout.cpp index f627ddf2cc..e61fc7817a 100644 --- a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/PipelineLayout.cpp +++ b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/PipelineLayout.cpp @@ -48,7 +48,7 @@ namespace AZ template void AddShaderInputs( RHI::ShaderResourceGroupLayout& srgLayout, - AZStd::array_view shaderInputs, + AZStd::span shaderInputs, const uint32_t bindingSlot, const RHI::ShaderResourceGroupBindingInfo& srgBidingInfo) { diff --git a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/PipelineLibrary.cpp b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/PipelineLibrary.cpp index a797285981..c9e35a481b 100644 --- a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/PipelineLibrary.cpp +++ b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/PipelineLibrary.cpp @@ -31,7 +31,7 @@ namespace AZ VkPipelineCacheCreateInfo createInfo{}; createInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO; createInfo.pNext = nullptr; - createInfo.flags = 0; + createInfo.flags = 0; createInfo.initialDataSize = 0; createInfo.pInitialData = nullptr; @@ -59,7 +59,7 @@ namespace AZ } } - RHI::ResultCode PipelineLibrary::MergeIntoInternal(AZStd::array_view libraries) + RHI::ResultCode PipelineLibrary::MergeIntoInternal(AZStd::span libraries) { auto& device = static_cast(GetDevice()); if (libraries.empty()) diff --git a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/PipelineLibrary.h b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/PipelineLibrary.h index 03d78970da..34c254ec65 100644 --- a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/PipelineLibrary.h +++ b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/PipelineLibrary.h @@ -42,7 +42,7 @@ namespace AZ // RHI::PipelineLibrary RHI::ResultCode InitInternal(RHI::Device& device, const RHI::PipelineLibraryData* serializedData) override; void ShutdownInternal() override; - RHI::ResultCode MergeIntoInternal(AZStd::array_view libraries) override; + RHI::ResultCode MergeIntoInternal(AZStd::span libraries) override; RHI::ConstPtr GetSerializedDataInternal() const override; ////////////////////////////////////////////////////////////////////////// diff --git a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/RenderPass.cpp b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/RenderPass.cpp index a3282067a7..6b629c675d 100644 --- a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/RenderPass.cpp +++ b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/RenderPass.cpp @@ -77,20 +77,20 @@ namespace AZ return m_descriptor.m_attachmentCount; } - AZStd::array_view RenderPass::GetSubpassAttachments(const uint32_t subpassIndex, const AttachmentType type) const + AZStd::span RenderPass::GetSubpassAttachments(const uint32_t subpassIndex, const AttachmentType type) const { const SubpassDescriptor& descriptor = m_descriptor.m_subpassDescriptors[subpassIndex]; switch (type) { case AttachmentType::Color: - return AZStd::array_view(descriptor.m_rendertargetAttachments.begin(), descriptor.m_rendertargetCount); + return AZStd::span(descriptor.m_rendertargetAttachments.begin(), descriptor.m_rendertargetCount); case AttachmentType::DepthStencil: return descriptor.m_depthStencilAttachment.IsValid() ? - AZStd::array_view(&descriptor.m_depthStencilAttachment, 1) : AZStd::array_view(); + AZStd::span(&descriptor.m_depthStencilAttachment, 1) : AZStd::span(); case AttachmentType::InputAttachment: - return AZStd::array_view(descriptor.m_subpassInputAttachments.begin(), descriptor.m_subpassInputCount); + return AZStd::span(descriptor.m_subpassInputAttachments.begin(), descriptor.m_subpassInputCount); case AttachmentType::Resolve: - return AZStd::array_view(descriptor.m_resolveAttachments.begin(), descriptor.m_rendertargetCount); + return AZStd::span(descriptor.m_resolveAttachments.begin(), descriptor.m_rendertargetCount); default: AZ_Assert(false, "Invalid attachment type %d", type); return {}; diff --git a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/RenderPass.h b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/RenderPass.h index 8aaef51bd0..1fb3018f3a 100644 --- a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/RenderPass.h +++ b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/RenderPass.h @@ -147,7 +147,7 @@ namespace AZ void BuildSubpassDescriptions(const AZStd::vector& subpassReferences, AZStd::vector& subpassDescriptions) const; void BuildSubpassDependencies(AZStd::vector& subpassDependencies) const; - AZStd::array_view GetSubpassAttachments(const uint32_t subpassIndex, const AttachmentType type) const; + AZStd::span GetSubpassAttachments(const uint32_t subpassIndex, const AttachmentType type) const; Descriptor m_descriptor; VkRenderPass m_nativeRenderPass = VK_NULL_HANDLE; @@ -157,7 +157,7 @@ namespace AZ template void RenderPass::BuildAttachmentReferences(uint32_t subpassIndex, SubpassReferences& subpasReferences) const { - AZStd::array_view subpassAttachmentList = GetSubpassAttachments(subpassIndex, type); + AZStd::span subpassAttachmentList = GetSubpassAttachments(subpassIndex, type); AZStd::vector& attachmentReferenceList = subpasReferences.m_attachmentReferences[static_cast(type)]; attachmentReferenceList.resize(subpassAttachmentList.size()); for (uint32_t index = 0; index < subpassAttachmentList.size(); ++index) diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Edit/Material/MaterialPropertyId.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Edit/Material/MaterialPropertyId.h index fd63494f30..f669406172 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Edit/Material/MaterialPropertyId.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Edit/Material/MaterialPropertyId.h @@ -9,7 +9,7 @@ #pragma once #include -#include +#include namespace AZ { @@ -34,7 +34,7 @@ namespace AZ explicit MaterialPropertyId(AZStd::string_view propertyName); MaterialPropertyId(AZStd::string_view groupName, AZStd::string_view propertyName); MaterialPropertyId(const Name& groupName, const Name& propertyName); - explicit MaterialPropertyId(const AZStd::array_view names); + explicit MaterialPropertyId(const AZStd::span names); AZ_DEFAULT_COPY_MOVE(MaterialPropertyId); diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/GpuQuery/GpuQueryTypes.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/GpuQuery/GpuQueryTypes.h index 0a06c48989..9c20de36bb 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/GpuQuery/GpuQueryTypes.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/GpuQuery/GpuQueryTypes.h @@ -10,7 +10,7 @@ #include #include -#include +#include #include @@ -65,7 +65,7 @@ namespace AZ static void Reflect(AZ::ReflectContext* context); PipelineStatisticsResult() = default; - PipelineStatisticsResult(AZStd::array_view&& statisticsResultArray); + PipelineStatisticsResult(AZStd::span&& statisticsResultArray); PipelineStatisticsResult& operator+=(const PipelineStatisticsResult& rhs); diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/GpuQuery/QueryPool.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/GpuQuery/QueryPool.h index f152d92973..0ca88b3d33 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/GpuQuery/QueryPool.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/GpuQuery/QueryPool.h @@ -15,7 +15,7 @@ #include -#include +#include namespace AZ { @@ -59,15 +59,15 @@ namespace AZ protected: QueryPool(uint32_t queryCapacity, uint32_t queriesPerResult, RHI::QueryType queryType, RHI::PipelineStatisticsFlags statisticsFlags); - // Returns the RHI Query array. - AZStd::array_view> GetRhiQueryArray() const; + // Returns the RHI Query array as a span. + AZStd::span> GetRhiQueryArray() const; private: // Distributes the RHI Query indices into sub-intervals. Each sub interval is assigned to a RPI Query. void CreateRhiQueryIntervals(); - // Returns an array of RHI Queries depending on the indices that are provided. - AZStd::array_view> GetRhiQueriesFromInterval(const RHI::Interval& rhiQueryIndices) const; + // Returns a span of RHI Queries depending on the indices that are provided. + AZStd::span> GetRhiQueriesFromInterval(const RHI::Interval& rhiQueryIndices) const; // Returns an array of raw RHI Query pointers depending on the indices that are provided. AZStd::vector GetRawRhiQueriesFromInterval(const RHI::Interval& rhiQueryIndices) const; diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Model/Model.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Model/Model.h index 91a9a2d009..a3de586e76 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Model/Model.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Model/Model.h @@ -51,7 +51,7 @@ namespace AZ size_t GetLodCount() const; //! Returns the full list of Lods, where index 0 is the most detailed, and N-1 is the least. - AZStd::array_view> GetLods() const; + AZStd::span> GetLods() const; //! Returns whether a buffer upload is pending. bool IsUploadPending() const; diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Model/ModelLod.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Model/ModelLod.h index 0d0304a04e..9ad6edf2ce 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Model/ModelLod.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Model/ModelLod.h @@ -20,7 +20,7 @@ #include #include -#include +#include #include #include @@ -92,7 +92,7 @@ namespace AZ //! Blocks the CPU until pending buffer uploads have completed. void WaitForUpload(); - AZStd::array_view GetMeshes() const; + AZStd::span GetMeshes() const; //! Compares a ShaderInputContract to the mesh's available streams, and if any of them are optional, sets the corresponding "*_isBound" shader option. //! Call this function to update the ShaderOptionKey before fetching a ShaderVariant, to find a variant that is compatible with this mesh's streams. diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Pass/ParentPass.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Pass/ParentPass.h index f5bf11a438..c9db343203 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Pass/ParentPass.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Pass/ParentPass.h @@ -73,7 +73,7 @@ namespace AZ Ptr FindChildPass() const; //! Gets the list of children. Useful for validating hierarchies - AZStd::array_view> GetChildren() const; + AZStd::span> GetChildren() const; //! Searches the tree for the first pass that uses the given DrawListTag. const Pass* FindPass(RHI::DrawListTag drawListTag) const; diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Pass/Pass.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Pass/Pass.h index be7ac9e7a4..a3b739ade7 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Pass/Pass.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Pass/Pass.h @@ -25,7 +25,7 @@ #include #include -#include +#include #include #include diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Pass/PassAttachment.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Pass/PassAttachment.h index d60a5a8064..8ee4270373 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Pass/PassAttachment.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Pass/PassAttachment.h @@ -192,7 +192,7 @@ namespace AZ }; using PassAttachmentBindingList = AZStd::vector; - using PassAttachmentBindingListView = AZStd::array_view; + using PassAttachmentBindingListView = AZStd::span; } // namespace RPI diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Pass/PassLibrary.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Pass/PassLibrary.h index f79da54636..8db633509d 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Pass/PassLibrary.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Pass/PassLibrary.h @@ -15,7 +15,7 @@ #include #include -#include +#include namespace AZ { diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Shader/Shader.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Shader/Shader.h index be20d89d65..07354e7bfc 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Shader/Shader.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Shader/Shader.h @@ -127,7 +127,7 @@ namespace AZ const RHI::Ptr& FindFallbackShaderResourceGroupLayout() const; /// Returns the set of shader resource groups referenced by all variants in the shader asset. - AZStd::array_view> GetShaderResourceGroupLayouts() const; + AZStd::span> GetShaderResourceGroupLayouts() const; /// Returns a reference to the asset used to initialize this shader. const Data::Asset& GetAsset() const; diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Shader/ShaderResourceGroup.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Shader/ShaderResourceGroup.h index 99f1f5f598..771ea5ab31 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Shader/ShaderResourceGroup.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Shader/ShaderResourceGroup.h @@ -18,7 +18,7 @@ #include #include -#include +#include #include #include @@ -104,16 +104,16 @@ namespace AZ bool SetImage(RHI::ShaderInputImageIndex inputIndex, const Data::Instance& image, uint32_t arrayIndex = 0); /// Sets multiple RPI images for the given shader input index. - bool SetImageArray(RHI::ShaderInputNameIndex& inputIndex, AZStd::array_view> images, uint32_t arrayIndex = 0); - bool SetImageArray(RHI::ShaderInputImageIndex inputIndex, AZStd::array_view> images, uint32_t arrayIndex = 0); + bool SetImageArray(RHI::ShaderInputNameIndex& inputIndex, AZStd::span> images, uint32_t arrayIndex = 0); + bool SetImageArray(RHI::ShaderInputImageIndex inputIndex, AZStd::span> images, uint32_t arrayIndex = 0); /// Returns a single RPI image associated with the image shader input index and array offset. const Data::Instance& GetImage(RHI::ShaderInputNameIndex& inputIndex, uint32_t arrayIndex = 0) const; const Data::Instance& GetImage(RHI::ShaderInputImageIndex inputIndex, uint32_t arrayIndex = 0) const; - /// Returns an array of RPI images associated with the image shader input index. - AZStd::array_view> GetImageArray(RHI::ShaderInputNameIndex& inputIndex) const; - AZStd::array_view> GetImageArray(RHI::ShaderInputImageIndex inputIndex) const; + /// Returns a span of RPI images associated with the image shader input index. + AZStd::span> GetImageArray(RHI::ShaderInputNameIndex& inputIndex) const; + AZStd::span> GetImageArray(RHI::ShaderInputImageIndex inputIndex) const; ////////////////////////////////////////////////////////////////////////// // Methods for assignment / access of RPI Buffer types. @@ -123,17 +123,17 @@ namespace AZ bool SetBuffer(RHI::ShaderInputBufferIndex inputIndex, const Data::Instance& buffer, uint32_t arrayIndex = 0); /// Sets multiple RPI buffers for the given shader input index. - bool SetBufferArray(RHI::ShaderInputNameIndex& inputIndex, AZStd::array_view> buffers, uint32_t arrayIndex = 0); - bool SetBufferArray(RHI::ShaderInputBufferIndex inputIndex, AZStd::array_view> buffers, uint32_t arrayIndex = 0); + bool SetBufferArray(RHI::ShaderInputNameIndex& inputIndex, AZStd::span> buffers, uint32_t arrayIndex = 0); + bool SetBufferArray(RHI::ShaderInputBufferIndex inputIndex, AZStd::span> buffers, uint32_t arrayIndex = 0); /// Returns a single RPI buffer associated with the buffer shader input index and array offset. const Data::Instance& GetBuffer(RHI::ShaderInputNameIndex& inputIndex, uint32_t arrayIndex = 0) const; const Data::Instance& GetBuffer(RHI::ShaderInputBufferIndex inputIndex, uint32_t arrayIndex = 0) const; - /// Returns an array of RPI buffers associated with the buffer shader input index. - AZStd::array_view> GetBufferArray(RHI::ShaderInputNameIndex& inputIndex) const; - AZStd::array_view> GetBufferArray(RHI::ShaderInputBufferIndex inputIndex) const; - + /// Returns a span of RPI buffers associated with the buffer shader input index. + AZStd::span> GetBufferArray(RHI::ShaderInputNameIndex& inputIndex) const; + AZStd::span> GetBufferArray(RHI::ShaderInputBufferIndex inputIndex) const; + //! Reset image and buffer views so that it won't hold references for any RHI resources void ResetViews(); @@ -145,19 +145,19 @@ namespace AZ bool SetImageView(RHI::ShaderInputImageIndex inputIndex, const RHI::ImageView* imageView, uint32_t arrayIndex = 0); /// Sets an array of image view for the given shader input index. - bool SetImageViewArray(RHI::ShaderInputNameIndex& inputIndex, AZStd::array_view imageViews, uint32_t arrayIndex = 0); - bool SetImageViewArray(RHI::ShaderInputImageIndex inputIndex, AZStd::array_view imageViews, uint32_t arrayIndex = 0); + bool SetImageViewArray(RHI::ShaderInputNameIndex& inputIndex, AZStd::span imageViews, uint32_t arrayIndex = 0); + bool SetImageViewArray(RHI::ShaderInputImageIndex inputIndex, AZStd::span imageViews, uint32_t arrayIndex = 0); /// Sets an unbounded array of image views for the given shader input index. - bool SetImageViewUnboundedArray(RHI::ShaderInputImageUnboundedArrayIndex inputIndex, AZStd::array_view imageViews); + bool SetImageViewUnboundedArray(RHI::ShaderInputImageUnboundedArrayIndex inputIndex, AZStd::span imageViews); /// Returns a single image view associated with the image shader input index and array offset. const RHI::ConstPtr& GetImageView(RHI::ShaderInputNameIndex& inputIndex, uint32_t arrayIndex = 0) const; const RHI::ConstPtr& GetImageView(RHI::ShaderInputImageIndex inputIndex, uint32_t arrayIndex = 0) const; - /// Returns an array of image views associated with the given image shader input index. - AZStd::array_view> GetImageViewArray(RHI::ShaderInputNameIndex& inputIndex) const; - AZStd::array_view> GetImageViewArray(RHI::ShaderInputImageIndex inputIndex) const; + /// Returns a span of image views associated with the given image shader input index. + AZStd::span> GetImageViewArray(RHI::ShaderInputNameIndex& inputIndex) const; + AZStd::span> GetImageViewArray(RHI::ShaderInputImageIndex inputIndex) const; ////////////////////////////////////////////////////////////////////////// // Methods for assignment / access of RHI Buffer types. @@ -167,19 +167,19 @@ namespace AZ bool SetBufferView(RHI::ShaderInputBufferIndex inputIndex, const RHI::BufferView* bufferView, uint32_t arrayIndex = 0); /// Sets an array of buffer view for the given shader input index. - bool SetBufferViewArray(RHI::ShaderInputNameIndex& inputIndex, AZStd::array_view bufferViews, uint32_t arrayIndex = 0); - bool SetBufferViewArray(RHI::ShaderInputBufferIndex inputIndex, AZStd::array_view bufferViews, uint32_t arrayIndex = 0); + bool SetBufferViewArray(RHI::ShaderInputNameIndex& inputIndex, AZStd::span bufferViews, uint32_t arrayIndex = 0); + bool SetBufferViewArray(RHI::ShaderInputBufferIndex inputIndex, AZStd::span bufferViews, uint32_t arrayIndex = 0); /// Sets an unbounded array of buffer views for the given shader input index. - bool SetBufferViewUnboundedArray(RHI::ShaderInputBufferUnboundedArrayIndex inputIndex, AZStd::array_view bufferViews); + bool SetBufferViewUnboundedArray(RHI::ShaderInputBufferUnboundedArrayIndex inputIndex, AZStd::span bufferViews); /// Returns a single buffer view associated with the buffer shader input index and array offset. const RHI::ConstPtr& GetBufferView(RHI::ShaderInputNameIndex& inputIndex, uint32_t arrayIndex = 0) const; const RHI::ConstPtr& GetBufferView(RHI::ShaderInputBufferIndex inputIndex, uint32_t arrayIndex = 0) const; - /// Returns an array of buffer views associated with the given buffer shader input index. - AZStd::array_view> GetBufferViewArray(RHI::ShaderInputNameIndex& inputIndex) const; - AZStd::array_view> GetBufferViewArray(RHI::ShaderInputBufferIndex inputIndex) const; + /// Returns a span of buffer views associated with the given buffer shader input index. + AZStd::span> GetBufferViewArray(RHI::ShaderInputNameIndex& inputIndex) const; + AZStd::span> GetBufferViewArray(RHI::ShaderInputBufferIndex inputIndex) const; ////////////////////////////////////////////////////////////////////////// // Methods for assignment / access of RHI Sampler types. @@ -189,16 +189,16 @@ namespace AZ bool SetSampler(RHI::ShaderInputSamplerIndex inputIndex, const RHI::SamplerState& sampler, uint32_t arrayIndex = 0); /// Sets an array of samplers for the given shader input index. - bool SetSamplerArray(RHI::ShaderInputNameIndex& inputIndex, AZStd::array_view samplers, uint32_t arrayIndex = 0); - bool SetSamplerArray(RHI::ShaderInputSamplerIndex inputIndex, AZStd::array_view samplers, uint32_t arrayIndex = 0); + bool SetSamplerArray(RHI::ShaderInputNameIndex& inputIndex, AZStd::span samplers, uint32_t arrayIndex = 0); + bool SetSamplerArray(RHI::ShaderInputSamplerIndex inputIndex, AZStd::span samplers, uint32_t arrayIndex = 0); /// Returns a single sampler associated with the sampler shader input index and array offset. const RHI::SamplerState& GetSampler(RHI::ShaderInputNameIndex& inputIndex, uint32_t arrayIndex) const; const RHI::SamplerState& GetSampler(RHI::ShaderInputSamplerIndex inputIndex, uint32_t arrayIndex) const; - /// Returns an array of samplers associated with the sampler shader input index. - AZStd::array_view GetSamplerArray(RHI::ShaderInputNameIndex& inputIndex) const; - AZStd::array_view GetSamplerArray(RHI::ShaderInputSamplerIndex inputIndex) const; + /// Returns a span of samplers associated with the sampler shader input index. + AZStd::span GetSamplerArray(RHI::ShaderInputNameIndex& inputIndex) const; + AZStd::span GetSamplerArray(RHI::ShaderInputSamplerIndex inputIndex) const; ////////////////////////////////////////////////////////////////////////// // Methods for assignment / access SRG constants. @@ -227,11 +227,11 @@ namespace AZ template bool SetConstant(RHI::ShaderInputConstantIndex inputIndex, const T& value, uint32_t arrayIndex); - /// Assigns an array of type T to the constant shader input. + /// Assigns a span of type T to the constant shader input. template - bool SetConstantArray(RHI::ShaderInputNameIndex& inputIndex, AZStd::array_view values); + bool SetConstantArray(RHI::ShaderInputNameIndex& inputIndex, AZStd::span values); template - bool SetConstantArray(RHI::ShaderInputConstantIndex inputIndex, AZStd::array_view values); + bool SetConstantArray(RHI::ShaderInputConstantIndex inputIndex, AZStd::span values); /// Assigns an array of type T to the constant shader input. template @@ -253,9 +253,9 @@ namespace AZ * If the strides do not match, an empty array is returned. */ template - AZStd::array_view GetConstantArray(RHI::ShaderInputNameIndex& inputIndex) const; + AZStd::span GetConstantArray(RHI::ShaderInputNameIndex& inputIndex) const; template - AZStd::array_view GetConstantArray(RHI::ShaderInputConstantIndex inputIndex) const; + AZStd::span GetConstantArray(RHI::ShaderInputConstantIndex inputIndex) const; /** * Returns the constant data as type 'T' returned by value. The size of the constant region @@ -276,9 +276,9 @@ namespace AZ template T GetConstant(RHI::ShaderInputConstantIndex inputIndex, uint32_t arrayIndex) const; - /// Returns constant data for the given shader input index as an array of bytes. - AZStd::array_view GetConstantRaw(RHI::ShaderInputNameIndex& inputIndex) const; - AZStd::array_view GetConstantRaw(RHI::ShaderInputConstantIndex inputIndex) const; + /// Returns constant data for the given shader input index as a span of bytes. + AZStd::span GetConstantRaw(RHI::ShaderInputNameIndex& inputIndex) const; + AZStd::span GetConstantRaw(RHI::ShaderInputConstantIndex inputIndex) const; private: ShaderResourceGroup() = default; @@ -415,13 +415,13 @@ namespace AZ } template - bool ShaderResourceGroup::SetConstantArray(RHI::ShaderInputConstantIndex inputIndex, AZStd::array_view values) + bool ShaderResourceGroup::SetConstantArray(RHI::ShaderInputConstantIndex inputIndex, AZStd::span values) { return m_data.SetConstantArray(inputIndex, values); } template - bool ShaderResourceGroup::SetConstantArray(RHI::ShaderInputNameIndex& inputIndex, AZStd::array_view values) + bool ShaderResourceGroup::SetConstantArray(RHI::ShaderInputNameIndex& inputIndex, AZStd::span values) { if (inputIndex.ValidateOrFindConstantIndex(GetLayout())) { @@ -433,7 +433,7 @@ namespace AZ template bool ShaderResourceGroup::SetConstantArray(RHI::ShaderInputConstantIndex inputIndex, const AZStd::array& values) { - return SetConstantArray(inputIndex, AZStd::array_view(values)); + return SetConstantArray(inputIndex, AZStd::span(values)); } template @@ -441,19 +441,19 @@ namespace AZ { if (inputIndex.ValidateOrFindConstantIndex(GetLayout())) { - return SetConstantArray(inputIndex.GetConstantIndex(), AZStd::array_view(values)); + return SetConstantArray(inputIndex.GetConstantIndex(), AZStd::span(values)); } return false; } template - AZStd::array_view ShaderResourceGroup::GetConstantArray(RHI::ShaderInputConstantIndex inputIndex) const + AZStd::span ShaderResourceGroup::GetConstantArray(RHI::ShaderInputConstantIndex inputIndex) const { return m_data.GetConstantArray(inputIndex); } template - AZStd::array_view ShaderResourceGroup::GetConstantArray(RHI::ShaderInputNameIndex& inputIndex) const + AZStd::span ShaderResourceGroup::GetConstantArray(RHI::ShaderInputNameIndex& inputIndex) const { if (inputIndex.ValidateOrFindConstantIndex(GetLayout())) { diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Buffer/BufferAsset.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Buffer/BufferAsset.h index e6fe68b21e..75556887e1 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Buffer/BufferAsset.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Buffer/BufferAsset.h @@ -16,7 +16,7 @@ #include #include -#include +#include #include @@ -46,7 +46,7 @@ namespace AZ BufferAsset() = default; ~BufferAsset() = default; - AZStd::array_view GetBuffer() const; + AZStd::span GetBuffer() const; const RHI::BufferDescriptor& GetBufferDescriptor() const; diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Image/ImageMipChainAsset.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Image/ImageMipChainAsset.h index 69c1933bd6..397b47b5d2 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Image/ImageMipChainAsset.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Image/ImageMipChainAsset.h @@ -14,7 +14,7 @@ #include -#include +#include #include @@ -64,10 +64,10 @@ namespace AZ size_t GetSubImageCount() const; //! Returns the sub-image data blob for a given mip slice and array slice (local to the group). - AZStd::array_view GetSubImageData(uint32_t mipSlice, uint32_t arraySlice) const; + AZStd::span GetSubImageData(uint32_t mipSlice, uint32_t arraySlice) const; //! Returns the sub-image data blob for a linear index (local to the group). - AZStd::array_view GetSubImageData(uint32_t subImageIndex) const; + AZStd::span GetSubImageData(uint32_t subImageIndex) const; //! Returns the sub-image layout for a single sub-image by index. const RHI::ImageSubresourceLayout& GetSubImageLayout(uint32_t subImageIndex) const; diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Image/StreamingImageAsset.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Image/StreamingImageAsset.h index 73af8370cb..76e49edbb4 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Image/StreamingImageAsset.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Image/StreamingImageAsset.h @@ -83,7 +83,7 @@ namespace AZ size_t GetMipCount(size_t mipChainIndex) const; //! Get image data for specified mip and slice. It may return empty array if its mipchain assets are not loaded - AZStd::array_view GetSubImageData(uint32_t mip, uint32_t slice); + AZStd::span GetSubImageData(uint32_t mip, uint32_t slice); //! Returns streaming image pool asset id of the pool that will be used to create the streaming image. const Data::AssetId& GetPoolAssetId() const; diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Material/MaterialAsset.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Material/MaterialAsset.h index b7cc51dcc4..63c42a3882 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Material/MaterialAsset.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Material/MaterialAsset.h @@ -9,7 +9,7 @@ #include #include -#include +#include #include #include diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Material/MaterialTypeAsset.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Material/MaterialTypeAsset.h index 9065b17254..f2302065e2 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Material/MaterialTypeAsset.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Material/MaterialTypeAsset.h @@ -11,7 +11,7 @@ #include #include #include -#include +#include #include #include @@ -118,7 +118,7 @@ namespace AZ //! The entries in this list align with the entries in the MaterialPropertiesLayout. Each AZStd::any is guaranteed //! to have a value of type that matches the corresponding MaterialPropertyDescriptor. //! For images, the value will be of type ImageBinding. - AZStd::array_view GetDefaultPropertyValues() const; + AZStd::span GetDefaultPropertyValues() const; //! Returns a map from the UV shader inputs to a custom name. MaterialUvNameMap GetUvNameMap() const; diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Material/MaterialTypeAssetCreator.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Material/MaterialTypeAssetCreator.h index 6bd84b5546..ce6fbbae23 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Material/MaterialTypeAssetCreator.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Material/MaterialTypeAssetCreator.h @@ -9,7 +9,7 @@ #include #include -#include +#include namespace AZ { diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Model/ModelAsset.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Model/ModelAsset.h index 91d89ce719..ea02e87405 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Model/ModelAsset.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Model/ModelAsset.h @@ -59,7 +59,7 @@ namespace AZ //! Returns the number of Lods in the model size_t GetLodCount() const; - AZStd::array_view> GetLodAssets() const; + AZStd::span> GetLodAssets() const; //! Checks a ray for intersection against this model. The ray must be in the same coordinate space as the model. //! Important: only to be used in the Editor, it may kick off a job to calculate spatial information. diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Model/ModelKdTree.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Model/ModelKdTree.h index 134f1c767d..2e51a37488 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Model/ModelKdTree.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Model/ModelKdTree.h @@ -50,9 +50,9 @@ namespace AZ eSA_Invalid }; - static AZStd::array_view GetPositionsBuffer(const ModelLodAsset::Mesh& mesh); + static AZStd::span GetPositionsBuffer(const ModelLodAsset::Mesh& mesh); - static AZStd::array_view GetIndexBuffer(const ModelLodAsset::Mesh& mesh); + static AZStd::span GetIndexBuffer(const ModelLodAsset::Mesh& mesh); private: @@ -75,7 +75,7 @@ namespace AZ struct MeshData { const ModelLodAsset::Mesh* m_mesh = nullptr; - AZStd::array_view m_vertexData; + AZStd::span m_vertexData; }; AZStd::vector m_meshes; diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Model/ModelLodAsset.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Model/ModelLodAsset.h index 4b09cf8d91..d7b4979e06 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Model/ModelLodAsset.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Model/ModelLodAsset.h @@ -101,10 +101,10 @@ namespace AZ //! A helper method for returning this mesh's index buffer using a specific type for the elements. //! @note It's the caller's responsibility to choose the right type for the buffer. template - AZStd::array_view GetIndexBufferTyped() const; + AZStd::span GetIndexBufferTyped() const; //! Return an array view of the list of all stream buffer info (not including the index buffer) - AZStd::array_view GetStreamBufferInfoList() const; + AZStd::span GetStreamBufferInfoList() const; //! A helper method for returning a specific buffer asset view. //! It will return nullptr if the semantic buffer is not found. @@ -117,11 +117,11 @@ namespace AZ //! In perf loop, re-use AZ::Name instance. //! @note It's the caller's responsibility to choose the right type for the buffer. template - AZStd::array_view GetSemanticBufferTyped(const AZ::Name& semantic) const; + AZStd::span GetSemanticBufferTyped(const AZ::Name& semantic) const; private: template - AZStd::array_view GetBufferTyped(const BufferAssetView& bufferAssetView) const; + AZStd::span GetBufferTyped(const BufferAssetView& bufferAssetView) const; AZ::Name m_name; AZ::Aabb m_aabb = AZ::Aabb::CreateNull(); @@ -143,7 +143,7 @@ namespace AZ }; //! Returns an array view into the collection of meshes owned by this lod - AZStd::array_view GetMeshes() const; + AZStd::span GetMeshes() const; //! Returns the model-space axis-aligned bounding box of all meshes in the lod const AZ::Aabb& GetAabb() const; @@ -173,24 +173,24 @@ namespace AZ using ModelLodAssetHandler = AssetHandler; template - AZStd::array_view ModelLodAsset::Mesh::GetIndexBufferTyped() const + AZStd::span ModelLodAsset::Mesh::GetIndexBufferTyped() const { return GetBufferTyped(GetIndexBufferAssetView()); } template - AZStd::array_view ModelLodAsset::Mesh::GetSemanticBufferTyped(const AZ::Name& semantic) const + AZStd::span ModelLodAsset::Mesh::GetSemanticBufferTyped(const AZ::Name& semantic) const { const BufferAssetView* bufferAssetView = GetSemanticBufferAssetView(semantic); - return bufferAssetView ? GetBufferTyped(*bufferAssetView) : AZStd::array_view{}; + return bufferAssetView ? GetBufferTyped(*bufferAssetView) : AZStd::span{}; } template - AZStd::array_view ModelLodAsset::Mesh::GetBufferTyped(const BufferAssetView& bufferAssetView) const + AZStd::span ModelLodAsset::Mesh::GetBufferTyped(const BufferAssetView& bufferAssetView) const { if (const BufferAsset* bufferAsset = bufferAssetView.GetBufferAsset().Get()) { - const AZStd::array_view rawBuffer = bufferAsset->GetBuffer(); + const AZStd::span rawBuffer = bufferAsset->GetBuffer(); if (!rawBuffer.empty()) { const auto& bufferViewDescriptor = bufferAssetView.GetBufferViewDescriptor(); @@ -202,7 +202,7 @@ namespace AZ "Size of buffer (%d) is not a multiple of the type's size specified (%d)", endMeshRawBuffer - beginMeshRawBuffer, sizeof(T)); - return AZStd::array_view(reinterpret_cast(beginMeshRawBuffer), reinterpret_cast(endMeshRawBuffer)); + return AZStd::span(reinterpret_cast(beginMeshRawBuffer), reinterpret_cast(endMeshRawBuffer)); } } return {}; diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Pass/PassAttachmentReflect.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Pass/PassAttachmentReflect.h index 0de3676abe..b0008c44d1 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Pass/PassAttachmentReflect.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Pass/PassAttachmentReflect.h @@ -23,7 +23,7 @@ #include #include -#include +#include #include #include @@ -130,7 +130,7 @@ namespace AZ }; using PassSlotList = AZStd::vector; - using PassSlotListView = AZStd::array_view; + using PassSlotListView = AZStd::span; //! Refers to a PassAttachment or a PassAttachmentBinding on an adjacent Pass in the hierarchy. Specifies the //! name of attachment or binding/slot as well as the name of the Pass on which the attachment or binding lives. @@ -166,7 +166,7 @@ namespace AZ }; using PassConnectionList = AZStd::vector; - using PassConnectionListView = AZStd::array_view; + using PassConnectionListView = AZStd::span; //! Specifies a connection from a Pass's output slot to one of it's input slots. This is used as a fallback //! for the output when the pass is disabled so the output can present a valid attachments to subsequent passes. @@ -183,7 +183,7 @@ namespace AZ }; using PassFallbackConnectionList = AZStd::vector; - using PassFallbackConnectionListView = AZStd::array_view; + using PassFallbackConnectionListView = AZStd::span; // --- Pass Attachment Descriptor Classes --- @@ -269,7 +269,7 @@ namespace AZ }; using PassImageAttachmentDescList = AZStd::vector; - using PassImageAttachmentDescListView = AZStd::array_view; + using PassImageAttachmentDescListView = AZStd::span; //! A PassAttachmentDesc used for buffers struct PassBufferAttachmentDesc final @@ -283,7 +283,7 @@ namespace AZ }; using PassBufferAttachmentDescList = AZStd::vector; - using PassBufferAttachmentDescListView = AZStd::array_view; + using PassBufferAttachmentDescListView = AZStd::span; } // namespace RPI diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Pass/PassRequest.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Pass/PassRequest.h index 28d9fcc812..92067938b6 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Pass/PassRequest.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Pass/PassRequest.h @@ -13,7 +13,7 @@ #include #include -#include +#include #include #include @@ -75,7 +75,7 @@ namespace AZ }; using PassRequestList = AZStd::vector; - using PassRequestListView = AZStd::array_view; + using PassRequestListView = AZStd::span; } // namespace RPI } // namespace AZ diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Pass/PassTemplate.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Pass/PassTemplate.h index d33b632848..f6bcd019cc 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Pass/PassTemplate.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Pass/PassTemplate.h @@ -11,7 +11,7 @@ #include -#include +#include #include #include diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Shader/ShaderAsset.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Shader/ShaderAsset.h index 70451bd055..bea7cb4b26 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Shader/ShaderAsset.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Shader/ShaderAsset.h @@ -158,8 +158,8 @@ namespace AZ //! Returns the set of shader resource group layouts owned by a given supervariant. - AZStd::array_view> GetShaderResourceGroupLayouts( SupervariantIndex supervariantIndex) const; - AZStd::array_view> GetShaderResourceGroupLayouts() const + AZStd::span> GetShaderResourceGroupLayouts( SupervariantIndex supervariantIndex) const; + AZStd::span> GetShaderResourceGroupLayouts() const { return GetShaderResourceGroupLayouts(DefaultSupervariantIndex); } diff --git a/Gems/Atom/RPI/Code/Source/RPI.Edit/Material/MaterialPropertyId.cpp b/Gems/Atom/RPI/Code/Source/RPI.Edit/Material/MaterialPropertyId.cpp index d123fe33b7..3b0d6d79b8 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Edit/Material/MaterialPropertyId.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Edit/Material/MaterialPropertyId.cpp @@ -88,7 +88,7 @@ namespace AZ { } - MaterialPropertyId::MaterialPropertyId(const AZStd::array_view names) + MaterialPropertyId::MaterialPropertyId(const AZStd::span names) { for (const auto& name : names) { diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/GpuQuery/GpuQueryTypes.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/GpuQuery/GpuQueryTypes.cpp index 1c8c504aad..69637bce4e 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/GpuQuery/GpuQueryTypes.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/GpuQuery/GpuQueryTypes.cpp @@ -54,7 +54,7 @@ namespace AZ // --- PipelineStatisticsResult --- - PipelineStatisticsResult::PipelineStatisticsResult(AZStd::array_view&& statisticsResultArray) + PipelineStatisticsResult::PipelineStatisticsResult(AZStd::span&& statisticsResultArray) { for (const PipelineStatisticsResult& result : statisticsResultArray) { diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/GpuQuery/QueryPool.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/GpuQuery/QueryPool.cpp index 755b4e8cea..d4411b57c0 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/GpuQuery/QueryPool.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/GpuQuery/QueryPool.cpp @@ -147,7 +147,7 @@ namespace AZ return endQuery->End(commandList); } - AZStd::array_view> RPI::QueryPool::GetRhiQueryArray() const + AZStd::span> RPI::QueryPool::GetRhiQueryArray() const { return m_rhiQueryArray; } @@ -230,12 +230,12 @@ namespace AZ return m_queriesPerResult; } - AZStd::array_view> QueryPool::GetRhiQueriesFromInterval(const RHI::Interval& rhiQueryIndices) const + AZStd::span> QueryPool::GetRhiQueriesFromInterval(const RHI::Interval& rhiQueryIndices) const { const uint32_t queryCount = rhiQueryIndices.m_max - rhiQueryIndices.m_min + 1u; AZ_Assert(rhiQueryIndices.m_max < m_rhiQueryCapacity, "Query array index is going over the limit"); - return AZStd::array_view>(m_rhiQueryArray.begin() + rhiQueryIndices.m_min, queryCount); + return AZStd::span>(m_rhiQueryArray.begin() + rhiQueryIndices.m_min, queryCount); } AZStd::vector QueryPool::GetRawRhiQueriesFromInterval(const RHI::Interval& rhiQueryIndices) const diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/GpuQuery/TimestampQueryPool.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/GpuQuery/TimestampQueryPool.cpp index 7edc325b9e..33b776671a 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/GpuQuery/TimestampQueryPool.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/GpuQuery/TimestampQueryPool.cpp @@ -26,7 +26,7 @@ namespace AZ RHI::ResultCode TimestampQueryPool::BeginQueryInternal(RHI::Interval rhiQueryIndices, RHI::CommandList& commandList) { - AZStd::array_view> rhiQueryArray = GetRhiQueryArray(); + AZStd::span> rhiQueryArray = GetRhiQueryArray(); AZ::RHI::Ptr beginQuery = rhiQueryArray[rhiQueryIndices.m_min]; return beginQuery->WriteTimestamp(commandList); @@ -34,7 +34,7 @@ namespace AZ RHI::ResultCode TimestampQueryPool::EndQueryInternal(RHI::Interval rhiQueryIndices, RHI::CommandList& commandList) { - AZStd::array_view> rhiQueryArray = GetRhiQueryArray(); + AZStd::span> rhiQueryArray = GetRhiQueryArray(); AZ::RHI::Ptr endQuery = rhiQueryArray[rhiQueryIndices.m_max]; return endQuery->WriteTimestamp(commandList); diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/Model/Model.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/Model/Model.cpp index 4f3cf52dad..b5d1c06d8d 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/Model/Model.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/Model/Model.cpp @@ -57,7 +57,7 @@ namespace AZ return m_lods.size(); } - AZStd::array_view> Model::GetLods() const + AZStd::span> Model::GetLods() const { return m_lods; } diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/Model/ModelLod.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/Model/ModelLod.cpp index a928aec12f..0af1893a71 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/Model/ModelLod.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/Model/ModelLod.cpp @@ -28,7 +28,7 @@ namespace AZ &modelAssetAny); } - AZStd::array_view ModelLod::GetMeshes() const + AZStd::span ModelLod::GetMeshes() const { return m_meshes; } diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/ParentPass.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/ParentPass.cpp index 55f3e44173..77a3e1524a 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/ParentPass.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/ParentPass.cpp @@ -398,7 +398,7 @@ namespace AZ // --- Debug functions --- - AZStd::array_view> ParentPass::GetChildren() const + AZStd::span> ParentPass::GetChildren() const { return m_children; } diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/Shader/Shader.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/Shader/Shader.cpp index 130c0158d1..de79931ed0 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/Shader/Shader.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/Shader/Shader.cpp @@ -490,7 +490,7 @@ namespace AZ return m_asset->FindFallbackShaderResourceGroupLayout(m_supervariantIndex); } - AZStd::array_view> Shader::GetShaderResourceGroupLayouts() const + AZStd::span> Shader::GetShaderResourceGroupLayouts() const { return m_asset->GetShaderResourceGroupLayouts(m_supervariantIndex); } diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/Shader/ShaderResourceGroup.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/Shader/ShaderResourceGroup.cpp index b927e864fc..383ddddf19 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/Shader/ShaderResourceGroup.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/Shader/ShaderResourceGroup.cpp @@ -76,7 +76,7 @@ namespace AZ { const auto& lay = shaderAsset.FindShaderResourceGroupLayout(srgName, supervariantIndex); m_layout = lay.get(); - + if (!m_layout) { AZ_Assert(false, "ShaderResourceGroup cannot be initialized due to invalid ShaderResourceGroupLayout"); @@ -188,7 +188,7 @@ namespace AZ { return GetLayout()->HasShaderVariantKeyFallbackEntry(); } - + bool ShaderResourceGroup::SetImage(RHI::ShaderInputNameIndex& inputIndex, const Data::Instance& image, uint32_t arrayIndex) { if (inputIndex.ValidateOrFindImageIndex(GetLayout())) @@ -215,7 +215,7 @@ namespace AZ return false; } - bool ShaderResourceGroup::SetImageArray(RHI::ShaderInputNameIndex& inputIndex, AZStd::array_view> images, uint32_t arrayIndex) + bool ShaderResourceGroup::SetImageArray(RHI::ShaderInputNameIndex& inputIndex, AZStd::span> images, uint32_t arrayIndex) { if (inputIndex.ValidateOrFindImageIndex(GetLayout())) { @@ -224,7 +224,7 @@ namespace AZ return false; } - bool ShaderResourceGroup::SetImageArray(RHI::ShaderInputImageIndex inputIndex, AZStd::array_view> images, uint32_t arrayIndex) + bool ShaderResourceGroup::SetImageArray(RHI::ShaderInputImageIndex inputIndex, AZStd::span> images, uint32_t arrayIndex) { if (GetLayout()->ValidateAccess(inputIndex, arrayIndex + static_cast(images.size()) - 1)) { @@ -257,7 +257,7 @@ namespace AZ return s_nullImage; } - AZStd::array_view> ShaderResourceGroup::GetImageArray(RHI::ShaderInputNameIndex& inputIndex) const + AZStd::span> ShaderResourceGroup::GetImageArray(RHI::ShaderInputNameIndex& inputIndex) const { if (inputIndex.ValidateOrFindImageIndex(GetLayout())) { @@ -266,12 +266,12 @@ namespace AZ return {}; } - AZStd::array_view> ShaderResourceGroup::GetImageArray(RHI::ShaderInputImageIndex inputIndex) const + AZStd::span> ShaderResourceGroup::GetImageArray(RHI::ShaderInputImageIndex inputIndex) const { if (m_layout->ValidateAccess(inputIndex, 0)) { const RHI::Interval interval = m_layout->GetGroupInterval(inputIndex); - return AZStd::array_view>(&m_imageGroup[interval.m_min], interval.m_max - interval.m_min); + return AZStd::span>(&m_imageGroup[interval.m_min], interval.m_max - interval.m_min); } return {}; } @@ -299,7 +299,7 @@ namespace AZ return false; } - bool ShaderResourceGroup::SetImageViewArray(RHI::ShaderInputNameIndex& inputIndex, AZStd::array_view imageViews, uint32_t arrayIndex) + bool ShaderResourceGroup::SetImageViewArray(RHI::ShaderInputNameIndex& inputIndex, AZStd::span imageViews, uint32_t arrayIndex) { if (inputIndex.ValidateOrFindImageIndex(GetLayout())) { @@ -308,7 +308,7 @@ namespace AZ return false; } - bool ShaderResourceGroup::SetImageViewArray(RHI::ShaderInputImageIndex inputIndex, AZStd::array_view imageViews, uint32_t arrayIndex) + bool ShaderResourceGroup::SetImageViewArray(RHI::ShaderInputImageIndex inputIndex, AZStd::span imageViews, uint32_t arrayIndex) { if (GetLayout()->ValidateAccess(inputIndex, arrayIndex + static_cast(imageViews.size()) - 1)) { @@ -322,7 +322,7 @@ namespace AZ return false; } - bool ShaderResourceGroup::SetImageViewUnboundedArray(RHI::ShaderInputImageUnboundedArrayIndex inputIndex, AZStd::array_view imageViews) + bool ShaderResourceGroup::SetImageViewUnboundedArray(RHI::ShaderInputImageUnboundedArrayIndex inputIndex, AZStd::span imageViews) { return m_data.SetImageViewUnboundedArray(inputIndex, imageViews); } @@ -350,7 +350,7 @@ namespace AZ return false; } - bool ShaderResourceGroup::SetBufferViewArray(RHI::ShaderInputNameIndex& inputIndex, AZStd::array_view bufferViews, uint32_t arrayIndex) + bool ShaderResourceGroup::SetBufferViewArray(RHI::ShaderInputNameIndex& inputIndex, AZStd::span bufferViews, uint32_t arrayIndex) { if (inputIndex.ValidateOrFindBufferIndex(GetLayout())) { @@ -359,7 +359,7 @@ namespace AZ return false; } - bool ShaderResourceGroup::SetBufferViewArray(RHI::ShaderInputBufferIndex inputIndex, AZStd::array_view bufferViews, uint32_t arrayIndex) + bool ShaderResourceGroup::SetBufferViewArray(RHI::ShaderInputBufferIndex inputIndex, AZStd::span bufferViews, uint32_t arrayIndex) { if (GetLayout()->ValidateAccess(inputIndex, arrayIndex + static_cast(bufferViews.size()) - 1)) { @@ -373,7 +373,7 @@ namespace AZ return false; } - bool ShaderResourceGroup::SetBufferViewUnboundedArray(RHI::ShaderInputBufferUnboundedArrayIndex inputIndex, AZStd::array_view bufferViews) + bool ShaderResourceGroup::SetBufferViewUnboundedArray(RHI::ShaderInputBufferUnboundedArrayIndex inputIndex, AZStd::span bufferViews) { return m_data.SetBufferViewUnboundedArray(inputIndex, bufferViews); } @@ -392,7 +392,7 @@ namespace AZ return m_data.SetSampler(inputIndex, sampler, arrayIndex); } - bool ShaderResourceGroup::SetSamplerArray(RHI::ShaderInputNameIndex& inputIndex, AZStd::array_view samplers, uint32_t arrayIndex) + bool ShaderResourceGroup::SetSamplerArray(RHI::ShaderInputNameIndex& inputIndex, AZStd::span samplers, uint32_t arrayIndex) { if (inputIndex.ValidateOrFindSamplerIndex(GetLayout())) { @@ -401,7 +401,7 @@ namespace AZ return false; } - bool ShaderResourceGroup::SetSamplerArray(RHI::ShaderInputSamplerIndex inputIndex, AZStd::array_view samplers, uint32_t arrayIndex) + bool ShaderResourceGroup::SetSamplerArray(RHI::ShaderInputSamplerIndex inputIndex, AZStd::span samplers, uint32_t arrayIndex) { return m_data.SetSamplerArray(inputIndex, samplers, arrayIndex); } @@ -437,7 +437,7 @@ namespace AZ bool ShaderResourceGroup::ApplyDataMappings(const RHI::ShaderDataMappings& mappings) { bool success = true; - + success = success && ApplyDataMappingArray(mappings.m_colorMappings); success = success && ApplyDataMappingArray(mappings.m_uintMappings); success = success && ApplyDataMappingArray(mappings.m_floatMappings); @@ -461,13 +461,13 @@ namespace AZ return m_data.GetImageView(inputIndex, arrayIndex); } - AZStd::array_view> ShaderResourceGroup::GetImageViewArray(RHI::ShaderInputNameIndex& inputIndex) const + AZStd::span> ShaderResourceGroup::GetImageViewArray(RHI::ShaderInputNameIndex& inputIndex) const { inputIndex.ValidateOrFindImageIndex(GetLayout()); return GetImageViewArray(inputIndex.GetImageIndex()); } - AZStd::array_view> ShaderResourceGroup::GetImageViewArray(RHI::ShaderInputImageIndex inputIndex) const + AZStd::span> ShaderResourceGroup::GetImageViewArray(RHI::ShaderInputImageIndex inputIndex) const { return m_data.GetImageViewArray(inputIndex); } @@ -483,13 +483,13 @@ namespace AZ return m_data.GetBufferView(inputIndex, arrayIndex); } - AZStd::array_view> ShaderResourceGroup::GetBufferViewArray(RHI::ShaderInputNameIndex& inputIndex) const + AZStd::span> ShaderResourceGroup::GetBufferViewArray(RHI::ShaderInputNameIndex& inputIndex) const { inputIndex.ValidateOrFindBufferIndex(GetLayout()); return GetBufferViewArray(inputIndex.GetBufferIndex()); } - AZStd::array_view> ShaderResourceGroup::GetBufferViewArray(RHI::ShaderInputBufferIndex inputIndex) const + AZStd::span> ShaderResourceGroup::GetBufferViewArray(RHI::ShaderInputBufferIndex inputIndex) const { return m_data.GetBufferViewArray(inputIndex); } @@ -520,7 +520,7 @@ namespace AZ return false; } - bool ShaderResourceGroup::SetBufferArray(RHI::ShaderInputNameIndex& inputIndex, AZStd::array_view> buffers, uint32_t arrayIndex) + bool ShaderResourceGroup::SetBufferArray(RHI::ShaderInputNameIndex& inputIndex, AZStd::span> buffers, uint32_t arrayIndex) { if (inputIndex.ValidateOrFindBufferIndex(GetLayout())) { @@ -529,7 +529,7 @@ namespace AZ return false; } - bool ShaderResourceGroup::SetBufferArray(RHI::ShaderInputBufferIndex inputIndex, AZStd::array_view> buffers, uint32_t arrayIndex) + bool ShaderResourceGroup::SetBufferArray(RHI::ShaderInputBufferIndex inputIndex, AZStd::span> buffers, uint32_t arrayIndex) { if (GetLayout()->ValidateAccess(inputIndex, arrayIndex + static_cast(buffers.size()) - 1)) { @@ -562,7 +562,7 @@ namespace AZ return s_nullBuffer; } - AZStd::array_view> ShaderResourceGroup::GetBufferArray(RHI::ShaderInputNameIndex& inputIndex) const + AZStd::span> ShaderResourceGroup::GetBufferArray(RHI::ShaderInputNameIndex& inputIndex) const { if (inputIndex.ValidateOrFindBufferIndex(GetLayout())) { @@ -571,12 +571,12 @@ namespace AZ return {}; } - AZStd::array_view> ShaderResourceGroup::GetBufferArray(RHI::ShaderInputBufferIndex inputIndex) const + AZStd::span> ShaderResourceGroup::GetBufferArray(RHI::ShaderInputBufferIndex inputIndex) const { if (m_layout->ValidateAccess(inputIndex, 0)) { const RHI::Interval interval = m_layout->GetGroupInterval(inputIndex); - return AZStd::array_view>(&m_bufferGroup[interval.m_min], interval.m_max - interval.m_min); + return AZStd::span>(&m_bufferGroup[interval.m_min], interval.m_max - interval.m_min); } return {}; } @@ -597,24 +597,24 @@ namespace AZ return m_data.GetSampler(inputIndex, arrayIndex); } - AZStd::array_view ShaderResourceGroup::GetSamplerArray(RHI::ShaderInputNameIndex& inputIndex) const + AZStd::span ShaderResourceGroup::GetSamplerArray(RHI::ShaderInputNameIndex& inputIndex) const { inputIndex.ValidateOrFindSamplerIndex(GetLayout()); return GetSamplerArray(inputIndex.GetSamplerIndex()); } - AZStd::array_view ShaderResourceGroup::GetSamplerArray(RHI::ShaderInputSamplerIndex inputIndex) const + AZStd::span ShaderResourceGroup::GetSamplerArray(RHI::ShaderInputSamplerIndex inputIndex) const { return m_data.GetSamplerArray(inputIndex); } - AZStd::array_view ShaderResourceGroup::GetConstantRaw(RHI::ShaderInputNameIndex& inputIndex) const + AZStd::span ShaderResourceGroup::GetConstantRaw(RHI::ShaderInputNameIndex& inputIndex) const { inputIndex.ValidateOrFindConstantIndex(GetLayout()); return GetConstantRaw(inputIndex.GetConstantIndex()); } - AZStd::array_view ShaderResourceGroup::GetConstantRaw(RHI::ShaderInputConstantIndex inputIndex) const + AZStd::span ShaderResourceGroup::GetConstantRaw(RHI::ShaderInputConstantIndex inputIndex) const { return m_data.GetConstantRaw(inputIndex); } diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Buffer/BufferAsset.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Buffer/BufferAsset.cpp index 95f47d7393..92508162a5 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Buffer/BufferAsset.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Buffer/BufferAsset.cpp @@ -49,9 +49,9 @@ namespace AZ } } - AZStd::array_view BufferAsset::GetBuffer() const + AZStd::span BufferAsset::GetBuffer() const { - return AZStd::array_view(m_buffer); + return AZStd::span(m_buffer); } const RHI::BufferDescriptor& BufferAsset::GetBufferDescriptor() const diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Buffer/BufferAssetCreator.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Buffer/BufferAssetCreator.cpp index feeeff36cf..ec8292a52e 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Buffer/BufferAssetCreator.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Buffer/BufferAssetCreator.cpp @@ -165,7 +165,7 @@ namespace AZ creator.SetPoolAsset(sourceAsset->GetPoolAsset()); creator.SetBufferViewDescriptor(sourceAsset->GetBufferViewDescriptor()); - const AZStd::array_view sourceBuffer = sourceAsset->GetBuffer(); + const AZStd::span sourceBuffer = sourceAsset->GetBuffer(); creator.SetBuffer(sourceBuffer.data(), sourceBuffer.size(), sourceAsset->GetBufferDescriptor()); return creator.End(clonedResult); diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/ImageMipChainAsset.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/ImageMipChainAsset.cpp index f86200485a..e86cfb7c82 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/ImageMipChainAsset.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/ImageMipChainAsset.cpp @@ -49,19 +49,19 @@ namespace AZ return m_subImageDatas.size(); } - AZStd::array_view ImageMipChainAsset::GetSubImageData(uint32_t mipSlice, uint32_t arraySlice) const + AZStd::span ImageMipChainAsset::GetSubImageData(uint32_t mipSlice, uint32_t arraySlice) const { return GetSubImageData(mipSlice * m_arraySize + arraySlice); } - AZStd::array_view ImageMipChainAsset::GetSubImageData(uint32_t subImageIndex) const + AZStd::span ImageMipChainAsset::GetSubImageData(uint32_t subImageIndex) const { AZ_Assert(subImageIndex < m_subImageDataOffsets.size() && subImageIndex < m_subImageDatas.size(), "subImageIndex is out of range"); // The offset vector contains an extra sentinel value. const size_t dataSize = m_subImageDataOffsets[subImageIndex + 1] - m_subImageDataOffsets[subImageIndex]; - return AZStd::array_view(reinterpret_cast(m_subImageDatas[subImageIndex].m_data), dataSize); + return AZStd::span(reinterpret_cast(m_subImageDatas[subImageIndex].m_data), dataSize); } const RHI::ImageSubresourceLayout& ImageMipChainAsset::GetSubImageLayout(uint32_t mipSlice) const @@ -111,7 +111,7 @@ namespace AZ for (uint16_t mipSliceIndex = 0; mipSliceIndex < m_mipLevels; ++mipSliceIndex) { RHI::StreamingImageMipSlice mipSlice; - mipSlice.m_subresources = AZStd::array_view(&m_subImageDatas[m_arraySize * mipSliceIndex], m_arraySize); + mipSlice.m_subresources = AZStd::span(&m_subImageDatas[m_arraySize * mipSliceIndex], m_arraySize); mipSlice.m_subresourceLayout = m_subImageLayouts[mipSliceIndex]; m_mipSlices.push_back(mipSlice); } diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp index 59f359e474..a67ed6f4bc 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Image/StreamingImageAsset.cpp @@ -94,11 +94,11 @@ namespace AZ return m_totalImageDataSize; } - AZStd::array_view StreamingImageAsset::GetSubImageData(uint32_t mip, uint32_t slice) + AZStd::span StreamingImageAsset::GetSubImageData(uint32_t mip, uint32_t slice) { if (mip >= m_mipLevelToChainIndex.size()) { - return AZStd::array_view(); + return AZStd::span(); } size_t mipChainIndex = m_mipLevelToChainIndex[mip]; @@ -119,7 +119,7 @@ namespace AZ if (mipChainAsset == nullptr) { AZ_Warning("Streaming Image", false, "MipChain asset wasn't loaded"); - return AZStd::array_view(); + return AZStd::span(); } return mipChainAsset->GetSubImageData(mip - mipChain.m_mipOffset, slice); diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Material/MaterialTypeAsset.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Material/MaterialTypeAsset.cpp index 48654d7769..bf765b1178 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Material/MaterialTypeAsset.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Material/MaterialTypeAsset.cpp @@ -154,7 +154,7 @@ namespace AZ return m_materialPropertiesLayout.get(); } - AZStd::array_view MaterialTypeAsset::GetDefaultPropertyValues() const + AZStd::span MaterialTypeAsset::GetDefaultPropertyValues() const { return m_propertyValues; } diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Model/ModelAsset.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Model/ModelAsset.cpp index 0574803591..6780763d7c 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Model/ModelAsset.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Model/ModelAsset.cpp @@ -82,9 +82,9 @@ namespace AZ return m_lodAssets.size(); } - AZStd::array_view> ModelAsset::GetLodAssets() const + AZStd::span> ModelAsset::GetLodAssets() const { - return AZStd::array_view>(m_lodAssets); + return AZStd::span>(m_lodAssets); } void ModelAsset::SetReady() @@ -213,7 +213,7 @@ namespace AZ } RHI::BufferViewDescriptor positionBufferViewDesc = positionBufferView->GetBufferViewDescriptor(); - AZStd::array_view positionRawBuffer = bufferAssetViewPtr->GetBuffer(); + AZStd::span positionRawBuffer = bufferAssetViewPtr->GetBuffer(); const uint32_t positionElementSize = positionBufferViewDesc.m_elementSize; const uint32_t positionElementCount = positionBufferViewDesc.m_elementCount; @@ -227,7 +227,7 @@ namespace AZ } RHI::BufferViewDescriptor indexBufferViewDesc = indexBufferView.GetBufferViewDescriptor(); - AZStd::array_view indexRawBuffer = indexAssetViewPtr->GetBuffer(); + AZStd::span indexRawBuffer = indexAssetViewPtr->GetBuffer(); const AZ::Vector3 rayEnd = rayStart + rayDir; AZ::Vector3 a, b, c; @@ -297,7 +297,7 @@ namespace AZ { for (const ModelLodAsset::Mesh& mesh : loadAssetPtr->GetMeshes()) { - const AZStd::array_view& streamBufferList = mesh.GetStreamBufferInfoList(); + const AZStd::span& streamBufferList = mesh.GetStreamBufferInfoList(); // find position semantic const ModelLodAsset::Mesh::StreamBufferInfo* positionBuffer = nullptr; diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Model/ModelAssetCreator.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Model/ModelAssetCreator.cpp index 524ef9e910..f6fb9455d7 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Model/ModelAssetCreator.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Model/ModelAssetCreator.cpp @@ -101,7 +101,7 @@ namespace AZ creator.SetName(sourceAsset->GetName().GetStringView()); AZ::Data::AssetId lastUsedId = cloneAssetId; - const AZStd::array_view> sourceLodAssets = sourceAsset->GetLodAssets(); + const AZStd::span> sourceLodAssets = sourceAsset->GetLodAssets(); for (const Data::Asset& sourceLodAsset : sourceLodAssets) { Data::Asset lodAsset; diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Model/ModelKdTree.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Model/ModelKdTree.cpp index b84390a318..5681cf71c1 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Model/ModelKdTree.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Model/ModelKdTree.cpp @@ -61,7 +61,7 @@ namespace AZ { const auto& [first, second, third] = triangleIndices; - const AZStd::array_view& positionBuffer = m_meshes[nObjIndex].m_vertexData; + const AZStd::span& positionBuffer = m_meshes[nObjIndex].m_vertexData; if (positionBuffer.empty()) { @@ -114,7 +114,7 @@ namespace AZ for (AZ::u8 meshIndex = 0, meshCount = aznumeric_caster(m_meshes.size()); meshIndex < meshCount; ++meshIndex) { - const AZStd::array_view positionBuffer = m_meshes[meshIndex].m_vertexData; + const AZStd::span positionBuffer = m_meshes[meshIndex].m_vertexData; for (size_t positionIndex = 0; positionIndex < positionBuffer.size(); positionIndex += 3) { entireBoundBox.AddPoint({positionBuffer[positionIndex], positionBuffer[positionIndex + 1], positionBuffer[positionIndex + 2]}); @@ -137,14 +137,14 @@ namespace AZ return true; } - AZStd::array_view ModelKdTree::GetPositionsBuffer(const ModelLodAsset::Mesh& mesh) + AZStd::span ModelKdTree::GetPositionsBuffer(const ModelLodAsset::Mesh& mesh) { - AZStd::array_view positionBuffer = mesh.GetSemanticBufferTyped(AZ::Name{"POSITION"}); + AZStd::span positionBuffer = mesh.GetSemanticBufferTyped(AZ::Name{"POSITION"}); AZ_Warning("ModelKdTree", !positionBuffer.empty(), "Could not find position buffers in a mesh"); return positionBuffer; } - AZStd::array_view ModelKdTree::GetIndexBuffer(const ModelLodAsset::Mesh& mesh) + AZStd::span ModelKdTree::GetIndexBuffer(const ModelLodAsset::Mesh& mesh) { return mesh.GetIndexBufferTyped(); } @@ -264,7 +264,7 @@ namespace AZ const auto& [first, second, third] = pNode->GetVertexIndex(i); const AZ::u32 nObjIndex = pNode->GetObjIndex(i); - const AZStd::array_view positionBuffer = m_meshes[nObjIndex].m_vertexData; + const AZStd::span positionBuffer = m_meshes[nObjIndex].m_vertexData; if (positionBuffer.empty()) { diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Model/ModelLodAsset.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Model/ModelLodAsset.cpp index ccf0d49b46..7dffaccf0a 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Model/ModelLodAsset.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Model/ModelLodAsset.cpp @@ -95,9 +95,9 @@ namespace AZ return m_indexBufferAssetView; } - AZStd::array_view ModelLodAsset::Mesh::GetStreamBufferInfoList() const + AZStd::span ModelLodAsset::Mesh::GetStreamBufferInfoList() const { - return AZStd::array_view(m_streamBufferInfo); + return AZStd::span(m_streamBufferInfo); } void ModelLodAsset::AddMesh(const Mesh& mesh) @@ -109,9 +109,9 @@ namespace AZ m_aabb.AddAabb(meshAabb); } - AZStd::array_view ModelLodAsset::GetMeshes() const + AZStd::span ModelLodAsset::GetMeshes() const { - return AZStd::array_view(m_meshes); + return AZStd::span(m_meshes); } const AZ::Aabb& ModelLodAsset::GetAabb() const @@ -121,7 +121,7 @@ namespace AZ const BufferAssetView* ModelLodAsset::Mesh::GetSemanticBufferAssetView(const AZ::Name& semantic) const { - const AZStd::array_view& streamBufferList = GetStreamBufferInfoList(); + const AZStd::span& streamBufferList = GetStreamBufferInfoList(); for (const ModelLodAsset::Mesh::StreamBufferInfo& streamBufferInfo : streamBufferList) { diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Model/ModelLodAssetCreator.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Model/ModelLodAssetCreator.cpp index f94116db70..94d20ed6ea 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Model/ModelLodAssetCreator.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Model/ModelLodAssetCreator.cpp @@ -243,7 +243,7 @@ namespace AZ bool ModelLodAssetCreator::Clone(const Data::Asset& sourceAsset, Data::Asset& clonedResult, Data::AssetId& inOutLastCreatedAssetId) { - AZStd::array_view sourceMeshes = sourceAsset->GetMeshes(); + AZStd::span sourceMeshes = sourceAsset->GetMeshes(); if (sourceMeshes.empty()) { return true; diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Shader/ShaderAsset.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Shader/ShaderAsset.cpp index 6daca5553e..ca1188a70e 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Shader/ShaderAsset.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Shader/ShaderAsset.cpp @@ -383,7 +383,7 @@ namespace AZ return RHI::NullSrgLayout; } - AZStd::array_view> ShaderAsset::GetShaderResourceGroupLayouts( + AZStd::span> ShaderAsset::GetShaderResourceGroupLayouts( SupervariantIndex supervariantIndex) const { auto supervariant = GetSupervariant(supervariantIndex); diff --git a/Gems/Atom/RPI/Code/Tests/Common/RHI/Stubs.h b/Gems/Atom/RPI/Code/Tests/Common/RHI/Stubs.h index b8d1cfa050..400eb9521c 100644 --- a/Gems/Atom/RPI/Code/Tests/Common/RHI/Stubs.h +++ b/Gems/Atom/RPI/Code/Tests/Common/RHI/Stubs.h @@ -132,7 +132,7 @@ namespace UnitTest { return m_data; } - + private: bool m_isMapped = false; AZStd::vector m_data; @@ -146,7 +146,7 @@ namespace UnitTest private: AZ::RHI::ResultCode InitInternal(AZ::RHI::Device&, const AZ::RHI::BufferPoolDescriptor&) override { return AZ::RHI::ResultCode::Success;} - + AZ::RHI::ResultCode InitBufferInternal(AZ::RHI::Buffer& bufferBase, const AZ::RHI::BufferDescriptor& descriptor) override { AZ_Assert(IsInitialized(), "Buffer Pool is not initialized"); @@ -264,7 +264,7 @@ namespace UnitTest private: AZ::RHI::ResultCode InitInternal(AZ::RHI::Device&, const AZ::RHI::PipelineLibraryData*) override { return AZ::RHI::ResultCode::Success; } void ShutdownInternal() override {} - AZ::RHI::ResultCode MergeIntoInternal(AZStd::array_view) override { return AZ::RHI::ResultCode::Success; } + AZ::RHI::ResultCode MergeIntoInternal(AZStd::span) override { return AZ::RHI::ResultCode::Success; } AZ::RHI::ConstPtr GetSerializedDataInternal() const override { return nullptr; } }; @@ -372,11 +372,11 @@ namespace UnitTest AZ::RHI::ResultCode InitInternal([[maybe_unused]] AZ::RHI::Device& device, [[maybe_unused]] const AZ::RHI::QueryPoolDescriptor& descriptor) override { return AZ::RHI::ResultCode::Success; } AZ::RHI::ResultCode InitQueryInternal([[maybe_unused]] AZ::RHI::Query& query) override { return AZ::RHI::ResultCode::Success; } AZ::RHI::ResultCode GetResultsInternal( - [[maybe_unused]] uint32_t startIndex, - [[maybe_unused]] uint32_t queryCount, - [[maybe_unused]] uint64_t* results, - [[maybe_unused]] uint32_t resultsCount, - [[maybe_unused]] AZ::RHI::QueryResultFlagBits flags) override + [[maybe_unused]] uint32_t startIndex, + [[maybe_unused]] uint32_t queryCount, + [[maybe_unused]] uint64_t* results, + [[maybe_unused]] uint32_t resultsCount, + [[maybe_unused]] AZ::RHI::QueryResultFlagBits flags) override { return AZ::RHI::ResultCode::Success; } }; diff --git a/Gems/Atom/RPI/Code/Tests/Image/StreamingImageTests.cpp b/Gems/Atom/RPI/Code/Tests/Image/StreamingImageTests.cpp index f7476c0bc4..cb8d903673 100644 --- a/Gems/Atom/RPI/Code/Tests/Image/StreamingImageTests.cpp +++ b/Gems/Atom/RPI/Code/Tests/Image/StreamingImageTests.cpp @@ -214,7 +214,7 @@ namespace UnitTest return image; } - void ValidateImageData(AZStd::array_view data, const AZ::RHI::ImageSubresourceLayout& layout) + void ValidateImageData(AZStd::span data, const AZ::RHI::ImageSubresourceLayout& layout) { const uint32_t pixelSize = layout.m_size.m_width / layout.m_bytesPerRow; @@ -259,7 +259,7 @@ namespace UnitTest for (uint16_t arrayIndex = 0; arrayIndex < mipChain->GetArraySize(); ++arrayIndex) { - AZStd::array_view imageData = mipChain->GetSubImageData(mipLevel, arrayIndex); + AZStd::span imageData = mipChain->GetSubImageData(mipLevel, arrayIndex); ValidateImageData(imageData, layout); } } @@ -573,7 +573,7 @@ namespace UnitTest EXPECT_EQ(mipChain->GetArraySize(), arraySize); EXPECT_EQ(mipChain->GetSubImageCount(), mipLevels * arraySize); - AZStd::array_view dataView = mipChain->GetSubImageData(0); + AZStd::span dataView = mipChain->GetSubImageData(0); EXPECT_EQ(dataView[0], data[0]); EXPECT_EQ(dataView[1], data[1]); EXPECT_EQ(dataView[2], data[2]); diff --git a/Gems/Atom/RPI/Code/Tests/Material/MaterialSourceDataTests.cpp b/Gems/Atom/RPI/Code/Tests/Material/MaterialSourceDataTests.cpp index 94518c6aef..133592e72c 100644 --- a/Gems/Atom/RPI/Code/Tests/Material/MaterialSourceDataTests.cpp +++ b/Gems/Atom/RPI/Code/Tests/Material/MaterialSourceDataTests.cpp @@ -646,7 +646,7 @@ namespace UnitTest MaterialPropertyIndex myFloat2 = layout->FindPropertyIndex(Name("general.MyFloat2")); MaterialPropertyIndex myColor = layout->FindPropertyIndex(Name("general.MyColor")); - AZStd::array_view properties; + AZStd::span properties; // Check level 1 properties properties = materialAssetLevel1.GetValue()->GetPropertyValues(); @@ -736,7 +736,7 @@ namespace UnitTest // The properties will finalize automatically when we call GetPropertyValues()... - AZStd::array_view properties; + AZStd::span properties; // Check level 1 properties properties = materialAssetLevel1->GetPropertyValues(); diff --git a/Gems/Atom/RPI/Code/Tests/Shader/ShaderTests.cpp b/Gems/Atom/RPI/Code/Tests/Shader/ShaderTests.cpp index 38b3fa9eb2..74f79ad80a 100644 --- a/Gems/Atom/RPI/Code/Tests/Shader/ShaderTests.cpp +++ b/Gems/Atom/RPI/Code/Tests/Shader/ShaderTests.cpp @@ -538,7 +538,11 @@ namespace UnitTest auto shaderAsset = shader->GetAsset(); EXPECT_EQ(shader->GetPipelineStateType(), shaderAsset->GetPipelineStateType()); - EXPECT_EQ(shader->GetShaderResourceGroupLayouts(), shaderAsset->GetShaderResourceGroupLayouts()); + using ShaderResourceGroupLayoutSpan = AZStd::span>; + ShaderResourceGroupLayoutSpan shaderResourceGroupLayoutSpan = shader->GetShaderResourceGroupLayouts(); + ShaderResourceGroupLayoutSpan shaderAssetResourceGroupLayoutSpan = shader->GetShaderResourceGroupLayouts(); + EXPECT_EQ(shaderResourceGroupLayoutSpan.data(), shaderAssetResourceGroupLayoutSpan.data()); + EXPECT_EQ(shaderResourceGroupLayoutSpan.size(), shaderAssetResourceGroupLayoutSpan.size()); const RPI::ShaderVariant& rootShaderVariant = shader->GetVariant( RPI::ShaderVariantStableId{0} ); diff --git a/Gems/Atom/RPI/Code/Tests/ShaderResourceGroup/ShaderResourceGroupConstantBufferTests.cpp b/Gems/Atom/RPI/Code/Tests/ShaderResourceGroup/ShaderResourceGroupConstantBufferTests.cpp index 0c3c82933b..f69cfe180a 100644 --- a/Gems/Atom/RPI/Code/Tests/ShaderResourceGroup/ShaderResourceGroupConstantBufferTests.cpp +++ b/Gems/Atom/RPI/Code/Tests/ShaderResourceGroup/ShaderResourceGroupConstantBufferTests.cpp @@ -57,7 +57,7 @@ namespace UnitTest } template - void ExpectEqual(AZStd::initializer_list expectedValues, AZStd::array_view arrayView) + void ExpectEqual(AZStd::initializer_list expectedValues, AZStd::span arrayView) { EXPECT_EQ(expectedValues.size(), arrayView.size()); @@ -215,14 +215,14 @@ namespace UnitTest EXPECT_TRUE(m_srg->SetConstant(inputIndex, true)); EXPECT_EQ(true, m_srg->GetConstant(inputIndex)); - AZStd::array_view result = m_srg->GetConstantRaw(inputIndex); - AZStd::array_view resultInUint = AZStd::array_view(reinterpret_cast(result.data()), 1); + AZStd::span result = m_srg->GetConstantRaw(inputIndex); + AZStd::span resultInUint = AZStd::span(reinterpret_cast(result.data()), 1); ExpectEqual({ 1 /*true*/ }, resultInUint); EXPECT_TRUE(m_srg->SetConstant(inputIndex, false)); EXPECT_EQ(false, m_srg->GetConstant(inputIndex)); result = m_srg->GetConstantRaw(inputIndex); - resultInUint = AZStd::array_view(reinterpret_cast(result.data()), 1); + resultInUint = AZStd::span(reinterpret_cast(result.data()), 1); ExpectEqual({ 0 /*false*/ }, resultInUint); } @@ -232,13 +232,13 @@ namespace UnitTest // Check using inputIndex EXPECT_TRUE(m_srg->SetConstantArray(inputIndex, AZStd::array({ true, false }))); - AZStd::array_view result = m_srg->GetConstantRaw(inputIndex); - AZStd::array_view resultInUint = AZStd::array_view(reinterpret_cast(result.data()), 2); + AZStd::span result = m_srg->GetConstantRaw(inputIndex); + AZStd::span resultInUint = AZStd::span(reinterpret_cast(result.data()), 2); ExpectEqual({ 1 /*true*/, 0 /*false*/ }, resultInUint); EXPECT_TRUE(m_srg->SetConstantArray(inputIndex, AZStd::array({ false, true }))); result = m_srg->GetConstantRaw(inputIndex); - resultInUint = AZStd::array_view(reinterpret_cast(result.data()), 2); + resultInUint = AZStd::span(reinterpret_cast(result.data()), 2); ExpectEqual({ 0 /*false*/, 1 /*true*/ }, resultInUint); } } @@ -263,8 +263,8 @@ namespace UnitTest const RHI::ShaderInputConstantIndex inputIndex(1); EXPECT_TRUE(m_srg->SetConstantArray(inputIndex, AZStd::array({ asBools[1], asBools[2] }))); - AZStd::array_view result = m_srg->GetConstantRaw(inputIndex); - AZStd::array_view resultInUint = AZStd::array_view(reinterpret_cast(result.data()), 2); + AZStd::span result = m_srg->GetConstantRaw(inputIndex); + AZStd::span resultInUint = AZStd::span(reinterpret_cast(result.data()), 2); EXPECT_THAT(resultInUint, testing::ElementsAre(testing::IsTrue(), testing::IsFalse())); } } @@ -356,7 +356,7 @@ namespace UnitTest { using namespace AZ; - AZStd::array_view values; + AZStd::span values; const RHI::ShaderInputConstantIndex inputIndex(17); // Demonstrate the syntax of setting with a variable, and inputIndex... diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Document/MaterialDocument.cpp b/Gems/Atom/Tools/MaterialEditor/Code/Source/Document/MaterialDocument.cpp index 2a0d91d0ad..6ec809e871 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Document/MaterialDocument.cpp +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Document/MaterialDocument.cpp @@ -734,7 +734,7 @@ namespace MaterialEditor return false; } - AZStd::array_view parentPropertyValues = materialTypeAsset->GetDefaultPropertyValues(); + AZStd::span parentPropertyValues = materialTypeAsset->GetDefaultPropertyValues(); AZ::Data::Asset parentMaterialAsset; if (!m_materialSourceData.m_parentMaterial.empty()) { diff --git a/Gems/Atom/Utils/Code/Include/Atom/Utils/ImageComparison.h b/Gems/Atom/Utils/Code/Include/Atom/Utils/ImageComparison.h index cbd4a3c30a..4126e9eb4a 100644 --- a/Gems/Atom/Utils/Code/Include/Atom/Utils/ImageComparison.h +++ b/Gems/Atom/Utils/Code/Include/Atom/Utils/ImageComparison.h @@ -7,7 +7,7 @@ */ #pragma once -#include +#include #include #include @@ -31,8 +31,8 @@ namespace AZ //! @param filteredDiff [out] an alternate RMS value calculated after removing any diffs less than @minDiffFilter. //! @param minDiffFilter diff values less than this will be filtered out before calculating @filteredDiff. ImageDiffResultCode CalcImageDiffRms( - AZStd::array_view bufferA, const RHI::Size& sizeA, RHI::Format formatA, - AZStd::array_view bufferB, const RHI::Size& sizeB, RHI::Format formatB, + AZStd::span bufferA, const RHI::Size& sizeA, RHI::Format formatA, + AZStd::span bufferB, const RHI::Size& sizeB, RHI::Format formatB, float* diffScore = nullptr, float* filteredDiffScore = nullptr, float minDiffFilter = 0.0); diff --git a/Gems/Atom/Utils/Code/Include/Atom/Utils/PngFile.h b/Gems/Atom/Utils/Code/Include/Atom/Utils/PngFile.h index b862786c2f..01e9134b4d 100644 --- a/Gems/Atom/Utils/Code/Include/Atom/Utils/PngFile.h +++ b/Gems/Atom/Utils/Code/Include/Atom/Utils/PngFile.h @@ -11,7 +11,7 @@ #include #include #include -#include +#include #include #include @@ -55,7 +55,7 @@ namespace AZ static PngFile Load(const char* path, LoadSettings loadSettings = {}); //! @return the loaded PngFile or an invalid PngFile if there was an error. - static PngFile LoadFromBuffer(AZStd::array_view data, LoadSettings loadSettings = {}); + static PngFile LoadFromBuffer(AZStd::span data, LoadSettings loadSettings = {}); //! Create a PngFile from an RHI data buffer. //! @param size the dimensions of the image (m_depth is not used, assumed to be 1) @@ -63,7 +63,7 @@ namespace AZ //! @param data the buffer of image data. The size of the buffer must match the @size and @format parameters. //! @param errorHandler optional callback function describing any errors that are encountered //! @return the created PngFile or an invalid PngFile if there was an error. - static PngFile Create(const RHI::Size& size, RHI::Format format, AZStd::array_view data, ErrorHandler errorHandler = {}); + static PngFile Create(const RHI::Size& size, RHI::Format format, AZStd::span data, ErrorHandler errorHandler = {}); static PngFile Create(const RHI::Size& size, RHI::Format format, AZStd::vector&& data, ErrorHandler errorHandler = {}); PngFile() = default; diff --git a/Gems/Atom/Utils/Code/Include/Atom/Utils/PpmFile.h b/Gems/Atom/Utils/Code/Include/Atom/Utils/PpmFile.h index 77b0049df8..e50b83dc4b 100644 --- a/Gems/Atom/Utils/Code/Include/Atom/Utils/PpmFile.h +++ b/Gems/Atom/Utils/Code/Include/Atom/Utils/PpmFile.h @@ -8,7 +8,7 @@ #pragma once #include -#include +#include #include #include @@ -26,7 +26,7 @@ namespace AZ //! @param size image dimensions //! @param format only R8G8B8A8_UNORM and B8G8R8A8_UNORM are supported at this time //! @return the buffer is ppm binary with RGB payload (alpha is omitted as it is not supported by .ppm format) - static AZStd::vector CreatePpmFromImageBuffer(AZStd::array_view buffer, const RHI::Size& size, RHI::Format format); + static AZStd::vector CreatePpmFromImageBuffer(AZStd::span buffer, const RHI::Size& size, RHI::Format format); //! Fills an image buffer with data from ppm file contents. //! @param ppmData the data loaded from a ppm file @@ -34,7 +34,7 @@ namespace AZ //! @param size output image dimensions //! @param format output image format //! @return true if the data was parsed successfully - static bool CreateImageBufferFromPpm(AZStd::array_view ppmData, AZStd::vector& buffer, RHI::Size& size, RHI::Format& format); + static bool CreateImageBufferFromPpm(AZStd::span ppmData, AZStd::vector& buffer, RHI::Size& size, RHI::Format& format); }; } } // namespace AZ diff --git a/Gems/Atom/Utils/Code/Source/ImageComparison.cpp b/Gems/Atom/Utils/Code/Source/ImageComparison.cpp index a17d07ed3f..0bad268ba5 100644 --- a/Gems/Atom/Utils/Code/Source/ImageComparison.cpp +++ b/Gems/Atom/Utils/Code/Source/ImageComparison.cpp @@ -8,13 +8,15 @@ #include +#include + namespace AZ { namespace Utils { ImageDiffResultCode CalcImageDiffRms( - AZStd::array_view bufferA, const RHI::Size& sizeA, RHI::Format formatA, - AZStd::array_view bufferB, const RHI::Size& sizeB, RHI::Format formatB, + AZStd::span bufferA, const RHI::Size& sizeA, RHI::Format formatA, + AZStd::span bufferB, const RHI::Size& sizeB, RHI::Format formatB, float* diffScore, float* filteredDiffScore, float minDiffFilter) diff --git a/Gems/Atom/Utils/Code/Source/PngFile.cpp b/Gems/Atom/Utils/Code/Source/PngFile.cpp index 1454dc68c9..7c1673221e 100644 --- a/Gems/Atom/Utils/Code/Source/PngFile.cpp +++ b/Gems/Atom/Utils/Code/Source/PngFile.cpp @@ -28,7 +28,7 @@ namespace AZ } } - PngFile PngFile::Create(const RHI::Size& size, RHI::Format format, AZStd::array_view data, ErrorHandler errorHandler) + PngFile PngFile::Create(const RHI::Size& size, RHI::Format format, AZStd::span data, ErrorHandler errorHandler) { return Create(size, format, AZStd::vector{data.begin(), data.end()}, errorHandler); } @@ -89,7 +89,7 @@ namespace AZ return pngFile; } - PngFile PngFile::LoadFromBuffer(AZStd::array_view data, LoadSettings loadSettings) + PngFile PngFile::LoadFromBuffer(AZStd::span data, LoadSettings loadSettings) { if (!loadSettings.m_errorHandler) { diff --git a/Gems/Atom/Utils/Code/Source/PpmFile.cpp b/Gems/Atom/Utils/Code/Source/PpmFile.cpp index 8fe40339f3..4e586f5df1 100644 --- a/Gems/Atom/Utils/Code/Source/PpmFile.cpp +++ b/Gems/Atom/Utils/Code/Source/PpmFile.cpp @@ -11,7 +11,7 @@ namespace AZ { - AZStd::vector Utils::PpmFile::CreatePpmFromImageBuffer(AZStd::array_view buffer, const RHI::Size& size, RHI::Format format) + AZStd::vector Utils::PpmFile::CreatePpmFromImageBuffer(AZStd::span buffer, const RHI::Size& size, RHI::Format format) { AZ_Assert(format == RHI::Format::R8G8B8A8_UNORM || format == RHI::Format::B8G8R8A8_UNORM, "CreatePpmFromImageReadbackResult only supports R8G8B8A8_UNORM"); @@ -46,7 +46,7 @@ namespace AZ return outBuffer; } - bool Utils::PpmFile::CreateImageBufferFromPpm(AZStd::array_view ppmData, AZStd::vector& buffer, RHI::Size& size, RHI::Format& format) + bool Utils::PpmFile::CreateImageBufferFromPpm(AZStd::span ppmData, AZStd::vector& buffer, RHI::Size& size, RHI::Format& format) { if (ppmData.size() < 2) { diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Mesh/MeshComponentController.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Mesh/MeshComponentController.cpp index e26d328e17..9718d6b598 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Mesh/MeshComponentController.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Mesh/MeshComponentController.cpp @@ -356,10 +356,10 @@ namespace AZ bool MeshComponentController::RequiresCloning(const Data::Asset& modelAsset) { // Is the model asset containing a cloth buffer? If yes, we need to clone the model asset for instancing. - const AZStd::array_view> lodAssets = modelAsset->GetLodAssets(); + const AZStd::span> lodAssets = modelAsset->GetLodAssets(); for (const AZ::Data::Asset& lodAsset : lodAssets) { - const AZStd::array_view meshes = lodAsset->GetMeshes(); + const AZStd::span meshes = lodAsset->GetMeshes(); for (const AZ::RPI::ModelLodAsset::Mesh& mesh : meshes) { if (mesh.GetSemanticBufferAssetView(AZ::Name("CLOTH_DATA")) != nullptr) diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/ActorAsset.cpp b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/ActorAsset.cpp index 18b09b6eb1..996405ed4a 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/ActorAsset.cpp +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/ActorAsset.cpp @@ -59,7 +59,7 @@ namespace AZ lodVertexCount = 0; const Data::Asset& lodAsset = actor->GetMeshAsset()->GetLodAssets()[lodIndex]; - const AZStd::array_view modelMeshes = lodAsset->GetMeshes(); + const AZStd::span modelMeshes = lodAsset->GetMeshes(); for (const RPI::ModelLodAsset::Mesh& modelMesh : modelMeshes) { const size_t subMeshIndexCount = modelMesh.GetIndexCount(); diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/AtomActorInstance.cpp b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/AtomActorInstance.cpp index d2b675684f..35aea57702 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/AtomActorInstance.cpp +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/AtomActorInstance.cpp @@ -810,7 +810,7 @@ namespace AZ::Render if (m_wrinkleMasks.size()) { - wrinkleMaskObjectSrg->SetImageArray(wrinkleMasksIndex, AZStd::array_view>(m_wrinkleMasks.data(), m_wrinkleMasks.size())); + wrinkleMaskObjectSrg->SetImageArray(wrinkleMasksIndex, AZStd::span>(m_wrinkleMasks.data(), m_wrinkleMasks.size())); // Set the weights for any active masks for (size_t i = 0; i < m_wrinkleMaskWeights.size(); ++i) diff --git a/Gems/AtomTressFX/Code/Passes/HairParentPass.h b/Gems/AtomTressFX/Code/Passes/HairParentPass.h index e494e92e1d..05574bfd52 100644 --- a/Gems/AtomTressFX/Code/Passes/HairParentPass.h +++ b/Gems/AtomTressFX/Code/Passes/HairParentPass.h @@ -8,7 +8,7 @@ #pragma once #include -#include +#include #include namespace AZ diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/Actor.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/Actor.cpp index 0c05da6981..39ff278c46 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/Actor.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/Actor.cpp @@ -2551,7 +2551,7 @@ namespace EMotionFX Node* Actor::FindMeshJoint(const AZ::Data::Asset& lodModelAsset) const { - const AZStd::array_view& sourceMeshes = lodModelAsset->GetMeshes(); + const AZStd::span& sourceMeshes = lodModelAsset->GetMeshes(); // Use the first joint that we can find for any of the Atom sub meshes and use it as owner of our mesh. for (const AZ::RPI::ModelLodAsset::Mesh& sourceMesh : sourceMeshes) @@ -2574,7 +2574,7 @@ namespace EMotionFX AZ_Assert(m_meshAsset.IsReady(), "Mesh asset should be fully loaded and ready."); AZStd::vector& lodLevels = m_meshLodData.m_lodLevels; - const AZStd::array_view>& lodAssets = m_meshAsset->GetLodAssets(); + const AZStd::span>& lodAssets = m_meshAsset->GetLodAssets(); const size_t numLODLevels = lodAssets.size(); lodLevels.clear(); @@ -2700,7 +2700,7 @@ namespace EMotionFX AZ_Assert(m_meshAsset.IsReady() && m_morphTargetMetaAsset.IsReady(), "Mesh as well as morph target meta asset asset should be fully loaded and ready."); AZStd::vector& lodLevels = m_meshLodData.m_lodLevels; - const AZStd::array_view>& lodAssets = m_meshAsset->GetLodAssets(); + const AZStd::span>& lodAssets = m_meshAsset->GetLodAssets(); const size_t numLODLevels = lodAssets.size(); AZ_Assert(m_morphSetups.size() == numLODLevels, "There needs to be a morph setup for every single LOD level."); @@ -2708,7 +2708,7 @@ namespace EMotionFX for (size_t lodLevel = 0; lodLevel < numLODLevels; ++lodLevel) { const AZ::Data::Asset& lodAsset = lodAssets[lodLevel]; - const AZStd::array_view& sourceMeshes = lodAsset->GetMeshes(); + const AZStd::span& sourceMeshes = lodAsset->GetMeshes(); MorphSetup* morphSetup = m_morphSetups[static_cast(lodLevel)]; if (!morphSetup) @@ -2744,7 +2744,7 @@ namespace EMotionFX // The lod has shared buffers that combine the data from each submesh. In case any of the submeshes has a // morph target buffer view we can access the entire morph target buffer via the buffer asset. - AZStd::array_view morphTargetDeltaView; + AZStd::span morphTargetDeltaView; for (const AZ::RPI::ModelLodAsset::Mesh& sourceMesh : sourceMeshes) { if (const auto* bufferAssetView = sourceMesh.GetSemanticBufferAssetView(AZ::Name("MORPHTARGET_VERTEXDELTAS"))) diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/Mesh.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/Mesh.cpp index 9908cb0f58..6adbf05c15 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/Mesh.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/Mesh.cpp @@ -187,7 +187,7 @@ namespace EMotionFX const AZ::RPI::ModelLodAsset::Mesh& sourceMesh = sourceModelLod->GetMeshes()[0]; // Copy the index buffer for the entire lod - AZStd::array_view indexBuffer = sourceMesh.GetIndexBufferAssetView().GetBufferAsset()->GetBuffer(); + AZStd::span indexBuffer = sourceMesh.GetIndexBufferAssetView().GetBufferAsset()->GetBuffer(); const AZ::RHI::BufferViewDescriptor& indexBufferViewDescriptor = sourceMesh.GetIndexBufferAssetView().GetBufferAsset()->GetBufferViewDescriptor(); AZ_ErrorOnce("EMotionFX", indexBufferViewDescriptor.m_elementSize == 4, "Index buffer must stored as 4 bytes."); const size_t indexBufferCountsInBytes = indexBufferViewDescriptor.m_elementCount * indexBufferViewDescriptor.m_elementSize; diff --git a/Gems/LyShine/Code/Source/LyShinePass.h b/Gems/LyShine/Code/Source/LyShinePass.h index 6275353641..c93f6db0a6 100644 --- a/Gems/LyShine/Code/Source/LyShinePass.h +++ b/Gems/LyShine/Code/Source/LyShinePass.h @@ -8,7 +8,7 @@ #include #include -#include +#include #include #include #include "LyShinePassDataBus.h" diff --git a/Gems/Terrain/Code/Source/TerrainRenderer/BindlessImageArrayHandler.cpp b/Gems/Terrain/Code/Source/TerrainRenderer/BindlessImageArrayHandler.cpp index 595877c88b..81095eb800 100644 --- a/Gems/Terrain/Code/Source/TerrainRenderer/BindlessImageArrayHandler.cpp +++ b/Gems/Terrain/Code/Source/TerrainRenderer/BindlessImageArrayHandler.cpp @@ -94,7 +94,7 @@ namespace AZ::Render return false; } - AZStd::array_view imageViews(m_bindlessImageViews.data(), m_bindlessImageViews.size()); + AZStd::span imageViews(m_bindlessImageViews.data(), m_bindlessImageViews.size()); return srg->SetImageViewUnboundedArray(m_texturesIndex, imageViews); } From 50982b82831a8dbf3b3cb9849ee9e09f334f495d Mon Sep 17 00:00:00 2001 From: mrieggeramzn <61609885+mrieggeramzn@users.noreply.github.com> Date: Wed, 26 Jan 2022 16:04:12 -0800 Subject: [PATCH 276/284] Exposing / Unifying the rasterstate depth bias values for all the shadowmap shaders (#7150) Signed-off-by: mrieggeramzn --- .../Types/EnhancedPBR_Shadowmap_WithPS.shader | 8 ++++++++ .../StandardMultilayerPBR_Shadowmap_WithPS.shader | 8 ++++++++ .../Types/StandardPBR_Shadowmap_WithPS.shader | 10 +++++++++- .../Common/Assets/Shaders/Shadow/Shadowmap.shader | 2 ++ .../Common/Assets/Shaders/Shadow/ShadowmapSkin.shader | 2 ++ 5 files changed, 29 insertions(+), 1 deletion(-) diff --git a/Gems/Atom/Feature/Common/Assets/Materials/Types/EnhancedPBR_Shadowmap_WithPS.shader b/Gems/Atom/Feature/Common/Assets/Materials/Types/EnhancedPBR_Shadowmap_WithPS.shader index 09d793e822..a2568e85ac 100644 --- a/Gems/Atom/Feature/Common/Assets/Materials/Types/EnhancedPBR_Shadowmap_WithPS.shader +++ b/Gems/Atom/Feature/Common/Assets/Materials/Types/EnhancedPBR_Shadowmap_WithPS.shader @@ -7,6 +7,14 @@ "DrawList" : "shadow", + // Note that lights now expose their own bias controls. + // It may be worth increasing their default values in the future and reducing the depthBias values encoded here. + "RasterState" : + { + "depthBias" : "10", + "depthBiasSlopeScale" : "4" + }, + "ProgramSettings": { "EntryPoints": diff --git a/Gems/Atom/Feature/Common/Assets/Materials/Types/StandardMultilayerPBR_Shadowmap_WithPS.shader b/Gems/Atom/Feature/Common/Assets/Materials/Types/StandardMultilayerPBR_Shadowmap_WithPS.shader index eb0d6dc40c..59c0b72d28 100644 --- a/Gems/Atom/Feature/Common/Assets/Materials/Types/StandardMultilayerPBR_Shadowmap_WithPS.shader +++ b/Gems/Atom/Feature/Common/Assets/Materials/Types/StandardMultilayerPBR_Shadowmap_WithPS.shader @@ -7,6 +7,14 @@ "DrawList" : "shadow", + // Note that lights now expose their own bias controls. + // It may be worth increasing their default values in the future and reducing the depthBias values encoded here. + "RasterState" : + { + "depthBias" : "10", + "depthBiasSlopeScale" : "4" + }, + "ProgramSettings": { "EntryPoints": diff --git a/Gems/Atom/Feature/Common/Assets/Materials/Types/StandardPBR_Shadowmap_WithPS.shader b/Gems/Atom/Feature/Common/Assets/Materials/Types/StandardPBR_Shadowmap_WithPS.shader index b9074dae4b..c73af2c1ed 100644 --- a/Gems/Atom/Feature/Common/Assets/Materials/Types/StandardPBR_Shadowmap_WithPS.shader +++ b/Gems/Atom/Feature/Common/Assets/Materials/Types/StandardPBR_Shadowmap_WithPS.shader @@ -6,7 +6,15 @@ }, "DrawList" : "shadow", - + + // Note that lights now expose their own bias controls. + // It may be worth increasing their default values in the future and reducing the depthBias values encoded here. + "RasterState" : + { + "depthBias" : "10", + "depthBiasSlopeScale" : "4" + }, + "ProgramSettings": { "EntryPoints": diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/Shadow/Shadowmap.shader b/Gems/Atom/Feature/Common/Assets/Shaders/Shadow/Shadowmap.shader index d56f40ccdb..5fc7917b40 100644 --- a/Gems/Atom/Feature/Common/Assets/Shaders/Shadow/Shadowmap.shader +++ b/Gems/Atom/Feature/Common/Assets/Shaders/Shadow/Shadowmap.shader @@ -7,6 +7,8 @@ "DrawList" : "shadow", + // Note that lights now expose their own bias controls. + // It may be worth increasing their default values in the future and reducing the depthBias values encoded here. "RasterState" : { "depthBias" : "10", diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/Shadow/ShadowmapSkin.shader b/Gems/Atom/Feature/Common/Assets/Shaders/Shadow/ShadowmapSkin.shader index 40379d9193..c5c11d0b2b 100644 --- a/Gems/Atom/Feature/Common/Assets/Shaders/Shadow/ShadowmapSkin.shader +++ b/Gems/Atom/Feature/Common/Assets/Shaders/Shadow/ShadowmapSkin.shader @@ -7,6 +7,8 @@ "DrawList" : "shadow", + // Note that lights now expose their own bias controls. + // It may be worth increasing their default values in the future and reducing the depthBias values encoded here. "RasterState" : { "depthBias" : "10", From f368997deb955101e5ffef66d988959fe6b10ba9 Mon Sep 17 00:00:00 2001 From: Chris Galvan Date: Wed, 26 Jan 2022 19:06:57 -0600 Subject: [PATCH 277/284] Modified the passing of span in test Signed-off-by: Chris Galvan --- Gems/Atom/RPI/Code/Source/RPI.Public/RPIUtils.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/RPIUtils.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/RPIUtils.cpp index ecca215536..2dd2885dff 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/RPIUtils.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/RPIUtils.cpp @@ -207,12 +207,11 @@ namespace AZ template T GetSubImagePixelValueInternal(const AZ::Data::Asset& imageAsset, uint32_t x, uint32_t y, uint32_t componentIndex, uint32_t mip, uint32_t slice) { - AZStd::array values = { aznumeric_cast(0) }; + AZStd::array values{ aznumeric_cast(0) }; auto topLeft = AZStd::make_pair(x, y); auto bottomRight = AZStd::make_pair(x + 1, y + 1); - AZStd::span valueSpan(values.begin(), values.size()); - GetSubImagePixelValues(imageAsset, topLeft, bottomRight, valueSpan, componentIndex, mip, slice); + GetSubImagePixelValues(imageAsset, topLeft, bottomRight, AZStd::span(values), componentIndex, mip, slice); return values[0]; } From 5ebe3d12dfce0f5203993abe21cb13f7b4857696 Mon Sep 17 00:00:00 2001 From: Mike Chang Date: Wed, 26 Jan 2022 17:11:58 -0800 Subject: [PATCH 278/284] Add file exists conditional for ebs_snapshot stash command (#7178) Signed-off-by: Mike Chang --- scripts/build/Jenkins/Jenkinsfile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/build/Jenkins/Jenkinsfile b/scripts/build/Jenkins/Jenkinsfile index e4957992a5..b21d9d832d 100644 --- a/scripts/build/Jenkins/Jenkinsfile +++ b/scripts/build/Jenkins/Jenkinsfile @@ -845,8 +845,10 @@ try { // Stash the INCREMENTAL_BUILD_SCRIPT_PATH and EBS_SNAPSHOT_SCRIPT_PATH since all nodes will use it stash name: 'incremental_build_script', includes: INCREMENTAL_BUILD_SCRIPT_PATH - stash name: 'ebs_snapshot_script', + if (fileExists(EBS_SNAPSHOT_SCRIPT_PATH)) { + stash name: 'ebs_snapshot_script', includes: EBS_SNAPSHOT_SCRIPT_PATH + } } } } From 75d39d9ce5ebe2a091277f5dd1b4dcc95c7a1e11 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 26 Jan 2022 17:51:20 -0800 Subject: [PATCH 279/284] makes bucket variables atomic (#7179) Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- Code/Framework/AzCore/AzCore/Memory/HphaSchema.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Code/Framework/AzCore/AzCore/Memory/HphaSchema.cpp b/Code/Framework/AzCore/AzCore/Memory/HphaSchema.cpp index 6891eb4248..5e0e3e2de8 100644 --- a/Code/Framework/AzCore/AzCore/Memory/HphaSchema.cpp +++ b/Code/Framework/AzCore/AzCore/Memory/HphaSchema.cpp @@ -719,8 +719,12 @@ namespace AZ { #endif // DEBUG_ALLOCATOR - size_t mTotalAllocatedSizeBuckets = 0; - size_t mTotalCapacitySizeBuckets = 0; + // Bucket-dependent counters need to atomic since the locks that protect bucket allocations are per bucket + // So multiple threads could be updating these counters + AZStd::atomic mTotalAllocatedSizeBuckets = 0; + AZStd::atomic mTotalCapacitySizeBuckets = 0; + // In the case of tree allocations, there is a lock on the tree, so these counters are protected from multiple + // threads through that lock size_t mTotalAllocatedSizeTree = 0; size_t mTotalCapacitySizeTree = 0; public: From 413ce5a6ab4f1cdd61d150921830a8a67b2de3ea Mon Sep 17 00:00:00 2001 From: Guthrie Adams Date: Wed, 26 Jan 2022 16:13:31 -0600 Subject: [PATCH 280/284] Atom Tools: move performance metrics status bar widgets to base window Signed-off-by: Guthrie Adams --- .../Window/AtomToolsMainWindow.h | 8 ++++ .../Source/Window/AtomToolsMainWindow.cpp | 38 +++++++++++++++++ .../Source/Window/MaterialEditorWindow.cpp | 41 ------------------- .../Code/Source/Window/MaterialEditorWindow.h | 9 ---- 4 files changed, 46 insertions(+), 50 deletions(-) diff --git a/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Window/AtomToolsMainWindow.h b/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Window/AtomToolsMainWindow.h index 92218d2542..86e9e2f291 100644 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Window/AtomToolsMainWindow.h +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Window/AtomToolsMainWindow.h @@ -16,6 +16,7 @@ #include #include +#include namespace AtomToolsFramework { @@ -45,9 +46,16 @@ namespace AtomToolsFramework virtual void OpenHelp(); virtual void OpenAbout(); + virtual void SetupMetrics(); + virtual void UpdateMetrics(); + AzQtComponents::FancyDocking* m_advancedDockManager = {}; QLabel* m_statusMessage = {}; + QLabel* m_statusBarFps = {}; + QLabel* m_statusBarCpuTime = {}; + QLabel* m_statusBarGpuTime = {}; + QTimer m_metricsTimer; QMenu* m_menuFile = {}; QMenu* m_menuEdit = {}; diff --git a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Window/AtomToolsMainWindow.cpp b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Window/AtomToolsMainWindow.cpp index 6a30ffc421..b6d519bd84 100644 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Window/AtomToolsMainWindow.cpp +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Window/AtomToolsMainWindow.cpp @@ -6,6 +6,7 @@ * */ +#include #include #include #include @@ -46,11 +47,15 @@ namespace AtomToolsFramework AddDockWidget("Python Terminal", new AzToolsFramework::CScriptTermDialog, Qt::BottomDockWidgetArea, Qt::Horizontal); SetDockWidgetVisible("Python Terminal", false); + SetupMetrics(); + AtomToolsMainWindowRequestBus::Handler::BusConnect(); } AtomToolsMainWindow::~AtomToolsMainWindow() { + AtomToolsFramework::PerformanceMonitorRequestBus::Broadcast( + &AtomToolsFramework::PerformanceMonitorRequestBus::Handler::SetProfilerEnabled, false); AtomToolsMainWindowRequestBus::Handler::BusDisconnect(); } @@ -192,4 +197,37 @@ namespace AtomToolsFramework void AtomToolsMainWindow::OpenAbout() { } + + + void AtomToolsMainWindow::SetupMetrics() + { + m_statusBarCpuTime = new QLabel(this); + statusBar()->addPermanentWidget(m_statusBarCpuTime); + m_statusBarGpuTime = new QLabel(this); + statusBar()->addPermanentWidget(m_statusBarGpuTime); + m_statusBarFps = new QLabel(this); + statusBar()->addPermanentWidget(m_statusBarFps); + + static constexpr int UpdateIntervalMs = 1000; + m_metricsTimer.setInterval(UpdateIntervalMs); + m_metricsTimer.start(); + connect(&m_metricsTimer, &QTimer::timeout, this, &AtomToolsMainWindow::UpdateMetrics); + + AtomToolsFramework::PerformanceMonitorRequestBus::Broadcast( + &AtomToolsFramework::PerformanceMonitorRequestBus::Handler::SetProfilerEnabled, true); + + UpdateMetrics(); + } + + void AtomToolsMainWindow::UpdateMetrics() + { + AtomToolsFramework::PerformanceMetrics metrics = {}; + AtomToolsFramework::PerformanceMonitorRequestBus::BroadcastResult( + metrics, &AtomToolsFramework::PerformanceMonitorRequestBus::Handler::GetMetrics); + + m_statusBarCpuTime->setText(tr("CPU Time %1 ms").arg(QString::number(metrics.m_cpuFrameTimeMs, 'f', 2))); + m_statusBarGpuTime->setText(tr("GPU Time %1 ms").arg(QString::number(metrics.m_gpuFrameTimeMs, 'f', 2))); + int frameRate = metrics.m_cpuFrameTimeMs > 0 ? aznumeric_cast(1000 / metrics.m_cpuFrameTimeMs) : 0; + m_statusBarFps->setText(tr("FPS %1").arg(QString::number(frameRate))); + } } // namespace AtomToolsFramework diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialEditorWindow.cpp b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialEditorWindow.cpp index 49356e6735..bed28d146c 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialEditorWindow.cpp +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialEditorWindow.cpp @@ -10,7 +10,6 @@ #include #include #include -#include #include #include #include @@ -112,14 +111,6 @@ namespace MaterialEditor } OnDocumentOpened(AZ::Uuid::CreateNull()); - - SetupMetrics(); - } - - MaterialEditorWindow::~MaterialEditorWindow() - { - AtomToolsFramework::PerformanceMonitorRequestBus::Broadcast( - &AtomToolsFramework::PerformanceMonitorRequestBus::Handler::SetProfilerEnabled, false); } void MaterialEditorWindow::ResizeViewportRenderTarget(uint32_t width, uint32_t height) @@ -213,38 +204,6 @@ namespace MaterialEditor Base::closeEvent(closeEvent); } - - void MaterialEditorWindow::SetupMetrics() - { - m_statusBarCpuTime = new QLabel(this); - statusBar()->addPermanentWidget(m_statusBarCpuTime); - m_statusBarGpuTime = new QLabel(this); - statusBar()->addPermanentWidget(m_statusBarGpuTime); - m_statusBarFps = new QLabel(this); - statusBar()->addPermanentWidget(m_statusBarFps); - - static constexpr int UpdateIntervalMs = 1000; - m_metricsTimer.setInterval(UpdateIntervalMs); - m_metricsTimer.start(); - connect(&m_metricsTimer, &QTimer::timeout, this, &MaterialEditorWindow::UpdateMetrics); - - AtomToolsFramework::PerformanceMonitorRequestBus::Broadcast( - &AtomToolsFramework::PerformanceMonitorRequestBus::Handler::SetProfilerEnabled, true); - - UpdateMetrics(); - } - - void MaterialEditorWindow::UpdateMetrics() - { - AtomToolsFramework::PerformanceMetrics metrics = {}; - AtomToolsFramework::PerformanceMonitorRequestBus::BroadcastResult( - metrics, &AtomToolsFramework::PerformanceMonitorRequestBus::Handler::GetMetrics); - - m_statusBarCpuTime->setText(tr("CPU Time %1 ms").arg(QString::number(metrics.m_cpuFrameTimeMs, 'f', 2))); - m_statusBarGpuTime->setText(tr("GPU Time %1 ms").arg(QString::number(metrics.m_gpuFrameTimeMs, 'f', 2))); - int frameRate = metrics.m_cpuFrameTimeMs > 0 ? aznumeric_cast(1000 / metrics.m_cpuFrameTimeMs) : 0; - m_statusBarFps->setText(tr("FPS %1").arg(QString::number(frameRate))); - } } // namespace MaterialEditor #include diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialEditorWindow.h b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialEditorWindow.h index 3cf08e0374..33b60add5b 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialEditorWindow.h +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialEditorWindow.h @@ -14,7 +14,6 @@ AZ_PUSH_DISABLE_WARNING(4251 4800, "-Wunknown-warning-option") // disable warnings spawned by QT #include #include -#include AZ_POP_DISABLE_WARNING #endif @@ -34,7 +33,6 @@ namespace MaterialEditor using Base = AtomToolsFramework::AtomToolsDocumentMainWindow; MaterialEditorWindow(QWidget* parent = 0); - ~MaterialEditorWindow(); protected: void ResizeViewportRenderTarget(uint32_t width, uint32_t height) override; @@ -49,14 +47,7 @@ namespace MaterialEditor void closeEvent(QCloseEvent* closeEvent) override; - void SetupMetrics(); - void UpdateMetrics(); - MaterialViewportWidget* m_materialViewport = {}; MaterialEditorToolBar* m_toolBar = {}; - QLabel* m_statusBarFps = {}; - QLabel* m_statusBarCpuTime = {}; - QLabel* m_statusBarGpuTime = {}; - QTimer m_metricsTimer; }; } // namespace MaterialEditor From e2c4c0e5e3e0b7bd4a3adf2fe0ffee6c9b454483 Mon Sep 17 00:00:00 2001 From: Roman <69218254+amzn-rhhong@users.noreply.github.com> Date: Wed, 26 Jan 2022 19:41:38 -0800 Subject: [PATCH 281/284] Atom viewport render option bugfix (#7158) * Render option bugfix Signed-off-by: rhhong * add aznumeric_cast Signed-off-by: rhhong --- .../EMotionFXAtom/Assets/Icons/Cloth.svg | 9 ++++++ .../Assets/Icons/HitDetection.svg | 12 +++++++ .../Assets/Icons/RagdollCollider.svg | 9 ++++++ .../Assets/Icons/RagdollJointLimit.svg | 8 +++++ .../EMotionFXAtom/Assets/Icons/Resources.qrc | 5 +++ .../Assets/Icons/SimulatedObjectCollider.svg | 9 ++++++ .../Code/Source/AtomActorDebugDraw.cpp | 32 +++++++++---------- .../Tools/EMStudio/AnimViewportToolBar.cpp | 17 ++++++---- .../Code/Tools/EMStudio/AnimViewportToolBar.h | 2 +- 9 files changed, 80 insertions(+), 23 deletions(-) create mode 100644 Gems/AtomLyIntegration/EMotionFXAtom/Assets/Icons/Cloth.svg create mode 100644 Gems/AtomLyIntegration/EMotionFXAtom/Assets/Icons/HitDetection.svg create mode 100644 Gems/AtomLyIntegration/EMotionFXAtom/Assets/Icons/RagdollCollider.svg create mode 100644 Gems/AtomLyIntegration/EMotionFXAtom/Assets/Icons/RagdollJointLimit.svg create mode 100644 Gems/AtomLyIntegration/EMotionFXAtom/Assets/Icons/SimulatedObjectCollider.svg diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Assets/Icons/Cloth.svg b/Gems/AtomLyIntegration/EMotionFXAtom/Assets/Icons/Cloth.svg new file mode 100644 index 0000000000..d19fad50ae --- /dev/null +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Assets/Icons/Cloth.svg @@ -0,0 +1,9 @@ + + + Icons / Actor / Cloth / On-2 + + + + + + diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Assets/Icons/HitDetection.svg b/Gems/AtomLyIntegration/EMotionFXAtom/Assets/Icons/HitDetection.svg new file mode 100644 index 0000000000..58056c2819 --- /dev/null +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Assets/Icons/HitDetection.svg @@ -0,0 +1,12 @@ + + + Icons / Actor / Hit Detection / On-2 + + + + + + + + + diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Assets/Icons/RagdollCollider.svg b/Gems/AtomLyIntegration/EMotionFXAtom/Assets/Icons/RagdollCollider.svg new file mode 100644 index 0000000000..e1468f3f9d --- /dev/null +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Assets/Icons/RagdollCollider.svg @@ -0,0 +1,9 @@ + + + Icons / Actor / Physics / On-236 + + + + + + diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Assets/Icons/RagdollJointLimit.svg b/Gems/AtomLyIntegration/EMotionFXAtom/Assets/Icons/RagdollJointLimit.svg new file mode 100644 index 0000000000..1a28021533 --- /dev/null +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Assets/Icons/RagdollJointLimit.svg @@ -0,0 +1,8 @@ + + + Icons / Actor / Joint / On-2 + + + + + diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Assets/Icons/Resources.qrc b/Gems/AtomLyIntegration/EMotionFXAtom/Assets/Icons/Resources.qrc index d035b84479..cbb07c7ee0 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Assets/Icons/Resources.qrc +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Assets/Icons/Resources.qrc @@ -1,8 +1,13 @@ Camera_category.svg + Cloth.svg + HitDetection.svg + RagdollCollider.svg + RagdollJointLimit.svg Rotate.svg Scale.svg + SimulatedObjectCollider.svg Translate.svg Visualization.svg diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Assets/Icons/SimulatedObjectCollider.svg b/Gems/AtomLyIntegration/EMotionFXAtom/Assets/Icons/SimulatedObjectCollider.svg new file mode 100644 index 0000000000..cd59987d4a --- /dev/null +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Assets/Icons/SimulatedObjectCollider.svg @@ -0,0 +1,9 @@ + + + Icons / Actor / Physics / On-2 + + + + + + diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/AtomActorDebugDraw.cpp b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/AtomActorDebugDraw.cpp index 21f9f69f7c..deb668d12a 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/AtomActorDebugDraw.cpp +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/AtomActorDebugDraw.cpp @@ -301,7 +301,7 @@ namespace AZ::Render RPI::AuxGeomDraw::AuxGeomDynamicDrawArguments lineArgs; lineArgs.m_verts = m_auxVertices.data(); - lineArgs.m_vertCount = static_cast(m_auxVertices.size()); + lineArgs.m_vertCount = aznumeric_cast(m_auxVertices.size()); lineArgs.m_colors = m_auxColors.data(); lineArgs.m_colorCount = lineArgs.m_vertCount; lineArgs.m_depthTest = RPI::AuxGeomDraw::DepthTest::Off; @@ -393,9 +393,9 @@ namespace AZ::Render RPI::AuxGeomDraw::AuxGeomDynamicDrawArguments lineArgs; lineArgs.m_verts = m_auxVertices.data(); - lineArgs.m_vertCount = static_cast(m_auxVertices.size()); + lineArgs.m_vertCount = aznumeric_cast(m_auxVertices.size()); lineArgs.m_colors = m_auxColors.data(); - lineArgs.m_colorCount = static_cast(m_auxColors.size()); + lineArgs.m_colorCount = aznumeric_cast(m_auxColors.size()); lineArgs.m_depthTest = RPI::AuxGeomDraw::DepthTest::Off; auxGeom->DrawLines(lineArgs); } @@ -464,15 +464,15 @@ namespace AZ::Render m_auxVertices.emplace_back(normalPos); m_auxVertices.emplace_back(normalPos + (normalDir * faceNormalsScale * scaleMultiplier)); } - } - RPI::AuxGeomDraw::AuxGeomDynamicDrawArguments lineArgs; - lineArgs.m_verts = m_auxVertices.data(); - lineArgs.m_vertCount = static_cast(m_auxVertices.size()); - lineArgs.m_colors = &faceNormalsColor; - lineArgs.m_colorCount = 1; - lineArgs.m_depthTest = RPI::AuxGeomDraw::DepthTest::Off; - auxGeom->DrawLines(lineArgs); + RPI::AuxGeomDraw::AuxGeomDynamicDrawArguments lineArgs; + lineArgs.m_verts = m_auxVertices.data(); + lineArgs.m_vertCount = aznumeric_cast(m_auxVertices.size()); + lineArgs.m_colors = &faceNormalsColor; + lineArgs.m_colorCount = 1; + lineArgs.m_depthTest = RPI::AuxGeomDraw::DepthTest::Off; + auxGeom->DrawLines(lineArgs); + } } // render vertex normals @@ -501,7 +501,7 @@ namespace AZ::Render RPI::AuxGeomDraw::AuxGeomDynamicDrawArguments lineArgs; lineArgs.m_verts = m_auxVertices.data(); - lineArgs.m_vertCount = static_cast(m_auxVertices.size()); + lineArgs.m_vertCount = aznumeric_cast(m_auxVertices.size()); lineArgs.m_colors = &vertexNormalsColor; lineArgs.m_colorCount = 1; lineArgs.m_depthTest = RPI::AuxGeomDraw::DepthTest::Off; @@ -589,9 +589,9 @@ namespace AZ::Render RPI::AuxGeomDraw::AuxGeomDynamicDrawArguments lineArgs; lineArgs.m_verts = m_auxVertices.data(); - lineArgs.m_vertCount = static_cast(m_auxVertices.size()); + lineArgs.m_vertCount = aznumeric_cast(m_auxVertices.size()); lineArgs.m_colors = m_auxColors.data(); - lineArgs.m_colorCount = static_cast(m_auxColors.size()); + lineArgs.m_colorCount = aznumeric_cast(m_auxColors.size()); lineArgs.m_depthTest = RPI::AuxGeomDraw::DepthTest::Off; auxGeom->DrawLines(lineArgs); } @@ -649,7 +649,7 @@ namespace AZ::Render RPI::AuxGeomDraw::AuxGeomDynamicDrawArguments lineArgs; lineArgs.m_verts = m_auxVertices.data(); - lineArgs.m_vertCount = static_cast(m_auxVertices.size()); + lineArgs.m_vertCount = aznumeric_cast(m_auxVertices.size()); lineArgs.m_colors = &wireframeColor; lineArgs.m_colorCount = 1; lineArgs.m_depthTest = RPI::AuxGeomDraw::DepthTest::Off; @@ -688,7 +688,7 @@ namespace AZ::Render m_drawParams.m_drawViewportId = viewportContext->GetId(); AzFramework::WindowSize viewportSize = viewportContext->GetViewportSize(); - m_drawParams.m_position = AZ::Vector3(static_cast(viewportSize.m_width), 0.0f, 1.0f) + + m_drawParams.m_position = AZ::Vector3(aznumeric_cast(viewportSize.m_width), 0.0f, 1.0f) + TopRightBorderPadding * viewportContext->GetDpiScalingFactor(); m_drawParams.m_scale = AZ::Vector2(BaseFontSize); m_drawParams.m_hAlign = AzFramework::TextHorizontalAlignment::Right; diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportToolBar.cpp b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportToolBar.cpp index 455c587818..d9de41f54b 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportToolBar.cpp +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportToolBar.cpp @@ -79,11 +79,16 @@ namespace EMStudio // [EMFX-TODO] Add those option once implemented. // CreateViewOptionEntry(contextMenu, "Actor Bind Pose", EMotionFX::ActorRenderFlag::RENDER_ACTORBINDPOSE); contextMenu->addSeparator(); - CreateViewOptionEntry(contextMenu, "Hit Detection Colliders", EMotionFX::ActorRenderFlag::RENDER_HITDETECTION_COLLIDERS); - CreateViewOptionEntry(contextMenu, "Ragdoll Colliders", EMotionFX::ActorRenderFlag::RENDER_RAGDOLL_COLLIDERS); - CreateViewOptionEntry(contextMenu, "Ragdoll Joint Limits", EMotionFX::ActorRenderFlag::RENDER_RAGDOLL_JOINTLIMITS); - CreateViewOptionEntry(contextMenu, "Cloth Colliders", EMotionFX::ActorRenderFlag::RENDER_CLOTH_COLLIDERS); - CreateViewOptionEntry(contextMenu, "Simulated Object Colliders", EMotionFX::ActorRenderFlag::RENDER_SIMULATEDOBJECT_COLLIDERS); + CreateViewOptionEntry(contextMenu, "Hit Detection Colliders", EMotionFX::ActorRenderFlag::RENDER_HITDETECTION_COLLIDERS, true, + ":/EMotionFXAtom/HitDetection.svg"); + CreateViewOptionEntry(contextMenu, "Ragdoll Colliders", EMotionFX::ActorRenderFlag::RENDER_RAGDOLL_COLLIDERS, true, + ":/EMotionFXAtom/RagdollCollider.svg"); + CreateViewOptionEntry(contextMenu, "Ragdoll Joint Limits", EMotionFX::ActorRenderFlag::RENDER_RAGDOLL_JOINTLIMITS, true, + ":/EMotionFXAtom/RagdollJointLimit.svg"); + CreateViewOptionEntry(contextMenu, "Cloth Colliders", EMotionFX::ActorRenderFlag::RENDER_CLOTH_COLLIDERS, true, + ":/EMotionFXAtom/Cloth.svg"); + CreateViewOptionEntry(contextMenu, "Simulated Object Colliders", EMotionFX::ActorRenderFlag::RENDER_SIMULATEDOBJECT_COLLIDERS, true, + ":/EMotionFXAtom/SimulatedObjectCollider.svg"); CreateViewOptionEntry(contextMenu, "Simulated Joints", EMotionFX::ActorRenderFlag::RENDER_SIMULATEJOINTS); } @@ -153,7 +158,7 @@ namespace EMStudio } void AnimViewportToolBar::CreateViewOptionEntry( - QMenu* menu, const char* menuEntryName, uint32_t actionIndex, bool visible, char* iconFileName) + QMenu* menu, const char* menuEntryName, uint32_t actionIndex, bool visible, const char* iconFileName) { QAction* action = menu->addAction( menuEntryName, diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportToolBar.h b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportToolBar.h index 30f2c6b80c..f516b9df28 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportToolBar.h +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Tools/EMStudio/AnimViewportToolBar.h @@ -30,7 +30,7 @@ namespace EMStudio private: void CreateViewOptionEntry( - QMenu* menu, const char* menuEntryName, uint32_t actionIndex, bool visible = true, char* iconFileName = nullptr); + QMenu* menu, const char* menuEntryName, uint32_t actionIndex, bool visible = true, const char* iconFileName = nullptr); AtomRenderPlugin* m_plugin = nullptr; QAction* m_manipulatorActions[RenderOptions::ManipulatorMode::NUM_MODES] = { nullptr }; From bbd91755ea8c8177b34ab44434cf85a6224abb96 Mon Sep 17 00:00:00 2001 From: Benjamin Jillich <43751992+amzn-jillich@users.noreply.github.com> Date: Thu, 27 Jan 2022 13:23:39 +0100 Subject: [PATCH 282/284] EMotion FX: Recent files menu in Animation Editor also shows files from external gems (#7160) Recent files were only shown from sub-folders of the project and assets from gems (inside project and external) were not visible. Signed-off-by: Benjamin Jillich --- .../Code/MysticQt/Source/RecentFiles.cpp | 74 +++++++++---------- 1 file changed, 35 insertions(+), 39 deletions(-) diff --git a/Gems/EMotionFX/Code/MysticQt/Source/RecentFiles.cpp b/Gems/EMotionFX/Code/MysticQt/Source/RecentFiles.cpp index b5dfd2ead1..26f0bb8e57 100644 --- a/Gems/EMotionFX/Code/MysticQt/Source/RecentFiles.cpp +++ b/Gems/EMotionFX/Code/MysticQt/Source/RecentFiles.cpp @@ -11,13 +11,13 @@ #include #include #include +#include #include #include #include #include #include - namespace MysticQt { class ToolTipMenu @@ -128,56 +128,52 @@ namespace MysticQt { m_recentFilesMenu->clear(); - AZStd::string sourceFolder = EMotionFX::GetEMotionFX().GetAssetSourceFolder(); AZStd::string cacheFolder = EMotionFX::GetEMotionFX().GetAssetCacheFolder(); - AzFramework::StringFunc::Path::Normalize(sourceFolder); AzFramework::StringFunc::Path::Normalize(cacheFolder); - AzFramework::StringFunc::Strip(sourceFolder, AZ_CORRECT_FILESYSTEM_SEPARATOR, true, false, true); AzFramework::StringFunc::Strip(cacheFolder, AZ_CORRECT_FILESYSTEM_SEPARATOR, true, false, true); int recentFilesAdded = 0; - QString menuItemText; - AZStd::string folder; const int recentFileCount = m_recentFiles.size(); for (int i = 0; i < recentFileCount; ++i) { - const QFileInfo fileInfo(m_recentFiles[i]); - folder = fileInfo.absolutePath().toUtf8().data(); - AzFramework::StringFunc::Path::Normalize(folder); - AzFramework::StringFunc::Strip(folder, AZ_CORRECT_FILESYSTEM_SEPARATOR, true, false, true); - - auto CharacterCompareIgnoreCase = [](const char lhs, const char rhs) + const QString recentFilePath = m_recentFiles[i]; + if (!QFile::exists(recentFilePath)) { - return tolower(lhs) == tolower(rhs); - }; - auto PathCompareIgnoreCase = [&CharacterCompareIgnoreCase](const AZ::IO::PathView& lhs, const AZ::IO::PathView& rhs) - { - AZStd::string_view lhsStringView = lhs.Native(); - AZStd::string_view rhsStringView = rhs.Native(); - return AZStd::equal(lhsStringView.begin(), lhsStringView.end(), rhsStringView.begin(), rhsStringView.end(), - CharacterCompareIgnoreCase); - }; + continue; + } - AZ::IO::PathView folderPathView(folder); - AZ::IO::PathView assetSourceView(sourceFolder); - AZ::IO::PathView assetCacheView(cacheFolder); - // The source folder is case-sensitive, so use the normal path compare - auto [folderPathIter, assetSourceIter] = AZStd::mismatch(folderPathView.begin(), folderPathView.end(), - assetSourceView.begin(), assetSourceView.end()); - // The Cache folder is always lowercase, so compare while ignoring case - auto [folderPathIter2, assetCacheIter] = AZStd::mismatch(folderPathView.begin(), folderPathView.end(), - assetCacheView.begin(), assetCacheView.end(), PathCompareIgnoreCase); - // Both of the above mismatch checks if folder path is a sub-directory of the asset source path or - // the asset cache path. If either asset source path or asset cache path PathView reaches the end - // iterator, then the folder path is either equal to one of them or a sub-directory of one of them + AZStd::string normalizedPath = recentFilePath.toUtf8().data(); + AzFramework::StringFunc::Path::Normalize(normalizedPath); - // Skip files that are not part of the current game directory. - if (sourceFolder == folder - || assetSourceIter == assetSourceView.end() - || cacheFolder == folder - || assetCacheIter == assetCacheView.end()) + // Check if the file can be found in any of the scan folders (Project asset paths, gem asset paths, etc.) + bool foundInScanFolders = false; { - menuItemText = QString("&%1 %2").arg(i + 1).arg(fileInfo.fileName()); + bool getScanFoldersSuccess = false; + AZStd::vector scanFolders; + AzToolsFramework::AssetSystemRequestBus::BroadcastResult(getScanFoldersSuccess, &AzToolsFramework::AssetSystemRequestBus::Events::GetScanFolders, scanFolders); + if (getScanFoldersSuccess) + { + for (AZStd::string& scanFolder : scanFolders) + { + AzFramework::StringFunc::Path::Normalize(scanFolder); + if (AzFramework::StringFunc::Contains(normalizedPath, scanFolder)) + { + foundInScanFolders = true; + } + } + } + + // Is the file part of the asset cache folder? + if (AzFramework::StringFunc::Contains(normalizedPath, cacheFolder)) + { + foundInScanFolders = true; + } + } + + if (foundInScanFolders) + { + const QFileInfo fileInfo(m_recentFiles[i]); + const QString menuItemText = QString("&%1 %2").arg(i + 1).arg(fileInfo.fileName()); QAction* action = new QAction(m_recentFilesMenu); action->setText(menuItemText); From 61b494a3c78ab9f3610104baf1a13a7ca88f6466 Mon Sep 17 00:00:00 2001 From: greerdv Date: Thu, 27 Jan 2022 13:56:24 +0000 Subject: [PATCH 283/284] fix for changes in non-uniform scale component mode not persisting Signed-off-by: greerdv --- .../ToolsComponents/EditorNonUniformScaleComponentMode.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/EditorNonUniformScaleComponentMode.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/EditorNonUniformScaleComponentMode.cpp index 2e02b820b8..63334a893b 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/EditorNonUniformScaleComponentMode.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ToolsComponents/EditorNonUniformScaleComponentMode.cpp @@ -27,6 +27,7 @@ namespace AzToolsFramework worldFromLocal.ExtractUniformScale(); m_manipulators = AZStd::make_unique(worldFromLocal); m_manipulators->Register(g_mainManipulatorManagerId); + m_manipulators->AddEntityComponentIdPair(entityComponentIdPair); m_manipulators->SetAxes(AZ::Vector3::CreateAxisX(), AZ::Vector3::CreateAxisY(), AZ::Vector3::CreateAxisZ()); const float axisLength = 2.0f; m_manipulators->ConfigureView( From f7f17c98b4cf43583a679be38ea8fa480147a731 Mon Sep 17 00:00:00 2001 From: Scott Romero <24445312+AMZN-ScottR@users.noreply.github.com> Date: Thu, 27 Jan 2022 11:12:15 -0800 Subject: [PATCH 284/284] [development] fixed ambiguous 'byte' type MSVC build error (#7184) - fully quality 'byte' type in AZStd::span - remove unnecessary 'using namespace AZStd;' statement from AssetCatalog tests Signed-off-by: AMZN-ScottR <24445312+AMZN-ScottR@users.noreply.github.com> --- Code/Framework/AzCore/AzCore/std/containers/span.h | 4 ++-- Code/Framework/AzCore/AzCore/std/containers/span.inl | 12 ++++++------ Code/Framework/AzFramework/Tests/AssetCatalog.cpp | 1 - 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/Code/Framework/AzCore/AzCore/std/containers/span.h b/Code/Framework/AzCore/AzCore/std/containers/span.h index 807d87e634..e511b49bd5 100644 --- a/Code/Framework/AzCore/AzCore/std/containers/span.h +++ b/Code/Framework/AzCore/AzCore/std/containers/span.h @@ -189,11 +189,11 @@ namespace AZStd // [span.objectrep], views of object representation template auto as_bytes(span s) noexcept - -> span; + -> span; template auto as_writable_bytes(span s) noexcept - -> enable_if_t, span>; + -> enable_if_t, span>; } // namespace AZStd diff --git a/Code/Framework/AzCore/AzCore/std/containers/span.inl b/Code/Framework/AzCore/AzCore/std/containers/span.inl index 765056cb67..1b7cbd6094 100644 --- a/Code/Framework/AzCore/AzCore/std/containers/span.inl +++ b/Code/Framework/AzCore/AzCore/std/containers/span.inl @@ -197,18 +197,18 @@ namespace AZStd template inline auto as_bytes(span s) noexcept - -> span + -> span { - return span( - reinterpret_cast(s.data()), s.size_bytes()); + return span( + reinterpret_cast(s.data()), s.size_bytes()); } template inline auto as_writable_bytes(span s) noexcept - -> enable_if_t, span> + -> enable_if_t, span> { - return span( - reinterpret_cast(s.data()), s.size_bytes()); + return span( + reinterpret_cast(s.data()), s.size_bytes()); } } // namespace AZStd diff --git a/Code/Framework/AzFramework/Tests/AssetCatalog.cpp b/Code/Framework/AzFramework/Tests/AssetCatalog.cpp index e731b633f0..728df29a7f 100644 --- a/Code/Framework/AzFramework/Tests/AssetCatalog.cpp +++ b/Code/Framework/AzFramework/Tests/AssetCatalog.cpp @@ -34,7 +34,6 @@ #include "AZTestShared/Utils/Utils.h" -using namespace AZStd; using namespace AZ::Data; namespace UnitTest