Completed Double Dispatch example.
This commit is contained in:
parent
fba664ba49
commit
8c13dd0e10
@ -8,9 +8,17 @@ public class App {
|
||||
public static void main( String[] args ) {
|
||||
List<GameObject> objects = new ArrayList<>();
|
||||
objects.add(new FlamingAsteroid(0, 0, 5, 5));
|
||||
objects.add(new SpaceStationMir(1, 1, 4, 4));
|
||||
objects.add(new SpaceStationMir(1, 1, 2, 2));
|
||||
objects.add(new Meteoroid(10, 10, 15, 15));
|
||||
objects.add(new SpaceStationIss(12, 11, 14, 15));
|
||||
objects.stream().forEach(o1 -> objects.stream().forEach(o2 -> { if (o1 != o2) System.out.println(String.format("%s -> %s", o1, o2)); } ));
|
||||
objects.add(new SpaceStationIss(12, 12, 14, 14));
|
||||
|
||||
objects.stream().forEach(o -> System.out.println(o));
|
||||
System.out.println("");
|
||||
|
||||
objects.stream().forEach(o1 -> objects.stream().forEach(o2 -> { if (o1 != o2 && o1.intersectsWith(o2)) o1.collision(o2); } ));
|
||||
System.out.println("");
|
||||
|
||||
objects.stream().forEach(o -> System.out.println(o));
|
||||
System.out.println("");
|
||||
}
|
||||
}
|
||||
|
@ -6,4 +6,9 @@ public class FlamingAsteroid extends Meteoroid {
|
||||
super(left, top, right, bottom);
|
||||
setOnFire(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collision(GameObject gameObject) {
|
||||
gameObject.collisionResolve(this);
|
||||
}
|
||||
}
|
||||
|
@ -30,4 +30,14 @@ public abstract class GameObject extends Rectangle {
|
||||
public void setDamaged(boolean damaged) {
|
||||
this.damaged = damaged;
|
||||
}
|
||||
|
||||
public abstract void collision(GameObject gameObject);
|
||||
|
||||
public abstract void collisionResolve(FlamingAsteroid asteroid);
|
||||
|
||||
public abstract void collisionResolve(Meteoroid meteoroid);
|
||||
|
||||
public abstract void collisionResolve(SpaceStationMir mir);
|
||||
|
||||
public abstract void collisionResolve(SpaceStationIss iss);
|
||||
}
|
||||
|
@ -5,4 +5,29 @@ public class Meteoroid extends GameObject {
|
||||
public Meteoroid(int left, int top, int right, int bottom) {
|
||||
super(left, top, right, bottom);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collision(GameObject gameObject) {
|
||||
gameObject.collisionResolve(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collisionResolve(FlamingAsteroid asteroid) {
|
||||
System.out.println(String.format("%s hits %s", asteroid.getClass().getSimpleName(), this.getClass().getSimpleName()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collisionResolve(Meteoroid meteoroid) {
|
||||
System.out.println(String.format("%s hits %s", meteoroid.getClass().getSimpleName(), this.getClass().getSimpleName()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collisionResolve(SpaceStationMir mir) {
|
||||
System.out.println(String.format("%s hits %s", mir.getClass().getSimpleName(), this.getClass().getSimpleName()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collisionResolve(SpaceStationIss iss) {
|
||||
System.out.println(String.format("%s hits %s", iss.getClass().getSimpleName(), this.getClass().getSimpleName()));
|
||||
}
|
||||
}
|
||||
|
@ -5,4 +5,9 @@ public class SpaceStationIss extends SpaceStationMir {
|
||||
public SpaceStationIss(int left, int top, int right, int bottom) {
|
||||
super(left, top, right, bottom);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collision(GameObject gameObject) {
|
||||
gameObject.collisionResolve(this);
|
||||
}
|
||||
}
|
||||
|
@ -5,4 +5,34 @@ public class SpaceStationMir extends GameObject {
|
||||
public SpaceStationMir(int left, int top, int right, int bottom) {
|
||||
super(left, top, right, bottom);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collision(GameObject gameObject) {
|
||||
gameObject.collisionResolve(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collisionResolve(FlamingAsteroid asteroid) {
|
||||
System.out.println(String.format("%s hits %s", asteroid.getClass().getSimpleName(), this.getClass().getSimpleName()));
|
||||
setDamaged(true);
|
||||
setOnFire(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collisionResolve(Meteoroid meteoroid) {
|
||||
System.out.println(String.format("%s hits %s", meteoroid.getClass().getSimpleName(), this.getClass().getSimpleName()));
|
||||
setDamaged(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collisionResolve(SpaceStationMir mir) {
|
||||
System.out.println(String.format("%s hits %s", mir.getClass().getSimpleName(), this.getClass().getSimpleName()));
|
||||
setDamaged(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void collisionResolve(SpaceStationIss iss) {
|
||||
System.out.println(String.format("%s hits %s", iss.getClass().getSimpleName(), this.getClass().getSimpleName()));
|
||||
setDamaged(true);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user