Accounted for updating collider storage when a collider is removed
This commit is contained in:
parent
d45d621701
commit
97432b8666
|
@ -299,6 +299,14 @@ namespace SHADE
|
|||
return eventData->handle;
|
||||
}
|
||||
|
||||
SHEventHandle SHScriptEngine::onColliderComponentRemoved(SHEventPtr eventPtr)
|
||||
{
|
||||
auto eventData = reinterpret_cast<const SHEventSpec<SHComponentRemovedEvent>*>(eventPtr.get());
|
||||
if (eventData->data->removedComponentType == ComponentFamily::GetID<SHColliderComponent>())
|
||||
csColliderOnRemoved(eventData->data->eid);
|
||||
return eventData->handle;
|
||||
}
|
||||
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
/* Helper Functions */
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
|
@ -405,6 +413,12 @@ namespace SHADE
|
|||
DEFAULT_CSHARP_NAMESPACE + ".Collider",
|
||||
"OnColliderBoundChanged"
|
||||
);
|
||||
csColliderOnRemoved = dotNet.GetFunctionPtr<CsEventRelayFuncPtr>
|
||||
(
|
||||
DEFAULT_CSHARP_LIB_NAME,
|
||||
DEFAULT_CSHARP_NAMESPACE + ".Collider",
|
||||
"OnColliderRemoved"
|
||||
);
|
||||
csEditorRenderScripts = dotNet.GetFunctionPtr<CsScriptEditorFuncPtr>
|
||||
(
|
||||
DEFAULT_CSHARP_LIB_NAME,
|
||||
|
@ -447,6 +461,13 @@ namespace SHADE
|
|||
std::make_shared<SHEventReceiverSpec<SHScriptEngine>>(this, &SHScriptEngine::onColliderRemoved)
|
||||
};
|
||||
SHEventManager::SubscribeTo(SH_PHYSICS_COLLIDER_REMOVED_EVENT, std::dynamic_pointer_cast<SHEventReceiver>(removedColliderEventReceiver));
|
||||
|
||||
// Register for collider component removed event
|
||||
std::shared_ptr<SHEventReceiverSpec<SHScriptEngine>> removedColliderComponentEventReceiver
|
||||
{
|
||||
std::make_shared<SHEventReceiverSpec<SHScriptEngine>>(this, &SHScriptEngine::onColliderComponentRemoved)
|
||||
};
|
||||
SHEventManager::SubscribeTo(SH_COMPONENT_REMOVED_EVENT, std::dynamic_pointer_cast<SHEventReceiver>(removedColliderComponentEventReceiver));
|
||||
}
|
||||
|
||||
void SHScriptEngine::dumpBuildLog(const std::string_view& buildLogPath)
|
||||
|
|
|
@ -253,6 +253,7 @@ namespace SHADE
|
|||
CsScriptDeserialiseYamlFuncPtr csScriptsDeserialiseYaml = nullptr;
|
||||
// - Events
|
||||
CsEventRelayFuncPtr csColliderOnListChanged = nullptr;
|
||||
CsEventRelayFuncPtr csColliderOnRemoved = nullptr;
|
||||
// - Editor
|
||||
CsScriptEditorFuncPtr csEditorRenderScripts = nullptr;
|
||||
CsFuncPtr csEditorUndo = nullptr;
|
||||
|
@ -264,6 +265,7 @@ namespace SHADE
|
|||
SHEventHandle onEntityDestroyed(SHEventPtr eventPtr);
|
||||
SHEventHandle onColliderAdded(SHEventPtr eventPtr);
|
||||
SHEventHandle onColliderRemoved(SHEventPtr eventPtr);
|
||||
SHEventHandle onColliderComponentRemoved(SHEventPtr eventPtr);
|
||||
|
||||
/*-----------------------------------------------------------------------------*/
|
||||
/* Helper Functions */
|
||||
|
|
|
@ -180,8 +180,21 @@ namespace SHADE
|
|||
/*---------------------------------------------------------------------------------*/
|
||||
/* Event Handling Functions */
|
||||
/*---------------------------------------------------------------------------------*/
|
||||
void Collider::OnColliderRemoved(EntityID entity)
|
||||
{
|
||||
SAFE_NATIVE_CALL_BEGIN
|
||||
// Check if there are any colliders to update
|
||||
if (colliders == nullptr || !colliders->ContainsKey(entity))
|
||||
return;
|
||||
|
||||
// Remove the key
|
||||
colliders->Remove(entity);
|
||||
SAFE_NATIVE_CALL_END("Collider.OnColliderRemoved")
|
||||
}
|
||||
|
||||
void Collider::OnColliderBoundChanged(EntityID entity)
|
||||
{
|
||||
SAFE_NATIVE_CALL_BEGIN
|
||||
// Check if there are any colliders to update
|
||||
if (colliders == nullptr || !colliders->ContainsKey(entity))
|
||||
return;
|
||||
|
@ -204,6 +217,7 @@ namespace SHADE
|
|||
{
|
||||
collidersList->Remove(wr);
|
||||
}
|
||||
SAFE_NATIVE_CALL_END("Collider.OnColliderBoundChanged")
|
||||
}
|
||||
|
||||
void Collider::updateSubColliderList()
|
||||
|
|
|
@ -224,6 +224,17 @@ namespace SHADE
|
|||
/*-----------------------------------------------------------------------------*/
|
||||
/* Event Handling Functions */
|
||||
/*-----------------------------------------------------------------------------*/
|
||||
/// <summary>
|
||||
/// To be called from native code when a collider has been removed.
|
||||
/// </summary>
|
||||
/// <param name="entity">The entity which has it's collider removed.</param>
|
||||
static void OnColliderRemoved(EntityID entity);
|
||||
/// <summary>
|
||||
/// To be called from native code when a Collider bound has been removed.
|
||||
/// </summary>
|
||||
/// <param name="entity">
|
||||
/// The entity which has it's collider bounds changed.
|
||||
/// </param>
|
||||
static void OnColliderBoundChanged(EntityID entity);
|
||||
|
||||
private:
|
||||
|
|
Loading…
Reference in New Issue