Beispiel #1
0
    // Use this for initialization
    void Start()
    {
        gameObject.GetComponent <SpriteRenderer>().sprite = sprites[Random.Range(0, sprites.Length)];
        frozen = false;

        controller = GameObject.Find("Game Controller").GetComponent <GameController>();
        init       = GameObject.Find("Game Controller").GetComponent <Initialize>();
        elevator   = controller.GetElevator();

        cardManager = controller.GetCardManager();

        passengerName = NameGenerator.Name();
        job           = NameGenerator.Job();
        rage          = 0;
        timeAlive     = -1.0f;

        positionOnLift = Random.Range(-0.9f, 1.1f);

        do
        {
            floor = Random.Range(1, init.NoOfFloors() + 1);
        } while (floor == elevator.GetFloor());
        elevator.Lock();

        card = cardManager.ConstructCard(this);

        StartCoroutine(MoveToPosition(new Vector3(positionOnLift, -0.25f, -1), 1.0f, false));
    }
    void Update()
    {
        if (flashing)
        {
            ContinueFlashing();
        }

        if (targetFloor == currentFloor)
        {
            DoProductiveStuff();
            if (direction == 0)
            {
                targetPosition = GetProductiveLocation();
                MoveToTarget(targetPosition, superSlowSpeed);
            }
        }

        if (targetFloor != currentFloor)
        {
            timeWaiting += Time.deltaTime;
            if (timeWaiting > PeopleController.instance.patienceThreshold)
            {
                anger      += 1;
                timeWaiting = 0;
                ChangeToColorBasedOnAnger();
            }
        }

        if (onElevator)
        {
            ElevatorMove elevatorMoveScript = (targetElevator.GetComponent("ElevatorMove") as ElevatorMove);
            if (elevatorMoveScript.velocity == 0 && targetElevator.transform.position.y == targetFloor)
            {
                GetOff();
            }
        }

        if (direction != 0 && !onElevator)
        {
            DoMovementStuff();
        }
    }
Beispiel #3
0
        public void MoveElevator()
        {
            if (!Elevator.ControlPanel.ClickedFloors.Contains(true) && ClickedFloors.Contains(true))
            {
                for (int i = NumberOfFloors; i > 0; i--)
                {
                    if (ClickedFloors[i - 1] == true)
                    {
                        if (i > Elevator.CurrentFloor)
                        {
                            if (CheckDirection() == Directions.Down)
                            {
                                RideDone?.Invoke();
                                FreeRideDone?.Invoke();
                            }
                            Elevator.CurrentDirection = Directions.Up;
                        }
                        else if (i < Elevator.CurrentFloor)
                        {
                            if (CheckDirection() == Directions.Up)
                            {
                                RideDone?.Invoke();
                                FreeRideDone?.Invoke();
                            }
                            Elevator.CurrentDirection = Directions.Down;
                        }
                        Elevator.CurrentFloor = i;
                        ClickedFloors[i - 1]  = false;
                        Elevator.ControlPanel.ClickedFloors[i - 1] = false;
                        ElevatorMove?.Invoke(i);
                        break;
                    }
                }
            }
            else if (Elevator.ControlPanel.ClickedFloors.Contains(true))
            {
                if (CheckDirection() == Directions.None)
                {
                    for (int i = NumberOfFloors; i > Elevator.CurrentFloor; i--)
                    {
                        if (Elevator.ControlPanel.ClickedFloors[i - 1] == true)
                        {
                            Elevator.CurrentDirection = Directions.Up;
                            break;
                        }
                    }
                    for (int i = 1; i < Elevator.CurrentFloor; i++)
                    {
                        if (Elevator.ControlPanel.ClickedFloors[i - 1] == true)
                        {
                            Elevator.CurrentDirection = Directions.Down;
                            break;
                        }
                    }
                }

                if (CheckDirection() == Directions.Up)
                {
                    bool GoOppositeWay = true;
                    for (int i = Elevator.CurrentFloor; i <= NumberOfFloors; i++)
                    {
                        if (Elevator.ControlPanel.ClickedFloors[i - 1] == true)
                        {
                            Elevator.CurrentFloor = i;
                            ClickedFloors[i - 1]  = false;
                            Elevator.ControlPanel.ClickedFloors[i - 1] = false;
                            foreach (Passenger passenger in Passengers)
                            {
                                if (passenger.State == States.Riding)
                                {
                                    passenger.InitialFloor = Elevator.CurrentFloor;
                                    UpdatePassengerData();
                                }
                            }
                            GoOppositeWay = false;
                            ElevatorMove?.Invoke(i);
                            break;
                        }
                    }
                    if (GoOppositeWay == true)
                    {
                        Elevator.CurrentDirection = Directions.Down;
                        //RideDone?.Invoke();
                        StatisticMaker.IncrementNumberOfFreeRides();
                        for (int i = Elevator.CurrentFloor; i > 0; i--)
                        {
                            if (Elevator.ControlPanel.ClickedFloors[i - 1] == true || ClickedFloors[i - 1] == true)
                            {
                                Elevator.CurrentFloor = i;
                                ClickedFloors[i - 1]  = false;
                                Elevator.ControlPanel.ClickedFloors[i - 1] = false;
                                foreach (Passenger passenger in Passengers)
                                {
                                    if (passenger.State == States.Riding)
                                    {
                                        passenger.InitialFloor = Elevator.CurrentFloor;
                                        UpdatePassengerData();
                                    }
                                }
                                ElevatorMove?.Invoke(i);
                                break;
                            }
                        }
                    }
                }
                else if (CheckDirection() == Directions.Down)
                {
                    bool GoOppositeWay = true;
                    for (int i = Elevator.CurrentFloor; i > 0; i--)
                    {
                        if (Elevator.ControlPanel.ClickedFloors[i - 1] == true || ClickedFloors[i - 1] == true)
                        {
                            Elevator.CurrentFloor = i;
                            ClickedFloors[i - 1]  = false;
                            Elevator.ControlPanel.ClickedFloors[i - 1] = false;
                            foreach (Passenger passenger in Passengers)
                            {
                                if (passenger.State == States.Riding)
                                {
                                    passenger.InitialFloor = Elevator.CurrentFloor;
                                    UpdatePassengerData();
                                }
                            }
                            GoOppositeWay = false;
                            ElevatorMove?.Invoke(i);
                            break;
                        }
                    }
                    if (GoOppositeWay == true)
                    {
                        Elevator.CurrentDirection = Directions.Up;
                        RideDone?.Invoke();
                        for (int i = Elevator.CurrentFloor; i <= NumberOfFloors; i++)
                        {
                            if (Elevator.ControlPanel.ClickedFloors[i - 1] == true)
                            {
                                Elevator.CurrentFloor = i;
                                ClickedFloors[i - 1]  = false;
                                Elevator.ControlPanel.ClickedFloors[i - 1] = false;
                                foreach (Passenger passenger in Passengers)
                                {
                                    if (passenger.State == States.Riding)
                                    {
                                        passenger.InitialFloor = Elevator.CurrentFloor;
                                        UpdatePassengerData();
                                    }
                                }
                                GoOppositeWay = false;
                                ElevatorMove?.Invoke(i);
                                break;
                            }
                        }
                    }
                }
            }
        }