コード例 #1
0
        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;
                // }
            }
        }
コード例 #2
0
 protected abstract void Execute(EntityManager entityManager, EntityChunkList array);