void DrawConditionLine(float xOffset, float xScrollIndex, TimelineTrack timeline, float yOffset)
        {
            foreach (var tack in timeline.tackPoints_)
            {
                if (!tack.IsExistTack_)
                {
                    continue;
                }

                var start = tack.start_;
                var span  = tack.span_;

                var startPos = xOffset + xScrollIndex + (start * WindowSettings.TACK_FRAME_WIDTH);
                var length   = span * WindowSettings.TACK_FRAME_WIDTH;
                var tex      = tack.GetColorTex();

                // draw background.
                if (tack.IsActive())
                {
                    var condtionLineBgRect = new Rect(startPos, yOffset - 1, length, WindowSettings.CONDITION_INSPECTOR_CONDITIONLINE_HEIGHT + 2);
                    GUI.DrawTexture(condtionLineBgRect, WindowSettings.conditionLineBgTex);
                }
                else
                {
                    var condtionLineBgRect = new Rect(startPos, yOffset + 1, length, WindowSettings.CONDITION_INSPECTOR_CONDITIONLINE_HEIGHT - 2);
                    GUI.DrawTexture(condtionLineBgRect, WindowSettings.conditionLineBgTex);
                }

                // fill color.
                var condtionLineRect = new Rect(startPos + 1, yOffset, length - 2, WindowSettings.CONDITION_INSPECTOR_CONDITIONLINE_HEIGHT);
                GUI.DrawTexture(condtionLineRect, tex);
            }
        }
        Rect DrawConditionInspector(float xScrollIndex, float yIndex, float inspectorWidth)
        {
            var width  = inspectorWidth - WindowSettings.TIMELINE_CONDITIONBOX_SPAN;
            var height = yIndex;

            var assumedHeight = height
                                + WindowSettings.CONDITION_INSPECTOR_FRAMECOUNT_HEIGHT
                                + WindowSettings.CONDITION_INSPECTOR_FRAMELINE_HEIGHT
                                + AssumeConditionLineHeight();

            GUI.BeginGroup(new Rect(WindowSettings.TIMELINE_CONDITIONBOX_SPAN, height, width, assumedHeight));
            {
                var internalHeight = 0f;

                // count & frame in header.
                {
                    TimelineTrack.DrawFrameBG(xScrollIndex, internalHeight, width, WindowSettings.CONDITION_INSPECTOR_FRAMELINE_HEIGHT, true);
                    internalHeight = internalHeight + WindowSettings.CONDITION_INSPECTOR_FRAMECOUNT_HEIGHT + WindowSettings.CONDITION_INSPECTOR_FRAMELINE_HEIGHT;
                }
                if (HasValidScore())
                {
                    var currentScore = GetActiveScore();
                    var timelines    = currentScore.timelineTracks_;
                    foreach (var timeline in timelines)
                    {
                        if (!timeline.IsExistTimeline_)
                        {
                            continue;
                        }
                        internalHeight = internalHeight + WindowSettings.CONDITION_INSPECTOR_CONDITIONLINE_SPAN;

                        DrawConditionLine(0, xScrollIndex, timeline, internalHeight);
                        internalHeight = internalHeight + WindowSettings.CONDITION_INSPECTOR_CONDITIONLINE_HEIGHT;
                    }

                    if (timelines.Any())
                    {
                        // add footer.
                        internalHeight = internalHeight + WindowSettings.CONDITION_INSPECTOR_CONDITIONLINE_SPAN;
                    }
                }
            }
            GUI.EndGroup();

            return(new Rect(0, 0, inspectorWidth, assumedHeight));
        }
Пример #3
0
            void UpdateTimelineTrackTitle(TimelineTrack timelineTrack)
            {
                //var newTitle = EditorGUILayout.TextField("title", timelineTrack.title_);
                //var charManager = EditorGUILayout.ObjectField("charManager", timelineTrack.charManager, typeof(JMCharManager),true);

                TimelineType timelineType = (TimelineType)timelineTrack.timelineType_;

                EditorGUILayout.LabelField("type : " + timelineType.ToString());
                //if (newTitle != timelineTrack.title_)
                //{
                //	timelineTrack.BeforeSave();
                //	timelineTrack.title_ = newTitle;
                //	timelineTrack.Save();
                //}

                //if (charManager != timelineTrack.charManager)
                //{
                //	timelineTrack.charManager = charManager as JMCharManager;
                //}
            }
