Пример #1
0
        public override void StartKinetic(VisualPayload payload, Func <float, float> translateTimeToEffectProportion)
        {
            var labelVis = payload.VisualData.Bound.GetComponent <LabelVisualizer>();

            var startValue            = StartValue.GetFirstValue(payload.Data);
            var endValue              = EndValue.GetFirstValue(payload.Data);
            var transitionTimeInverse = 1f / TransitionTime.GetFirstValue(payload.Data);;
            var formatString          = FormatString.GetFirstValue(payload.Data);
            var startTime             = Time.time;

            var bound = payload.VisualData.Bound.CreateDependingBound("Lerp Value");

            bound.transform.parent = payload.VisualData.Bound.transform.parent;
            payload.VisualData.Bound.transform.parent = bound.transform;

            var valueSatellite =
                bound.gameObject.AddComponent <SetLabelSatellite>();

            valueSatellite.LabelVis = labelVis;

            var newPayload = new VisualPayload(payload.Data, new VisualDescription(bound));


            valueSatellite.UpdateFunc = (label) =>
            {
                float proportion = (Time.time - startTime) * transitionTimeInverse;

                if (proportion >= 1)
                {
                    label.Text = string.Format(formatString, endValue);

                    valueSatellite.Cleanup();
                    return;
                }

                proportion = translateTimeToEffectProportion(proportion);

                var currentValue = Mathf.Lerp(startValue, endValue, proportion);

                label.Text = string.Format(formatString, currentValue);
            };

            valueSatellite.CleanupFunc = (label) =>
            {
                JobManager.Instance.StartJob(
                    Finished.Transmit(newPayload), jobName: "Kinetic Finished", startImmediately: true,
                    maxExecutionsPerFrame: 1);
            };

            //throw new NotImplementedException();
        }