Added prefab instancing through C# and support for mid-game rigidbody and skeletal animation

This commit is contained in:
Antoine Pilote
2024-04-23 23:22:19 -04:00
parent f854a2d783
commit 39025d8b06
7 changed files with 173 additions and 62 deletions

View File

@@ -56,6 +56,8 @@ namespace Nuake
// Creates an instance of the entity script in C#
scriptingEngineNet.RegisterEntityScript(entity);
netScriptComponent.Initialized = true;
}
for (auto& e : netEntities)
@@ -89,6 +91,40 @@ namespace Nuake
auto& scriptingEngineNet = ScriptingEngineNet::Get();
auto netEntities = m_Scene->m_Registry.view<NetScriptComponent>();
// Instance all the new entities
std::vector<Entity> entityJustInstanced;
for (auto& e : netEntities)
{
auto& netScriptComponent = netEntities.get<NetScriptComponent>(e);
if (!netScriptComponent.Initialized)
{
if (netScriptComponent.ScriptPath.empty())
continue;
auto entity = Entity{ e, m_Scene };
// Creates an instance of the entity script in C#
scriptingEngineNet.RegisterEntityScript(entity);
netScriptComponent.Initialized = true;
entityJustInstanced.push_back(entity);
}
}
// Call init on the newly created instance
for (auto& e : entityJustInstanced)
{
auto& netScriptComponent = e.GetComponent<NetScriptComponent>();
if (e.IsValid() && scriptingEngineNet.HasEntityScriptInstance(e))
{
// We can now call on init on it.
auto scriptInstance = scriptingEngineNet.GetEntityScript(e);
scriptInstance.InvokeMethod("OnInit");
}
}
// Then call update on all the other scripts
for (auto& e : netEntities)
{
NetScriptComponent& netScriptComponent = netEntities.get<NetScriptComponent>(e);