Various fixes to support negative tile coordinates; created sparse miso

scene model and associated business to store scene data in an arbitrary
set of blocks rather than fixed arrays; finally stuck a fork in scene
width and height as well as view width and height along with origin offset
and a few other now obsolete bits.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@2434 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
Michael Bayne
2003-04-19 22:40:34 +00:00
parent 95b19feb51
commit 3c94cd67f6
11 changed files with 678 additions and 126 deletions
@@ -0,0 +1,68 @@
//
// $Id: SparseMisoSceneRuleSet.java,v 1.1 2003/04/19 22:40:34 mdb Exp $
package com.threerings.miso.tools.xml;
import java.util.ArrayList;
import org.xml.sax.Attributes;
import org.apache.commons.digester.Digester;
import org.apache.commons.digester.Rule;
import com.samskivert.xml.CallMethodSpecialRule;
import com.samskivert.xml.SetFieldRule;
import com.samskivert.xml.SetPropertyFieldsRule;
import com.threerings.tools.xml.NestableRuleSet;
import com.threerings.miso.data.ObjectInfo;
import com.threerings.miso.data.SparseMisoSceneModel.Section;
import com.threerings.miso.data.SparseMisoSceneModel;
/**
* Used to parse a {@link SparseMisoSceneModel} from XML.
*/
public class SparseMisoSceneRuleSet implements NestableRuleSet
{
// documentation inherited from interface
public String getOuterElement ()
{
return SparseMisoSceneWriter.OUTER_ELEMENT;
}
// documentation inherited from interface
public void addRuleInstances (String prefix, Digester dig)
{
// this creates the appropriate instance when we encounter our
// prefix tag
dig.addRule(prefix, new Rule(dig) {
public void begin (Attributes attributes) throws Exception {
digester.push(createMisoSceneModel());
}
public void end () throws Exception {
digester.pop();
}
});
// set up rules to parse and set our fields
dig.addRule(prefix + "/swidth", new SetFieldRule(dig, "swidth"));
dig.addRule(prefix + "/sheight", new SetFieldRule(dig, "sheight"));
String sprefix = prefix + "/sections/section";
dig.addObjectCreate(sprefix, Section.class.getName());
dig.addRule(sprefix, new SetPropertyFieldsRule(dig));
dig.addRule(sprefix + "/base", new SetFieldRule(dig, "baseTileIds"));
dig.addObjectCreate(sprefix + "/objects/object",
ObjectInfo.class.getName());
dig.addRule(sprefix + "/objects/object",
new SetPropertyFieldsRule(dig));
dig.addSetNext(sprefix + "/objects/object", "addObject",
ObjectInfo.class.getName());
dig.addSetNext(sprefix, "setSection", Section.class.getName());
}
protected SparseMisoSceneModel createMisoSceneModel ()
{
return new SparseMisoSceneModel();
}
}