private void onCollisionStayCallback()
    {
        MotorCollision2D col = new MotorCollision2D();

        col.Surface |= (m_CollisionInfo.Prev_Above && m_CollisionInfo.Above) ? MotorCollision2D.CollisionSurface.Ceiling : MotorCollision2D.CollisionSurface.None;
        col.Surface |= (m_CollisionInfo.Prev_Below && m_CollisionInfo.Below) ? MotorCollision2D.CollisionSurface.Ground : MotorCollision2D.CollisionSurface.None;
        col.Surface |= (m_CollisionInfo.Prev_Left && m_CollisionInfo.Left) ? MotorCollision2D.CollisionSurface.Left : MotorCollision2D.CollisionSurface.None;
        col.Surface |= (m_CollisionInfo.Prev_Right && m_CollisionInfo.Right) ? MotorCollision2D.CollisionSurface.Right : MotorCollision2D.CollisionSurface.None;

        if (col.Surface != MotorCollision2D.CollisionSurface.None)
        {
            OnMotorCollisionStay2D.Invoke(col);
        }
    }
    private void onMotorCollisionStay2D(MotorCollision2D col)
    {
        if (col.IsSurface(MotorCollision2D.CollisionSurface.Ground))
        {
            onCollisionStayGround();
        }

        if (col.IsSurface(MotorCollision2D.CollisionSurface.Left))
        {
            onCollisionStayLeft();
        }

        if (col.IsSurface(MotorCollision2D.CollisionSurface.Right))
        {
            onCollisionStayRight();
        }
    }
    private void onMotorCollisionEnter2D(MotorCollision2D col)
    {
        if (col.IsSurface(MotorCollision2D.CollisionSurface.Ground))
        {
            onCollisionEnterGround();
        }

        if (col.IsSurface(MotorCollision2D.CollisionSurface.Ceiling))
        {
            onCollisionEnterCeiling();
        }

        if (col.IsSurface(MotorCollision2D.CollisionSurface.Left))
        {
            onCollisionEnterLeft();
        }

        if (col.IsSurface(MotorCollision2D.CollisionSurface.Right))
        {
            onCollisionEnterRight();
        }
    }