Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }