Por lo general, paso por varios pasos con este problema, deteniéndome cuando no puedo descubrir cómo ir más allá.
Primero, haz lo que has hecho. Vaya duro con SECO. Si no termina con un gran desastre peludo, ya está. Si, como en su caso, no tiene un código duplicado pero cada valor booleano tiene su valor verificado en 20 lugares diferentes, vaya al siguiente paso.
En segundo lugar, divide el código en bloques. Se hace referencia a los booleanos solo una vez (bueno, tal vez dos veces a veces) para dirigir la ejecución al bloque correcto. Con dos booleanos, terminas con cuatro bloques. Cada bloque es casi idéntico. DRY se ha ido. No haga que cada bloque sea un método separado. Eso sería más elegante, pero poner todo el código en un método hace que sea más fácil, o incluso posible, que cualquiera que realice tareas de mantenimiento vea que tiene que hacer cada cambio en cuatro lugares. Con un código bien organizado y un monitor alto, las diferencias y los errores serán casi obvios. Ahora tiene un código que se puede mantener y se ejecutará más rápido que el lío enredado original.
Tercero, intente obtener líneas de código duplicadas de cada uno de sus bloques y convertirlas en métodos simples y agradables. A veces no puedes hacer nada. A veces no puedes hacer mucho. Pero cada poquito que haces te hace retroceder hacia SECO y hace que el código sea un poco más fácil de seguir y más seguro de mantener. Idealmente, su método original podría terminar sin código duplicado. En ese punto, es posible que desee dividirlo en varios métodos sin los parámetros booleanos o no. La conveniencia del código de llamada es ahora la principal preocupación.
Agregué mi respuesta al gran número que ya estaba aquí debido al segundo paso. Odio el código duplicado, pero si es la única forma inteligible de resolver un problema, hágalo de tal manera que cualquiera sepa de un vistazo lo que está haciendo. Use múltiples bloques y solo un método. Haga que los bloques sean lo más idénticos posible en nombres, espacios, alineaciones, ... todo. Las diferencias deberían saltar al lector. Podría hacer obvio cómo reescribirlo de manera SECA, y si no, mantenerlo será razonablemente sencillo.
createTrajectory...todas las funciones públicas llaman?