private static void MoveSolid(SolidRigidbody solid)
        {
            List <ActorRigidbody> pushList     = new List <ActorRigidbody>();
            List <ActorRigidbody> relocateList = new List <ActorRigidbody>();

            // Run global check to see if any actors are attached.
            foreach (var actor in AllActors)
            {
                if (actor.IsAttached(solid))
                {
                    pushList.Add(actor);
                }
            }

            // Run regional check to find any actors that need to be moved during this movement update.
            foreach (var actor in AllActors)
            {
                // Skip if actor has already indicated it should be moved.
                if (pushList.Contains(actor))
                {
                    continue;
                }

                if (PhysicsMath.IntersectPush(solid.MainCollider, actor.MainCollider, solid.Velocity, solid.ProcessingData.TimeOfImpact, out Vector2 delta))
                {
                    pushList.Add(actor);
                    actor.ProcessingData.MoveDelta = delta;
                }
                else if (PhysicsMath.ShouldDrag(actor.MainCollider, solid.MainCollider, actor.Velocity, solid.ProcessingData.CalcVel))
                {
                    relocateList.Add(actor);
                }
            }

            foreach (var actor in pushList)
            {
                actor.Entity.Position += actor.ProcessingData.MoveDelta;

                foreach (var otherSolid in AllSolids)
                {
                    // Skip solid that actor was pushed by
                    if (ReferenceEquals(solid, otherSolid))
                    {
                        continue;
                    }

                    // If resultant position is inside another solid, then actor has to be crushed.
                    if (PhysicsMath.IsInside(actor.MainCollider, otherSolid.MainCollider))
                    {
                        Console.WriteLine($"Crush {actor} against {otherSolid}");
                        actor.Crush();
                    }
                }
            }

            Vector2 solidDelta = solid.ProcessingData.CalcVel * solid.ProcessingData.TimeOfImpact;

            solid.Entity.Position += solidDelta;

            foreach (var actor in relocateList)
            {
                actor.Entity.Position += solidDelta;
                Console.WriteLine($"relocated {actor} by {solidDelta}");
            }
        }