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 SquareBumper is a mutable object that represents a cube shaped bumper.
014 */
015
016 /*
017 * Abstraction Function
018 * AF(r) = a SquareBumper, sb
019 */
020
021 /*
022 * Representation Invariant
023 * The SquareBumper stays in within the boundaries of its GameSpace, as specified by the
024 * walls of the GameSpace
025 */
026
027 public class SquareBumper extends GameObject {
028
029 /**
030 * @effects creates a new SquareBumper
031 */
032 public SquareBumper(Vect3 tlf, Vect3 ov, Angle oa, String name, GameSpace g) {
033 super(tlf,ov,oa,name,g);
034 this.shape = Shape.getSqBumperShape();
035 double x = 0.5;
036 this.center = tlf.plus(new Vect3(x, x, x));
037 }
038
039 /**
040 * @effects creates a new SquareBumper
041 */
042 public SquareBumper(Vect3 tlf, String name, GameSpace g) {
043 this(tlf, Vect3.Z_HAT, Angle.ZERO, name, g);
044 }
045
046 /**
047 * @effects creates a new SquareBumper
048 */
049 public SquareBumper(Map<String, String> p, GameSpace g) {
050 super(p, g);
051 }
052
053 /**
054 * @return the GameObjectClassification of this object
055 */
056 public GameObjectClassification getGOClassification() {
057 return GameObjectClassification.SQUAREBUMPER;
058 }
059
060 @Override
061 protected Shape shape() {
062 return Shape.getSqBumperShape();
063 }
064
065 //See super class
066 public void getBasicPropertyMap(Map<String,String> m) {
067 if (this.orientAngle.degrees() == -90) {
068 m.put("orientation", "270");
069 } else {
070 m.put("orientation", Integer.toString((int)Math.round(this.orientAngle.degrees())));
071 }
072 super.getBasicPropertyMap(m);
073 }
074
075 /**
076 * @return the top left front corners of the grid locations occupied by the bumper,
077 * where the x grid positions go from 0-20, y from 0-20, and z from 0-10
078 */
079 public Set<Vect3> getOccupiedPositions() {
080 Set<Vect3> ops = new HashSet<Vect3>();
081 ops.add(getTLF());
082 return ops;
083 }
084
085 }