void VisitGateUpdate() { // if the boarding process has started, skip ahead past benches if (startedBoardingInterrupt && (state_passenger_building != STATE_GATE_GOTO_ENTER && state_passenger_building != STATE_GATE_GOTO_SEAT && state_passenger_building != STATE_GATE_SEAT_ROTATE)) { // if already entering benches, wait to get to seating part if (state_passenger_building == STATE_GATE_SEAT) { StartBoarding(); } else { state_passenger_building = STATE_GATE_GOTO_QUEUE; finalDestination = new Vector2(this.transform.position.x, this.transform.position.z); } startedBoardingInterrupt = false; } if (state_passenger_building == STATE_GATE_GOTO) { finalDestination = gate.GetEnterBenchesPosition(); steering.Visit(finalDestination); state_passenger_building = STATE_GATE_GOTO_ENTER; } else if (state_passenger_building == STATE_GATE_GOTO_ENTER) { if (HasArrived(GridHelper.GetGridCellSize() / 5)) { bench = gate.AddToBench(this); if (bench != null) { Vector2[] exitPath = bench.GetBenchEnterPath(this); steering.Visit(exitPath); finalDestination = exitPath[0]; state_passenger_building = STATE_GATE_GOTO_SEAT; } } } else if (state_passenger_building == STATE_GATE_GOTO_SEAT) { if (HasArrived(GridHelper.GetGridCellSize() / 10f)) { steering.FullStop(); finalDestination = new Vector2(99999f, 99999f); state_passenger_building = STATE_GATE_SEAT_ROTATE; } } else if (state_passenger_building == STATE_GATE_SEAT_ROTATE) { iTween.RotateTo(gameObject, iTween.Hash( "rotation", bench.GetSeatRotation(this), "easetype", iTween.EaseType.easeInOutQuad, "time", 1.0f)); state_passenger_building = STATE_GATE_SEAT; } else if (state_passenger_building == STATE_GATE_SEAT) { // on seat, waiting for boarding } else if (state_passenger_building == STATE_GATE_GOTO_QUEUE) { if (HasArrived(GridHelper.GetGridCellSize())) { // go to enter queue position //finalDestination = gate.GetEnterQueuePosition(); DISABLED FOR PASSENGER BUILDING steering.Seek(finalDestination); state_passenger_building = STATE_GATE_GOTO_QUEUE_ENTER; } } else if (state_passenger_building == STATE_GATE_GOTO_QUEUE_ENTER) { hasArrivedCounter++; if (hasArrivedCounter > 200) { print("stuck on has arrived (" + GetID() + ")"); print("this position = " + this.position + " | targetPos = " + targetPos + " | finalDestination = " + finalDestination); finalDestination = this.position; } if (HasArrived(GridHelper.GetGridCellSize())) { //print("has arrived"); // send back to visitPassengerUpdate() because that will do the whole queue thing (except for exit path?) visitBuilding = gate; exit_state = STATE_GATE_EXIT; //finalDestination = visitBuilding.EnterQueueAndGetPosition(this); DISABLED FOR PASSENGER BUILDING steering.Arrive(finalDestination); state_passenger_building = STATE_PASSENGER_BUILDING_QUEUE_ENTER; state = STATE_GATE_BOARDING_QUEUE; } } }