Пример #4
0
        //スコアファイルを単体JSONに分ける
        ScoreComponent LoadScore(Dictionary <string, object> deserialized)
        {
            var scoreTimelines   = deserialized[TimeFlowShikiSettings.TIMEFLOWSHIKI_DATA_SCORE_TIMELINES] as List <object>;
            var currentTimelines = new List <TimelineTrack>();

            foreach (var scoreTimeline in scoreTimelines)
            {
                var scoreTimelineDict = scoreTimeline as Dictionary <string, object>;

                var timelineTacks = scoreTimelineDict[TimeFlowShikiSettings.TIMEFLOWSHIKI_DATA_TIMELINE_TACKS] as List <object>;
                var currentTacks  = new List <TackPoint>();
                foreach (var timelineTack in timelineTacks)
                {
                    var timelineTacksDict = timelineTack as Dictionary <string, object>;
                    var newTack           = new TackPoint(currentTacks.Count, timelineTacksDict);
                    currentTacks.Add(newTack);
                }
                var newTimeline = new TimelineTrack(currentTimelines.Count, scoreTimelineDict, currentTacks);
                currentTimelines.Add(newTimeline);
            }
            var newScore = new ScoreComponent(deserialized, currentTimelines);

            return(newScore);
        }
Пример #5
0
        void Emit(OnTrackEvent onTrackEvent)
        {
            var type = onTrackEvent.eventType;

            // tack events.
            switch (type)
            {
            case OnTrackEvent.EventType.EVENT_UNSELECTED: {
                manipulateTargets = new ManipulateTargets(new List <string>());

                Undo.RecordObject(this, "Unselect");

                var activeAuto = GetActiveScore();
                activeAuto.DeactivateAllObjects();
                activeAuto.SetScoreInspector();
                parent_.RepaintAllWindow();
                return;
            }

            case OnTrackEvent.EventType.EVENT_OBJECT_SELECTED: {
                manipulateTargets = new ManipulateTargets(new List <string> {
                        onTrackEvent.activeObjectId
                    });

                var activeAuto = GetActiveScore();

                Undo.RecordObject(this, "Select");
                activeAuto.ActivateObjectsAndDeactivateOthers(manipulateTargets.activeObjectIds);
                parent_.RepaintAllWindow();
                return;
            }

            //各種タイムライン
            case OnTrackEvent.EventType.EVENT_SCORE_ADDTIMELINE_POS:
            case OnTrackEvent.EventType.EVENT_SCORE_ADDTIMELINE_TRANSFORM:
            case OnTrackEvent.EventType.EVENT_SCORE_ADDTIMELINE_MOVE:
            case OnTrackEvent.EventType.EVENT_SCORE_ADDTIMELINE_COLOR:
            case OnTrackEvent.EventType.EVENT_SCORE_ADDTIMELINE_EFFECT:
            case OnTrackEvent.EventType.EVENT_SCORE_ADDTIMELINE_PASSIVE: {
                int timelineType = 0;
                //各種タイムライン
                switch (type)
                {
                case OnTrackEvent.EventType.EVENT_SCORE_ADDTIMELINE_POS:
                    timelineType = (int)TimelineType.TL_POS; break;

                case OnTrackEvent.EventType.EVENT_SCORE_ADDTIMELINE_TRANSFORM:
                    timelineType = (int)TimelineType.TL_TRANSFORM; break;

                case OnTrackEvent.EventType.EVENT_SCORE_ADDTIMELINE_MOVE:
                    timelineType = (int)TimelineType.TL_MOVE; break;

                case OnTrackEvent.EventType.EVENT_SCORE_ADDTIMELINE_COLOR:
                    timelineType = (int)TimelineType.TL_COLOR; break;

                case OnTrackEvent.EventType.EVENT_SCORE_ADDTIMELINE_EFFECT:
                    timelineType = (int)TimelineType.TL_EFFECT; break;

                case OnTrackEvent.EventType.EVENT_SCORE_ADDTIMELINE_PASSIVE:
                    timelineType = (int)TimelineType.TL_PASSIVE; break;
                }

                var activeAuto    = GetActiveScore();
                var tackPoints    = new List <TackPoint>();
                var newTimeline   = new TimelineTrack(activeAuto.timelineTracks_.Count, timelineType, tackPoints);
                var newTimelineId = newTimeline.timelineId_;
                Undo.RecordObject(this, "Add Timeline");

                //activeAuto.timelineTracks.Add(newTimeline);

                string id = MethodBase.GetCurrentMethod().Name;

                Action action = () => {
                    activeAuto.timelineTracks_.Add(newTimeline);
                };

                Action undo = () => {
                    activeAuto.DeleteObjectById(newTimelineId, false);
                };

                ARIMotionMainWindow.scoreCmd_.Do(new MotionCommand(id, action, undo));

                parent_.NeedSave();
                return;
            }

            case OnTrackEvent.EventType.EVENT_SCORE_BEFORESAVE: {
                Undo.RecordObject(this, "Update Score Title");
                return;
            }

            case OnTrackEvent.EventType.EVENT_SCORE_SAVE: {
                parent_.NeedSave();
                return;
            }

            /*
             *      timeline events.
             */
            case OnTrackEvent.EventType.EVENT_TIMELINE_ADDTACK: {
                eventStacks_.Add(onTrackEvent.Copy());
                return;
            }


            case OnTrackEvent.EventType.EVENT_TIMELINE_PASTETACK: {
                eventStacks_.Add(onTrackEvent.Copy());
                return;
            }

            case OnTrackEvent.EventType.EVENT_TIMELINE_DELETE: {
                var targetTimelineId = onTrackEvent.activeObjectId;
                var activeAuto       = GetActiveScore();


                Undo.RecordObject(this, "Delete Timeline");

                string id = MethodBase.GetCurrentMethod().Name;

                Action action = () => {
                    activeAuto.DeleteObjectById(targetTimelineId, false);
                };

                Action undo = () => {
                    activeAuto.DeleteObjectById(targetTimelineId, true);
                };

                ARIMotionMainWindow.scoreCmd_.Do(new MotionCommand(id, action, undo));


                //activeAuto.DeleteObjectById(targetTimelineId);
                parent_.NeedSave();
                return;
            }

            case OnTrackEvent.EventType.EVENT_TIMELINE_BEFORESAVE: {
                Undo.RecordObject(this, "Update Timeline Title");
                return;
            }

            case OnTrackEvent.EventType.EVENT_TIMELINE_SAVE: {
                parent_.NeedSave();
                return;
            }


            /*
             *      tack events.
             */
            case OnTrackEvent.EventType.EVENT_TACK_MOVING: {
                var movingTackId = onTrackEvent.activeObjectId;

                var activeAuto = GetActiveScore();

                activeAuto.SetMovingTackToTimelimes(movingTackId);
                break;
            }

            case OnTrackEvent.EventType.EVENT_TACK_MOVED: {
                Undo.RecordObject(this, "Move Tack");

                return;
            }

            case OnTrackEvent.EventType.EVENT_TACK_MOVED_AFTER: {
                var targetTackId = onTrackEvent.activeObjectId;

                var activeAuto          = GetActiveScore();
                var activeTimelineIndex = activeAuto.GetTackContainedTimelineIndex(targetTackId);
                if (0 <= activeTimelineIndex)
                {
                    //タックの移動後処理
                    activeAuto.timelineTracks_[activeTimelineIndex].UpdateByTackMoved(targetTackId);

                    //Repaint();
                    parent_.NeedSave();
                }
                return;
            }

            case OnTrackEvent.EventType.EVENT_TACK_DELETED: {
                var targetTackId = onTrackEvent.activeObjectId;
                var activeAuto   = GetActiveScore();

                Undo.RecordObject(this, "Delete Tack");


                string id = MethodBase.GetCurrentMethod().Name;

                Action action = () => {
                    activeAuto.DeleteObjectById(targetTackId, false);
                    activeAuto.SqueezeTack();
                };

                Action undo = () => {
                    activeAuto.DeleteObjectById(targetTackId, true);
                    activeAuto.SqueezeTack();
                };

                ARIMotionMainWindow.scoreCmd_.Do(new MotionCommand(id, action, undo));

                //Repaint();
                parent_.NeedSave();
                return;
            }

            case OnTrackEvent.EventType.EVENT_TACK_COPY: {
                var targetTackId = onTrackEvent.activeObjectId;
                var activeAuto   = GetActiveScore();
                clipTack_ = activeAuto.GetTackById(targetTackId);
                return;
            }


            case OnTrackEvent.EventType.EVENT_TACK_BEFORESAVE: {
                Undo.RecordObject(this, "Update Tack Title");
                return;
            }

            case OnTrackEvent.EventType.EVENT_TACK_SAVE: {
                parent_.NeedSave();
                return;
            }


            case OnTrackEvent.EventType.EVENT_TACK_CHANGE: {
                parent_.NeedSave();
                parent_.subWindow_.SetupPartsData(false);                        //サブウインドウにも反映させる
                parent_.RepaintAllWindow();
                return;
            }


            default: {
                //親に投げる
                ParentEmit(onTrackEvent);
                //Debug.LogError("no match type:" + type);
                break;
            }
            }
        }
