示例#1
0
    protected IEnumerator DelayOffTurnSignals()
    {
        yield return(FixedUpdateManager.WaitForFixedSeconds(3f));

        isLeftTurn = isRightTurn = false;
        controller.SetNPCTurnSignal();
    }
示例#2
0
    IEnumerator WaitTrafficLight()
    {
        currentStopTime = 0f;
        yield return(FixedUpdateManager.WaitUntilFixed(() => distanceToStopTarget <= stopLineDistance));

        if (prevMapLane.stopLine.currentState == MapData.SignalLightStateType.Green)
        {
            yield break; // light is green so just go
        }

        isStopLight = true;
        yield return(FixedUpdateManager.WaitUntilFixed(() => atStopTarget)); // wait if until reaching stop line

        if ((isRightTurn && prevMapLane.rightLaneReverse == null))
        {
            var waitTime  = RandomGenerator.NextFloat(0f, 3f);
            var startTime = currentStopTime;
            yield return(FixedUpdateManager.WaitUntilFixed(() => prevMapLane.stopLine.currentState == MapData.SignalLightStateType.Green || currentStopTime - startTime >= waitTime));

            isStopLight = false;
            yield break;
        }

        yield return(FixedUpdateManager.WaitUntilFixed(() => prevMapLane.stopLine.currentState == MapData.SignalLightStateType.Green)); // wait until green light

        if (isLeftTurn || isRightTurn)
        {
            yield return(FixedUpdateManager.WaitForFixedSeconds(RandomGenerator.NextFloat(1f, 2f))); // wait to creep out on turn
        }

        isStopLight = false;
    }
示例#3
0
    private IEnumerator NPCIdleIE(float duration, bool deactivate)
    {
        if (deactivate)
        {
            gameObject.SetActive(false);
        }
        yield return(FixedUpdateManager.WaitForFixedSeconds(duration));

        if (deactivate)
        {
            gameObject.SetActive(true);
        }
        EvaluateLane();
        IdleCoroutine = null;
    }
示例#4
0
    protected IEnumerator DelayChangeLane()
    {
        if (currentMapLane == null)
        {
            yield break;
        }

        if (!currentMapLane.isTrafficLane)
        {
            yield break;
        }

        if (RandomGenerator.Next(100) < 98)
        {
            yield break;
        }

        if (!laneChange)
        {
            yield break;
        }

        if (currentMapLane.leftLaneForward != null)
        {
            isLeftTurn  = true;
            isRightTurn = false;
            controller.SetNPCTurnSignal();
        }
        else if (currentMapLane.rightLaneForward != null)
        {
            isRightTurn = true;
            isLeftTurn  = false;
            controller.SetNPCTurnSignal();
        }

        yield return(FixedUpdateManager.WaitForFixedSeconds(RandomGenerator.NextFloat(1f, 3f)));

        if (currentIndex >= laneData.Count - 2)
        {
            isLeftTurn = isRightTurn = false;
            yield break;
        }

        SetLaneChange();
    }
示例#5
0
    IEnumerator WaitStopSign()
    {
        yield return(FixedUpdateManager.WaitUntilFixed(() => distanceToStopTarget <= stopLineDistance));

        isStopSign         = true;
        currentStopTime    = 0f;
        hasReachedStopSign = false;
        yield return(FixedUpdateManager.WaitUntilFixed(() => distanceToStopTarget < minTargetDistance));

        prevMapLane.stopLine.intersection.EnterStopSignQueue(controller);
        hasReachedStopSign = true;
        yield return(FixedUpdateManager.WaitForFixedSeconds(stopSignWaitTime));

        yield return(FixedUpdateManager.WaitUntilFixed(() => prevMapLane.stopLine.intersection.CheckStopSignQueue(controller)));

        hasReachedStopSign = false;
        isStopSign         = false;
    }