Pass the set of all valid paths through to getFramePath so it can fall back to the default action if the specified action doesn't exist

git-svn-id: svn+ssh://src.earth.threerings.net/nenya/trunk@523 ed5b42cb-e716-0410-a449-f6a68f950b19
This commit is contained in:
Charlie Groves
2008-06-04 23:42:36 +00:00
parent 6a0da5531e
commit 228762fc0d
3 changed files with 40 additions and 29 deletions
@@ -22,6 +22,7 @@
package com.threerings.cast; package com.threerings.cast;
import java.io.Serializable; import java.io.Serializable;
import java.util.Set;
import com.samskivert.util.StringUtil; import com.samskivert.util.StringUtil;
@@ -76,10 +77,12 @@ public class CharacterComponent implements Serializable
* *
* @param type null for the normal action frames or one of the custom * @param type null for the normal action frames or one of the custom
* action sub-types: {@link StandardActions#SHADOW_TYPE}, etc. * action sub-types: {@link StandardActions#SHADOW_TYPE}, etc.
*
* @param existentPaths the set of all paths for which there are valid frames.
*/ */
public String getFramePath (String action, String type) public String getFramePath (String action, String type, Set<String> existentPaths)
{ {
return _frameProvider.getFramePath(this, action, type); return _frameProvider.getFramePath(this, action, type, existentPaths);
} }
/** /**
@@ -21,6 +21,8 @@
package com.threerings.cast; package com.threerings.cast;
import java.util.Set;
/** /**
* Provides a mechanism where by a character component can obtain access * Provides a mechanism where by a character component can obtain access
* to its image frames for a particular action in an on demand manner. * to its image frames for a particular action in an on demand manner.
@@ -36,10 +38,12 @@ public interface FrameProvider
CharacterComponent component, String action, String type); CharacterComponent component, String action, String type);
/** /**
* Returns the file path of the animation frames (in the eight sprite directions) for * Returns the file path of the animation frames (in the eight sprite directions) for the
* the specified action of the specified component. May return null if * specified action of the specified component. May return a path to the default action or
* the specified action does not exist for the specified component. * null if the specified action does not exist for the specified component.
*
* @param existentPaths the set of all paths for which there are valid frames.
*/ */
public String getFramePath ( public String getFramePath (
CharacterComponent component, String action, String type); CharacterComponent component, String action, String type, Set<String> existentPaths);
} }
@@ -21,39 +21,22 @@
package com.threerings.cast.bundle; package com.threerings.cast.bundle;
import static com.threerings.cast.Log.log;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Rectangle; import java.awt.Rectangle;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.Set;
import com.samskivert.util.HashIntMap; import com.samskivert.util.HashIntMap;
import com.samskivert.util.IntIntMap; import com.samskivert.util.IntIntMap;
import com.samskivert.util.Predicate; import com.samskivert.util.Predicate;
import com.samskivert.util.Tuple; import com.samskivert.util.Tuple;
import com.threerings.resource.FileResourceBundle;
import com.threerings.resource.ResourceBundle;
import com.threerings.resource.ResourceManager;
import com.threerings.media.image.ImageManager;
import com.threerings.media.image.BufferedMirage;
import com.threerings.media.image.Colorization;
import com.threerings.media.image.ImageDataProvider;
import com.threerings.media.image.ImageUtil;
import com.threerings.media.image.Mirage;
import com.threerings.media.tile.IMImageProvider;
import com.threerings.media.tile.Tile;
import com.threerings.media.tile.TileSet;
import com.threerings.media.tile.TrimmedTile;
import com.threerings.util.DirectionCodes;
import com.threerings.cast.ActionFrames; import com.threerings.cast.ActionFrames;
import com.threerings.cast.ActionSequence; import com.threerings.cast.ActionSequence;
import com.threerings.cast.CharacterComponent; import com.threerings.cast.CharacterComponent;
@@ -63,8 +46,19 @@ import com.threerings.cast.FrameProvider;
import com.threerings.cast.NoSuchComponentException; import com.threerings.cast.NoSuchComponentException;
import com.threerings.cast.StandardActions; import com.threerings.cast.StandardActions;
import com.threerings.cast.TrimmedMultiFrameImage; import com.threerings.cast.TrimmedMultiFrameImage;
import com.threerings.media.image.BufferedMirage;
import static com.threerings.cast.Log.log; import com.threerings.media.image.Colorization;
import com.threerings.media.image.ImageDataProvider;
import com.threerings.media.image.ImageManager;
import com.threerings.media.image.Mirage;
import com.threerings.media.tile.IMImageProvider;
import com.threerings.media.tile.Tile;
import com.threerings.media.tile.TileSet;
import com.threerings.media.tile.TrimmedTile;
import com.threerings.resource.FileResourceBundle;
import com.threerings.resource.ResourceBundle;
import com.threerings.resource.ResourceManager;
import com.threerings.util.DirectionCodes;
/** /**
* A component repository implementation that obtains information from resource bundles. * A component repository implementation that obtains information from resource bundles.
@@ -351,7 +345,17 @@ public class BundledComponentRepository
} }
// from interface FrameProvider // from interface FrameProvider
public String getFramePath (CharacterComponent component, String action, String type) public String getFramePath (CharacterComponent component, String action, String type,
Set<String> existentPaths)
{
String actionPath = makePath(component, action, type);
if(!existentPaths.contains(actionPath)) {
return makePath(component, ActionSequence.DEFAULT_SEQUENCE, type);
}
return actionPath;
}
protected String makePath(CharacterComponent component, String action, String type)
{ {
String imgpath = action; String imgpath = action;
if (type != null) { if (type != null) {