BalloonPerson.java
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