예제 #1
0
        void UpdateLayout()
        {
            if (!layoutRunning)
            {
                return;
            }

            // enumerator may not exist yet
            if (layoutEnumerator == null)
            {
                return;
            }

            layoutTimer.Reset();
            layoutTimer.Start();
            bool generatorActive;
            var  parms = Settings.Instance.layoutTweenParameters;

            do
            {
                generatorActive = layoutEnumerator.MoveNext();
            } while (generatorActive && (layoutTimer.ElapsedTicks / (float)Stopwatch.Frequency) < parms.maxFrameDuration);

            var  positions         = layoutEnumerator.Current as Dictionary <T, Vector2>;
            bool gotFinalPositions = !generatorActive;

            if (!generatorActive)
            {
                layoutRunning = false;
            }

            var time = EditorApplication.timeSinceStartup;

            if (gotFinalPositions || time > nextVertexPosTweenUpdate)
            {
                nextVertexPosTweenUpdate = (float)time + parms.vertexPosTweenUpdateInterval;
                if (positions != null)
                {
                    foreach (var pair in positions)
                    {
                        VertexData <T, P> vData = null;
                        if (graph.VerticesData.TryGetValue(pair.Key, out vData))
                        {
                            T   tweenOwner = pair.Key;
                            var evalFunc   = TweenUtil.GetCombinedEasing(tweenOwner, graphPosTweens, vData.pos, pair.Value);
                            graphPosTweens.Replace(tweenOwner, new Tween <Vector2>(v => vData.pos = v, parms.vertexPosTweenDuration, evalFunc));
                        }
                    }
                }
            }
        }