Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import com.google.common.base.Predicate;
- import com.google.common.collect.ImmutableList;
- import java.util.Iterator;
- class HorizontalFlip implements ActuatorVisitor {
- @Override
- public Actuator visitUp(Up actuator) {
- return new Up();
- }
- @Override
- public Actuator visitDown(Down actuator) {
- return new Down();
- }
- @Override
- public Actuator visitLeft(Left actuator) {
- return new Right();
- }
- @Override
- public Actuator visitRight(Right actuator) {
- return new Left();
- }
- @Override
- public Actuator visitParallellyComposingActuator(ParallellyComposingActuator actuator) {
- return new Actuator() {
- @Override
- public Actuator accept(ActuatorVisitor v) {
- return new ParallellyComposingActuator(actuator.motors);
- }
- @Override
- public void actuate(Movable movable) {
- for (Actuator m1 : actuator.motors) {
- Actuator flip = m1.accept(new HorizontalFlip());
- flip.actuate(movable);
- }
- }
- };
- }
- @Override
- public Actuator visitAmplifyingActuator(AmplifyingActuator actuator) {
- return new Actuator() {
- @Override
- public Actuator accept(ActuatorVisitor v) {
- return new AmplifyingActuator(actuator.motor, actuator.factor);
- }
- @Override
- public void actuate(Movable movable) {
- for (int i = 0; i < actuator.factor; i++) {
- actuator.motor.accept(new HorizontalFlip()).actuate(movable);
- }
- }
- };
- }
- @Override
- public Actuator visitSequentiallyComposingActuator(SequentiallyComposingActuator actuator) {
- return new Actuator() {
- @Override
- public Actuator accept(ActuatorVisitor v) {
- return new SequentiallyComposingActuator(actuator.iterable);
- }
- @Override
- public void actuate(Movable movable) {
- Pair<Predicate<Movable>, Actuator> act;
- while (actuator.iterable.iterator().hasNext()) {
- act = actuator.iterable.iterator().next();
- while (act.first.apply(movable)) {
- act.second.accept(new HorizontalFlip()).actuate(movable);
- }
- }
- }
- };
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement