mirror of
https://github.com/aharabada/glitchy-engine-beef.git
synced 2026-09-05 13:01:52 +00:00
Simplified dispose function of DisposableComponents
This commit is contained in:
@@ -19,11 +19,9 @@ namespace GlitchyEngine.Renderer
|
||||
}
|
||||
}
|
||||
|
||||
public static void DisposeComponent(void* component)
|
||||
public void Dispose() mut
|
||||
{
|
||||
Self* self = (Self*)component;
|
||||
|
||||
ReleaseRefAndNullify!(self._mesh);
|
||||
ReleaseRefAndNullify!(_mesh);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,12 +28,10 @@ namespace GlitchyEngine.World
|
||||
|
||||
public SkeletonPose Pose => _pose;
|
||||
|
||||
public static void DisposeComponent(void* component)
|
||||
public void Dispose()
|
||||
{
|
||||
Self* animationComponent = (Self*)component;
|
||||
|
||||
animationComponent._animationClip?.ReleaseRef();
|
||||
delete animationComponent._pose;
|
||||
_animationClip?.ReleaseRef();
|
||||
delete _pose;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,11 +18,9 @@ namespace GlitchyEngine.World
|
||||
_debugName = new String(name);
|
||||
}
|
||||
|
||||
public static void DisposeComponent(void* component)
|
||||
public void Dispose() mut
|
||||
{
|
||||
Self* self = (Self*)component;
|
||||
|
||||
DeleteAndNullify!(self._debugName);
|
||||
DeleteAndNullify!(_debugName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ namespace GlitchyEngine.World
|
||||
|
||||
typealias DisposeFunction = function void(void* component);
|
||||
|
||||
internal typealias ComponentPoolEntry = (uint32 Id, IComponentPool Pool, DisposeFunction DisposeFunction);
|
||||
internal typealias ComponentPoolEntry = (uint32 Id, IComponentPool Pool, DisposeFunction DisposeComponent);
|
||||
internal Dictionary<Type, ComponentPoolEntry> _componentPools = new .();
|
||||
|
||||
/// A list containing all pools whose components need to be disposed before removal.
|
||||
@@ -60,7 +60,7 @@ namespace GlitchyEngine.World
|
||||
uint32 id = (uint32)_componentPools.Count;
|
||||
ComponentPool<T> componentPool = new ComponentPool<T>(MaxEntities);
|
||||
|
||||
DisposeFunction disposeFunction = => T.DisposeComponent;
|
||||
DisposeFunction disposeFunction = => DisposeComponent<T>;
|
||||
|
||||
_componentPools.Add(typeof(T), (id, componentPool, disposeFunction));
|
||||
|
||||
@@ -68,6 +68,13 @@ namespace GlitchyEngine.World
|
||||
_disposingPools.Add(typeof(T));
|
||||
}
|
||||
|
||||
/// Enables us to bind a function pointer to the components dispose function
|
||||
private static void DisposeComponent<T>(void* component) where T : IDisposableComponent
|
||||
{
|
||||
T* myComponent = (T*)component;
|
||||
(*myComponent).Dispose();
|
||||
}
|
||||
|
||||
/** @brief Returns the component pool for the given component type.
|
||||
* @param TComponent The type of the component whose component pool will be returned.
|
||||
* @returns A reference to the component pool.
|
||||
@@ -137,7 +144,7 @@ namespace GlitchyEngine.World
|
||||
// Get pointer to component
|
||||
void* component = pool.Pool.Get(listEntity.ID.Index);
|
||||
// Dispose component
|
||||
pool.DisposeFunction(component);
|
||||
pool.DisposeComponent(component);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -218,7 +225,7 @@ namespace GlitchyEngine.World
|
||||
listEntity.ComponentMask[entry.Id] = false;
|
||||
|
||||
// Get component and call dispose
|
||||
T.DisposeComponent(entry.Pool.Get(entity.Index));
|
||||
DisposeComponent<T>(entry.Pool.Get(entity.Index));
|
||||
}
|
||||
|
||||
public T* GetComponent<T>(Entity entity) where T : struct
|
||||
@@ -307,10 +314,9 @@ namespace GlitchyEngine.World
|
||||
{
|
||||
public bool IsDisposed;
|
||||
|
||||
public static void DisposeComponent(void* component)
|
||||
public void Dispose() mut
|
||||
{
|
||||
Self* testComponent = (Self*)component;
|
||||
testComponent.IsDisposed = true;
|
||||
IsDisposed = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -7,6 +7,6 @@ namespace GlitchyEngine.World
|
||||
* @Note This function will be called when the given component was removed from the entity
|
||||
* or when the entity itself was removed.
|
||||
*/
|
||||
static void DisposeComponent(void* component);
|
||||
void Dispose() mut;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,10 +23,9 @@ namespace GlitchyEngine.World
|
||||
}
|
||||
}
|
||||
|
||||
public static void DisposeComponent(void* component)
|
||||
public void Dispose() mut
|
||||
{
|
||||
Self* meshRenderComponent = (Self*)component;
|
||||
meshRenderComponent._material?.ReleaseRef();
|
||||
_material?.ReleaseRef();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,12 +40,10 @@ namespace GlitchyEngine.World
|
||||
}
|
||||
}
|
||||
|
||||
public static void DisposeComponent(void* component)
|
||||
public void Dispose()
|
||||
{
|
||||
Self* meshRenderComponent = (Self*)component;
|
||||
|
||||
meshRenderComponent._material?.ReleaseRef();
|
||||
meshRenderComponent._skeleton?.ReleaseRef();
|
||||
_material?.ReleaseRef();
|
||||
_skeleton?.ReleaseRef();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user