Completed work on exposing subsystems to scene events

This commit is contained in:
WiggleWizard
2024-09-19 21:43:04 +01:00
parent edce52bb17
commit a487d31c48
9 changed files with 134 additions and 55 deletions

View File

@@ -203,6 +203,8 @@ namespace Nuake
managedObject.Destroy();
}
onUninitializeDelegate.Broadcast();
Coral::GC::Collect();
Coral::GC::WaitForPendingFinalizers();
@@ -331,15 +333,6 @@ namespace Nuake
return widgetUUIDToManagedObjects[std::make_pair(canvasUUID, uuid)];
}
template<class T>
void ScriptingEngineNet::AddListener(const T& delegate) {}
template <>
void ScriptingEngineNet::AddListener<ScriptingEngineNet::GameAssemblyLoadedDelegate>(const GameAssemblyLoadedDelegate& delegate)
{
listenersGameAssemblyLoaded.push_back(delegate);
}
std::vector<CompilationError> ScriptingEngineNet::BuildProjectAssembly(Ref<Project> project)
{
const std::string sanitizedProjectName = String::Sanitize(project->Name);
@@ -541,10 +534,7 @@ namespace Nuake
}
}
for (auto& delegate : listenersGameAssemblyLoaded)
{
delegate();
}
onGameAssemblyLoadedDelegate.Broadcast();
}
}

View File

@@ -25,6 +25,9 @@ namespace Nuake
{
class Project;
DECLARE_MULTICAST_DELEGATE(OnGameAssemblyLoadedDelegate)
DECLARE_MULTICAST_DELEGATE(OnUninitializeDelegate)
enum class ExposedVarTypes
{
Bool,
@@ -115,8 +118,8 @@ namespace Nuake
std::unordered_map<std::string, NetGameScriptObject> GetPointEntities() const { return pointEntityTypes; }
std::unordered_map<std::string, UIWidgetObject> GetUIWidgets() const { return uiWidgets; }
template<class T> void AddListener(const T& delegate);
template<> void AddListener(const GameAssemblyLoadedDelegate& delegate);
OnGameAssemblyLoadedDelegate& OnUninitialize() { return onUninitializeDelegate; }
OnUninitializeDelegate& OnGameAssemblyLoaded() { return onGameAssemblyLoadedDelegate; }
private:
const std::string m_Scope = "Nuake.Net";
@@ -149,7 +152,8 @@ namespace Nuake
std::unordered_map<uint32_t, Coral::ManagedObject> entityToManagedObjects;
std::map<std::pair<UUID, UUID>, Coral::ManagedObject> widgetUUIDToManagedObjects;
std::vector<GameAssemblyLoadedDelegate> listenersGameAssemblyLoaded;
OnGameAssemblyLoadedDelegate onGameAssemblyLoadedDelegate;
OnUninitializeDelegate onUninitializeDelegate;
ScriptingEngineNet();
~ScriptingEngineNet();