Пример #6
0
        //マウス入力イベント設定
        void HandlingMouseEvent()
        {
            var repaint  = false;
            var useEvent = false;

            switch (Event.current.type)
            {
            // mouse event handling.
            case EventType.MouseDown: {
                var touchedFrameCount = TimelineTrack.GetFrameOnTimelineFromAbsolutePosX(scrollPos_ + (Event.current.mousePosition.x - WindowSettings.TIMELINE_CONDITIONBOX_SPAN));
                if (touchedFrameCount < 0)
                {
                    touchedFrameCount = 0;
                }
                selectedPos_   = touchedFrameCount * WindowSettings.TACK_FRAME_WIDTH;
                selectedFrame_ = touchedFrameCount;
                repaint        = true;

                Emit(new OnTrackEvent(OnTrackEvent.EventType.EVENT_UNSELECTED, null));

                useEvent = true;
                break;
            }

            case EventType.ContextClick: {
                ShowContextMenu();
                useEvent = true;
                break;
            }

            case EventType.MouseUp: {
                // right click.
                if (Event.current.button == 1)
                {
                    ShowContextMenu();
                }
                else
                {
                    var touchedFrameCount = TimelineTrack.GetFrameOnTimelineFromAbsolutePosX(scrollPos_ + (Event.current.mousePosition.x - WindowSettings.TIMELINE_CONDITIONBOX_SPAN));
                    if (touchedFrameCount < 0)
                    {
                        touchedFrameCount = 0;
                    }
                    selectedPos_   = touchedFrameCount * WindowSettings.TACK_FRAME_WIDTH;
                    selectedFrame_ = touchedFrameCount;
                    repaint        = true;
                }

                useEvent = true;

                break;
            }

            case EventType.MouseDrag: {
                var pos = scrollPos_ + (Event.current.mousePosition.x - WindowSettings.TIMELINE_CONDITIONBOX_SPAN);
                if (pos < 0)
                {
                    pos = 0;
                }
                selectedPos_   = pos - ((WindowSettings.TACK_FRAME_WIDTH / 2f) - 1f);
                selectedFrame_ = TimelineTrack.GetFrameOnTimelineFromAbsolutePosX(pos);

                FocusToFrame(selectedFrame_);

                repaint  = true;
                useEvent = true;
                break;
            }

            // scroll event handling.
            case EventType.ScrollWheel: {
                if (0 != Event.current.delta.x)
                {
                    scrollPos_ = scrollPos_ + (Event.current.delta.x * 2);
                    if (scrollPos_ < 0)
                    {
                        scrollPos_ = 0;
                    }

                    repaint = true;
                }
                useEvent = true;
                break;
            }

            // key event handling.
            case EventType.KeyDown: {
                switch (Event.current.keyCode)
                {
                case KeyCode.LeftArrow: {
                    if (manipulateTargets.activeObjectIds.Count == 0)
                    {
                        selectedFrame_ = selectedFrame_ - 1;
                        if (selectedFrame_ < 0)
                        {
                            selectedFrame_ = 0;
                        }
                        selectedPos_ = selectedFrame_ * WindowSettings.TACK_FRAME_WIDTH;
                        repaint      = true;

                        FocusToFrame(selectedFrame_);
                    }
                    manipulateEvents_.keyLeft = true;
                    useEvent = true;
                    break;
                }

                case KeyCode.RightArrow: {
                    if (manipulateTargets.activeObjectIds.Count == 0)
                    {
                        selectedFrame_ = selectedFrame_ + 1;
                        selectedPos_   = selectedFrame_ * WindowSettings.TACK_FRAME_WIDTH;
                        repaint        = true;

                        FocusToFrame(selectedFrame_);
                    }
                    manipulateEvents_.keyRight = true;
                    useEvent = true;
                    break;
                }

                case KeyCode.UpArrow: {
                    manipulateEvents_.keyUp = true;
                    useEvent = true;
                    break;
                }

                case KeyCode.DownArrow: {
                    manipulateEvents_.keyDown = true;
                    useEvent = true;
                    break;
                }

                case KeyCode.S:
                    parent_.SaveData2(true);
                    break;

                case KeyCode.L:
                    parent_.ReloadSavedData();
                    break;

                case KeyCode.Z:
                    ARIMotionMainWindow.scoreCmd_.Undo();                                    //Undo
                    repaint = true;
                    break;

                case KeyCode.Y:
                    ARIMotionMainWindow.scoreCmd_.Redo();                                    //Redo
                    repaint = true;
                    break;
                    //case KeyCode.Keypad1:
                    //case KeyCode.Keypad2:
                    //case KeyCode.Keypad3:
                    //case KeyCode.Keypad4:
                    //case KeyCode.Keypad5:
                    //case KeyCode.Keypad6:
                    //case KeyCode.Keypad7:
                    //case KeyCode.Keypad8:
                    //case KeyCode.Keypad9:
                    //case KeyCode.Keypad0:
                    //	{
                    //		manipulateEvents_.SetKeyNum(Event.current.keyCode);
                    //		useEvent = true;
                    //		break;
                    //	}
                }
                break;
            }
            }

            // update cursor pos
            cursorPos_ = selectedPos_ - scrollPos_;

            if (repaint)
            {
                //HandleUtility.Repaint();
                parent_.RepaintAllWindow();
                //repaint = false;
            }

            if (eventStacks_.Any())
            {
                foreach (var onTrackEvent in eventStacks_)
                {
                    EmitAfterDraw(onTrackEvent);
                }
                eventStacks_.Clear();
                parent_.NeedSave();
            }

            if (useEvent)
            {
                Event.current.Use();
            }
        }
