Hello all,
I have a small-scale RTS I am writing and I cannot figure out how to select all units within an area. In most RTS, you click the mouse and then drag and everything inside gets selected. I cannot figure out how to do that. Can you help?
private Selector selector;
private boolean dragging;
public void act()
{
if (!dragging && Greenfoot.mousePressed(this))
{
dragging = true;
}
if (dragging && Greenfoot.mouseDragged(this))
{
MouseInfo mi = Greenfoot.getMouseInfo();
if (selector == null)
{
selector = new Selector(mi.getX(), mi.getY());
getWorld().addObject(selector, mi.getX(), mi.getY());
}
selector.resize(mi.getX(), mi.getY());
}
if (selector != null && Greenfoot.mouseDragEnded(this))
{
dragging = false;
java.util.List objs = selector.getSelection();
selector = null;
// work with list of objects returned by 'selector.getSelection' here
}
}public class Selector extends Actor
{
int baseX = 0, baseY = 0;
int across = 0, down = 0;
public Selector(int startX, int startY)
{
baseX = startX;
baseY = startY;
updateImage();
}
public void resize(int newX, int newY)
{
across = newX-startX;
down = newY-startY;
updateImage();
setLocation(startX+across/2, startY+down/2;
}
private void updateImage()
{
GreenfootImage img = new GreenfootImage((int)Math.abs(across)+1, (int)Math.abs(down)+1);
mg.setColor(new Color(255, 96, 96, 96));
img.fill();
img.setColor(Color.red);
img.drawRect(0, 0, img.getWidth()-1, img.getHeight()-1);
setImage(img);
}
public java.util.List getSelection()
{
java.util.List actors = getIntersectingObjects(Actor.class);
getWorld().removeObject(this);
return actors;
}
}