void FollowFloor()
    {
        //If we are detecting a floor transform
        if (state.floor != null)
        {
            //If it is a different floor from the last one
            if (state.floorState.transform == null || state.floorState.transform != state.floor)
            {
                state.floorState = TransformState.From(state.floor);
            }

            //Follow the floor transform if grounded
            else if (Grounded)
            {
                //Follow position
                transform.position += state.floor.position - state.floorState.position;
                //Move(state.floor.position - state.floorState.position);

                //Follow rotation
                Quaternion dif = Quaternion.FromToRotation(state.floorState.forward, state.floor.forward);
                transform.rotation = dif * transform.rotation;
                Vector3 delta = transform.position - state.floor.position;
                delta = dif * delta; transform.position = state.floor.position + delta;

                //state.floorState = TransformState.From(state.floor);
            }

            state.floorState = TransformState.From(state.floor);
        }
        else
        {
            state.floorState = TransformState.Empty();
        }
    }