1 package balloonpeople; 2 3 import painter.SPainter; 4 import shapes.SCircle; 5 6 import java.awt.*; 7 import java.awt.geom.Point2D; 8 9 public class BalloonPerson { 10 11 private String name; 12 private int age; 13 private double height; 14 private double headSize = 100; 15 private double shrinkFactor = 1.5; 16 private SCircle baseCircle = new SCircle(headSize); 17 private Point2D.Double leftEdge; 18 private Point2D.Double rightEdge; 19 private Point2D.Double headPos; 20 21 22 public BalloonPerson(String name, int age, double height) { 23 this.name = name; 24 this.age = age; 25 this.height = height; 26 } 27 28 29 public String toString() { 30 return " Name: " + name + " Age: " + age + " Height: " + height + "\n"; 31 } 32 33 34 public void paintPerson(SPainter painter) { 35 paintHead(painter); 36 paintArmSpan(painter); 37 paintLegs(painter); 38 } 39 40 public void setHeadSize(double headSize) { 41 this.headSize = headSize; 42 } 43 44 public double getRightEdgeX() { 45 return rightEdge.x; 46 } 47 48 49 public double getRightEdgeY() { 50 return rightEdge.y; 51 } 52 53 public double getHeadPositionY() { 54 return headPos.y; 55 } 56 57 public double getHeadPositionX() { 58 return headPos.x; 59 } 60 61 62 public boolean isAtEdge(SPainter painter) { 63 return getRightEdgeX() >= painter.canvasWidth(); 64 } 65 66 private void paintHead(SPainter painter) { 67 //Head 68 painter.setRandomColor(); 69 painter.saveColor(); 70 painter.paint(baseCircle); 71 headPos = painter.getPosition(); 72 73 //Name 74 int fontsize = 20; 75 painter.setColor(Color.black); 76 painter.setFontSize(fontsize); 77 painter.draw(name); 78 painter.mbk(fontsize); 79 painter.draw("Age: " + age); 80 painter.mbk(fontsize); 81 painter.draw("height: " + height); 82 } 83 84 private void paintArmSpan(SPainter painter) { 85 //Center Circle 86 painter.restoreColor(); 87 painter.mbk(baseCircle.diameter() + height); 88 baseCircle.shrink(headSize / shrinkFactor); 89 painter.paint(baseCircle); 90 91 //Right Circle 92 painter.mrt(baseCircle.diameter() * 2); 93 painter.paint(baseCircle); 94 rightEdge = painter.getPosition(); 95 painter.mlt(baseCircle.diameter() * 2); // TODO: Inspect this behavior 96 painter.paint(baseCircle); 97 98 // Left Circle 99 painter.mlt(baseCircle.diameter() * 2); 100 painter.paint(baseCircle); 101 leftEdge = painter.getPosition(); 102 } 103 104 105 private void paintLegs(SPainter painter) { 106 107 // Torso (2nd Circle) 108 painter.mrt(baseCircle.diameter() * 2); 109 painter.mbk(baseCircle.diameter() * 2); 110 painter.paint(baseCircle); 111 112 // Right Leg 113 painter.tl(300); 114 painter.mrt(baseCircle.diameter() * 2); 115 painter.paint(baseCircle); 116 117 //Left Leg 118 painter.tr(300); 119 painter.mlt(baseCircle.diameter() * 2); 120 painter.paint(baseCircle); 121 } 122 123 } 124 125 126 127 128 129