public void MoveCabin() { if (currFloorNum == currRequest.FloorNum && cabin.position == Floors[currFloorNum].Position) { OnReachGoalFloor(); return; } if (cabin.position == Floors[nextFloorNum].Position) { currFloorNum = nextFloorNum; FloorChanged.Invoke(currFloorNum); do { nextFloorNum = movingDirection == ElevatorDirection.up ? nextFloorNum + 1 : nextFloorNum - 1; nextFloorNum = Mathf.Clamp(nextFloorNum, 1, Floors.Count); if (nextFloorNum <= 0 || nextFloorNum > Floors.Count) { return; } }while (Floors[nextFloorNum] == null); // pass floors without elevator doors, if such floors exist return; } cabin.position = Vector3.MoveTowards(cabin.transform.position, Floors[nextFloorNum].Position, speed * Time.deltaTime); }
public void Initialize(Dictionary <int, FloorController> floors, CabinController cabinController, float speed, int id) { downRequests.Clear(); upRequests.Clear(); downDelayedRequests.Clear(); upDelayedRequests.Clear(); this.speed = speed; this.cabinController = cabinController; Floors = floors; cabin = cabinController.transform; currFloorNum = 1; Id = id; SetState(idleState); FloorChanged.Invoke(currFloorNum); //GoalFloorReached.Invoke(new Request(ElevatorDirection.none, currFloorNum), this); cabinController.ShowCabin(false); currRequest = new Request(ElevatorDirection.none, currFloorNum); NotifyFloor(currRequest); }