Пример #1
0
        public override void Check(
            CutsceneEditor editor,
            ErrorManager manager,
            int tokenIndex,
            Token token,
            object value,
            int fieldIndex,
            FieldInfo info)
        {
            var reference = value as Reference;
            var player    = editor.Player;

            if (reference == null || player == null)
            {
                return;
            }
            var id = reference.Id;

            if (Resolve(reference, editor.Cutscene, player))
            {
                return;
            }
            var msg = string.Format("Couldn't resolve reference of id {0} in field {1}.", id, info.Name);

            manager.NotifyError(tokenIndex, fieldIndex, ErrorLevel.High, msg, ShiroiStyles.NullSupportedMessage);
        }
Пример #2
0
        public override void Check(
            CutsceneEditor editor,
            ErrorManager manager,
            int tokenIndex,
            Token token,
            object value,
            int fieldIndex,
            FieldInfo info)
        {
            if (Attribute.GetCustomAttribute(info, typeof(EmptyStringSupportedAttribute)) != null)
            {
                return;
            }
            var s = value as string;

            if (s == null)
            {
                return;
            }
            if (!string.IsNullOrEmpty(s))
            {
                return;
            }
            var msg = string.Format("Field {0} has an empty string.", info.Name);

            manager.NotifyError(
                tokenIndex,
                fieldIndex,
                ErrorLevel.Medium,
                msg,
                "Please assign it or annotate the field as EmptyStringSupported.");
        }
Пример #3
0
        public override void Check(
            CutsceneEditor editor,
            ErrorManager manager,
            int tokenIndex,
            Token token,
            object value,
            int fieldIndex,
            FieldInfo info)
        {
            if (Attribute.GetCustomAttribute(info, typeof(NullSupportedAttribute)) != null)
            {
                return;
            }
            var reference = value as FutureReference;

            if (reference == null)
            {
                return;
            }
            var id = reference.Id;

            if (editor.Cutscene.FutureManager.GetFuture(id) != null)
            {
                return;
            }
            var msg = string.Format("Couldn't find future of id {0} in field {1}.", id, info.Name);

            manager.NotifyError(tokenIndex, fieldIndex, ErrorLevel.High, msg, ShiroiStyles.NullSupportedMessage);
        }
Пример #4
0
    static void Init()
    {
        // Get existing open window or if none, make a new one:
        CutsceneEditor window = (CutsceneEditor)EditorWindow.GetWindow(typeof(CutsceneEditor));

        window.Show();
    }
Пример #5
0
        public static Cutscene CreateCutscene()
        {
            var cutscene = Cutscene.Create();

            CutsceneEditor.ShowWindow(cutscene);
            Selection.activeObject = cutscene;
            return(cutscene);
        }
Пример #6
0
 public override void Draw(CutsceneEditor editor, CutscenePlayer player, Cutscene cutscene, Rect rect, int tokenIndex, GUIContent name, string value, Type valueType, FieldInfo fieldInfo, Setter setter)
 {
     if (value == null)
     {
         value = string.Empty;
     }
     setter(EditorGUI.TextField(rect, name, value));
 }
Пример #7
0
        public override bool Open()
        {
            Loader = new CutsceneLoader(file);
            CutsceneEditor editor = new CutsceneEditor(this);

            editor.Show();
            return(true);
        }
Пример #8
0
        public override void OnInspectorGUI()
        {
            cutscene = (Cutscene)target;

            var e = Event.current;

            GUI.skin.GetStyle("label").richText = true;

            if (e.rawType == EventType.MouseDown && e.button == 0)               //generic undo
            {
                Undo.RegisterFullObjectHierarchyUndo(cutscene.groupsRoot.gameObject, "Cutscene Inspector");
                Undo.RecordObject(cutscene, "Cutscene Inspector");
                willDirty = true;
            }

            if (e.rawType == EventType.MouseUp && e.button == 0 || e.rawType == EventType.KeyUp)
            {
                willDirty = true;
                if (CutsceneUtility.selectedObject != null && CutsceneUtility.selectedObject.startTime <= cutscene.currentTime)
                {
                    willResample = true;
                }
            }

            GUILayout.Space(5);
            if (GUILayout.Button("EDIT IN SLATE"))
            {
                CutsceneEditor.ShowWindow(cutscene);
            }
            GUILayout.Space(5);

            DoCutsceneInspector();
            DoSelectionInspector();


            if (willDirty)
            {
                willDirty = false;
                EditorUtility.SetDirty(cutscene);
                if (CutsceneUtility.selectedObject as UnityEngine.Object != null)
                {
                    EditorUtility.SetDirty((UnityEngine.Object)CutsceneUtility.selectedObject);
                }
            }

            if (willResample)              //resample after the changes on fresh gui pass
            {
                willResample = false;
                //delaycall so that other gui controls are finalized before resample.
                EditorApplication.delayCall += () => { if (cutscene != null)
                                                       {
                                                           cutscene.ReSample();
                                                       }
                };
            }

            Repaint();
        }
