Animate[
u1=1/3;u2=u1+1;
(*A,B,C,D are on the super plane u=u1. a,b,c,d are on u=u2. u1 & u2 is 1 unit apart.*)
OA={1/Sqrt[2],-1/Sqrt[6],-Sqrt[3]/6,u1}//N;
OB={0,Sqrt[6]/3,-Sqrt[3]/6,u1}//N;
OC={-1/Sqrt[2],-1/Sqrt[6],-Sqrt[3]/6,u1}//N;
OD={0,0,Sqrt[3]/2,u1}//N;
Oa={-1/Sqrt[2],1/Sqrt[6],Sqrt[3]/6,u2}//N;
Ob={0,-Sqrt[6]/3,Sqrt[3]/6,u2}//N;
Oc={1/Sqrt[2],1/Sqrt[6],Sqrt[3]/6,u2}//N;
Od={0,0,-Sqrt[3]/2,u2}//N;

(*E is the reflection of D with respect to plane ABC*)
(*These points are for rotation matrix*)
OE={0,0,-5Sqrt[3]/6,u1}//N;
OF={5 Sqrt[2]/6,5 Sqrt[6]/18,-11/18 Sqrt[3],u1}//N;
OG={-5/(3*Sqrt[2]),5/(3*Sqrt[6]),-11/(6*Sqrt[3]),u1}//N;
OH={0,(-5*Sqrt[2/3])/3,-11/(6*Sqrt[3]),u1}//N;
OI={5/(3*Sqrt[2]),5/(3*Sqrt[6]),5/(6*Sqrt[3]),u1}//N;
OJ={-5/(3*Sqrt[2]),5/(3*Sqrt[6]),5/(6*Sqrt[3]),u1}//N;
OK={0,(-5*Sqrt[2/3])/3,5/(6*Sqrt[3]),u1}//N;
OL={-5/(3*Sqrt[2]),-17/(9*Sqrt[6]),31/(18*Sqrt[3]),u1}//N;
OM={-1/(9*Sqrt[2]),-67/(27*Sqrt[6]),173/(54*Sqrt[3]),u1}//N;



AAA=Transpose[Table[OA,{4}]];
EEE=Transpose[Table[OE,{4}]];
DDD=Transpose[Table[OD,{4}]];
KKK=Transpose[Table[OK,{4}]];


(*u is an angle within each step*)
step:=Floor[t/(Pi/3)]+1;
u:=t-(step-1)*Pi/3;

(*definition of tetrahedron*)
tetrahedron[vecs_]:=Table[Polygon[Drop[vecs,{k}]],{k,1,4}];

(*definition of projection*)
(*MAY NEED TO CHANGE 'zrange' WHEN ANOTHER STYLE IS ADDED*)
proj[x_]:=Switch[
mode,
1,x[[{1,2,3}]],
2,x[[{1,2,4}]],
3,1/x[[4]]x[[{1,2,3}]]
];




(*Rotation matrix around the plane π spanned by u&v*)
(*p&q are orthogonal vectors against π*)
(*p0,q0 MUST be linearly independent to all u&v which may appear in R[u,v,θ]*)
p0={1.0,2,0,-1};q0={1.0,0,1,2};
R[u_,v_,θ_]:=(
v':=v-Projection[v,u] ;
p1:=p0-Projection[p0,u];
p:=Normalize[p1-Projection[p1,v']];
q1:=q0-Projection[q0,u];
q2:=q1-Projection[q1,v'];
q:=Normalize[q2-Projection[q2,p]];
P:=Transpose[{p,q,u,v}];P.{{Cos[θ],-Sin[θ],0,0},{Sin[θ],Cos[θ],0,0},{0,0,1,0},{0,0,0,1}}.Inverse[P]
);

(*definitions of rotations of each step*)
(*For example, RABC is a rotation around the plane spanned by vec AB&AC*)
RABC[θ_]=R[OB-OA,OC-OA,θ];
RABE[θ_]=R[OB-OA,OE-OA,θ];
RACE[θ_]=R[OC-OA,OE-OA,θ];
RBCE[θ_]=R[OB-OC,OB-OE,θ];
RAEF[θ_]=R[OE-OA,OF-OA,θ];
RBEG[θ_]=R[OE-OB,OG-OB,θ];
RCEH[θ_]=R[OE-OC,OE-OH,θ];
REFG[θ_]=R[OF-OE,OG-OE,θ];
RABD[θ_]=R[OB-OA,OD-OA,θ];
RADI[θ_]=R[OD-OA,OI-OA,θ];
RBCD[θ_]=R[OB-OD,OC-OD,θ];
RBDJ[θ_]=R[OB-OD,OB-OJ,θ];
RACD[θ_]=R[OA-OD,OC-OD,θ];
RCDK[θ_]=R[OC-OD,OK-OD,θ];
RACK[θ_]=R[OC-OA,OK-OA,θ];
RADK[θ_]=R[OD-OA,OK-OA,θ];
RDKL[θ_]=R[OK-OD,OL-OD,θ];
RKLM[θ_]=R[OK-OL,OK-OM,θ];

(*ABCD*)(*DONE!*)
ABCD=Transpose[{OA,OB,OC,OD}];
vecsABCD=Table[proj[(Transpose[ABCD])[[k]]],{k,1,4}];
polyABCD=tetrahedron[vecsABCD];

(*ABCd*)(*DONE!*)
ABCd0=Transpose[{OA,OB,OC,Od}];
ABCd1=(RABC[Pi/3]).(ABCd0-AAA)+AAA;
ABCd:=Which[
step==1,RABC[u].(ABCd0-AAA)+AAA,
step≥2,ABCd1];
vecsABCd:=Table[proj[(Transpose[ABCd])[[k]]],{k,1,4}];
polyABCd:=tetrahedron[vecsABCd];

(*ABDc*)(*DONE!*)
ABDc0=Transpose[{OA,OB,OD,Oc}];
ABDc1=(RABD[-Pi/3]).(ABDc0-DDD)+DDD;
ABDc:=Which[
step≤7,ABDc0,
step==8,RABD[-u].(ABDc0-DDD)+DDD,
step≥9,ABDc1];
vecsABDc:=Table[proj[(Transpose[ABDc])[[k]]],{k,1,4}];
polyABDc:=tetrahedron[vecsABDc];

(*BCDa*)(*Done!*)
BCDa0=Transpose[{OB,OC,OD,Oa}];
BCDa1=(RBCD[Pi/3]).(BCDa0-DDD)+DDD;
BCDa:=Which[
step≤9,BCDa0,
step==10,RBCD[u].(BCDa0-DDD)+DDD,
step≥11,BCDa1];
vecsBCDa:=Table[proj[(Transpose[BCDa])[[k]]],{k,1,4}];
polyBCDa:=tetrahedron[vecsBCDa];

(*ACDb*)(*DONE!*)
ACDb0=Transpose[{OA,OC,OD,Ob}];
ACDb1=(RACD[Pi/3]).(ACDb0-DDD)+DDD;
ACDb:=Which[
step≤11,ACDb0,
step==12,RACD[u].(ACDb0-DDD)+DDD,
step≥13,ACDb1];
vecsACDb:=Table[proj[(Transpose[ACDb])[[k]]],{k,1,4}];
polyACDb:=tetrahedron[vecsACDb];

(*ABcd*)(*DONE!*)
ABcd0=Transpose[{OA,OB,Oc,Od}];
ABcd1=(RABC[Pi/3]).(ABcd0-AAA)+AAA;
ABcd2=(RABE[-Pi/3]).(ABcd1-AAA)+AAA;
ABcd:=Which[
step==1,RABC[u].(ABcd0-AAA)+AAA,
step==2,RABE[-u].(ABcd1-AAA)+AAA,
step≥3,ABcd2];
vecsABcd:=Table[proj[(Transpose[ABcd])[[k]]],{k,1,4}];
polyABcd:=tetrahedron[vecsABcd];


(*BCad*)(*DONE!*)
BCad0=Transpose[{OB,OC,Oa,Od}];
BCad1=(RABC[Pi/3]).(BCad0-AAA)+AAA;
BCad2=(RBCE[Pi/3]).(BCad1-EEE)+EEE;
BCad:=Which[
step==1,RABC[u].(BCad0-AAA)+AAA,
step≤3,BCad1,
step==4,(RBCE[u]).(BCad1-EEE)+EEE,
step≥5,BCad2];
vecsBCad:=Table[proj[(Transpose[BCad])[[k]]],{k,1,4}];
polyBCad:=tetrahedron[vecsBCad];

(*ACbd*)(*DONE!*)
ACbd0=Transpose[{OA,OC,Ob,Od}];
ACbd1=(RABC[Pi/3]).(ACbd0-AAA)+AAA;
ACbd2=(RACE[Pi/3]).(ACbd1-AAA)+AAA;
ACbd:=Which[
step==1,RABC[u].(ACbd0-AAA)+AAA,
step≤5,ACbd1,
step==6,(RACE[u]).(ACbd1-AAA)+AAA,
step≥7,ACbd2];
vecsACbd:=Table[proj[(Transpose[ACbd])[[k]]],{k,1,4}];
polyACbd:=tetrahedron[vecsACbd];

(*ADbc*)(*Done*)
ADbc0=Transpose[{OA,OD,Ob,Oc}];
ADbc1=(RABD[-Pi/3]).(ADbc0-DDD)+DDD;
ADbc2=(RADI[Pi/3]).(ADbc1-DDD)+DDD;
ADbc:=Which[
step≤7,ADbc0,
step==8,RABD[-u].(ADbc0-DDD)+DDD,
step==9,RADI[u].(ADbc1-DDD)+DDD,
step≥10,ADbc2];
vecsADbc:=Table[proj[(Transpose[ADbc])[[k]]],{k,1,4}];
polyADbc:=tetrahedron[vecsADbc];

(*BDac*)(*DONE!*)
BDac0=Transpose[{OB,OD,Oa,Oc}];
BDac1=(RBCD[Pi/3]).(BDac0-DDD)+DDD;
BDac2=(RBDJ[-Pi/3]).(BDac1-DDD)+DDD;
BDac:=Which[
step≤9,BDac0,
step==10,RBCD[u].(BDac0-DDD)+DDD,
step==11,RBDJ[-u].(BDac1-DDD)+DDD,
step≥12,BDac2];
vecsBDac:=Table[proj[(Transpose[BDac])[[k]]],{k,1,4}];
polyBDac:=tetrahedron[vecsBDac];

(*CDab*)(*DONE!*)
CDab0=Transpose[{OC,OD,Oa,Ob}];
CDab1=(RACD[Pi/3]).(CDab0-DDD)+DDD;
CDab2=(RCDK[Pi/3]).(CDab1-DDD)+DDD;
CDab:=Which[
step≤11,CDab0,
step==12,RACD[u].(CDab0-DDD)+DDD,
step==13,RCDK[u].(CDab1-DDD)+DDD,
step≥14,CDab2];
vecsCDab:=Table[proj[(Transpose[CDab])[[k]]],{k,1,4}];
polyCDab:=tetrahedron[vecsCDab];

(*Abcd*)(*DONE!*)
Abcd0=Transpose[{OA,Ob,Oc,Od}];
Abcd1=(RABC[Pi/3]).(Abcd0-AAA)+AAA;
Abcd2=(RABE[-Pi/3]).(Abcd1-AAA)+AAA;
Abcd3=(RAEF[Pi/3]).(Abcd2-AAA)+AAA;
Abcd4=(REFG[Pi/3]).(Abcd3-EEE)+EEE;
Abcd:=Which[
step==1,RABC[u].(Abcd0-AAA)+AAA,
step==2,(RABE[-u]).(Abcd1-AAA)+AAA,
step==3,(RAEF[u]).(Abcd2-AAA)+AAA,
step≥3,Abcd3];
vecsAbcd:=Table[proj[(Transpose[Abcd])[[k]]],{k,1,4}];
polyAbcd:=tetrahedron[vecsAbcd];


(*Bacd*)(*DONE!*)
Bacd0=Transpose[{Oa,OB,Oc,Od}];
Bacd1=RABC[Pi/3].(Bacd0-AAA)+AAA;
Bacd2=RBCE[Pi/3].(Bacd1-EEE)+EEE;
Bacd3=RBEG[-Pi/3].(Bacd2-EEE)+EEE;
Bacd:=Which[
step==1,RABC[u].(Bacd0-AAA)+AAA,
step≤3,Bacd1,
step==4,RBCE[u].(Bacd1-EEE)+EEE,
step==5,RBEG[-u].(Bacd2-EEE)+EEE,
step≥6,Bacd3];
vecsBacd:=Table[proj[(Transpose[Bacd])[[k]]],{k,1,4}];
polyBacd:=tetrahedron[vecsBacd];

(*Cabd*)(*DONE!*)
Cabd0=Transpose[{OC,Oa,Ob,Od}];
Cabd1=(RABC[Pi/3]).(Cabd0-AAA)+AAA;
Cabd2=(RACE[Pi/3]).(Cabd1-AAA)+AAA;
Cabd3=(RCEH[Pi/3]).(Cabd2-EEE)+EEE;
Cabd:=Which[
step==1,RABC[u].(Cabd0-AAA)+AAA,
step≤5,Cabd1,
step==6,RACE[u].(Cabd1-AAA)+AAA,
step==7,RCEH[u].(Cabd2-EEE)+EEE,
step≥8,Cabd3];
vecsCabd:=Table[proj[(Transpose[Cabd])[[k]]],{k,1,4}];
polyCabd:=tetrahedron[vecsCabd];

(*Dacb*)
Dacb0:=Transpose[{OD,Oa,Oc,Ob}];
Dacb1=RACD[Pi/3].(Dacb0-DDD)+DDD;
Dacb2=RCDK[Pi/3].(Dacb1-DDD)+DDD;
Dacb3=RDKL[-Pi/3].(Dacb2-DDD)+DDD;
Dacb:=Which[
step≤11,Dacb0,
step==12,RACD[u].(Dacb0-DDD)+DDD,
step==13,RCDK[u].(Dacb1-DDD)+DDD,
step==14,RDKL[-u].(Dacb2-DDD)+DDD,
step≥15,Dacb3];
vecsDacb:=Table[proj[(Transpose[Dacb])[[k]]],{k,1,4}];
polyDacb:=tetrahedron[vecsDacb];

(*abcd*)
abcd0:=Transpose[{Oa,Ob,Oc,Od}];
abcd1=RACD[Pi/3].(abcd0-DDD)+DDD;
abcd2=RCDK[Pi/3].(abcd1-DDD)+DDD;
abcd3=RDKL[-Pi/3].(abcd2-DDD)+DDD;
abcd4=RKLM[Pi/3].(abcd3-KKK)+KKK;
abcd:=Which[
step≤11,abcd0,
step==12,RACD[u].(abcd0-DDD)+DDD,
step==13,RCDK[u].(abcd1-DDD)+DDD,
step==14,RDKL[-u].(abcd2-DDD)+DDD,
step==15,RKLM[u].(abcd3-KKK)+KKK,
step≥16,abcd4];
vecsabcd:=Table[proj[(Transpose[abcd])[[k]]],{k,1,4}];
polyabcd:=tetrahedron[vecsabcd];


(*show*)
myrange:=Switch[mode,1,{{-1.4,1.4},{-2.1,1.6},{-1.6,2}},
2,{{-1.4,1.4},{-2.1,1.6},{0.33,1.45}},3,{{-4,4},{-6.5,4.5},{-5,6}}];

Graphics3D[{Opacity[0.3],(*Text["L",1/u1 OL[[{1,2,3}]]],Text["K",1/u1 OK[[{1,2,3}]]],
Text["M",1/u1 OM[[{1,2,3}]]],Text["A",1/u1 OA[[{1,2,3}]]],*)
EdgeForm[{Thickness[0.003],Black}],
polyABCD,
{Cyan, polyABCd},
{Magenta,polyABcd},
{Opacity[0.3],Orange,polyAbcd},
{LightPurple,polyBCad},
{Opacity[0.3],LightRed,polyBacd},
{LightGreen,polyACbd},
{Opacity[0.3],LightCyan,polyCabd},
{LightBrown,polyABDc},
{Opacity[0.3],LightGray,polyADbc},
{Yellow,polyBCDa},
{LightGreen,polyBDac},
{LightBlue,polyACDb},
{LightRed,polyCDab},
{LightGreen,polyDacb},
{Opacity[0.9],LightBlue,polyabcd}
},PlotRange->myrange,Boxed->False]


(*controllers*)
,{t,0, 5 Pi},
{{mode,3,"projection style"},{1->"(x,y,z,u)->(x,y,z)",2->"(x,y,z,u)->(x,y,u)",3->"(x,y,z,u)->((x/u),(y/u),(z/u))"},ControlType->PopupMenu}
]