diff --git a/Source/Editor/Analytics/EditorAnalyticsController.cpp b/Source/Editor/Analytics/EditorAnalyticsController.cpp
index 48dc83c6c..44cc58827 100644
--- a/Source/Editor/Analytics/EditorAnalyticsController.cpp
+++ b/Source/Editor/Analytics/EditorAnalyticsController.cpp
@@ -7,7 +7,8 @@
void RegisterGameCookingStart(GameCooker::EventType type)
{
- auto platform = ToString(GameCooker::GetCurrentData().Platform);
+ auto& data = *GameCooker::GetCurrentData();
+ auto platform = ToString(data.Platform);
if (type == GameCooker::EventType::BuildStarted)
{
EditorAnalytics::SendEvent("Actions", "GameCooker.Start", platform);
diff --git a/Source/Editor/Cooker/CookingData.h b/Source/Editor/Cooker/CookingData.h
index 848bf199b..8a5bfb58f 100644
--- a/Source/Editor/Cooker/CookingData.h
+++ b/Source/Editor/Cooker/CookingData.h
@@ -3,11 +3,11 @@
#pragma once
#include "Engine/Core/Log.h"
-#include "Engine/Core/Enums.h"
+#include "Engine/Core/Types/Guid.h"
#include "Engine/Core/Collections/Array.h"
#include "Engine/Core/Collections/HashSet.h"
#include "Engine/Core/Collections/Dictionary.h"
-#include "Engine/Core/Types/Guid.h"
+#include "Engine/Scripting/ScriptingObject.h"
class GameCooker;
class PlatformTools;
@@ -125,47 +125,50 @@ extern FLAXENGINE_API const Char* ToString(const BuildConfiguration configuratio
///
/// Game cooking temporary data.
///
-struct FLAXENGINE_API CookingData
+API_CLASS(Sealed, Namespace="FlaxEditor") class FLAXENGINE_API CookingData : public PersistentScriptingObject
{
+DECLARE_SCRIPTING_TYPE(CookingData);
+public:
+
///
/// The platform.
///
- BuildPlatform Platform;
+ API_FIELD(ReadOnly) BuildPlatform Platform;
///
/// The configuration.
///
- BuildConfiguration Configuration;
+ API_FIELD(ReadOnly) BuildConfiguration Configuration;
///
/// The options.
///
- BuildOptions Options;
+ API_FIELD(ReadOnly) BuildOptions Options;
///
/// The list of custom defines passed to the build tool when compiling project scripts. Can be used in build scripts for configuration (Configuration.CustomDefines).
///
- Array CustomDefines;
+ API_FIELD(ReadOnly) Array CustomDefines;
///
/// The original output path (actual OutputPath could be modified by the Platform Tools or a plugin for additional layout customizations or packaging). This path is preserved.
///
- String OriginalOutputPath;
+ API_FIELD(ReadOnly) String OriginalOutputPath;
///
/// The output path for data files (Content, Mono, etc.).
///
- String DataOutputPath;
+ API_FIELD(ReadOnly) String DataOutputPath;
///
/// The output path for binaries (native executable and native code libraries).
///
- String NativeCodeOutputPath;
+ API_FIELD(ReadOnly) String NativeCodeOutputPath;
///
/// The output path for binaries (C# code libraries).
///
- String ManagedCodeOutputPath;
+ API_FIELD(ReadOnly) String ManagedCodeOutputPath;
///
/// The platform tools.
@@ -248,7 +251,7 @@ public:
///
HashSet Assets;
- struct BinaryModule
+ struct BinaryModuleInfo
{
String Name;
String NativePath;
@@ -258,17 +261,10 @@ public:
///
/// The binary modules used in the build. Valid after scripts compilation step. This list includes game, all plugins modules and engine module.
///
- Array> BinaryModules;
+ Array> BinaryModules;
public:
- void Init()
- {
- RootAssets.Clear();
- Assets.Clear();
- Stats = Statistics();
- }
-
///
/// Gets the absolute path to the Platform Data folder that contains the binary files used by the current build configuration.
///
diff --git a/Source/Editor/Cooker/GameCooker.cpp b/Source/Editor/Cooker/GameCooker.cpp
index fddd63a78..b7a78c45a 100644
--- a/Source/Editor/Cooker/GameCooker.cpp
+++ b/Source/Editor/Cooker/GameCooker.cpp
@@ -68,7 +68,7 @@ namespace GameCookerImpl
String ProgressMsg;
float ProgressValue;
- CookingData Data;
+ CookingData* Data = nullptr;
Array Steps;
Dictionary Tools;
@@ -154,6 +154,11 @@ CookingData::Statistics::Statistics()
ContentSizeMB = 0;
}
+CookingData::CookingData(const SpawnParams& params)
+ : PersistentScriptingObject(params)
+{
+}
+
String CookingData::GetGameBinariesPath() const
{
const Char* archDir;
@@ -179,7 +184,7 @@ String CookingData::GetGameBinariesPath() const
return String::Empty;
}
- return GetPlatformBinariesRoot() / TEXT("Game") / archDir / ToString(Configuration);
+ return GetPlatformBinariesRoot() / TEXT("Game") / archDir / ::ToString(Configuration);
}
String CookingData::GetPlatformBinariesRoot() const
@@ -239,7 +244,7 @@ public:
GameCookerService GameCookerServiceInstance;
-const CookingData& GameCooker::GetCurrentData()
+CookingData* GameCooker::GetCurrentData()
{
return Data;
}
@@ -331,8 +336,8 @@ void GameCooker::Build(BuildPlatform platform, BuildConfiguration configuration,
CancelFlag = 0;
ProgressMsg.Clear();
ProgressValue = 1.0f;
- CookingData& data = Data;
- data.Init();
+ Data = New();
+ CookingData& data = *Data;
data.Tools = tools;
data.Platform = platform;
data.Configuration = configuration;
@@ -448,7 +453,7 @@ void GameCookerImpl::OnCollectAssets(HashSet& assets)
bool GameCookerImpl::Build()
{
- CookingData& data = Data;
+ CookingData& data = *Data;
LOG(Info, "Starting Game Cooker...");
LOG(Info, "Platform: {0}, Configuration: {2}, Options: {1}", ::ToString(data.Platform), (int32)data.Options, ::ToString(data.Configuration));
LOG(Info, "Output Path: {0}", data.OriginalOutputPath);
@@ -472,7 +477,7 @@ bool GameCookerImpl::Build()
CallEvent(GameCooker::EventType::BuildStarted);
for (int32 stepIndex = 0; stepIndex < Steps.Count(); stepIndex++)
Steps[stepIndex]->OnBuildStarted(data);
- Data.Tools->OnBuildStarted(data);
+ data.Tools->OnBuildStarted(data);
data.InitProgress(Steps.Count());
// Execute all steps in a sequence
@@ -511,10 +516,12 @@ bool GameCookerImpl::Build()
}
IsRunning = false;
CancelFlag = 0;
- Data.Tools->OnBuildEnded(data, failed);
+ data.Tools->OnBuildEnded(data, failed);
for (int32 stepIndex = 0; stepIndex < Steps.Count(); stepIndex++)
Steps[stepIndex]->OnBuildEnded(data, failed);
CallEvent(failed ? GameCooker::EventType::BuildFailed : GameCooker::EventType::BuildDone);
+ Delete(Data);
+ Data = nullptr;
return failed;
}
diff --git a/Source/Editor/Cooker/GameCooker.h b/Source/Editor/Cooker/GameCooker.h
index 075bf79b4..dec559fee 100644
--- a/Source/Editor/Cooker/GameCooker.h
+++ b/Source/Editor/Cooker/GameCooker.h
@@ -56,7 +56,7 @@ public:
///
/// Gets the current build data. Valid only during active build process.
///
- static const CookingData& GetCurrentData();
+ API_PROPERTY() static CookingData* GetCurrentData();
///
/// Determines whether game building is running.