Пример #9
0
    public CutsceneTimeline(CutsceneEditor ed)
    {
        this.ed = ed;

        navigation    = new CutsceneNavigation(ed);
        tracksView    = new CutsceneTracksView(ed);
        trackControls = new CutsceneTrackControls(ed);
        trackInfo     = new CutsceneTrackInfo(ed);
    }
Пример #10
0
 public TokenList(CutsceneEditor editor)
 {
     this.editor = editor;
     states      = new[] {
         new TokenStateTuple(EventType.MouseDown, OnMouseDown),
         new TokenStateTuple(EventType.MouseUp, OnMouseUp),
         new TokenStateTuple(EventType.MouseDrag, OnMouseDrag),
         new TokenStateTuple(EventType.KeyDown, OnKeyDown),
     };
 }
Пример #11
0
 protected virtual void InvokeOnEndErrorChecking(CutsceneEditor editor)
 {
     foreach (var checker in ErrorCheckers.Checkers)
     {
         var listener = checker as IOnEndCheckListener;
         if (listener != null)
         {
             listener.OnEnd(this, editor);
         }
     }
 }
Пример #12
0
 private void InvokeOnBeginErrorChecking(CutsceneEditor editor)
 {
     foreach (var checker in ErrorCheckers.Checkers)
     {
         var listener = checker as IOnBeginCheckListener;
         if (listener != null)
         {
             listener.OnBegin(this, editor);
         }
     }
 }
Пример #13
0
 public override void Draw(CutsceneEditor editor, CutscenePlayer player, Cutscene cutscene, Rect rect,
                           int tokenIndex, GUIContent name, FutureReference <T> value, Type valueType, FieldInfo fieldInfo,
                           Setter setter)
 {
     if (value == null)
     {
         value = new FutureReference <T>();
     }
     value.Id = DrawFuture(cutscene, tokenIndex, rect, name, value.Id);
     setter(value);
 }
Пример #14
0
        public override void Check(CutsceneEditor editor, ErrorManager manager, int tokenIndex, Token token, object value, int fieldIndex, FieldInfo info)
        {
            var cutscene = editor.Cutscene;

            foreach (var future in cutscene.FutureManager.Futures)
            {
                var provider = future.Provider;
                if (provider >= cutscene.Count || provider < 0)
                {
                    var msg = string.Format("Future {0}'s provider ({1}) doesn't exist!", future, provider);
                    manager.NotifyError(tokenIndex, fieldIndex, ErrorLevel.High, msg);
                }
            }
        }
Пример #15
0
 public override void Check(
     CutsceneEditor editor,
     ErrorManager manager,
     int tokenIndex,
     Token token,
     object value,
     int fieldIndex,
     FieldInfo info)
 {
     if (!(value is Reference) && !(value is FutureReference))
     {
         return;
     }
     Increment(ReferenceUtility.GetID(value));
 }
Пример #16
0
        public void DrawErrors(CutsceneEditor editor)
        {
            InvokeOnBeginErrorChecking(editor);
            ErrorCheckers.CheckErrors(editor, errors);
            InvokeOnEndErrorChecking(editor);
            var cutscene    = editor.Cutscene;
            var totalErrors = errors.Count;

            if (totalErrors <= 0)
            {
                return;
            }
            var max = (from message in errors select message.Level).Max();

            ShowErrors = GUILayout.Toggle(ShowErrors, GetErrorContent(totalErrors, max),
                                          ShiroiStyles.GetErrorStyle(max), GUILayout.MinHeight(ShiroiStyles.SingleLineHeight * 2));
            if (!ShowErrors)
            {
                GUILayout.Space(ShiroiStyles.SpaceHeight);
                return;
            }
            var init = GUI.backgroundColor;

            foreach (var errorMessage in errors)
            {
                var  lines  = errorMessage.Lines;
                var  height = (lines.Length + 1) * ShiroiStyles.SingleLineHeight;
                var  rect   = GUILayoutUtility.GetRect(10, height, ShiroiStyles.ExpandWidthOption);
                Rect iconRect;
                Rect messagesRect;
                rect.Split(ShiroiStyles.IconSize, out iconRect, out messagesRect);

                GUI.backgroundColor = ShiroiStyles.GetColor(errorMessage.Level);
                GUI.Box(rect, GUIContent.none);
                GUI.Box(iconRect, ShiroiStyles.GetContent(errorMessage.Level));
                var index = errorMessage.TokenIndex;
                var token = cutscene[index];
                var label = string.Format("Token #{0} ({1})", index, token.GetType().Name);
                GUI.Label(messagesRect.GetLine(0), label, ShiroiStyles.Bold);
                for (uint i = 0; i < lines.Length; i++)
                {
                    var pos = messagesRect.GetLine(i + 1);
                    GUI.Label(pos, lines[i]);
                }
            }
            GUILayout.Space(ShiroiStyles.SpaceHeight);
            GUI.backgroundColor = init;
        }
