It really depends on how you want it to actually work.
Some people like 2 buttons as FIRE and MODE. Some add a dedicated 3rd switch to handle RELOAD, but of course you could do like “click FIRE while pointing down to Reload”, or “Hold MODE to Reload etc…” or you could have no bullet limits at all and never even need reload.
So I suggest a ground plan for in-hand operation, then work backwards.
As far as the wiring, it looks fine.
You can split up the pixel accent as it’s own SubBlade if you want to have discrete control.
Then you could use 2 styles for the “barrel” and the “muzzle” that sync for some motion like
// muzzle
StylePtr<Layers<
Black,
TransitionEffectL<TrConcat<TrDelay<100>,White,TrFade<200>,Red,TrFade<300>>,EFFECT_FIRE>,
TransitionEffectL<TrConcat<TrDelay<100>,DeepSkyBlue,TrFade<200>,Blinking<Black,Blue,100,500>,TrFade<300>>,EFFECT_STUN>,
LockupTrL<Layers<
TransitionLoopL<TrConcat<TrInstant,White,TrFade<50>,Red,TrFade<150>>>>,TrInstant,TrConcat<TrInstant,Rgb<50,0,0>,TrFade<400>>,SaberBase::LOCKUP_AUTOFIRE>
>>(),
// barrel
StylePtr<Layers<
Black,
TransitionEffectL<TrConcat<TrWipe<100>,White,TrInstant,Red,TrWipe<150>>,EFFECT_FIRE>,
TransitionEffectL<TrConcat<TrWipe<100>,DeepSkyBlue,TrWipe<100>,Blinking<Black,Blue,100,500>,TrWipe<200>>,EFFECT_STUN>,
LockupTrL<Layers<
TransitionLoopL<TrConcat<TrWipe<50>,Red,TrWipe<150>>>,
TransitionLoopL<TrConcat<TrInstant,AlphaL<White,Bump<Int<0>,Int<25000>>>,TrFade<100>,AlphaL<Black,Int<0>>,TrDelay<100>>>>,TrConcat<TrInstant,Rgb<255,100,100>,TrFade<200>>,TrJoin<TrConcat<TrInstant,AlphaL<Rgb<50,0,0>,Bump<Int<32768>,Int<60000>>>,TrFade<400>>,TrWipeX<Int<400>>,TrWaveX<Rgb<50,0,0>,Int<1800>,Int<40>,Int<400>,Int<5000>>>,SaberBase::LOCKUP_AUTOFIRE>
>>()