88
99namespace Lux
1010{
11+ const char * RuntimeExportTargetToString (RuntimeExportTarget target)
12+ {
13+ switch (target)
14+ {
15+ case RuntimeExportTarget::Debug: return " Debug" ;
16+ case RuntimeExportTarget::Release: return " Release" ;
17+ case RuntimeExportTarget::Dist: return " Dist" ;
18+ }
19+
20+ return " Release" ;
21+ }
22+
23+ RuntimeExportTarget RuntimeExportTargetFromString (std::string_view value)
24+ {
25+ if (value == " Debug" || value == " 0" )
26+ return RuntimeExportTarget::Debug;
27+ if (value == " Dist" || value == " 2" )
28+ return RuntimeExportTarget::Dist;
29+ return RuntimeExportTarget::Release;
30+ }
31+
1132 std::filesystem::path Project::GetAssetAbsolutePath (const std::filesystem::path& path) const
1233 {
1334 return GetAssetDirectory () / path;
@@ -50,6 +71,15 @@ namespace Lux
5071 s_ActiveProject->m_Config .StartScene = startSceneMetadata.FilePath .generic_string ();
5172 }
5273
74+ if (!s_ActiveProject->m_Config .RuntimeExport .IconPath .empty ())
75+ s_ActiveProject->m_Config .RuntimeExport .IconHandle = GetEditorAssetManager ()->GetAssetHandleFromFilePath (s_ActiveProject->m_Config .RuntimeExport .IconPath );
76+ else if (s_ActiveProject->m_Config .RuntimeExport .IconHandle )
77+ {
78+ AssetMetadata iconMetadata = GetEditorAssetManager ()->GetMetadata (s_ActiveProject->m_Config .RuntimeExport .IconHandle );
79+ if (iconMetadata.IsValid ())
80+ s_ActiveProject->m_Config .RuntimeExport .IconPath = iconMetadata.FilePath .generic_string ();
81+ }
82+
5383 if (!AudioEngine::HasInitializedEngine ())
5484 {
5585 AudioEngine::Init ();
@@ -66,13 +96,31 @@ namespace Lux
6696 }
6797
6898 s_ActiveProject = project;
99+ if (AudioEngine::HasInitializedEngine ())
100+ {
101+ AudioEngine::Shutdown ();
102+ AudioEngine::SetInitalizedEngine (false );
103+ }
104+
69105 if (!s_ActiveProject)
70106 return ;
71107
108+ if (s_ActiveProject->m_ProjectDirectory .empty ())
109+ s_ActiveProject->m_ProjectDirectory = s_ActiveProject->m_Config .ProjectDirectory ;
110+ if (s_ActiveProject->m_ProjectFilePath .empty () && !s_ActiveProject->m_ProjectDirectory .empty ())
111+ s_ActiveProject->m_ProjectFilePath = s_ActiveProject->m_ProjectDirectory / s_ActiveProject->m_Config .ProjectFileName ;
112+
72113 s_ActiveProject->m_Config .ProjectDirectory = s_ActiveProject->m_ProjectDirectory ;
73114 s_ActiveProject->m_Config .ProjectFileName = s_ActiveProject->m_ProjectFilePath .filename ().string ();
115+
74116 s_AssetManager = Ref<RuntimeAssetManager>::Create ();
75117 GetRuntimeAssetManager ()->SetAssetPack (assetPack);
118+
119+ if (!AudioEngine::HasInitializedEngine ())
120+ {
121+ AudioEngine::Init ();
122+ AudioEngine::SetInitalizedEngine (true );
123+ }
76124 }
77125
78126 Ref<Project> Project::New ()
@@ -83,6 +131,23 @@ namespace Lux
83131 return s_ActiveProject;
84132 }
85133
134+ Ref<Project> Project::LoadRuntime (const std::filesystem::path& path, Ref<AssetPack> assetPack)
135+ {
136+ Ref<Project> project = Ref<Project>::Create ();
137+
138+ ProjectSerializer serializer (project);
139+ if (!serializer.DeserializeRuntime (path))
140+ return nullptr ;
141+
142+ project->m_ProjectFilePath = path.lexically_normal ();
143+ project->m_ProjectDirectory = path.parent_path ();
144+ project->m_Config .ProjectDirectory = project->m_ProjectDirectory ;
145+ project->m_Config .ProjectFileName = project->m_ProjectFilePath .filename ().string ();
146+
147+ SetActiveRuntime (project, assetPack);
148+ return s_ActiveProject;
149+ }
150+
86151 Ref<Project> Project::Load (const std::filesystem::path& path)
87152 {
88153 Ref<Project> project = Ref<Project>::Create ();
@@ -106,6 +171,9 @@ namespace Lux
106171 if (!s_ActiveProject->m_Config .StartScene .empty () && GetEditorAssetManager ())
107172 s_ActiveProject->m_Config .StartSceneHandle = GetEditorAssetManager ()->GetAssetHandleFromFilePath (s_ActiveProject->m_Config .StartScene );
108173
174+ if (!s_ActiveProject->m_Config .RuntimeExport .IconPath .empty () && GetEditorAssetManager ())
175+ s_ActiveProject->m_Config .RuntimeExport .IconHandle = GetEditorAssetManager ()->GetAssetHandleFromFilePath (s_ActiveProject->m_Config .RuntimeExport .IconPath );
176+
109177 if (s_ActiveProject->m_Config .DefaultNamespace .empty ())
110178 s_ActiveProject->m_Config .DefaultNamespace = s_ActiveProject->m_Config .Name ;
111179
@@ -132,5 +200,8 @@ namespace Lux
132200
133201 if (m_Config.ScriptModulePath .empty ())
134202 m_Config.ScriptModulePath = std::filesystem::path (" Scripts/Binaries" ) / (m_Config.Name + " .dll" );
203+
204+ if (m_Config.RuntimeExport .GameName .empty ())
205+ m_Config.RuntimeExport .GameName = m_Config.Name ;
135206 }
136207}
0 commit comments