Skip to content

Commit

Permalink
Engine - ECS: renamed struct Internals -> StoreExtension and moved to…
Browse files Browse the repository at this point in the history
… new Extension.cs
  • Loading branch information
friflo committed May 26, 2024
1 parent 835838f commit 2914f8d
Show file tree
Hide file tree
Showing 15 changed files with 211 additions and 186 deletions.
6 changes: 3 additions & 3 deletions Engine/Tests-internal/ECS/Test_Entity.cs
Original file line number Diff line number Diff line change
Expand Up @@ -184,17 +184,17 @@ public static void Test_Entity_delete_with_Script()

AreEqual(1, entity1.Scripts.Length);
AreEqual(1, store.EntityScripts.Length);
AreEqual(1, store.internals.scriptMap.Count);
AreEqual(1, store.extension.scriptMap.Count);

var script2 = new TestScript2();
entity2.AddScript(script2);

AreEqual(1, entity2.Scripts.Length);
AreEqual(2, store.EntityScripts.Length);
AreEqual(2, store.internals.scriptMap.Count);
AreEqual(2, store.extension.scriptMap.Count);

entity1.DeleteEntity();
AreEqual(1, store.internals.scriptMap.Count);
AreEqual(1, store.extension.scriptMap.Count);
AreEqual(1, store.EntityScripts.Length);
AreSame (script2, store.EntityScripts[0].scripts[0]);
}
Expand Down
6 changes: 3 additions & 3 deletions Engine/Tests-internal/ECS/Test_EntityStore.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public static void Test_EntityStore_DeleteEntity()
var store = new EntityStore(PidType.UsePidAsId);
var entity = store.CreateEntity(10);
// store.nodes[10].parentId = 5;
store.internals.parentMap[10] = 5;
store.extension.parentMap[10] = 5;

