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