Пример #17
0
        public static void CheckErrors(CutsceneEditor editor, List <ErrorMessage> errors)
        {
            var cutscene = editor.Cutscene;
            var total    = cutscene.Count;

            for (var i = 0; i < total; i++)
            {
                var token  = cutscene[i];
                var mapped = MappedToken.For(token);
                foreach (var checker in Checkers)
                {
                    for (var fieldIndex = 0; fieldIndex < mapped.SerializedFields.Length; fieldIndex++)
                    {
                        var serializedField = mapped.SerializedFields[fieldIndex];
                        var value           = serializedField.GetValue(token);
                        checker.Check(editor, editor.ErrorManager, i, token, value, fieldIndex, serializedField);
                    }
                }
            }
        }
Пример #18
0
        public void OnEnd(ErrorManager obj, CutsceneEditor editor)
        {
            var cutscene = editor.Cutscene;

            foreach (var future in cutscene.FutureManager.Futures)
            {
                var pIndex = future.Provider;
                if (pIndex >= cutscene.Count)
                {
                    continue;
                }
                var provider = cutscene[pIndex];
                var id       = future.Id;
                if (GetUses(id) > 0)
                {
                    continue;
                }
                var msg = string.Format("Future {0} ({1}) is never used!", future.Name, id);
                obj.NotifyError(pIndex, -1, ErrorLevel.Medium, msg);
            }
        }
Пример #19
0
        public override void Check(
            CutsceneEditor editor,
            ErrorManager manager,
            int tokenIndex,
            Token token,
            object value,
            int fieldIndex,
            FieldInfo info)
        {
            if (Attribute.GetCustomAttribute(info, typeof(NullSupportedAttribute)) != null)
            {
                return;
            }
            if (value != null)
            {
                return;
            }
            var msg = string.Format("Field {0} is null!", info.Name);

            manager.NotifyError(tokenIndex, fieldIndex, ErrorLevel.High, msg, ShiroiStyles.NullSupportedMessage);
        }
Пример #20
0
        //TODO: Make this less horrible
        public override void Draw(CutsceneEditor editor, CutscenePlayer player, Cutscene cutscene, Rect rect,
                                  int tokenIndex, GUIContent name, Reference <T> value, Type valueType, FieldInfo fieldInfo, Setter setter)
        {
            if (value == null)
            {
                value = new Reference <T>();
            }
            GUIContent label;
            var        found = player == null ? null : value.Resolve(player);

            switch (value.Type)
            {
            case Reference.ReferenceType.Future:
                label = name;
                break;

            case Reference.ReferenceType.Exposed:
                label = ExposedReferenceDrawer <T> .GetLabel(found, value.PropertyName, new GUIContent(name));

                break;

            default:
                return;
            }
            var labelWidth = GUIStyle.none.CalcSize(new GUIContent(label)).x;
            var r2         = rect.SubRect(TypeWidth, rect.height, labelWidth + LabelOffset);

            value.Type = (Reference.ReferenceType)EditorGUI.EnumPopup(r2, value.Type);
            switch (value.Type)
            {
            case Reference.ReferenceType.Exposed:
                value.Id = DrawExposed(value, player, rect, name);
                break;

            case Reference.ReferenceType.Future:
                value.Id = DrawFuture(value, cutscene, rect, name, tokenIndex);
                break;
            }
            setter(value);
        }
