|
|
@@ -61,6 +61,7 @@ namespace Svelto.ECS |
|
|
|
EntityFactory.BuildGroupedEntityViews(entityID, groupID, |
|
|
|
_groupedEntityViewsToAdd.current, |
|
|
|
EntityDescriptorTemplate<T>.Default, |
|
|
|
_entityInfos, |
|
|
|
implementors); |
|
|
|
} |
|
|
|
|
|
|
@@ -69,7 +70,9 @@ namespace Svelto.ECS |
|
|
|
{ |
|
|
|
EntityFactory.BuildGroupedEntityViews(entityID, groupID, |
|
|
|
_groupedEntityViewsToAdd.current, |
|
|
|
entityDescriptor, implementors); |
|
|
|
entityDescriptor, |
|
|
|
_entityInfos, |
|
|
|
implementors); |
|
|
|
} |
|
|
|
|
|
|
|
///-------------------------------------------- |
|
|
@@ -127,28 +130,23 @@ namespace Svelto.ECS |
|
|
|
|
|
|
|
void RemoveEntity(EGID entityGID) |
|
|
|
{ |
|
|
|
EntityInfoView entityInfoView; |
|
|
|
|
|
|
|
_DB.TryQueryEntityView(entityGID, out entityInfoView); |
|
|
|
|
|
|
|
var entityViewBuilders = entityInfoView.entityViews; |
|
|
|
EGID id = entityInfoView._ID; |
|
|
|
var entityViewBuilders = _entityInfos[entityGID.GID]; |
|
|
|
|
|
|
|
var entityViewBuildersCount = entityViewBuilders.Length; |
|
|
|
var group = _groupEntityViewsDB[id.group]; |
|
|
|
var group = _groupEntityViewsDB[entityGID.group]; |
|
|
|
|
|
|
|
//for each entity view generated by the entity descriptor |
|
|
|
for (var i = 0; i < entityViewBuildersCount; i++) |
|
|
|
{ |
|
|
|
var entityViewType = entityViewBuilders[i].GetEntityViewType(); |
|
|
|
|
|
|
|
InternalRemoveEntityViewFromDBDicAndEngines(entityViewType, id); |
|
|
|
InternalRemoveEntityViewFromDBDicAndEngines(entityViewType, entityGID); |
|
|
|
|
|
|
|
RemoveEntityViewFromDB(@group, entityViewType, id); |
|
|
|
RemoveEntityViewFromDB(@_globalEntityViewsDB, entityViewType, id); |
|
|
|
RemoveEntityViewFromDB(@group, entityViewType, entityGID); |
|
|
|
RemoveEntityViewFromDB(@_globalEntityViewsDB, entityViewType, entityGID); |
|
|
|
} |
|
|
|
|
|
|
|
InternalRemoveEntityViewFromDBDicAndEngines(_entityInfoViewType, id); |
|
|
|
_entityInfos.Remove(entityGID.GID); |
|
|
|
} |
|
|
|
|
|
|
|
static void RemoveEntityViewFromDB(Dictionary<Type, ITypeSafeList> @group, Type entityViewType, EGID id) |
|
|
@@ -233,11 +231,8 @@ namespace Svelto.ECS |
|
|
|
Check.Require(fromGroupID != toGroupID, |
|
|
|
"can't move an entity to the same group where it already belongs to"); |
|
|
|
|
|
|
|
EntityInfoView entityInfoView; |
|
|
|
|
|
|
|
_DB.TryQueryEntityView(new EGID(fromGroupID, entityID), out entityInfoView); |
|
|
|
|
|
|
|
var entityViewBuilders = entityInfoView.entityViews; |
|
|
|
var entityegid = new EGID(entityID, fromGroupID); |
|
|
|
var entityViewBuilders = _entityInfos[entityegid.GID]; |
|
|
|
var entityViewBuildersCount = entityViewBuilders.Length; |
|
|
|
|
|
|
|
var groupedEntities = _groupEntityViewsDB[fromGroupID]; |
|
|
@@ -261,13 +256,13 @@ namespace Svelto.ECS |
|
|
|
if (groupedEntityViewsTyped.TryGetValue(entityViewType, out toSafeList) == false) |
|
|
|
groupedEntityViewsTyped[entityViewType] = toSafeList = fromSafeList.Create(); |
|
|
|
|
|
|
|
entityViewBuilder.MoveEntityView(entityInfoView._ID, fromSafeList, toSafeList); |
|
|
|
fromSafeList.MappedRemove(entityInfoView._ID); |
|
|
|
entityInfoView._ID = new EGID(entityID, toGroupID); |
|
|
|
entityViewBuilder.MoveEntityView(entityegid, fromSafeList, toSafeList); |
|
|
|
fromSafeList.MappedRemove(entityegid); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
readonly Type _entityInfoViewType = typeof(EntityInfoView); |
|
|
|
_entityInfos.Remove(entityegid.GID); |
|
|
|
_entityInfos.Add(new EGID(entityID, toGroupID).GID, entityViewBuilders); |
|
|
|
} |
|
|
|
|
|
|
|
readonly EntityViewsDB _DB; |
|
|
|
|
|
|
@@ -283,6 +278,6 @@ namespace Svelto.ECS |
|
|
|
//indexable entity views when the entity ID is known. Usually useful to handle |
|
|
|
//event based logic. |
|
|
|
readonly Dictionary<Type, ITypeSafeDictionary> _globalEntityViewsDBDic; |
|
|
|
|
|
|
|
Dictionary<int, IEntityViewBuilder[]> _entityInfos; |
|
|
|
} |
|
|
|
} |