adds pooled dictionary to component message manager
parent
26aeb46cb8
commit
062b31dfb8
|
@ -1,8 +1,7 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using Collections.Pooled;
|
||||||
// TODO: object pool for the inner dictionaries so they dont get GC'd
|
|
||||||
|
|
||||||
namespace Encompass
|
namespace Encompass
|
||||||
{
|
{
|
||||||
|
@ -14,9 +13,9 @@ namespace Encompass
|
||||||
private readonly Dictionary<Type, HashSet<Guid>> componentMessageTypeToPendingComponentIDs = new Dictionary<Type, HashSet<Guid>>();
|
private readonly Dictionary<Type, HashSet<Guid>> componentMessageTypeToPendingComponentIDs = new Dictionary<Type, HashSet<Guid>>();
|
||||||
private readonly Dictionary<Type, HashSet<Guid>> componentMessageTypeToComponentIDs = new Dictionary<Type, HashSet<Guid>>();
|
private readonly Dictionary<Type, HashSet<Guid>> componentMessageTypeToComponentIDs = new Dictionary<Type, HashSet<Guid>>();
|
||||||
|
|
||||||
private readonly Dictionary<Entity, Dictionary<Type, HashSet<Guid>>> entityToTypeToExistingComponentIDs = new Dictionary<Entity, Dictionary<Type, HashSet<Guid>>>();
|
private readonly Dictionary<Entity, PooledDictionary<Type, HashSet<Guid>>> entityToTypeToExistingComponentIDs = new Dictionary<Entity, PooledDictionary<Type, HashSet<Guid>>>();
|
||||||
private readonly Dictionary<Entity, Dictionary<Type, HashSet<Guid>>> entityToTypeToPendingComponentIDs = new Dictionary<Entity, Dictionary<Type, HashSet<Guid>>>();
|
private readonly Dictionary<Entity, PooledDictionary<Type, HashSet<Guid>>> entityToTypeToPendingComponentIDs = new Dictionary<Entity, PooledDictionary<Type, HashSet<Guid>>>();
|
||||||
private readonly Dictionary<Entity, Dictionary<Type, HashSet<Guid>>> entityToTypeToComponentIDs = new Dictionary<Entity, Dictionary<Type, HashSet<Guid>>>();
|
private readonly Dictionary<Entity, PooledDictionary<Type, HashSet<Guid>>> entityToTypeToComponentIDs = new Dictionary<Entity, PooledDictionary<Type, HashSet<Guid>>>();
|
||||||
|
|
||||||
internal void ClearMessages()
|
internal void ClearMessages()
|
||||||
{
|
{
|
||||||
|
@ -64,8 +63,22 @@ namespace Encompass
|
||||||
|
|
||||||
internal void RegisterDestroyedEntity(Entity entity)
|
internal void RegisterDestroyedEntity(Entity entity)
|
||||||
{
|
{
|
||||||
|
foreach (var pooledDictionary in entityToTypeToComponentIDs.Values)
|
||||||
|
{
|
||||||
|
pooledDictionary.Dispose();
|
||||||
|
}
|
||||||
entityToTypeToComponentIDs.Remove(entity);
|
entityToTypeToComponentIDs.Remove(entity);
|
||||||
|
|
||||||
|
foreach (var pooledDictionary in entityToTypeToPendingComponentIDs.Values)
|
||||||
|
{
|
||||||
|
pooledDictionary.Dispose();
|
||||||
|
}
|
||||||
entityToTypeToPendingComponentIDs.Remove(entity);
|
entityToTypeToPendingComponentIDs.Remove(entity);
|
||||||
|
|
||||||
|
foreach (var pooledDictionary in entityToTypeToExistingComponentIDs.Values)
|
||||||
|
{
|
||||||
|
pooledDictionary.Dispose();
|
||||||
|
}
|
||||||
entityToTypeToExistingComponentIDs.Remove(entity);
|
entityToTypeToExistingComponentIDs.Remove(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -82,7 +95,7 @@ namespace Encompass
|
||||||
|
|
||||||
if (!entityToTypeToExistingComponentIDs.ContainsKey(componentMessage.entity))
|
if (!entityToTypeToExistingComponentIDs.ContainsKey(componentMessage.entity))
|
||||||
{
|
{
|
||||||
entityToTypeToExistingComponentIDs.Add(componentMessage.entity, new Dictionary<Type, HashSet<Guid>>());
|
entityToTypeToExistingComponentIDs.Add(componentMessage.entity, new PooledDictionary<Type, HashSet<Guid>>());
|
||||||
}
|
}
|
||||||
if (!entityToTypeToExistingComponentIDs[componentMessage.entity].ContainsKey(typeof(TComponent)))
|
if (!entityToTypeToExistingComponentIDs[componentMessage.entity].ContainsKey(typeof(TComponent)))
|
||||||
{
|
{
|
||||||
|
@ -105,7 +118,7 @@ namespace Encompass
|
||||||
|
|
||||||
if (!entityToTypeToPendingComponentIDs.ContainsKey(pendingComponentMessage.entity))
|
if (!entityToTypeToPendingComponentIDs.ContainsKey(pendingComponentMessage.entity))
|
||||||
{
|
{
|
||||||
entityToTypeToPendingComponentIDs.Add(pendingComponentMessage.entity, new Dictionary<Type, HashSet<Guid>>());
|
entityToTypeToPendingComponentIDs.Add(pendingComponentMessage.entity, new PooledDictionary<Type, HashSet<Guid>>());
|
||||||
}
|
}
|
||||||
if (!entityToTypeToPendingComponentIDs[pendingComponentMessage.entity].ContainsKey(typeof(TComponent)))
|
if (!entityToTypeToPendingComponentIDs[pendingComponentMessage.entity].ContainsKey(typeof(TComponent)))
|
||||||
{
|
{
|
||||||
|
@ -127,7 +140,7 @@ namespace Encompass
|
||||||
|
|
||||||
if (!entityToTypeToComponentIDs.ContainsKey(entity))
|
if (!entityToTypeToComponentIDs.ContainsKey(entity))
|
||||||
{
|
{
|
||||||
entityToTypeToComponentIDs.Add(entity, new Dictionary<Type, HashSet<Guid>>());
|
entityToTypeToComponentIDs.Add(entity, new PooledDictionary<Type, HashSet<Guid>>());
|
||||||
}
|
}
|
||||||
if (!entityToTypeToComponentIDs[entity].ContainsKey(typeof(TComponent)))
|
if (!entityToTypeToComponentIDs[entity].ContainsKey(typeof(TComponent)))
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>netstandard2.0</TargetFramework>
|
<TargetFramework>netstandard2.0</TargetFramework>
|
||||||
|
@ -10,7 +9,7 @@
|
||||||
<Company>Moonside Games</Company>
|
<Company>Moonside Games</Company>
|
||||||
<Product>Encompass ECS</Product>
|
<Product>Encompass ECS</Product>
|
||||||
<PackageProjectUrl>https://github.com/encompass-ecs</PackageProjectUrl>
|
<PackageProjectUrl>https://github.com/encompass-ecs</PackageProjectUrl>
|
||||||
<PackageLicenseUrl></PackageLicenseUrl>
|
<PackageLicenseUrl/>
|
||||||
<Copyright>Evan Hemsley 2019</Copyright>
|
<Copyright>Evan Hemsley 2019</Copyright>
|
||||||
<Description>Encompass is an engine-agnostic Hyper ECS framework to help you code games, or other kinds of simulations.</Description>
|
<Description>Encompass is an engine-agnostic Hyper ECS framework to help you code games, or other kinds of simulations.</Description>
|
||||||
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
||||||
|
@ -20,7 +19,10 @@
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="..\LICENSE">
|
<None Include="..\LICENSE">
|
||||||
<Pack>True</Pack>
|
<Pack>True</Pack>
|
||||||
<PackagePath></PackagePath>
|
<PackagePath/>
|
||||||
</None>
|
</None>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Collections.Pooled" Version="1.0.82"/>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
Loading…
Reference in New Issue