from big_ol_pile_of_manim_imports import * from active_projects.eop.reusable_imports import * from active_projects.eop.chapter1.brick_row_scene import BrickRowScene class EntireBrickWall(BrickRowScene): def construct(self): self.remove(self.get_primary_pi_creature()) row_height = 0.3 nb_rows = 20 start_point = 3 * UP + 1 * LEFT rows = VMobject() rows.add(BrickRow(0, height = row_height)) rows.move_to(start_point) self.add(rows) zero_counter = Integer(0).next_to(start_point + 0.5 * rows[0].width * RIGHT) nb_flips_text = TextMobject("\# of flips") nb_flips_text.next_to(zero_counter, RIGHT, buff = LARGE_BUFF) self.add(zero_counter, nb_flips_text) for i in range(1, nb_rows + 1): rows.add(rows[-1].copy()) self.bring_to_back(rows[-1]) anims = [ rows[-1].shift, row_height * DOWN, Animation(rows[-2]) ] if i % 5 == 0: counter = Integer(i) counter.next_to(rows[-1].get_right() + row_height * DOWN, RIGHT) anims.append(FadeIn(counter)) self.play(*anims) self.play(SplitRectsInBrickWall(rows[-1])) rows.submobjects[-1] = self.merge_rects_by_subdiv(rows[-1]) rows.submobjects[-1] = self.merge_rects_by_coloring(rows[-1]) # draw indices under the last row for the number of tails tails_counters = VGroup() for (i, rect) in enumerate(rows[-1].rects): if i < 6 or i > 14: continue if i == 6: counter = TexMobject("\dots", color = COLOR_TAILS) counter.next_to(rect, DOWN, buff = 1.5 * MED_SMALL_BUFF) elif i == 14: counter = TexMobject("\dots", color = COLOR_TAILS) counter.next_to(rect, DOWN, buff = 1.5 * MED_SMALL_BUFF) counter.shift(0.2 * RIGHT) else: counter = Integer(i, color = COLOR_TAILS) counter.next_to(rect, DOWN) tails_counters.add(counter) nb_tails_text = TextMobject("\# of tails", color = COLOR_TAILS) nb_tails_text.next_to(tails_counters[-1], RIGHT, buff = LARGE_BUFF) self.play( LaggedStart(FadeIn, tails_counters), FadeIn(nb_tails_text) ) # remove any hidden brick rows hidden_brick_rows = VGroup(*[mob for mob in self.mobjects if isinstance(mob, BrickRow) and not mob in rows ]) self.remove(hidden_brick_rows) special_brick_copy = rows[-1].rects[13].copy() self.play( rows.fade, 0.9, FadeIn(special_brick_copy) )