package org.teachingextensions.WindowUtils; import java.util.ArrayList; import java.util.List; import org.teachingextensions.logo.Turtle; import org.teachingextensions.logo.utils.ColorUtils.PenColors; import org.teachingextensions.logo.utils.InterfaceUtils.MultiTurtlePainter; import org.teachingextensions.logo.utils.InterfaceUtils.MultiTurtleTrailPainter; import org.teachingextensions.logo.utils.InterfaceUtils.TurtleFrame; import org.teachingextensions.logo.utils.LineAndShapeUtils.Paintable; /** * Use this window when you want to put more than one turtle on the same window */ public class MultiTurtleWindow extends TurtleWindow { private List<Turtle> turtles = new ArrayList<Turtle>(); public MultiTurtleWindow() { super("Turtles, Turtles, Turtles!"); this.setBackground(PenColors.Blues.DarkSlateBlue); } /** * Adds a turtle instance to a window * NOTE: this method must be called BEFORE calling any other methods on turtle instances * <p><b>Example:</b> {@code multiTurtleWindow.addTurtle(myTurtle)}</p> * * @param turtle * A turtle instance */ public void addTurtle(Turtle turtle) { if (turtle == null) { return; } turtle.setFrame(this.getFrame()); turtle.setPanel(this); this.turtles.add(turtle); clearPainters(); configurePainters(); } @Override public TurtleWindow init(Turtle turtle, TurtleFrame frame) { return this; } @Override protected Paintable createTurtleTrailPainter() { this.setTrailPainter(new MultiTurtleTrailPainter(this.turtles)); return this.getTrailPainter(); } @Override protected Paintable createTurtlePainter() { this.setTurtlePainter(new MultiTurtlePainter(this.turtles, this.getImage())); return this.getTurtlePainter(); } /** * Gets a count of turtles for a window * <p><b>Example:</b> {@code multiTurtleWindow.getTurtlesCount()}</p> * */ public int getTurtleCount() { return this.turtles.size(); } /** * Adds a turtle instance to a window and shows it on the window * <p><b>Example:</b> {@code multiTurtleWindow.addAndShowTurtle(myTurtle)}</p> * * @param turtle * A turtle instance */ public void addAndShowTurtle(Turtle turtle) { this.addTurtle(turtle); this.showTurtle(turtle); } private void showTurtle(Turtle turtle) { turtle.show(); } }