public override void Enter()
        {
            OverCardPicker.SizeBonus = 0;
            OverMap.SizeMult         = 0;
            CenterCount            = -1;
            CurrentCenter          = 0;
            BlockPlayerWorldViewer = true;
            ProgressSpeed          = 0.005f;
            LastNode = null;
            NextNode = null;

            NodeCount     = 0;
            NodesProgress = 1;
            SortedNodes.Clear();

            SceneObject s = GameManager.GetLevel().getCurrentScene();

            WorldCamera = (Camera3DObject)s.FindObject(typeof(Camera3DObject));

            if (WorldCamera == null)
            {
                s.ParentLevel.AddObject(WorldCamera = new Camera3DObject());
            }

            WorldCamera.RemoveTag(GameObjectTag.Update);

            foreach (CameraFlybyCenter center in s.Enumerate(typeof(CameraFlybyCenter)))
            {
                if (!SortedCenters.ContainsKey(center.CenterOrder.get()))
                {
                    SortedCenters.Add(center.CenterOrder.get(), center);
                    CenterCount = CenterCount > center.CenterOrder.get() ? CenterCount : center.CenterOrder.get();
                }
            }

            foreach (CameraFlybyNode node in s.Enumerate(typeof(CameraFlybyNode)))
            {
                if (!SortedNodes.ContainsKey(node.NodeOrder.get()))
                {
                    SortedNodes[node.NodeOrder.get()] = new List <CameraFlybyNode>();
                }
                SortedNodes[node.NodeOrder.get()].Add(node);
                NodeCount = NodeCount > node.NodeOrder.get() ? NodeCount : node.NodeOrder.get();
            }

            int i = 0;

            while (LastNode == null)
            {
                LastNode = GetNode(i);
                i++;

                if (i > NodeCount)
                {
                    return;
                }
            }

            while (NextNode == null)
            {
                NextNode = GetNode(i);
                i++;

                if (i > NodeCount)
                {
                    return;
                }
            }

            base.Enter();
        }
        public override void Update(GameTime gameTime)
        {
            FadeManager.SetFadeColor(Vector4.Zero);
            int PreviousBase = (int)NodesProgress;

            NodesProgress += gameTime.ElapsedGameTime.Milliseconds * ProgressSpeed * 60 / 1000;

            if ((int)NodesProgress > PreviousBase)
            {
                CurrentCenter++;
                while (!SortedCenters.ContainsKey(CurrentCenter))
                {
                    CurrentCenter++;
                    if (CurrentCenter > CenterCount)
                    {
                        CurrentCenter = 0;
                        if (CenterCount == -1)
                        {
                            return;
                        }
                    }
                }

                LastNode       = GetNode((int)NodesProgress);
                NodesProgress += 1;

                while (LastNode == null && NodesProgress <= NodeCount)
                {
                    LastNode       = GetNode((int)NodesProgress);
                    NodesProgress += 1;
                }

                NextNode = GetNode((int)NodesProgress);

                while (NextNode == null && NodesProgress <= NodeCount)
                {
                    NextNode       = GetNode((int)NodesProgress);
                    NodesProgress += 1;
                }
            }

            if (NextNode != null && LastNode != null)
            {
                Vector3 LastPosition   = new Vector3(LastNode.Position.X(), LastNode.Z.get(), LastNode.Position.Y());
                Vector3 NextPosition   = new Vector3(NextNode.Position.X(), NextNode.Z.get(), NextNode.Position.Y());
                Vector3 CenterPosition = new Vector3(SortedCenters[CurrentCenter].Position.X(), SortedCenters[CurrentCenter].Z.get(), SortedCenters[CurrentCenter].Position.Y());
                Vector3 PlacePosition  = LastPosition + (NextPosition - LastPosition) * (NodesProgress - (int)NodesProgress);
                WorldCamera.MyCamera.SetLookAt(PlacePosition, CenterPosition);

                float FadeA = (Math.Abs((NodesProgress - (int)NodesProgress) - 0.5f) - 0.25f) * 4;
                FadeManager.SetFadeColor(new Vector4(0, 0, 0, FadeA));
            }
            else
            {
                FadeManager.SetFadeColor(new Vector4(0, 0, 0, 1));
                WaveManager.SetState(FadeInState.self);
                FadeInState.SetTargetState(ChooseStartState.self);
            }

            base.Update(gameTime);
        }