1: package siege.gui.views;
2:
3: import java.awt.Color;
4: import siege.gui.*;
5: import java.util.Observable;
6: import java.awt.Graphics;
7: import java.awt.Graphics2D;
8: import java.awt.Polygon;
9: import java.awt.RenderingHints;
10: import java.util.HashSet;
11: import java.util.LinkedList;
12: import java.util.Observer;
13: import javax.swing.JPanel;
14: import siege.core.*;
15: import siege.util.Log;
16:
17: 18: 19: 20:
21: public class TerritoriesView extends JPanel implements Observer
22: {
23: HashSet<Territory> territories = new HashSet<Territory>();
24:
25: public TerritoriesView()
26: {
27: super();
28: setOpaque(true);
29: setPreferredSize(PlayboardView.size);
30: }
31:
32: 33: 34:
35: public void initialize()
36: {
37: territories.clear();
38:
39: Playboard playboard = Game.getInstance().getPlayboard();
40: playboard.addObserver(this);
41: }
42:
43: 44: 45:
46: public void refreshTerritories(Playboard playboard)
47: {
48: boolean changed = false;
49: for (Territory territory : playboard.getTerritories()) {
50: if(territory.isCaptured()==false) {
51: if(territories.contains(territory)==false) {
52: territories.add(territory);
53: changed = true;
54: }
55: } else {
56: territories.remove(territory);
57: changed = true;
58: }
59: }
60: if(changed) {
61: repaint();
62: }
63: }
64:
65:
66: @Override
67: public void paint(Graphics _g)
68: {
69: 70: Graphics2D g = (Graphics2D) _g;
71: g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
72:
73:
74: 75: g.setColor(Colors.backgroundPlayboard);
76: g.drawRect(0, 0, getWidth(), getHeight());
77:
78: 79: for (Territory territory : territories) {
80: LinkedList<PlayboardPoint> ll = territory.getBorderLine();
81:
82: Polygon p = new Polygon();
83: for (PlayboardPoint point : ll) {
84: p.addPoint(10+12+point.getX()*27, 10+10+point.getY()*19);
85: }
86: 87:
88: if(territory.getOwner().isChallenger()) {
89: g.setColor(Colors.challengerSoft);
90: } else {
91: g.setColor(Colors.participantSoft);
92: }
93: g.fillPolygon(p);
94:
95: if(territory.getOwner().isChallenger()) {
96: g.setColor(Colors.challengerMedium);
97: } else {
98: g.setColor(Colors.participantMedium);
99: }
100: g.drawPolygon(p);
101: }
102: FrontView.getInstance().playboard.repaint();
103: }
104:
105: 106: 107:
108: public void update(Observable o, Object arg)
109: {
110: if(o instanceof Playboard) {
111: Log.message(this, "update");
112: refreshTerritories((Playboard)o);
113: }
114: }
115: }
116: