diff --git a/Editor/Editor.cpp b/Editor/Editor.cpp index fa8af523f..c8fc19fa8 100644 --- a/Editor/Editor.cpp +++ b/Editor/Editor.cpp @@ -9,13 +9,20 @@ #include #include +using namespace std; +using namespace wiGraphics; +using namespace wiRectPacker; +using namespace wiScene; +using namespace wiECS; + + #ifdef PLATFORM_UWP #include #include using namespace winrt::Windows::Storage; -void copy_folder(StorageFolder src, StorageFolder dst) +winrt::fire_and_forget copy_folder(StorageFolder src, StorageFolder dst) { - auto items = src.GetItemsAsync().get(); + auto items = co_await src.GetItemsAsync(); for (auto item : items) { if (item.IsOfType(StorageItemTypes::File)) @@ -31,7 +38,7 @@ void copy_folder(StorageFolder src, StorageFolder dst) else if (item.IsOfType(StorageItemTypes::Folder)) { StorageFolder src_child = item.as(); - auto dst_child = dst.CreateFolderAsync(item.Name(), CreationCollisionOption::OpenIfExists).get(); + auto dst_child = co_await dst.CreateFolderAsync(item.Name(), CreationCollisionOption::OpenIfExists); if (dst_child) { copy_folder(src_child, dst_child); @@ -39,13 +46,61 @@ void copy_folder(StorageFolder src, StorageFolder dst) } } }; -#endif // PLATFORM_UWP +winrt::fire_and_forget uwp_copy_assets() +{ + // On UWP we will copy the base content from application folder to 3D Objects directory + // for easy access to the user: + StorageFolder location = KnownFolders::Objects3D(); -using namespace std; -using namespace wiGraphics; -using namespace wiRectPacker; -using namespace wiScene; -using namespace wiECS; + // Objects3D/WickedEngine + auto destfolder = co_await location.CreateFolderAsync(L"WickedEngine", CreationCollisionOption::OpenIfExists); + + string rootdir = wiHelper::ExpandPath(wiHelper::GetOriginalWorkingDirectory()); + wstring wstr; + + // scripts: + { + wiHelper::StringConvert(rootdir + "scripts\\", wstr); + auto src = co_await StorageFolder::GetFolderFromPathAsync(wstr.c_str()); + if (src) + { + auto dst = co_await destfolder.CreateFolderAsync(L"scripts", CreationCollisionOption::OpenIfExists); + if (dst) + { + copy_folder(src, dst); + } + } + } + + // models: + { + wiHelper::StringConvert(rootdir + "models\\", wstr); + auto src = co_await StorageFolder::GetFolderFromPathAsync(wstr.c_str()); + if (src) + { + auto dst = co_await destfolder.CreateFolderAsync(L"models", CreationCollisionOption::OpenIfExists); + if (dst) + { + copy_folder(src, dst); + } + } + } + + // Documentation: + { + wiHelper::StringConvert(rootdir + "Documentation\\", wstr); + auto src = co_await StorageFolder::GetFolderFromPathAsync(wstr.c_str()); + if (src) + { + auto dst = destfolder.CreateFolderAsync(L"Documentation", CreationCollisionOption::OpenIfExists).get(); + if (dst) + { + copy_folder(src, dst); + } + } + } +} +#endif // PLATFORM_UWP void Editor::Initialize() { @@ -336,65 +391,11 @@ void EditorComponent::ResizeLayout() } void EditorComponent::Load() { - wiJobSystem::context ctx; - #ifdef PLATFORM_UWP - wiJobSystem::Execute(ctx, [this](wiJobArgs args) { - // On UWP we will copy the base content from application folder to 3D Objects directory - // for easy access to the user: - StorageFolder location = KnownFolders::Objects3D(); - - // Objects3D/WickedEngine - auto destfolder = location.CreateFolderAsync(L"WickedEngine", CreationCollisionOption::OpenIfExists).get(); - - string rootdir = wiHelper::ExpandPath(wiHelper::GetOriginalWorkingDirectory()); - wstring wstr; - - // scripts: - { - wiHelper::StringConvert(rootdir + "scripts\\", wstr); - auto src = StorageFolder::GetFolderFromPathAsync(wstr.c_str()).get(); - if (src) - { - auto dst = destfolder.CreateFolderAsync(L"scripts", CreationCollisionOption::OpenIfExists).get(); - if (dst) - { - copy_folder(src, dst); - } - } - } - - // models: - { - wiHelper::StringConvert(rootdir + "models\\", wstr); - auto src = StorageFolder::GetFolderFromPathAsync(wstr.c_str()).get(); - if (src) - { - auto dst = destfolder.CreateFolderAsync(L"models", CreationCollisionOption::OpenIfExists).get(); - if (dst) - { - copy_folder(src, dst); - } - } - } - - // Documentation: - { - wiHelper::StringConvert(rootdir + "Documentation\\", wstr); - auto src = StorageFolder::GetFolderFromPathAsync(wstr.c_str()).get(); - if (src) - { - auto dst = destfolder.CreateFolderAsync(L"Documentation", CreationCollisionOption::OpenIfExists).get(); - if (dst) - { - copy_folder(src, dst); - } - } - } - - }); + uwp_copy_assets(); #endif // PLATFORM_UWP + wiJobSystem::context ctx; wiJobSystem::Execute(ctx, [this](wiJobArgs args) { pointLightTex = wiResourceManager::Load("images/pointlight.dds"); }); wiJobSystem::Execute(ctx, [this](wiJobArgs args) { spotLightTex = wiResourceManager::Load("images/spotlight.dds"); }); wiJobSystem::Execute(ctx, [this](wiJobArgs args) { dirLightTex = wiResourceManager::Load("images/directional_light.dds"); });