Exemplo n.º 1
0
    IEnumerator MoveStage(int targetStepIndex)
    {
        FireSystemStep targetStep = Steps[targetStepIndex];
        float          time       = Time.time - _startTime;

        SendStateDataToClients(_startTime + targetStep.StartTime, _startTime + targetStep.OverallStageTime, ZoneState.Movihg);

        float fromScale = transform.localScale.x;

        while (time <= targetStep.OverallStageTime)
        {
            var normalizedTime = Mathf.Clamp01((time - targetStep.StartTime) / targetStep.Duration);
            var scaleToSet     = Mathf.Lerp(fromScale, targetStep.Scale, normalizedTime);

            if (transform.localScale.x != scaleToSet)
            {
                transform.localScale = new Vector3(scaleToSet, transform.localScale.y, scaleToSet);
                RpcSetScale(scaleToSet);
            }

            yield return(null);

            time = Time.time - _startTime;
        }

        transform.localScale = new Vector3(targetStep.Scale, transform.localScale.y, targetStep.Scale);
        RpcSetScale(targetStep.Scale);

        StartNextStep();
    }
Exemplo n.º 2
0
    IEnumerator WaitStage(int targetStepIndex)
    {
        FireSystemStep targetStep = Steps[targetStepIndex];
        float          time       = Time.time - _startTime;

        //to do спорно мб переписить
        var delay = targetStep.StartTime;

        if (targetStepIndex > 0)
        {
            delay -= Steps[targetStepIndex - 1].OverallStageTime;
        }

        SendStateDataToClients(_startStepTime, _startStepTime + delay, ZoneState.Wait);

        bool shouldDoAnnounce = true;

        while (time < targetStep.StartTime)
        {
            if (shouldDoAnnounce && targetStep.StartTime <= time + AnnounceInterval)
            {
                AnnounceFire();
                shouldDoAnnounce = false;
            }

            yield return(new WaitForSecondsRealtime(0.5f));

            time = Time.time - _startTime;
        }

        StartCoroutine(MoveStage(targetStepIndex));
    }