protected unsafe override void Execute(EntityManager entityManager, EntityChunkList array) { var actor = stackalloc[] { new T() }; var actorPtr = (byte *)actor; var length = _entityFields.Length; Span <EntityField> entityFields = stackalloc EntityField[length]; for (var i = 0; i < length; i++) { entityFields[i] = _entityFields[i]; } var ptrs = stackalloc byte **[length]; for (var i = 0; i < length; i++) { ptrs[i] = (byte **)&actorPtr[entityFields[i].Offset]; } var indices = stackalloc int[length]; for (var i = 0; i < length; i++) { indices[i] = array.Specification.GetComponentIndex(entityFields[i].ComponentType); } for (var i = 0; i < array.AllChunks.Count; i++) { var chunk = array.AllChunks[i]; for (var j = 0; j < length; j++) { (*ptrs[j]) = (byte *)chunk.PackedArray[indices[j]].Memory; } //actor->Execute(chunk.Count); Execute(*actor, chunk.Count); // for (var j = 0; j < chunk.Count; j++) // { // Execute(*actor); // for (var k = 0; k < length; k++) // (*ptrs[k]) += entityFields[k].Size; // } } }
protected abstract void Execute(EntityManager entityManager, EntityChunkList array);