Skip to content

Commit 28896c8

Browse files
[Entities] Optimized ComponentVersionTracker;
1 parent e7fca5f commit 28896c8

File tree

4 files changed

+12
-18
lines changed

4 files changed

+12
-18
lines changed
Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,27 @@
11
using System;
2-
using System.Collections.Generic;
32

43
namespace Staple;
54

6-
public class ComponentVersionTracker
5+
public class ComponentVersionTracker<T> where T: IComponent, IComponentVersion
76
{
8-
private readonly Dictionary<int, ulong> versions = [];
7+
private ulong[] versions = [1024];
98

10-
public void Clear()
11-
{
12-
versions.Clear();
13-
}
14-
15-
public bool ShouldUpdateComponent<T>(Entity entity, in T component) where T : IComponent, IComponentVersion
9+
public bool ShouldUpdateComponent(Entity entity, in T component)
1610
{
1711
if (component == null)
1812
{
1913
throw new ArgumentNullException(nameof(component), "Component can't be null");
2014
}
2115

22-
var hashCode = HashCode.Combine(entity, component.GetType().FullName.GetHashCode());
23-
24-
if (versions.TryGetValue(hashCode, out var version) == false)
16+
if(versions.Length < entity.Identifier.ID)
2517
{
26-
versions.Add(hashCode, component.Version);
27-
28-
return true;
18+
Array.Resize(ref versions, entity.Identifier.ID);
2919
}
3020

21+
var version = versions[entity.Identifier.ID - 1];
22+
23+
versions[entity.Identifier.ID - 1] = component.Version;
24+
3125
return version != component.Version;
3226
}
3327
}

Engine/Staple.Core/Rendering/Animation/SkinnedMeshRenderSystem.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ private struct RenderInfo
3030

3131
private readonly SceneQuery<SkinnedMeshInstance, Transform> instances = new();
3232

33-
private readonly ComponentVersionTracker transformVersions = new();
33+
private readonly ComponentVersionTracker<Transform> transformVersions = new();
3434

3535
public bool UsesOwnRenderProcess => false;
3636

Engine/Staple.Core/Rendering/Mesh/MeshCombineSystem.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ private struct RenderInfo
3131

3232
private readonly ExpandableContainer<RenderInfo> renderers = new();
3333

34-
private readonly ComponentVersionTracker transformVersions = new();
34+
private readonly ComponentVersionTracker<Transform> transformVersions = new();
3535

3636
#region Lifecycle
3737
public void Prepare()

Engine/Staple.Core/Rendering/Mesh/MeshRenderSystem.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ private class InstanceData
4343
.Build();
4444
});
4545

46-
private readonly ComponentVersionTracker transformVersions = new();
46+
private readonly ComponentVersionTracker<Transform> transformVersions = new();
4747

4848
public bool UsesOwnRenderProcess => false;
4949

0 commit comments

Comments
 (0)