/* * Copyright (c) 2012. HappyDroids LLC, All rights reserved. */ package com.happydroids.droidtowers.entities.elevator; import com.happydroids.droidtowers.controllers.AvatarSteeringManager; import com.happydroids.droidtowers.math.Direction; import static com.happydroids.droidtowers.math.Direction.DOWN; import static com.happydroids.droidtowers.math.Direction.UP; public class Passenger { public final int boardingFloor; public final int destinationFloor; private final Runnable disembarkCallback; public final Direction travelDirection; private final AvatarSteeringManager steeringManager; private boolean waitFor; private boolean riding; public Passenger(AvatarSteeringManager steeringManager, int boarding, int destination, Runnable disembarkCallback) { this.steeringManager = steeringManager; boardingFloor = boarding; destinationFloor = destination; this.disembarkCallback = disembarkCallback; travelDirection = boardingFloor < destinationFloor ? UP : DOWN; } public boolean travelContains(Passenger otherPassenger) { if (!otherPassenger.travelDirection.equals(travelDirection)) { return false; } switch (travelDirection) { case UP: return otherPassenger.boardingFloor >= boardingFloor;// && otherPassenger.destinationFloor <= destinationFloor; case DOWN: return otherPassenger.boardingFloor <= boardingFloor;// && otherPassenger.destinationFloor >= destinationFloor; } return false; } public void boardNow() { waitFor = true; steeringManager.boardElevator(new Runnable() { @Override public void run() { waitFor = false; riding = true; } }); } public void disembarkNow() { riding = false; disembarkCallback.run(); } public boolean shouldWaitFor() { return waitFor; } public void updatePosition(float y) { steeringManager.getAvatar().setY(y); } public void killByElevator() { waitFor = false; steeringManager.getAvatar().markToRemove(true); } public AvatarSteeringManager getSteeringManager() { return steeringManager; } public void markToRemove() { } public void informOfServiceChange() { steeringManager.getAvatar().cancelMovement(); } public boolean isRiding() { return riding; } }