001 package components;
002
003 import java.util.HashSet;
004 import java.util.Map;
005 import java.util.Set;
006
007 import physics3d.Angle;
008 import physics3d.GameConstants;
009 import physics3d.Shape;
010 import physics3d.Vect3;
011
012 /**
013 * A CircleBumper is a mutable object that represents a Cylindrically Shaped bumper
014 *
015 */
016
017 /*
018 * Abstraction Function
019 * AF(r) = a CircleBumper, cb
020 */
021
022 /*
023 * Representation Invariant
024 * The CircleBumper stays in within the boundaries of its GameSpace, as specified by the
025 * walls of the GameSpace
026 */
027
028 public class CircleBumper extends GameObject {
029
030
031 /**
032 * @effects creates a new CircleBumper
033 * @param props String->String map
034 * @param gs a GameSpace
035 */
036 public CircleBumper(Map<String, String> props, GameSpace gs) {
037 super(props, gs);
038 }
039
040 /**
041 * @effects creates a new CircleBumper
042 */
043 public CircleBumper(Vect3 tlf, Vect3 ov, Angle oa, String name, GameSpace g) {
044 super(tlf,ov,oa,name,g);
045 this.shape = Shape.getCirBumperShape();
046 double x = 0.5; //0.5 units per side
047 this.center = tlf.plus(new Vect3(x, x, x));
048 }
049
050 /**
051 * @effects creates a new CircleBumper
052 */
053 public CircleBumper(Vect3 tlf, String name, GameSpace g) {
054 this(tlf, Vect3.Z_HAT, Angle.ZERO, name, g);
055 }
056
057
058
059 /**
060 * @return the GameObjectClassification of this object
061 */
062 public GameObjectClassification getGOClassification() {
063 return GameObjectClassification.CIRCLEBUMPER;
064 }
065
066 @Override
067 protected Shape shape() {
068 return Shape.getCirBumperShape();
069 }
070
071 @Override
072 public void getBasicPropertyMap(Map<String,String> m) {
073 m.put("orientation", Integer.toString((int)Math.round(this.orientAngle.degrees())));
074 super.getBasicPropertyMap(m);
075 }
076
077 /**
078 * @return the top left front corners of the grid locations occupied by the bumper,
079 * where the x grid positions go from 0-20, y from 0-20, and z from 0-10
080 */
081 public Set<Vect3> getOccupiedPositions() {
082 Set<Vect3> ops = new HashSet<Vect3>();
083 ops.add(getTLF());
084 return ops;
085 }
086 }