/// <summary>
    /// Updates the bounds of our hitbox rect objects
    /// </summary>
    public override void UpdateHitboxBounds()
    {
        Vector2 TransformPositionVector2 = this.transform.position;
        //The updated bounds is based on the size, offset, and root transform local scale
        Vector2 ScaledOffset   = (Vector2)this.transform.localScale * (Vector2)this.transform.root.localScale;
        Vector2 CenterOfHitbox = TransformPositionVector2 + PositionOffset * ScaledOffset;
        Vector2 SizeOfHitbox   = this.BoxSize * ScaledOffset;

        Box2DBounds.SetColliderBoundsForBox2D(ref CenterOfHitbox, ref SizeOfHitbox);
    }
    /// <summary>
    /// Update the bounds of our box collider based on its new transform position
    /// </summary>
    public override void UpdateColliderBounds()
    {
        PreviousBounds.CopyBoundsFrom(Box2DBounds);//Copy over the current bounds to the previous bounds.

        Vector2 AdjustedCeneterPoint = transform.position;

        AdjustedCeneterPoint += (ColliderOffset * transform.localScale);
        Vector2 BoxSize = BoxColliderSize * transform.localScale;

        if (IsCharacterCollider)//If this is a character, we will move the base of the collider to the character's feet
        {
            AdjustedCeneterPoint += (Vector2.up * BoxSize.y / 2);
        }

        Box2DBounds.SetColliderBoundsForBox2D(ref AdjustedCeneterPoint, ref BoxSize);
    }
    /// <summary>
    /// Updates the bounds of the physics collider based on the updated bounds position and the velocity of the physics object. This will only ever
    /// be called for colliders of type physics
    /// </summary>
    public override void UpdatePhysicsColliderBounds()
    {
        Vector2 OffsetFromVelocity = (AssociatedPhysicsComponent.Velocity * GameOverseer.DELTA_TIME);
        Vector2 BoxSizeAdjustment  = new Vector2(Mathf.Max(0, Box2DBounds.BoxSize.x - Mathf.Abs(OffsetFromVelocity.x)),
                                                 Mathf.Max(0, Box2DBounds.BoxSize.y - Mathf.Abs(OffsetFromVelocity.y)));
        Vector2 NewBoxSizeWithVelocityOffset = new Vector2(Mathf.Abs(OffsetFromVelocity.x), Mathf.Abs(OffsetFromVelocity.y)) + BoxSizeAdjustment;

        Vector2 NewBoxCenter = Box2DBounds.CenterPoint + (Box2DBounds.BoxSize - BoxSizeAdjustment) / 2f + OffsetFromVelocity / 2;

        if (AssociatedPhysicsComponent.Velocity.y != 0)
        {
            NewBoxCenter.y += Mathf.Sign(AssociatedPhysicsComponent.Velocity.y) * BufferSizePhysicsCollision.y;
            NewBoxSizeWithVelocityOffset.y -= BufferSizePhysicsCollision.y / 2;
        }
        if (AssociatedPhysicsComponent.Velocity.x != 0)
        {
            NewBoxCenter.x += Mathf.Sign(AssociatedPhysicsComponent.Velocity.x) * BufferSizePhysicsCollision.x;
            NewBoxSizeWithVelocityOffset.x -= BufferSizePhysicsCollision.x / 2;
        }
        PhysicsBoxBounds.SetColliderBoundsForBox2D(ref NewBoxCenter, ref NewBoxSizeWithVelocityOffset);
    }