Add sprites and objects to the dirty item list separately since the
latter have a bounds associated with them. Dirty items can now paint themselves to simplify scene-specific code. git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@476 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
@@ -1,8 +1,10 @@
|
|||||||
//
|
//
|
||||||
// $Id: DirtyItemList.java,v 1.1 2001/10/13 01:08:59 shaper Exp $
|
// $Id: DirtyItemList.java,v 1.2 2001/10/17 22:13:53 shaper Exp $
|
||||||
|
|
||||||
package com.threerings.media.sprite;
|
package com.threerings.media.sprite;
|
||||||
|
|
||||||
|
import java.awt.Graphics2D;
|
||||||
|
import java.awt.Shape;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
import com.threerings.media.sprite.Sprite;
|
import com.threerings.media.sprite.Sprite;
|
||||||
@@ -20,25 +22,35 @@ import com.threerings.media.Log;
|
|||||||
public class DirtyItemList extends ArrayList
|
public class DirtyItemList extends ArrayList
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Append the dirty item at the given coordinates to the dirty
|
* Appends the dirty sprite at the given coordinates to the dirty
|
||||||
* item list.
|
* item list if no item already exists at those coordinates.
|
||||||
|
* Returns whether the item was added to the list.
|
||||||
*/
|
*/
|
||||||
public boolean appendDirtyItem (Object item, int x, int y)
|
public boolean appendDirtySprite (Sprite sprite, int x, int y)
|
||||||
{
|
{
|
||||||
// only allow appending sprites and object tiles
|
|
||||||
if (!(item instanceof Sprite) && !(item instanceof ObjectTile)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// only add the item if there are no existing items
|
|
||||||
if (!contains(x, y)) {
|
if (!contains(x, y)) {
|
||||||
add(new DirtyItem(item, x, y));
|
add(new DirtyItem(sprite, null, x, y));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Appends the dirty object tile at the given coordinates to the
|
||||||
|
* dirty item list if no item already exists at those coordinates.
|
||||||
|
* Returns whether the item was added to the list.
|
||||||
|
*/
|
||||||
|
public boolean appendDirtyObject (
|
||||||
|
ObjectTile tile, Shape bounds, int x, int y)
|
||||||
|
{
|
||||||
|
if (!contains(x, y)) {
|
||||||
|
add(new DirtyItem(tile, bounds, x, y));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sort the items in the list using the given comparator.
|
* Sort the items in the list using the given comparator.
|
||||||
*/
|
*/
|
||||||
@@ -78,13 +90,25 @@ public class DirtyItemList extends ArrayList
|
|||||||
public class DirtyItem
|
public class DirtyItem
|
||||||
{
|
{
|
||||||
public Object obj;
|
public Object obj;
|
||||||
|
public Shape bounds;
|
||||||
public int x, y;
|
public int x, y;
|
||||||
|
|
||||||
public DirtyItem (Object obj, int x, int y)
|
public DirtyItem (Object obj, Shape bounds, int x, int y)
|
||||||
{
|
{
|
||||||
this.obj = obj;
|
this.obj = obj;
|
||||||
|
this.bounds = bounds;
|
||||||
this.x = x;
|
this.x = x;
|
||||||
this.y = y;
|
this.y = y;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void paint (Graphics2D gfx)
|
||||||
|
{
|
||||||
|
if (obj instanceof Sprite) {
|
||||||
|
((Sprite)obj).paint(gfx);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
((ObjectTile)obj).paint(gfx, bounds);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user