Пример #21
0
        public override void Check(
            CutsceneEditor editor,
            ErrorManager manager,
            int tokenIndex,
            Token token,
            object value,
            int fieldIndex,
            FieldInfo info)
        {
            if (Attribute.GetCustomAttribute(info, typeof(NullSupportedAttribute)) != null)
            {
                return;
            }
            var fieldType = info.FieldType;

            if (!fieldType.IsGenericType || fieldType.GetGenericTypeDefinition() != ExposedReferenceType)
            {
                return;
            }
            var generic          = fieldType.GetGenericArguments()[0];
            var propertyNameInfo = GetPropertyNameInfo(generic);
            var defaultValueInfo = GetDefaultValueInfo(generic);
            var propertyName     = (PropertyName)propertyNameInfo.GetValue(value);
            var defaultObject    = defaultValueInfo.GetValue(value) as Object;

            if (MimicExposedResolve(editor.Player, propertyName, defaultObject) != null)
            {
                return;
            }
            var msg = string.Format(
                "Couldn't resolve exposed reference of id {0} in field {1}.",
                propertyName,
                info.Name);

            manager.NotifyError(tokenIndex, fieldIndex, ErrorLevel.High, msg, ShiroiStyles.NullSupportedMessage);
        }
Пример #22
0
 public override void Draw(CutsceneEditor editor, CutscenePlayer player, Cutscene cutscene, Rect rect, int tokenIndex, GUIContent name, ExposedReference <T> value, Type valueType, FieldInfo fieldInfo, Setter setter)
 {
     setter(DrawExposed(player, value, name, rect));
 }
Пример #23
0
 public CutsceneTracksView(CutsceneEditor ed)
 {
     this.ed = ed;
 }
Пример #24
0
 public ContextWindow(CutsceneEditor currentEditor)
 {
     CurrentEditor = currentEditor;
 }
Пример #25
0
 //readonly CutsceneEditor ed;
 public CutscenePreview(CutsceneEditor ed)
 {
     //this.ed = ed;
 }
Пример #26
0
 public CutsceneOptions(CutsceneEditor ed)
 {
     this.ed = ed;
 }
Пример #27
0
 public CutsceneTrackControls(CutsceneEditor ed)
 {
     this.ed = ed;
 }
Пример #28
0
 public CutsceneNavigation(CutsceneEditor ed)
 {
     this.ed = ed;
     playbackControls = new CutscenePlaybackControls(ed);
     timecodeBar      = new CutsceneTimecodeBar(ed);
 }
Пример #29
0
 public abstract void Draw(CutsceneEditor editor, CutscenePlayer player, Cutscene cutscene, Rect rect, int tokenIndex, GUIContent name, object value, Type valueType, FieldInfo fieldInfo, Setter setter);
Пример #30
0
 public void OnBegin(ErrorManager manager, CutsceneEditor editor)
 {
     uses.Clear();
 }
Пример #31
0
 public CutsceneMediaWindow(CutsceneEditor ed)
 {
     this.ed = ed;
 }
Пример #32
0
 public CutsceneTimecodeBar(CutsceneEditor ed)
 {
     this.ed = ed;
 }
Пример #33
0
 public override void Draw(CutsceneEditor editor, CutscenePlayer player, Cutscene cutscene, Rect rect, int tokenIndex, GUIContent name, Quaternion value, Type valueType, FieldInfo fieldInfo, Setter setter)
 {
     setter(Quaternion.Euler(EditorGUI.Vector3Field(rect, name, value.eulerAngles)));
 }
Пример #34
0
 public override void Draw(CutsceneEditor editor, CutscenePlayer player, Cutscene cutscene, Rect rect, int tokenIndex, GUIContent name, Vector3Int value, Type valueType, FieldInfo fieldInfo, Setter setter)
 {
     setter(EditorGUI.Vector3IntField(rect, name, value));
 }
Пример #35
0
 public CutsceneTrackInfo(CutsceneEditor ed)
 {
     this.ed = ed;
 }
Пример #36
0
 public override void Draw(CutsceneEditor editor, CutscenePlayer player, Cutscene cutscene, Rect rect,
                           int tokenIndex, GUIContent name, object value, Type valueType, FieldInfo fieldInfo, Setter setter)
 {
     EditorGUI.LabelField(rect,
                          string.Format("Couldn't find drawer for field '{0}' of type '{1}'", name, valueType.Name));
 }
 public TokenSelectorWindow(CutsceneEditor currentEditor)
 {
     CurrentEditor = currentEditor;
 }
Пример #38
0
 public CutsceneTools(CutsceneEditor ed)
 {
     this.ed = ed;
 }
Пример #39
0
 public static void OpenDirectorWindow()
 {
     CutsceneEditor.ShowWindow(null);
 }
Пример #40
0
 public CutsceneEffectsWindow(CutsceneEditor ed)
 {
     this.ed = ed;
 }
Пример #41
0
 public abstract void Check(CutsceneEditor editor, ErrorManager manager, int tokenIndex, Token token,
                            object value, int fieldIndex, FieldInfo info);