|
* This software is made available under the RoboWiki Public Code License (RWPCL). The full text of * the license may be found at http://robowiki.net/cgi-bin/robowiki?RWPCL. |
|
* This software is made available under the RoboWiki Limited Public Code License (RWLPCL). The full * text of the license may be found at http://robowiki.net/cgi-bin/robowiki?RWLPCL. |
|
import java.awt.Color; |
|
|
|
import java.awt.Paint; |
|
* Draws the largest oval that can be contained in a rectangle defined with the given * coordinates and dimensions. */ public void drawOval(double x, double y, double w, double h) { _g.drawOval(i(x), i(y), i(w), i(h)); } /** |
|
drawOval(i(x - r), i(y - r), r * 2, r * 2); |
|
int d = i(r * 2); _g.drawOval(i(x - r), i(y - r), d, d); } public void drawArc(double x, double y, double r, double start, double extend) { int d = i(r * 2); _g.drawArc(i(x - r), i(y - r), d, d, i(Math2.radToDeg?(start)), i(Math2.radToDeg?(extend))); |
|
* Sets the Hud's current drawing color. |
|
* Sets the Hud's current drawing paint. |
|
public void setColor(Color c) { _g.setColor(c); |
|
public void setPaint(Paint c) { _g.setPaint(c); |
|
</nowiki></pre> |
|
</nowiki></pre> |
/*
* PluggableRobot, by Robert J. Walker
* Home page: http://robowiki.net/cgi-bin/robowiki?PluggableRobot
* This software is made available under the RoboWiki Limited Public Code License (RWLPCL). The full
* text of the license may be found at http://robowiki.net/cgi-bin/robowiki?RWLPCL.
*/
package rjw.pluggablerobot;
import java.awt.Graphics2D;
import java.awt.Paint;
import robocode.Robot;
/**
* Facilitates drawing graphics on the arena by automatically converting between values used in
* calculations to values used for drawing. The graphics context (Graphics2D) is injected into the
* Hud just before it is handed to Painters, then removed afterward.
* @author Robert J. Walker
*/
public class Hud {
/**
* Objects which implement this interface can be passed to PluggableRobot.registerPainter(), and
* will get their paint() methods called when it's time to draw the HUD.
*/
public interface Painter {
/**
* This method will be called by PluggableRobot when it's time for this object to draw.
*/
public void paint(Hud hud, long tick);
}
private Graphics2D _g;
public double _w;
public double _h;
/**
* Creates a new Hud object.
*/
public Hud(Robot bot) {
_w = bot.getBattleFieldWidth();
_h = bot.getBattleFieldHeight();
}
/**
* Draws a point at the given coordinates.
*/
public void drawPoint(double x, double y) {
int x0 = i(x);
int y0 = i(y);
_g.drawLine(x0, y0, x0, y0);
}
/**
* Draws a line between the two indicated points.
*/
public void drawLine(double x1, double y1, double x2, double y2) {
_g.drawLine(i(x1), i(y1), i(x2), i(y2));
}
/**
* Draws a circle with the given center point and radius.
*/
public void drawCircle(double x, double y, double r) {
int d = i(r * 2);
_g.drawOval(i(x - r), i(y - r), d, d);
}
public void drawArc(double x, double y, double r, double start, double extend) {
int d = i(r * 2);
_g.drawArc(i(x - r), i(y - r), d, d, i(Math2.radToDeg(start)), i(Math2.radToDeg(extend)));
}
/**
* Draws a rectangle with the given position and dimensions.
*/
public void drawRect(double x, double y, double w, double h) {
_g.drawRect(i(x), i(y), i(w), i(h));
}
/**
* Draws a filled rectangle with the given position and dimensions.
*/
public void drawFilledRect(double x, double y, double w, double h) {
_g.fillRect(i(x), i(y), i(w), i(h));
}
/**
* Draws a left-aligned String at the given position.
*/
public void drawString(String s, double x, double y) {
_g.drawString(s, i(x), i(y));
}
/**
* Draws a right-aligned String at the given position.
*/
public void drawStringRight(String s, double x, double y) {
_g.drawString(s, i(x) - _g.getFontMetrics().stringWidth(s), i(y));
}
/**
* Sets the Hud's current drawing paint.
*/
public void setPaint(Paint c) {
_g.setPaint(c);
}
/**
* Returns the width of the battlefield. This is useful in situations where you don't have
* access to the robot object.
*/
public double getWidth() {
return _w;
}
/**
* Returns the height of the battlefield. This is useful in situations where you don't have
* access to the robot object.
*/
public double getHeight() {
return _h;
}
/**
* Allows PluggableRobot to inject the graphics context into the Hud.
*/
public void setContext(Graphics2D g) {
_g = g;
}
/**
* Rounds the given double value to the nearest int.
*/
private int i(double val) {
return (int) Math.round(val);
}
}