EntityChange MakeChangeOf(InputEntity e)
    {
        int[] indices    = e.GetComponentIndices();
        var   components = e.GetComponents();

        int numComponents    = components.Length;
        var componentChanges = new ComponentChange[numComponents];

        for (int i = 0; i < numComponents; ++i)
        {
            componentChanges[i] = ComponentChange.MakeUpdate(
                indices[i],
                components[i]
                );
        }

        return(EntityChange.MakeUpdate(e.id.value, componentChanges));
    }
    ComponentChange[] MakeComponentChangesOf(GameEntity e)
    {
        var componentChanges = new List <ComponentChange>();

        var changed       = e.changeFlags.flags;
        int numComponents = e.totalComponents;

        for (int i = 0; i < numComponents; ++i)
        {
            if (e.HasComponent(i))
            {
                componentChanges.Add(ComponentChange.MakeUpdate(i, e.GetComponent(i)));
            }
            else if (changed[i])
            {
                componentChanges.Add(ComponentChange.MakeRemoval(i));
            }
        }

        return(componentChanges.ToArray());
    }