Пример #7
0
        //キー入力によるスパンの変更
        void ChangeStartAll(bool isForwerd)
        {
            if (!HasValidScore())
            {
                return;
            }

            var score = GetActiveScore();

            if (manipulateTargets.activeObjectIds.Any())
            {
                if (manipulateTargets.activeObjectIds.Count == 1)
                {
                    var activeId = manipulateTargets.activeObjectIds[0];
                    List <TackPoint> tackPoints = null;
                    if (IsTimelineId(activeId))
                    {
                        TimelineTrack timelineTrack = score.TimelineById(activeId);
                        tackPoints = timelineTrack.tackPoints_;
                    }
                    else if (IsTackId(activeId))
                    {
                        var tack = score.TackById(activeId);
                        tackPoints = score.TimelinesByType((TimelineType)tack.timelineType_);
                    }

                    if (tackPoints != null)
                    {
                        Undo.RecordObject(this, "ChangeSpan");

                        List <Action> cmdDo   = new List <Action>();
                        List <Action> cmdUndo = new List <Action>();
                        string        id      = MethodBase.GetCurrentMethod().Name;

                        foreach (var item in tackPoints)
                        {
                            TackPoint tack     = item;
                            int       newStart = (isForwerd)
                                                                ? item.start_ - 1
                                                                : item.start_ + 1;

                            int lastStart = item.start_;


                            Action action = () => {
                                tack.UpdatePos(newStart, tack.span_);
                                score.SqueezeTack();
                            };

                            Action undo = () => {
                                tack.UpdatePos(lastStart, tack.span_);
                                score.SqueezeTack();
                            };

                            //コマンドPos
                            cmdDo.Add(action);
                            cmdUndo.Add(undo);
                        }

                        cmdDo.Add(() => score.SqueezeTack());
                        cmdUndo.Add(() => score.SqueezeTack());

                        if (cmdDo.Any())
                        {
                            ARIMotionMainWindow.tackCmd_.Do(new MotionCommand(id,
                                                                              () => { foreach (var cmd in cmdDo)
                                                                                      {
                                                                                          cmd();
                                                                                      }
                                                                              },
                                                                              () => { foreach (var cmd in cmdUndo)
                                                                                      {
                                                                                          cmd();
                                                                                      }
                                                                              }));
                        }

                        Emit(new OnTrackEvent(OnTrackEvent.EventType.EVENT_TACK_SAVE, null));
                        parent_.RepaintAllWindow();
                    }
                }
                else
                {
                    // select multiple objects.
                }
            }
        }
Пример #8
0
 public void UpdateTimelineTrack(TimelineTrack timelineTrack)
 {
     this.timelineTrack = timelineTrack;
 }