public void HandleSceneAddButton(SceneData sceneData = null)
        {
            SideScenePanel panel = new SideScenePanel();

            panel.Click  += OnScenePanelClick;
            panel.Delete += OnScenePanelDelete;

            TimeSpan coursorTime = _timeLine.TimeLineEngine.Time;
            TimeSpan duration    = new TimeSpan(0, 0, 10);

            if (sceneData != null)
            {
                duration = sceneData.Duration;
            }
            foreach (SideScenePanel scenePanel in _scenePanels)
            {
                if (coursorTime >= scenePanel.Scene.Start && coursorTime < scenePanel.Scene.End)
                {
                    EditorUtility.DisplayDialog("Error!", "You cannot add scene on the occupied time.", "Ok");
                    return;
                }
                if (coursorTime < scenePanel.Scene.Start && coursorTime + duration > scenePanel.Scene.Start)
                {
                    TimeSpan gap = scenePanel.Scene.Start - coursorTime;
                    if (gap < duration)
                    {
                        duration = gap;
                    }
                }
            }
            if (coursorTime + duration > _timeLine.TimeLineEngine.Duration)
            {
                duration = _timeLine.TimeLineEngine.Duration - coursorTime;
            }
            if (sceneData == null)
            {
                panel.Scene.Color = ExtensionMethods.ChangeColorBrightness(Color.gray, 0.7f);
            }
            else
            {
                panel.Scene.AssignWithoutTime(sceneData);
            }

            panel.Scene.Start = coursorTime;
            panel.Scene.End   = coursorTime + duration;
            _scenePanels.Add(panel);
            _scenesLine.AddLabel(panel.Scene);
        }
        /// <summary> Load data from given asset data.</summary>
        /// <param name="data">Data to be loaded.</param>
        public void LoadData(CutsceneAsset data)
        {
            if (data == null)
            {
                return;
            }
            _enableSave = false;


            _baseData      = null;
            _selectedScene = null;
            _scenePanels.Clear();
            _scenesLine.ClearLabels();
            _timeLine.ClearLabels();
            _soundLine.AudioClip          = null;
            _soundLine.AudioClipStartTime = TimeSpan.Zero;


            _baseData = data;

            _timeLine.Zoom = _baseData.Zoom;

            _soundLine.AudioClip          = _baseData.AudioClip;
            _soundLine.AudioClipStartTime = new TimeSpan(_baseData.AudioClipStartTimeTicks);

            foreach (SceneData scene in _baseData.Scenes)
            {
                SideScenePanel panel = new SideScenePanel(scene);
                panel.Click  += OnScenePanelClick;
                panel.Delete += OnScenePanelDelete;
                _scenePanels.Add(panel);
                _scenesLine.AddLabel(panel.Scene);
            }
            _timeLine.SourceListToTimeLabels(_baseData.TimeLabelsData);

            _timelinePanelScrollPos = _baseData.ScrollPos;
            _enableSave             = true;
            initialized             = true;

            if (EditorApplication.isPlaying)
            {
                bool             cutsceneEngineFound = false;
                CutsceneEngine[] engines             = FindObjectsOfType <CutsceneEngine>();
                foreach (CutsceneEngine engine in engines)
                {
                    if (engine.Cutscene.GetInstanceID() == _baseData.GetInstanceID())
                    {
                        _timeLine.AssignExternalTimeFlowEngine(engine.TimeEngine);
                        cutsceneEngineFound = true;
                        break;
                    }
                }
                if (!cutsceneEngineFound)
                {
                    _timeLine.CreateNewEngine(new TimeSpan(_baseData.TimeTicks), new TimeSpan(_baseData.DurationTicks));
                }
            }
            else
            {
                _timeLine.TimeLineEngine.SetTime(new TimeSpan(_baseData.TimeTicks));
                _timeLine.TimeLineEngine.Duration = new TimeSpan(_baseData.DurationTicks);
            }
        }