The AutoFringer picks which fringe tile to use next by querying a
Random, instead it relies on a duplicatable hashing method. git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@2621 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
//
|
||||
// $Id: MisoScenePanel.java,v 1.39 2003/05/28 18:15:26 ray Exp $
|
||||
// $Id: MisoScenePanel.java,v 1.40 2003/05/29 01:04:58 ray Exp $
|
||||
|
||||
package com.threerings.miso.client;
|
||||
|
||||
@@ -33,7 +33,6 @@ import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
import com.samskivert.swing.Controller;
|
||||
import com.samskivert.swing.RadialMenu;
|
||||
@@ -1335,7 +1334,7 @@ public class MisoScenePanel extends VirtualMediaPanel
|
||||
protected Tile computeFringeTile (int tx, int ty)
|
||||
{
|
||||
return _ctx.getTileManager().getAutoFringer().getFringeTile(
|
||||
_model, tx, ty, _masks, _rando);
|
||||
_model, tx, ty, _masks);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1512,9 +1511,6 @@ public class MisoScenePanel extends VirtualMediaPanel
|
||||
/** For computing fringe tiles. */
|
||||
protected HashMap _masks = new HashMap();
|
||||
|
||||
/** For computing fringe tiles. */
|
||||
protected Random _rando = new Random();
|
||||
|
||||
/** The dirty sprites and objects that need to be re-painted. */
|
||||
protected DirtyItemList _dirtyItems = new DirtyItemList();
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
//
|
||||
// $Id: AutoFringer.java,v 1.22 2003/05/02 23:33:30 mdb Exp $
|
||||
// $Id: AutoFringer.java,v 1.23 2003/05/29 01:04:58 ray Exp $
|
||||
|
||||
package com.threerings.miso.tile;
|
||||
|
||||
@@ -57,7 +57,7 @@ public class AutoFringer
|
||||
* location.
|
||||
*/
|
||||
public Tile getFringeTile (MisoSceneModel scene, int col, int row,
|
||||
HashMap masks, Random rando)
|
||||
HashMap masks)
|
||||
{
|
||||
// get the tileset id of the base tile we are considering
|
||||
int underset = scene.getBaseTileId(col, row) >> 16;
|
||||
@@ -110,14 +110,23 @@ public class AutoFringer
|
||||
}
|
||||
}
|
||||
|
||||
return composeFringeTile(frecs, masks, rando);
|
||||
return composeFringeTile(frecs, masks, generateHashValue(col, row));
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a hash value for picking which fringe to use for a particular
|
||||
* tile.
|
||||
*/
|
||||
protected int generateHashValue (int col, int row)
|
||||
{
|
||||
return col ^ row;
|
||||
}
|
||||
|
||||
/**
|
||||
* Compose a FringeTile out of the various fringe images needed.
|
||||
*/
|
||||
protected Tile composeFringeTile (
|
||||
FringerRec[] fringers, HashMap masks, Random rando)
|
||||
FringerRec[] fringers, HashMap masks, int hashValue)
|
||||
{
|
||||
// sort the array so that higher priority fringers get drawn first
|
||||
QuickSort.sort(fringers);
|
||||
@@ -128,7 +137,7 @@ public class AutoFringer
|
||||
for (int jj = 0; jj < indexes.length; jj++) {
|
||||
try {
|
||||
ftimg = getTileImage(ftimg, fringers[ii].baseset,
|
||||
indexes[jj], masks, rando);
|
||||
indexes[jj], masks, hashValue);
|
||||
} catch (NoSuchTileException nste) {
|
||||
Log.warning("Autofringer couldn't find a needed tile " +
|
||||
"[error=" + nste + "].");
|
||||
@@ -147,11 +156,11 @@ public class AutoFringer
|
||||
*/
|
||||
protected BufferedImage getTileImage (
|
||||
BufferedImage ftimg, int baseset, int index,
|
||||
HashMap masks, Random rando)
|
||||
HashMap masks, int hashValue)
|
||||
throws NoSuchTileException, NoSuchTileSetException
|
||||
{
|
||||
FringeConfiguration.FringeTileSetRecord tsr =
|
||||
_fringeconf.getRandomFringe(baseset, rando);
|
||||
_fringeconf.getFringe(baseset, hashValue);
|
||||
int fringeset = tsr.fringe_tsid;
|
||||
TileSet fset = _tmgr.getTileSet(fringeset);
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
//
|
||||
// $Id: FringeConfiguration.java,v 1.13 2002/08/19 22:58:15 mdb Exp $
|
||||
// $Id: FringeConfiguration.java,v 1.14 2003/05/29 01:04:58 ray Exp $
|
||||
|
||||
package com.threerings.miso.tile;
|
||||
|
||||
@@ -119,12 +119,13 @@ public class FringeConfiguration implements Serializable
|
||||
* Get a random FringeTileSetRecord from amongst the ones
|
||||
* listed for the specified base tileset.
|
||||
*/
|
||||
public FringeTileSetRecord getRandomFringe (int baseset, Random rando)
|
||||
public FringeTileSetRecord getFringe (int baseset, int hashValue)
|
||||
{
|
||||
FringeRecord f = (FringeRecord) _frecs.get(baseset);
|
||||
|
||||
int size = f.tilesets.size();
|
||||
return (FringeTileSetRecord) f.tilesets.get(rando.nextInt(size));
|
||||
int pick = Math.abs(hashValue) % size;
|
||||
return (FringeTileSetRecord) f.tilesets.get(pick);
|
||||
}
|
||||
|
||||
/** The mapping from base tileset id to fringerecord. */
|
||||
|
||||
Reference in New Issue
Block a user