001 package components; 002 003 import java.util.Map; 004 005 /** 006 * GameObjectClassification is a tag that describes a GameObject 007 * 008 * This is the enum of GameObjectType that exists, it is useful for new gizmo construction. 009 * 010 *@specfield GameObjectFactory factory //this is the factory of the specified enum. 011 *@specfield String xmlname //This is the xml-valid object name 012 */ 013 014 public enum GameObjectClassification { 015 /* 016 BALL, 017 SQUARE_BUMPER, 018 CIRCLE_BUMPER, 019 TRIANGLE_BUMPER, 020 FLIPPER, 021 RIGHTFLIPPER, 022 LEFTFLIPPER, 023 ABSORBER, 024 WALL */ 025 026 BALL(new BallFactory(),"ball"), 027 CIRCLEBUMPER(new CircleFactory(),"circleBumper"), 028 SQUAREBUMPER(new SquareFactory(),"squareBumper"), 029 TRIANGLEBUMPER(new TriangleFactory(),"triangleBumper"), 030 FLIPPER(null,"flipper"), 031 ABSORBER(new AbsorberFactory(),"absorber"), 032 LEFTFLIPPER(new LeftFlipperFactory(),"leftFlipper"), 033 RIGHTFLIPPER(new RightFlipperFactory(),"rightFlipper"), 034 WALL(null,null), 035 SELECTED(null, null); // a hack for loading selected textures 036 037 private final GameObjectFactory <? extends GameObject> factory; 038 private final String xmlname; 039 040 041 private GameObjectClassification(GameObjectFactory <? extends GameObject> factory, String xmlname) { 042 this.factory = factory; 043 this.xmlname = xmlname; 044 } 045 046 /** 047 * Returns a GameObject with properties p that match this enum's value 048 * @requires p contains the required properties for p, and that this has a valid factory 049 * @return a new gameobject 050 */ 051 public GameObject newInstance(Map<String,String> p, GameSpace g) { 052 if (factory == null) { 053 throw new RuntimeException("This object does not have a factory"); 054 } 055 return factory.newInstance(p, g); 056 } 057 058 /** 059 * Returns the xmlname for this object 060 * @return string that is valid for the xml schema 061 */ 062 public String getXMLName() { 063 if (xmlname == null) { 064 throw new RuntimeException("This object (" + this.toString() + ") does not have an xmlname"); 065 } 066 return xmlname; 067 } 068 069 070 }