/*******************************************************************************
* Copyright (c) 2001, 2010 Mathew A. Nelson and Robocode contributors
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://robocode.sourceforge.net/license/epl-v10.html
*
* Contributors:
* Flemming N. Larsen
* - Initial implementation
*******************************************************************************/
package net.sf.robocode.ui.gfx;
import java.awt.*;
import java.awt.geom.AffineTransform;
/**
* The base of all renderable objects.
* An {@code RenderObject} is an object that can be painted and transformed.
*
* @author Flemming N. Larsen (original)
*/
public class RenderObject {
/**
* Base transform, e.g. the initial rotation and translation
*/
protected AffineTransform baseTransform;
/**
* Current transform that is concatenated with the base transform
*/
protected final AffineTransform transform;
/**
* Current frame that must be rendered
*/
protected int frame;
/**
* Constructs a new {@code RenderObject}.
*/
public RenderObject() {
baseTransform = new AffineTransform();
transform = new AffineTransform();
}
/**
* Constructs a new {@code RenderObject} that is a copy of another {@code RenderObject}.
*
* @param renderObject the RenderObject to copy.
*/
public RenderObject(RenderObject renderObject) {
baseTransform = new AffineTransform(renderObject.baseTransform);
transform = new AffineTransform(renderObject.transform);
frame = renderObject.frame;
}
/**
* Sets the base transform which is pre-concatenated with the current transform.
*
* @param Tx the new transform
*/
public void setBaseTransform(AffineTransform Tx) {
baseTransform.setTransform(Tx);
}
/**
* Returns a copy of the base transform
*
* @return a copy of the base transform
*/
public AffineTransform getBaseTransform() {
return new AffineTransform(baseTransform);
}
/**
* Sets the current transform, which is concatenated with the base transform.
*
* @param Tx the new transform
*/
public void setTransform(AffineTransform Tx) {
transform.setTransform(Tx);
transform.concatenate(baseTransform);
}
/**
* Returns a copy of the current transform
*
* @return a copy of the current transform
*/
public AffineTransform getTransform() {
return transform;
}
/**
* Sets the current frame number
*
* @param frame the new frame number
*/
public void setFrame(int frame) {
this.frame = frame;
}
/**
* Returns the current frame number
*
* @return the current frame number
*/
public int getFrame() {
return frame;
}
/**
* Paint this object.
* This method must be overridden in derived classes.
*
* @param g the graphics context where this object must be painted.
*/
public void paint(Graphics2D g) {}
/**
* Returns the bounds of this object based on it's current transform.
* This method must be overridden in derived classes.
*
* @return the bounds of this object based on it's current transform.
*/
public Rectangle getBounds() {
return new Rectangle();
}
/**
* Returns a copy of this object.
* This method must be overridden in derived classes.
*
* @return a copy of this object.
*/
public RenderObject copy() {
return new RenderObject(this);
}
}