var e = Throws<InvalidOperationException>(() => {
entity.DeleteEntity();
Expand All @@ -39,13 +39,13 @@ public static void Test_Tags_cover_AddArchetype() {
AreEqual("invalid archIndex. expect: 2, was: 5", e!.Message);
}

/// <summary>Cover invariant assertion in <see cref="EntityStore.RemoveScript"/></summary>
/// <summary>Cover invariant assertion in <see cref="StoreExtension.RemoveScript"/></summary>
[Test]
public static void Test_EntityStore_RemoveScript() {
var store = new EntityStore(PidType.RandomPids);
var entity = store.CreateEntity();
entity.AddScript(new TestScript1());
store.internals.entityScriptCount = 1;
store.extension.entityScriptCount = 1;

var e = Throws<InvalidOperationException>(() => {
entity.RemoveScript<TestScript1>();
Expand Down
2 changes: 1 addition & 1 deletion Engine/Tests/ECS/Entity/Test_Entity_Tree.cs
Original file line number Diff line number Diff line change
Expand Up @@ -749,7 +749,7 @@ public static void Test_Entity_Tree_InvalidStoreException()
AreEqual("entity is owned by a different store (Parameter 'child')", e!.Message);
}

/// <summary><see cref="EntityStore.GenerateRandomPidForId"/></summary>
/// <summary><see cref="StoreExtension.GenerateRandomPidForId"/></summary>
[Test]
public static void Test_Entity_Tree_RandomPid_Coverage()
{
Expand Down
2 changes: 1 addition & 1 deletion Engine/Tests/ECS/Entity/Test_Script.cs
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ public static void Test_3_RemoveScript() {
NotNull(player.GetScript<TestScript3>());
}

/// <summary>Cover move last script in <see cref="EntityStore.RemoveScript"/> </summary>
/// <summary>Cover move last script in <see cref="StoreExtension.RemoveScript"/> </summary>
[Test]
public static void Test_3_cover_move_last_script() {
var store = new EntityStore(PidType.RandomPids);
Expand Down
2 changes: 1 addition & 1 deletion Engine/Tests/ECS/Serialize/Test_ComponentReader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -400,7 +400,7 @@ public static void Test_ComponentReader_read_script_Perf()
private static JsonValue Scripts => new JsonValue(
"{ \"script1\": { \"val1\": 11 }, \"script2\": { \"val2\": 22 }, \"script3\": { \"val3\": 33 } }");

/// <summary>Cover <see cref="EntityStore.AppendScript"/></summary>
/// <summary>Cover <see cref="StoreExtension.AppendScript"/></summary>
[Test]
public static void Test_ComponentReader_read_multiple_scripts()
{
Expand Down
2 changes: 1 addition & 1 deletion Engine/src/ECS/Base/Types/ScriptType.cs
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,6 @@ internal override void ReadScript(ObjectReader reader, JsonValue json, Entity en
return;
}
script = reader.ReadMapper(typeMapper, json);
entity.archetype.entityStore.AppendScript(entity, script);
entity.archetype.entityStore.extension.AppendScript(entity, script);
}
}
8 changes: 4 additions & 4 deletions Engine/src/ECS/Entity/EntityNode.cs
Original file line number Diff line number Diff line change
Expand Up @@ -116,8 +116,8 @@ private readonly string GetString()
/// Use to avoid Dictionary lookups for:
/// <see cref="EntityStoreBase.InternBase.entityComponentChanged"/><br/>
/// <see cref="EntityStoreBase.InternBase.entityTagsChanged"/><br/>
/// <see cref="EntityStore.Intern.entityScriptChanged"/><br/>
/// <see cref="EntityStore.Intern.entityChildEntitiesChanged"/><br/>
/// <see cref="StoreExtension.entityScriptChanged"/><br/>
/// <see cref="StoreExtension.entityChildEntitiesChanged"/><br/>
/// </summary>
[Flags]
internal enum HasEventFlags : byte
Expand All @@ -126,9 +126,9 @@ internal enum HasEventFlags : byte
ComponentChanged = 1,
/// <summary> Bit is set - <see cref="EntityStoreBase.InternBase.entityTagsChanged"/>.Count > 0<br/> </summary>
TagsChanged = 2,
/// <summary> Bit is set - <see cref="EntityStore.Intern.entityScriptChanged"/>.Count > 0<br/> </summary>
/// <summary> Bit is set - <see cref="StoreExtension.entityScriptChanged"/>.Count > 0<br/> </summary>
ScriptChanged = 4,
/// <summary> Bit is set - <see cref="EntityStore.Intern.entityChildEntitiesChanged"/>.Count > 0<br/> </summary>
/// <summary> Bit is set - <see cref="StoreExtension.entityChildEntitiesChanged"/>.Count > 0<br/> </summary>
ChildEntitiesChanged = 8,
}

Expand Down
20 changes: 10 additions & 10 deletions Engine/src/ECS/Entity/EntityUtils.cs
Original file line number Diff line number Diff line change
Expand Up @@ -196,18 +196,18 @@ internal static string DataEntityToJSON(DataEntity dataEntity)
private static readonly Dictionary<Type, ScriptType> ScriptTypeByType = EntityStoreBase.Static.EntitySchema.scriptTypeByType;

internal static Script[] GetScripts(Entity entity) {
if (!entity.store.internals.scriptMap.TryGetValue(entity.Id, out int scriptIndex)) {
if (!entity.store.extension.scriptMap.TryGetValue(entity.Id, out int scriptIndex)) {
return EmptyScripts;
}
return EntityStore.GetScripts(entity, scriptIndex);
return StoreExtension.GetScripts(entity, scriptIndex);
}

internal static Script GetScript(Entity entity, Type scriptType)
{
if (!entity.store.internals.scriptMap.TryGetValue(entity.Id, out int scriptIndex)) {
if (!entity.store.extension.scriptMap.TryGetValue(entity.Id, out int scriptIndex)) {
return null;
}
return EntityStore.GetScript(entity, scriptType, scriptIndex);
return StoreExtension.GetScript(entity, scriptType, scriptIndex);
}

internal static Script AddScript(Entity entity, int scriptIndex, Script script)
Expand All @@ -224,30 +224,30 @@ private static Script AddNewScript(Entity entity, ScriptType scriptType)

internal static Script AddScript (Entity entity, Script script) {
var scriptType = ScriptTypeByType[script.GetType()];
return entity.archetype.entityStore.AddScript(entity, script, scriptType);
return entity.archetype.entityStore.extension.AddScript(entity, script, scriptType);
}

private static Script AddScriptInternal(Entity entity, Script script, ScriptType scriptType)
{
if (!script.entity.IsNull) {
throw new InvalidOperationException($"script already added to an entity. current entity id: {script.entity.Id}");
}
return entity.archetype.entityStore.AddScript(entity, script, scriptType);
return entity.archetype.entityStore.extension.AddScript(entity, script, scriptType);
}

internal static Script RemoveScript(Entity entity, int scriptTypeIndex) {
if (!entity.store.internals.scriptMap.TryGetValue(entity.Id, out int scriptIndex)) {
if (!entity.store.extension.scriptMap.TryGetValue(entity.Id, out int scriptIndex)) {
return null;
}
var scriptType = ScriptTypes[scriptTypeIndex];
return entity.archetype.entityStore.RemoveScript(entity, scriptType, scriptIndex);
return entity.archetype.entityStore.extension.RemoveScript(entity, scriptType, scriptIndex);
}

private static Script RemoveScriptType(Entity entity, ScriptType scriptType) {
if (!entity.store.internals.scriptMap.TryGetValue(entity.Id, out int scriptIndex)) {
if (!entity.store.extension.scriptMap.TryGetValue(entity.Id, out int scriptIndex)) {
return null;
}
return entity.archetype.entityStore.RemoveScript(entity, scriptType, scriptIndex);
return entity.archetype.entityStore.extension.RemoveScript(entity, scriptType, scriptIndex);
}

internal static void AddTreeTags(Entity entity, in Tags tags)
Expand Down
4 changes: 2 additions & 2 deletions Engine/src/ECS/Entity/Store/DataEntities.cs
Original file line number Diff line number Diff line change
Expand Up @@ -105,8 +105,8 @@ private Entity CreateFromDataEntityRandomPid(DataEntity dataEntity)
{
// --- map pid to id
var pid = dataEntity.pid;
var pid2Id = internals.pid2Id;
var id2Pid = internals.id2Pid;
var pid2Id = extension.pid2Id;
var id2Pid = extension.id2Pid;
if (!pid2Id.TryGetValue(pid, out int id)) {
id = NewId();
pid2Id.Add(pid, id);
Expand Down
2 changes: 1 addition & 1 deletion Engine/src/ECS/Entity/Store/Entities.cs
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ public Entity CloneEntity(Entity entity)
var scriptType = scriptTypeByType[script.GetType()];
var scriptClone = scriptType.CloneScript(script);
scriptClone.entity = clone;
AddScript(clone, scriptClone, scriptType);
extension.AddScript(clone, scriptClone, scriptType);
}
} else {
// --- serialize entity
Expand Down
44 changes: 22 additions & 22 deletions Engine/src/ECS/Entity/Store/Events.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,25 +17,25 @@ public partial class EntityStore
#region add / remove script events
private void ScriptChanged(ScriptChanged args)
{
if (!intern.entityScriptChanged.TryGetValue(args.Entity.Id, out var handlers)) {
if (!extension.entityScriptChanged.TryGetValue(args.Entity.Id, out var handlers)) {
return;
}
handlers.Invoke(args);
}

internal static void AddScriptChangedHandler(EntityStore store, int entityId, Action<ScriptChanged> handler)
{
if (AddEntityHandler(store, entityId, handler, HasEventFlags.ScriptChanged ,ref store.intern.entityScriptChanged)) {
store.intern.scriptAdded += store.ScriptChanged;
store.intern.scriptRemoved += store.ScriptChanged;
if (AddEntityHandler(store, entityId, handler, HasEventFlags.ScriptChanged ,ref store.extension.entityScriptChanged)) {
store.extension.scriptAdded += store.ScriptChanged;
store.extension.scriptRemoved += store.ScriptChanged;
}
}

internal static void RemoveScriptChangedHandler(EntityStore store, int entityId, Action<ScriptChanged> handler)
{
if (RemoveEntityHandler(store, entityId, handler, HasEventFlags.ScriptChanged, store.intern.entityScriptChanged)) {
store.intern.scriptAdded -= store.ScriptChanged;
store.intern.scriptRemoved -= store.ScriptChanged;
if (RemoveEntityHandler(store, entityId, handler, HasEventFlags.ScriptChanged, store.extension.entityScriptChanged)) {
store.extension.scriptAdded -= store.ScriptChanged;
store.extension.scriptRemoved -= store.ScriptChanged;
}
}
#endregion
Expand All @@ -46,23 +46,23 @@ internal static void RemoveScriptChangedHandler(EntityStore store, int entityId,
#region add / remove child entity events
private void ChildEntitiesChanged(ChildEntitiesChanged args)
{
if (!intern.entityChildEntitiesChanged.TryGetValue(args.EntityId, out var handlers)) {
if (!extension.entityChildEntitiesChanged.TryGetValue(args.EntityId, out var handlers)) {
return;
}
handlers.Invoke(args);
}

internal static void AddChildEntitiesChangedHandler (EntityStore store, int entityId, Action<ChildEntitiesChanged> handler)
{
if (AddEntityHandler(store, entityId, handler, HasEventFlags.ChildEntitiesChanged, ref store.intern.entityChildEntitiesChanged)) {
store.intern.childEntitiesChanged += store.ChildEntitiesChanged;
if (AddEntityHandler(store, entityId, handler, HasEventFlags.ChildEntitiesChanged, ref store.extension.entityChildEntitiesChanged)) {
store.extension.childEntitiesChanged += store.ChildEntitiesChanged;
}
}

internal static void RemoveChildEntitiesChangedHandler(EntityStore store, int entityId, Action<ChildEntitiesChanged> handler)
{
if (RemoveEntityHandler(store, entityId, handler, HasEventFlags.ChildEntitiesChanged, store.intern.entityChildEntitiesChanged)) {
store.intern.childEntitiesChanged -= store.ChildEntitiesChanged;
if (RemoveEntityHandler(store, entityId, handler, HasEventFlags.ChildEntitiesChanged, store.extension.entityChildEntitiesChanged)) {
store.extension.childEntitiesChanged -= store.ChildEntitiesChanged;
}
}
#endregion
Expand All @@ -72,18 +72,18 @@ private static void RemoveAllEntityEventHandlers(EntityStore store, in EntityNod
var hasEvent = node.hasEvent;
RemoveAllEntityEventHandlers(store, entityId, hasEvent);
if ((hasEvent & HasEventFlags.ScriptChanged) != 0) {
var handlerMap = store.intern.entityScriptChanged;
var handlerMap = store.extension.entityScriptChanged;
handlerMap.Remove(entityId);
if (handlerMap.Count == 0) {
store.intern.scriptAdded -= store.ScriptChanged;
store.intern.scriptRemoved -= store.ScriptChanged;
store.extension.scriptAdded -= store.ScriptChanged;
store.extension.scriptRemoved -= store.ScriptChanged;
}
}
if ((hasEvent & HasEventFlags.ChildEntitiesChanged) != 0) {
var handlerMap = store.intern.entityChildEntitiesChanged;
var handlerMap = store.extension.entityChildEntitiesChanged;
handlerMap.Remove(entityId);
if (handlerMap.Count == 0) {
store.intern.childEntitiesChanged -= store.ChildEntitiesChanged;
store.extension.childEntitiesChanged -= store.ChildEntitiesChanged;
}
}
if (node.signalTypeCount > 0) {
Expand All @@ -99,9 +99,9 @@ private static void RemoveAllEntityEventHandlers(EntityStore store, in EntityNod
[ExcludeFromCodeCoverage]
internal new static void AssertEventDelegatesNull(EntityStore store)
{
if (store.intern.scriptAdded != null) throw new InvalidOperationException("expect null");
if (store.intern.scriptRemoved != null) throw new InvalidOperationException("expect null");
if (store.intern.childEntitiesChanged != null) throw new InvalidOperationException("expect null");
if (store.extension.scriptAdded != null) throw new InvalidOperationException("expect null");
if (store.extension.scriptRemoved != null) throw new InvalidOperationException("expect null");
if (store.extension.childEntitiesChanged != null) throw new InvalidOperationException("expect null");
}

#region subscribed event / signal delegates
Expand All @@ -112,13 +112,13 @@ internal static DebugEventHandlers GetEventHandlers(EntityStore store, int entit
AddEventHandlers(ref eventHandlers, store, entityId, hasEvent);

if ((hasEvent & HasEventFlags.ScriptChanged) != 0) {
var handlers = store.intern.entityScriptChanged[entityId];
var handlers = store.extension.entityScriptChanged[entityId];
var handler = new DebugEventHandler(DebugEntityEventKind.Event, typeof(ScriptChanged), handlers.GetInvocationList());
eventHandlers ??= new List<DebugEventHandler>();
eventHandlers.Add(handler);
}
if ((hasEvent & HasEventFlags.ChildEntitiesChanged) != 0) {
var handlers = store.intern.entityChildEntitiesChanged[entityId];
var handlers = store.extension.entityChildEntitiesChanged[entityId];
var handler = new DebugEventHandler(DebugEntityEventKind.Event, typeof(ChildEntitiesChanged), handlers.GetInvocationList());
eventHandlers ??= new List<DebugEventHandler>();
eventHandlers.Add(handler);
Expand Down
Loading

0 comments on commit 2914f8d

Please sign in to comment.